# nodes

node_type: n8n-nodes-wpforms.wpformsTrigger
package_name: n8n-nodes-wpforms
display_name: WPForms Trigger
description: Starts a workflow when a WPForms form is submitted
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: wpforms
author_github_url: https://github.com/awesomemotive/wpforms-n8n-nodes.git
npm_package_name: n8n-nodes-wpforms
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:33.347Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  ## n8n WPForms Trigger node

  NPM package name: `n8n-nodes-wpforms`

  This repository contains custom n8n nodes for WPForms integration, providing triggers and actions to automate workflows with WPForms data.

  ## Prerequisites

  You need the following installed on your development machine:

  * [git](https://git-scm.com/downloads)
  * Node.js and npm. Minimum version Node 20. You can find instructions on how to install both using nvm (Node Version Manager) for Linux, Mac, and WSL [here](https://github.com/nvm-sh/nvm). For Windows users, refer to Microsoft's guide to [Install NodeJS on Windows](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows).
  * Install n8n with:
    ```
    npm install n8n -g
    ```
  * Recommended: follow n8n's guide to [set up your development environment](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/).

  ## Build and Install the Node Package

  ### 1. Install Dependencies
  ```bash
  npm install
  ```

  ### 2. Build the Project
  ```bash
  npm run build
  ```
  This command will:
  - Clean the `dist` directory
  - Compile TypeScript files
  - Build icons using gulp
  - Generate the distributable files

  ### 3. Link the Package Locally
  ```bash
  npm link
  ```

  ### 4. Set Up Custom Nodes Directory
  ```bash
  # Create custom directory in n8n home
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom

  # Initialize npm in the custom directory
  npm init -y
  ```

  ### 5. Link Node to n8n Instance
  ```bash
  # Link your custom node to n8n (run from ~/.n8n/custom)
  npm link n8n-nodes-wpforms
  ```

  ### 6. Configure n8n Environment
  Set the environment variable to tell n8n where to find custom nodes:

  **For Linux/Mac:**
  ```bash
  export N8N_CUSTOM_EXTENSIONS="$HOME/.n8n/custom"
  ```

  **For Windows (PowerShell):**
  ```powershell
  $env:N8N_CUSTOM_EXTENSIONS="$HOME\.n8n\custom"
  ```

  ### 7. Start n8n
  ```bash
  n8n start
  ```

  ### 8. Verify Installation
  1. Open n8n in your browser (usually `http://localhost:5678`)
  2. Look for your custom nodes in the node palette
  3. You should see "WPForms" nodes available

  ## Setup and Usage Instructions for WPForms Trigger Node

  ### Prerequisites

  - A WordPress site with the WPForms plugin + WPForms n8n addon installed and activated.
  - An n8n instance.

  ### Installation

  1.  Go to your n8n instance.
  2.  Go to **Settings > Community Nodes**.
  3.  Click **Install a community node**.
  4.  Enter `n8n-nodes-wpforms` in the **npm package name** field.
  5.  Click **Install**.

  ### Configuration

  1.  In your n8n workflow, add the **WPForms Trigger** node.
  2.  Configure the node settings:
      *   **Secret Key**: Enter a secret key. This key must match the secret key configured in your WPForms n8n addon settings. It is used to verify the integrity of the data received.
      *   **Timestamp Skew**: Set the allowed time difference in seconds between your server and the WPForms server. The default is 300 seconds.
      *   **Output Schema**: Choose the output format. 'Default' provides a structured JSON object, while 'Raw' provides the raw request body and headers.
  3.  The node will display a webhook URL. Copy this URL.
  4.  In the Form Builder, go to the Marketing > n8n tab.
  5.  Enable n8n integration.
  6.  Paste the webhook URL from n8n.
  7.  Copy Secret Key and paste it to the WPForms Trigger node.
  8.  Save your form settings.

  ### Usage

  Now, whenever the selected form is submitted, it will trigger your n8n workflow. The form data will be available in the node's output.

  ## Development Workflow 

  In Linux/MacOS or Windows using PS 7 shell:

  ```bash
  cd /path/to/wpforms-n8n-nodes/

  # Build and link after changes
  npm run build && npm link

  # Watch for changes during development
  npm run dev
  ```

  In your n8n instance, re-link the node and restart n8n:
  ```bash
  cd ~/.n8n/custom

  # Re-link node and restart n8n:
  npm link n8n-nodes-wpforms && n8n start
  ```

  ## Testing Your Node 

  ```bash
  # Check for linting errors
  npm run lint

  # Auto-fix linting errors when possible
  npm run lintfix
  ```

  ## Publishing  

  First you need to bump the version. This needs to be reflected both in the package.json & the package-lock.json.  

  You can also do that using `npm version` - this will also create the new tag:  

  ```bash
  npm version patch  # for bug fixes (0.1.2 → 0.1.3)
  npm version minor  # for new features (0.1.2 → 0.2.0)
  npm version major  # for breaking changes (0.1.2 → 1.0.0)
  ```

  Next, you need to push the change in the main branch and also create/push a tag starting with `v`, e.g. v0.1.3

  We are publishing automatically to npm each time a tag is pushed in the repo.  
  Alongside that, a GitHub Release is also created.  

  ## More information

  Refer to our [documentation on creating nodes](https://docs.n8n.io/integrations/creating-nodes/) for detailed information on building your own nodes.

  ## License

  [MIT](https://github.com/n8n-io/n8n-nodes-starter/blob/master/LICENSE.md)

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow automatically when a form is submitted via the WPForms plugin on a WordPress site.","capabilities":["Starts a workflow on form submission","Validates data integrity using a secret key","Configurable timestamp skew tolerance","Flexible output schema (structured JSON or raw request body/headers)"],"authentication":"Secret Key (must match WPForms n8n addon configuration)","commonUseCases":["Lead capture automation","Contact form follow-up workflows","Data validation and processing triggers"],"limitations":["Requires WPForms plugin and WPForms n8n addon to be installed on the WordPress site","Requires manual installation of the custom n8n node package"],"relatedNodes":["n8n-nodes-wpforms.wpformsAction","n8n-nodes-wpforms.wpformsWebhook"]}


node_type: n8n-nodes-tomba.tomba
package_name: n8n-nodes-tomba
display_name: Tomba
description: Consume Tomba API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: mohamed_ben
author_github_url: https://github.com/tomba-io/
npm_package_name: n8n-nodes-tomba
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.348Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "domain",
      "options": [
        {
          "name": "Company",
          "value": "company",
          "description": "Search for companies using natural language or structured filters"
        },
        {
          "name": "Custom API Call",
          "value": "customApiCall",
          "description": "Make an authenticated HTTP request to any Tomba API endpoint. Tomba auth is handled automatically."
        },
        {
          "name": "Domain",
          "value": "domain",
          "description": "Domain search, status, location, similar, technology, autocomplete"
        },
        {
          "name": "Email",
          "value": "email",
          "description": "Email finder, verifier, sources, enrichment, count, format"
        },
        {
          "name": "Finder",
          "value": "finder",
          "description": "Author finder, LinkedIn finder"
        },
        {
          "name": "Phone",
          "value": "phone",
          "description": "Phone finder, phone validator"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "domainSearch",
      "options": [
        {
          "name": "Autocomplete",
          "value": "Autocomplete",
          "action": "Find company names and retrieve logo and domain information",
          "description": "Find company names and retrieve logo and domain information"
        },
        {
          "name": "Domain Search",
          "value": "domainSearch",
          "action": "Get every email address found on the internet using a given domain name with sources",
          "description": "Get every email address found on the internet using a given domain name, with sources"
        },
        {
          "name": "Domain Status",
          "value": "DomainStatus",
          "action": "Find domain status if is webmail or disposable",
          "description": "Find domain status if is webmail or disposable"
        },
        {
          "name": "Location",
          "value": "location",
          "action": "Get employees location based on the domain name",
          "description": "Get employees location based on the domain name"
        },
        {
          "name": "Similar",
          "value": "similar",
          "action": "Retrieve similar domains based on a specific domain",
          "description": "Retrieve similar domains based on a specific domain"
        },
        {
          "name": "Technology",
          "value": "technology",
          "action": "Retrieve the technologies used by a specific domain",
          "description": "Retrieve the technologies used by a specific domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "emailFinder",
      "options": [
        {
          "name": "Email Count",
          "value": "EmailCount",
          "action": "Find total email addresses we have for one domain",
          "description": "Find total email addresses we have for one domain"
        },
        {
          "name": "Email Enrichment",
          "value": "emailEnrichment",
          "action": "Look up person and company data based on an email",
          "description": "Look up person and company data based on an email"
        },
        {
          "name": "Email Finder",
          "value": "emailFinder",
          "action": "Generate or retrieve the most likely email address from a domain name a first name and a last name",
          "description": "Generate or retrieve the most likely email address from a domain name, a first name and a last name"
        },
        {
          "name": "Email Format",
          "value": "emailFormat",
          "action": "Retrieve the email format patterns used by a specific domain",
          "description": "Retrieve the email format patterns used by a specific domain"
        },
        {
          "name": "Email Sources",
          "value": "emailSources",
          "action": "Find email address source somewhere on the web",
          "description": "Find email address source somewhere on the web"
        },
        {
          "name": "Email Verifier",
          "value": "emailVerifier",
          "action": "Verify the deliverability of an email address",
          "description": "Verify the deliverability of an email address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "authorFinder",
      "options": [
        {
          "name": "Author Finder",
          "value": "authorFinder",
          "action": "Generate or retrieve the most likely email address from a blog post url",
          "description": "Generate or retrieve the most likely email address from a blog post URL"
        },
        {
          "name": "LinkedIn Finder",
          "value": "linkedinFinder",
          "action": "Generate or retrieve the most likely email address from a linkedin url",
          "description": "Generate or retrieve the most likely email address from a LinkedIn URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "finder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "phoneFinder",
      "options": [
        {
          "name": "Phone Finder",
          "value": "phoneFinder",
          "action": "Search for phone numbers based on an email domain or linkedin url",
          "description": "Search for phone numbers based on an email, domain, or LinkedIn URL"
        },
        {
          "name": "Phone Validator",
          "value": "phoneValidator",
          "action": "Validate a phone number and retrieve its associated information",
          "description": "Validate a phone number and retrieve its associated information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phone"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchCompanies",
      "options": [
        {
          "name": "Search Companies",
          "value": "searchCompanies",
          "action": "Search for companies using natural language queries or structured filters",
          "description": "Search for companies using natural language queries or structured filters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "customApiCall",
      "options": [
        {
          "name": "Custom API Call",
          "value": "customApiCall",
          "action": "Make a custom authenticated api call to the tomba api",
          "description": "Make an authenticated HTTP request to any Tomba API endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customApiCall"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Autocomplete",
      "value": "Autocomplete",
      "action": "Find company names and retrieve logo and domain information",
      "description": "Find company names and retrieve logo and domain information",
      "resource": "domain"
    },
    {
      "name": "Domain Search",
      "value": "domainSearch",
      "action": "Get every email address found on the internet using a given domain name with sources",
      "description": "Get every email address found on the internet using a given domain name, with sources",
      "resource": "domain"
    },
    {
      "name": "Domain Status",
      "value": "DomainStatus",
      "action": "Find domain status if is webmail or disposable",
      "description": "Find domain status if is webmail or disposable",
      "resource": "domain"
    },
    {
      "name": "Location",
      "value": "location",
      "action": "Get employees location based on the domain name",
      "description": "Get employees location based on the domain name",
      "resource": "domain"
    },
    {
      "name": "Similar",
      "value": "similar",
      "action": "Retrieve similar domains based on a specific domain",
      "description": "Retrieve similar domains based on a specific domain",
      "resource": "domain"
    },
    {
      "name": "Technology",
      "value": "technology",
      "action": "Retrieve the technologies used by a specific domain",
      "description": "Retrieve the technologies used by a specific domain",
      "resource": "domain"
    },
    {
      "name": "Email Count",
      "value": "EmailCount",
      "action": "Find total email addresses we have for one domain",
      "description": "Find total email addresses we have for one domain",
      "resource": "email"
    },
    {
      "name": "Email Enrichment",
      "value": "emailEnrichment",
      "action": "Look up person and company data based on an email",
      "description": "Look up person and company data based on an email",
      "resource": "email"
    },
    {
      "name": "Email Finder",
      "value": "emailFinder",
      "action": "Generate or retrieve the most likely email address from a domain name a first name and a last name",
      "description": "Generate or retrieve the most likely email address from a domain name, a first name and a last name",
      "resource": "email"
    },
    {
      "name": "Email Format",
      "value": "emailFormat",
      "action": "Retrieve the email format patterns used by a specific domain",
      "description": "Retrieve the email format patterns used by a specific domain",
      "resource": "email"
    },
    {
      "name": "Email Sources",
      "value": "emailSources",
      "action": "Find email address source somewhere on the web",
      "description": "Find email address source somewhere on the web",
      "resource": "email"
    },
    {
      "name": "Email Verifier",
      "value": "emailVerifier",
      "action": "Verify the deliverability of an email address",
      "description": "Verify the deliverability of an email address",
      "resource": "email"
    },
    {
      "name": "Author Finder",
      "value": "authorFinder",
      "action": "Generate or retrieve the most likely email address from a blog post url",
      "description": "Generate or retrieve the most likely email address from a blog post URL",
      "resource": "finder"
    },
    {
      "name": "LinkedIn Finder",
      "value": "linkedinFinder",
      "action": "Generate or retrieve the most likely email address from a linkedin url",
      "description": "Generate or retrieve the most likely email address from a LinkedIn URL",
      "resource": "finder"
    },
    {
      "name": "Phone Finder",
      "value": "phoneFinder",
      "action": "Search for phone numbers based on an email domain or linkedin url",
      "description": "Search for phone numbers based on an email, domain, or LinkedIn URL",
      "resource": "phone"
    },
    {
      "name": "Phone Validator",
      "value": "phoneValidator",
      "action": "Validate a phone number and retrieve its associated information",
      "description": "Validate a phone number and retrieve its associated information",
      "resource": "phone"
    },
    {
      "name": "Search Companies",
      "value": "searchCompanies",
      "action": "Search for companies using natural language queries or structured filters",
      "description": "Search for companies using natural language queries or structured filters",
      "resource": "company"
    },
    {
      "name": "Custom API Call",
      "value": "customApiCall",
      "action": "Make a custom authenticated api call to the tomba api",
      "description": "Make an authenticated HTTP request to any Tomba API endpoint",
      "resource": "customApiCall"
    }
  ]

npm_readme:
  # [<img src="https://tomba.io/logo.svg" alt="Tomba" width="25"/>](https://tomba.io/) Tomba.io n8n Nodes

  This is an n8n community node. It lets you use Tomba.io in your n8n workflows.

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

  [Installation](#installation)  
  [Operations](#operations)  
  [Credentials](#credentials) <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage) <!-- delete if not using this section -->  
  [Resources](#resources)  
  [Version history](#version-history) <!-- delete if not using this section -->

  ## Installation

  ### Install from n8n Integrations (Recommended)

  The easiest way to install Tomba is directly from the [n8n Tomba integration page](https://n8n.io/integrations/tomba/):

  1. **Sign in to n8n** — Sign in to n8n, open the editor, and click **+** in the top right to open the Nodes panel.
  2. **Search for Tomba** — Type "Tomba" in the search field to find the node.
  3. **Add to Workflow** — Click on the Tomba node to add it to your workflow.

  ### Install via Community Nodes

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  1. Go to Settings (Cogwheel)
  2. Click on "Community Nodes"
  3. Enter "n8n-nodes-tomba" into the text box
  4. Click on "I understand the risk ..."
  5. Click on "Install"

  ## Operations

  ### Company

  - **[Search Companies](https://developer.tomba.io/#reveal-search)** - Search for companies using natural language queries or structured filters (location, industry, size, technologies, and more)

  ### Domain

  - **[Autocomplete](https://docs.tomba.io/api/domain-suggestions#get-domain-suggestions)** - Find company names and retrieve logo and domain information
  - **[Domain Search](https://docs.tomba.io/api/finder#domain-search)** - Get every email address found on the internet using a given domain name, with sources
  - **[Domain Status](https://docs.tomba.io/api/~endpoints#domain-status)** - Find domain status if is webmail or disposable
  - **[Location](https://docs.tomba.io/api/finder#location)** - Get employees location based on the domain name
  - **[Similar](https://docs.tomba.io/api/~endpoints#similar)** - Retrieve similar domains based on a specific domain
  - **[Technology](https://docs.tomba.io/api/~endpoints#technology)** - Retrieve the technologies used by a specific domain

  ### Email

  - **[Email Count](https://docs.tomba.io/api/finder#email-count)** - Find total email addresses we have for one domain
  - **[Email Enrichment](https://docs.tomba.io/api/finder#email-enrichment)** - Look up person and company data based on an email
  - **[Email Finder](https://docs.tomba.io/api/finder#email-finder)** - Generate or retrieve the most likely email address from a domain name, a first name and a last name
  - **[Email Format](https://docs.tomba.io/api/finder#email-format)** - Retrieve the email format patterns used by a specific domain
  - **[Email Sources](https://docs.tomba.io/api/~endpoints#email-sources)** - Find email address source somewhere on the web
  - **[Email Verifier](https://docs.tomba.io/api/verifier#email-verifier)** - Verify the deliverability of an email address

  ### Finder

  - **[Author Finder](https://docs.tomba.io/api/finder#author-finder)** - Generate or retrieve the most likely email address from a blog post URL
  - **[LinkedIn Finder](https://docs.tomba.io/api/finder#linkedin-finder)** - Generate or retrieve the most likely email address from a LinkedIn URL

  ### Phone

  - **[Phone Finder](https://docs.tomba.io/api/phone#phone-finder)** - Search for phone numbers based on an email, domain, or LinkedIn URL
  - **[Phone Validator](https://docs.tomba.io/api/phone#phone-validator)** - Validate a phone number and retrieve its associated information

  ### Custom API Call

  Make any authenticated HTTP request directly to the [Tomba API](https://developer.tomba.io/) — useful for endpoints not yet covered by a dedicated operation. Tomba credentials (API Key & Secret) are automatically injected into every request.

  ## Credentials

  To use the Tomba node, you need to authenticate with your Tomba API credentials. Follow these steps to set up authentication:

  ### Getting Your API Credentials

  1. Sign up for a free account at [Tomba.io](https://tomba.io)
  2. Navigate to your [API Settings](https://app.tomba.io/api) in your Tomba dashboard
  3. Copy your **API Key** and **Secret Key**

  ### Setting Up Credentials in n8n

  1. In your n8n workflow, add a Tomba node
  2. Click on the **Credential to connect with** dropdown
  3. Select **Create New** and choose **Tomba API**
  4. Enter your credentials:
     - **API Key**: Your Tomba API key
     - **Secret**: Your Tomba secret key
  5. Click **Save** to store your credentials securely

  The Tomba node supports all Tomba API features, including email finding, verification, enrichment, phone finding, company search, and domain analysis. Your credentials will be used to authenticate all requests to the Tomba API.

  ### Using Tomba Credentials with the HTTP Request Node

  You can also use your Tomba credentials directly in the n8n **HTTP Request** node to call any Tomba API endpoint:

  1. Add an **HTTP Request** node to your workflow
  2. Set **Authentication** to **Predefined Credential Type**
  3. Set **Credential Type** to **Tomba API**
  4. Select your existing Tomba credential
  5. Configure the URL (`https://api.tomba.io/v1/...`) and request details

  n8n will automatically inject the `X-Tomba-Key` and `X-Tomba-Secret` headers on every request. See the [Custom API operations docs](https://docs.n8n.io/integrations/custom-operations/) for more details.

  ## Usage

  The Tomba node provides powerful email intelligence capabilities for your n8n workflows. Here are some common usage examples:

  ### Example 1: Email Verification Workflow

  This workflow verifies the deliverability of email addresses:

  **Nodes needed:**

  - **Manual Trigger** (or any trigger node)
  - **Tomba** node

  **Setup:**

  1. Add a Manual Trigger node to start your workflow
  2. Add a Tomba node and connect it to the trigger
  3. Configure the Tomba node:
     - **Operation**: Email Verifier
     - **Email**: Enter the email address to verify (e.g., `test@example.com`)
  4. Execute the workflow to get verification results

  ### Example 2: Domain Email Discovery

  Find all email addresses associated with a company domain:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with these settings:
     - **Operation**: Domain Search
     - **Domain**: Company domain (e.g., `stripe.com`)
     - **Limit**: Number of results to return
     - **Filters**: Optional filters for department, type, etc.

  ### Example 3: Email Finder for Lead Generation

  Generate email addresses using names and company domains:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Operation**: Email Finder
     - **Domain**: Target company domain
     - **First Name**: Contact's first name
     - **Last Name**: Contact's last name

  ### Example 4: Phone Number Discovery

  Find phone numbers associated with emails or domains:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Operation**: Phone Finder
     - **Search Type**: Choose Email, Domain, or LinkedIn
     - Configure the relevant field based on your search type

  ### Example 5: Company Search

  Search for companies matching specific criteria:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Resource**: Company
     - **Operation**: Search Companies
     - **Page**: `1`
     - **Filters**: Expand to add any combination of:
       - **Location Country** → Include: `US, CA`
       - **Industry** → Include: `SaaS, Fintech`
       - **Size** → Include: `51-200, 201-500`
       - **Technologies** → Include: `React, AWS` / Exclude: `PHP`
       - **Founded**, **Revenue**, **Type**, **Keywords**, and more

  ### Example 6: Custom API Call

  Call any Tomba API endpoint not covered by a dedicated operation:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Resource**: Custom API Call
     - **Method**: `GET` (or POST, PUT, etc.)
     - **Endpoint**: `/me` (relative to `https://api.tomba.io/v1`)
     - Optionally add **Query Parameters**, **Body**, or extra **Headers**

  Tomba credentials are injected automatically — no manual header setup needed.

  ### Example 7: Company Intelligence Workflow

  Gather comprehensive company data:

  **Setup:**

  1. **Domain Search**: Find all emails for a domain
  2. **Location**: Get company location data
  3. **Technology**: Discover technologies used
  4. **Similar**: Find similar companies

  ### Pro Tips

  - Use the **Return All** option in Domain Search for comprehensive results
  - Combine multiple operations in sequence for enriched data
  - Use filters in Domain Search to target specific departments
  - In **Search Companies**, combine multiple filters (location, industry, size, technologies) for precise targeting
  - Use **Custom API Call** to access any new Tomba endpoint without waiting for a dedicated node update
  - The **HTTP Request** node with Tomba credentials works identically to Custom API Call — choose whichever fits your workflow
  - Cache results using n8n's built-in functionality to avoid duplicate API calls
  - Set up error handling for rate limits and invalid inputs

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Tomba Email Finder](https://tomba.io)
  - [Tomba API docs](https://docs.tomba.io/introduction)
  - [Tomba knowledge base](https://help.tomba.io/en/)

  ## Test the node

  You can test your node as you build it by running it in a local n8n instance.

  ### Install n8n using npm

  ```bash
  npm install n8n -g
  ```

  ### Clone git repository

  ```bash
  git clone https://github.com/tomba-io/n8n-nodes-tomba.git
  cd n8n-nodes-tomba/
  ```

  ### Available Scripts

  | Script      | Command                  | Description                              |
  | ----------- | ------------------------ | ---------------------------------------- |
  | Build       | `npm run build`          | Compile the node for production          |
  | Watch       | `npm run build:watch`    | Watch for changes and recompile          |
  | Dev         | `npm run dev`            | Run the node in development mode         |
  | Lint        | `npm run lint`           | Check code for linting errors            |
  | Lint Fix    | `npm run lint:fix`       | Automatically fix linting errors         |
  | Release     | `npm run release`        | Create a new release                     |
  | Pre-publish | `npm run prepublishOnly` | Run pre-release checks before publishing |

  ### Publish it locally

  ```bash
  # In the node directory
  npm run build
  npm link
  ```

  ### Install the node into your local n8n instance

  ```bash
  # In the nodes directory within your n8n installation
  npm link n8n-nodes-tomba
  ```

  > Make sure you run <b>npm link n8n-nodes-tomba</b> in the nodes directory within your n8n installation. This is probably something like <b>~/.n8n/nodes/</b>

  ## More information

  Refer to N8N's [documentation on creating nodes](https://docs.n8n.io/integrations/creating-nodes/) for detailed information on building your own nodes.

  ## License

  [MIT](https://github.com/n8n-io/n8n-nodes-starter/blob/master/LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Tomba.io API to perform email intelligence, domain analysis, company research, and contact discovery within automated workflows.","capabilities":["Search companies using natural language or structured filters","Find and verify email addresses by domain, name, or LinkedIn URL","Autocomplete domain names and retrieve logo/domain info","Get domain status (webmail, disposable, etc.)","Retrieve employee locations based on domain","Find similar domains and technologies used by a domain","Count total emails for a domain","Enrich person and company data from an email","Generate likely email addresses from first/last name and domain","Find email sources on the web"],"authentication":"API Key & Secret Key required","commonUseCases":["Lead generation and prospecting","Email verification and deliverability checks","Sales outreach automation","Domain research and competitor analysis","Employee directory building"],"limitations":["Community node (requires manual installation if not using n8n Integrations)","Requires valid Tomba.io API credentials","Subject to Tomba's API rate limits and terms of service"],"relatedNodes":["HTTP Request","Webhook","Code"]}


node_type: n8n-nodes-linkupapi.linkup
package_name: n8n-nodes-linkupapi
display_name: Linkup API for LinkedIn
description: Connect your AI agent to LinkedIn and other B2B channels
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: linkup_eliott
author_github_url: https://github.com/Eliott-89/
npm_package_name: n8n-nodes-linkupapi
npm_version: 4.0.65
community_fetched_at: 2026-07-14T14:40:33.349Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "profile",
      "options": [
        {
          "name": "Profiles",
          "value": "profile"
        },
        {
          "name": "Companies",
          "value": "company"
        },
        {
          "name": "Network",
          "value": "network"
        },
        {
          "name": "Messages",
          "value": "message"
        },
        {
          "name": "Posts",
          "value": "post"
        },
        {
          "name": "Recruiter",
          "value": "recruiter"
        },
        {
          "name": "Company API",
          "value": "company api"
        },
        {
          "name": "Person API",
          "value": "person api"
        },
        {
          "name": "Mail API",
          "value": "mail api"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get my profile",
      "options": [
        {
          "name": "Get My Profile",
          "value": "get my profile",
          "action": "Get my LinkedIn profile",
          "description": "Get your LinkedIn profile information"
        },
        {
          "name": "Get Profile Information",
          "value": "get profile info",
          "action": "Get a profile's information",
          "description": "Get profile information (profile/info)"
        },
        {
          "name": "Search Profile",
          "value": "search profile",
          "action": "Search for profiles",
          "description": "Search LinkedIn profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "profile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search companies",
      "options": [
        {
          "name": "Search Companies",
          "value": "search companies",
          "action": "Search for companies",
          "description": "Search for companies on LinkedIn"
        },
        {
          "name": "Get Company Information",
          "value": "get company info",
          "action": "Get company information",
          "description": "Get detailed information about a company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send connection request",
      "options": [
        {
          "name": "Send Connection Request",
          "value": "send connection request",
          "action": "Send a connection request",
          "description": "Send a connection request to a profile"
        },
        {
          "name": "Get Connections",
          "value": "get connections",
          "action": "Get connections",
          "description": "Get your LinkedIn connections"
        },
        {
          "name": "Accept Connection Invitation",
          "value": "accept connection invitation",
          "action": "Accept connection invitation",
          "description": "Accept a received connection invitation"
        },
        {
          "name": "Get Received Invitations",
          "value": "get received invitations",
          "action": "Get received invitations",
          "description": "Get received connection invitations"
        },
        {
          "name": "Get Sent Invitations",
          "value": "get sent invitations",
          "action": "Get sent invitations",
          "description": "Get sent connection invitations"
        },
        {
          "name": "Withdraw Invitation",
          "value": "withdraw invitation",
          "action": "Withdraw an invitation",
          "description": "Withdraw a sent invitation"
        },
        {
          "name": "Get Network Recommendations",
          "value": "get network recommendations",
          "action": "Get network recommendations",
          "description": "Get network recommendations"
        },
        {
          "name": "Get Invitation Status",
          "value": "get invitation status",
          "action": "Check invitation status",
          "description": "Check invitation status for a profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "network"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send message",
      "options": [
        {
          "name": "Send Message",
          "value": "send message",
          "action": "Send a message",
          "description": "Send a message to a connection"
        },
        {
          "name": "Get Message Inbox",
          "value": "get message inbox",
          "action": "Get message inbox",
          "description": "Get your message inbox"
        },
        {
          "name": "Get Conversation Messages",
          "value": "get conversation messages",
          "action": "Get conversation messages",
          "description": "Get messages from a conversation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get post reactions",
      "options": [
        {
          "name": "Get Post Reactions",
          "value": "get post reactions",
          "action": "Get post reactions",
          "description": "Get reactions on a post"
        },
        {
          "name": "React To Post",
          "value": "react to post",
          "action": "React to a post",
          "description": "React to a post"
        },
        {
          "name": "Repost Content",
          "value": "repost content",
          "action": "Repost content",
          "description": "Repost content"
        },
        {
          "name": "Add Comment To Post",
          "value": "add comment to post",
          "action": "Add comment to post",
          "description": "Add a comment to a post"
        },
        {
          "name": "Get Comments",
          "value": "get comments",
          "action": "Get post comments",
          "description": "Get comments on a post"
        },
        {
          "name": "Answer Comment",
          "value": "answer comment",
          "action": "Answer a comment",
          "description": "Answer a comment"
        },
        {
          "name": "Search Posts",
          "value": "search posts",
          "action": "Search for posts",
          "description": "Search for posts"
        },
        {
          "name": "Create Post",
          "value": "create post",
          "action": "Create a post",
          "description": "Create a new post"
        },
        {
          "name": "Get LinkedIn Feed",
          "value": "get linkedin feed",
          "action": "Get LinkedIn feed",
          "description": "Get your LinkedIn feed"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get candidates",
      "options": [
        {
          "name": "Get Candidates",
          "value": "get candidates",
          "action": "Get candidates",
          "description": "Get candidate list"
        },
        {
          "name": "Get Candidate CV",
          "value": "get candidate cv",
          "action": "Get candidate CV",
          "description": "Get candidate CV"
        },
        {
          "name": "Get Job Posts",
          "value": "get job posts",
          "action": "Get job posts",
          "description": "Get job posts"
        },
        {
          "name": "Publish Job",
          "value": "publish job",
          "action": "Publish a job",
          "description": "Publish a job"
        },
        {
          "name": "Close Job",
          "value": "close job",
          "action": "Close a job",
          "description": "Close a job"
        },
        {
          "name": "Create Job",
          "value": "create job",
          "action": "Create a job",
          "description": "Create a new job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recruiter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search companies",
      "options": [
        {
          "name": "Search Companies",
          "value": "search companies",
          "action": "Search for companies",
          "description": "Search for companies"
        },
        {
          "name": "Get Company Information",
          "value": "get company info",
          "action": "Get company information",
          "description": "Get company information"
        },
        {
          "name": "Get Company Information By Domain",
          "value": "get company info by domain",
          "action": "Get company information by domain",
          "description": "Get company information by domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company api"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search profiles",
      "options": [
        {
          "name": "Search Profiles",
          "value": "search profiles",
          "action": "Search for profiles",
          "description": "Search for profiles"
        },
        {
          "name": "Extract Profile Information",
          "value": "extract profile info",
          "action": "Extract profile information",
          "description": "Extract profile information (data/profil/info)"
        },
        {
          "name": "Profile Enrichment",
          "value": "profile enrichment",
          "action": "Enrich profile information",
          "description": "Enrich profile information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person api"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "email finder",
      "options": [
        {
          "name": "Email Finder",
          "value": "email finder",
          "action": "Find email addresses",
          "description": "Find email addresses from LinkedIn profiles"
        },
        {
          "name": "Email Reverse",
          "value": "email reverse",
          "action": "Reverse lookup email",
          "description": "Reverse lookup email to get LinkedIn profile information"
        },
        {
          "name": "Email Validate",
          "value": "email validate",
          "action": "Validate email address",
          "description": "Validate if an email address is valid and deliverable"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mail api"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get My Profile",
      "value": "get my profile",
      "action": "Get my LinkedIn profile",
      "description": "Get your LinkedIn profile information",
      "resource": "profile"
    },
    {
      "name": "Get Profile Information",
      "value": "get profile info",
      "action": "Get a profile's information",
      "description": "Get profile information (profile/info)",
      "resource": "profile"
    },
    {
      "name": "Search Profile",
      "value": "search profile",
      "action": "Search for profiles",
      "description": "Search LinkedIn profiles",
      "resource": "profile"
    },
    {
      "name": "Search Companies",
      "value": "search companies",
      "action": "Search for companies",
      "description": "Search for companies on LinkedIn",
      "resource": "company"
    },
    {
      "name": "Get Company Information",
      "value": "get company info",
      "action": "Get company information",
      "description": "Get detailed information about a company",
      "resource": "company"
    },
    {
      "name": "Send Connection Request",
      "value": "send connection request",
      "action": "Send a connection request",
      "description": "Send a connection request to a profile",
      "resource": "network"
    },
    {
      "name": "Get Connections",
      "value": "get connections",
      "action": "Get connections",
      "description": "Get your LinkedIn connections",
      "resource": "network"
    },
    {
      "name": "Accept Connection Invitation",
      "value": "accept connection invitation",
      "action": "Accept connection invitation",
      "description": "Accept a received connection invitation",
      "resource": "network"
    },
    {
      "name": "Get Received Invitations",
      "value": "get received invitations",
      "action": "Get received invitations",
      "description": "Get received connection invitations",
      "resource": "network"
    },
    {
      "name": "Get Sent Invitations",
      "value": "get sent invitations",
      "action": "Get sent invitations",
      "description": "Get sent connection invitations",
      "resource": "network"
    },
    {
      "name": "Withdraw Invitation",
      "value": "withdraw invitation",
      "action": "Withdraw an invitation",
      "description": "Withdraw a sent invitation",
      "resource": "network"
    },
    {
      "name": "Get Network Recommendations",
      "value": "get network recommendations",
      "action": "Get network recommendations",
      "description": "Get network recommendations",
      "resource": "network"
    },
    {
      "name": "Get Invitation Status",
      "value": "get invitation status",
      "action": "Check invitation status",
      "description": "Check invitation status for a profile",
      "resource": "network"
    },
    {
      "name": "Send Message",
      "value": "send message",
      "action": "Send a message",
      "description": "Send a message to a connection",
      "resource": "message"
    },
    {
      "name": "Get Message Inbox",
      "value": "get message inbox",
      "action": "Get message inbox",
      "description": "Get your message inbox",
      "resource": "message"
    },
    {
      "name": "Get Conversation Messages",
      "value": "get conversation messages",
      "action": "Get conversation messages",
      "description": "Get messages from a conversation",
      "resource": "message"
    },
    {
      "name": "Get Post Reactions",
      "value": "get post reactions",
      "action": "Get post reactions",
      "description": "Get reactions on a post",
      "resource": "post"
    },
    {
      "name": "React To Post",
      "value": "react to post",
      "action": "React to a post",
      "description": "React to a post",
      "resource": "post"
    },
    {
      "name": "Repost Content",
      "value": "repost content",
      "action": "Repost content",
      "description": "Repost content",
      "resource": "post"
    },
    {
      "name": "Add Comment To Post",
      "value": "add comment to post",
      "action": "Add comment to post",
      "description": "Add a comment to a post",
      "resource": "post"
    },
    {
      "name": "Get Comments",
      "value": "get comments",
      "action": "Get post comments",
      "description": "Get comments on a post",
      "resource": "post"
    },
    {
      "name": "Answer Comment",
      "value": "answer comment",
      "action": "Answer a comment",
      "description": "Answer a comment",
      "resource": "post"
    },
    {
      "name": "Search Posts",
      "value": "search posts",
      "action": "Search for posts",
      "description": "Search for posts",
      "resource": "post"
    },
    {
      "name": "Create Post",
      "value": "create post",
      "action": "Create a post",
      "description": "Create a new post",
      "resource": "post"
    },
    {
      "name": "Get LinkedIn Feed",
      "value": "get linkedin feed",
      "action": "Get LinkedIn feed",
      "description": "Get your LinkedIn feed",
      "resource": "post"
    },
    {
      "name": "Get Candidates",
      "value": "get candidates",
      "action": "Get candidates",
      "description": "Get candidate list",
      "resource": "recruiter"
    },
    {
      "name": "Get Candidate CV",
      "value": "get candidate cv",
      "action": "Get candidate CV",
      "description": "Get candidate CV",
      "resource": "recruiter"
    },
    {
      "name": "Get Job Posts",
      "value": "get job posts",
      "action": "Get job posts",
      "description": "Get job posts",
      "resource": "recruiter"
    },
    {
      "name": "Publish Job",
      "value": "publish job",
      "action": "Publish a job",
      "description": "Publish a job",
      "resource": "recruiter"
    },
    {
      "name": "Close Job",
      "value": "close job",
      "action": "Close a job",
      "description": "Close a job",
      "resource": "recruiter"
    },
    {
      "name": "Create Job",
      "value": "create job",
      "action": "Create a job",
      "description": "Create a new job",
      "resource": "recruiter"
    },
    {
      "name": "Search Companies",
      "value": "search companies",
      "action": "Search for companies",
      "description": "Search for companies",
      "resource": "company api"
    },
    {
      "name": "Get Company Information",
      "value": "get company info",
      "action": "Get company information",
      "description": "Get company information",
      "resource": "company api"
    },
    {
      "name": "Get Company Information By Domain",
      "value": "get company info by domain",
      "action": "Get company information by domain",
      "description": "Get company information by domain",
      "resource": "company api"
    },
    {
      "name": "Search Profiles",
      "value": "search profiles",
      "action": "Search for profiles",
      "description": "Search for profiles",
      "resource": "person api"
    },
    {
      "name": "Extract Profile Information",
      "value": "extract profile info",
      "action": "Extract profile information",
      "description": "Extract profile information (data/profil/info)",
      "resource": "person api"
    },
    {
      "name": "Profile Enrichment",
      "value": "profile enrichment",
      "action": "Enrich profile information",
      "description": "Enrich profile information",
      "resource": "person api"
    },
    {
      "name": "Email Finder",
      "value": "email finder",
      "action": "Find email addresses",
      "description": "Find email addresses from LinkedIn profiles",
      "resource": "mail api"
    },
    {
      "name": "Email Reverse",
      "value": "email reverse",
      "action": "Reverse lookup email",
      "description": "Reverse lookup email to get LinkedIn profile information",
      "resource": "mail api"
    },
    {
      "name": "Email Validate",
      "value": "email validate",
      "action": "Validate email address",
      "description": "Validate if an email address is valid and deliverable",
      "resource": "mail api"
    }
  ]

npm_readme:
  # @linkupapi/n8n-nodes

  Official n8n integration for LinkupAPI - Give your AI agents access to LinkedIn, WhatsApp, and real-time web data through a single powerful API


  ## Installation
  ```bash
  npm install n8n-nodes-linkupapi
  ```

  ## Quick Start

  ### 1. Get API Credentials

  Sign up at [linkupapi.com](https://www.linkupapi.com) and get your API key.

  ### 2. Configure in n8n

  Add your LinkupAPI credentials in n8n:
  - **Credential Type**: LinkupAPI
  - **API Key**: Your API key from the dashboard

  ### 3. Use in Workflows

  Drag and drop LinkupAPI nodes into your workflow and start automating.



  ## Features

  ### LinkedIn Automation
  - **Connection Requests**: Send personalized invitations programmatically
  - **Messaging**: Automate DM campaigns with text and media
  - **Engagement**: Post comments and interact with content at scale

  ### WhatsApp Integration
  - **Messaging**: Send WhatsApp messages
  - **Automation**: Build conversational workflows

  ### Email Intelligence
  - **Email Finder**: Discover professional email addresses
  - **Email Verifier**: Validate deliverability in real-time
  - **Reverse Lookup**: Get profile data from email addresses

  ### Web Crawler API
  - **People Search**: Find professionals with advanced filters (title, company, location, skills)
  - **Company Intelligence**: Get complete company data from any domain
  - **Company Search**: Filter companies by industry, size, funding, and location
  - **Hiring Signals**: Track companies actively recruiting
  - **Funding Data**: Source companies raising capital
  - **Sales Automation**: Prospect on LinkedIn, find emails, track hiring signals
  - **Recruitment**: Source candidates, monitor job postings, enrich profiles
  - **Lead Generation**: Search companies, enrich data, detect buying intent
  - **AI Agents**: Build autonomous workflows for outreach and intelligence

  ## API Endpoints

  | Category | Endpoints | Description |
  |----------|-----------|-------------|
  | **LinkedIn** | Invitations, Messages, Comments and more | Automate LinkedIn outreach |
  | **WhatsApp** | Messages | Send WhatsApp messages |
  | **Email** | Finder, Verifier, Reverse | Email intelligence tools |
  | **Web Crawler** | People Search, Company Search, Job Postings, Funding | Real-time B2B intelligence |

  ## Documentation

  - **Full API Docs**: [docs.linkupapi.com](https://docs.linkupapi.com/api-reference/introduction)
  - **Support**: support@linkupapi.com

  ## Compliance & Security

  - ✅ GDPR & CCPA compliant
  - ✅ Zero-storage architecture
  - ✅ Real-time processing only
  - ✅ Enterprise-grade security

  ## Requirements

  - Node.js: >= 18.10
  - n8n: Latest version
  - Valid Linkup API credentials

  ## License

  Proprietary - See [terms of use](https://www.linkupapi.com/legal/terms-of-use)


  ## Support

  - Website: [linkupapi.com](https://www.linkupapi.com)
  - Email: support@linkupapi.com
  - Documentation: [docs.linkupapi.com](https://docs.linkupapi.com/api-reference/introduction)

ai_documentation_summary:
  {"purpose":"This n8n node integrates LinkupAPI to connect AI agents with LinkedIn, WhatsApp, and real-time web data for B2B automation, outreach, and intelligence gathering.","capabilities":["Send personalized LinkedIn connection requests","Automate LinkedIn DM campaigns with text and media","Post comments and interact with LinkedIn content at scale","Send WhatsApp messages","Build conversational WhatsApp workflows","Discover professional email addresses (Email Finder)","Validate email deliverability (Email Verifier)","Retrieve profile data from email addresses (Reverse Lookup)","Search professionals with advanced filters (title, company, location, skills)","Retrieve company data from any domain"],"authentication":"API Key required","commonUseCases":["B2B sales outreach automation","LinkedIn lead generation and prospecting","Conversational WhatsApp marketing","Professional email discovery and verification","Candidate sourcing and recruitment"],"limitations":["Requires valid LinkupAPI credentials from linkupapi.com","Requires Node.js >= 18.10"],"relatedNodes":["n8n-nodes-linkupapi.linkup"]}


node_type: n8n-nodes-scrapfly.Scrapfly
package_name: n8n-nodes-scrapfly
display_name: Scrapfly
description: Scrapfly data collection APIs for web page scraping, screenshots, and AI data extraction
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: scrapfly
author_github_url: https://github.com/scrapfly/
npm_package_name: n8n-nodes-scrapfly
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.350Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "Scrape"
        },
        {
          "name": "Extraction",
          "value": "Extraction"
        },
        {
          "name": "Screenshot",
          "value": "Screenshot"
        },
        {
          "name": "Account",
          "value": "Account"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ScrapeWebPage",
      "options": [
        {
          "name": "Scrape Web Page",
          "value": "ScrapeWebPage",
          "action": "Scrape web page",
          "description": "Scrape a web page given its URL"
        },
        {
          "name": "Scrape API Request",
          "value": "ScrapeAPIRequest",
          "action": "Scrape api request",
          "description": "Send a web scraping API request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Scrape"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "WebPageDataExtraction",
      "options": [
        {
          "name": "Extract Data From an HTML, Text, or Markdown Document Using AI",
          "value": "WebPageDataExtraction",
          "action": "Extract data from an html text or markdown document using ai",
          "description": "Extracts structured data from any text content. Uses AI, LLM, and custom parsing instructions."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Extraction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "WebPageScreenshot",
      "options": [
        {
          "name": "Capture Web Page Screenshot",
          "value": "WebPageScreenshot",
          "action": "Capture web page screenshot",
          "description": "Takes a screenshot of a web page given its URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Screenshot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "AccountInfo",
      "options": [
        {
          "name": "Get Account Info",
          "value": "AccountInfo",
          "action": "Returns information about the current subscription and account usage",
          "description": "AccountInfo"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Scrape Web Page",
      "value": "ScrapeWebPage",
      "action": "Scrape web page",
      "description": "Scrape a web page given its URL",
      "resource": "Scrape"
    },
    {
      "name": "Scrape API Request",
      "value": "ScrapeAPIRequest",
      "action": "Scrape api request",
      "description": "Send a web scraping API request",
      "resource": "Scrape"
    },
    {
      "name": "Extract Data From an HTML, Text, or Markdown Document Using AI",
      "value": "WebPageDataExtraction",
      "action": "Extract data from an html text or markdown document using ai",
      "description": "Extracts structured data from any text content. Uses AI, LLM, and custom parsing instructions.",
      "resource": "Extraction"
    },
    {
      "name": "Capture Web Page Screenshot",
      "value": "WebPageScreenshot",
      "action": "Capture web page screenshot",
      "description": "Takes a screenshot of a web page given its URL",
      "resource": "Screenshot"
    },
    {
      "name": "Get Account Info",
      "value": "AccountInfo",
      "action": "Returns information about the current subscription and account usage",
      "description": "AccountInfo",
      "resource": "Account"
    }
  ]

npm_readme:
  # n8n-nodes-scrapfly

  This is an n8n community node. It lets you use ScrapFly in your n8n workflows. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

  [ScrapFly.io](https://scrapfly.io/) provides data collection APIs for web page scraping, screenshots, and AI data extraction at scale. Integrating ScrapFly within a workflow enables extracting web page sources, parsing for structured data, or taking screenshots as binary files.

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation. See examples
  from [Scrapfly documentation](https://scrapfly.io/docs/integration/n8n) to see usage.

  ## Operations
  - __Scrape web page URLs__  
  Scrapes the HTML source of a given web page URL with the support of headless browsers, proxies, and anti-bot bypass.
  - __Extract Data From an HTML, Text, or Markdown Document Using AI__  
  Automatically parse HTML, Text, or Markdown documents using pre-defined templates or LLM prompts to extract structured data.
  - __Capture web page screenshot__  
  Takes a screenshot of a web page as an image file given its URL.
  - __Get account info__  
  Get information about the current account subscription and its usage.

  ## Credentials

  ScrapFly API key is used as a credential key. To get your API key, register for free.

  ## Usage

  For example, regarding usage and predefined workflow templates, please look at [ScrapFly's n8n integration docs](https://scrapfly.io/docs/integration/n8n).

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [ScrapFly documentation](https://scrapfly.io/docs)

  ## Development 

  To publish a new release, you need repo access and play command like `make bump-version VERSION=0.1.3`

ai_documentation_summary:
  {"purpose":"This n8n community node enables web page scraping, AI-powered data extraction from HTML/Text/Markdown, and web page screenshot capture using ScrapFly's APIs.","capabilities":["Scrape HTML source from web page URLs with headless browser support","Extract structured data from HTML, text, or markdown documents using AI","Capture web page screenshots as binary image files","Retrieve account subscription and usage information"],"authentication":"API key required","commonUseCases":["Automated web data collection for analytics or monitoring","Extracting structured information from websites for database population","Generating visual snapshots of web pages for reports or archives","Parsing unstructured web content using AI templates or prompts"],"limitations":["Community node (may have fewer updates or support compared to official nodes)","Requires ScrapFly account registration and API key setup"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Binary File"]}


node_type: n8n-nodes-murf.murf
package_name: n8n-nodes-murf
display_name: Murf AI
description: Murf AI APIs for speech synthesis, dubbing, and audio transformation.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: nileshmurf
author_github_url: https://github.com/murf-ai/
npm_package_name: n8n-nodes-murf
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:33.351Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "textToSpeech",
      "options": [
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "description": "Convert text to speech using AI voices"
        },
        {
          "name": "Voice Changer",
          "value": "voiceChanger",
          "description": "Change voice characteristics of audio files"
        },
        {
          "name": "Translation",
          "value": "translations",
          "description": "Translate content between languages"
        },
        {
          "name": "Dubbing",
          "value": "dubbing",
          "description": "Automated dubbing in multiple languages"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate Speech",
          "value": "generate",
          "action": "Generate speech from text",
          "description": "Convert text to speech"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "textToSpeech"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert Voice",
          "value": "convert",
          "action": "Change voice of audio files",
          "description": "Change voice characteristics of audio files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceChanger"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "translate",
      "options": [
        {
          "name": "Translate",
          "value": "translate",
          "action": "Translate text to another language",
          "description": "Translate text to another language"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "translations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createJob",
      "options": [
        {
          "name": "Create Dubbing Job",
          "value": "createJob",
          "action": "Create a dubbing job",
          "description": "Create a new dubbing job"
        },
        {
          "name": "Check Job Status",
          "value": "checkStatus",
          "action": "Check dubbing job status",
          "description": "Check the status of a dubbing job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dubbing"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Speech",
      "value": "generate",
      "action": "Generate speech from text",
      "description": "Convert text to speech",
      "resource": "textToSpeech"
    },
    {
      "name": "Convert Voice",
      "value": "convert",
      "action": "Change voice of audio files",
      "description": "Change voice characteristics of audio files",
      "resource": "voiceChanger"
    },
    {
      "name": "Translate",
      "value": "translate",
      "action": "Translate text to another language",
      "description": "Translate text to another language",
      "resource": "translations"
    },
    {
      "name": "Create Dubbing Job",
      "value": "createJob",
      "action": "Create a dubbing job",
      "description": "Create a new dubbing job",
      "resource": "dubbing"
    },
    {
      "name": "Check Job Status",
      "value": "checkStatus",
      "action": "Check dubbing job status",
      "description": "Check the status of a dubbing job",
      "resource": "dubbing"
    }
  ]

npm_readme:
  # n8n-nodes-murf

  This is an n8n community node for [Murf AI](https://murf.ai). It provides integration with Murf's AI-powered voice and audio processing services.

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

  [Installation](#installation)  
  [Operations](#operations)  
  [Resources](#resources)  
  [Credentials](#credentials)  
  [Compatibility](#compatibility)  
  [Usage](#usage)  
  [Resources](#resources)  

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ```bash
  npm install n8n-nodes-murf
  ```

  ## Operations

  The Murf AI node provides the following operations:

  ### Text to Speech
  - **Generate Speech**: Convert text to natural-sounding speech using AI voices
    - Supports multiple languages and voice styles
    - Control speech parameters like speed, pitch, and emphasis
    - Add pauses and customize pronunciation

  ### Voice Changer
  - **Convert Voice**: Transform audio files by changing voice characteristics
    - Modify voice properties while maintaining natural sound
    - Support for various audio formats

  ### Translation
  - **Translate**: Translate text between supported languages
    - High-quality translations optimized for voice synthesis
    - Preserve formatting and special characters

  ### Dubbing
  - **Create Dubbing Job**: Create automated dubbing jobs for videos
    - Support for multiple target languages
    - File or URL input options
    - Optional project creation for Murf UI editing
    - Priority levels for processing
    - Webhook support for status updates
  - **Check Job Status**: Monitor the progress of dubbing jobs
    - Get detailed status information
    - Access download URLs for completed jobs
    - View credit usage and remaining credits

  ## Node Structure

  ```
  nodes/Murf/
  ├── Dubbing/
  │   ├── DubbingDescription.ts   # Dubbing node parameters
  │   └── DubbingExecute.ts       # Dubbing operations logic
  ├── TextToSpeech/
  │   └── ...                     # Text to Speech components
  ├── VoiceChanger/
  │   └── ...                     # Voice Changer components
  ├── Translations/
  │   └── ...                     # Translation components
  ├── Murf.node.ts               # Main node definition
  └── Murf.node.json             # Node metadata
  ```

  ## Credentials

  The node requires API credentials from Murf AI:

  1. **Murf API** (`murfApi`)
     - Required for Text to Speech, Voice Changer, and Translation operations
     - Get your API key from [Murf API Dashboard](https://murf.ai/api/dashboard)

  2. **Murf Dubbing API** (`murfDubApi`)
     - Required for Dubbing operations
     - Get your Dubbing API key from [Murf Dub Dashboard](https://dub.murf.ai)

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Follows n8n community node standards

  ## Usage

  1. Install the node package
  2. Add your Murf AI credentials in n8n
  3. Add the Murf AI node to your workflow
  4. Configure the desired operation and parameters
  5. Connect with other nodes as needed

  ## Resources

  - [Murf AI API Documentation](https://murf.ai/api/docs)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Report Issues](https://github.com/murf-ai/n8n-nodes-murf)

  ## Development

  To develop the node:

  1. Clone the repository
  2. Install dependencies: `npm install`
  3. Build: `npm run build`
  4. Link to n8n: `npm link`
  5. Start n8n: `n8n start`

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with Murf AI to enable speech synthesis, voice transformation, text translation, and automated video dubbing workflows.","capabilities":["Generate speech from text using AI voices","Control speech parameters (speed, pitch, emphasis, pauses)","Transform audio files by changing voice characteristics","Translate text between supported languages","Create automated dubbing jobs for videos","Monitor dubbing job status and download results","Support multiple languages and voice styles"],"authentication":"API key required (two separate keys: Murf API for text/voice/translation, Murf Dubbing API for dubbing operations)","commonUseCases":["Automated content localization and dubbing","Voice-over generation for videos and podcasts","Voice transformation for creative projects","Automated translation of text content"],"limitations":["Requires separate API keys for different operation types","Community node (may have fewer updates than official nodes)","Requires n8n version 1.0.0 or later"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-http-request","n8n-nodes-file"]}


node_type: n8n-nodes-bookstack.bookstack
package_name: n8n-nodes-bookstack
display_name: BookStack
description: Manage BookStack resources
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: lucaguindani
author_github_url: https://github.com/lucaguindani/
npm_package_name: n8n-nodes-bookstack
npm_version: 1.5.0
community_fetched_at: 2026-07-14T14:40:33.352Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "global",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Book",
          "value": "book"
        },
        {
          "name": "Chapter",
          "value": "chapter"
        },
        {
          "name": "Comment",
          "value": "comment"
        },
        {
          "name": "Global",
          "value": "global"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "Page",
          "value": "page"
        },
        {
          "name": "Shelf",
          "value": "shelf"
        }
      ],
      "description": "The BookStack resource to work with",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "book"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "shelf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chapter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a comment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a comment"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a comment"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many comments"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a comment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Global search"
        },
        {
          "name": "Audit Log",
          "value": "auditLogList",
          "action": "Audit log"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "global"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "attachment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "attachment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "attachment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "attachment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "attachment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "book"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "book"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "book"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "book"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "book"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "page"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "page"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "page"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "page"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "page"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "shelf"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "shelf"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "shelf"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "shelf"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "shelf"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "chapter"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "chapter"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "chapter"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "chapter"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "chapter"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a comment",
      "resource": "comment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a comment",
      "resource": "comment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a comment",
      "resource": "comment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many comments",
      "resource": "comment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a comment",
      "resource": "comment"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Global search",
      "resource": "global"
    },
    {
      "name": "Audit Log",
      "value": "auditLogList",
      "action": "Audit log",
      "resource": "global"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "image"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "image"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "image"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "image"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "image"
    }
  ]

npm_readme:
  # n8n-nodes-bookstack

  [![CI](https://github.com/lucaguindani/n8n-nodes-bookstack/actions/workflows/ci.yml/badge.svg)](https://github.com/lucaguindani/n8n-nodes-bookstack/actions/workflows/ci.yml)

  This is a n8n community node that lets you use BookStack in your n8n workflows. The [n8n](https://n8n.io/) project is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  BookStack is an open source, self‑hosted documentation / knowledge base platform for organizing and sharing content via books, chapters, pages, and shelves.

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [License](#license)
  - [Contributing](#contributing)
  - [Disclaimer](#disclaimer)

  ---
  ## Installation

  ### Community node
  Follow the official guide: [Install a community node](https://docs.n8n.io/integrations/community-nodes/installation/).

  ### Manual (custom code folder)
  If you are running a self‑hosted n8n and want to build from source:
  ```bash
  # Go to your n8n custom folder
  mkdir -p ~/.n8n/custom && cd ~/.n8n/custom

  # Clone the repository
  git clone https://github.com/lucaguindani/n8n-nodes-bookstack.git
  cd n8n-nodes-bookstack

  # Install dependencies & build
  pnpm install
  pnpm run build

  # Restart n8n so the node is loaded
  ```
  After restart, search for "BookStack" in the node picker.

  ---
  ## Operations
  The node exposes CRUD + search and audit capabilities for core BookStack entities.

  Resource: Book
  - Get Many / Get / Create / Update / Delete

  Resource: Page
  - Get Many / Get / Create / Update / Delete

  Resource: Chapter
  - Get Many / Get / Create / Update / Delete

  Resource: Shelf
  - Get Many / Get / Create / Update / Delete

  Resource: Image
  - Get Many / Get / Create / Update / Delete

  Resource: Attachment
  - Get Many / Get / Create / Update / Delete

  Resource: Comment (Bookstack version >= 25.11)
  - Get Many / Get / Create / Update / Delete

  Resource: Global
  - Search / Audit Log

  ---
  ## Credentials
  You need a BookStack API Token.
  1. In BookStack, open: My Account → Access & Security (`/my-account/auth`)
  2. Create a token; copy Token ID and Token Secret
  3. In n8n, create new credentials of type "Bookstack API":
     - Base URL: e.g. `https://your-bookstack.example.com/api`
     - Token ID
     - Token Secret
  4. Save and use in the node

  Required permission: The token inherits the permissions of the user who created it. Ensure that user can read/create/update intended entities. Audit Log requires permission to manage both users and system settings.

  ---
  ## Compatibility
  Tested with:
  - n8n 1.109+
  - Bookstack 25.11+
  - Node 20+

  ---
  ## Usage
  ### Listing (Get Many)
  - Return All: When enabled, the node will automatically paginate through all results.
  - Limit: When "Return All" is disabled, sets the maximum number of items to return.
  - Sort By / Sort Direction
  - Filters (field, operation, value)

  Internally, the node handles pagination (count/offset) for you when needed.

  ### Global Search
  - Provide a search query and optionally pick a content type (book, page, chapter, shelf)
  - "Return All" / "Limit" to control the amount of results
  - "Deep Dive" to automatically fetch full content for all search results. This provides complete context but increases execution time and API calls.

  ### Image & Attachment
  - "Binary Property" to tell the node which binary key on the current item holds the file. For example, if a previous node (HTTP Request, Read Binary File, etc.) stored the file under the key `data`, enter `data` here. The node will read that binary entry and attach it as the file in the request.

  ### Tags
  When creating or updating entities, tags accepts a comma-separated string. Each tag can be either a plain name (`tag1, tag2`) or a name:value pair (`Category:Fiction, Rating:5`). Both formats can be mixed freely.

  ---
  ## Resources
  * n8n Community Nodes Docs: https://docs.n8n.io/integrations/#community-nodes
  * BookStack Documentation: https://www.bookstackapp.com/docs/
  * BookStack API Reference: https://demo.bookstackapp.com/api/docs
  * BookStack GitHub: https://github.com/BookStackApp/BookStack

  ---
  ## License
  This project is licensed under the MIT License – see [LICENSE.md](./LICENSE.md).

  ---
  ## Contributing
  To lunch a local instance, make sure Node 20+ and pnpm 10+ are installed, then run the following from the root directory of the project.

  ```bash
  pnpm install
  pnpm run dev
  ```

  You should be able to connect to `http://localhost:5678`.

  Pull requests are welcome. For significant changes, open an issue first to discuss scope.

  Before committing, ensure build passes and no lint or formatting errors are found.

  ```bash
  pnpm run lint
  pnpm run format
  pnpm run build
  ```

  Please provide a clear PR description.

  ---
  ## Disclaimer
  This community node is not an official BookStack product. Use at your own risk; validate results in critical workflows.

ai_documentation_summary:
  {"purpose":"This n8n community node enables full CRUD operations, search, and audit logging for BookStack resources including books, pages, chapters, shelves, images, and attachments.","capabilities":["Create, Read, Update, Delete (CRUD) for Books, Pages, Chapters, Shelves, Images, and Attachments","Global Search with content type filtering and 'Deep Dive' for full content retrieval","Audit Log access for user and system settings","Built-in pagination handling with 'Return All' and limit controls","Sorting by field and direction","Filtering by field, operation, and value","Binary file attachment support via custom binary keys","Tag management (comma-separated list) for entity creation and updates"],"authentication":"BookStack API Token (Token ID and Token Secret required)","commonUseCases":["Automated documentation management and content synchronization","Knowledge base search and content retrieval workflows","Audit trail generation for user and system changes","Bulk import or export of BookStack content"],"limitations":["Audit Log requires specific permissions to manage both users and system settings","Deep Dive feature increases execution time and API calls significantly","Not an official BookStack product; use at own risk"],"relatedNodes":["HTTP Request","Read Binary File","Write Binary File","Split In Batches"]}


node_type: @markupai/n8n-nodes-markupai.markupai
package_name: @markupai/n8n-nodes-markupai
display_name: Markup AI
description: Run Markup AI agents for content analysis
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: abhijeet_narvekar
author_github_url: https://github.com/markupai/n8n-app.git
npm_package_name: @markupai/n8n-nodes-markupai
npm_version: 0.2.10
community_fetched_at: 2026-07-14T14:40:33.353Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runAgent",
      "options": [
        {
          "name": "Run Agent",
          "value": "runAgent",
          "action": "Run an agent",
          "description": "Run an agent on the given text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run Agent",
      "value": "runAgent",
      "action": "Run an agent",
      "description": "Run an agent on the given text",
      "resource": "agent"
    }
  ]

npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-markupai

  This is an n8n community node that integrates [Markup AI](https://markup.ai/) — a content guardian platform for ensuring brand-compliant, consistent, and engaging content.

  [Markup AI](https://markup.ai/) provides AI-powered content analysis through specialized agents (for example terminology, claims, focus, and AI voice detection). Integrate agent-based quality checks and automated improvements directly into your n8n workflows.

  [Installation](#installation) · [Operations](#operations) · [Credentials](#credentials) · [Usage](#usage) · [Resources](#resources) · [Development](#development)

  ## Installation

  ### Community Nodes (Recommended)

  1. In n8n, go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `@markupai/n8n-nodes-markupai` in the package field
  4. Click **Install**

  For detailed instructions, visit the [n8n community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).

  ### Manual Installation

  To install manually, run the following command in your n8n installation directory:

  ```bash
  npm install @markupai/n8n-nodes-markupai
  ```

  ## Operations

  The Markup AI node currently supports one operation:

  ### Run Agent

  Run the Markup AI Style Agent on input text.

  - **Execution model:** Calls `POST /agents/{id}/run` and polls `GET /agents/workflows/{id}` until the workflow reaches a terminal state (`completed`, `failed`, `timed_out`, or `cancelled`) or the configured timeout elapses.
  - **Gating:** The node fails fast if your organization has `style_agent: "disabled"` in `/style-agent/config`.

  **Returns (success):**

  - `workflow_id`, `status`, `started_at`, `completed_at`, `duration_seconds`
  - `document_ref` (echoed back from your input, when provided)
  - `result` (agent output payload)
  - `issue_counts` (`total`, `high`, `medium`, `low` computed from `result.issues`)
  - `html_report` (rendered HTML report of issues and workflow metadata)

  **Returns (failure with "Continue On Fail"):** When the node is configured with **Continue On Fail** and the run errors, the item output is simply `{ error: "<message>" }`. Without Continue On Fail, errors are thrown as n8n node-operation errors and the workflow stops.

  ## Credentials

  To use this node, you'll need a Markup AI API account.

  ### Setting up credentials:

  1. Sign up for a [Markup AI account](https://markup.ai/#early-access)
  2. Get your API key from your account settings
  3. In n8n, add new credentials:
     - Go to **Credentials** > **New**
     - Search for **Markup AI API**
     - Enter your API key
     - Click **Save**

  ## Usage

  ### Configuration Options

  The **Run Agent** operation supports the following configuration:

  | Option                                      | Type               | Required | Default  | Description                                                                                                 |
  | ------------------------------------------- | ------------------ | -------- | -------- | ----------------------------------------------------------------------------------------------------------- |
  | **Agent**                                   | Single-select      | Yes      | -        | Select the agent to run. Currently only `style_agent` is exposed.                                           |
  | **Style Guide**                             | Single-select      | No       | -        | Style agent style guide. Loaded from `GET /style-agent/style-guides`. Defaults to your default style guide. |
  | **Content**                                 | String (multiline) | Yes      | -        | Document text to analyze.                                                                                   |
  | **Additional Options → Document Name**      | String             | No       | `""`     | Human-readable name of the document being analyzed.                                                         |
  | **Additional Options → Document Reference** | String             | No       | `""`     | Caller-supplied identifier (e.g. CMS page ID) echoed back in the result for tracking.                       |
  | **Additional Options → Timeout (Ms)**       | Number             | No       | `120000` | Maximum time to wait while polling workflow status before returning a timeout error.                        |

  Organization and content profile are auto-detected from the API key — there is no input for them.

  ### Example Workflows

  #### Content Quality Gate

  1. Trigger: New document added to Google Drive
  2. **Markup AI** → Run Agent: Select one or more compliance-focused agents
  3. Condition: Check `status` and evaluate returned issues from `result`
  4. If passed: Approve and publish
  5. If failed: Send notification to content team

  #### Automated Content Improvement

  1. Trigger: Webhook receives content for publication
  2. **Markup AI** → Run Agent: Analyze with selected agents (for example terminology + generic claims)
  3. Send improved version to CMS for publication

  ### Common Use Cases

  - **Content Compliance & Consistency**: Ensure all company content — from blogs and web pages to documentation and marketing materials — aligns with brand and style guidelines while maintaining a consistent tone.

  - **Automated Quality Gates**: Ensure content meets standards automatically before publication. Monitor content changes in real-time and prevent non-compliant content from going live.

  - **Quality at the Source**: Create and maintain high-quality content right where it's produced. Proactively monitor consistency and compliance across CMS platforms like Google Drive and beyond.

  - **Early Issue Detection**: Automatically identify and flag potential issues or non-compliant content within workflows before they become problems.

  - **Streamlined Content Compliance**: Minimize manual reviews by automating content compliance checks and review processes throughout your content lifecycle.

  - **Actionable Alerts**: Go beyond flagging issues — automatically trigger notifications to stakeholders within workflows, transforming compliance checks into immediate corrective actions.

  ## Resources

  - [Markup AI Website](https://markup.ai/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n Documentation](https://docs.n8n.io/)
  - [GitHub Repository](https://github.com/markupai/n8n-app)

  ## Development

  Contributions are welcome! This section is for developers who want to contribute to this community node or set up a local development environment.

  ### Prerequisites

  - Node.js >= 22.16
  - npm
  - Basic familiarity with n8n and TypeScript

  ### Quick Start (Recommended)

  After cloning this repository:

  ```bash
  npm install
  npm start
  ```

  That's it. `npm start` runs `n8n-node dev` (the official [`@n8n/node-cli`](https://github.com/n8n-io/n8n-nodes-starter) toolchain), which:

  - builds the node in watch mode (rebuilds automatically on file changes),
  - starts n8n in a subprocess with this node pre-loaded,
  - opens the editor at http://localhost:5678.

  You do **not** need n8n installed globally. The CLI bundles a compatible n8n version for you.

  The dev n8n stores its data in `~/.n8n-node-cli/.n8n/` (separate from any other n8n install you may have at `~/.n8n/`).

  **First-time SQLite fix:** If `npm start` errors with `SQLite package has not been found installed`, the sqlite3 native binding in the npx cache needs to be rebuilt for your Node version. The `@n8n/node-cli` toolchain caches n8n under a hash-named directory; this one-liner finds it and rebuilds:

  ```bash
  cd "$(find ~/.npm/_npx -maxdepth 4 -type d -path '*/node_modules/n8n' -print -quit | xargs dirname | xargs dirname)"
  npm rebuild sqlite3
  ```

  Then re-run `npm start`.

  ### Manual Setup (alternative)

  If you prefer to run an n8n instance you already have installed (e.g. global install, Docker, an existing `~/.n8n/`), use the `npm link` workflow:

  1. Install dependencies after cloning this repository

  ```bash
  npm install
  ```

  2. Build the code

  ```bash
  npm run build
  ```

  3. Link the build from the dist folder

  ```bash
  cd dist
  npm link
  cd ..
  ```

  4. Create a `custom` directory inside n8n if it does not exist

  ```bash
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom
  npm init -y
  ```

  5. Link the custom folder to the build

  ```bash
  npm link @markupai/n8n-nodes-markupai
  ```

  6. Fix n8n config file permissions (if needed)

  ```bash
  chmod 600 ~/.n8n/config
  ```

  7. Start your own n8n instance (e.g. `n8n start` if globally installed). You should now see Markup AI in the list of nodes.

  `npm run setup` automates steps 1–6 of this flow.

  ### Making Changes

  1. Make your changes in the `nodes/` or `credentials/` directories
  2. Build the code: `npm run build`
  3. Test in n8n (refresh the browser if n8n is already running)
  4. Run tests: `npm test`
  5. Run linter: `npm run lint:check`

  ### Testing

  Run the test suite:

  ```bash
  npm test
  ```

  Run tests with coverage:

  ```bash
  npm run test:coverage
  ```

  Run tests in watch mode during development:

  ```bash
  npm run test:watch
  ```

  ### Troubleshooting

  **`SQLite package has not been found installed` on `npm start`**: The sqlite3 native binding in the `@n8n/node-cli` npx cache wasn't built for your Node version. Rebuild it once:

  ```bash
  cd "$(find ~/.npm/_npx -maxdepth 4 -type d -path '*/node_modules/n8n' -print -quit | xargs dirname | xargs dirname)"
  npm rebuild sqlite3
  ```

  **Resetting the dev n8n instance**: If you want a clean slate (forget owner setup, credentials, workflows), nuke the dev user folder:

  ```bash
  rm -rf ~/.n8n-node-cli/
  ```

  The next `npm start` will prompt you to create the owner account again.

  **Module loading errors (manual setup only)**: If you're using the Manual Setup path and see errors like `require(...).index is not a constructor`, make sure you've linked from the `dist` folder, not the project root. To fix:

  ```bash
  npm run cleanup  # Remove old links
  npm run setup    # Set up correctly
  ```

  **Permissions errors (manual setup only)**: If you see warnings about file permissions, run `chmod 600 ~/.n8n/config` to fix them.

  **Debugging setup issues**: If you encounter problems during setup, enable debug mode for detailed output:

  ```bash
  DEBUG=1 npm run setup    # Verbose setup with debug information
  DEBUG=1 npm run cleanup  # Verbose cleanup with debug information
  ```

  This will show:

  - Exact commands being executed
  - Full command output (both stdout and stderr)
  - Detailed error information when commands fail
  - Working directory for each command

  ## License

  [MIT](LICENSE)

  ## Support

  - For general n8n questions: [n8n Community Forum](https://community.n8n.io/)
  - For Markup AI API questions: [Markup AI Support](https://community.markup.ai/c/markup-ai-integrations/6)

  ---

  Made with ❤️ by the Markup AI team

ai_documentation_summary:
  {"purpose":"This n8n community node integrates Markup AI to perform AI-powered content analysis, style checks, and automated rewrites to ensure brand-compliant and high-quality content.","capabilities":["Style Check: Analyze content for quality issues without making changes","Style Rewrite: Automatically rewrite and improve content using AI","Quality scoring (clarity, grammar, tone, readability)","Style guide compliance metrics","Dialect-specific content analysis","Tone customization","Automated polling for async operations","Workflow-based content gating"],"authentication":"API key required","commonUseCases":["Content compliance and consistency checks","Automated quality gates before publication","Quality at the source (CMS integration)","Early issue detection in workflows","Streamlined content review processes"],"limitations":["Community node (requires manual installation or n8n community nodes setup)","Requires separate Markup AI account and API key","No built-in credential management UI (requires manual credential setup)"],"relatedNodes":["n8n Webhook","n8n Condition","n8n HTTP Request","n8n Google Drive","n8n Slack"]}


node_type: n8n-nodes-itglue.iTGlue
package_name: n8n-nodes-itglue
display_name: IT Glue
description: Utilize the IT Glue API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: redanthrax
author_github_url: https://github.com/redanthrax/itglue-node.git
npm_package_name: n8n-nodes-itglue
npm_version: 2.1.0
community_fetched_at: 2026-07-14T14:40:33.354Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "organization",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Configuration",
          "value": "configuration"
        },
        {
          "name": "Configuration Interface",
          "value": "configurationInterface"
        },
        {
          "name": "Configuration Status",
          "value": "configurationStatus"
        },
        {
          "name": "Configuration Type",
          "value": "configurationType"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Type",
          "value": "contactType"
        },
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Document Image",
          "value": "documentImage"
        },
        {
          "name": "Document Section",
          "value": "documentSection"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Expiration",
          "value": "expiration"
        },
        {
          "name": "Export",
          "value": "export"
        },
        {
          "name": "Flexible Asset",
          "value": "flexibleAsset"
        },
        {
          "name": "Flexible Asset Field",
          "value": "flexibleAssetField"
        },
        {
          "name": "Flexible Asset Type",
          "value": "flexibleAssetType"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Log",
          "value": "log"
        },
        {
          "name": "Manufacturer",
          "value": "manufacturer"
        },
        {
          "name": "Model",
          "value": "model"
        },
        {
          "name": "Operating System",
          "value": "operatingSystem"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Organization Status",
          "value": "organizationStatus"
        },
        {
          "name": "Organization Type",
          "value": "organizationType"
        },
        {
          "name": "Password",
          "value": "password"
        },
        {
          "name": "Password Category",
          "value": "passwordCategory"
        },
        {
          "name": "Platform",
          "value": "platform"
        },
        {
          "name": "Region",
          "value": "region"
        },
        {
          "name": "Related Item",
          "value": "relatedItem"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "User Metric",
          "value": "userMetric"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete configurations",
          "description": "Delete multiple configurations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update configurations",
          "description": "Update multiple configurations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a configuration",
          "description": "Create a new configuration"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get configurations data",
          "description": "Get data from the Configurations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get configuration by ID",
          "description": "Get a specific configuration by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a configuration",
          "description": "Update an existing configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "configuration"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete contacts",
          "description": "Delete multiple contacts at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update contacts",
          "description": "Update multiple contacts at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a contact",
          "description": "Retrieve a single contact"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many contacts",
          "description": "Retrieve multiple contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update documents",
          "description": "Update multiple documents at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document",
          "description": "Create a new document"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "description": "Delete a document"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get documents",
          "description": "Get all documents"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document by ID",
          "description": "Get a specific document by ID"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a document",
          "description": "Publish a document"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update an existing document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document image",
          "description": "Upload a new document image"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document image",
          "description": "Delete a document image"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document image by ID",
          "description": "Get a specific document image by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentImage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document section",
          "description": "Create a new document section"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document section",
          "description": "Delete a document section"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get document sections",
          "description": "Get all document sections for a document"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document section by ID",
          "description": "Get a specific document section by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document section",
          "description": "Update an existing document section"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentSection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many domains",
          "description": "Get domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Destroy",
          "value": "bulkDestroy",
          "action": "Bulk delete flexible assets",
          "description": "Delete multiple flexible assets at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a flexible asset",
          "description": "Create a new flexible asset"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a flexible asset",
          "description": "Delete a flexible asset"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a flexible asset",
          "description": "Retrieve a single flexible asset"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many flexible assets",
          "description": "Retrieve multiple flexible assets"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a flexible asset",
          "description": "Update an existing flexible asset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "flexibleAsset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete organizations",
          "description": "Delete multiple organizations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update organizations",
          "description": "Update multiple organizations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create organizations data",
          "description": "Create an organization using the Organizations endpoint"
        },
        {
          "name": "Delete",
          "value": "deleteOrganization",
          "action": "Delete an organization",
          "description": "Delete an organization"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get organizations data",
          "description": "Get data from the Organizations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get organization by ID",
          "description": "Get a specific organization by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update organizations data",
          "description": "Update an organization using the Organizations endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete passwords",
          "description": "Delete multiple passwords at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update passwords",
          "description": "Update multiple passwords at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a password",
          "description": "Create a new password"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a password",
          "description": "Delete a password"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a password",
          "description": "Retrieve a single password"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many passwords",
          "description": "Retrieve multiple passwords"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a password",
          "description": "Update an existing password"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "password"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete configurations",
      "description": "Delete multiple configurations at once",
      "resource": "configuration"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update configurations",
      "description": "Update multiple configurations at once",
      "resource": "configuration"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a configuration",
      "description": "Create a new configuration",
      "resource": "configuration"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get configurations data",
      "description": "Get data from the Configurations endpoint",
      "resource": "configuration"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get configuration by ID",
      "description": "Get a specific configuration by ID",
      "resource": "configuration"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a configuration",
      "description": "Update an existing configuration",
      "resource": "configuration"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete contacts",
      "description": "Delete multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update contacts",
      "description": "Update multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a contact",
      "description": "Retrieve a single contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many contacts",
      "description": "Retrieve multiple contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update documents",
      "description": "Update multiple documents at once",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document",
      "description": "Create a new document",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "description": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get documents",
      "description": "Get all documents",
      "resource": "document"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document by ID",
      "description": "Get a specific document by ID",
      "resource": "document"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a document",
      "description": "Publish a document",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update an existing document",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document image",
      "description": "Upload a new document image",
      "resource": "documentImage"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document image",
      "description": "Delete a document image",
      "resource": "documentImage"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document image by ID",
      "description": "Get a specific document image by ID",
      "resource": "documentImage"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document section",
      "description": "Create a new document section",
      "resource": "documentSection"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document section",
      "description": "Delete a document section",
      "resource": "documentSection"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get document sections",
      "description": "Get all document sections for a document",
      "resource": "documentSection"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document section by ID",
      "description": "Get a specific document section by ID",
      "resource": "documentSection"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document section",
      "description": "Update an existing document section",
      "resource": "documentSection"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many domains",
      "description": "Get domains",
      "resource": "domain"
    },
    {
      "name": "Bulk Destroy",
      "value": "bulkDestroy",
      "action": "Bulk delete flexible assets",
      "description": "Delete multiple flexible assets at once",
      "resource": "flexibleAsset"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a flexible asset",
      "description": "Create a new flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a flexible asset",
      "description": "Delete a flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a flexible asset",
      "description": "Retrieve a single flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many flexible assets",
      "description": "Retrieve multiple flexible assets",
      "resource": "flexibleAsset"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a flexible asset",
      "description": "Update an existing flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete organizations",
      "description": "Delete multiple organizations at once",
      "resource": "organization"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update organizations",
      "description": "Update multiple organizations at once",
      "resource": "organization"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create organizations data",
      "description": "Create an organization using the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Delete",
      "value": "deleteOrganization",
      "action": "Delete an organization",
      "description": "Delete an organization",
      "resource": "organization"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get organizations data",
      "description": "Get data from the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get organization by ID",
      "description": "Get a specific organization by ID",
      "resource": "organization"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update organizations data",
      "description": "Update an organization using the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete passwords",
      "description": "Delete multiple passwords at once",
      "resource": "password"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update passwords",
      "description": "Update multiple passwords at once",
      "resource": "password"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a password",
      "description": "Create a new password",
      "resource": "password"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a password",
      "description": "Delete a password",
      "resource": "password"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a password",
      "description": "Retrieve a single password",
      "resource": "password"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many passwords",
      "description": "Retrieve multiple passwords",
      "resource": "password"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a password",
      "description": "Update an existing password",
      "resource": "password"
    }
  ]

npm_readme:
  # n8n-nodes-itglue

  An n8n community node for integrating with IT Glue API.

  ## Development

  This repo uses **pnpm** with a committed lockfile and supply-chain controls in [`pnpm-workspace.yaml`](pnpm-workspace.yaml) (see [SECURITY.md](SECURITY.md)). Development requires **Node.js 22.22.3+**. After clone:

  ```bash
  corepack enable && corepack prepare pnpm@10.19.0 --activate
  pnpm install --frozen-lockfile
  pnpm run audit:supply-chain
  pnpm run build
  ```

  Use **pnpm only** for installs in this repo. With Corepack enabled, `npm install` and `yarn install` are rejected. Do not commit `package-lock.json` or `yarn.lock` (see [SECURITY.md](SECURITY.md)).

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ```bash
  npm install n8n-nodes-itglue
  ```

  ## Prerequisites

  - IT Glue account with API access
  - API Key from IT Glue
  - Your IT Glue region (US, Europe, or Australia)

  ## Setup

  ### Setting up API Key in IT Glue

  1. Log into your IT Glue instance
  2. Navigate to Account > Settings > API Keys
  3. Create a new API key
  4. Note down the API Key for use in n8n

  ### Configuring Credentials in n8n

  1. **Region**: Select your IT Glue region (api, api.eu, or api.au)
  2. **API Key**: The API key from IT Glue

  ## Supported Operations

  ### [Attachments](./docs/attachments.md)
  Manage file attachments with create, update, and bulk destroy operations for document management.

  ### [Configurations](./docs/configurations.md)
  Complete configuration item management with CRUD operations, bulk updates, and comprehensive filtering for IT asset management.

  ### [Configuration Interfaces](./docs/configuration-interfaces.md)
  Manage network interfaces and connections with full CRUD operations and bulk update capabilities.

  ### [Configuration Statuses](./docs/configuration-statuses.md)
  Manage configuration status definitions with complete CRUD operations for asset lifecycle tracking.

  ### [Configuration Types](./docs/configuration-types.md)
  Manage configuration type definitions with CRUD operations for asset categorization.

  ### [Contacts](./docs/contacts.md)
  Manage contact records with full CRUD operations, bulk updates, and comprehensive contact information management.

  ### [Contact Types](./docs/contact-types.md)
  Manage contact type definitions with CRUD operations for contact categorization.

  ### [Countries](./docs/countries.md)
  Retrieve country information and geographical data with filtering capabilities.

  ### [Documents](./docs/documents.md)
  Complete document management with CRUD operations, bulk updates, and comprehensive document handling.

  ### [Domains](./docs/domains.md)
  Retrieve domain records and DNS-related information with filtering options.

  ### [Expirations](./docs/expirations.md)
  Track asset and license expirations with retrieval and filtering capabilities.

  ### [Flexible Assets](./docs/flexible-assets.md)
  Manage custom flexible asset types with dynamic field structures, supporting full CRUD operations and bulk destroy.

  ### [Flexible Asset Fields](./docs/flexible-asset-fields.md)
  Manage flexible asset field definitions with complete CRUD operations and bulk update capabilities.

  ### [Flexible Asset Types](./docs/flexible-asset-types.md)
  Manage flexible asset type definitions with full CRUD operations for custom asset management.

  ### [Logs](./docs/logs.md)
  Retrieve system logs and audit trail information for monitoring and compliance.

  ### [Operating Systems](./docs/operating-systems.md)
  Retrieve operating system information and specifications with filtering capabilities.

  ### [Organizations](./docs/organizations.md)
  Manage organization records with comprehensive CRUD operations including creation, updates, bulk operations, and deletion with filtering capabilities.

  ### [Organization Statuses](./docs/organization-statuses.md)
  Manage organization status definitions with CRUD operations for organizational lifecycle tracking.

  ### [Organization Types](./docs/organization-types.md)
  Manage organization type definitions with CRUD operations for organizational categorization.

  ### [Passwords](./docs/passwords.md)
  Securely manage password entries with full CRUD operations including creation, updates, retrieval, deletion, and bulk operations with advanced filtering.

  ### [Password Categories](./docs/password-categories.md)
  Manage password category definitions with CRUD operations for password organization.

  ### [Platforms](./docs/platforms.md)
  Retrieve platform and technology information with filtering capabilities.

  ### [Regions](./docs/regions.md)
  Retrieve regional information and geographical data with filtering options.

  ### [Related Items](./docs/related-items.md)
  Manage relationships between different IT Glue resources with CRUD operations and bulk destroy capabilities.

  ### [Users](./docs/users.md)
  Manage user accounts with CRUD operations for user administration.

  ### [User Metrics](./docs/user-metrics.md)
  Retrieve user activity metrics and analytics for monitoring user engagement.

  ## Resources

  - [IT Glue API Documentation](https://api.itglue.com/developer/)
  - [n8n Documentation](https://docs.n8n.io)
  - [Repository](https://github.com/redanthrax/itglue-node)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the IT Glue API to manage IT asset management, configuration, and organizational data.","capabilities":["Create, read, update, and delete IT assets and configurations","Manage flexible asset types with dynamic field structures","Handle file attachments and documents","Track password categories and secure password entries","Monitor user metrics and system logs","Manage organizational and contact records","Filter and retrieve data based on region and resource type"],"authentication":"API Key required","commonUseCases":["IT asset management and lifecycle tracking","Configuration management for IT infrastructure","User and organization administration","Password and credential management","Compliance and audit trail monitoring"],"limitations":["Community node (not official n8n node)","Requires separate IT Glue account with API access","Supports only specific IT Glue regions (US, Europe, Australia)"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-base.set"]}


node_type: @basalt-ai/n8n-nodes-basalt.basalt
package_name: @basalt-ai/n8n-nodes-basalt
display_name: Basalt
description: Interact with Basalt API to manage prompts, monitoring, and datasets
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: will-m
author_github_url: https://github.com/basalt-ai/n8n-nodes.git
npm_package_name: @basalt-ai/n8n-nodes-basalt
npm_version: 0.4.0
community_fetched_at: 2026-07-14T14:40:33.355Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "prompt",
      "options": [
        {
          "name": "Prompt",
          "value": "prompt"
        },
        {
          "name": "Monitoring",
          "value": "monitoring"
        },
        {
          "name": "Dataset",
          "value": "dataset"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a prompt",
          "routing": {
            "request": {
              "url": "=/prompts/{{$parameter.slug}}",
              "method": "GET"
            }
          },
          "description": "Get a prompt by slug"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List prompts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "prompts"
                  }
                }
              ]
            },
            "request": {
              "url": "/prompts",
              "method": "GET"
            }
          },
          "description": "List all prompts in the workspace"
        },
        {
          "name": "Describe",
          "value": "describe",
          "action": "Describe a prompt",
          "routing": {
            "request": {
              "url": "=/prompts/{{$parameter.slug}}/describe",
              "method": "GET"
            }
          },
          "description": "Describe a prompt by slug"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a prompt",
          "routing": {
            "request": {
              "url": "=/prompts/{{$parameter.slug}}/publish",
              "method": "POST"
            }
          },
          "description": "Publish a prompt version with a tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prompt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Create Experiment",
          "value": "createExperiment",
          "action": "Create an experiment",
          "routing": {
            "request": {
              "url": "/monitor/experiments",
              "method": "POST"
            }
          },
          "description": "Create a new experiment"
        },
        {
          "name": "Log Trace",
          "value": "logTrace",
          "action": "Log trace",
          "routing": {
            "request": {
              "url": "/monitor/trace",
              "method": "POST"
            }
          },
          "description": "Create a trace to monitor a full execution"
        },
        {
          "name": "Log Output",
          "value": "log",
          "action": "Log prompt output",
          "routing": {
            "request": {
              "url": "/monitor/log",
              "method": "POST"
            }
          },
          "description": "Monitor a prompt output"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monitoring"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a dataset",
          "routing": {
            "request": {
              "url": "=/datasets/{{$parameter.slug}}",
              "method": "GET"
            }
          },
          "description": "Get a dataset by slug"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List datasets",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "datasets"
                  }
                }
              ]
            },
            "request": {
              "url": "/datasets",
              "method": "GET"
            }
          },
          "description": "List all datasets in the workspace"
        },
        {
          "name": "Create Item",
          "value": "createItem",
          "action": "Create dataset item",
          "routing": {
            "request": {
              "url": "=/datasets/{{$parameter.slug}}/items",
              "method": "POST"
            }
          },
          "description": "Create a new item in a dataset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataset"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a prompt",
      "routing": {
        "request": {
          "url": "=/prompts/{{$parameter.slug}}",
          "method": "GET"
        }
      },
      "description": "Get a prompt by slug",
      "resource": "prompt"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List prompts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "prompts"
              }
            }
          ]
        },
        "request": {
          "url": "/prompts",
          "method": "GET"
        }
      },
      "description": "List all prompts in the workspace",
      "resource": "prompt"
    },
    {
      "name": "Describe",
      "value": "describe",
      "action": "Describe a prompt",
      "routing": {
        "request": {
          "url": "=/prompts/{{$parameter.slug}}/describe",
          "method": "GET"
        }
      },
      "description": "Describe a prompt by slug",
      "resource": "prompt"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a prompt",
      "routing": {
        "request": {
          "url": "=/prompts/{{$parameter.slug}}/publish",
          "method": "POST"
        }
      },
      "description": "Publish a prompt version with a tag",
      "resource": "prompt"
    },
    {
      "name": "Create Experiment",
      "value": "createExperiment",
      "action": "Create an experiment",
      "routing": {
        "request": {
          "url": "/monitor/experiments",
          "method": "POST"
        }
      },
      "description": "Create a new experiment",
      "resource": "monitoring"
    },
    {
      "name": "Log Trace",
      "value": "logTrace",
      "action": "Log trace",
      "routing": {
        "request": {
          "url": "/monitor/trace",
          "method": "POST"
        }
      },
      "description": "Create a trace to monitor a full execution",
      "resource": "monitoring"
    },
    {
      "name": "Log Output",
      "value": "log",
      "action": "Log prompt output",
      "routing": {
        "request": {
          "url": "/monitor/log",
          "method": "POST"
        }
      },
      "description": "Monitor a prompt output",
      "resource": "monitoring"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a dataset",
      "routing": {
        "request": {
          "url": "=/datasets/{{$parameter.slug}}",
          "method": "GET"
        }
      },
      "description": "Get a dataset by slug",
      "resource": "dataset"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List datasets",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "datasets"
              }
            }
          ]
        },
        "request": {
          "url": "/datasets",
          "method": "GET"
        }
      },
      "description": "List all datasets in the workspace",
      "resource": "dataset"
    },
    {
      "name": "Create Item",
      "value": "createItem",
      "action": "Create dataset item",
      "routing": {
        "request": {
          "url": "=/datasets/{{$parameter.slug}}/items",
          "method": "POST"
        }
      },
      "description": "Create a new item in a dataset",
      "resource": "dataset"
    }
  ]

npm_readme:
  # Basalt n8n nodes

  n8n community node for the Basalt API - Manage prompts, monitoring, and datasets through n8n workflows.

  ## Features

  This n8n node allows you to:

  ### Prompts
  - **Get** - Retrieve a specific prompt by slug
  - **Get Many** - List all prompts in your workspace
  - **Describe** - Get detailed information about a prompt including its variables
  - **Publish** - Publish a prompt version with a specific tag

  ### Monitoring
  - **Create Experiment** - Create a new experiment for testing prompt variations
  - **Log Output** - Monitor individual prompt outputs with detailed metrics

  ### Datasets
  - **Get** - Retrieve a specific dataset by slug
  - **Get Many** - List all datasets in your workspace
  - **Create Item** - Add a new row to a dataset

  ## Installation

  ### Community Nodes (n8n Cloud & Desktop)

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `@basalt-ai/n8n-nodes-basalt` in the **Enter npm package name** field
  4. Agree to the risks and click **Install**

  ### Manual Installation (Self-Hosted)

  Navigate to your n8n root directory and run:

  ```bash
  npm install @basalt-ai/n8n-nodes-basalt
  ```

  Then restart your n8n instance.

  ## Credentials

  To use this node, you'll need:

  1. **API Key**: Your Basalt API key (available in your Basalt dashboard)
  2. **API URL**: The base URL for the Basalt API (defaults to `https://api.getbasalt.ai`)

  ### Setting up Credentials

  1. In n8n, go to **Credentials** and click **Add credential**
  2. Search for **Basalt API**
  3. Enter your API key and API URL
  4. Save the credential

  ## Usage Examples

  ### Example 1: Get a Prompt and Use it in a Workflow

  ```
  1. Basalt Node (Get Prompt)
     - Resource: Prompt
     - Operation: Get
     - Slug: my-prompt-slug
     - Version: 1.0.0

  2. HTTP Request Node
     - Use the prompt text from previous step
     - Make API call with the prompt configuration
  ```

  ### Example 2: Log Prompt Outputs for Monitoring

  ```
  1. Your LLM Node
     - Execute your AI workflow

  2. Basalt Node (Log Output)
     - Resource: Monitoring
     - Operation: Log Output
     - Prompt Slug: {{ $json.promptSlug }}
     - Output: {{ $json.llmResponse }}
     - Input Tokens: {{ $json.usage.inputTokens }}
     - Output Tokens: {{ $json.usage.outputTokens }}
  ```

  ### Example 3: Create Experiment

  ```
  1. Basalt Node (Create Experiment)
     - Resource: Monitoring
     - Operation: Create Experiment
     - Feature Slug: my-feature
     - Name: A/B Test - Version 1.0 vs 2.0
  ```

  ### Example 4: Add Items to a Dataset

  ```
  1. Webhook Trigger
     - Receives new data

  2. Basalt Node (Create Dataset Item)
     - Resource: Dataset
     - Operation: Create Item
     - Slug: training-data
     - Values: { "input": "...", "output": "..." }
     - Ideal Output: "Expected response"
  ```

  ## API Operations

  All operations support the full Basalt API specification. For detailed API documentation, visit [https://docs.getbasalt.ai](https://docs.getbasalt.ai)

  ## Resources

  - [Basalt Documentation](https://docs.getbasalt.ai)
  - [Basalt API Reference](https://api.getbasalt.ai)
  - [n8n Community](https://community.n8n.io)

  ## Development

  ### Building the Node

  ```bash
  npm run build
  ```

  ### Testing Locally

  1. Build the node:
     ```bash
     npm run build
     ```

  2. Link the package:
     ```bash
     npm link
     ```

  3. Link to your n8n installation:
     ```bash
     cd ~/.n8n/nodes
     npm link @basalt-ai/n8n-nodes-basalt
     ```

  4. Restart n8n

  ## License

  MIT

  ## Support

  For issues and questions:
  - GitHub Issues: [basalt-ai/basalt](https://github.com/basalt-ai/basalt/issues)
  - Email: support@getbasalt.ai

ai_documentation_summary:
  {"purpose":"A n8n community node that enables interaction with the Basalt API to manage prompts, monitor LLM outputs, and handle datasets within automated workflows.","capabilities":["Retrieve specific prompts by slug","List all prompts in a workspace","Get detailed prompt information including variables","Publish prompt versions with tags","Create experiments for testing prompt variations","Log individual prompt outputs with metrics","Retrieve datasets by slug","List all datasets in a workspace","Add new rows to datasets"],"authentication":"API Key and API URL","commonUseCases":["Retrieving and using prompts in LLM workflows","Monitoring and logging LLM output performance","Running A/B tests with prompt experiments","Training datasets with input-output pairs"],"limitations":[],"relatedNodes":["HTTP Request","LLM","Webhook Trigger"]}


node_type: @zerobounce/n8n-nodes-zerobounce.zeroBounce
package_name: @zerobounce/n8n-nodes-zerobounce
display_name: ZeroBounce
description: Validate and verify emails using the ZeroBounce API.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zerobounce_sdk
author_github_url: https://github.com/zerobounce/n8n-nodes-zerobounce.git
npm_package_name: @zerobounce/n8n-nodes-zerobounce
npm_version: 1.1.3
community_fetched_at: 2026-07-14T14:40:33.356Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "validation",
      "options": [
        {
          "name": "Account",
          "value": "account",
          "description": "Retrieve details from your ZeroBounce account"
        },
        {
          "name": "Validation",
          "value": "validation",
          "description": "Email validation"
        },
        {
          "name": "A.I. Scoring",
          "value": "scoring",
          "description": "Email scoring"
        },
        {
          "name": "Email Finder",
          "value": "emailFinder",
          "description": "Email Finder allows you to search for new business email addresses using our proprietary technologies"
        },
        {
          "name": "Domain Search",
          "value": "domainSearch",
          "description": "Domain Search allows you to search for new business email formats using our proprietary technologies"
        },
        {
          "name": "Activity Data",
          "value": "activityData",
          "description": "Activity Data allows you to gather insights into your subscribers’ overall email engagement"
        }
      ],
      "required": true,
      "description": "Choose the ZeroBounce API you wish to use",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCredits",
      "options": [
        {
          "name": "Credits Balance",
          "value": "getCredits",
          "action": "Get credits balance",
          "description": "Tells you how many credits you have left on your account"
        },
        {
          "name": "API Usage",
          "value": "getApiUsage",
          "action": "Get API usage",
          "description": "Retrieves a summary of your API usage"
        },
        {
          "name": "List Filters",
          "value": "listFilters",
          "action": "List filters",
          "description": "Lists all the existing filter rules"
        },
        {
          "name": "Add Filter",
          "value": "addFilter",
          "action": "Add a filter",
          "description": "Adds or updates a filter rule"
        },
        {
          "name": "Delete Filter",
          "value": "deleteFilter",
          "action": "Delete a filter",
          "description": "Deletes a filter rule"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Validate Email",
          "value": "validate",
          "action": "Validate an email",
          "description": "Validate a single email address (real-time)"
        },
        {
          "name": "Validate Batch",
          "value": "batchValidate",
          "action": "Validate an email batch",
          "description": "Validates batches of up to 200 email addresses at a time. It is rate limited to 5 uses per minute, if you exceed the rate limit, you will be blocked for 10 minutes. If you're looking to do single email validations, please use our single email validator endpoint."
        },
        {
          "name": "Bulk Validate Send File",
          "value": "sendFile",
          "action": "Send validation file",
          "description": "Send a file to ZeroBounce for bulk validation"
        },
        {
          "name": "Bulk Validate Get File",
          "value": "getFile",
          "action": "Get validation results file",
          "description": "Get the results file for a submitted validation file"
        },
        {
          "name": "Bulk Validate File Status",
          "value": "fileStatus",
          "action": "Get validation file status",
          "description": "Get the status of a file submitted for validation"
        },
        {
          "name": "Bulk Validate Delete File",
          "value": "deleteFile",
          "action": "Delete validation file",
          "description": "Delete a previously submitted validation file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "validation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "score",
      "options": [
        {
          "name": "Score Email",
          "value": "score",
          "action": "Score an email",
          "description": "Score a single email address (real-time)"
        },
        {
          "name": "Bulk Scoring Send File",
          "value": "scoringSendFile",
          "action": "Send scoring file",
          "description": "Send a file to ZeroBounce for bulk scoring"
        },
        {
          "name": "Bulk Scoring Get File",
          "value": "scoringGetFile",
          "action": "Get scoring results file",
          "description": "Get the results file for a submitted scoring file"
        },
        {
          "name": "Bulk Scoring File Status",
          "value": "scoringFileStatus",
          "action": "Get scoring file status",
          "description": "Get the status of a file submitted for scoring"
        },
        {
          "name": "Bulk Scoring Delete File",
          "value": "scoringDeleteFile",
          "action": "Delete scoring file",
          "description": "Delete a previously submitted scoring file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scoring"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "find",
      "options": [
        {
          "name": "Find Email Address",
          "value": "find",
          "action": "Find email address",
          "description": "Uses a person’s first and last name and a domain or company name to test a variety of patterns and combinations in real time until it identifies a valid business email. It does not use or process customer data at any point to aid in this search. Privacy and Security Note – Email Finder API searches are performed in real time and do not use stored or processed customer data. Customer privacy and security are and will always remain our top priority."
        },
        {
          "name": "Bulk Email Finder Send File",
          "value": "emailFinderSendFile",
          "action": "Send email finder file",
          "description": "Send a file to ZeroBounce for bulk email finding"
        },
        {
          "name": "Bulk Email Finder Get File",
          "value": "emailFinderGetFile",
          "action": "Get email finder results file",
          "description": "Get the results file for a submitted email finder file"
        },
        {
          "name": "Bulk Email Finder File Status",
          "value": "emailFinderFileStatus",
          "action": "Get email finder file status",
          "description": "Get the status of a submitted email finder file"
        },
        {
          "name": "Bulk Email Finder Delete File",
          "value": "emailFinderDeleteFile",
          "action": "Delete email finder file",
          "description": "Delete a previously submitted email finder file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailFinder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search Domain",
          "value": "search",
          "action": "Search domain",
          "description": "Domain search is functionally similar to email address inquiry but instead attempts to detect possible patterns a specific company uses. You can use detected patterns to help you approximate the correct email for a specific person you’re attempting to contact at a business. Privacy and security note – Domain Search API searches are performed in real time and do not use stored or processed customer data. Customer privacy and security are and will always remain our top priority."
        },
        {
          "name": "Bulk Domain Search Send File",
          "value": "domainSearchSendFile",
          "action": "Send domain search file",
          "description": "Send a file to ZeroBounce for bulk domain searching"
        },
        {
          "name": "Bulk Domain Search Get File",
          "value": "domainSearchGetFile",
          "action": "Get domain search results file",
          "description": "Get the results file for a submitted domain search file"
        },
        {
          "name": "Bulk Domain Search File Status",
          "value": "domainSearchFileStatus",
          "action": "Get domain search file status",
          "description": "Get the status of a submitted domain search file"
        },
        {
          "name": "Bulk Domain Search Delete File",
          "value": "domainSearchDeleteFile",
          "action": "Delete domain search file",
          "description": "Delete a previously submitted domain search file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domainSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getActivityData",
      "options": [
        {
          "name": "Activity Data",
          "value": "getActivityData",
          "action": "Get activity data",
          "description": "Our Activity Data feature allows you to gather insights into your subscribers’ overall email engagement. The tool returns if the email inbox has been active in the past 30, 60, 90, 180, 365, or 365+ days. This indicates a potentially outdated contact, not recommended for cold emailing. Thus, you can improve your targeting and personalization and run more successful email campaigns."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "activityData"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Credits Balance",
      "value": "getCredits",
      "action": "Get credits balance",
      "description": "Tells you how many credits you have left on your account",
      "resource": "account"
    },
    {
      "name": "API Usage",
      "value": "getApiUsage",
      "action": "Get API usage",
      "description": "Retrieves a summary of your API usage",
      "resource": "account"
    },
    {
      "name": "List Filters",
      "value": "listFilters",
      "action": "List filters",
      "description": "Lists all the existing filter rules",
      "resource": "account"
    },
    {
      "name": "Add Filter",
      "value": "addFilter",
      "action": "Add a filter",
      "description": "Adds or updates a filter rule",
      "resource": "account"
    },
    {
      "name": "Delete Filter",
      "value": "deleteFilter",
      "action": "Delete a filter",
      "description": "Deletes a filter rule",
      "resource": "account"
    },
    {
      "name": "Validate Email",
      "value": "validate",
      "action": "Validate an email",
      "description": "Validate a single email address (real-time)",
      "resource": "validation"
    },
    {
      "name": "Validate Batch",
      "value": "batchValidate",
      "action": "Validate an email batch",
      "description": "Validates batches of up to 200 email addresses at a time. It is rate limited to 5 uses per minute, if you exceed the rate limit, you will be blocked for 10 minutes. If you're looking to do single email validations, please use our single email validator endpoint.",
      "resource": "validation"
    },
    {
      "name": "Bulk Validate Send File",
      "value": "sendFile",
      "action": "Send validation file",
      "description": "Send a file to ZeroBounce for bulk validation",
      "resource": "validation"
    },
    {
      "name": "Bulk Validate Get File",
      "value": "getFile",
      "action": "Get validation results file",
      "description": "Get the results file for a submitted validation file",
      "resource": "validation"
    },
    {
      "name": "Bulk Validate File Status",
      "value": "fileStatus",
      "action": "Get validation file status",
      "description": "Get the status of a file submitted for validation",
      "resource": "validation"
    },
    {
      "name": "Bulk Validate Delete File",
      "value": "deleteFile",
      "action": "Delete validation file",
      "description": "Delete a previously submitted validation file",
      "resource": "validation"
    },
    {
      "name": "Score Email",
      "value": "score",
      "action": "Score an email",
      "description": "Score a single email address (real-time)",
      "resource": "scoring"
    },
    {
      "name": "Bulk Scoring Send File",
      "value": "scoringSendFile",
      "action": "Send scoring file",
      "description": "Send a file to ZeroBounce for bulk scoring",
      "resource": "scoring"
    },
    {
      "name": "Bulk Scoring Get File",
      "value": "scoringGetFile",
      "action": "Get scoring results file",
      "description": "Get the results file for a submitted scoring file",
      "resource": "scoring"
    },
    {
      "name": "Bulk Scoring File Status",
      "value": "scoringFileStatus",
      "action": "Get scoring file status",
      "description": "Get the status of a file submitted for scoring",
      "resource": "scoring"
    },
    {
      "name": "Bulk Scoring Delete File",
      "value": "scoringDeleteFile",
      "action": "Delete scoring file",
      "description": "Delete a previously submitted scoring file",
      "resource": "scoring"
    },
    {
      "name": "Find Email Address",
      "value": "find",
      "action": "Find email address",
      "description": "Uses a person’s first and last name and a domain or company name to test a variety of patterns and combinations in real time until it identifies a valid business email. It does not use or process customer data at any point to aid in this search. Privacy and Security Note – Email Finder API searches are performed in real time and do not use stored or processed customer data. Customer privacy and security are and will always remain our top priority.",
      "resource": "emailFinder"
    },
    {
      "name": "Bulk Email Finder Send File",
      "value": "emailFinderSendFile",
      "action": "Send email finder file",
      "description": "Send a file to ZeroBounce for bulk email finding",
      "resource": "emailFinder"
    },
    {
      "name": "Bulk Email Finder Get File",
      "value": "emailFinderGetFile",
      "action": "Get email finder results file",
      "description": "Get the results file for a submitted email finder file",
      "resource": "emailFinder"
    },
    {
      "name": "Bulk Email Finder File Status",
      "value": "emailFinderFileStatus",
      "action": "Get email finder file status",
      "description": "Get the status of a submitted email finder file",
      "resource": "emailFinder"
    },
    {
      "name": "Bulk Email Finder Delete File",
      "value": "emailFinderDeleteFile",
      "action": "Delete email finder file",
      "description": "Delete a previously submitted email finder file",
      "resource": "emailFinder"
    },
    {
      "name": "Search Domain",
      "value": "search",
      "action": "Search domain",
      "description": "Domain search is functionally similar to email address inquiry but instead attempts to detect possible patterns a specific company uses. You can use detected patterns to help you approximate the correct email for a specific person you’re attempting to contact at a business. Privacy and security note – Domain Search API searches are performed in real time and do not use stored or processed customer data. Customer privacy and security are and will always remain our top priority.",
      "resource": "domainSearch"
    },
    {
      "name": "Bulk Domain Search Send File",
      "value": "domainSearchSendFile",
      "action": "Send domain search file",
      "description": "Send a file to ZeroBounce for bulk domain searching",
      "resource": "domainSearch"
    },
    {
      "name": "Bulk Domain Search Get File",
      "value": "domainSearchGetFile",
      "action": "Get domain search results file",
      "description": "Get the results file for a submitted domain search file",
      "resource": "domainSearch"
    },
    {
      "name": "Bulk Domain Search File Status",
      "value": "domainSearchFileStatus",
      "action": "Get domain search file status",
      "description": "Get the status of a submitted domain search file",
      "resource": "domainSearch"
    },
    {
      "name": "Bulk Domain Search Delete File",
      "value": "domainSearchDeleteFile",
      "action": "Delete domain search file",
      "description": "Delete a previously submitted domain search file",
      "resource": "domainSearch"
    },
    {
      "name": "Activity Data",
      "value": "getActivityData",
      "action": "Get activity data",
      "description": "Our Activity Data feature allows you to gather insights into your subscribers’ overall email engagement. The tool returns if the email inbox has been active in the past 30, 60, 90, 180, 365, or 365+ days. This indicates a potentially outdated contact, not recommended for cold emailing. Thus, you can improve your targeting and personalization and run more successful email campaigns.",
      "resource": "activityData"
    }
  ]

npm_readme:
  ![ZeroBounce Logo](https://raw.githubusercontent.com/zerobounce/n8n-nodes-zerobounce/main/icons/zb-logo-purple.svg)

  # n8n-nodes-zerobounce

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation
  platform.

  **This is the [Official ZeroBounce](https://n8n.io/integrations/zerobounce) n8n community node for use in your n8n
  workflows.**

  * [Key Features](#key-features)
  * [About](#about)
  * [Installation](#installation)
  * [Operations](#operations)
      * [Validation](#-validation)
      * [A.I. Scoring](#-ai-scoring)
      * [Email Finder](#-email-finder)
      * [Domain Search](#-domain-search)
      * [Activity Data](#-activity-data)
      * [Account](#-account)
  * [Credentials](#credentials)
  * [Usage](#usage)
      * [Workflow Testing](#-workflow-testing)
      * [Single Email Validation](#-single-email-validation)
      * [Bulk File Webhook Integration](#-bulk-file-webhook-integration-wait-node)
  * [Support](#support)
  * [Compatibility](#compatibility)
  * [Resources](#resources)

  ## 💡Key Features

  - 🛡️ **Validation:** Detect invalid, abuse, and spam trap addresses before they impact your sender reputation.
  - 🎯 **A.I. Scoring:** Go beyond validation with AI-driven deliverability scores, great for catch-all addresses.
  - 🔍 **Lead Discovery:** Integrated Email Finder and Domain Search tools to build and verify your outreach lists.
  - 📊 **Usage Analytics:** Monitor API usage and credit balances to ensure uninterrupted and efficient service.

  ---

  ## About

  Validate and score email addresses with the official **ZeroBounce** node to improve email deliverability and protect
  your domain reputation.

  ### About ZeroBounce

  **[ZeroBounce](https://www.zerobounce.net)** is an award-winning email verification and deliverability platform designed
  to help businesses maintain high-quality email lists and improve their inbox placement.

  Trusted by over 500,000 clients—including major brands like Samsung, Coca-Cola, and LinkedIn; we specialize in
  identifying risky email addresses to reduce bounce rates and increase engagement.

  #### Core Services & Features

  - **Email Validation:** Offers 99.6% accurate real-time and bulk email verification to identify invalid, disposable,
    abuse, and spam trap addresses.
  - **A.I. Email Scoring:** Uses artificial intelligence to analyze "catch-all" or valid addresses and assign a score (
    1–10) based on the likelihood of reaching a real person.
  - **Email Activity Data:** Provides insights into a subscriber’s recent behavior (opens, clicks, unsubscribes) to help
    with list segmentation.
  - **Deliverability Tools:** Includes DMARC monitoring, 24/7 blacklist monitoring, inbox placement testing, and email
    server testing.
  - **Email Finder & Warmup:** A B2B search tool to find professional contacts and an automated service to build or repair
    a domain’s sender reputation.

  #### Security & Performance

  ZeroBounce maintains high standards for security and reliability, featuring:

  - **Compliance:** The platform is SOC 2 Type 2 and ISO-27001 certified, and fully compliant with GDPR, HIPAA, and CCPA.
  - **Reliability:** Guarantees 99.99% API reliability with one of the industry's lowest "unknown" result rates (averaging
    1.69% in 2024).
  - **24/7 Support:** Provides round-the-clock live chat and email support with an average response time of under 20
    seconds for chat.

  ---

  ## Installation

  The ZeroBounce node can be found in the n8n nodes list.

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community
  nodes documentation.

  ---

  ## Operations

  ### 🛡️ Validation

  | Operation         | Description                                                  |
  |:------------------|:-------------------------------------------------------------|
  | Validate Email    | Check a single email for validity, sub-status, and metadata. |
  | Validate Batch    | Validate up to 200 email addresses in a single request.      |
  | Bulk: Send File   | Upload a CSV or TXT file for large-scale list cleaning.      |
  | Bulk: Get File    | Download the processed results of a bulk validation job.     |
  | Bulk: File Status | Monitor the real-time progress of a file being validated.    |
  | Bulk: Delete File | Permanently remove a processed file from ZeroBounce servers. |

  ### 🤖 A.I. Scoring

  | Operation         | Description                                                 |
  |:------------------|:------------------------------------------------------------|
  | Score Email       | Get an AI-driven quality score (1-10) for a single email.   |
  | Bulk: Send File   | Upload a file to score multiple "catch-all" or valid leads. |
  | Bulk: Get File    | Download the AI scoring results for your uploaded file.     |
  | Bulk: File Status | Check the percentage completion of an AI scoring job.       |
  | Bulk: Delete File | Delete an AI scoring file once processing is finished.      |

  ### 🔍 Email Finder

  | Operation          | Description                                                               |
  |:-------------------|:--------------------------------------------------------------------------|
  | Find Email Address | Discover professional emails using a person's name and domain or company. |
  | Bulk: Send File    | Upload a list of names and domains to find emails at scale.               |
  | Bulk: Get File     | Retrieve the results of a bulk email finder operation.                    |
  | Bulk: File Status  | Track the status of a bulk email finding request.                         |
  | Bulk: Delete File  | Remove a bulk email finder file from your dashboard.                      |

  ### 🌐 Domain Search

  | Operation         | Description                                                   |
  |:------------------|:--------------------------------------------------------------|
  | Domain Search     | Find email address formats associated with a specific domain. |
  | Bulk: Send File   | Submit a file of domains to perform a bulk search.            |
  | Bulk: Get File    | Download the results of a bulk domain search.                 |
  | Bulk: File Status | Monitor the progress of a bulk domain search job.             |
  | Bulk: Delete File | Clean up your domain search history by deleting files.        |

  ## 📊 Activity Data

  | Operation         | Description                                                   |
  |:------------------|:--------------------------------------------------------------|
  | Get Activity Data | Retrieve metadata regarding a user's recent email engagement. |

  ### 💳 Account

  | Operation       | Description                                                    |
  |:----------------|:---------------------------------------------------------------|
  | Credits Balance | Check the remaining credits in your ZeroBounce account.        |
  | API Usage       | Get a breakdown of your API usage over a specific time period. |
  | List Filters    | View all active allow/block filters.                           |
  | Add Filter      | Add a filter to your allow/block lists.                        |
  | Delete Filter   | Remove a filter from your allow/block lists.                   |

  ---

  ## Credentials

  You need a ZeroBounce API Key to use this node. Follow the steps below to generate one for free.

  ### 🔑 API Key

  1. Open your ZeroBounce API dashboard [ZeroBounce API](https://www.zerobounce.net/members/API).
  2. Click 'Create a new API Key'.
  3. Enter a descriptive name for your key in the API Key Name field, like 'n8n integration'.
  4. Set the key to active and optionally configure the IP address(es) it can be used from.
  5. Toggle the API Keys' visibility and copy the value shown.

  For more information, see [API Keys Management](https://www.zerobounce.net/docs/api-dashboard/#API_keys_management)

  ---

  ## Usage

  ### 🧪 Workflow Testing

  Use [API Sandbox Mode](https://www.zerobounce.net/docs/email-validation-api-quickstart/#sandbox_mode__v2__)
  data to test workflows without using your ZeroBounce credits.

  ---

  ### 🛡 Single Email Validation

  The Validate Email operation allows you to verify a single email address in real-time.
  This is ideal for cleaning leads from signup forms, chat interfaces, or individual CRM entries.

  #### 🛠️ Step-by-Step Setup

  1. **Add the Node:** Add the **ZeroBounce** node to your n8n canvas and select the **Validate** operation.
  2. **Enter Email:** In the Email field, provide the address you wish to check.
     Use an expression to pull data from a previous node (e.g., `{{ $json.email }}` or
     `{{ $('Shopify customer created').item.json.email }}`).
  3. **Add Options:** Use the `Add option` button to add optional fields
  4. **Execute:** Run the node to receive the validation results.

  #### ⚙️ Parameters

  While only the email address is required, you can refine your results using the following optional parameters found in
  the node's settings:

  | Parameter             | Optional | Description                                                                                                                                                                                                                                                                                |
  |:----------------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | Email                 |          | The email address you want to validate                                                                                                                                                                                                                                                     |
  | IP Address            | ✔️       | Provide the user's IP address (IPv4) to gain location metadata (Country, City, Zip) and check if the IP is associated with known proxy/VPN usage.                                                                                                                                          |
  | Include Activity Data | ✔️       | Provides metadata about the user's recent engagement, such as the last time they opened, clicked, or forwarded an email (e.g., within 30, 90, or 180 days).                                                                                                                                |
  | Verify+               | ✔️       | Read before enabling: [Verify+](https://www.zerobounce.net/docs/email-list-validation/verify-plus#Verify_Plus). Significantly reduces "Catch-all" results. It uses proprietary technology to provide a definitive valid or invalid status for many domains that normally return catch-all. |
  | Timeout (Seconds)     | ✔️       | Adjust the maximum time (in seconds) the node should wait for a response from the API. Default is typically sufficient for most workflows. When a request exceeds this timeout, the API will return unknown / greylisted.                                                                  |

  #### 📊 Understanding the Response

  A successful execution returns a JSON object with the following key fields:

  - **Status:** The core result (e.g., `valid`, `invalid`, `catch-all`, `spamtrap`, `abuse`, `do_not_mail`, `unknown`).
  - **Sub Status:** Detailed reasoning for the status (e.g., `mailbox_not_found`, `global_suppression`, `possible_trap`).
  - **Account / Domain:** Parsed components of the email address.
  - **Did You Mean:** A suggestion if the API detects a common typo (e.g., `john@gnail.com` suggests `john@gmail.com`).
  - **Flags:** Boolean flags for `free_email`, `disposable`, and `role_based` accounts.
  - **Metadata:** Information such as the domain's MX records, SMTP provider, and (if IP was provided) geographic data.

  ##### ✨ Example Response:

  ```json
  {
    "address": "support@zerobounce.net",
    "status": "do_not_mail",
    "sub_status": "role_based_catch_all",
    "free_email": false,
    "did_you_mean": null,
    "account": "support",
    "domain": "zerobounce.net",
    "domain_age_days": "3286",
    "smtp_provider": "g-suite",
    "mx_found": "true",
    "mx_record": "aspmx.l.google.com",
    "firstname": null,
    "lastname": null,
    "gender": null,
    "country": "United States",
    "region": "Florida",
    "city": "Boca Raton",
    "zipcode": "33428",
    "processed_at": "2026-01-23 14:50:00.159"
  }
  ```

  #### 💡 Pro Tip: Logic Routing

  After this node, use a Switch or If node to route your workflow:

  - **If Status = `valid`:** Route to your "Valid" path, e.g. create a CRM contact
  - **If Status = `catch-all`:** Route to the AI Scoring node for further vetting
  - **If Status = `invalid` (or fallback):** Route to "Rejected" path, e.g. add entry to a table for manual review

  As used in
  this [Example Template: Single Validation Lead Vetting](https://n8n.io/workflows/12601-vet-new-shopify-leads-with-zerobounce-and-sync-qualified-contacts-to-hubspot/)

  ---

  ### 🛡 Batch Email Validation

  The Batch Validate Email operation allows you to verify up to 200 email addresses in real-time.
  This is ideal for processing small lists of leads retrieved from a database, an API, or a previous n8n node without the
  overhead of file uploads.

  This request is rate limited,
  see [Batch Email Validation API Documentation](https://www.zerobounce.net/docs/email-validation-api-quickstart/v2-batch-validate-emails).

  #### 🛠️ Step-by-Step Setup

  1. **Add the Node:** Add the **ZeroBounce** node to your n8n canvas and select the **Validate Batch** operation.
  2. **Combine Items:** Enabled by default,
      - **Enabled (default):** Combines multiple input items into a single request.
      - **Disabled:** Handles each input item as a batch request. The data should already be batched.
  3. **Split Items:**
      - **Enabled (default):** Splits the response into individual items for individual processing.
      - **Disabled:** The response is returned as-is with an array of results and an array of errors.
  4. **Enter Data:** Data is intelligently extracted from one of the three **Item Input Types** (scanning for email and
     IP address fields, e.g. `email`, `email_address`, `ip`, `ip_address` etc.):
      - **Field Assignment:** Drag and drop fields from previous node outputs to map a field, object or array from input
        items which already contain the email/IP fields.
          - **Object/Field:** Use with 'Combine Items' enabled, an email from each item will be combined into an
            array in a single batch request.
          - **Array:** The values will be extracted from this array and sent in the batch request.If 'Combine Items'
            is enabled, arrays will be joined)
      - **JSON Input:** Freeform JSON to be used as the input. Useful when you already have JSON in the correct format.
          - **Expected format:** ```{ "data": [ {"email_address": "valid@example.com", "ip_address": "99.110.204.1" } ] }```
      - **Mapped:** Map individual email/IP fields from input items
          - With 'Combine Items' enabled the values from each input item will be combined into a single array in the batch
            request.
  5. **Add Options:** Use the `Add option` button to add optional fields
  6. **Execute:** Run the node to receive the validation results.

  #### ⚙️ Parameters

  While only the input data containing email addresses is required, you can refine your results using the following
  optional parameters found in
  the node's settings:

  | Parameter                  | Optional | Description                                                                                                                                                                                                                                                                                |
  |:---------------------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | Item Input: Email(s)       |          | The email address(es) you want to validate. This can be a field, object or array from your input items, optionally combined to create a single batch request.                                                                                                                              |
  | Item Input: IP Address(es) | ✔️       | Pair an email address with an IP address (IPv4) to gain location metadata (Country, City, Zip) and check if the IP is associated with known proxy/VPN usage.                                                                                                                               |
  | Include Activity Data      | ✔️       | Provides metadata about the user's recent engagement, such as the last time they opened, clicked, or forwarded an email (e.g., within 30, 90, or 180 days).                                                                                                                                |
  | Verify+                    | ✔️       | Read before enabling: [Verify+](https://www.zerobounce.net/docs/email-list-validation/verify-plus#Verify_Plus). Significantly reduces "Catch-all" results. It uses proprietary technology to provide a definitive valid or invalid status for many domains that normally return catch-all. |
  | Timeout (Seconds)          | ✔️       | Adjust the maximum time (3 - 60 seconds) the node should wait for a response from the API. Default is typically sufficient for most workflows. When a request exceeds this timeout, the API will return unknown / greylisted.                                                              |

  #### 📊 Understanding the Response

  A successful execution returns a JSON object with the following fields:

  - **Split Items Enabled (default):**
      - An output item per email containing validation results.
        See [Example Validation Response](#-example-response)
  - **Split Items Disabled:**
      - `email_batch`: An array of validation results.
        See [Example Validation Response](#-example-response)
      - `errors`: An array of errors

  #### 💡 Pro Tip: Handling Large Lists (> 200 items)

  If your workflow needs to validate more than 200 emails at once, you should implement a Looping & Merging pattern:

  - **Split into Batches:** Use the **Loop** node to chunk your data into batches of 200.
  - **Loop:** Connect the 'loop' output of the **Loop** node to the **Validate Email Batch** node.
  - **Validate:** Connect the **Validate Email Batch** node output to the **Loop** node input.
  - **Results:** Connect the 'done' output of the **Loop** node to the rest of your workflow.

  #### ⚡ Optional enhancement: Merge Validation Results

  - **Merge Results:** After the loop, you can use a **Merge** node to join the validation results with your original
    items using the email address as the unique identifier.
      - This enriches your original data with the new validation results for easier handling in the rest of your workflow.
      - Connect the output of the node before the loop to 'Input 1' of your **Merge** node.
      - Connect the 'done' output of the **Loop** node to 'Input 2' of your **Merge** node.
      - Configure the **Merge** node to 'Combine By: Matching Fields' and choose `email_address` for Input 1 and `address`
        for Input 2.

  ---

  ### ⏳ Bulk File Webhook Integration (Wait Node)

  See our
  [Example Template: Bulk Validation](https://n8n.io/workflows/11538-bulk-email-validation-and-ai-scoring-with-zerobounce/)

  To efficiently handle bulk files without manual polling:

  1. Add a [Wait node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/#on-webhook-call)
     to your workflow.
  2. Set it to 'On Webhook Call' with the HTTP Method set to 'POST'.
  3. Optional: Add a webhook suffix with the options dropdown e.g. `zerobounce`.
  4. In the **Send File** node, set the `Return URL` field to the auto-generated webhook URL e.g.
     `{{$execution.resumeUrl}}` or `{{$execution.resumeUrl}}/zerobounce`
  5. The workflow will pause and automatically resume when ZeroBounce sends the completion notification.
  6. Optional: The status of webhook calls can be viewed
     here [API Callback Status](https://www.zerobounce.net/members/API/status)

  #### ⚡ Optional enhancement: Add Timeout and Status Checks

  Adding a wait timeout and manual status check can prevent delayed or abandoned executions when there is an issue with a
  callback, e.g. network connectivity issues.

  1. Add a timeout to the **Wait** node (e.g. 5 minutes) using the `Limit Wait Time` field and `Limit Type` set to
     `After Time Interval`
  2. Add a **File Status** node to check on the processing status of the file
  3. Add a **Switch** node with 3 branches checking `{{ $json.file_status }}`:
      1. **`Complete`:** Completed, get the processed file
      2. **`Processing`:** In progress, loop back into your wait node
      3. **`Failed` (or fallback):** The file failed to process, exit and review the reason it failed

  ---

  ## Support

  If you encounter an issue with this node, please [Contact Us](https://www.zerobounce.net/contact-us/).

  ---

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ---

  ## Resources

  * [ZeroBounce Website](https://zerobounce.net)
  * [ZeroBounce API Developer Documentation](https://www.zerobounce.net/docs)
  * [ZeroBounce API Dashboard](https://www.zerobounce.net/members/API)
  * [ZeroBounce API Callback Status](https://www.zerobounce.net/members/API/status)
  * [Example Template: Bulk Validation](https://n8n.io/workflows/11538-bulk-email-validation-and-ai-scoring-with-zerobounce/)
  * [Example Template: Single Validation](https://n8n.io/workflows/11498-validate-and-score-email-addresses-with-zerobounce-ai/)
  * [Example Template: Single Validation Lead Vetting](https://n8n.io/workflows/12601-vet-new-shopify-leads-with-zerobounce-and-sync-qualified-contacts-to-hubspot/)
  * [Example Template: Validate & score leads with ZeroBounce AI before sending Gmail emails](https://n8n.io/workflows/11902-validate-and-score-leads-with-zerobounce-ai-before-sending-gmail-emails/)
  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"Validates and verifies email addresses using the ZeroBounce API to improve deliverability and protect sender reputation, supporting single and bulk operations.","capabilities":["Single email validation","Batch email validation (up to 200)","Bulk file upload validation","AI-driven email scoring (1-10)","Bulk AI scoring","Email finder for professional contacts","Domain search","Activity data retrieval (opens, clicks, unsubscribes)","File status monitoring","Bulk file deletion"],"authentication":"API key required","commonUseCases":["Cleaning email lists before sending campaigns","Improving email deliverability scores","Identifying invalid, disposable, or spam trap addresses","Finding professional email addresses for outreach","Monitoring API usage and credit balances"],"limitations":["Batch validation is limited to 200 emails per request","Bulk operations require file upload/download workflow steps","AI scoring results are based on likelihood of reaching a real person"],"relatedNodes":["Wait Node","Function Node","Code Node","HTTP Request Node"]}


node_type: n8n-nodes-bounceban.bounceban
package_name: n8n-nodes-bounceban
display_name: BounceBan
description: Verify email addresses using BounceBan API - We verify catch-all emails
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: davis.lee
author_github_url: https://github.com/bounceban-com/
npm_package_name: n8n-nodes-bounceban
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:33.357Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Email",
          "value": "email",
          "description": "Validate email"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validateEmail",
      "options": [
        {
          "name": "Verify Single Email",
          "value": "validateEmail",
          "action": "Verify a single email address",
          "description": "Verify a single email address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Verify Single Email",
      "value": "validateEmail",
      "action": "Verify a single email address",
      "description": "Verify a single email address",
      "resource": "email"
    }
  ]


node_type: @seranking/n8n-nodes-seranking.seRanking
package_name: @seranking/n8n-nodes-seranking
display_name: SE Ranking
description: Interact with SE Ranking API for SEO data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: mikhail.liubushkin
author_github_url: https://github.com/seranking/n8n-nodes-seranking.git
npm_package_name: @seranking/n8n-nodes-seranking
npm_version: 2.0.6
community_fetched_at: 2026-07-14T14:40:33.358Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "domainAnalysis",
      "options": [
        {
          "name": "Account System",
          "value": "accountSystem",
          "description": "Account balance, profile, and subscription info"
        },
        {
          "name": "AI Result Tracker",
          "value": "aiResultTracker",
          "description": "Track brand visibility across AI search engines"
        },
        {
          "name": "AIRT Groups",
          "value": "airtGroups",
          "description": "Manage AI Result Tracker prompt groups"
        },
        {
          "name": "AI Search",
          "value": "aiSearch",
          "description": "LLM visibility and AI search data"
        },
        {
          "name": "Analytics Traffic",
          "value": "analyticsTraffic",
          "description": "Google Search Console data and SEO potential"
        },
        {
          "name": "Backlink Checker",
          "value": "backlinkChecker",
          "description": "Backlink monitoring, disavow, and groups"
        },
        {
          "name": "Backlinks",
          "value": "backlinks",
          "description": "Backlink analysis and authority metrics"
        },
        {
          "name": "Competitors",
          "value": "competitors",
          "description": "Manage competitors and retrieve ranking data"
        },
        {
          "name": "Domain Analysis",
          "value": "domainAnalysis",
          "description": "Domain keyword rankings and competitor analysis"
        },
        {
          "name": "General Data",
          "value": "generalData",
          "description": "System search engines, languages, regions, and keyword volume"
        },
        {
          "name": "Keyword Groups",
          "value": "keywordGroups",
          "description": "Manage keyword groups within a project"
        },
        {
          "name": "Keyword Research",
          "value": "keywordResearch",
          "description": "Keyword metrics, volume, CPC, and related keywords"
        },
        {
          "name": "Marketing Plan",
          "value": "marketingPlan",
          "description": "Marketing plan checklists and tasks"
        },
        {
          "name": "Project Groups",
          "value": "projectGroups",
          "description": "Manage project groups within the account"
        },
        {
          "name": "Project Management",
          "value": "projectManagement",
          "description": "Manage projects and search engine configurations"
        },
        {
          "name": "SE Visible",
          "value": "seVisible",
          "description": "AI visibility tracking — projects, brands, topics, prompts, and cited sources"
        },
        {
          "name": "Search Volume",
          "value": "searchVolume",
          "description": "Keyword search volume check requests"
        },
        {
          "name": "SERP Classic",
          "value": "serpClassic",
          "description": "SERP tracking and results retrieval"
        },
        {
          "name": "Sub-Account Management",
          "value": "subAccount",
          "description": "Manage sub-accounts, sharing, and permissions"
        },
        {
          "name": "URL Tags",
          "value": "urlTags",
          "description": "Manage landing page tags within a site"
        },
        {
          "name": "Website Audit (Data)",
          "value": "websiteAudit",
          "description": "Site crawling, technical SEO, and on-page analysis"
        },
        {
          "name": "Website Audit (Project)",
          "value": "websiteAuditProject",
          "description": "Technical SEO audits lifecycle management"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOverview",
      "options": [
        {
          "name": "Get Overview",
          "value": "getOverview",
          "action": "Get AI search overview",
          "description": "Get LLM visibility metrics for a domain"
        },
        {
          "name": "Discover Brand",
          "value": "discoverBrand",
          "action": "Discover brand name",
          "description": "Identify brand name for a domain"
        },
        {
          "name": "Get Prompts by Target",
          "value": "getPromptsByTarget",
          "action": "Get prompts by target",
          "description": "Get prompts mentioning target domain"
        },
        {
          "name": "Get Prompts by Brand",
          "value": "getPromptsByBrand",
          "action": "Get prompts by brand",
          "description": "Get prompts mentioning brand name"
        },
        {
          "name": "Get Leaderboard",
          "value": "getLeaderboard",
          "action": "Get AI search leaderboard",
          "description": "Compare domain performance against competitors across LLMs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSummary",
      "options": [
        {
          "name": "Get Summary",
          "value": "getSummary",
          "action": "Get backlinks summary",
          "description": "Get extended backlink statistics (total links, domains, etc)"
        },
        {
          "name": "Get Metrics",
          "value": "getMetrics",
          "action": "Get backlink metrics",
          "description": "Get key backlink metrics for one or more targets"
        },
        {
          "name": "Get All Backlinks",
          "value": "getAll",
          "action": "Get all backlinks",
          "description": "Get detailed list of backlinks (supports sorting/pagination)"
        },
        {
          "name": "Get Raw Backlinks",
          "value": "getRaw",
          "action": "Get raw backlinks",
          "description": "Stream backlinks in batches (cursor-based for large datasets)"
        },
        {
          "name": "Get Count",
          "value": "getCount",
          "action": "Get backlinks count",
          "description": "Get total number of backlinks to a target"
        },
        {
          "name": "Export Backlinks",
          "value": "export",
          "action": "Export backlinks",
          "description": "Bulk export all backlinks (for large-scale retrieval)"
        },
        {
          "name": "Check Export Status",
          "value": "exportStatus",
          "action": "Check export status",
          "description": "Check status of bulk export job"
        },
        {
          "name": "Download Export Data",
          "value": "exportDownload",
          "action": "Download export data",
          "description": "Download completed export data"
        },
        {
          "name": "Get History",
          "value": "getHistory",
          "action": "Get backlinks history",
          "description": "Get backlinks found or lost in a date range"
        },
        {
          "name": "Get History Count",
          "value": "getHistoryCount",
          "action": "Get backlinks history count",
          "description": "Get daily counts of new/lost backlinks over a date range"
        },
        {
          "name": "Get Cumulative History",
          "value": "getCumulativeHistory",
          "action": "Get cumulative backlinks history",
          "description": "Get daily total of live backlinks over a date range"
        },
        {
          "name": "Get Anchors",
          "value": "getAnchors",
          "action": "Get anchor texts",
          "description": "Get anchor texts of backlinks pointing to the target"
        },
        {
          "name": "Get Referring Domains",
          "value": "getRefDomains",
          "action": "Get referring domains",
          "description": "Get list of domains linking to the target"
        },
        {
          "name": "Get Referring Domains Count",
          "value": "getRefDomainsCount",
          "action": "Get referring domains count",
          "description": "Get number of unique referring domains"
        },
        {
          "name": "Get Referring Domains History",
          "value": "getRefDomainsHistory",
          "action": "Get referring domains history",
          "description": "Get referring domains with new/lost links in a date range"
        },
        {
          "name": "Get Referring Domains History Count",
          "value": "getRefDomainsHistoryCount",
          "action": "Get referring domains history count",
          "description": "Get count of referring domains with link changes"
        },
        {
          "name": "Get Referring IPs",
          "value": "getReferringIps",
          "action": "Get referring IPs",
          "description": "Get IPv4 addresses of sites linking to the target"
        },
        {
          "name": "Get Referring IPs Count",
          "value": "getReferringIpsCount",
          "action": "Get referring IPs count",
          "description": "Get number of unique IP addresses linking to the target"
        },
        {
          "name": "Get Referring Subnets Count",
          "value": "getReferringSubnetsCount",
          "action": "Get referring subnets count",
          "description": "Get number of unique /24 IP subnets linking to the target"
        },
        {
          "name": "Get Indexed Pages",
          "value": "getIndexedPages",
          "action": "Get indexed pages",
          "description": "Get pages indexed or found by the backlink crawler"
        },
        {
          "name": "Get Authority",
          "value": "getAuthority",
          "action": "Get authority metrics",
          "description": "Get InLink Rank (page authority) and Domain InLink Rank"
        },
        {
          "name": "Get Domain Authority",
          "value": "getDomainAuthority",
          "action": "Get domain authority",
          "description": "Get Domain InLink Rank for the target domain"
        },
        {
          "name": "Get Domain Authority Distribution",
          "value": "getDomainAuthorityDistribution",
          "action": "Get domain authority distribution",
          "description": "Get distribution of domain authority scores among linking domains"
        },
        {
          "name": "Get Domain Authority History",
          "value": "getDomainAuthorityHistory",
          "action": "Get domain authority history",
          "description": "Get historical Domain InLink Rank values for the target domain"
        },
        {
          "name": "Get Page Authority",
          "value": "getPageAuthority",
          "action": "Get page authority",
          "description": "Get InLink Rank (authority) for the target URL"
        },
        {
          "name": "Get Page Authority History",
          "value": "getPageAuthorityHistory",
          "action": "Get page authority history",
          "description": "Get historical InLink Rank values for the target URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "backlinks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOverviewWorldwide",
      "options": [
        {
          "name": "Get Regional Database Overview",
          "value": "getOverviewDb",
          "action": "Get regional database overview",
          "description": "Get detailed statistics for a specific regional database (FAST)"
        },
        {
          "name": "Get Worldwide Aggregate",
          "value": "getOverviewWorldwide",
          "action": "Get worldwide aggregate statistics",
          "description": "Get worldwide aggregate statistics for a domain (RECOMMENDED)"
        },
        {
          "name": "Get Worldwide Aggregate for URL",
          "value": "getWorldwideAggregateUrl",
          "action": "Get worldwide aggregate for URL",
          "description": "Aggregate a specific URL's global search performance statistics for both organic and paid traffic"
        },
        {
          "name": "Get Domain Pages",
          "value": "getDomainPages",
          "action": "Get domain pages",
          "description": "Get a filterable list of pages for a domain with their keyword performance metrics"
        },
        {
          "name": "Get Domain Subdomains",
          "value": "getDomainSubdomains",
          "action": "Get domain subdomains",
          "description": "Get a list of subdomains for a domain with their traffic and keyword metrics"
        },
        {
          "name": "Get Overview History",
          "value": "getOverviewHistory",
          "action": "Get overview history",
          "description": "Get historical domain metrics over a date range"
        },
        {
          "name": "Get Keywords",
          "value": "getKeywords",
          "action": "Get domain keywords",
          "description": "Get keywords for which a domain ranks"
        },
        {
          "name": "Get Keywords Comparison",
          "value": "getKeywordsComparison",
          "action": "Get keywords comparison",
          "description": "Compare keyword rankings between two domains"
        },
        {
          "name": "Get Competitors",
          "value": "getCompetitors",
          "action": "Get domain competitors",
          "description": "Get competitor domains"
        },
        {
          "name": "Get Paid Ads for Keyword",
          "value": "getAdsForKeyword",
          "action": "Get paid ads for keyword",
          "description": "Get domains advertising on a specific keyword"
        },
        {
          "name": "Get Paid Ads for Domain",
          "value": "getAdsForDomain",
          "action": "Get paid ads for domain",
          "description": "Get keywords a domain is advertising on"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domainAnalysis"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "exportMetrics",
      "options": [
        {
          "name": "Export Metrics",
          "value": "exportMetrics",
          "action": "Export keyword metrics",
          "description": "Get volume, CPC, competition, and difficulty for multiple keywords"
        },
        {
          "name": "Get Similar Keywords",
          "value": "getSimilar",
          "action": "Get similar keywords",
          "description": "Find semantically similar keywords"
        },
        {
          "name": "Get Related Keywords",
          "value": "getRelated",
          "action": "Get related keywords",
          "description": "Find topically related keywords with overlapping URLs"
        },
        {
          "name": "Get Question Keywords",
          "value": "getQuestions",
          "action": "Get question keywords",
          "description": "Find question-based keywords"
        },
        {
          "name": "Get Longtail Keywords",
          "value": "getLongtail",
          "action": "Get longtail keywords",
          "description": "Find long-tail keyword variations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "keywordResearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addTasks",
      "options": [
        {
          "name": "Add Tasks",
          "value": "addTasks",
          "action": "Add SERP tasks",
          "description": "Create SERP tasks for keywords (returns task IDs)"
        },
        {
          "name": "Get Results (standard)",
          "value": "getResults",
          "action": "Get SERP results",
          "description": "Get status or standard SERP results for a task"
        },
        {
          "name": "List Tasks",
          "value": "listTasks",
          "action": "List SERP tasks",
          "description": "List recent SERP tasks (last 24 hours)"
        },
        {
          "name": "Get Advanced Results",
          "value": "getAdvancedResults",
          "action": "Get advanced SERP results",
          "description": "Retrieve advanced (detailed) SERP results"
        },
        {
          "name": "Get Locations",
          "value": "getLocations",
          "action": "Get SERP locations",
          "description": "Get available location IDs for SERP queries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "serpClassic"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAudits",
      "options": [
        {
          "name": "Create Standard Audit",
          "value": "createStandard",
          "action": "Create standard audit",
          "description": "Launch a standard (HTML) site audit"
        },
        {
          "name": "Create Advanced Audit",
          "value": "createAdvanced",
          "action": "Create advanced audit",
          "description": "Launch a JS-rendered site audit (for SPAs)"
        },
        {
          "name": "List Audits",
          "value": "listAudits",
          "action": "List all audits",
          "description": "Get all audits with status for the account"
        },
        {
          "name": "Get Audit Status",
          "value": "getStatus",
          "action": "Get audit status",
          "description": "Get status/progress of a specific audit"
        },
        {
          "name": "Get Audit Report",
          "value": "getReport",
          "action": "Get audit report",
          "description": "Retrieve full audit report for a completed audit"
        },
        {
          "name": "Get Crawled Pages",
          "value": "getCrawl",
          "action": "Get crawled pages",
          "description": "Get list of crawled pages for an audit"
        },
        {
          "name": "Get Issues by Type",
          "value": "getIssuesByType",
          "action": "Get issues by type",
          "description": "Get pages affected by a specific issue type"
        },
        {
          "name": "Get Issues by URL",
          "value": "getIssuesByUrl",
          "action": "Get issues for URL",
          "description": "Get all issue details for a specific audited URL"
        },
        {
          "name": "Get Links",
          "value": "getLinks",
          "action": "Get audit links",
          "description": "Get all outgoing links found during the audit"
        },
        {
          "name": "Get Audit History",
          "value": "getHistory",
          "action": "Get audit history",
          "description": "Get historical snapshot of a specific audit run"
        },
        {
          "name": "Update Audit",
          "value": "updateAudit",
          "action": "Update audit details",
          "description": "Update the title of an audit"
        },
        {
          "name": "Delete Audit",
          "value": "deleteAudit",
          "action": "Delete audit",
          "description": "Delete an audit by ID"
        },
        {
          "name": "Recheck Standard Audit",
          "value": "recheckStandard",
          "action": "Recheck standard audit",
          "description": "Re-run a standard audit with same settings"
        },
        {
          "name": "Recheck Advanced Audit",
          "value": "recheckAdvanced",
          "action": "Recheck advanced audit",
          "description": "Re-run an advanced audit with same settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "websiteAudit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listProjects",
      "options": [
        {
          "name": "Add Keywords",
          "value": "addKeywords",
          "action": "Add keywords to project",
          "description": "Add keywords to a project"
        },
        {
          "name": "Add Project",
          "value": "addProject",
          "action": "Add project",
          "description": "Create a new project in the account"
        },
        {
          "name": "Add Search Engine",
          "value": "addSearchEngine",
          "action": "Add search engine to project",
          "description": "Add a new search engine configuration to a project"
        },
        {
          "name": "Change Project Settings",
          "value": "changeProject",
          "action": "Change project settings",
          "description": "Update settings of a project"
        },
        {
          "name": "Change Search Engine",
          "value": "changeSearchEngine",
          "action": "Change search engine in project",
          "description": "Update a search engine configuration in a project"
        },
        {
          "name": "Delete Keywords",
          "value": "deleteKeywords",
          "action": "Delete keywords",
          "description": "Delete keywords from a project"
        },
        {
          "name": "Delete Project",
          "value": "deleteProject",
          "action": "Delete project",
          "description": "Delete a project from the account"
        },
        {
          "name": "Delete Search Engine",
          "value": "deleteSearchEngine",
          "action": "Delete search engine from project",
          "description": "Remove a search engine configuration from a project"
        },
        {
          "name": "Edit Keyword",
          "value": "editKeyword",
          "action": "Edit keyword",
          "description": "Update fields of an existing keyword in a project"
        },
        {
          "name": "Get Ads Chart",
          "value": "getAds",
          "action": "Get ads chart",
          "description": "Get advertisement statistics by date"
        },
        {
          "name": "Get Historical Dates",
          "value": "getHistoricalDates",
          "action": "Get historical dates",
          "description": "Get historical ranking check dates"
        },
        {
          "name": "Get Keyword Statistics",
          "value": "getPositions",
          "action": "Get keyword statistics",
          "description": "Get keyword ranking statistics for a project"
        },
        {
          "name": "Get Project Stats",
          "value": "getStats",
          "action": "Get project stats",
          "description": "Get summary statistics for a project"
        },
        {
          "name": "List Keywords",
          "value": "listKeywords",
          "action": "List keywords",
          "description": "List all keywords for a project"
        },
        {
          "name": "List Projects",
          "value": "listProjects",
          "action": "List all projects",
          "description": "Get a list of all projects in the account"
        },
        {
          "name": "List Search Engines",
          "value": "listSearchEngines",
          "action": "List project search engines",
          "description": "Get search engines configured for a project"
        },
        {
          "name": "Run Position Check",
          "value": "runRecheck",
          "action": "Run position check",
          "description": "Trigger a ranking position check for keywords"
        },
        {
          "name": "Set Manual Position",
          "value": "setManualPosition",
          "action": "Set manual keyword position",
          "description": "Set a ranking position for a keyword on a date"
        },
        {
          "name": "List Check Dates",
          "value": "listCheckDates",
          "action": "List check dates",
          "description": "Get actual ranking check dates for a project"
        },
        {
          "name": "Get Ranking Trends",
          "value": "getRankingTrends",
          "action": "Get ranking trends",
          "description": "Get ranking trend time series (avg position, visibility, top10)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectManagement"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listGroups",
      "options": [
        {
          "name": "Add Group",
          "value": "addGroup",
          "action": "Add project group",
          "description": "Add a new project group to the account"
        },
        {
          "name": "Rename Group",
          "value": "renameGroup",
          "action": "Rename project group",
          "description": "Rename an existing project group"
        },
        {
          "name": "Delete Group",
          "value": "deleteGroup",
          "action": "Delete project group",
          "description": "Delete a project group from the account"
        },
        {
          "name": "List Groups",
          "value": "listGroups",
          "action": "List project groups",
          "description": "List all project groups in the account"
        },
        {
          "name": "Move Projects to Group",
          "value": "moveProjects",
          "action": "Move projects to group",
          "description": "Transfer projects from one group to another"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectGroups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSiteBrand",
      "options": [
        {
          "name": "Add Prompts",
          "value": "addPrompts",
          "action": "Add prompts",
          "description": "Add prompts (keywords) to an LLM engine"
        },
        {
          "name": "Create LLM Engine",
          "value": "createLlmEngine",
          "action": "Create LLM engine",
          "description": "Add a new LLM engine to a site"
        },
        {
          "name": "Delete LLM Engine",
          "value": "deleteLlmEngine",
          "action": "Delete LLM engine",
          "description": "Remove an LLM engine from a site"
        },
        {
          "name": "Delete Prompts",
          "value": "deletePrompts",
          "action": "Delete prompts",
          "description": "Delete prompts from an LLM engine"
        },
        {
          "name": "Get Competitors Breakdown",
          "value": "getCompetitorsBreakdown",
          "action": "Get competitors breakdown",
          "description": "Get per-prompt brand and source breakdown for competitors in AI answers"
        },
        {
          "name": "Get Competitors Check Dates",
          "value": "getCompetitorsCheckDates",
          "action": "Get competitors check dates",
          "description": "Get dates on which a tracked prompt has competitor data"
        },
        {
          "name": "Get Competitors Source Metrics",
          "value": "getCompetitorsSourceMetrics",
          "action": "Get competitors source metrics",
          "description": "Get SEO metrics for sources cited in a prompt answer on a specific date"
        },
        {
          "name": "Get LLM Engine",
          "value": "getLlmEngine",
          "action": "Get LLM engine",
          "description": "Get details of a specific LLM engine"
        },
        {
          "name": "Get LLM Statistics",
          "value": "getLlmStatistics",
          "action": "Get LLM statistics",
          "description": "Get presence and overlap statistics for an LLM engine"
        },
        {
          "name": "Get LLM Status",
          "value": "getLlmStatus",
          "action": "Get LLM status",
          "description": "Get tracking status and progress for an LLM engine"
        },
        {
          "name": "Get Prompt Answer",
          "value": "getPromptAnswer",
          "action": "Get prompt answer",
          "description": "Get the full AI answer text, sources, brands, and organic URLs for a tracked prompt"
        },
        {
          "name": "Get Prompt Rankings",
          "value": "getPromptRankings",
          "action": "Get prompt rankings",
          "description": "Get ranking data for prompts tracked by an LLM engine"
        },
        {
          "name": "Get Site Brand",
          "value": "getSiteBrand",
          "action": "Get site brand",
          "description": "Get the brand configured for a site"
        },
        {
          "name": "Get Sources Recommendations",
          "value": "getSourcesRecommendations",
          "action": "Get sources recommendations",
          "description": "Get recommended source domains to target for AI visibility"
        },
        {
          "name": "Get Sources Summary",
          "value": "getSourcesSummary",
          "action": "Get sources summary",
          "description": "Get aggregated source mention opportunities and competitor counts"
        },
        {
          "name": "List LLM Engines",
          "value": "listLlmEngines",
          "action": "List LLM engines",
          "description": "Get all LLM engines configured for a site"
        },
        {
          "name": "List Prompts",
          "value": "listPrompts",
          "action": "List prompts",
          "description": "List prompts tracked by an LLM engine"
        },
        {
          "name": "List Source Domains",
          "value": "listSourceDomains",
          "action": "List source domains",
          "description": "List source domains cited in AI answers with coverage and mention metrics"
        },
        {
          "name": "List Source Pages",
          "value": "listSourcePages",
          "action": "List source pages",
          "description": "List individual source URLs cited in AI answers with usage metrics"
        },
        {
          "name": "Save Site Brand",
          "value": "saveSiteBrand",
          "action": "Save site brand",
          "description": "Configure or overwrite the brand for a site"
        },
        {
          "name": "Update LLM Engine",
          "value": "updateLlmEngine",
          "action": "Update LLM engine",
          "description": "Update region or language of an LLM engine"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiResultTracker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listPromptGroups",
      "options": [
        {
          "name": "Change Group Order",
          "value": "changeGroupOrder",
          "action": "Change prompt group order",
          "description": "Move a group to a new position in the site group order"
        },
        {
          "name": "Create Prompt Group",
          "value": "createPromptGroup",
          "action": "Create prompt group",
          "description": "Create a new prompt group for a site"
        },
        {
          "name": "Delete All Prompts in Group",
          "value": "deleteAllPromptsInGroup",
          "action": "Delete all prompts in group",
          "description": "Remove every prompt currently assigned to the group (group itself is kept)"
        },
        {
          "name": "Delete Prompt Group",
          "value": "deletePromptGroup",
          "action": "Delete prompt group",
          "description": "Delete a prompt group; its prompts move to the default group"
        },
        {
          "name": "List Prompt Groups",
          "value": "listPromptGroups",
          "action": "List prompt groups",
          "description": "List prompt groups for a site, optionally filtered by LLM engine"
        },
        {
          "name": "Move All Prompts Between Groups",
          "value": "moveAllPromptsBetweenGroups",
          "action": "Move all prompts between groups",
          "description": "Move every prompt from one group to another"
        },
        {
          "name": "Move Prompts to Group",
          "value": "movePromptsToGroup",
          "action": "Move prompts to group",
          "description": "Move a specific set of prompts into a target group"
        },
        {
          "name": "Rename Prompt Group",
          "value": "renamePromptGroup",
          "action": "Rename prompt group",
          "description": "Update the name of an existing prompt group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "airtGroups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listGroups",
      "options": [
        {
          "name": "Add Group",
          "value": "addGroup",
          "action": "Add keyword group",
          "description": "Create a new keyword group for a project"
        },
        {
          "name": "Delete Group",
          "value": "deleteGroup",
          "action": "Delete keyword group",
          "description": "Delete a keyword group"
        },
        {
          "name": "List Groups",
          "value": "listGroups",
          "action": "List keyword groups",
          "description": "List all keyword groups for a project"
        },
        {
          "name": "Move Keywords",
          "value": "moveKeywords",
          "action": "Move keywords to group",
          "description": "Move keywords to another group"
        },
        {
          "name": "Rename Group",
          "value": "renameGroup",
          "action": "Rename keyword group",
          "description": "Rename an existing keyword group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "keywordGroups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listCompetitors",
      "options": [
        {
          "name": "Add Competitor",
          "value": "addCompetitor",
          "action": "Add competitor",
          "description": "Add a competitor website to a project"
        },
        {
          "name": "Delete Competitor",
          "value": "deleteCompetitor",
          "action": "Delete competitor",
          "description": "Remove a competitor from a project"
        },
        {
          "name": "Get All Competitors",
          "value": "getAllCompetitors",
          "action": "Get all competitors",
          "description": "Get domains ranked in TOP 10 for tracked keywords"
        },
        {
          "name": "Get Keyword Positions",
          "value": "getPositions",
          "action": "Get competitor keyword positions",
          "description": "Get ranking statistics for competitor keywords"
        },
        {
          "name": "Get TOP 10 Results",
          "value": "getTop10",
          "action": "Get TOP 10 results",
          "description": "Get TOP 10 ranking results for a keyword"
        },
        {
          "name": "Get TOP 100 Results",
          "value": "getTop100",
          "action": "Get TOP 100 results",
          "description": "Get up to TOP 100 results for a keyword"
        },
        {
          "name": "List Competitors",
          "value": "listCompetitors",
          "action": "List competitors",
          "description": "List competitors added to a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "competitors"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listTags",
      "options": [
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag",
          "description": "Create a tag and optionally attach to URLs/domains"
        },
        {
          "name": "Delete Tag",
          "value": "deleteTag",
          "action": "Delete tag",
          "description": "Delete a tag from a site"
        },
        {
          "name": "List Tags",
          "value": "listTags",
          "action": "List tags",
          "description": "List all landing page tags for a site"
        },
        {
          "name": "Update Tag Assignment",
          "value": "updateAssignment",
          "action": "Update tag assignment",
          "description": "Assign tags to URLs and/or domains (replaces existing assignments)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "urlTags"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getGscData",
      "options": [
        {
          "name": "Calculate SEO Potential",
          "value": "getSeoPotential",
          "action": "Calculate SEO potential",
          "description": "Estimate traffic, cost, and potential leads for a site"
        },
        {
          "name": "Get Google Search Console Data",
          "value": "getGscData",
          "action": "Get Google Search Console data",
          "description": "Get popular queries and performance metrics from Google Search Console"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analyticsTraffic"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Account Balance",
          "value": "getBalance",
          "action": "Get account balance",
          "description": "Get the current balance and currency of the account"
        },
        {
          "name": "Get Subscription Data",
          "value": "getSubscription",
          "action": "Get subscription data",
          "description": "Get subscription information of the account"
        },
        {
          "name": "Get User Profile",
          "value": "getProfile",
          "action": "Get user profile",
          "description": "Get profile information of the account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountSystem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSubAccounts",
      "options": [
        {
          "name": "Create Sub-Account",
          "value": "createSubAccount",
          "action": "Create sub-account",
          "description": "Create a new sub-account"
        },
        {
          "name": "Delete Sub-Account",
          "value": "deleteSubAccount",
          "action": "Delete sub-account",
          "description": "Delete a sub-account"
        },
        {
          "name": "Get Sub-Account Details",
          "value": "getSubAccount",
          "action": "Get sub-account details",
          "description": "Get extended information about a sub-account"
        },
        {
          "name": "List Owned Projects",
          "value": "listOwnedSites",
          "action": "List owned projects",
          "description": "Get website IDs owned by a sub-account"
        },
        {
          "name": "List Shared Projects",
          "value": "listSharedSites",
          "action": "List shared projects",
          "description": "Get website IDs shared with a sub-account"
        },
        {
          "name": "List Sub-Accounts",
          "value": "listSubAccounts",
          "action": "List sub-accounts",
          "description": "Get all sub-accounts"
        },
        {
          "name": "Share Projects",
          "value": "shareProjects",
          "action": "Share projects",
          "description": "Share websites with a sub-account"
        },
        {
          "name": "Update Sub-Account",
          "value": "updateSubAccount",
          "action": "Update sub-account",
          "description": "Update an existing sub-account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSearchEngines",
      "options": [
        {
          "name": "Get Keyword Search Volume",
          "value": "getKeywordVolume",
          "action": "Get keyword search volume",
          "description": "Get search volume data for keywords in a specific region"
        },
        {
          "name": "List Languages for Google",
          "value": "listGoogleLangs",
          "action": "List languages for Google",
          "description": "Get a list of supported languages for Google"
        },
        {
          "name": "List Regions for Google",
          "value": "listGoogleRegions",
          "action": "List regions for Google",
          "description": "Get a list of Google regions (region ID + name) for location targeting"
        },
        {
          "name": "List Search Engines",
          "value": "listSearchEngines",
          "action": "List search engines",
          "description": "Get a list of available search engines with regions"
        },
        {
          "name": "List Volume Regions",
          "value": "listVolumeRegions",
          "action": "List volume regions",
          "description": "Get all regions where keyword search volume checks are available"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "generalData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listPlanItems",
      "options": [
        {
          "name": "Add Task",
          "value": "addTask",
          "action": "Add task",
          "description": "Create a new custom task in the marketing plan"
        },
        {
          "name": "Delete Task",
          "value": "deleteTask",
          "action": "Delete task",
          "description": "Delete a custom task from the marketing plan"
        },
        {
          "name": "List Plan Items",
          "value": "listPlanItems",
          "action": "List plan items",
          "description": "Get marketing plan sections, items, and notes"
        },
        {
          "name": "Set Task Status",
          "value": "setTaskStatus",
          "action": "Set task status",
          "description": "Update the completion status of a task"
        },
        {
          "name": "Update Task",
          "value": "updateTask",
          "action": "Update task",
          "description": "Update the name and description of a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "marketingPlan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAudits",
      "options": [
        {
          "name": "Create Audit",
          "value": "createAudit",
          "action": "Create audit",
          "description": "Launch a website audit"
        },
        {
          "name": "Delete Audit",
          "value": "deleteAudit",
          "action": "Delete audit",
          "description": "Delete an audit"
        },
        {
          "name": "Get All Issues for URL",
          "value": "getIssues",
          "action": "Get all issues for URL",
          "description": "Get all issues found for a specific URL"
        },
        {
          "name": "Get All Links",
          "value": "getLinks",
          "action": "Get all links",
          "description": "Get all links found during the audit"
        },
        {
          "name": "Get Audit History",
          "value": "getHistory",
          "action": "Get audit history",
          "description": "Get historical audit data for a specific date"
        },
        {
          "name": "Get Audit Pages by Issue",
          "value": "getPagesByIssue",
          "action": "Get audit pages by issue",
          "description": "Get pages affected by a specific issue"
        },
        {
          "name": "Get Audit Report",
          "value": "getReport",
          "action": "Get audit report",
          "description": "Get the full audit report"
        },
        {
          "name": "Get Audit Status",
          "value": "getStatus",
          "action": "Get audit status",
          "description": "Get the current status of an audit"
        },
        {
          "name": "Get Crawled Pages",
          "value": "getPages",
          "action": "Get crawled pages",
          "description": "Get all crawled pages from an audit"
        },
        {
          "name": "List Audits",
          "value": "listAudits",
          "action": "List audits",
          "description": "Get a list of all audits"
        },
        {
          "name": "Recheck Audit",
          "value": "recheckAudit",
          "action": "Recheck audit",
          "description": "Recheck an existing audit"
        },
        {
          "name": "Update Audit Title",
          "value": "updateTitle",
          "action": "Update audit title",
          "description": "Update the title of an audit"
        },
        {
          "name": "Get Audit Settings",
          "value": "getAuditSettings",
          "action": "Get audit settings",
          "description": "Get the full configuration of an audit"
        },
        {
          "name": "Update Audit Settings",
          "value": "updateAuditSettings",
          "action": "Update audit settings",
          "description": "Partially update audit configuration"
        },
        {
          "name": "Reset Audit Settings",
          "value": "resetAuditSettings",
          "action": "Reset audit settings",
          "description": "Restore all audit settings to defaults"
        },
        {
          "name": "List Audit Sitemaps",
          "value": "listAuditSitemaps",
          "action": "List audit sitemaps",
          "description": "List configured sitemaps for an audit"
        },
        {
          "name": "Add Audit Sitemap",
          "value": "addAuditSitemap",
          "action": "Add audit sitemap",
          "description": "Register a sitemap URL as a crawl source"
        },
        {
          "name": "Delete Audit Sitemap",
          "value": "deleteAuditSitemap",
          "action": "Delete audit sitemap",
          "description": "Remove a sitemap from crawl sources"
        },
        {
          "name": "List Audit Source Pages",
          "value": "listAuditSourcePages",
          "action": "List audit source pages",
          "description": "List uploaded custom page lists"
        },
        {
          "name": "Delete Audit Source Pages",
          "value": "deleteAuditSourcePages",
          "action": "Delete audit source pages",
          "description": "Remove an uploaded custom page list"
        },
        {
          "name": "Add Audit Source Pages",
          "value": "addAuditSourcePages",
          "action": "Add audit source pages",
          "description": "Upload a .txt list of URLs (one per line) as a custom page list"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "websiteAuditProject"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listBacklinks",
      "options": [
        {
          "name": "Add Backlink",
          "value": "addBacklink",
          "action": "Add backlink",
          "description": "Add a single backlink to monitor"
        },
        {
          "name": "Add Disavowed Backlinks",
          "value": "addDisavowed",
          "action": "Add disavowed backlinks",
          "description": "Add backlink URLs to the disavow list"
        },
        {
          "name": "Create Backlink Group",
          "value": "createGroup",
          "action": "Create backlink group",
          "description": "Create a new backlink group"
        },
        {
          "name": "Delete Backlink Group",
          "value": "deleteGroup",
          "action": "Delete backlink group",
          "description": "Delete a backlink group"
        },
        {
          "name": "Delete Backlinks",
          "value": "deleteBacklinks",
          "action": "Delete backlinks",
          "description": "Delete multiple backlinks"
        },
        {
          "name": "Delete Disavowed Backlink",
          "value": "deleteDisavowed",
          "action": "Delete disavowed backlink",
          "description": "Delete a disavowed backlink"
        },
        {
          "name": "Get Backlink Statistics",
          "value": "getStats",
          "action": "Get backlink statistics",
          "description": "Get backlink statistics for a site"
        },
        {
          "name": "Get GSC Import Status",
          "value": "getGscImportStatus",
          "action": "Get GSC import status",
          "description": "Get status of a Google Search Console backlink import"
        },
        {
          "name": "Import Backlinks List",
          "value": "importList",
          "action": "Import backlinks list",
          "description": "Import a list of backlink URLs"
        },
        {
          "name": "List Backlink Groups",
          "value": "listGroups",
          "action": "List backlink groups",
          "description": "Get all backlink groups for a site"
        },
        {
          "name": "List Backlinks",
          "value": "listBacklinks",
          "action": "List backlinks",
          "description": "Get backlinks for a site"
        },
        {
          "name": "List Disavowed Backlinks",
          "value": "listDisavowed",
          "action": "List disavowed backlinks",
          "description": "Get disavowed backlinks for a site"
        },
        {
          "name": "Move Backlinks to Group",
          "value": "moveToGroup",
          "action": "Move backlinks to group",
          "description": "Move backlinks to a specific group"
        },
        {
          "name": "Recheck Backlinks",
          "value": "recheckBacklinks",
          "action": "Recheck backlinks",
          "description": "Trigger a recheck of specific backlinks"
        },
        {
          "name": "Rename Backlink Group",
          "value": "renameGroup",
          "action": "Rename backlink group",
          "description": "Rename a backlink group"
        },
        {
          "name": "Start GSC Import",
          "value": "startGscImport",
          "action": "Start GSC import",
          "description": "Start importing backlinks from Google Search Console"
        },
        {
          "name": "Update Import Settings",
          "value": "updateImportSettings",
          "action": "Update import settings",
          "description": "Enable or disable automatic GSC import"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "backlinkChecker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listVolumeChecks",
      "options": [
        {
          "name": "Create Volume Check",
          "value": "createVolumeCheck",
          "action": "Create volume check",
          "description": "Submit a request to check keyword search volume"
        },
        {
          "name": "Delete Volume Check",
          "value": "deleteVolumeCheck",
          "action": "Delete volume check",
          "description": "Delete a search volume check request"
        },
        {
          "name": "Get Volume Check Results",
          "value": "getVolumeResults",
          "action": "Get volume check results",
          "description": "Get results of a search volume check"
        },
        {
          "name": "List Volume Checks",
          "value": "listVolumeChecks",
          "action": "List volume checks",
          "description": "Get all search volume check requests"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "searchVolume"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listProjects",
      "options": [
        {
          "name": "Add Aliases to Brand",
          "value": "addBrandAliases",
          "action": "Add aliases to brand",
          "description": "Add alternative names to a tracked brand"
        },
        {
          "name": "Create Competitor Brand",
          "value": "createBrand",
          "action": "Create competitor brand",
          "description": "Add a competitor brand to track in the project"
        },
        {
          "name": "Create Project",
          "value": "createProject",
          "action": "Create project",
          "description": "Create an SE Visible project (async — poll Get Project Details for processing status)"
        },
        {
          "name": "Create Prompts",
          "value": "createPrompts",
          "action": "Create prompts",
          "description": "Add prompts to a topic (they start processing against the project's models)"
        },
        {
          "name": "Create Topics",
          "value": "createTopics",
          "action": "Create topics",
          "description": "Add topics to a project"
        },
        {
          "name": "Delete Brand",
          "value": "deleteBrand",
          "action": "Delete brand",
          "description": "Remove a tracked competitor brand (the primary brand cannot be deleted)"
        },
        {
          "name": "Delete Project",
          "value": "deleteProject",
          "action": "Delete project",
          "description": "Soft-delete a project (restorable)"
        },
        {
          "name": "Delete Prompts",
          "value": "deletePrompts",
          "action": "Delete prompts",
          "description": "Bulk-delete prompts from a project"
        },
        {
          "name": "Delete Topic",
          "value": "deleteTopic",
          "action": "Delete topic",
          "description": "Delete a topic AND all prompts grouped under it"
        },
        {
          "name": "Download Raw Response",
          "value": "downloadRawResponse",
          "action": "Download raw response",
          "description": "Download the raw LLM response dump (HTML) for a prompt result"
        },
        {
          "name": "Get Aggregated Brand Metrics",
          "value": "getBrandMetrics",
          "action": "Get aggregated brand metrics",
          "description": "Get brand visibility metrics grouped by dimensions (table data)"
        },
        {
          "name": "Get Project Details",
          "value": "getProjectDetails",
          "action": "Get project details",
          "description": "Get project metadata, processing status, topics, and check dates"
        },
        {
          "name": "Get Project Sources",
          "value": "getProjectSources",
          "action": "Get project sources",
          "description": "Get the domains or URLs AI models cited across the project"
        },
        {
          "name": "Get Prompt Details",
          "value": "getPromptDetails",
          "action": "Get prompt details",
          "description": "Get a single prompt's text, topic, and parse status"
        },
        {
          "name": "Get Prompt Result Details",
          "value": "getPromptResultDetails",
          "action": "Get prompt result details",
          "description": "Get one result's full text, source URLs, and mentioned brands"
        },
        {
          "name": "Get Prompt Results",
          "value": "getPromptResults",
          "action": "Get prompt results",
          "description": "List results for a prompt — one per model run"
        },
        {
          "name": "Get Subscription",
          "value": "getSubscription",
          "action": "Get subscription",
          "description": "Get SE Visible plan and usage limits (projects, prompts, seats)"
        },
        {
          "name": "List Mentioned Brands",
          "value": "listMentionedBrands",
          "action": "List mentioned brands",
          "description": "List brands detected in AI answers (competitor discovery)"
        },
        {
          "name": "List Projects",
          "value": "listProjects",
          "action": "List projects",
          "description": "List all SE Visible projects in the account"
        },
        {
          "name": "List Prompts",
          "value": "listPrompts",
          "action": "List prompts",
          "description": "List prompts (or topics with aggregated metrics) with visibility data"
        },
        {
          "name": "List Tracked Brands",
          "value": "listTrackedBrands",
          "action": "List tracked brands",
          "description": "List brands tracked in the project (primary brand first)"
        },
        {
          "name": "Move Prompts",
          "value": "movePrompts",
          "action": "Move prompts",
          "description": "Move prompts to another topic (atomic, same project only)"
        },
        {
          "name": "Update Brand",
          "value": "updateBrand",
          "action": "Update brand",
          "description": "Update a tracked brand's domain and/or aliases"
        },
        {
          "name": "Update Topic Title",
          "value": "updateTopic",
          "action": "Update topic title",
          "description": "Rename a topic (the default topic cannot be updated)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "seVisible"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Overview",
      "value": "getOverview",
      "action": "Get AI search overview",
      "description": "Get LLM visibility metrics for a domain",
      "resource": "aiSearch"
    },
    {
      "name": "Discover Brand",
      "value": "discoverBrand",
      "action": "Discover brand name",
      "description": "Identify brand name for a domain",
      "resource": "aiSearch"
    },
    {
      "name": "Get Prompts by Target",
      "value": "getPromptsByTarget",
      "action": "Get prompts by target",
      "description": "Get prompts mentioning target domain",
      "resource": "aiSearch"
    },
    {
      "name": "Get Prompts by Brand",
      "value": "getPromptsByBrand",
      "action": "Get prompts by brand",
      "description": "Get prompts mentioning brand name",
      "resource": "aiSearch"
    },
    {
      "name": "Get Leaderboard",
      "value": "getLeaderboard",
      "action": "Get AI search leaderboard",
      "description": "Compare domain performance against competitors across LLMs",
      "resource": "aiSearch"
    },
    {
      "name": "Get Summary",
      "value": "getSummary",
      "action": "Get backlinks summary",
      "description": "Get extended backlink statistics (total links, domains, etc)",
      "resource": "backlinks"
    },
    {
      "name": "Get Metrics",
      "value": "getMetrics",
      "action": "Get backlink metrics",
      "description": "Get key backlink metrics for one or more targets",
      "resource": "backlinks"
    },
    {
      "name": "Get All Backlinks",
      "value": "getAll",
      "action": "Get all backlinks",
      "description": "Get detailed list of backlinks (supports sorting/pagination)",
      "resource": "backlinks"
    },
    {
      "name": "Get Raw Backlinks",
      "value": "getRaw",
      "action": "Get raw backlinks",
      "description": "Stream backlinks in batches (cursor-based for large datasets)",
      "resource": "backlinks"
    },
    {
      "name": "Get Count",
      "value": "getCount",
      "action": "Get backlinks count",
      "description": "Get total number of backlinks to a target",
      "resource": "backlinks"
    },
    {
      "name": "Export Backlinks",
      "value": "export",
      "action": "Export backlinks",
      "description": "Bulk export all backlinks (for large-scale retrieval)",
      "resource": "backlinks"
    },
    {
      "name": "Check Export Status",
      "value": "exportStatus",
      "action": "Check export status",
      "description": "Check status of bulk export job",
      "resource": "backlinks"
    },
    {
      "name": "Download Export Data",
      "value": "exportDownload",
      "action": "Download export data",
      "description": "Download completed export data",
      "resource": "backlinks"
    },
    {
      "name": "Get History",
      "value": "getHistory",
      "action": "Get backlinks history",
      "description": "Get backlinks found or lost in a date range",
      "resource": "backlinks"
    },
    {
      "name": "Get History Count",
      "value": "getHistoryCount",
      "action": "Get backlinks history count",
      "description": "Get daily counts of new/lost backlinks over a date range",
      "resource": "backlinks"
    },
    {
      "name": "Get Cumulative History",
      "value": "getCumulativeHistory",
      "action": "Get cumulative backlinks history",
      "description": "Get daily total of live backlinks over a date range",
      "resource": "backlinks"
    },
    {
      "name": "Get Anchors",
      "value": "getAnchors",
      "action": "Get anchor texts",
      "description": "Get anchor texts of backlinks pointing to the target",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Domains",
      "value": "getRefDomains",
      "action": "Get referring domains",
      "description": "Get list of domains linking to the target",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Domains Count",
      "value": "getRefDomainsCount",
      "action": "Get referring domains count",
      "description": "Get number of unique referring domains",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Domains History",
      "value": "getRefDomainsHistory",
      "action": "Get referring domains history",
      "description": "Get referring domains with new/lost links in a date range",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Domains History Count",
      "value": "getRefDomainsHistoryCount",
      "action": "Get referring domains history count",
      "description": "Get count of referring domains with link changes",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring IPs",
      "value": "getReferringIps",
      "action": "Get referring IPs",
      "description": "Get IPv4 addresses of sites linking to the target",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring IPs Count",
      "value": "getReferringIpsCount",
      "action": "Get referring IPs count",
      "description": "Get number of unique IP addresses linking to the target",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Subnets Count",
      "value": "getReferringSubnetsCount",
      "action": "Get referring subnets count",
      "description": "Get number of unique /24 IP subnets linking to the target",
      "resource": "backlinks"
    },
    {
      "name": "Get Indexed Pages",
      "value": "getIndexedPages",
      "action": "Get indexed pages",
      "description": "Get pages indexed or found by the backlink crawler",
      "resource": "backlinks"
    },
    {
      "name": "Get Authority",
      "value": "getAuthority",
      "action": "Get authority metrics",
      "description": "Get InLink Rank (page authority) and Domain InLink Rank",
      "resource": "backlinks"
    },
    {
      "name": "Get Domain Authority",
      "value": "getDomainAuthority",
      "action": "Get domain authority",
      "description": "Get Domain InLink Rank for the target domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Domain Authority Distribution",
      "value": "getDomainAuthorityDistribution",
      "action": "Get domain authority distribution",
      "description": "Get distribution of domain authority scores among linking domains",
      "resource": "backlinks"
    },
    {
      "name": "Get Domain Authority History",
      "value": "getDomainAuthorityHistory",
      "action": "Get domain authority history",
      "description": "Get historical Domain InLink Rank values for the target domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Page Authority",
      "value": "getPageAuthority",
      "action": "Get page authority",
      "description": "Get InLink Rank (authority) for the target URL",
      "resource": "backlinks"
    },
    {
      "name": "Get Page Authority History",
      "value": "getPageAuthorityHistory",
      "action": "Get page authority history",
      "description": "Get historical InLink Rank values for the target URL",
      "resource": "backlinks"
    },
    {
      "name": "Get Regional Database Overview",
      "value": "getOverviewDb",
      "action": "Get regional database overview",
      "description": "Get detailed statistics for a specific regional database (FAST)",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Worldwide Aggregate",
      "value": "getOverviewWorldwide",
      "action": "Get worldwide aggregate statistics",
      "description": "Get worldwide aggregate statistics for a domain (RECOMMENDED)",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Worldwide Aggregate for URL",
      "value": "getWorldwideAggregateUrl",
      "action": "Get worldwide aggregate for URL",
      "description": "Aggregate a specific URL's global search performance statistics for both organic and paid traffic",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Domain Pages",
      "value": "getDomainPages",
      "action": "Get domain pages",
      "description": "Get a filterable list of pages for a domain with their keyword performance metrics",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Domain Subdomains",
      "value": "getDomainSubdomains",
      "action": "Get domain subdomains",
      "description": "Get a list of subdomains for a domain with their traffic and keyword metrics",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Overview History",
      "value": "getOverviewHistory",
      "action": "Get overview history",
      "description": "Get historical domain metrics over a date range",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Keywords",
      "value": "getKeywords",
      "action": "Get domain keywords",
      "description": "Get keywords for which a domain ranks",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Keywords Comparison",
      "value": "getKeywordsComparison",
      "action": "Get keywords comparison",
      "description": "Compare keyword rankings between two domains",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Competitors",
      "value": "getCompetitors",
      "action": "Get domain competitors",
      "description": "Get competitor domains",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Paid Ads for Keyword",
      "value": "getAdsForKeyword",
      "action": "Get paid ads for keyword",
      "description": "Get domains advertising on a specific keyword",
      "resource": "domainAnalysis"
    },
    {
      "name": "Get Paid Ads for Domain",
      "value": "getAdsForDomain",
      "action": "Get paid ads for domain",
      "description": "Get keywords a domain is advertising on",
      "resource": "domainAnalysis"
    },
    {
      "name": "Export Metrics",
      "value": "exportMetrics",
      "action": "Export keyword metrics",
      "description": "Get volume, CPC, competition, and difficulty for multiple keywords",
      "resource": "keywordResearch"
    },
    {
      "name": "Get Similar Keywords",
      "value": "getSimilar",
      "action": "Get similar keywords",
      "description": "Find semantically similar keywords",
      "resource": "keywordResearch"
    },
    {
      "name": "Get Related Keywords",
      "value": "getRelated",
      "action": "Get related keywords",
      "description": "Find topically related keywords with overlapping URLs",
      "resource": "keywordResearch"
    },
    {
      "name": "Get Question Keywords",
      "value": "getQuestions",
      "action": "Get question keywords",
      "description": "Find question-based keywords",
      "resource": "keywordResearch"
    },
    {
      "name": "Get Longtail Keywords",
      "value": "getLongtail",
      "action": "Get longtail keywords",
      "description": "Find long-tail keyword variations",
      "resource": "keywordResearch"
    },
    {
      "name": "Add Tasks",
      "value": "addTasks",
      "action": "Add SERP tasks",
      "description": "Create SERP tasks for keywords (returns task IDs)",
      "resource": "serpClassic"
    },
    {
      "name": "Get Results (standard)",
      "value": "getResults",
      "action": "Get SERP results",
      "description": "Get status or standard SERP results for a task",
      "resource": "serpClassic"
    },
    {
      "name": "List Tasks",
      "value": "listTasks",
      "action": "List SERP tasks",
      "description": "List recent SERP tasks (last 24 hours)",
      "resource": "serpClassic"
    },
    {
      "name": "Get Advanced Results",
      "value": "getAdvancedResults",
      "action": "Get advanced SERP results",
      "description": "Retrieve advanced (detailed) SERP results",
      "resource": "serpClassic"
    },
    {
      "name": "Get Locations",
      "value": "getLocations",
      "action": "Get SERP locations",
      "description": "Get available location IDs for SERP queries",
      "resource": "serpClassic"
    },
    {
      "name": "Create Standard Audit",
      "value": "createStandard",
      "action": "Create standard audit",
      "description": "Launch a standard (HTML) site audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Create Advanced Audit",
      "value": "createAdvanced",
      "action": "Create advanced audit",
      "description": "Launch a JS-rendered site audit (for SPAs)",
      "resource": "websiteAudit"
    },
    {
      "name": "List Audits",
      "value": "listAudits",
      "action": "List all audits",
      "description": "Get all audits with status for the account",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Audit Status",
      "value": "getStatus",
      "action": "Get audit status",
      "description": "Get status/progress of a specific audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Audit Report",
      "value": "getReport",
      "action": "Get audit report",
      "description": "Retrieve full audit report for a completed audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Crawled Pages",
      "value": "getCrawl",
      "action": "Get crawled pages",
      "description": "Get list of crawled pages for an audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Issues by Type",
      "value": "getIssuesByType",
      "action": "Get issues by type",
      "description": "Get pages affected by a specific issue type",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Issues by URL",
      "value": "getIssuesByUrl",
      "action": "Get issues for URL",
      "description": "Get all issue details for a specific audited URL",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Links",
      "value": "getLinks",
      "action": "Get audit links",
      "description": "Get all outgoing links found during the audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Get Audit History",
      "value": "getHistory",
      "action": "Get audit history",
      "description": "Get historical snapshot of a specific audit run",
      "resource": "websiteAudit"
    },
    {
      "name": "Update Audit",
      "value": "updateAudit",
      "action": "Update audit details",
      "description": "Update the title of an audit",
      "resource": "websiteAudit"
    },
    {
      "name": "Delete Audit",
      "value": "deleteAudit",
      "action": "Delete audit",
      "description": "Delete an audit by ID",
      "resource": "websiteAudit"
    },
    {
      "name": "Recheck Standard Audit",
      "value": "recheckStandard",
      "action": "Recheck standard audit",
      "description": "Re-run a standard audit with same settings",
      "resource": "websiteAudit"
    },
    {
      "name": "Recheck Advanced Audit",
      "value": "recheckAdvanced",
      "action": "Recheck advanced audit",
      "description": "Re-run an advanced audit with same settings",
      "resource": "websiteAudit"
    },
    {
      "name": "Add Keywords",
      "value": "addKeywords",
      "action": "Add keywords to project",
      "description": "Add keywords to a project",
      "resource": "projectManagement"
    },
    {
      "name": "Add Project",
      "value": "addProject",
      "action": "Add project",
      "description": "Create a new project in the account",
      "resource": "projectManagement"
    },
    {
      "name": "Add Search Engine",
      "value": "addSearchEngine",
      "action": "Add search engine to project",
      "description": "Add a new search engine configuration to a project",
      "resource": "projectManagement"
    },
    {
      "name": "Change Project Settings",
      "value": "changeProject",
      "action": "Change project settings",
      "description": "Update settings of a project",
      "resource": "projectManagement"
    },
    {
      "name": "Change Search Engine",
      "value": "changeSearchEngine",
      "action": "Change search engine in project",
      "description": "Update a search engine configuration in a project",
      "resource": "projectManagement"
    },
    {
      "name": "Delete Keywords",
      "value": "deleteKeywords",
      "action": "Delete keywords",
      "description": "Delete keywords from a project",
      "resource": "projectManagement"
    },
    {
      "name": "Delete Project",
      "value": "deleteProject",
      "action": "Delete project",
      "description": "Delete a project from the account",
      "resource": "projectManagement"
    },
    {
      "name": "Delete Search Engine",
      "value": "deleteSearchEngine",
      "action": "Delete search engine from project",
      "description": "Remove a search engine configuration from a project",
      "resource": "projectManagement"
    },
    {
      "name": "Edit Keyword",
      "value": "editKeyword",
      "action": "Edit keyword",
      "description": "Update fields of an existing keyword in a project",
      "resource": "projectManagement"
    },
    {
      "name": "Get Ads Chart",
      "value": "getAds",
      "action": "Get ads chart",
      "description": "Get advertisement statistics by date",
      "resource": "projectManagement"
    },
    {
      "name": "Get Historical Dates",
      "value": "getHistoricalDates",
      "action": "Get historical dates",
      "description": "Get historical ranking check dates",
      "resource": "projectManagement"
    },
    {
      "name": "Get Keyword Statistics",
      "value": "getPositions",
      "action": "Get keyword statistics",
      "description": "Get keyword ranking statistics for a project",
      "resource": "projectManagement"
    },
    {
      "name": "Get Project Stats",
      "value": "getStats",
      "action": "Get project stats",
      "description": "Get summary statistics for a project",
      "resource": "projectManagement"
    },
    {
      "name": "List Keywords",
      "value": "listKeywords",
      "action": "List keywords",
      "description": "List all keywords for a project",
      "resource": "projectManagement"
    },
    {
      "name": "List Projects",
      "value": "listProjects",
      "action": "List all projects",
      "description": "Get a list of all projects in the account",
      "resource": "projectManagement"
    },
    {
      "name": "List Search Engines",
      "value": "listSearchEngines",
      "action": "List project search engines",
      "description": "Get search engines configured for a project",
      "resource": "projectManagement"
    },
    {
      "name": "Run Position Check",
      "value": "runRecheck",
      "action": "Run position check",
      "description": "Trigger a ranking position check for keywords",
      "resource": "projectManagement"
    },
    {
      "name": "Set Manual Position",
      "value": "setManualPosition",
      "action": "Set manual keyword position",
      "description": "Set a ranking position for a keyword on a date",
      "resource": "projectManagement"
    },
    {
      "name": "List Check Dates",
      "value": "listCheckDates",
      "action": "List check dates",
      "description": "Get actual ranking check dates for a project",
      "resource": "projectManagement"
    },
    {
      "name": "Get Ranking Trends",
      "value": "getRankingTrends",
      "action": "Get ranking trends",
      "description": "Get ranking trend time series (avg position, visibility, top10)",
      "resource": "projectManagement"
    },
    {
      "name": "Add Group",
      "value": "addGroup",
      "action": "Add project group",
      "description": "Add a new project group to the account",
      "resource": "projectGroups"
    },
    {
      "name": "Rename Group",
      "value": "renameGroup",
      "action": "Rename project group",
      "description": "Rename an existing project group",
      "resource": "projectGroups"
    },
    {
      "name": "Delete Group",
      "value": "deleteGroup",
      "action": "Delete project group",
      "description": "Delete a project group from the account",
      "resource": "projectGroups"
    },
    {
      "name": "List Groups",
      "value": "listGroups",
      "action": "List project groups",
      "description": "List all project groups in the account",
      "resource": "projectGroups"
    },
    {
      "name": "Move Projects to Group",
      "value": "moveProjects",
      "action": "Move projects to group",
      "description": "Transfer projects from one group to another",
      "resource": "projectGroups"
    },
    {
      "name": "Add Prompts",
      "value": "addPrompts",
      "action": "Add prompts",
      "description": "Add prompts (keywords) to an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Create LLM Engine",
      "value": "createLlmEngine",
      "action": "Create LLM engine",
      "description": "Add a new LLM engine to a site",
      "resource": "aiResultTracker"
    },
    {
      "name": "Delete LLM Engine",
      "value": "deleteLlmEngine",
      "action": "Delete LLM engine",
      "description": "Remove an LLM engine from a site",
      "resource": "aiResultTracker"
    },
    {
      "name": "Delete Prompts",
      "value": "deletePrompts",
      "action": "Delete prompts",
      "description": "Delete prompts from an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Competitors Breakdown",
      "value": "getCompetitorsBreakdown",
      "action": "Get competitors breakdown",
      "description": "Get per-prompt brand and source breakdown for competitors in AI answers",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Competitors Check Dates",
      "value": "getCompetitorsCheckDates",
      "action": "Get competitors check dates",
      "description": "Get dates on which a tracked prompt has competitor data",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Competitors Source Metrics",
      "value": "getCompetitorsSourceMetrics",
      "action": "Get competitors source metrics",
      "description": "Get SEO metrics for sources cited in a prompt answer on a specific date",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get LLM Engine",
      "value": "getLlmEngine",
      "action": "Get LLM engine",
      "description": "Get details of a specific LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get LLM Statistics",
      "value": "getLlmStatistics",
      "action": "Get LLM statistics",
      "description": "Get presence and overlap statistics for an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get LLM Status",
      "value": "getLlmStatus",
      "action": "Get LLM status",
      "description": "Get tracking status and progress for an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Prompt Answer",
      "value": "getPromptAnswer",
      "action": "Get prompt answer",
      "description": "Get the full AI answer text, sources, brands, and organic URLs for a tracked prompt",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Prompt Rankings",
      "value": "getPromptRankings",
      "action": "Get prompt rankings",
      "description": "Get ranking data for prompts tracked by an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Site Brand",
      "value": "getSiteBrand",
      "action": "Get site brand",
      "description": "Get the brand configured for a site",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Sources Recommendations",
      "value": "getSourcesRecommendations",
      "action": "Get sources recommendations",
      "description": "Get recommended source domains to target for AI visibility",
      "resource": "aiResultTracker"
    },
    {
      "name": "Get Sources Summary",
      "value": "getSourcesSummary",
      "action": "Get sources summary",
      "description": "Get aggregated source mention opportunities and competitor counts",
      "resource": "aiResultTracker"
    },
    {
      "name": "List LLM Engines",
      "value": "listLlmEngines",
      "action": "List LLM engines",
      "description": "Get all LLM engines configured for a site",
      "resource": "aiResultTracker"
    },
    {
      "name": "List Prompts",
      "value": "listPrompts",
      "action": "List prompts",
      "description": "List prompts tracked by an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "List Source Domains",
      "value": "listSourceDomains",
      "action": "List source domains",
      "description": "List source domains cited in AI answers with coverage and mention metrics",
      "resource": "aiResultTracker"
    },
    {
      "name": "List Source Pages",
      "value": "listSourcePages",
      "action": "List source pages",
      "description": "List individual source URLs cited in AI answers with usage metrics",
      "resource": "aiResultTracker"
    },
    {
      "name": "Save Site Brand",
      "value": "saveSiteBrand",
      "action": "Save site brand",
      "description": "Configure or overwrite the brand for a site",
      "resource": "aiResultTracker"
    },
    {
      "name": "Update LLM Engine",
      "value": "updateLlmEngine",
      "action": "Update LLM engine",
      "description": "Update region or language of an LLM engine",
      "resource": "aiResultTracker"
    },
    {
      "name": "Change Group Order",
      "value": "changeGroupOrder",
      "action": "Change prompt group order",
      "description": "Move a group to a new position in the site group order",
      "resource": "airtGroups"
    },
    {
      "name": "Create Prompt Group",
      "value": "createPromptGroup",
      "action": "Create prompt group",
      "description": "Create a new prompt group for a site",
      "resource": "airtGroups"
    },
    {
      "name": "Delete All Prompts in Group",
      "value": "deleteAllPromptsInGroup",
      "action": "Delete all prompts in group",
      "description": "Remove every prompt currently assigned to the group (group itself is kept)",
      "resource": "airtGroups"
    },
    {
      "name": "Delete Prompt Group",
      "value": "deletePromptGroup",
      "action": "Delete prompt group",
      "description": "Delete a prompt group; its prompts move to the default group",
      "resource": "airtGroups"
    },
    {
      "name": "List Prompt Groups",
      "value": "listPromptGroups",
      "action": "List prompt groups",
      "description": "List prompt groups for a site, optionally filtered by LLM engine",
      "resource": "airtGroups"
    },
    {
      "name": "Move All Prompts Between Groups",
      "value": "moveAllPromptsBetweenGroups",
      "action": "Move all prompts between groups",
      "description": "Move every prompt from one group to another",
      "resource": "airtGroups"
    },
    {
      "name": "Move Prompts to Group",
      "value": "movePromptsToGroup",
      "action": "Move prompts to group",
      "description": "Move a specific set of prompts into a target group",
      "resource": "airtGroups"
    },
    {
      "name": "Rename Prompt Group",
      "value": "renamePromptGroup",
      "action": "Rename prompt group",
      "description": "Update the name of an existing prompt group",
      "resource": "airtGroups"
    },
    {
      "name": "Add Group",
      "value": "addGroup",
      "action": "Add keyword group",
      "description": "Create a new keyword group for a project",
      "resource": "keywordGroups"
    },
    {
      "name": "Delete Group",
      "value": "deleteGroup",
      "action": "Delete keyword group",
      "description": "Delete a keyword group",
      "resource": "keywordGroups"
    },
    {
      "name": "List Groups",
      "value": "listGroups",
      "action": "List keyword groups",
      "description": "List all keyword groups for a project",
      "resource": "keywordGroups"
    },
    {
      "name": "Move Keywords",
      "value": "moveKeywords",
      "action": "Move keywords to group",
      "description": "Move keywords to another group",
      "resource": "keywordGroups"
    },
    {
      "name": "Rename Group",
      "value": "renameGroup",
      "action": "Rename keyword group",
      "description": "Rename an existing keyword group",
      "resource": "keywordGroups"
    },
    {
      "name": "Add Competitor",
      "value": "addCompetitor",
      "action": "Add competitor",
      "description": "Add a competitor website to a project",
      "resource": "competitors"
    },
    {
      "name": "Delete Competitor",
      "value": "deleteCompetitor",
      "action": "Delete competitor",
      "description": "Remove a competitor from a project",
      "resource": "competitors"
    },
    {
      "name": "Get All Competitors",
      "value": "getAllCompetitors",
      "action": "Get all competitors",
      "description": "Get domains ranked in TOP 10 for tracked keywords",
      "resource": "competitors"
    },
    {
      "name": "Get Keyword Positions",
      "value": "getPositions",
      "action": "Get competitor keyword positions",
      "description": "Get ranking statistics for competitor keywords",
      "resource": "competitors"
    },
    {
      "name": "Get TOP 10 Results",
      "value": "getTop10",
      "action": "Get TOP 10 results",
      "description": "Get TOP 10 ranking results for a keyword",
      "resource": "competitors"
    },
    {
      "name": "Get TOP 100 Results",
      "value": "getTop100",
      "action": "Get TOP 100 results",
      "description": "Get up to TOP 100 results for a keyword",
      "resource": "competitors"
    },
    {
      "name": "List Competitors",
      "value": "listCompetitors",
      "action": "List competitors",
      "description": "List competitors added to a project",
      "resource": "competitors"
    },
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag",
      "description": "Create a tag and optionally attach to URLs/domains",
      "resource": "urlTags"
    },
    {
      "name": "Delete Tag",
      "value": "deleteTag",
      "action": "Delete tag",
      "description": "Delete a tag from a site",
      "resource": "urlTags"
    },
    {
      "name": "List Tags",
      "value": "listTags",
      "action": "List tags",
      "description": "List all landing page tags for a site",
      "resource": "urlTags"
    },
    {
      "name": "Update Tag Assignment",
      "value": "updateAssignment",
      "action": "Update tag assignment",
      "description": "Assign tags to URLs and/or domains (replaces existing assignments)",
      "resource": "urlTags"
    },
    {
      "name": "Calculate SEO Potential",
      "value": "getSeoPotential",
      "action": "Calculate SEO potential",
      "description": "Estimate traffic, cost, and potential leads for a site",
      "resource": "analyticsTraffic"
    },
    {
      "name": "Get Google Search Console Data",
      "value": "getGscData",
      "action": "Get Google Search Console data",
      "description": "Get popular queries and performance metrics from Google Search Console",
      "resource": "analyticsTraffic"
    },
    {
      "name": "Get Account Balance",
      "value": "getBalance",
      "action": "Get account balance",
      "description": "Get the current balance and currency of the account",
      "resource": "accountSystem"
    },
    {
      "name": "Get Subscription Data",
      "value": "getSubscription",
      "action": "Get subscription data",
      "description": "Get subscription information of the account",
      "resource": "accountSystem"
    },
    {
      "name": "Get User Profile",
      "value": "getProfile",
      "action": "Get user profile",
      "description": "Get profile information of the account",
      "resource": "accountSystem"
    },
    {
      "name": "Create Sub-Account",
      "value": "createSubAccount",
      "action": "Create sub-account",
      "description": "Create a new sub-account",
      "resource": "subAccount"
    },
    {
      "name": "Delete Sub-Account",
      "value": "deleteSubAccount",
      "action": "Delete sub-account",
      "description": "Delete a sub-account",
      "resource": "subAccount"
    },
    {
      "name": "Get Sub-Account Details",
      "value": "getSubAccount",
      "action": "Get sub-account details",
      "description": "Get extended information about a sub-account",
      "resource": "subAccount"
    },
    {
      "name": "List Owned Projects",
      "value": "listOwnedSites",
      "action": "List owned projects",
      "description": "Get website IDs owned by a sub-account",
      "resource": "subAccount"
    },
    {
      "name": "List Shared Projects",
      "value": "listSharedSites",
      "action": "List shared projects",
      "description": "Get website IDs shared with a sub-account",
      "resource": "subAccount"
    },
    {
      "name": "List Sub-Accounts",
      "value": "listSubAccounts",
      "action": "List sub-accounts",
      "description": "Get all sub-accounts",
      "resource": "subAccount"
    },
    {
      "name": "Share Projects",
      "value": "shareProjects",
      "action": "Share projects",
      "description": "Share websites with a sub-account",
      "resource": "subAccount"
    },
    {
      "name": "Update Sub-Account",
      "value": "updateSubAccount",
      "action": "Update sub-account",
      "description": "Update an existing sub-account",
      "resource": "subAccount"
    },
    {
      "name": "Get Keyword Search Volume",
      "value": "getKeywordVolume",
      "action": "Get keyword search volume",
      "description": "Get search volume data for keywords in a specific region",
      "resource": "generalData"
    },
    {
      "name": "List Languages for Google",
      "value": "listGoogleLangs",
      "action": "List languages for Google",
      "description": "Get a list of supported languages for Google",
      "resource": "generalData"
    },
    {
      "name": "List Regions for Google",
      "value": "listGoogleRegions",
      "action": "List regions for Google",
      "description": "Get a list of Google regions (region ID + name) for location targeting",
      "resource": "generalData"
    },
    {
      "name": "List Search Engines",
      "value": "listSearchEngines",
      "action": "List search engines",
      "description": "Get a list of available search engines with regions",
      "resource": "generalData"
    },
    {
      "name": "List Volume Regions",
      "value": "listVolumeRegions",
      "action": "List volume regions",
      "description": "Get all regions where keyword search volume checks are available",
      "resource": "generalData"
    },
    {
      "name": "Add Task",
      "value": "addTask",
      "action": "Add task",
      "description": "Create a new custom task in the marketing plan",
      "resource": "marketingPlan"
    },
    {
      "name": "Delete Task",
      "value": "deleteTask",
      "action": "Delete task",
      "description": "Delete a custom task from the marketing plan",
      "resource": "marketingPlan"
    },
    {
      "name": "List Plan Items",
      "value": "listPlanItems",
      "action": "List plan items",
      "description": "Get marketing plan sections, items, and notes",
      "resource": "marketingPlan"
    },
    {
      "name": "Set Task Status",
      "value": "setTaskStatus",
      "action": "Set task status",
      "description": "Update the completion status of a task",
      "resource": "marketingPlan"
    },
    {
      "name": "Update Task",
      "value": "updateTask",
      "action": "Update task",
      "description": "Update the name and description of a task",
      "resource": "marketingPlan"
    },
    {
      "name": "Create Audit",
      "value": "createAudit",
      "action": "Create audit",
      "description": "Launch a website audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Delete Audit",
      "value": "deleteAudit",
      "action": "Delete audit",
      "description": "Delete an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get All Issues for URL",
      "value": "getIssues",
      "action": "Get all issues for URL",
      "description": "Get all issues found for a specific URL",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get All Links",
      "value": "getLinks",
      "action": "Get all links",
      "description": "Get all links found during the audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Audit History",
      "value": "getHistory",
      "action": "Get audit history",
      "description": "Get historical audit data for a specific date",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Audit Pages by Issue",
      "value": "getPagesByIssue",
      "action": "Get audit pages by issue",
      "description": "Get pages affected by a specific issue",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Audit Report",
      "value": "getReport",
      "action": "Get audit report",
      "description": "Get the full audit report",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Audit Status",
      "value": "getStatus",
      "action": "Get audit status",
      "description": "Get the current status of an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Crawled Pages",
      "value": "getPages",
      "action": "Get crawled pages",
      "description": "Get all crawled pages from an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "List Audits",
      "value": "listAudits",
      "action": "List audits",
      "description": "Get a list of all audits",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Recheck Audit",
      "value": "recheckAudit",
      "action": "Recheck audit",
      "description": "Recheck an existing audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Update Audit Title",
      "value": "updateTitle",
      "action": "Update audit title",
      "description": "Update the title of an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Get Audit Settings",
      "value": "getAuditSettings",
      "action": "Get audit settings",
      "description": "Get the full configuration of an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Update Audit Settings",
      "value": "updateAuditSettings",
      "action": "Update audit settings",
      "description": "Partially update audit configuration",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Reset Audit Settings",
      "value": "resetAuditSettings",
      "action": "Reset audit settings",
      "description": "Restore all audit settings to defaults",
      "resource": "websiteAuditProject"
    },
    {
      "name": "List Audit Sitemaps",
      "value": "listAuditSitemaps",
      "action": "List audit sitemaps",
      "description": "List configured sitemaps for an audit",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Add Audit Sitemap",
      "value": "addAuditSitemap",
      "action": "Add audit sitemap",
      "description": "Register a sitemap URL as a crawl source",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Delete Audit Sitemap",
      "value": "deleteAuditSitemap",
      "action": "Delete audit sitemap",
      "description": "Remove a sitemap from crawl sources",
      "resource": "websiteAuditProject"
    },
    {
      "name": "List Audit Source Pages",
      "value": "listAuditSourcePages",
      "action": "List audit source pages",
      "description": "List uploaded custom page lists",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Delete Audit Source Pages",
      "value": "deleteAuditSourcePages",
      "action": "Delete audit source pages",
      "description": "Remove an uploaded custom page list",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Add Audit Source Pages",
      "value": "addAuditSourcePages",
      "action": "Add audit source pages",
      "description": "Upload a .txt list of URLs (one per line) as a custom page list",
      "resource": "websiteAuditProject"
    },
    {
      "name": "Add Backlink",
      "value": "addBacklink",
      "action": "Add backlink",
      "description": "Add a single backlink to monitor",
      "resource": "backlinkChecker"
    },
    {
      "name": "Add Disavowed Backlinks",
      "value": "addDisavowed",
      "action": "Add disavowed backlinks",
      "description": "Add backlink URLs to the disavow list",
      "resource": "backlinkChecker"
    },
    {
      "name": "Create Backlink Group",
      "value": "createGroup",
      "action": "Create backlink group",
      "description": "Create a new backlink group",
      "resource": "backlinkChecker"
    },
    {
      "name": "Delete Backlink Group",
      "value": "deleteGroup",
      "action": "Delete backlink group",
      "description": "Delete a backlink group",
      "resource": "backlinkChecker"
    },
    {
      "name": "Delete Backlinks",
      "value": "deleteBacklinks",
      "action": "Delete backlinks",
      "description": "Delete multiple backlinks",
      "resource": "backlinkChecker"
    },
    {
      "name": "Delete Disavowed Backlink",
      "value": "deleteDisavowed",
      "action": "Delete disavowed backlink",
      "description": "Delete a disavowed backlink",
      "resource": "backlinkChecker"
    },
    {
      "name": "Get Backlink Statistics",
      "value": "getStats",
      "action": "Get backlink statistics",
      "description": "Get backlink statistics for a site",
      "resource": "backlinkChecker"
    },
    {
      "name": "Get GSC Import Status",
      "value": "getGscImportStatus",
      "action": "Get GSC import status",
      "description": "Get status of a Google Search Console backlink import",
      "resource": "backlinkChecker"
    },
    {
      "name": "Import Backlinks List",
      "value": "importList",
      "action": "Import backlinks list",
      "description": "Import a list of backlink URLs",
      "resource": "backlinkChecker"
    },
    {
      "name": "List Backlink Groups",
      "value": "listGroups",
      "action": "List backlink groups",
      "description": "Get all backlink groups for a site",
      "resource": "backlinkChecker"
    },
    {
      "name": "List Backlinks",
      "value": "listBacklinks",
      "action": "List backlinks",
      "description": "Get backlinks for a site",
      "resource": "backlinkChecker"
    },
    {
      "name": "List Disavowed Backlinks",
      "value": "listDisavowed",
      "action": "List disavowed backlinks",
      "description": "Get disavowed backlinks for a site",
      "resource": "backlinkChecker"
    },
    {
      "name": "Move Backlinks to Group",
      "value": "moveToGroup",
      "action": "Move backlinks to group",
      "description": "Move backlinks to a specific group",
      "resource": "backlinkChecker"
    },
    {
      "name": "Recheck Backlinks",
      "value": "recheckBacklinks",
      "action": "Recheck backlinks",
      "description": "Trigger a recheck of specific backlinks",
      "resource": "backlinkChecker"
    },
    {
      "name": "Rename Backlink Group",
      "value": "renameGroup",
      "action": "Rename backlink group",
      "description": "Rename a backlink group",
      "resource": "backlinkChecker"
    },
    {
      "name": "Start GSC Import",
      "value": "startGscImport",
      "action": "Start GSC import",
      "description": "Start importing backlinks from Google Search Console",
      "resource": "backlinkChecker"
    },
    {
      "name": "Update Import Settings",
      "value": "updateImportSettings",
      "action": "Update import settings",
      "description": "Enable or disable automatic GSC import",
      "resource": "backlinkChecker"
    },
    {
      "name": "Create Volume Check",
      "value": "createVolumeCheck",
      "action": "Create volume check",
      "description": "Submit a request to check keyword search volume",
      "resource": "searchVolume"
    },
    {
      "name": "Delete Volume Check",
      "value": "deleteVolumeCheck",
      "action": "Delete volume check",
      "description": "Delete a search volume check request",
      "resource": "searchVolume"
    },
    {
      "name": "Get Volume Check Results",
      "value": "getVolumeResults",
      "action": "Get volume check results",
      "description": "Get results of a search volume check",
      "resource": "searchVolume"
    },
    {
      "name": "List Volume Checks",
      "value": "listVolumeChecks",
      "action": "List volume checks",
      "description": "Get all search volume check requests",
      "resource": "searchVolume"
    },
    {
      "name": "Add Aliases to Brand",
      "value": "addBrandAliases",
      "action": "Add aliases to brand",
      "description": "Add alternative names to a tracked brand",
      "resource": "seVisible"
    },
    {
      "name": "Create Competitor Brand",
      "value": "createBrand",
      "action": "Create competitor brand",
      "description": "Add a competitor brand to track in the project",
      "resource": "seVisible"
    },
    {
      "name": "Create Project",
      "value": "createProject",
      "action": "Create project",
      "description": "Create an SE Visible project (async — poll Get Project Details for processing status)",
      "resource": "seVisible"
    },
    {
      "name": "Create Prompts",
      "value": "createPrompts",
      "action": "Create prompts",
      "description": "Add prompts to a topic (they start processing against the project's models)",
      "resource": "seVisible"
    },
    {
      "name": "Create Topics",
      "value": "createTopics",
      "action": "Create topics",
      "description": "Add topics to a project",
      "resource": "seVisible"
    },
    {
      "name": "Delete Brand",
      "value": "deleteBrand",
      "action": "Delete brand",
      "description": "Remove a tracked competitor brand (the primary brand cannot be deleted)",
      "resource": "seVisible"
    },
    {
      "name": "Delete Project",
      "value": "deleteProject",
      "action": "Delete project",
      "description": "Soft-delete a project (restorable)",
      "resource": "seVisible"
    },
    {
      "name": "Delete Prompts",
      "value": "deletePrompts",
      "action": "Delete prompts",
      "description": "Bulk-delete prompts from a project",
      "resource": "seVisible"
    },
    {
      "name": "Delete Topic",
      "value": "deleteTopic",
      "action": "Delete topic",
      "description": "Delete a topic AND all prompts grouped under it",
      "resource": "seVisible"
    },
    {
      "name": "Download Raw Response",
      "value": "downloadRawResponse",
      "action": "Download raw response",
      "description": "Download the raw LLM response dump (HTML) for a prompt result",
      "resource": "seVisible"
    },
    {
      "name": "Get Aggregated Brand Metrics",
      "value": "getBrandMetrics",
      "action": "Get aggregated brand metrics",
      "description": "Get brand visibility metrics grouped by dimensions (table data)",
      "resource": "seVisible"
    },
    {
      "name": "Get Project Details",
      "value": "getProjectDetails",
      "action": "Get project details",
      "description": "Get project metadata, processing status, topics, and check dates",
      "resource": "seVisible"
    },
    {
      "name": "Get Project Sources",
      "value": "getProjectSources",
      "action": "Get project sources",
      "description": "Get the domains or URLs AI models cited across the project",
      "resource": "seVisible"
    },
    {
      "name": "Get Prompt Details",
      "value": "getPromptDetails",
      "action": "Get prompt details",
      "description": "Get a single prompt's text, topic, and parse status",
      "resource": "seVisible"
    },
    {
      "name": "Get Prompt Result Details",
      "value": "getPromptResultDetails",
      "action": "Get prompt result details",
      "description": "Get one result's full text, source URLs, and mentioned brands",
      "resource": "seVisible"
    },
    {
      "name": "Get Prompt Results",
      "value": "getPromptResults",
      "action": "Get prompt results",
      "description": "List results for a prompt — one per model run",
      "resource": "seVisible"
    },
    {
      "name": "Get Subscription",
      "value": "getSubscription",
      "action": "Get subscription",
      "description": "Get SE Visible plan and usage limits (projects, prompts, seats)",
      "resource": "seVisible"
    },
    {
      "name": "List Mentioned Brands",
      "value": "listMentionedBrands",
      "action": "List mentioned brands",
      "description": "List brands detected in AI answers (competitor discovery)",
      "resource": "seVisible"
    },
    {
      "name": "List Projects",
      "value": "listProjects",
      "action": "List projects",
      "description": "List all SE Visible projects in the account",
      "resource": "seVisible"
    },
    {
      "name": "List Prompts",
      "value": "listPrompts",
      "action": "List prompts",
      "description": "List prompts (or topics with aggregated metrics) with visibility data",
      "resource": "seVisible"
    },
    {
      "name": "List Tracked Brands",
      "value": "listTrackedBrands",
      "action": "List tracked brands",
      "description": "List brands tracked in the project (primary brand first)",
      "resource": "seVisible"
    },
    {
      "name": "Move Prompts",
      "value": "movePrompts",
      "action": "Move prompts",
      "description": "Move prompts to another topic (atomic, same project only)",
      "resource": "seVisible"
    },
    {
      "name": "Update Brand",
      "value": "updateBrand",
      "action": "Update brand",
      "description": "Update a tracked brand's domain and/or aliases",
      "resource": "seVisible"
    },
    {
      "name": "Update Topic Title",
      "value": "updateTopic",
      "action": "Update topic title",
      "description": "Rename a topic (the default topic cannot be updated)",
      "resource": "seVisible"
    }
  ]

npm_readme:
  # n8n-nodes-seranking

  n8n community node for [SE Ranking](https://seranking.com/)'s unified API — 225 operations across 22 resources: AI Search, SE Visible (AI visibility), Backlinks, Domain Analysis, Keyword Research, SERP Classic, Website Audits, Project Management, Competitors, Backlink Checker, Sub-Accounts, and more.

  SE Ranking is a comprehensive SEO platform providing keyword research, competitor analysis, website audits, backlink monitoring, and AI search visibility tracking.

  [n8n](https://n8n.io/) is a workflow automation platform.

  ---

  ## Table of Contents

  - [Installation](#installation)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Operations](#operations)
  - [Usage Examples](#usage-examples)
  - [API Documentation](#api-documentation)
  - [Version History](#version-history)

  ---

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ### Prerequisites

  - Node.js 18.x or higher
  - n8n 1.0.0 or higher
  - SE Ranking API Token ([Get it here](https://online.seranking.com/admin.api.dashboard.html))

  ### npm (Recommended)

  ```bash
  npm install @seranking/n8n-nodes-seranking
  ```

  ### Quick Installation

  1. Navigate to your n8n installation directory
  2. Install the package:
     ```bash
     npm install @seranking/n8n-nodes-seranking
     ```
  3. Restart n8n

  ### Manual Install

  ### Step 1: Install n8n

  ```bash
  npm install n8n -g
  ```

  ### Step 2: Install SE Ranking Node

  **Option A: From .tgz file**

  ```bash
  npm install -g seranking-n8n-nodes-seranking-1.3.0.tgz
  ```

  **Option B: From GitHub**

  ```bash
  npm install -g git+https://github.com/seranking/n8n-nodes-seranking.git
  ```

  **Option C: From source (for developers)**

  ```bash
  cd ~/.n8n/custom
  git clone https://github.com/seranking/n8n-nodes-seranking.git
  cd n8n-nodes-seranking
  npm install
  npm run build
  npm link
  ```

  ### Step 3: Start n8n

  ```bash
  n8n start
  ```

  Open `http://localhost:5678` and add the SE Ranking node to your workflow.

  ### Step 4: Configure Credentials

  1. Add SE Ranking node
  2. Click "Create New Credential" for **SE Ranking API** — enter your API token
  3. Save

  > **v2.0.0 note:** SE Ranking unified its two APIs (Data API + Project API) onto a single host (`api.seranking.com`) with a single token in 2026-05. The node now uses one credential type for everything. If you're upgrading from v1.x, see the Migration section below.

  ### Docker Installation

  ```bash
  # Create custom directory
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom

  # Install node 
  npm install @seranking/n8n-nodes-seranking
  # OR
  npm install git+https://github.com/seranking/n8n-nodes-seranking.git

  # Run n8n
  docker run -it --rm \
    --name n8n \
    -p 5678:5678 \
    -v ~/.n8n:/home/node/.n8n \
    docker.n8n.io/n8nio/n8n
  ```

  ### Verify Installation

  1. Open n8n at `http://localhost:5678`
  2. Search for "SE Ranking" node
  3. If it appears, installation successful ✓

  ### Updating

  **From npm:**

  ```bash
  npm update @seranking/n8n-nodes-seranking
  ```

  **From .tgz:**

  ```bash
  npm uninstall -g seranking-n8n-nodes-seranking
  npm install -g seranking-n8n-nodes-seranking-NEW-VERSION.tgz
  ```

  **From GitHub:**

  ```bash
  npm install -g git+https://github.com/seranking/n8n-nodes-seranking.git
  ```

  **From source:**

  ```bash
  cd ~/.n8n/custom/n8n-nodes-seranking
  git pull
  npm install
  npm run build
  ```

  Then restart n8n
  ---

  ## Credentials

  To use this node, you need:

  1. **SE Ranking Account** — Sign up at [seranking.com](https://seranking.com/)
  2. **API Token** — Generate from your [SE Ranking API Dashboard](https://online.seranking.com/admin.api.dashboard.html)

  ### Setting up credentials in n8n

  1. Open any workflow and add the **SE Ranking** node
  2. In the **SE Ranking API** credential slot, click "Create New Credential" and enter your API token
  3. Click **Save** — the credential is tested by hitting `GET /v1/account/subscription`

  ### Migrating from v1.x

  v1.x used two separate credential types (`seRankingApi` for Data API and `seRankingProjectApi` for Project API) with two different base URLs and two different tokens. As of v2.0.0:

  - One credential type covers everything: **SE Ranking API**
  - One token works against all endpoints — get the unified token from the [API Dashboard](https://online.seranking.com/admin.api.dashboard.html)
  - Old base URL `api4.seranking.com` is deprecated; everything now lives under `api.seranking.com/v1`
  - Project API endpoints moved under `/v1/project-management/...` path prefix

  If you're upgrading and have saved credentials of type `seRankingProjectApi`, you'll need to re-save them as `seRankingApi` on each affected node. The v1.5.13 release is preserved on npm for rollback (`npm install @seranking/n8n-nodes-seranking@1.5.13`).

  ---

  ## Compatibility

  - **n8n version**: 1.0.0 or higher
  - **Node.js version**: 18.x or higher
  - **SE Ranking API**: unified host `api.seranking.com/v1`

  ## Operations

  This node provides access to **22 SE Ranking resources** with **225 total operations** on the unified API:

  ### Data API (6 resources, 65 operations)

  ### AI Search (5 operations)

  - Get Overview - LLM visibility metrics across ChatGPT, Perplexity, Gemini
  - Discover Brand - Identify brand name for domain
  - Get Prompts by Target - Find prompts mentioning your domain
  - Get Prompts by Brand - Track brand mentions in AI responses
  - Get Leaderboard - Compare domain performance against competitors across LLMs


  ### Backlinks (25 operations)

  - Get Summary - Complete backlink portfolio overview
  - Get Metrics - Key metrics for multiple targets
  - Get All Backlinks - Detailed backlink list with filters
  - Get Raw Backlinks - Cursor-based bulk retrieval
  - Get Count - Total backlinks count
  - Export Backlinks - Bulk export functionality
  - Check Export Status - Monitor export progress
  - Download Export Data - Retrieve completed exports
  - Get History - New/lost backlinks by date range
  - Get History Count - Daily new/lost counts
  - Get Cumulative History - Historical growth tracking
  - Get Anchors - Anchor text analysis
  - Get Referring Domains - List of linking domains
  - Get Referring Domains Count - Unique domain count
  - Get Referring Domains History - Domain link changes
  - Get Referring Domains History Count - Domain change counts
  - Get Referring IPs - IP addresses of linking sites
  - Get Referring IPs Count - Unique IP count
  - Get Referring Subnets Count - /24 subnet diversity
  - Get Indexed Pages - Pages in backlink index
  - Get Authority - InLink Rank metrics
  - Get Domain Authority - Domain-level authority
  - Get Domain Authority Distribution - Authority score distribution
  - Get Page Authority - Page-level authority
  - Get Page Authority History - Historical authority tracking

  ### Domain Analysis (11 operations)

  - Get Regional Database Overview - Regional performance data
  - Get Worldwide Aggregate - Global domain statistics
  - Get Worldwide Aggregate for URL - URL-level global performance
  - Get Overview History - Historical metrics tracking
  - Get Keywords - Ranking keywords with filters
  - Get Keywords Comparison - Domain vs competitor analysis
  - Get Domain Pages - Page-level keyword and traffic metrics
  - Get Domain Subdomains - Subdomain performance analysis
  - Get Competitors - Identify competing domains
  - Get Paid Ads for Keyword - Advertisers on keywords
  - Get Paid Ads for Domain - Domain's advertising keywords

  ### Keyword Research (5 operations)

  - Export Metrics - Bulk keyword metrics (up to 700 keywords)
  - Get Similar Keywords - Semantically similar suggestions with full filter support (traffic, difficulty, intents, SERP features, word count, and more)
  - Get Related Keywords - Topically related keywords with full filter support (traffic, difficulty, intents, SERP features, word count, and more)
  - Get Question Keywords - Question-based variations with full filter support (traffic, difficulty, intents, SERP features, word count, and more)
  - Get Longtail Keywords - Long-tail opportunities

  ### Website Audit (14 operations)

  - Create Standard Audit - HTML site audit
  - Create Advanced Audit - JS-rendered audit for SPAs
  - List Audits - All audits with status
  - Get Audit Status - Check audit progress
  - Get Audit Report - Full audit results
  - Get Crawled Pages - List of crawled URLs
  - Get Issues by Type - Pages with specific issues
  - Get Issues by URL - All issues for one URL
  - Get Links - Internal/external links found
  - Get Audit History - Historical audit snapshots
  - Update Audit - Modify audit details
  - Delete Audit - Remove audit
  - Recheck Standard Audit - Re-run HTML audit
  - Recheck Advanced Audit - Re-run JS audit

  ### SERP Classic (5 operations)

  - Add Tasks - Create SERP tasks for keywords (up to 1,000 per request, supports Pingback URL)
  - Get Results - Get standard SERP results for a task
  - List Tasks - List recent SERP tasks (last 24 hours)
  - Get Advanced Results - Retrieve detailed SERP results with all features
  - Get Locations - Get available location IDs for SERP queries

  ---

  ### Project API (14 resources, 114 operations)

  ### Project Management (20 operations)

  - List Projects - Get all projects
  - Add Project - Create a new project
  - Change Project Settings - Update project configuration
  - Delete Project - Remove a project
  - List Search Engines - Get search engines for a project
  - Add Search Engine - Add search engine to project
  - Change Search Engine - Update search engine settings
  - Delete Search Engine - Remove search engine from project
  - List Keywords - Get project keywords
  - Add Keywords - Add keywords to project
  - Delete Keywords - Remove keywords from project
  - Get Project Stats - Overall project statistics
  - Get Keyword Positions - Keyword ranking positions over time
  - Get Ads Chart - Advertising data for keywords
  - Get Historical Dates - Available historical check dates
  - Set Manual Position - Manually set a keyword position
  - Run Position Check - Trigger a position recheck

  ### Project Groups (5 operations)

  - List Groups - Get all project groups
  - Add Group - Create a project group
  - Rename Group - Update group name
  - Delete Group - Remove a project group
  - Move Projects to Group - Move projects into a group

  ### AI Result Tracker (21 operations)

  - Get Site Brand - Get brand name for a site
  - Save Site Brand - Set brand name for a site
  - List LLM Engines - Get all LLM engines for a site
  - Get LLM Engine - Get specific LLM engine details
  - Create LLM Engine - Add LLM engine (ChatGPT, Gemini, Perplexity, Google AI)
  - Update LLM Engine - Modify LLM engine settings
  - Delete LLM Engine - Remove LLM engine from site
  - Get LLM Status - Check LLM engine processing status
  - Get LLM Statistics - Presence and overlap stats
  - List Prompts - Get prompts for an LLM engine
  - Add Prompts - Add keywords/prompts to LLM engine
  - Delete Prompts - Remove prompts from LLM engine
  - Get Prompt Rankings - Prompt ranking data over time
  - Get Prompt Answer - Full AI answer text, cited sources, detected brands, and organic URLs (Google AI Overview) for a tracked prompt on a given date
  - Get Sources Summary - Aggregated source mention opportunities and competitor citation counts
  - List Source Domains - Source domains cited in AI answers, with coverage and mention metrics
  - List Source Pages - Individual source URLs cited in AI answers, with usage metrics
  - Get Sources Recommendations - Recommended source domains to target for AI visibility
  - Get Competitors Breakdown - Per-prompt, per-day brand and source breakdown for competitors
  - Get Competitors Check Dates - Dates on which a tracked prompt has competitor data
  - Get Competitors Source Metrics - SEO metrics for sources cited in a prompt answer on a specific date

  ### Keyword Groups (5 operations)

  - List Groups - Get keyword groups for a project
  - Add Group - Create a keyword group
  - Move Keywords - Move keywords to a group
  - Rename Group - Update keyword group name
  - Delete Group - Remove a keyword group

  ### Competitors (7 operations)

  - Add Competitor - Add competitor to project
  - List Competitors - Get all competitors for a project
  - Get Keyword Positions - Competitor ranking positions
  - Delete Competitor - Remove a competitor
  - Get TOP 10 Results - SERP top 10 for a keyword
  - Get TOP 100 Results - SERP top 100 for a keyword
  - Get All Competitors - All competitors from SERP data

  ### URL Tags (4 operations)

  - List Tags - Get all URL tags for a site
  - Add Tag - Create a URL tag
  - Update Tag Assignment - Assign tags to URLs/domains
  - Delete Tag - Remove a URL tag

  ### Analytics Traffic (2 operations)

  - Get Google Search Console Data - GSC queries with impressions, clicks, CTR
  - Calculate SEO Potential - Estimated traffic and revenue potential

  ### Account System (3 operations)

  - Get Account Balance - Account balance and currency
  - Get User Profile - Account profile information
  - Get Subscription Data - Subscription type and status

  ### Sub-Account Management (8 operations)

  - List Sub-Accounts - Get all sub-accounts
  - Get Sub-Account Details - Sub-account settings and permissions
  - Create Sub-Account - Create a new sub-account
  - Delete Sub-Account - Remove a sub-account
  - Update Sub-Account - Modify sub-account settings
  - List Shared Projects - Projects shared with sub-account
  - List Owned Projects - Projects owned by sub-account
  - Share Projects - Share projects with sub-account

  ### General Data (4 operations)

  - List Search Engines - Available search engines and regions
  - List Languages for Google - Google language codes
  - List Volume Regions - Regions for keyword volume checks
  - Get Keyword Search Volume - Search volume for keywords in a region

  ### Marketing Plan (5 operations)

  - List Plan Items - Get marketing plan checklist
  - Add Task - Add custom task to plan
  - Update Task - Modify task title and description
  - Set Task Status - Mark task as complete/incomplete
  - Delete Task - Remove a custom task

  ### Website Audit (Project) (21 operations)

  - Create Audit - Launch a website audit
  - List Audits - Get all audits
  - Get Audit Status - Check audit progress
  - Get Audit Report - Full audit results
  - Get Crawled Pages - Pages found during audit
  - Get Pages by Issue - Pages affected by specific issue
  - Get All Issues for URL - All issues for a specific page
  - Get All Links - Internal/external links found
  - Get Audit History - Historical audit data
  - Update Audit Title - Rename an audit
  - Delete Audit - Remove an audit
  - Recheck Audit - Re-run an audit

  ### Backlink Checker (17 operations)

  - List Backlinks - Get monitored backlinks
  - Add Backlink - Add a backlink to monitor
  - Import Backlinks List - Bulk import backlinks
  - Update Import Settings - Configure GSC auto-import
  - Start GSC Import - Import backlinks from Google Search Console
  - Get GSC Import Status - Check GSC import progress
  - Delete Backlinks - Remove monitored backlinks
  - Recheck Backlinks - Re-check backlink status or index
  - Get Backlink Statistics - Backlink portfolio stats
  - List Disavowed Backlinks - Get disavowed backlinks
  - Add Disavowed Backlinks - Add URLs to disavow list
  - Delete Disavowed Backlink - Remove from disavow list
  - List Backlink Groups - Get backlink groups
  - Create Backlink Group - Create a backlink group
  - Delete Backlink Group - Remove a backlink group
  - Rename Backlink Group - Update group name
  - Move Backlinks to Group - Move backlinks between groups

  ### Search Volume (4 operations)

  - Create Volume Check - Submit keyword volume check request
  - List Volume Checks - Get submitted check requests
  - Get Volume Check Results - Retrieve volume check results
  - Delete Volume Check - Remove a check request

  ### SE Visible API (1 resource, 24 operations)

  ### SE Visible (24 operations)

  SE Visible is SE Ranking's AI-visibility product (`/v1/se-visible/*`). It uses the same
  API token, but **SE Visible API access must be enabled for your account** — without it,
  every SE Visible request returns 401 even with a valid key. The API is limited to
  **1 request/second**; the node throttles automatically.

  **Projects**
  - List Projects - Get all SE Visible projects in the account
  - Create Project - Create a project (async — poll Get Project Details for processing status)
  - Get Project Details - Project metadata, processing status, topics, and check dates
  - Delete Project - Soft-delete a project (restorable)

  **Brands**
  - List Tracked Brands - Brands tracked in the project (primary brand first)
  - Create Competitor Brand - Add a competitor brand to track
  - List Mentioned Brands - Brands detected in AI answers (competitor discovery)
  - Get Aggregated Brand Metrics - Visibility metrics grouped by brand/topic/prompt (table data)
  - Update Brand - Change a brand's domain and/or aliases
  - Delete Brand - Remove a competitor brand (the primary brand cannot be deleted)
  - Add Aliases to Brand - Add alternative names to a tracked brand

  **Topics**
  - Create Topics - Add topics to a project
  - Update Topic Title - Rename a topic
  - Delete Topic - Delete a topic and all prompts grouped under it

  **Prompts & Results**
  - List Prompts - Prompts (or topics with aggregated metrics) with visibility data
  - Create Prompts - Add prompts to a topic
  - Delete Prompts - Bulk-delete prompts
  - Move Prompts - Move prompts to another topic (atomic)
  - Get Prompt Details - A single prompt's text, topic, and parse status
  - Get Prompt Results - Results for a prompt, one per model run
  - Get Prompt Result Details - One result's full text, source URLs, and mentioned brands
  - Download Raw Response - Raw LLM response dump (HTML) for a prompt result

  **Sources & Subscription**
  - Get Project Sources - Domains or URLs AI models cited across the project
  - Get Subscription - SE Visible plan and usage limits (projects, prompts, seats)

  ## Usage Examples

  Ready-to-use workflows demonstrating real-world applications of the SE Ranking node. Each example includes importable n8n workflows, setup instructions, and expected outputs.

  ---

  ### 🤖 Example 1: AI Search Visibility Tracker

  **Track your brand's presence and competitive gaps across ChatGPT, Perplexity, and Gemini**

  Two comprehensive workflows for monitoring AI visibility and identifying content opportunities.

  **Workflow 1: AI Search Visibility Tracker**

  Monitor how often your brand appears in AI-powered search engines with automated historical tracking.

  - Link presence count across multiple AI engines
  - Average position tracking in AI citations
  - AI opportunity traffic estimates
  - Period-over-period comparison metrics

  **Workflow 2: Competitor Topic Gap Analysis**

  Identify content opportunities by analyzing where competitors outrank you in AI search and traditional SEO.

  - AI visibility gaps across ChatGPT, Perplexity, and Gemini
  - Keyword gaps with search volume and difficulty
  - Competitor backlink authority metrics
  - Prioritized opportunities with HIGH/MEDIUM/LOW scoring
  - Actionable recommendations for each gap

  **Best For:** Marketing teams tracking AI SEO performance, Content strategists planning editorial calendars, SEO teams doing competitive intelligence

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/AI-Search)

  ---

  ### 🔗 Example 2: Backlinks Monitoring & Analysis

  **Track new/lost backlinks, monitor domain authority, and analyze anchor text distribution**

  Automatically monitor backlink portfolio health with daily tracking and alerts for significant changes.

  **What You'll Get:**

  - Daily new/lost backlink reports
  - Domain authority trend tracking
  - Anchor text distribution analysis
  - Referring domain diversity metrics
  - Export-ready CSV/Excel reports

  **Best For:** SEO agencies managing client backlink portfolios, In-house SEO teams tracking link-building campaigns

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/SERP-Classic)

  ---

  ### 📊 Example 3: Domain Analysis Data Processor

  **Transform SE Ranking API data into structured Google Sheets reports**

  Automatically process and organize domain analysis data with intelligent type detection.

  **What You'll Get:**

  - Regional performance across 200+ countries
  - Domain summary with organic vs. paid breakdown
  - Keywords analysis with positions and difficulty
  - Competitor insights and gap analysis
  - Multi-domain comparison with worldwide traffic data

  **Best For:** SEO agencies managing multiple clients, Enterprise teams tracking regional performance

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/Domain-Analysis)

  ---

  ### 🔍 Example 4: Keyword Research Automation

  **Automate comprehensive keyword research with trend analysis**

  Build an automated keyword intelligence pipeline with historical tracking and SERP features.

  **What You'll Get:**

  - Bulk keyword metrics with volume and CPC
  - Historical trend analysis (peaks, valleys, averages)
  - SERP features tracking (PAA, featured snippets, etc.)
  - Search intent mapping (informational, commercial, navigational)

  **Best For:** Content strategists planning editorial calendars, SEO specialists doing competitor research

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/Keyword-Research)

  ---

  ### 🔧 Example 5: Website Audit Automation

  **Automatically crawl sites, detect issues, and generate reports**

  Schedule regular technical SEO audits and get alerts when critical issues are detected.

  **What You'll Get:**

  - Automated monthly/weekly site audits
  - Issue detection across 25+ SEO factors
  - Historical issue tracking and resolution monitoring
  - Exportable reports for clients/stakeholders

  **Best For:** Development teams doing pre-launch checks, SEO consultants managing multiple client sites

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/Website-Audit)

  ---

  ### 📍 Example 6: SERP Classic Tracking

  **Track keyword rankings and analyze SERP features across search engines**

  Monitor keyword positions, SERP features, and competitor visibility with automated rank tracking.

  **What You'll Get:**

  - Keyword position tracking across multiple locations
  - SERP features analysis (featured snippets, local pack, etc.)
  - Competitor ranking visibility
  - Device-specific rankings (desktop, mobile, tablet)
  - Historical rank tracking

  **Best For:** SEO teams tracking keyword performance, Local businesses monitoring location-based rankings, Agencies managing multi-client SERP tracking

  📂 [View Full Guide & Download Workflow →](./Usage-Examples/SERP-Classic)

  ---
  ### 🔔 Example 7: SERP Pingback Webhooks

  **Get notified instantly when SERP results are ready — no polling required!**

  Instead of checking task status repeatedly, SE Ranking calls your webhook when done.

  #### Simple Workflow (3 nodes)

  ```
  [Webhook] → [SE Ranking: Get Results] → [Google Sheets]
     ↑
     └── SE Ranking calls this when task completes
  ```

  #### Step-by-Step Setup

  **Step 1: Create Webhook to Receive Notifications**

  Add a **Webhook** node:
  | Setting | Value |
  |---------|-------|
  | HTTP Method | `GET` |
  | Path | `serp-callback` |
  | Response Mode | `Immediately` |

  Click **"Listen for test event"** and copy the URL.

  **Step 2: Create SERP Task with Pingback**

  In another workflow, add **SE Ranking** node:
  | Setting | Value |
  |---------|-------|
  | Resource | `SERP Classic` |
  | Operation | `Add Tasks` |
  | Search Engine | `google` |
  | Device | `desktop` |
  | Language Code | `en` |
  | Location ID | `2840` (USA) |
  | Keywords | `seo tools` |
  | Tag | `my-test` |
  | **Pingback URL** | `https://your-n8n.com/webhook/serp-callback?id=$id&tag=$tag` |

  > ⚠️ Use `$id` and `$tag` exactly as shown — SE Ranking replaces them with real values.

  **Step 3: Fetch Results When Webhook Fires**

  Back in your webhook workflow, add **SE Ranking** node after the Webhook:
  | Setting | Value |
  |---------|-------|
  | Resource | `SERP Classic` |
  | Operation | `Get Results` |
  | Task ID | `{{ $json.query.id }}` |

  **That's it!** When SE Ranking finishes, it calls your webhook, which fetches the results automatically.

  #### Using in Advanced Workflows

  Add pingback to any existing SERP workflow:

  ```
  [Schedule] → [SE Ranking: Add Tasks] ──(async)──→ [Webhook] → [Get Results] → [Process]
                      │
                      └── pingback_url triggers webhook when done
  ```

  ---

  ### 🏆 Example 8: AI Search Leaderboard

  **Compare your AI visibility against competitors in one request.**

  See how your brand performs vs competitors across ChatGPT, Perplexity, Gemini, and Google AI Overview.

  #### Simple Workflow (2 nodes)

  ```
  [Manual Trigger] → [SE Ranking: Get Leaderboard] → [View Results]
  ```

  #### Step-by-Step Setup

  **Step 1: Add SE Ranking Node**

  | Setting | Value |
  |---------|-------|
  | Resource | `AI Search` |
  | Operation | `Get Leaderboard` |
  | Primary Target | `yoursite.com` |
  | Primary Brand | `Your Brand` |
  | Source | `us` |
  | AI Engines | Select: `chatgpt`, `perplexity`, `ai-overview` |

  **Step 2: Add Competitors**

  Click **"Add Competitor"** and enter:
  | Target Domain | Brand Name |
  |---------------|------------|
  | `competitor1.com` | `Competitor 1` |
  | `competitor2.com` | `Competitor 2` |

  **Step 3: Run and View Results**

  Execute the workflow. Response includes:
  - Link presence count (how often you appear)
  - Average position in AI citations
  - Change vs previous period
  - Breakdown by AI engine

  #### Using in Advanced Workflows

  Combine with scheduling and reporting:

  ```
  [Schedule: Weekly] → [Get Leaderboard] → [Code: Calculate Gaps] → [Google Sheets] → [Slack Alert]
  ```

  **Example: Find where competitors beat you**
  ```javascript
  // In Code node after Get Leaderboard
  const dominated = $input.all().filter(item => 
    item.json.competitor_presence > item.json.primary_presence
  );
  return dominated;
  ```

  ---

  ### 🚀 Quick Start

  1. **Browse** the example that matches your use case
  2. **Download** the `workflow.json` file from the example folder
  3. **Import** into n8n (Workflows → Import from File)
  4. **Configure** your SE Ranking API credentials
  5. **Run** and customize to your needs

  **Need help?** Each example includes troubleshooting tips and configuration details.

  ---

  ## API Documentation

  This node implements the SE Ranking unified API (`api.seranking.com/v1`):

  **Data API resources:**
  - [AI Search](https://seranking.com/api/data/ai-search/)
  - [Backlinks](https://seranking.com/api/data/backlinks/)
  - [Domain Analysis](https://seranking.com/api/data/domain-analysis/)
  - [Keyword Research](https://seranking.com/api/data/keyword-research/)
  - [Website Audit](https://seranking.com/api/data/website-audit/)

  **SE Visible API** (under `/v1/se-visible/`):
  - [SE Visible API](https://seranking.com/api/) — AI-visibility projects, brands, topics, prompts, and cited sources

  **Project API resources** (under `/v1/project-management/`):
  - [Project Management](https://seranking.com/api/project/project-management/)
  - [AI Result Tracker](https://seranking.com/api/project/ai-result-tracker/)
  - [Competitors](https://seranking.com/api/project/competitors/)
  - [Backlink Checker](https://seranking.com/api/project/backlink-checker/)
  - [Website Audit (Project)](https://seranking.com/api/project/audit/)
  - [And more...](https://seranking.com/api/project/)

  For detailed API specifications, visit [SE Ranking API Documentation](https://seranking.com/api/).

  ---

  ## Version History

  ### v2.1.0 (Current)

  * ✅ **NEW: SE Visible resource (24 operations)** — full AI-visibility surface: projects, brands (incl. aggregated metrics), topics, prompts & per-model results, raw response dump, cited sources, subscription. Requires SE Visible API access on the account; 1 req/sec rate limit handled by the node.
  * ✅ **NEW: AI Result Tracker — Sources & Competitors (7 operations)** — Sources Summary / Source Domains / Source Pages / Recommendations + Competitors Breakdown / Check Dates / Source Metrics
  * 🔧 Domain inputs accept bare domains (scheme added automatically); country codes normalized to the API's expected case
  * 📊 **Total: 225 operations across 22 resources**

  ### v2.0.6

  * 🐛 **FIX: AI Search → Get Leaderboard** — retries on gateway 504 (heavy/cold requests); accurate timeout message

  ### v2.0.5

  * ✅ **NEW: Edit Keyword (Project Management) + Add Audit Source Pages (Website Audit Project)** — file upload without runtime dependencies
  * 🐛 **FIX: List/Delete Audit Source Pages** — correct `source-pages` endpoint path

  ### v2.0.4

  * ✅ **NEW: List Google Regions (General Data) + Get Domain Authority History (Backlink Checker)**

  ### v2.0.3

  * 🔧 Maintenance release — CI updates (Node 24 opt-in)

  ### v2.0.2

  * 🐛 **FIX: AI Result Tracker → Get Prompt Answer** — correct `prompt_llm_id` query parameter

  ### v2.0.1

  * 🐛 **FIX: Keyword Groups → Move Keywords** — was returning 400; API expects body key `keywords_ids` (plural), not `keyword_ids`
  * 🐛 **FIX: Sub-Account → Share Projects** — `site_ids` must be a single integer per request; now loops one call per site so multiple IDs work
  * 🐛 **FIX: Backlink Checker → Move to Group** — added missing Target Group ID field to the UI

  ### v2.0.0

  * **BREAKING: API Unification** — single credential, single host (`api.seranking.com`). Old `seRankingProjectApi` credential type removed. Re-save affected nodes with unified `SE Ranking API` credential.
  * ✅ **10 new operations** — List Check Dates, Get Ranking Trends, Audit Settings (get/update/reset), Audit Sitemaps (list/add/delete), Audit Source Pages (list/delete), AIRT Rankings group mode
  * 🐛 **FIX: Update Audit Title** — was returning 400 since April 2026, now works
  * 🐛 **FIX: Run Position Check** — /api/ prefix bug resolved by unification
  * ⚠️ **Deprecated: Search Volume + Volume Regions** — 6 ops return 404 on unified host (friendly error with guidance)
  * 📊 **Total: 192 operations across 21 resources**

  ### v1.5.13

  * ✅ **NEW: AIRT Groups resource (8 operations)** — manage AI Result Tracker prompt groups
  * ✅ **NEW: Dynamic Issue Code dropdown** — Get Pages by Issue auto-populates from audit report
  * 🐛 **FIX: Run Position Check URL** — removed incorrect `/api/` prefix

  ### v1.5.8

  * ✅ **NEW: Get Prompt Answer (AI Result Tracker)** - Returns full AI answer text, cited source URLs, detected brand mentions, and organic URLs for a tracked prompt.

  ### v1.3.6

  * 🔧 **FIX: Rate limiting compatibility** - Replaced setTimeout with n8n-workflow sleep function

  ### v1.3.5 

  * ✅ **NEW: SERP Pingback URL** - Webhook notifications when SERP tasks complete
  * ✅ **NEW: AI Search Leaderboard** - Compare visibility against competitors across LLMs
  * ✅ **Total: 65 operations across 6 resources**
  * ✅ Event-driven SERP workflow support
  * ✅ Multi-competitor AI visibility comparison

  ### v1.3.3 

  - ✅ **NEW: Get Worldwide Aggregate for URL** - URL-level global performance metrics
  - ✅ **NEW: Get Domain Pages** - Page-level keyword and traffic analysis with intent breakdown
  - ✅ **NEW: Get Domain Subdomains** - Subdomain traffic and keyword metrics
  - ✅ **Total: 62 operations across 6 resources**
  - ✅ Advanced filtering for pages/subdomains (traffic %, keywords count, traffic sum,)
  - ✅ Search intent breakdown (Informational, Navigational, Transactional, Commercial, Local)

  ### v1.3.0 

  - ✅ Complete AI Search resource (4 operations)
  - ✅ Complete Backlinks resource (25 operations)
  - ✅ Enhanced Domain Analysis resource (8 operations - added History, Comparison, Paid Ads)
  - ✅ Complete Keyword Research resource (5 operations)
  - ✅ Complete Website Audit resource (14 operations)
  - ✅ **NEW: Complete SERP Classic resource (5 operations)**
  - ✅ **Total: 59 operations across 6 resources**
  - ✅ Comprehensive error handling with detailed messages
  - ✅ Full TypeScript support
  - ✅ Input validation (domains, sources, dates)
  - ✅ Pagination support (offset/limit)
  - ✅ Advanced filtering options
  - ✅ Multi-keyword support (up to 1,000 keywords for SERP tasks)
  - ✅ Backlink export and bulk operations
  - ✅ Website audit creation and management
  - ✅ **NEW: SERP rank tracking and analysis**
  - ✅ **NEW: Multi-location SERP data retrieval**

  ### v1.2.3

  - ✅ Complete AI Search resource (4 operations)
  - ✅ **NEW: Complete Backlinks resource (25 operations)**
  - ✅ Enhanced Domain Analysis resource (8 operations - added History, Comparison, Paid Ads)
  - ✅ Complete Keyword Research resource (5 operations)
  - ✅ **NEW: Complete Website Audit resource (14 operations)**
  - ✅ **Total: 54 operations across 5 resources**
  - ✅ Comprehensive error handling with detailed messages
  - ✅ Full TypeScript support
  - ✅ Input validation (domains, sources, dates)
  - ✅ Pagination support (offset/limit)
  - ✅ Advanced filtering options
  - ✅ Multi-keyword support (up to 700 keywords)
  - ✅ **NEW: Backlink export and bulk operations**
  - ✅ **NEW: Website audit creation and management**

  ### v1.0.7

  - ✅ Complete AI Search resource (4 operations)
  - ✅ Complete Domain Analysis resource (4 operations)
  - ✅ Complete Keyword Research resource (5 operations)
  - ✅ Total: 13 operations across 3 resources
  - ✅ Comprehensive error handling with detailed messages
  - ✅ Full TypeScript support
  - ✅ Input validation (domains, sources, dates)
  - ✅ Pagination support (offset/limit)
  - ✅ Advanced filtering options
  - ✅ Multi-keyword support (up to 700 keywords)

  ---

  ## Features

  ✅ **192 Operations** - Comprehensive coverage across 21 resources (unified API)

  ✅ **Pingback Webhooks** - Event-driven notifications for SERP task completion

  ✅ **AI Competitive Analysis** - Leaderboard comparison across LLM engines

  ✅ **Type Safety** - Full TypeScript implementation with strict typing  

  ✅ **Error Handling** - Detailed error messages with troubleshooting hints  

  ✅ **Pagination** - Efficient handling of large datasets  

  ✅ **Advanced Filtering** - Volume, position, CPC, difficulty filters  

  ✅ **Validation** - Input validation for domains, country codes, and parameters  

  ✅ **Authentication** - Automatic credential management and testing  

  ✅ **Rate Limiting** - Built-in rate limit handling with retry logic  

  ✅ **Batch Operations** - Support for multiple keywords/domains  

  ✅ **Backlink Monitoring** - Complete backlink analysis and tracking  

  ✅ **Website Auditing** - Technical SEO audits with issue detection

  ✅ **SERP Tracking** - Keyword ranking and SERP features analysis

  ✅ **Advanced Filtering** - Volume, position, CPC, difficulty, traffic, search intent, SERP features, keyword word count, and include/exclude keyword pattern filters, and the new SERP Feature Link filter (filter[serp_features_2]) — which lets you filter keywords where your domain is specifically linked within a SERP feature (e.g. AI Overviews, Reviews), distinct from the existing serpFeatures filter which only checks for feature presence on the SERP.

  ---

  ## Limitations

  - **Rate Limits**: SE Ranking API has rate limits (varies by plan)
  - **Regional Data**: Some data is region-specific (requires country code)
  - **Keyword Limits**: Export Metrics supports up to 700 keywords per request
  - **Historical Data**: History trend data adds to response time
  - **API Credits**: Some operations consume API credits (check your plan)

  ---
  ## Rate Limiting

  This node includes built-in rate limiting (300ms delay between requests) to help prevent hitting SE Ranking API limits.

  If you still encounter "429 Too Many Requests" errors when processing large amounts of data, you can use n8n's built-in solutions:

  1. **Retry On Fail**: Open node Settings → enable "Retry On Fail" → set "Wait Between Tries" to 1000ms or more
  2. **Split In Batches + Wait**: Use the "Loop Over Items" node to process items in smaller batches with a "Wait" node between requests

  For more details, see [n8n's rate limiting documentation](https://docs.n8n.io/integrations/builtin/rate-limits/).

  ---
  ## Troubleshooting

  ### Pingback Not Received

  **Problem**: SERP task completes but webhook never fires

  **Solution**:
  1. Use production webhook URL (not `webhook-test`)
  2. Ensure URL is publicly accessible (not localhost)
  3. Use HTTPS
  4. Respond within 5 seconds with HTTP 200
  5. Use literal `$id` and `$tag` placeholders

  **Valid URL format:**
  ```
  ✅ https://your-domain.com/webhook/serp-callback?id=$id&tag=$tag
  ❌ https://localhost:5678/webhook/...
  ❌ https://your-domain.com/webhook-test/...
  ```
  ```

  ---

  ### Authentication Errors

  **Problem**: "401 Unauthorized" or "Invalid API Token"

  **Solution**:

  1. Verify API token is correct (copy from SE Ranking dashboard)
  2. Ensure your SE Ranking API credential has the correct unified token
  3. Check token hasn't expired
  4. Regenerate token in SE Ranking dashboard if needed
  5. Test credentials using the "Test" button in n8n

  ---

  ### Invalid Source/Country Code

  **Problem**: "Invalid source" or "400 Bad Request"

  **Solution**:

  1. Use correct Alpha-2 country codes: `us`, `uk`, `de`, `fr`, `es`, `it`, `ca`, `au`, `pl`
  2. Country code must be lowercase
  3. Check if SE Ranking has data for that region
  4. Some engines/features may not be available in all regions

  ---

  ### Domain Format Errors

  **Problem**: "Invalid domain format" or "Domain validation failed"

  **Solution**:

  1. Remove `http://` or `https://` from domain (unless operation specifies full URL)
  2. Remove `www.` prefix
  3. Remove trailing slashes
  4. Use format: `example.com` not `www.example.com/`
  5. For subdomains: `blog.example.com` is valid

  **Valid formats:**

  - ✅ `example.com`
  - ✅ `blog.example.com`
  - ✅ `example.co.uk`
  - ❌ `https://example.com`
  - ❌ `www.example.com`
  - ❌ `example.com/`

  ---

  ### Empty Results

  **Problem**: No data returned from API

  **Solution**:

  1. Verify domain has data in SE Ranking database
  2. Check if domain is indexed/tracked
  3. Try different source/region (domain may rank elsewhere)
  4. Adjust filters - they may be too restrictive
  5. For new domains, wait 24-48 hours for initial data collection
  6. Check if keyword has search volume in selected region

  ---

  ### Timeout Errors

  **Problem**: "Request timeout" or "Operation exceeded time limit"

  **Solution**:

  1. Reduce `limit` parameter (try 100 instead of 1000)
  2. Use pagination with `offset` to fetch data in chunks
  3. For keyword export, reduce number of keywords (try 100 instead of 700)
  4. Remove `history_trend` parameter if not needed (adds processing time)
  5. Use "Get Worldwide Aggregate" instead of getting all regional databases

  ---

  ### Too Many Keywords Error

  **Problem**: "Too many keywords" or "Maximum 700 keywords exceeded"

  **Solution**:

  1. Split keyword list into batches of 700 or less
  2. Use multiple node executions with different batches
  3. Consider using keyword suggestion operations first to narrow down list

  ---

  ### Rate Limit Errors

  **Problem**: "429 Too Many Requests" or "Rate limit exceeded"

  **Solution**:

  1. Add delay between requests using n8n Wait node
  2. Reduce frequency of scheduled workflows
  3. Use batch operations instead of individual requests
  4. Upgrade SE Ranking plan for higher rate limits
  5. Implement exponential backoff retry logic

  ---

  ## Best Practices

  ### 1. Efficient Data Retrieval

  ✅ **DO:**

  - Use "Get Worldwide Aggregate" for quick domain overview
  - Use pagination for large datasets (limit: 100-500)
  - Cache frequently accessed data
  - Use filters to reduce result size

  ❌ **DON'T:**

  - Request all databases when you only need one region
  - Fetch 10,000 keywords at once without pagination
  - Request history_trend unless specifically needed

  ### 2. Keyword Research

  ✅ **DO:**

  - Start with similar keywords, then expand to related/questions
  - Use filters to focus on achievable opportunities (difficulty < 50)
  - Export metrics in batches of 200-500 keywords
  - Include multiple keyword types for comprehensive research

  ❌ **DON'T:**

  - Request all keyword types simultaneously without filtering
  - Ignore difficulty scores (targeting too-hard keywords wastes effort)
  - Forget to check search intent and relevance

  ### 3. Backlink Monitoring

  ✅ **DO:**

  - Schedule daily checks for new/lost backlinks
  - Use "Get Summary" for quick health checks
  - Export full data monthly for archival
  - Track Domain InLink Rank trends over time
  - Monitor anchor text distribution for natural link profile

  ❌ **DON'T:**

  - Poll "Get All Backlinks" every hour (use history endpoints)
  - Download exports without checking status first
  - Ignore referring domain diversity (IP distribution)

  ### 4. Competitor Analysis

  ✅ **DO:**

  - Use "Get Competitors" to identify relevant competitors first
  - Track competitor changes over time (weekly/monthly)
  - Focus on keywords where competitors rank in top 20
  - Analyze multiple competitors to find patterns

  ❌ **DON'T:**

  - Compare against irrelevant competitors
  - Track too many competitors (focus on top 5-10)
  - Ignore competitor's content strategy and backlink profile

  ### 5. AI Search Optimization

  ✅ **DO:**

  - Monitor multiple engines (ChatGPT, Perplexity, Gemini)
  - Track brand mentions and citation types
  - Focus on high-volume prompts
  - Use base_domain scope for brand monitoring

  ❌ **DON'T:**

  - Only track one LLM engine
  - Ignore prompt context and user intent
  - Forget to optimize content based on insights

  ### 6. Website Auditing

  ✅ **DO:**

  - Use Advanced Audit for JavaScript-heavy sites (React, Vue, Angular)
  - Set realistic max_pages based on site size
  - Schedule monthly audits for ongoing monitoring
  - Compare historical audits to track improvements
  - Export issues to spreadsheet for team collaboration

  ❌ **DON'T:**

  - Set max_pages too high (start with 1000-5000)
  - Ignore robots.txt unless intentionally testing blocked areas
  - Run audits too frequently (daily audits waste credits)

  ### 7. Error Handling

  ✅ **DO:**

  - Implement retry logic for transient errors
  - Log errors for debugging
  - Use n8n's "Continue on Fail" for batch operations
  - Validate input before API calls

  ❌ **DON'T:**

  - Ignore error messages (they contain helpful hints)
  - Retry immediately after rate limit (wait 60s)
  - Skip input validation

  ---

  ### Development Setup

  ```bash
  # Clone the repository
  git clone https://github.com/seranking/n8n-nodes-seranking.git

  # Navigate to directory
  cd n8n-nodes-seranking

  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Watch for changes during development
  npm run dev
  ```

  ### Project Structure

  ```
  n8n-nodes-seranking/
  │
  ├── credentials/
  │   └── SeRankingApi.credentials.ts                               # API credentials configuration
  │
  ├── nodes/
  │   └── SeRanking/
  │       ├── SeRanking.node.ts                                     # Main node definition
  │       ├── dataApi/
  │       │   ├── operations/
  │       │   │   ├── AiSearchOperations.ts                         # AI Search operations logic
  │       │   │   ├── BacklinksOperations.ts                        # Backlinks operations logic
  │       │   │   ├── DomainAnalysisOperations.ts                   # Domain Analysis operations logic
  │       │   │   ├── KeywordResearchOperations.ts                  # Keyword Research operations logic
  │       │   │   ├── WebsiteAuditOperations.ts                     # Website Audit operations logic
  │       │   │   └── SerpClassicOperations.ts                      # SERP Classic operations logic
  │       │   └── descriptions/
  │       │       ├── AiSearchDescription.ts                        # AI Search UI definitions
  │       │       ├── BacklinksDescription.ts                       # Backlinks UI definitions
  │       │       ├── DomainAnalysisDescription.ts                  # Domain Analysis UI definitions
  │       │       ├── KeywordResearchDescription.ts                 # Keyword Research UI definitions
  │       │       ├── WebsiteAuditDescription.ts                    # Website Audit UI definitions
  │       │       └── SerpClassicDescription.ts                     # SERP Classic UI definitions
  │       ├── projectApi/
  │       │   ├── operations/
  │       │   │   ├── ProjectManagementOperations.ts                # Project Management operations
  │       │   │   ├── ProjectGroupsOperations.ts                    # Project Groups operations
  │       │   │   ├── AiResultTrackerOperations.ts                  # AI Result Tracker operations
  │       │   │   ├── AirtGroupsOperations.ts                       # AIRT Groups (prompt groups) operations
  │       │   │   ├── KeywordGroupsOperations.ts                    # Keyword Groups operations
  │       │   │   ├── CompetitorsOperations.ts                      # Competitors operations
  │       │   │   ├── UrlTagsOperations.ts                          # URL Tags operations
  │       │   │   ├── AnalyticsTrafficOperations.ts                 # Analytics Traffic operations
  │       │   │   ├── AccountSystemOperations.ts                    # Account System operations
  │       │   │   ├── SubAccountOperations.ts                       # Sub-Account operations
  │       │   │   ├── GeneralDataOperations.ts                      # General Data operations
  │       │   │   ├── MarketingPlanOperations.ts                    # Marketing Plan operations
  │       │   │   ├── WebsiteAuditOperations.ts                     # Website Audit (Project) operations
  │       │   │   ├── BacklinkCheckerOperations.ts                  # Backlink Checker operations
  │       │   │   └── SearchVolumeOperations.ts                     # Search Volume operations
  │       │   └── descriptions/
  │       │       ├── ProjectManagementDescription.ts               # Project Management UI definitions
  │       │       ├── ProjectGroupsDescription.ts                   # Project Groups UI definitions
  │       │       ├── AiResultTrackerDescription.ts                 # AI Result Tracker UI definitions
  │       │       ├── AirtGroupsDescription.ts                      # AIRT Groups UI definitions
  │       │       ├── KeywordGroupsDescription.ts                   # Keyword Groups UI definitions
  │       │       ├── CompetitorsDescription.ts                     # Competitors UI definitions
  │       │       ├── UrlTagsDescription.ts                         # URL Tags UI definitions
  │       │       ├── AnalyticsTrafficDescription.ts                # Analytics Traffic UI definitions
  │       │       ├── AccountSystemDescription.ts                   # Account System UI definitions
  │       │       ├── SubAccountDescription.ts                      # Sub-Account UI definitions
  │       │       ├── GeneralDataDescription.ts                     # General Data UI definitions
  │       │       ├── MarketingPlanDescription.ts                   # Marketing Plan UI definitions
  │       │       ├── WebsiteAuditDescription.ts                    # Website Audit (Project) UI definitions
  │       │       ├── BacklinkCheckerDescription.ts                 # Backlink Checker UI definitions
  │       │       └── SearchVolumeDescription.ts                    # Search Volume UI definitions
  │       └── utils/
  │           ├── validators.ts                                     # Input validators
  │           └── apiRequest.ts                                     # API request handler
  │
  ├── Usage-Examples/
  │   ├── AI-Search/
  │   │   ├── AIVisibilityTracker.json                              # Workflow 1: AI Visibility Tracker
  │   │   ├── AIVisibilityTrackerResults.xlsx                       # Workflow 1 Results
  │   │   ├── SERanking-CompetitorTopicGapAnalysis.json             # Workflow 2: Competitor Topic Gap Analysis
  │   │   ├── SE Ranking - Competitor Topic Gap Analysis.xlsx       # Workflow 2 Results
  │   │   └── README.md                                             # AI Search workflows documentation
  │   │
  │   ├── Backlinks/
  │   │   ├── Backlinks-Monitoring&Analysis.json                    # Backlinks monitoring workflow
  │   │   └── README.md                                             # Backlinks workflow documentation
  │   │
  │   ├── Domain-Analysis/
  │   │   ├── DomainAnalysisMulti-FormatProcessor.json              # Workflow 1: Multi-Format Data Processor
  │   │   ├── DomainAnalysisMulti-FormatProcessor.xlsx              # Workflow 1 Results
  │   │   ├── DomainTraffic&CompetitorAnalysis.json                 # Workflow 2: Multi-Domain Traffic Analysis
  │   │   ├── DomainTraffic&CompetitorAnalysis.xlsx                 # Workflow 2 Results
  │   │   ├── Get_Regional_DB_Overview.jpg                          # Screenshot: Regional Overview
  │   │   ├── Get_Worldwide_Aggregate.jpg                           # Screenshot: Worldwide Aggregate
  │   │   ├── Get_Domain_Keywords.jpg                               # Screenshot: Keywords Analysis
  │   │   ├── Get_Competitors.jpg                                   # Screenshot: Competitors
  │   │   ├── Get keywords comparison Organic Common Keywords.jpg   # Screenshot: Keywords Comparison
  │   │   ├── Get keywords comparison Organic Keyword Gap.jpg       # Screenshot: Organic Gap
  │   │   ├── Get keywords comparison Paid Keyword Gap.jpg          # Screenshot: Paid Gap
  │   │   ├── Get keywords comparison Paid.jpg                      # Screenshot: Paid Comparison
  │   │   ├── Get overview history Organic.jpg                      # Screenshot: Organic History
  │   │   ├── Get overview history Paid.jpg                         # Screenshot: Paid History
  │   │   ├── Get paid ads for domain.jpg                           # Screenshot: Domain Ads
  │   │   ├── Get paid ads for keyword.jpg                          # Screenshot: Keyword Ads
  │   │   ├── Get audit links.png                                   # Screenshot: Audit Links
  │   │   ├── Get crawled pages.png                                 # Screenshot: Crawled Pages
  │   │   ├── Get issues for URL.png                                # Screenshot: URL Issues
  │   │   └── README.md                                             # Domain Analysis workflows documentation
  │   │
  │   ├── Keyword-Research/
  │   │   ├── KeywordResearch→GoogleSheetsPipeline.json             # Keyword research workflow
  │   │   ├── KeywordResearch→GoogleSheetsPipeline.xlsx             # Workflow results
  │   │   ├── Get_Similar_Keywords.jpg                              # Screenshot: Similar Keywords
  │   │   ├── Get_Related_Keywords.jpg                              # Screenshot: Related Keywords
  │   │   ├── Get_Question_Keywords.jpg                             # Screenshot: Question Keywords
  │   │   ├── Get_Longtail_Keywords.jpg                             # Screenshot: Longtail Keywords
  │   │   └── README.md                                             # Keyword Research workflow documentation
  │   │
  │   ├── Website-Audit/
  │   │   ├── Website-Audit-Technical-SEO-Monitor.json              # Website audit workflow
  │   │   └── README.md                                             # Website Audit workflow documentation
  │   │
  │   └── SERP-Classic/
  │       ├── Gelato-Small-Towns-Amsterdam-Area.json                # SERP tracking workflow
  │       ├── Gelato Small Towns Amsterdam Area.xlsx                # Workflow results
  │       └── README.md                                             # SERP Classic workflow documentation
  │
  ├── package.json
  ├── package-lock.json
  ├── tsconfig.json
  └── README.md
  ```

  ---

  ## Acknowledgments

  - Built for the [n8n](https://n8n.io/) workflow automation platform
  - Powered by [SE Ranking API](https://seranking.com)

  ---

  ## Keywords

  n8n, n8n-custom-node, seranking, seo, keyword-research, domain-analysis, ai-search, llm-visibility, serp-tracking, competitive-analysis, seo-automation, workflow-automation, project-management, backlink-checker, website-audit, search-volume, marketing-plan, sub-account, ai-result-tracker

  ---

  **Made with ❤️ for SEO professionals using n8n**

ai_documentation_summary:
  {"purpose":"A custom n8n node that enables workflow automation with SE Ranking's SEO platform, allowing access to keyword research, competitor analysis, website audits, backlink monitoring, and AI search visibility tracking.","capabilities":["AI Search visibility tracking (LLM metrics, brand discovery, prompt tracking)","Backlink analysis (summary, metrics, detailed lists, raw data, export)","Domain analysis (authority metrics, page authority, history tracking)","Competitor comparison","Keyword research","Website audits","Anchor text analysis","Referring domain and IP analysis","Data export functionality"],"authentication":"API Token required (entered in n8n credentials with 'Data API' type)","commonUseCases":["SEO competitor analysis workflows","Backlink monitoring and tracking","Website authority auditing","AI search visibility optimization","Automated SEO reporting"],"limitations":["Requires SE Ranking account and API token","Compatible only with n8n 1.0.0+ and Node.js 18.x+","Uses SE Ranking Data API v1"],"relatedNodes":["Google Search Console","Ahrefs","Moz","SE Ranking"]}


node_type: @fibery/n8n-nodes-fibery.fibery
package_name: @fibery/n8n-nodes-fibery
display_name: Fibery
description: Read, update, write and delete data from Fibery
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: gaswelder
author_github_url: https://github.com/Fibery-inc/n8n-nodes-fibery.git
npm_package_name: @fibery/n8n-nodes-fibery
npm_version: 0.1.19
community_fetched_at: 2026-07-14T14:40:33.360Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "entity",
      "options": [
        {
          "name": "Database",
          "value": "database"
        },
        {
          "name": "Entity",
          "value": "entity"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many databases",
          "description": "Get many databases from the workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "database"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an entity",
          "description": "Create a new entity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an entity",
          "description": "Delete an entity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an entity",
          "description": "Get an entity"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many entities",
          "description": "Get many entities from a database"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an entity",
          "description": "Update an entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entity"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many databases",
      "description": "Get many databases from the workspace",
      "resource": "database"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an entity",
      "description": "Create a new entity",
      "resource": "entity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an entity",
      "description": "Delete an entity",
      "resource": "entity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an entity",
      "description": "Get an entity",
      "resource": "entity"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many entities",
      "description": "Get many entities from a database",
      "resource": "entity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an entity",
      "description": "Update an entity",
      "resource": "entity"
    }
  ]

npm_readme:
  # n8n-nodes-fibery

  ![Fibery x n8n](./fibery-x-n8n.png)

  This is an n8n community node. It lets you use Fibery in your n8n workflows.

  Fibery is your company’s operating system
  It's a work platform that replaces scattered tools and connects teams. Chosen by nerds, appreciated by everyone (almost).

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

  [Installation](#installation)
  [Operations](#operations)
  [Credentials](#credentials)
  [Compatibility](#compatibility)
  [Usage](#usage)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  1. Go to **Settings** > **Community Nodes**.
  2. Select **Install**.
  3. Enter `@fibery/n8n-nodes-fibery` in **npm Package name**.
  4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand the risks of installing unverified code from a public source**.
  5. Select **Install**.

  ## Operations

  ### Database

  - **get many**. List all databases in the workspace.

  ### Entity

  - **create**. Create a new entity.
  - **delete**. Delete an entity.
  - **get**. Get an entity.s
  - **get many**. Search and list entities from a database.
  - **update**. Update an entity.

  ### Triggers

  - **default**. Handle Fibery events to Database from webhooks.

  ## Credentials

  At the moment this node supports only one authentication method: **API Key**.

  ### Using API Key

  1. Enter the name of your Fibery workspace in the **Workspace** field. It can be obtained from the URL of your workspace. For example, if your workspace URL is `https://my-company.fibery.io`, then the workspace name is `my-company`.
  2. Obtain an API key from your Fibery workspace. Please follow the [Fibery API keys](https://the.fibery.io/@public/User_Guide/Guide/Fibery-API-keys-252) guide.
  3. Enter API key in the **API Key** field.

  ## Compatibility

  Tested on: 1.111.0

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Fibery](https://www.fibery.io/)
  - [Fibery API documentation](https://the.fibery.io/@public/User_Guide/Guide/Fibery-API-overview-279)

ai_documentation_summary:
  {"purpose":"This n8n community node enables full CRUD operations (create, read, update, delete) on Fibery entities and databases within automation workflows.","capabilities":["Create new entities","Delete entities","Retrieve single entities","Search and list multiple entities from databases","Update existing entities","List all databases in a workspace","Handle Fibery events via webhooks"],"authentication":"API Key","commonUseCases":["Automating data entry into Fibery workspaces","Syncing external data sources to Fibery","Triggering workflows based on Fibery events","Updating records based on conditional logic"],"limitations":["Only supports API Key authentication method","Requires manual workspace name extraction from URL","Community node status may imply less official support than core nodes"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Code Node"]}


node_type: n8n-nodes-blooio.blooioMessaging
package_name: n8n-nodes-blooio
display_name: Blooio
description: Send iMessages, manage contacts, groups, webhooks and more via the Blooio API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: dave_xt
author_github_url: https://github.com/blooio/
npm_package_name: n8n-nodes-blooio
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:33.361Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Chat",
          "value": "chat"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Number",
          "value": "number"
        },
        {
          "name": "Phone Number",
          "value": "phoneNumber"
        },
        {
          "name": "Poll",
          "value": "poll"
        },
        {
          "name": "Reaction",
          "value": "reaction"
        },
        {
          "name": "Typing Indicator",
          "value": "typing"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a message",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages",
              "method": "POST"
            }
          },
          "description": "Send a text and/or attachment message to a chat"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a message",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}",
              "method": "GET"
            }
          },
          "description": "Retrieve details for a single message"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get message delivery status",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}/status",
              "method": "GET"
            }
          },
          "description": "Get the delivery status of a message"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List messages in a chat",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages",
              "method": "GET"
            }
          },
          "description": "List messages in a conversation with optional filters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a chat",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}",
              "method": "GET"
            }
          },
          "description": "Get details for a single conversation"
        },
        {
          "name": "Get Background",
          "value": "getBackground",
          "action": "Get chat background",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/background",
              "method": "GET"
            }
          },
          "description": "Get the current background image metadata for a conversation"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List chats",
          "routing": {
            "request": {
              "url": "/chats",
              "method": "GET"
            }
          },
          "description": "List all conversations, most recent first"
        },
        {
          "name": "Mark as Read",
          "value": "markRead",
          "action": "Mark a chat as read",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/read",
              "method": "POST"
            }
          },
          "description": "Mark all messages in a chat as read and send a read receipt"
        },
        {
          "name": "Remove Background",
          "value": "removeBackground",
          "action": "Remove chat background",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/background",
              "method": "DELETE"
            }
          },
          "description": "Remove the background image from a conversation"
        },
        {
          "name": "Share Contact Card",
          "value": "shareContactCard",
          "action": "Share your contact card in a chat",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/contact-card",
              "method": "POST"
            }
          },
          "description": "Stage your contact card (Name & Photo) to be sent with the next outgoing message. Dedicated Commercial/Enterprise plans only."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "react",
      "options": [
        {
          "name": "Add or Remove",
          "value": "react",
          "action": "Add or remove a reaction",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}/reactions",
              "method": "POST"
            }
          },
          "description": "Add or remove a tapback or emoji reaction on a message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reaction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a poll",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/polls",
              "method": "POST"
            }
          },
          "description": "Send a native iMessage poll to a chat"
        },
        {
          "name": "Get Results",
          "value": "getResults",
          "action": "Get poll results",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/polls/{{ $parameter[\"pollId\"] }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a poll definition and aggregated vote counts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "poll"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "start",
      "options": [
        {
          "name": "Start",
          "value": "start",
          "action": "Start typing indicator",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/typing",
              "method": "POST"
            }
          },
          "description": "Show the typing indicator in a chat (iMessage only)"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop typing indicator",
          "routing": {
            "request": {
              "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/typing",
              "method": "DELETE"
            }
          },
          "description": "Hide the typing indicator in a chat"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "typing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List contacts",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "List all contacts with optional search and pagination"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "POST"
            }
          },
          "description": "Create a new contact from a phone number or email"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
              "method": "PATCH"
            }
          },
          "description": "Update a contact's display name"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Check Capabilities",
          "value": "capabilities",
          "action": "Check contact capabilities",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/capabilities",
              "method": "GET"
            }
          },
          "description": "Check whether a contact supports iMessage, SMS and/or FaceTime"
        },
        {
          "name": "List Tags",
          "value": "listTags",
          "action": "List contact tags",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags",
              "method": "GET"
            }
          }
        },
        {
          "name": "Add Tags",
          "value": "addTags",
          "action": "Add tags to a contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags",
              "method": "POST"
            }
          }
        },
        {
          "name": "Remove Tag",
          "value": "removeTag",
          "action": "Remove a tag from a contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags/{{ encodeURIComponent($parameter[\"tag\"]) }}",
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List groups",
          "routing": {
            "request": {
              "url": "/groups",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a group",
          "routing": {
            "request": {
              "url": "/groups",
              "method": "POST"
            }
          },
          "description": "Create a new group, optionally linked to an existing iMessage chat"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a group",
          "routing": {
            "request": {
              "url": "=/groups/{{ $parameter[\"groupId\"] }}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a group",
          "routing": {
            "request": {
              "url": "=/groups/{{ $parameter[\"groupId\"] }}",
              "method": "PATCH"
            }
          },
          "description": "Update a group's name"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a group",
          "routing": {
            "request": {
              "url": "=/groups/{{ $parameter[\"groupId\"] }}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "List Members",
          "value": "listMembers",
          "action": "List group members",
          "routing": {
            "request": {
              "url": "=/groups/{{ $parameter[\"groupId\"] }}/members",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List webhooks",
          "routing": {
            "request": {
              "url": "/webhooks",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "request": {
              "url": "/webhooks",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
              "method": "PATCH"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Rotate Secret",
          "value": "rotateSecret",
          "action": "Rotate the webhook signing secret",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/secret/rotate",
              "method": "POST"
            }
          },
          "description": "Generate a new signing secret (shown only once)"
        },
        {
          "name": "List Logs",
          "value": "listLogs",
          "action": "List webhook delivery logs",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/logs",
              "method": "GET"
            }
          }
        },
        {
          "name": "Replay Event",
          "value": "replayEvent",
          "action": "Replay a webhook event",
          "routing": {
            "request": {
              "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/logs/{{ $parameter[\"eventId\"] }}/replay",
              "method": "POST"
            }
          },
          "description": "Re-send a previously delivered webhook event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List phone numbers",
          "routing": {
            "request": {
              "url": "/me/numbers",
              "method": "GET"
            }
          },
          "description": "List all phone numbers bound to this API key"
        },
        {
          "name": "Request Call Forwarding",
          "value": "requestCallForwarding",
          "action": "Request call forwarding",
          "routing": {
            "request": {
              "url": "=/me/numbers/{{ encodeURIComponent($parameter[\"number\"]) }}/call-forwarding",
              "method": "POST"
            }
          },
          "description": "Open a request to forward calls from one of your numbers to another number"
        },
        {
          "name": "Update Contact Card",
          "value": "updateContactCard",
          "action": "Update the contact card for a number",
          "routing": {
            "request": {
              "url": "=/me/numbers/{{ encodeURIComponent($parameter[\"number\"]) }}/contact-card",
              "method": "PUT"
            }
          },
          "description": "Update the Name & Photo identity shared from a number (Dedicated plans only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "number"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List contact locations",
          "routing": {
            "request": {
              "url": "/location/contacts",
              "method": "GET"
            }
          },
          "description": "List cached FindMy contact locations"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact location",
          "routing": {
            "request": {
              "url": "=/location/contacts/{{ encodeURIComponent($parameter[\"handle\"]) }}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Refresh",
          "value": "refresh",
          "action": "Refresh contact locations",
          "routing": {
            "request": {
              "url": "/location/contacts/refresh",
              "method": "POST"
            }
          },
          "description": "Trigger a refresh of cached FindMy contact locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "location"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "lookup",
      "options": [
        {
          "name": "Lookup",
          "value": "lookup",
          "action": "Look up a phone number",
          "routing": {
            "request": {
              "url": "/phone-numbers/lookup",
              "method": "POST"
            }
          },
          "description": "Validate and format a phone number with geocoding. Requires a Dedicated Enterprise plan."
        },
        {
          "name": "Batch Lookup",
          "value": "batchLookup",
          "action": "Batch look up phone numbers",
          "routing": {
            "request": {
              "url": "/phone-numbers/batch",
              "method": "POST"
            }
          },
          "description": "Look up up to 100 phone numbers in one request. Requires a Dedicated Enterprise plan."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phoneNumber"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMe",
      "options": [
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get current account context",
          "routing": {
            "request": {
              "url": "/me",
              "method": "GET"
            }
          },
          "description": "Return details about the authenticated API key, organization, devices, and usage statistics"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send a message",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages",
          "method": "POST"
        }
      },
      "description": "Send a text and/or attachment message to a chat",
      "resource": "message"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a message",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}",
          "method": "GET"
        }
      },
      "description": "Retrieve details for a single message",
      "resource": "message"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get message delivery status",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}/status",
          "method": "GET"
        }
      },
      "description": "Get the delivery status of a message",
      "resource": "message"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List messages in a chat",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages",
          "method": "GET"
        }
      },
      "description": "List messages in a conversation with optional filters",
      "resource": "message"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a chat",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}",
          "method": "GET"
        }
      },
      "description": "Get details for a single conversation",
      "resource": "chat"
    },
    {
      "name": "Get Background",
      "value": "getBackground",
      "action": "Get chat background",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/background",
          "method": "GET"
        }
      },
      "description": "Get the current background image metadata for a conversation",
      "resource": "chat"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List chats",
      "routing": {
        "request": {
          "url": "/chats",
          "method": "GET"
        }
      },
      "description": "List all conversations, most recent first",
      "resource": "chat"
    },
    {
      "name": "Mark as Read",
      "value": "markRead",
      "action": "Mark a chat as read",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/read",
          "method": "POST"
        }
      },
      "description": "Mark all messages in a chat as read and send a read receipt",
      "resource": "chat"
    },
    {
      "name": "Remove Background",
      "value": "removeBackground",
      "action": "Remove chat background",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/background",
          "method": "DELETE"
        }
      },
      "description": "Remove the background image from a conversation",
      "resource": "chat"
    },
    {
      "name": "Share Contact Card",
      "value": "shareContactCard",
      "action": "Share your contact card in a chat",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/contact-card",
          "method": "POST"
        }
      },
      "description": "Stage your contact card (Name & Photo) to be sent with the next outgoing message. Dedicated Commercial/Enterprise plans only.",
      "resource": "chat"
    },
    {
      "name": "Add or Remove",
      "value": "react",
      "action": "Add or remove a reaction",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/messages/{{ $parameter[\"messageId\"] }}/reactions",
          "method": "POST"
        }
      },
      "description": "Add or remove a tapback or emoji reaction on a message",
      "resource": "reaction"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a poll",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/polls",
          "method": "POST"
        }
      },
      "description": "Send a native iMessage poll to a chat",
      "resource": "poll"
    },
    {
      "name": "Get Results",
      "value": "getResults",
      "action": "Get poll results",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/polls/{{ $parameter[\"pollId\"] }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a poll definition and aggregated vote counts",
      "resource": "poll"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start typing indicator",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/typing",
          "method": "POST"
        }
      },
      "description": "Show the typing indicator in a chat (iMessage only)",
      "resource": "typing"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop typing indicator",
      "routing": {
        "request": {
          "url": "=/chats/{{ encodeURIComponent($parameter[\"chatId\"]) }}/typing",
          "method": "DELETE"
        }
      },
      "description": "Hide the typing indicator in a chat",
      "resource": "typing"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List contacts",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "List all contacts with optional search and pagination",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "POST"
        }
      },
      "description": "Create a new contact from a phone number or email",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
          "method": "GET"
        }
      },
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
          "method": "PATCH"
        }
      },
      "description": "Update a contact's display name",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}",
          "method": "DELETE"
        }
      },
      "resource": "contact"
    },
    {
      "name": "Check Capabilities",
      "value": "capabilities",
      "action": "Check contact capabilities",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/capabilities",
          "method": "GET"
        }
      },
      "description": "Check whether a contact supports iMessage, SMS and/or FaceTime",
      "resource": "contact"
    },
    {
      "name": "List Tags",
      "value": "listTags",
      "action": "List contact tags",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags",
          "method": "GET"
        }
      },
      "resource": "contact"
    },
    {
      "name": "Add Tags",
      "value": "addTags",
      "action": "Add tags to a contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags",
          "method": "POST"
        }
      },
      "resource": "contact"
    },
    {
      "name": "Remove Tag",
      "value": "removeTag",
      "action": "Remove a tag from a contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{ encodeURIComponent($parameter[\"contactId\"]) }}/tags/{{ encodeURIComponent($parameter[\"tag\"]) }}",
          "method": "DELETE"
        }
      },
      "resource": "contact"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List groups",
      "routing": {
        "request": {
          "url": "/groups",
          "method": "GET"
        }
      },
      "resource": "group"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a group",
      "routing": {
        "request": {
          "url": "/groups",
          "method": "POST"
        }
      },
      "description": "Create a new group, optionally linked to an existing iMessage chat",
      "resource": "group"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a group",
      "routing": {
        "request": {
          "url": "=/groups/{{ $parameter[\"groupId\"] }}",
          "method": "GET"
        }
      },
      "resource": "group"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a group",
      "routing": {
        "request": {
          "url": "=/groups/{{ $parameter[\"groupId\"] }}",
          "method": "PATCH"
        }
      },
      "description": "Update a group's name",
      "resource": "group"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a group",
      "routing": {
        "request": {
          "url": "=/groups/{{ $parameter[\"groupId\"] }}",
          "method": "DELETE"
        }
      },
      "resource": "group"
    },
    {
      "name": "List Members",
      "value": "listMembers",
      "action": "List group members",
      "routing": {
        "request": {
          "url": "=/groups/{{ $parameter[\"groupId\"] }}/members",
          "method": "GET"
        }
      },
      "resource": "group"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List webhooks",
      "routing": {
        "request": {
          "url": "/webhooks",
          "method": "GET"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "request": {
          "url": "/webhooks",
          "method": "POST"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
          "method": "GET"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
          "method": "PATCH"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}",
          "method": "DELETE"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Rotate Secret",
      "value": "rotateSecret",
      "action": "Rotate the webhook signing secret",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/secret/rotate",
          "method": "POST"
        }
      },
      "description": "Generate a new signing secret (shown only once)",
      "resource": "webhook"
    },
    {
      "name": "List Logs",
      "value": "listLogs",
      "action": "List webhook delivery logs",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/logs",
          "method": "GET"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Replay Event",
      "value": "replayEvent",
      "action": "Replay a webhook event",
      "routing": {
        "request": {
          "url": "=/webhooks/{{ $parameter[\"webhookId\"] }}/logs/{{ $parameter[\"eventId\"] }}/replay",
          "method": "POST"
        }
      },
      "description": "Re-send a previously delivered webhook event",
      "resource": "webhook"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List phone numbers",
      "routing": {
        "request": {
          "url": "/me/numbers",
          "method": "GET"
        }
      },
      "description": "List all phone numbers bound to this API key",
      "resource": "number"
    },
    {
      "name": "Request Call Forwarding",
      "value": "requestCallForwarding",
      "action": "Request call forwarding",
      "routing": {
        "request": {
          "url": "=/me/numbers/{{ encodeURIComponent($parameter[\"number\"]) }}/call-forwarding",
          "method": "POST"
        }
      },
      "description": "Open a request to forward calls from one of your numbers to another number",
      "resource": "number"
    },
    {
      "name": "Update Contact Card",
      "value": "updateContactCard",
      "action": "Update the contact card for a number",
      "routing": {
        "request": {
          "url": "=/me/numbers/{{ encodeURIComponent($parameter[\"number\"]) }}/contact-card",
          "method": "PUT"
        }
      },
      "description": "Update the Name & Photo identity shared from a number (Dedicated plans only)",
      "resource": "number"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List contact locations",
      "routing": {
        "request": {
          "url": "/location/contacts",
          "method": "GET"
        }
      },
      "description": "List cached FindMy contact locations",
      "resource": "location"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact location",
      "routing": {
        "request": {
          "url": "=/location/contacts/{{ encodeURIComponent($parameter[\"handle\"]) }}",
          "method": "GET"
        }
      },
      "resource": "location"
    },
    {
      "name": "Refresh",
      "value": "refresh",
      "action": "Refresh contact locations",
      "routing": {
        "request": {
          "url": "/location/contacts/refresh",
          "method": "POST"
        }
      },
      "description": "Trigger a refresh of cached FindMy contact locations",
      "resource": "location"
    },
    {
      "name": "Lookup",
      "value": "lookup",
      "action": "Look up a phone number",
      "routing": {
        "request": {
          "url": "/phone-numbers/lookup",
          "method": "POST"
        }
      },
      "description": "Validate and format a phone number with geocoding. Requires a Dedicated Enterprise plan.",
      "resource": "phoneNumber"
    },
    {
      "name": "Batch Lookup",
      "value": "batchLookup",
      "action": "Batch look up phone numbers",
      "routing": {
        "request": {
          "url": "/phone-numbers/batch",
          "method": "POST"
        }
      },
      "description": "Look up up to 100 phone numbers in one request. Requires a Dedicated Enterprise plan.",
      "resource": "phoneNumber"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get current account context",
      "routing": {
        "request": {
          "url": "/me",
          "method": "GET"
        }
      },
      "description": "Return details about the authenticated API key, organization, devices, and usage statistics",
      "resource": "account"
    }
  ]

npm_readme:
  # n8n-nodes-blooio

  This is an n8n community node for [Blooio](https://blooio.com). It lets you send and receive iMessages, RCS, SMS, and more through the Blooio API in your n8n workflows.

  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  [Installation](#installation)  
  [Operations](#operations)  
  [Credentials](#credentials)  
  [Compatibility](#compatibility)  
  [Resources](#resources)

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ## Operations

  This node is built against the Blooio v2 API (`https://backend.blooio.com/v2/api`).

  ### Message

  - **Send** - Send text and/or attachments to a chat. Supports iMessage send-with-effects, typing indicators, contact-card sharing, inline replies and idempotency keys.
  - **Get** - Retrieve full details for a single message.
  - **Get Status** - Check a message's delivery status.
  - **List** - List messages in a conversation with direction/time filters.

  ### Chat

  - **List** - List all conversations.
  - **Get** - Get details for a conversation.
  - **Mark as Read** - Mark a chat as read and send a read receipt.
  - **Share Contact Card** - Stage your Name & Photo to be sent with the next message.
  - **Get Background** / **Remove Background** - Manage a conversation's background image.

  ### Typing Indicator

  - **Start** / **Stop** - Show or hide the iMessage typing indicator in a chat.

  ### Reaction

  - **Add or Remove** - Add or remove a tapback or emoji reaction on a message.

  ### Poll

  - **Send** - Send a native iMessage poll.
  - **Get Results** - Retrieve a poll's options and vote counts.

  ### Contact

  - **List / Create / Get / Update / Delete** - Manage contacts.
  - **Check Capabilities** - Check iMessage / SMS / FaceTime support.
  - **List Tags / Add Tags / Remove Tag** - Manage contact tags.

  ### Group

  - **List / Create / Get / Update / Delete** - Manage groups.
  - **List Members** - List the members of a group.

  ### Webhook

  - **List / Create / Get / Update / Delete** - Manage webhook subscriptions.
  - **Rotate Secret** - Rotate the webhook signing secret.
  - **List Logs / Replay Event** - Inspect and replay webhook deliveries.

  ### Number

  - **List** - List the phone numbers bound to your API key.
  - **Request Call Forwarding** - Open a call-forwarding request for a dedicated/inbound number.
  - **Update Contact Card** - Update the Name & Photo shared from a number (Dedicated plans).

  ### Location

  - **List / Get / Refresh** - Read cached FindMy contact locations.

  ### Phone Number

  - **Lookup / Batch Lookup** - Validate, format and geocode phone numbers (Enterprise plan).

  ### Account

  - **Get Me** - Return the authenticated API key, organization, devices and usage.

  > Note: endpoints that require multipart file uploads (set chat background, set group icon) and endpoints Blooio currently marks "Coming Soon" (FaceTime calls, add/remove group member, get contact card) are intentionally not exposed as operations yet.

  ## Credentials

  ### API Key Authentication

  1. Sign up for a Blooio account at [https://blooio.com](https://blooio.com)
  2. Navigate to your Dashboard
  3. Go to Settings > API Keys
  4. Create a new API key or copy an existing one
  5. In n8n, create a new Blooio credential:
     - Select "API Key" as the authentication method
     - Paste your API key
     - Save the credential

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Blooio API Documentation](https://docs.blooio.com)
  - [Blooio Dashboard](https://dashboard.blooio.com)
  - [Support](mailto:support@blooio.com)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables sending and receiving iMessages, RCS, and SMS through the Blooio API v3.","capabilities":["Send text messages with attachments via iMessage/SMS/RCS","Retrieve complete message details including delivery status","Check delivery status of specific messages","Cancel queued or scheduled messages","Check phone number or email capabilities for iMessage, SMS, or RCS support","Configure inbound message and delivery notification webhooks"],"authentication":"API Key","commonUseCases":["Automated customer communication via SMS or RCS","Two-way messaging workflows with delivery confirmation","Checking recipient device capabilities before sending","Scheduling and managing message delivery"],"limitations":["Requires a separate Blooio account and API key","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":["HTTP Request","Webhook"]}


