# nodes

node_type: n8n-nodes-infranodus.infranodus
package_name: n8n-nodes-infranodus
display_name: InfraNodus Graph RAG
description: Build knowledge graphs, get AI advice, and extract content gaps with the InfraNodus API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: aerodynamika
author_github_url: https://github.com/infranodus/
npm_package_name: n8n-nodes-infranodus
npm_version: 0.1.8
community_fetched_at: 2026-03-25T21:19:40.765Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "aiAdviceForGraph",
      "options": [
        {
          "name": "AI Advice From Graph",
          "value": "aiAdviceForGraph"
        },
        {
          "name": "Knowledge Graph",
          "value": "knowledgeGraphs"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getGraph",
      "options": [
        {
          "name": "Create / Update a Graph From Text",
          "value": "createGraph",
          "action": "Create / update a graph from text",
          "routing": {
            "request": {
              "url": "/graphAndStatements",
              "method": "POST"
            }
          },
          "description": "Create a new knowledge graph or update an existing one from text and return it & stats"
        },
        {
          "name": "Get an Existing Graph",
          "value": "getGraph",
          "action": "Get an existing infranodus graph",
          "routing": {
            "request": {
              "url": "/graphAndStatements",
              "method": "POST"
            }
          },
          "description": "Get an existing graph of a user from InfraNodus"
        },
        {
          "name": "Generate Content Gaps and Topics",
          "value": "generateGraphStats",
          "action": "Generate content gaps and topics",
          "routing": {
            "request": {
              "url": "/graphAndStatements",
              "method": "POST"
            }
          },
          "description": "Generate content gaps and topics from a text or existing graph"
        },
        {
          "name": "Generate RAG Augmentation Prompt",
          "value": "generateGraphSummary",
          "action": "Generate RAG augmentation prompt",
          "routing": {
            "request": {
              "url": "/graphAndStatements",
              "method": "POST"
            }
          },
          "description": "Generate RAG augmentation prompt from a text or existing graph"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "knowledgeGraphs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "promptGraph",
      "options": [
        {
          "name": "Query an Expert (Existing Graph)",
          "value": "promptGraph",
          "action": "Get a response from knowledge base",
          "routing": {
            "request": {
              "url": "/graphAndAdvice",
              "method": "POST"
            }
          },
          "description": "Get an AI advice from an existing knowledge base or ontology"
        },
        {
          "name": "Retrieve Statements with GraphRAG",
          "value": "retrieveStatementsFromGraph",
          "action": "Retrieve statements from a graph",
          "routing": {
            "request": {
              "url": "/graphAndAdvice",
              "method": "POST"
            }
          },
          "description": "Retrieve relevant statements from an existing graph using GraphRAG"
        },
        {
          "name": "Generate Research Questions",
          "value": "questionGraph",
          "action": "Generate research questions",
          "routing": {
            "request": {
              "url": "/graphAndAdvice",
              "method": "POST"
            }
          },
          "description": "Generate research questions based on the content gaps in a graph"
        },
        {
          "name": "Generate a Topical Summary",
          "value": "summarizeGraph",
          "action": "Generate topical summary",
          "routing": {
            "request": {
              "url": "/graphAndAdvice",
              "method": "POST"
            }
          },
          "description": "Generate a topical summary of a knowledge graph"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiAdviceForGraph"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create / Update a Graph From Text",
      "value": "createGraph",
      "action": "Create / update a graph from text",
      "routing": {
        "request": {
          "url": "/graphAndStatements",
          "method": "POST"
        }
      },
      "description": "Create a new knowledge graph or update an existing one from text and return it & stats"
    },
    {
      "name": "Get an Existing Graph",
      "value": "getGraph",
      "action": "Get an existing infranodus graph",
      "routing": {
        "request": {
          "url": "/graphAndStatements",
          "method": "POST"
        }
      },
      "description": "Get an existing graph of a user from InfraNodus"
    },
    {
      "name": "Generate Content Gaps and Topics",
      "value": "generateGraphStats",
      "action": "Generate content gaps and topics",
      "routing": {
        "request": {
          "url": "/graphAndStatements",
          "method": "POST"
        }
      },
      "description": "Generate content gaps and topics from a text or existing graph"
    },
    {
      "name": "Generate RAG Augmentation Prompt",
      "value": "generateGraphSummary",
      "action": "Generate RAG augmentation prompt",
      "routing": {
        "request": {
          "url": "/graphAndStatements",
          "method": "POST"
        }
      },
      "description": "Generate RAG augmentation prompt from a text or existing graph"
    },
    {
      "name": "Query an Expert (Existing Graph)",
      "value": "promptGraph",
      "action": "Get a response from knowledge base",
      "routing": {
        "request": {
          "url": "/graphAndAdvice",
          "method": "POST"
        }
      },
      "description": "Get an AI advice from an existing knowledge base or ontology"
    },
    {
      "name": "Retrieve Statements with GraphRAG",
      "value": "retrieveStatementsFromGraph",
      "action": "Retrieve statements from a graph",
      "routing": {
        "request": {
          "url": "/graphAndAdvice",
          "method": "POST"
        }
      },
      "description": "Retrieve relevant statements from an existing graph using GraphRAG"
    },
    {
      "name": "Generate Research Questions",
      "value": "questionGraph",
      "action": "Generate research questions",
      "routing": {
        "request": {
          "url": "/graphAndAdvice",
          "method": "POST"
        }
      },
      "description": "Generate research questions based on the content gaps in a graph"
    },
    {
      "name": "Generate a Topical Summary",
      "value": "summarizeGraph",
      "action": "Generate topical summary",
      "routing": {
        "request": {
          "url": "/graphAndAdvice",
          "method": "POST"
        }
      },
      "description": "Generate a topical summary of a knowledge graph"
    }
  ]

npm_readme:
  # n8n-nodes-infranodus

  This is an n8n community node from [InfraNodus](https://infranodus.com). It lets you use [InfraNodus GraphRAG API](https://infranodus.com/docs/graph-rag-knowledge-graph) in your n8n workflows.

  You can create and use knowledge graphs as experts in your LLM workflows (no OpenAI keys required). InfraNodus can provide information about the main topics and content gaps in any text, so you can use it in your marketing and research workflows.

  ![InfraNodus graph](https://infranodus.com/images/front/infranodus-overview.jpg)

  Video demo: [https://www.youtube.com/watch?v=kS0QTUvcH6E](https://www.youtube.com/watch?v=kS0QTUvcH6E)

  You can also use the knowledge graphs to augment and improve your RAG flows with graph-based AI advice about the structure of the knowledge and better quality retrieval without the need to set up complex vector store infrastructures.

  [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.

  ### For automatic installation

  1. Open the nodes panel at the top right of your n8n editor (+ button)
  2. Search for "InfraNodus"
  3. Click on the "Install" button

  ### For manual installation:

  You can install this node manually if you're running a local version of n8n.

  0. Install the local version of n8n

  If you don't have n8n installed yet, you can install it using

  - [n8n Docker installer](https://docs.n8n.io/hosting/installation/npm/) (in this case you'll need Docker installed)

  ```bash
  docker volume create n8n_data

  docker run -it --rm \
   --name n8n \
   -p 5678:5678 \
   -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
   -e N8N_RUNNERS_ENABLED=true \
   -v n8n_data:/home/node/.n8n \
   docker.n8n.io/n8nio/n8n
  ```

  - through the command line in your terminal using the [n8n NPX installer](https://docs.n8n.io/hosting/installation/npm/) — for temporarily launching n8n without installing it (in this case, you'll need node version 20 or 22 installed).

  ```bash
  npx n8n
  ```

  - through `npm` [n8n node package](https://docs.n8n.io/hosting/installation/npm/) manager (in this case you install it globally and can launch it from your termainal)

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

  In all cases, your configuration settings will be saved even if you quit at this folder, where you can also install the InfraNodus node:

  ```bash
  cd ~/.n8n
  ```

  1. Launch the local version of n8n

  - If it's installed globally:

  ```bash
  n8n start
  ```

  - If it's installed through Docker:

  Start the Docker n8n instsance:

  ```bash
  docker run -it --rm \
   --name n8n \
   -p 5678:5678 \
   -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
   -e N8N_RUNNERS_ENABLED=true \
   -v n8n_data:/home/node/.n8n \
   docker.n8n.io/n8nio/n8n
  ```

  Then access the Docker shell (terminal entry into your Docker n8n instance):

  ```bash
  docker exec -it n8n sh
  ```

  1. Install the node

  Change to the nodes folder:

  ```bash
  cd ~/.n8n/nodes
  ```

  If it doesn't exist, create it first:

  ```bash
  mkdir -p ~/.n8n/nodes
  ```

  2. Install the node into this folder:

  ```bash
  npm install n8n-nodes-infranodus
  ```

  3. Then restart n8n

  ## Local Node Development

  If you're using the node on your local machine, you can link your local InfraNodus n8n node to your local n8n instance.

  Then you can modify the resources and requests using the [InfraNodus API](https://infranodus.com/api). You can also add new custom tools.

  If you have InfraNodus running locally, you can replace the `baseUrl` with your local InfraNodus instance address (default is `https://infranodus.com/api/v1`).

  In order to start local development, you need to link your local InfraNodus n8n node to your local n8n instance, so every time you change the code in the InfraNodus n8n node, it updates in n8n as well.

  0. Create a copy of this repository on your local machine

  1. Go to this node's folder on your local machine and install dependencies

  ```bash
  npm install
  ```

  2. Make the necessary changes and build the node

  ```bash
  npm build
  ```

  3. Make sure you're in the InfraNodus node's folder and run:

  ```bash
  npm link
  ```

  3. Then go to the locally installed `n8n/nodes` folder, usually at

  ```bash
  cd ~/.n8n/nodes
  ```

  4. Link the local InfraNodus n8n node package to the n8n instance:

  ```bash
  npm link n8n-nodes-infranodus
  ```

  This will make your local n8n instance refer not to the generally available npm package but to the local infranodus n8n node instance you linked to.

  5. Then run the n8n instance locally using the

  ```bash
  n8n start
  ```

  ### To Update the Local Node in n8n

  To have the updates reflected in n8n, you need to:

  1. Run the build command in the node's folder

  ```bash
  npm run build
  ```

  2. Restart n8n:

  ```bash
  n8n start
  ```

  ## Operations

  The node supports the following operations:

  - Create a knowledge graph
  - Get a knowledge graph
  - Generate a question based on the content gaps in a knowledge graph
  - Prompt a knowledge graph expert

  ## Credentials

  The node requires an API token from InfraNodus. You can get it from [your InfraNodus account](https://infranodus.com/api-access).

  We use Bearer authentication in case you want to build your own node using InfraNodus.

  ## Compatibility

  The node is compatible with n8n v0.225.0 and above.

  ## Usage

  To learn more about using InfraNodus with n8n, see our tutorials and videos on the Nodus Labs support portal: [https://support.noduslabs.com/hc/en-us/search?utf8=%E2%9C%93&query=n8n](https://support.noduslabs.com/hc/en-us/search?utf8=%E2%9C%93&query=n8n)

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Nodus Labs support portal](https://support.noduslabs.com/hc/en-us/search?utf8=%E2%9C%93&query=n8n)
  - [InfraNodus API endpoints](https://support.noduslabs.com/hc/en-us/articles/13605983537692-InfraNodus-API-Access-Points)
  - [Video demo of how the InfraNodus n8n node works](http://youtube.com/watch?v=vkvRWto3TnQ)

  ## Version history

  v 0.1.8 (2025-12-09)

  - better naming convention for create / update graph

  v 0.1.7 (2025-12-03)

  - bug fixes
  - improve installation instructions

  v 0.1.5 (2025-12-03)

  - Add new GraphRAG / vector search retrieval endpoint
  - Add support for latest AI models
  - Add local development instructions to the README file

  v 0.1.4 (2025-10-25)

  - Fix bugs with duplicate tool definitions

  v 0.1.3 (2025-09-17)

  - Fix bugs and incorrect tool settings

  v 0.1.0 (2025-09-11)

  - Initial release

ai_documentation_summary:
  {"purpose":"This n8n community node integrates the InfraNodus GraphRAG API to build knowledge graphs, extract content gaps, and provide AI-driven advice for marketing and research workflows without requiring OpenAI keys.","capabilities":["Create a knowledge graph from text content","Retrieve an existing knowledge graph","Generate questions based on content gaps in a knowledge graph","Prompt a knowledge graph expert for AI advice","Augment RAG flows with graph-based structural insights"],"authentication":"API token (Bearer authentication)","commonUseCases":["Marketing content gap analysis","Research workflow enhancement","RAG flow augmentation with graph-based AI advice","Building knowledge graphs as LLM experts"],"limitations":["Requires an API token from InfraNodus account","Requires n8n v0.225.0 or above"],"relatedNodes":["InfraNodus API","RAG nodes","Knowledge graph nodes"]}


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-03-25 21:19:40
author_name: pja-zerobounce
author_github_url: https://github.com/zerobounce/n8n-nodes-zerobounce.git
npm_package_name: @zerobounce/n8n-nodes-zerobounce
npm_version: 1.1.2
community_fetched_at: 2026-03-25T21:19:40.765Z
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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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."
    }
  ]

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: @reka-ai/n8n-nodes-reka.rekaVision
package_name: @reka-ai/n8n-nodes-reka
display_name: Reka Vision
description: Get data from Reka AI APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: frank-reka
author_github_url: https://github.com/reka-ai/n8n-nodes-reka.git
npm_package_name: @reka-ai/n8n-nodes-reka
npm_version: 0.5.0
community_fetched_at: 2026-03-25T21:19:40.766Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "clip",
      "options": [
        {
          "name": "Clip",
          "value": "clip"
        },
        {
          "name": "Video Management",
          "value": "videoManagement"
        },
        {
          "name": "Image Management",
          "value": "imageManagement"
        },
        {
          "name": "Question & Answer",
          "value": "QA"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createClip",
      "options": [
        {
          "name": "CREATE CLIP",
          "value": "createClip",
          "action": "Create a clip",
          "routing": {
            "request": {
              "url": "/creator/reels",
              "method": "POST"
            }
          },
          "description": "Create a new clip job on Reka side"
        },
        {
          "name": "GET JOB STATUS",
          "value": "getJobtatus",
          "action": "Get clip status",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the status of a clip job on Reka side"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clip"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listVideos",
      "options": [
        {
          "name": "DELETE VIDEO",
          "value": "deleteVideo",
          "action": "Delete video",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          },
          "description": "Delete video from your Reka account library"
        },
        {
          "name": "GET VIDEO",
          "value": "getVideo",
          "action": "Get video",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a video details from your Reka account library"
        },
        {
          "name": "LIST VIDEOS",
          "value": "listVideos",
          "action": "List videos",
          "routing": {
            "request": {
              "url": "/videos",
              "method": "GET"
            }
          },
          "description": "List videos in your Reka account library"
        },
        {
          "name": "UPLOAD VIDEO FILE",
          "value": "uploadVideoFile",
          "action": "Upload video file",
          "routing": {
            "request": {
              "url": "/videos/upload",
              "method": "POST"
            }
          },
          "description": "Upload a video to your Reka account library using a file as source"
        },
        {
          "name": "UPLOAD VIDEO FROM URL",
          "value": "uploadVideoFromUrl",
          "action": "Upload video by URL",
          "routing": {
            "request": {
              "url": "/videos/upload",
              "method": "POST"
            }
          },
          "description": "Upload a video to your Reka account library using a URL as source"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoManagement"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listImages",
      "options": [
        {
          "name": "DELETE IMAGE",
          "value": "deleteImage",
          "action": "Delete image",
          "routing": {
            "request": {
              "method": "DELETE"
            }
          },
          "description": "Delete image from your Reka account library"
        },
        {
          "name": "GET IMAGE",
          "value": "getImage",
          "action": "Get image",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get an image details from your Reka account library"
        },
        {
          "name": "LIST IMAGES",
          "value": "listImages",
          "action": "List images",
          "routing": {
            "request": {
              "url": "/images",
              "method": "GET"
            }
          },
          "description": "List images in your Reka account library"
        },
        {
          "name": "UPLOAD IMAGE FILE",
          "value": "uploadImageFile",
          "action": "Upload image file",
          "routing": {
            "request": {
              "url": "/images/upload",
              "method": "POST"
            }
          },
          "description": "Upload an image to your Reka account library using a file as source"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "imageManagement"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "askVideoQuestion",
      "options": [
        {
          "name": "ASK QUESTION ABOUT IMAGE",
          "value": "askImageQuestion",
          "action": "Ask question about image",
          "routing": {
            "request": {
              "method": "POST",
              "baseURL": "https://api.reka.ai/v1/chat"
            }
          },
          "description": "Ask a questions about a specific image"
        },
        {
          "name": "ASK QUESTION ABOUT VIDEO",
          "value": "askVideoQuestion",
          "action": "Ask question about video",
          "routing": {
            "request": {
              "url": "/qa/chat",
              "method": "POST"
            }
          },
          "description": "Ask a questions about a specific video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "QA"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "CREATE CLIP",
      "value": "createClip",
      "action": "Create a clip",
      "routing": {
        "request": {
          "url": "/creator/reels",
          "method": "POST"
        }
      },
      "description": "Create a new clip job on Reka side"
    },
    {
      "name": "GET JOB STATUS",
      "value": "getJobtatus",
      "action": "Get clip status",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the status of a clip job on Reka side"
    },
    {
      "name": "DELETE VIDEO",
      "value": "deleteVideo",
      "action": "Delete video",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "description": "Delete video from your Reka account library"
    },
    {
      "name": "GET VIDEO",
      "value": "getVideo",
      "action": "Get video",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get a video details from your Reka account library"
    },
    {
      "name": "LIST VIDEOS",
      "value": "listVideos",
      "action": "List videos",
      "routing": {
        "request": {
          "url": "/videos",
          "method": "GET"
        }
      },
      "description": "List videos in your Reka account library"
    },
    {
      "name": "UPLOAD VIDEO FILE",
      "value": "uploadVideoFile",
      "action": "Upload video file",
      "routing": {
        "request": {
          "url": "/videos/upload",
          "method": "POST"
        }
      },
      "description": "Upload a video to your Reka account library using a file as source"
    },
    {
      "name": "UPLOAD VIDEO FROM URL",
      "value": "uploadVideoFromUrl",
      "action": "Upload video by URL",
      "routing": {
        "request": {
          "url": "/videos/upload",
          "method": "POST"
        }
      },
      "description": "Upload a video to your Reka account library using a URL as source"
    },
    {
      "name": "DELETE IMAGE",
      "value": "deleteImage",
      "action": "Delete image",
      "routing": {
        "request": {
          "method": "DELETE"
        }
      },
      "description": "Delete image from your Reka account library"
    },
    {
      "name": "GET IMAGE",
      "value": "getImage",
      "action": "Get image",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get an image details from your Reka account library"
    },
    {
      "name": "LIST IMAGES",
      "value": "listImages",
      "action": "List images",
      "routing": {
        "request": {
          "url": "/images",
          "method": "GET"
        }
      },
      "description": "List images in your Reka account library"
    },
    {
      "name": "UPLOAD IMAGE FILE",
      "value": "uploadImageFile",
      "action": "Upload image file",
      "routing": {
        "request": {
          "url": "/images/upload",
          "method": "POST"
        }
      },
      "description": "Upload an image to your Reka account library using a file as source"
    },
    {
      "name": "ASK QUESTION ABOUT IMAGE",
      "value": "askImageQuestion",
      "action": "Ask question about image",
      "routing": {
        "request": {
          "method": "POST",
          "baseURL": "https://api.reka.ai/v1/chat"
        }
      },
      "description": "Ask a questions about a specific image"
    },
    {
      "name": "ASK QUESTION ABOUT VIDEO",
      "value": "askVideoQuestion",
      "action": "Ask question about video",
      "routing": {
        "request": {
          "url": "/qa/chat",
          "method": "POST"
        }
      },
      "description": "Ask a questions about a specific video"
    }
  ]

npm_readme:
  # n8n-nodes-reka

  [![version](https://img.shields.io/npm/v/n8n-nodes-text-manipulation.svg)](https://www.npmjs.org/package/n8n-nodes-text-manipulation)

  Official Reka community node that provides various capability with AI Vision. (soon Research, Speech, and Text)

  ## Operations

  ### Video Clipping

  - Automatically clip a video from a URL

  ### Vision

  - Question and Answer (Q&A) from video

  - Question and Answer (Q&A) from image

  ### Speech

  - soon

  ### Research

  - soon

  ## Credentials

  Theses nodes requires an API Key from Reka, You can generate one by going to your [Dashboard](https://link.reka.ai/free).

  ## Installation

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

  ## Usage

  We are working on a more detailed documentation, meanwhile have a look to this [blog post](https://www.frankysnotes.com/2025/12/building-ai-powered-youtube-clipper.html) or [video](https://www.youtube.com/watch?v=6YV6K94m_FA) to learn How to Automate Clipping Using Reka's community node.

  ### Clip

  From a existing video (ex: YouTube) generate a vertical or horizontal clip using AI. Specific your instructions in a prompt (ex: Create an engaging short video highlighting the best moments) and voila! Optionally you can add burned captions, specify the minimum and maximum duration of your clip. Once ready you will get your video clip with a suggestion of title, description and tags.

  ### Q&A

  Ask any question about a image or a video and get the response quickly. 

  Example: 

  - Describe this image
  - Summarize this video
  - What's the color of the car in this photo


  ## Resources

  - **[n8n Node Documentation](https://docs.n8n.io/integrations/creating-nodes/)** - Complete guide to building nodes
  - **[n8n Community Forum](https://community.n8n.io/)** - Get help and share your nodes
  - **[Reka Community Discord](https://link.reka.ai/discord)** - Get help and share your workflows
  - **[Reka API Documentaion](https://docs.reka.ai)** - Get help and share your workflows

  ## 🤝 Contributions

  If you find a bug or would like to add a feature, please read our [Code of Conduct](CODE_OF_CONDUCT.md) and the [Contributing Guide](CONTRIBUTING.md).

  Feel free to open an issue or submit a feedback PR and improvements are welcome.

  ## License

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

ai_documentation_summary:
  {"purpose":"An n8n community node that enables AI-powered video clipping and visual question answering using Reka AI APIs.","capabilities":["Automatically clip videos from URLs","Generate vertical or horizontal video clips from existing videos","Add burned captions to video clips","Specify minimum and maximum clip duration","Generate suggested titles, descriptions, and tags for clips","Perform Q&A on images","Perform Q&A on videos","Summarize images and videos"],"authentication":"API Key required","commonUseCases":["Automating YouTube video clipping for social media","Creating engaging short-form video content from long videos","Analyzing and extracting information from images","Summarizing video content for quick insights"],"limitations":["Speech and Research capabilities are not yet available (marked as 'soon')","Detailed usage documentation is still in progress"],"relatedNodes":["n8n HTTP Request","n8n Code Node","n8n Video Processing nodes"]}


node_type: n8n-nodes-omnara.omnara
package_name: n8n-nodes-omnara
display_name: Omnara
description: Send messages to users via Omnara - a web and mobile platform for human-AI communication
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: ksarangmath
author_github_url: https://github.com/omnara-ai/omnara.git
npm_package_name: n8n-nodes-omnara
npm_version: 0.1.7
community_fetched_at: 2026-03-25T21:19:40.767Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message",
          "description": "Send messages to Omnara agents"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Manage agent sessions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send message",
          "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue"
        },
        {
          "name": "Send and Wait",
          "value": "sendAndWait",
          "action": "Send message and wait for response",
          "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "end",
      "options": [
        {
          "name": "End",
          "value": "end",
          "action": "End agent session",
          "description": "End an agent session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send message",
      "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue"
    },
    {
      "name": "Send and Wait",
      "value": "sendAndWait",
      "action": "Send message and wait for response",
      "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task"
    },
    {
      "name": "End",
      "value": "end",
      "action": "End agent session",
      "description": "End an agent session"
    }
  ]

npm_readme:
  # n8n-nodes-omnara

  The best human-in-the-loop node for n8n, built for seamless human-agent interaction. Perfect for approval workflows and real-time agent conversations.

  [Omnara](https://omnara.com) lets you monitor and guide AI agents without the noise. View your agent's full thought process through our web and mobile apps with smart notifications - only get alerted when your input is needed. Need urgent responses? Enable email and SMS notifications with zero setup. Stay in control while automation runs.

  ## Installation

  ### Community Node (Recommended)

  ```bash
  npm install n8n-nodes-omnara
  ```

  Or in n8n, go to **Settings** > **Community Nodes** and search for `n8n-nodes-omnara`.

  ### Manual Installation

  1. Clone or download this repository
  2. In the repository folder, run:
     ```bash
     npm install
     npm run build
     ```
  3. Copy the `dist` folder to your n8n custom nodes folder
  4. Restart n8n

  ### Development Installation

  For development and testing:

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # For development with auto-rebuild
  npm run dev

  # Link to n8n for testing
  npm link
  # In your n8n installation:
  npm link n8n-nodes-omnara
  ```

  ## Getting Started

  ### 1. Get Your API Key

  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click on your email in the bottom left corner
  3. Click "API Keys"
  4. Create a new API key and copy it

  ### 2. Add Omnara Credentials in n8n

  1. In n8n, go to Credentials → Add Credential → Omnara API
  2. Paste your API key
  3. Leave the API URL as default (unless you have a custom deployment)
  4. Save the credentials

  ### 3. Important: Agent Instance ID and Agent Type

  **Every Omnara node in your workflow needs:**
  - **Agent Instance ID**: A unique UUID for each workflow run (same across all nodes in one run)
  - **Agent Type**: The name of your agent on the Omnara dashboard (same across all nodes)

  ⚠️ **Critical**: Use the SAME agent instance ID and agent type across ALL Omnara nodes in a single workflow run!

  ## Workflow Setup

  ### Option A: Trigger with Webhook (Recommended)

  This lets you start workflows from the Omnara dashboard.

  **Step 1: Set up n8n Webhook**
  1. Add a **Webhook** node as your trigger
  2. Set it to **POST** method
  3. Copy the webhook URL (looks like: `https://your-n8n.com/webhook/xxx`)

  **Step 2: Configure Omnara Dashboard**
  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click the **+ New Instance** button (top left)
  3. Paste your webhook URL
  4. Create your agent type
  5. Send a message to trigger your workflow

  **Step 3: Use Webhook Data in Omnara Nodes**
  The webhook provides these values - use them in ALL your Omnara nodes:
  - **Agent Instance ID**: `{{ $('Webhook').item.json.body.agent_instance_id }}`
  - **Agent Type**: `{{ $('Webhook').item.json.body.agent_type }}`

  The webhook also provides:
  - **Prompt**: `{{ $('Webhook').item.json.body.prompt }}` - This is the message you entered in Omnara dashboard. Use it as input for your workflow if needed.

  ### Option B: Trigger Without Webhook

  For workflows triggered by other events (cron, manual, other apps).

  **Requirements:**
  1. Generate a unique UUID for Agent Instance ID (use Expression: `{{ $uuid() }}`)
  2. Choose an agent type name (e.g., "customer_support", "code_reviewer")
  3. Store these in Set node variables
  4. Use the SAME values across all Omnara nodes in the workflow

  **Example Setup:**
  ```
  Trigger → Set Node (store UUID & agent type) → Your Workflow → Omnara Nodes
  ```

  In Set node:
  - `agent_instance_id`: `{{ $uuid() }}`
  - `agent_type`: "your_agent_name"

  Then reference in all Omnara nodes:
  - **Agent Instance ID**: `{{ $('Set').item.json.agent_instance_id }}`
  - **Agent Type**: `{{ $('Set').item.json.agent_type }}`

  ## Operations

  ### Message Resource

  #### Send Message (Non-blocking)
  Send status updates and progress reports to users without waiting for a response. Perfect for AI agents to share their thought process, progress updates, or informational messages while continuing to work.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance (creates new if doesn't exist)
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Status update or informational message (workflow continues immediately)
  - **Additional Options**:
    - Send Email/SMS/Push: Notification preferences

  #### Send and Wait (Blocking)
  Send a question or request and WAIT for the user's response. Essential for AI agents that need human input, approvals, or answers to continue their task. The workflow pauses until the user responds via the Omnara web/mobile app.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Question or request that requires user response (workflow pauses until answered)
  - **Wait Options**:
    - Timeout: How long to wait (default 24 hours)
    - **Sync Mode (For AI Agents)**: Enable synchronous polling mode for AI Agent compatibility
      - Sync Timeout: Max wait time in sync mode (default 2 hours, max 48 hours)
      - Poll Interval: How often to check for responses (default 5 seconds)
  - **Additional Options**: Same as Send Message

  **How it works:**

  *Normal Mode (for regular workflows):*
  1. Sends message to Omnara with `requires_user_input: true`
  2. Generates a webhook URL and stores it with the message
  3. Pauses workflow execution
  4. When user responds in Omnara dashboard, workflow resumes with the response

  *Sync Mode (for AI Agent tools):*
  1. Sends message to Omnara
  2. Polls for responses every 5 seconds
  3. Returns immediately when response received
  4. Works within AI Agent execution context (avoids async/await issues)

  ### Session Resource

  #### End Session
  End an agent session and mark it as completed.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance session to end

  ## Usage Examples

  ### Basic Message Send
  ```javascript
  // Send a status update to your agent
  {
    "resource": "message",
    "operation": "send",
    "agentInstanceId": "agent-123",
    "content": "Build completed successfully"
  }
  ```

  ### Approval Workflow (Regular)
  ```javascript
  // Ask for approval and wait for response
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-456",
    "agentType": "claude_code",
    "message": "Deploy to production? Please approve or decline.",
    "options": {
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### AI Agent Tool Usage (Sync Mode)
  ```javascript
  // Use sync mode when calling from AI Agent tools
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-789",
    "agentType": "claude_code",
    "message": "What changes should I make to the database schema?",
    "options": {
      "syncMode": true,
      "syncTimeout": 600,  // Wait up to 10 minutes
      "pollInterval": 5,   // Check every 5 seconds
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### End Session
  ```javascript
  // Mark agent session as completed
  {
    "resource": "session",
    "operation": "end",
    "agentInstanceId": "agent-789"
  }
  ```

  ## Agent Tool Support

  This node is configured with `usableAsTool: true`, making it available as a tool for AI agents in n8n. 

  **Important**: When using Send and Wait as an AI Agent tool, you MUST enable **Sync Mode** in the options. This solves the async/await limitations of AI Agents in n8n.

  AI Agents can:
  - Send status updates
  - Ask for human input and wait for responses (using Sync Mode)
  - Manage agent sessions

  ### Why Sync Mode?
  Regular Send and Wait uses `putExecutionToWait()` which doesn't work properly in AI Agent context due to n8n's architecture. Sync Mode polls for responses synchronously, allowing AI Agents to wait for human responses without timing out or returning prematurely.

  ## Webhook Integration

  The Send and Wait operation uses n8n's built-in webhook functionality:
  - Webhook URLs are automatically generated by n8n
  - Omnara stores the webhook URL and triggers it when users respond
  - Workflows resume with the user's response data
  - Supports timeout configuration (max 7 days)

  ## Error Handling

  The node includes comprehensive error handling:
  - Authentication failures
  - Invalid agent instance IDs
  - Timeout handling for wait operations
  - Network errors and API issues

  All operations support the "Continue On Fail" option in n8n.

  ## Development

  ### Building
  ```bash
  npm run build
  ```

  ### Linting
  ```bash
  npm run lint
  npm run lint:fix
  ```

  ### Code Formatting
  ```bash
  npm run format
  ```

  ## Resources

  - [Omnara GitHub](https://github.com/omnara-ai/omnara)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  MIT

  ## Support & Feedback

  Our mission is to make Omnara the best platform for human-in-the-loop workflows and human-AI collaboration. We're actively improving and would love your input!

  - **Issues & feature requests**: [GitHub Issues](https://github.com/omnara-ai/omnara/issues) or contact@omnara.com
  - **Questions & support**: contact@omnara.com

  Share your ideas on how we can make human-AI interaction better!

ai_documentation_summary:
  {"purpose":"This n8n node enables human-in-the-loop workflows by allowing AI agents to send messages to users via the Omnara platform for approvals, feedback, or status updates.","capabilities":["Send non-blocking status updates and progress reports","Send blocking messages requiring user response with wait functionality","Support for email, SMS, and push notifications","Synchronous polling mode for AI Agent compatibility","Session management (start and end)","Webhook-triggered workflows from Omnara dashboard"],"authentication":"API Key required (configured via n8n Credentials)","commonUseCases":["Human approval workflows","AI agent feedback collection","Real-time human-agent interaction","Progress reporting to users","Customer support agent monitoring"],"limitations":["Requires consistent Agent Instance ID and Agent Type across all nodes in a single workflow run","Blocking mode pauses workflow execution until user responds","Requires manual UUID generation for non-webhook triggered workflows","Sync mode has configurable timeout limits (max 48 hours)"],"relatedNodes":["Webhook","Set","Credentials","Expression"]}


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-03-25 21:19:40
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-03-25T21:19:40.768Z
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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    }
  ]

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: @asyncai/n8n-nodes-asyncai.asyncAi
package_name: @asyncai/n8n-nodes-asyncai
display_name: Async
description: Interact with Async API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: ashotbagh
author_github_url: https://github.com/AsyncOrg/asyncai-n8n.git
npm_package_name: @asyncai/n8n-nodes-asyncai
npm_version: 0.1.4
community_fetched_at: 2026-03-25T21:19:40.768Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "voice",
      "options": [
        {
          "name": "Voice",
          "value": "voice"
        },
        {
          "name": "Speech",
          "value": "speech"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a voice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "enabled": "={{$parameter[\"simplify\"]}}",
                  "properties": {
                    "name": "={{$responseItem.name}}",
                    "labels": "={{$responseItem.labels}}",
                    "category": "={{$responseItem.category}}",
                    "voice_id": "={{$responseItem.voice_id}}",
                    "description": "={{$responseItem.description}}",
                    "preview_url": "={{$responseItem.preview_url}}"
                  }
                }
              ]
            },
            "request": {
              "url": "={{\"/voices/\"  + $parameter[\"voice\"] }}",
              "method": "GET"
            }
          },
          "description": "Returns metadata about a specific voice"
        },
        {
          "name": "Create Clone",
          "value": "createClone",
          "action": "Create a voice clone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/voices/clone",
              "method": "POST",
              "headers": {
                "Content-Type": "multipart/form-data"
              },
              "returnFullResponse": true
            }
          },
          "description": "Create a voice clone from audio files"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a voice",
          "routing": {
            "request": {
              "url": "={{\"/voices/\" + $parameter[\"voice\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a specific voice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "textToSpeech",
      "options": [
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "action": "Convert text to speech",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "={{\"/text_to_speech\"}}",
              "method": "POST",
              "headers": {
                "content-type": "application/json"
              },
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Converts text into speech and returns audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a voice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "enabled": "={{$parameter[\"simplify\"]}}",
              "properties": {
                "name": "={{$responseItem.name}}",
                "labels": "={{$responseItem.labels}}",
                "category": "={{$responseItem.category}}",
                "voice_id": "={{$responseItem.voice_id}}",
                "description": "={{$responseItem.description}}",
                "preview_url": "={{$responseItem.preview_url}}"
              }
            }
          ]
        },
        "request": {
          "url": "={{\"/voices/\"  + $parameter[\"voice\"] }}",
          "method": "GET"
        }
      },
      "description": "Returns metadata about a specific voice"
    },
    {
      "name": "Create Clone",
      "value": "createClone",
      "action": "Create a voice clone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/voices/clone",
          "method": "POST",
          "headers": {
            "Content-Type": "multipart/form-data"
          },
          "returnFullResponse": true
        }
      },
      "description": "Create a voice clone from audio files"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a voice",
      "routing": {
        "request": {
          "url": "={{\"/voices/\" + $parameter[\"voice\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a specific voice"
    },
    {
      "name": "Text to Speech",
      "value": "textToSpeech",
      "action": "Convert text to speech",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "={{\"/text_to_speech\"}}",
          "method": "POST",
          "headers": {
            "content-type": "application/json"
          },
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Converts text into speech and returns audio"
    }
  ]

npm_readme:
  # @asyncai/n8n-nodes-asyncai

  This is the official AsyncAI n8n community node.

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

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

  ## Installation

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

  ## Operations

  ### Speech
  - Text to Speech

  ### Voice
  - Get
  - Create Clone
  - Delete

  ## Credentials

  This node requires an API Key from AsyncAI, You can generate one by going to your [Account](https://app.async.ai/auth).


  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [AsyncAI Documentation](https://docs.async.ai)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the AsyncAI API for speech generation and voice cloning services.","capabilities":["Text to Speech conversion","Retrieve voice clones","Create new voice clones","Delete existing voice clones"],"authentication":"API Key required (generated from AsyncAI account)","commonUseCases":["Automated voiceovers for content creation","Voice cloning for personalized audio responses","Batch text-to-speech processing in workflows"],"limitations":[],"relatedNodes":["HTTP Request","Code"]}


node_type: @coginiti/n8n-nodes-coginiti.coginiti
package_name: @coginiti/n8n-nodes-coginiti
display_name: Coginiti
description: Interact with Coginiti API (Catalog, Execute, Identity Management)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: dimabreeze
author_github_url: https://github.com/coginiti-dev/n8n-nodes-coginiti.git
npm_package_name: @coginiti/n8n-nodes-coginiti
npm_version: 1.2.0
community_fetched_at: 2026-03-25T21:19:40.769Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Catalog",
          "value": "catalog",
          "description": "Browse and manage catalog items"
        },
        {
          "name": "Execute",
          "value": "execute",
          "description": "Execute scripts, blocks, and tests"
        },
        {
          "name": "Group",
          "value": "group",
          "description": "Manage groups"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Manage users"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAssets",
      "options": [
        {
          "name": "Create Asset",
          "value": "createAsset",
          "action": "Create asset",
          "description": "Create a new asset"
        },
        {
          "name": "Create Folder",
          "value": "createFolder",
          "action": "Create folder",
          "description": "Create a new folder"
        },
        {
          "name": "Delete Asset",
          "value": "deleteAsset",
          "action": "Delete asset",
          "description": "Delete an existing asset"
        },
        {
          "name": "Delete Folder",
          "value": "deleteFolder",
          "action": "Delete folder",
          "description": "Delete an existing folder"
        },
        {
          "name": "Get Item by Path",
          "value": "getAsset",
          "action": "Get item by path",
          "description": "Get a single item by path"
        },
        {
          "name": "List Items",
          "value": "listAssets",
          "action": "List catalog items",
          "description": "List catalog items by given path"
        },
        {
          "name": "Update Asset",
          "value": "updateAsset",
          "action": "Update asset",
          "description": "Update an existing asset"
        },
        {
          "name": "Update Folder",
          "value": "updateFolder",
          "action": "Update folder",
          "description": "Update an existing folder"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "catalog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "executeScript",
      "options": [
        {
          "name": "Execute Block",
          "value": "executeBlock",
          "action": "Execute block",
          "description": "Execute a specific CoginitiScript block from a catalog asset"
        },
        {
          "name": "Execute Script",
          "value": "executeScript",
          "action": "Execute script",
          "description": "Execute a script from the catalog and get a single result set. If the script produces multiple result sets, only the first one is returned."
        },
        {
          "name": "Execute SQL",
          "value": "executeSQL",
          "action": "Execute SQL",
          "description": "Execute a SQL query directly against a connection and get a single result set. This endpoint lets you run queries without first saving them as catalog assets."
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "execute"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create user",
          "description": "Create a new user"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete user",
          "description": "Delete a user"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get user",
          "description": "Get a user by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List users",
          "description": "List all users"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update user",
          "description": "Update a user"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create group",
          "description": "Create a new group"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete group",
          "description": "Delete a group"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get group",
          "description": "Get a group by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List groups",
          "description": "List all groups"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update group",
          "description": "Update a group"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Asset",
      "value": "createAsset",
      "action": "Create asset",
      "description": "Create a new asset"
    },
    {
      "name": "Create Folder",
      "value": "createFolder",
      "action": "Create folder",
      "description": "Create a new folder"
    },
    {
      "name": "Delete Asset",
      "value": "deleteAsset",
      "action": "Delete asset",
      "description": "Delete an existing asset"
    },
    {
      "name": "Delete Folder",
      "value": "deleteFolder",
      "action": "Delete folder",
      "description": "Delete an existing folder"
    },
    {
      "name": "Get Item by Path",
      "value": "getAsset",
      "action": "Get item by path",
      "description": "Get a single item by path"
    },
    {
      "name": "List Items",
      "value": "listAssets",
      "action": "List catalog items",
      "description": "List catalog items by given path"
    },
    {
      "name": "Update Asset",
      "value": "updateAsset",
      "action": "Update asset",
      "description": "Update an existing asset"
    },
    {
      "name": "Update Folder",
      "value": "updateFolder",
      "action": "Update folder",
      "description": "Update an existing folder"
    },
    {
      "name": "Execute Block",
      "value": "executeBlock",
      "action": "Execute block",
      "description": "Execute a specific CoginitiScript block from a catalog asset"
    },
    {
      "name": "Execute Script",
      "value": "executeScript",
      "action": "Execute script",
      "description": "Execute a script from the catalog and get a single result set. If the script produces multiple result sets, only the first one is returned."
    },
    {
      "name": "Execute SQL",
      "value": "executeSQL",
      "action": "Execute SQL",
      "description": "Execute a SQL query directly against a connection and get a single result set. This endpoint lets you run queries without first saving them as catalog assets."
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create user",
      "description": "Create a new user"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete user",
      "description": "Delete a user"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get user",
      "description": "Get a user by ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List users",
      "description": "List all users"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update user",
      "description": "Update a user"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create group",
      "description": "Create a new group"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete group",
      "description": "Delete a group"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get group",
      "description": "Get a group by ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List groups",
      "description": "List all groups"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update group",
      "description": "Update a group"
    }
  ]

npm_readme:
  # @coginiti/n8n-nodes-coginiti

  This is an n8n community node. It lets you use [Coginiti API](https://support.coginiti.co/hc/categories/18554190258711-API) 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)
  [Compatibility](#compatibility)
  [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.

  ## Operations

  Supports all of the Coginiti API operations as of Nov-11, 2025

  ## Credentials

  Coginiti API Token is required to run Coginiti automations, read more about [managing personal access tokens](https://support.coginiti.co/hc/articles/18723746168087-Managing-Personal-Access-Tokens).

  ## Compatibility

  Coginiti node was tested against n8n 1.116.2

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Coginiti API documentation](https://support.coginiti.co/hc/categories/18554190258711-API)

  ## Version history

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Coginiti API to manage catalogs, execute tasks, and handle identity management within automated workflows.","capabilities":["Catalog operations","Task execution","Identity management","API integration with Coginiti"],"authentication":"API Token required (Personal Access Token)","commonUseCases":["Automating catalog management tasks","Executing Coginiti services via workflow automation","Handling user identity operations in Coginiti"],"limitations":["Limited to operations supported as of November 11, 2025","Tested only against n8n version 1.116.2"],"relatedNodes":["n8n community nodes","API nodes"]}


node_type: n8n-nodes-qdrant.qdrant
package_name: n8n-nodes-qdrant
display_name: Qdrant
description: Official n8n node to interface with Qdrant - https://qdrant.tech
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: qdrant-tech
author_github_url: https://github.com/qdrant/
npm_package_name: n8n-nodes-qdrant
npm_version: 0.2.1
community_fetched_at: 2026-03-25T21:19:40.770Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "collection",
      "options": [
        {
          "name": "Collection",
          "value": "collection"
        },
        {
          "name": "Payload",
          "value": "payload"
        },
        {
          "name": "Point",
          "value": "point"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Vector",
          "value": "vector"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "List Collections",
          "value": "listCollections",
          "action": "List Collections",
          "routing": {
            "request": {
              "url": "/collections",
              "method": "GET"
            }
          },
          "description": "List all collections in the Qdrant instance"
        },
        {
          "name": "Create Collection",
          "value": "createCollection",
          "action": "Create Collection",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}",
              "body": {
                "vectors": "={{JSON.parse($parameter.vectors)}}",
                "init_from": "={{JSON.parse($parameter.initFrom)}}",
                "wal_config": "={{JSON.parse($parameter.walConfig)}}",
                "hnsw_config": "={{JSON.parse($parameter.hnswConfig)}}",
                "shard_number": "={{$parameter.shardNumber}}",
                "sparse_vectors": "={{JSON.parse($parameter.sparseVectors)}}",
                "on_disk_payload": "={{$parameter.onDiskPayload}}",
                "sharding_method": "={{$parameter.shardingMethod}}",
                "optimizers_config": "={{JSON.parse($parameter.optimizersConfig)}}",
                "replication_factor": "={{$parameter.replicationFactor}}",
                "strict_mode_config": "={{JSON.parse($parameter.strictModeConfig)}}",
                "quantization_config": "={{JSON.parse($parameter.quantizationConfig)}}",
                "write_consistency_factor": "={{$parameter.writeConsistencyFactor}}"
              },
              "method": "PUT"
            }
          },
          "description": "Create a new collection in the Qdrant instance"
        },
        {
          "name": "Update Collection",
          "value": "updateCollection",
          "action": "Update Collection",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}",
              "body": {
                "params": "={{JSON.parse($parameter.params)}}",
                "vectors": "={{JSON.parse($parameter.vectors)}}",
                "hnsw_config": "={{JSON.parse($parameter.hnswConfig)}}",
                "sparse_vectors": "={{JSON.parse($parameter.sparseVectors)}}",
                "optimizers_config": "={{JSON.parse($parameter.optimizersConfig)}}",
                "strict_mode_config": "={{JSON.parse($parameter.strictModeConfig)}}",
                "quantization_config": "={{JSON.parse($parameter.quantizationConfig)}}"
              },
              "method": "PATCH"
            }
          },
          "description": "Update parameters of an existing collection in the Qdrant instance"
        },
        {
          "name": "Get Collection",
          "value": "getCollection",
          "action": "Get Collection",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific collection"
        },
        {
          "name": "Check If Collection Exists",
          "value": "collectionExists",
          "action": "Check If Collection Exists",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}/exists",
              "method": "GET"
            }
          },
          "description": "Check if a collection exists in the Qdrant instance"
        },
        {
          "name": "Delete Collection",
          "value": "deleteCollection",
          "action": "Delete Collection",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}",
              "method": "DELETE"
            }
          },
          "description": "Delete the specified collection"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "collection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Upsert Points",
          "value": "upsertPoints",
          "action": "Upsert Points",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points",
              "body": {
                "points": "={{JSON.parse($parameter.points)}}"
              },
              "method": "PUT"
            }
          },
          "description": "Insert or update points in a collection"
        },
        {
          "name": "Retrieve Point",
          "value": "retrievePoint",
          "action": "Retrieve Point",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionName}}/points/{{isNaN(Number($parameter.id)) ?  $parameter.id : Number($parameter.id)}}",
              "method": "GET"
            }
          },
          "description": "Retrieves all details from a single point"
        },
        {
          "name": "Retrieve Points",
          "value": "retrievePoints",
          "action": "Retrieve Points",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points",
              "body": {
                "ids": "={{JSON.parse($parameter.points)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}",
                "with_vector": "={{$parameter.withVector}}",
                "with_payload": "={{$parameter.withPayload}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve all details from multiple points"
        },
        {
          "name": "Delete Points",
          "value": "deletePoints",
          "action": "Delete Points",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/delete",
              "body": {
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Delete specified points from the collection"
        },
        {
          "name": "Count Points",
          "value": "countPoints",
          "action": "Count Points",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/count",
              "body": {
                "exact": "={{$parameter.exact}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Counts the number of points that match a specified filtering condition"
        },
        {
          "name": "Scroll Points",
          "value": "scrollPoints",
          "action": "Scroll Points",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/scroll",
              "body": {
                "limit": "={{$parameter.limit}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "offset": "={{isNaN(Number($parameter.offset)) ?  $parameter.offset : Number($parameter.offset)}}",
                "order_by": "={{JSON.parse($parameter.orderBy)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}",
                "with_vector": "={{$parameter.withVector}}",
                "with_payload": "={{$parameter.withPayload}}"
              },
              "method": "POST"
            }
          },
          "description": "Returns all points in a page-by-page manner"
        },
        {
          "name": "Batch Update Points",
          "value": "batchUpdatePoints",
          "action": "Batch Update Points",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/batch",
              "body": {
                "operations": "={{JSON.parse($parameter.operations)}}"
              },
              "method": "POST"
            }
          },
          "description": "Batch update points, including their respective vectors and payloads"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "point"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Update Vectors",
          "value": "updateVectors",
          "action": "Update Vectors",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/vectors",
              "body": {
                "points": "={{JSON.parse($parameter.points)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "PUT"
            }
          },
          "description": "Update specified vectors on points"
        },
        {
          "name": "Delete Vectors",
          "value": "deleteVectors",
          "action": "Delete Vectors",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/vectors/delete",
              "body": {
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "vector": "={{JSON.parse($parameter.vector)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Delete specified vectors from points"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vector"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Set Payload",
          "value": "setPayload",
          "action": "Set Payload",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/payload",
              "body": {
                "key": "={{$parameter.key ? $parameter.key : null}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "payload": "={{JSON.parse($parameter.payload)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Sets payload values for specified points"
        },
        {
          "name": "Overwrite Payload",
          "value": "overwritePayload",
          "action": "Overwrite Payload",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/payload",
              "body": {
                "key": "={{$parameter.key ? $parameter.key : null}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "payload": "={{JSON.parse($parameter.payload)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "PUT"
            }
          },
          "description": "Replaces the entire payload of specified points with a new payload"
        },
        {
          "name": "Delete Payload",
          "value": "deletePayload",
          "action": "Delete Payload",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/payload/delete",
              "body": {
                "keys": "={{JSON.parse($parameter.keys)}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Deletes specified payload keys from points"
        },
        {
          "name": "Clear Payload",
          "value": "clearPayload",
          "action": "Clear Payload",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/payload/clear",
              "body": {
                "filter": "={{JSON.parse($parameter.filter)}}",
                "points": "={{JSON.parse($parameter.points)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Removes the entire payload for specified points"
        },
        {
          "name": "Payload Facets",
          "value": "payloadFacets",
          "action": "Get Payload Facets",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/facet",
              "body": {
                "key": "={{$parameter.key}}",
                "exact": "={{$parameter.exact}}",
                "limit": "={{$parameter.limit}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieves facets for the specified payload field"
        },
        {
          "name": "Create Payload Index",
          "value": "createPayloadIndex",
          "action": "Create Payload Index",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/index",
              "body": {
                "field_name": "={{$parameter.fieldName}}",
                "field_schema": "={{JSON.parse($parameter.fieldSchema)}}"
              },
              "method": "PUT"
            }
          },
          "description": "Creates a payload index for a field in the specified collection"
        },
        {
          "name": "Delete Payload Index",
          "value": "deletePayloadIndex",
          "action": "Delete Payload Index",
          "routing": {
            "request": {
              "qs": {
                "wait": "={{$parameter.wait}}",
                "ordering": "={{$parameter.ordering}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/index/{{$parameter.fieldName}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a payload index for a field in the specified collection"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payload"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Query Points",
          "value": "queryPoints",
          "action": "Query Points",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/query",
              "body": {
                "limit": "={{$parameter.limit}}",
                "query": "={{JSON.parse($parameter.query)}}",
                "using": "={{$parameter.using}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "offset": "={{$parameter.offset}}",
                "params": "={{JSON.parse($parameter.params)}}",
                "prefetch": "={{JSON.parse($parameter.prefetch)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}",
                "lookup_from": "={{JSON.parse($parameter.lookupFrom)}}",
                "with_vector": "={{$parameter.withVector}}",
                "with_payload": "={{$parameter.withPayload}}",
                "score_threshold": "={{$parameter.scoreThreshold}}"
              },
              "method": "POST"
            }
          },
          "description": "Query points in a collection using various search methods"
        },
        {
          "name": "Query Batch Points",
          "value": "queryBatchPoints",
          "action": "Query Batch Points",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/query/batch",
              "body": {
                "searches": "={{JSON.parse($parameter.searches)}}"
              },
              "method": "POST"
            }
          },
          "description": "Query multiple points in batch using various search methods"
        },
        {
          "name": "Query Points Groups",
          "value": "queryPointsGroups",
          "action": "Query Points Groups",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/query/groups",
              "body": {
                "limit": "={{$parameter.limit}}",
                "query": "={{JSON.parse($parameter.query)}}",
                "using": "={{$parameter.using}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "params": "={{JSON.parse($parameter.params)}}",
                "group_by": "={{$parameter.groupBy}}",
                "prefetch": "={{JSON.parse($parameter.prefetch)}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}",
                "group_size": "={{$parameter.groupSize}}",
                "lookup_from": "={{JSON.parse($parameter.lookupFrom)}}",
                "with_lookup": "={{JSON.parse($parameter.withLookup)}}",
                "with_vector": "={{$parameter.withVector}}",
                "with_payload": "={{$parameter.withPayload}}",
                "score_threshold": "={{$parameter.scoreThreshold}}"
              },
              "method": "POST"
            }
          },
          "description": "Query points and group results by a specified payload field"
        },
        {
          "name": "Matrix Pairs",
          "value": "matrixPairs",
          "action": "Matrix Pairs",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/search/matrix/pairs",
              "body": {
                "limit": "={{$parameter.limit}}",
                "using": "={{$parameter.using}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "sample": "={{$parameter.sample}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve sparse matrix of pairwise distances between points sampled from the collection"
        },
        {
          "name": "Matrix Offsets",
          "value": "matrixOffsets",
          "action": "Matrix Offsets",
          "routing": {
            "request": {
              "qs": {
                "timeout": "={{$parameter.timeout}}",
                "consistency": "={{$parameter.consistency}}"
              },
              "url": "=/collections/{{$parameter.collectionName}}/points/search/matrix/offsets",
              "body": {
                "limit": "={{$parameter.limit}}",
                "using": "={{$parameter.using}}",
                "filter": "={{JSON.parse($parameter.filter)}}",
                "sample": "={{$parameter.sample}}",
                "shard_key": "={{JSON.parse($parameter.shardKey)}}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve sparse matrix of pairwise distances between points sampled from the collection"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List Collections",
      "value": "listCollections",
      "action": "List Collections",
      "routing": {
        "request": {
          "url": "/collections",
          "method": "GET"
        }
      },
      "description": "List all collections in the Qdrant instance"
    },
    {
      "name": "Create Collection",
      "value": "createCollection",
      "action": "Create Collection",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}",
          "body": {
            "vectors": "={{JSON.parse($parameter.vectors)}}",
            "init_from": "={{JSON.parse($parameter.initFrom)}}",
            "wal_config": "={{JSON.parse($parameter.walConfig)}}",
            "hnsw_config": "={{JSON.parse($parameter.hnswConfig)}}",
            "shard_number": "={{$parameter.shardNumber}}",
            "sparse_vectors": "={{JSON.parse($parameter.sparseVectors)}}",
            "on_disk_payload": "={{$parameter.onDiskPayload}}",
            "sharding_method": "={{$parameter.shardingMethod}}",
            "optimizers_config": "={{JSON.parse($parameter.optimizersConfig)}}",
            "replication_factor": "={{$parameter.replicationFactor}}",
            "strict_mode_config": "={{JSON.parse($parameter.strictModeConfig)}}",
            "quantization_config": "={{JSON.parse($parameter.quantizationConfig)}}",
            "write_consistency_factor": "={{$parameter.writeConsistencyFactor}}"
          },
          "method": "PUT"
        }
      },
      "description": "Create a new collection in the Qdrant instance"
    },
    {
      "name": "Update Collection",
      "value": "updateCollection",
      "action": "Update Collection",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}",
          "body": {
            "params": "={{JSON.parse($parameter.params)}}",
            "vectors": "={{JSON.parse($parameter.vectors)}}",
            "hnsw_config": "={{JSON.parse($parameter.hnswConfig)}}",
            "sparse_vectors": "={{JSON.parse($parameter.sparseVectors)}}",
            "optimizers_config": "={{JSON.parse($parameter.optimizersConfig)}}",
            "strict_mode_config": "={{JSON.parse($parameter.strictModeConfig)}}",
            "quantization_config": "={{JSON.parse($parameter.quantizationConfig)}}"
          },
          "method": "PATCH"
        }
      },
      "description": "Update parameters of an existing collection in the Qdrant instance"
    },
    {
      "name": "Get Collection",
      "value": "getCollection",
      "action": "Get Collection",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific collection"
    },
    {
      "name": "Check If Collection Exists",
      "value": "collectionExists",
      "action": "Check If Collection Exists",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}/exists",
          "method": "GET"
        }
      },
      "description": "Check if a collection exists in the Qdrant instance"
    },
    {
      "name": "Delete Collection",
      "value": "deleteCollection",
      "action": "Delete Collection",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}",
          "method": "DELETE"
        }
      },
      "description": "Delete the specified collection"
    },
    {
      "name": "Upsert Points",
      "value": "upsertPoints",
      "action": "Upsert Points",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points",
          "body": {
            "points": "={{JSON.parse($parameter.points)}}"
          },
          "method": "PUT"
        }
      },
      "description": "Insert or update points in a collection"
    },
    {
      "name": "Retrieve Point",
      "value": "retrievePoint",
      "action": "Retrieve Point",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionName}}/points/{{isNaN(Number($parameter.id)) ?  $parameter.id : Number($parameter.id)}}",
          "method": "GET"
        }
      },
      "description": "Retrieves all details from a single point"
    },
    {
      "name": "Retrieve Points",
      "value": "retrievePoints",
      "action": "Retrieve Points",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points",
          "body": {
            "ids": "={{JSON.parse($parameter.points)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}",
            "with_vector": "={{$parameter.withVector}}",
            "with_payload": "={{$parameter.withPayload}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve all details from multiple points"
    },
    {
      "name": "Delete Points",
      "value": "deletePoints",
      "action": "Delete Points",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/delete",
          "body": {
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Delete specified points from the collection"
    },
    {
      "name": "Count Points",
      "value": "countPoints",
      "action": "Count Points",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/count",
          "body": {
            "exact": "={{$parameter.exact}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Counts the number of points that match a specified filtering condition"
    },
    {
      "name": "Scroll Points",
      "value": "scrollPoints",
      "action": "Scroll Points",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/scroll",
          "body": {
            "limit": "={{$parameter.limit}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "offset": "={{isNaN(Number($parameter.offset)) ?  $parameter.offset : Number($parameter.offset)}}",
            "order_by": "={{JSON.parse($parameter.orderBy)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}",
            "with_vector": "={{$parameter.withVector}}",
            "with_payload": "={{$parameter.withPayload}}"
          },
          "method": "POST"
        }
      },
      "description": "Returns all points in a page-by-page manner"
    },
    {
      "name": "Batch Update Points",
      "value": "batchUpdatePoints",
      "action": "Batch Update Points",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/batch",
          "body": {
            "operations": "={{JSON.parse($parameter.operations)}}"
          },
          "method": "POST"
        }
      },
      "description": "Batch update points, including their respective vectors and payloads"
    },
    {
      "name": "Update Vectors",
      "value": "updateVectors",
      "action": "Update Vectors",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/vectors",
          "body": {
            "points": "={{JSON.parse($parameter.points)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "PUT"
        }
      },
      "description": "Update specified vectors on points"
    },
    {
      "name": "Delete Vectors",
      "value": "deleteVectors",
      "action": "Delete Vectors",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/vectors/delete",
          "body": {
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "vector": "={{JSON.parse($parameter.vector)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Delete specified vectors from points"
    },
    {
      "name": "Set Payload",
      "value": "setPayload",
      "action": "Set Payload",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/payload",
          "body": {
            "key": "={{$parameter.key ? $parameter.key : null}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "payload": "={{JSON.parse($parameter.payload)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Sets payload values for specified points"
    },
    {
      "name": "Overwrite Payload",
      "value": "overwritePayload",
      "action": "Overwrite Payload",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/payload",
          "body": {
            "key": "={{$parameter.key ? $parameter.key : null}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "payload": "={{JSON.parse($parameter.payload)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "PUT"
        }
      },
      "description": "Replaces the entire payload of specified points with a new payload"
    },
    {
      "name": "Delete Payload",
      "value": "deletePayload",
      "action": "Delete Payload",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/payload/delete",
          "body": {
            "keys": "={{JSON.parse($parameter.keys)}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Deletes specified payload keys from points"
    },
    {
      "name": "Clear Payload",
      "value": "clearPayload",
      "action": "Clear Payload",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/payload/clear",
          "body": {
            "filter": "={{JSON.parse($parameter.filter)}}",
            "points": "={{JSON.parse($parameter.points)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Removes the entire payload for specified points"
    },
    {
      "name": "Payload Facets",
      "value": "payloadFacets",
      "action": "Get Payload Facets",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/facet",
          "body": {
            "key": "={{$parameter.key}}",
            "exact": "={{$parameter.exact}}",
            "limit": "={{$parameter.limit}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieves facets for the specified payload field"
    },
    {
      "name": "Create Payload Index",
      "value": "createPayloadIndex",
      "action": "Create Payload Index",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/index",
          "body": {
            "field_name": "={{$parameter.fieldName}}",
            "field_schema": "={{JSON.parse($parameter.fieldSchema)}}"
          },
          "method": "PUT"
        }
      },
      "description": "Creates a payload index for a field in the specified collection"
    },
    {
      "name": "Delete Payload Index",
      "value": "deletePayloadIndex",
      "action": "Delete Payload Index",
      "routing": {
        "request": {
          "qs": {
            "wait": "={{$parameter.wait}}",
            "ordering": "={{$parameter.ordering}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/index/{{$parameter.fieldName}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a payload index for a field in the specified collection"
    },
    {
      "name": "Query Points",
      "value": "queryPoints",
      "action": "Query Points",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/query",
          "body": {
            "limit": "={{$parameter.limit}}",
            "query": "={{JSON.parse($parameter.query)}}",
            "using": "={{$parameter.using}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "offset": "={{$parameter.offset}}",
            "params": "={{JSON.parse($parameter.params)}}",
            "prefetch": "={{JSON.parse($parameter.prefetch)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}",
            "lookup_from": "={{JSON.parse($parameter.lookupFrom)}}",
            "with_vector": "={{$parameter.withVector}}",
            "with_payload": "={{$parameter.withPayload}}",
            "score_threshold": "={{$parameter.scoreThreshold}}"
          },
          "method": "POST"
        }
      },
      "description": "Query points in a collection using various search methods"
    },
    {
      "name": "Query Batch Points",
      "value": "queryBatchPoints",
      "action": "Query Batch Points",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/query/batch",
          "body": {
            "searches": "={{JSON.parse($parameter.searches)}}"
          },
          "method": "POST"
        }
      },
      "description": "Query multiple points in batch using various search methods"
    },
    {
      "name": "Query Points Groups",
      "value": "queryPointsGroups",
      "action": "Query Points Groups",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/query/groups",
          "body": {
            "limit": "={{$parameter.limit}}",
            "query": "={{JSON.parse($parameter.query)}}",
            "using": "={{$parameter.using}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "params": "={{JSON.parse($parameter.params)}}",
            "group_by": "={{$parameter.groupBy}}",
            "prefetch": "={{JSON.parse($parameter.prefetch)}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}",
            "group_size": "={{$parameter.groupSize}}",
            "lookup_from": "={{JSON.parse($parameter.lookupFrom)}}",
            "with_lookup": "={{JSON.parse($parameter.withLookup)}}",
            "with_vector": "={{$parameter.withVector}}",
            "with_payload": "={{$parameter.withPayload}}",
            "score_threshold": "={{$parameter.scoreThreshold}}"
          },
          "method": "POST"
        }
      },
      "description": "Query points and group results by a specified payload field"
    },
    {
      "name": "Matrix Pairs",
      "value": "matrixPairs",
      "action": "Matrix Pairs",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/search/matrix/pairs",
          "body": {
            "limit": "={{$parameter.limit}}",
            "using": "={{$parameter.using}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "sample": "={{$parameter.sample}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve sparse matrix of pairwise distances between points sampled from the collection"
    },
    {
      "name": "Matrix Offsets",
      "value": "matrixOffsets",
      "action": "Matrix Offsets",
      "routing": {
        "request": {
          "qs": {
            "timeout": "={{$parameter.timeout}}",
            "consistency": "={{$parameter.consistency}}"
          },
          "url": "=/collections/{{$parameter.collectionName}}/points/search/matrix/offsets",
          "body": {
            "limit": "={{$parameter.limit}}",
            "using": "={{$parameter.using}}",
            "filter": "={{JSON.parse($parameter.filter)}}",
            "sample": "={{$parameter.sample}}",
            "shard_key": "={{JSON.parse($parameter.shardKey)}}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve sparse matrix of pairwise distances between points sampled from the collection"
    }
  ]

npm_readme:
  # n8n-nodes-qdrant

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

  This is the official [n8n](https://n8n.io/) node for interfacing with Qdrant.

  [Qdrant](http://qdrant.tech) is a vector similarity search engine that provides a production-ready service with a convenient API to store, search, and manage vectors.

  ## Installation

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

  ## Operations

  The node supports the following operations:

  ### Collection

  - [List Collections](https://api.qdrant.tech/v-1-14-x/api-reference/collections/get-collections) - List all collections in the Qdrant instance
  - [Create Collection](https://api.qdrant.tech/v-1-14-x/api-reference/collections/create-collection) - Create a new collection with specified vector parameters
  - [Update Collection](https://api.qdrant.tech/v-1-14-x/api-reference/collections/update-collection) - Update parameters of an existing collection
  - [Get Collection](https://api.qdrant.tech/v-1-14-x/api-reference/collections/get-collection) - Get information about a specific collection
  - [Collection Exists](https://api.qdrant.tech/v-1-14-x/api-reference/collections/collection-exists) - Check if a collection exists
  - [Delete Collection](https://api.qdrant.tech/v-1-14-x/api-reference/collections/delete-collection) - Delete a collection

  ### Point

  - [Upsert Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/upsert-points) - Insert or update points in a collection
  - [Retrieve Point](https://api.qdrant.tech/v-1-14-x/api-reference/points/get-point) - Get a single point by ID
  - [Retrieve Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/get-points) - Get multiple points by their IDs
  - [Delete Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/delete-points) - Remove points from a collection
  - [Count Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/count-points) - Count points in a collection with optional filtering
  - [Scroll Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/scroll-points) - Scroll through all points in a collection
  - [Batch Update Points](https://api.qdrant.tech/v-1-14-x/api-reference/points/batch-update) - Perform multiple point operations in a single request

  ### Vector

  - [Update Vectors](https://api.qdrant.tech/v-1-14-x/api-reference/points/update-vectors) - Update vectors for existing points
  - [Delete Vectors](https://api.qdrant.tech/v-1-14-x/api-reference/points/delete-vectors) - Remove vectors from points

  ### Search

  - [Query Points](https://api.qdrant.tech/v-1-14-x/api-reference/search/query-points) - Search for similar vectors
  - [Query Points In Batch](https://api.qdrant.tech/v-1-14-x/api-reference/search/query-batch-points) - Perform multiple vector searches in batch
  - [Query Points Groups](https://api.qdrant.tech/v-1-14-x/api-reference/search/query-points-groups) - Group search results by payload field
  - [Matrix Pairs](https://api.qdrant.tech/v-1-14-x/api-reference/search/matrix-pairs) - Calculate distance matrix between pairs of points
  - [Matrix Offsets](https://api.qdrant.tech/v-1-14-x/api-reference/search/matrix-offsets) - Calculate distance matrix using offsets

  ### Payload

  - [Set Payload](https://api.qdrant.tech/v-1-14-x/api-reference/points/set-payload) - Set payload for points
  - [Overwrite Payload](https://api.qdrant.tech/v-1-14-x/api-reference/points/overwrite-payload) - Replace entire payload for points
  - [Delete Payload](https://api.qdrant.tech/v-1-14-x/api-reference/points/delete-payload) - Remove payload from points
  - [Clear Payload](https://api.qdrant.tech/v-1-14-x/api-reference/points/clear-payload) - Clear all payload fields
  - [Payload Facets](https://api.qdrant.tech/v-1-14-x/api-reference/points/facet) - Get payload field statistics
  - [Create Payload Index](https://api.qdrant.tech/v-1-14-x/api-reference/indexes/create-field-index) - Create an index for payload fields
  - [Delete Payload Index](https://api.qdrant.tech/v-1-14-x/api-reference/indexes/delete-field-index) - Remove a payload field index

  ## Credentials

  To use this node, you need to set up Qdrant credentials:

  - URL: The REST URL of your Qdrant instance
  - API Key (optional): Your Qdrant API key if authentication is enabled

  ## Compatibility

  This node is compatible with:

  - Qdrant version 1.14.0 and above

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Qdrant Documentation](https://qdrant.tech/documentation/)
  - [Qdrant GitHub Repository](https://github.com/qdrant/qdrant)

ai_documentation_summary:
  {"purpose":"This n8n node provides official integration with Qdrant, a vector similarity search engine, enabling storage, retrieval, and management of vectors and their associated payloads.","capabilities":["List, create, update, get, and delete collections","Upsert, retrieve, delete, count, and scroll points","Update and delete vectors","Query points, batch query, and group search results","Calculate distance matrices (matrix pairs and offsets)","Set, overwrite, delete, and clear point payloads","Create and delete payload field indexes","Get payload field statistics"],"authentication":"API Key required (optional, only if authentication is enabled on Qdrant instance)","commonUseCases":["Semantic search and vector similarity queries","Embedding storage and retrieval workflows","Vector database management and maintenance","Semantic clustering and grouping operations"],"limitations":["Requires Qdrant version 1.14.0 or above","API Key is optional and only needed if Qdrant instance has authentication enabled"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-webhook","n8n-nodes-ai.embeddings"]}


node_type: n8n-nodes-trackingtime.trackingtimeTrigger
package_name: n8n-nodes-trackingtime
display_name: TrackingTime Trigger
description: Handle TrackingTime events via webhooks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: jflores-tt
author_github_url: https://github.com/TrackingTime/
npm_package_name: n8n-nodes-trackingtime
npm_version: 1.0.2
community_fetched_at: 2026-03-25T21:19:40.771Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-trackingtime

  This is an n8n community node that connects your workflows with [TrackingTime](https://trackingtime.co/), the cloud platform for tracking projects, tasks, and billable hours.

  TrackingTime centralizes time tracking so teams can monitor productivity, collaborate on schedules, and export accurate timesheets for billing or payroll.

  [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)
  [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.

  ## Operations

  - Add Time Entry – create a new time entry for a TrackingTime account.
  - Search Time Entry – query existing entries using flexible filters.
  - Update Time Entry – modify the details of an existing time entry.

  ## Credentials

  - Generate an **App Password** from your TrackingTime user profile (Settings → Integrations).
  - In n8n, create a new **TrackingTime** credential and paste the password; the node authenticates via Basic auth with a fixed username of `API_TOKEN`.
  - Ensure the TrackingTime user has access to the teams and projects whose time entries you plan to manage.

  ## Compatibility

  - Requires n8n v1.0.0 or higher.
  - Developed and tested against n8n 1.50+, which includes the resource mapper used by the search operation.

  ## Usage

  - Drop the **TrackingTime** node into your workflow and choose the `Time Entry` resource.
  - Select the operation (add, search, or update) and supply the required account, project, and time details.
  - For searches, use the **Search Fields** mapper to set the same filters you would pass to the API (e.g. project ID, date range).
  - Execute the node to sync your time data with TrackingTime without leaving n8n.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [TrackingTime API overview](https://support.trackingtime.co/en/articles/6329119-apps-integrations)
  - [TrackingTime product site](https://trackingtime.co/)

  ## Version history

  - 0.1.21 – Initial release with add, search, and update time entry operations.

ai_documentation_summary:
  {"purpose":"A community n8n node that connects workflows to TrackingTime to manage time entries through add, search, and update operations.","capabilities":["Create new time entries","Query existing time entries with flexible filters","Modify details of existing time entries","Sync time data with TrackingTime platform"],"authentication":"Basic auth with a fixed username 'API_TOKEN' and a TrackingTime App Password","commonUseCases":["Automating time entry creation from other workflow triggers","Syncing project hours for billing or payroll purposes","Querying historical time data for reporting"],"limitations":["Requires n8n v1.0.0 or higher (tested on 1.50+)","Uses a fixed username for authentication rather than standard OAuth2","Requires user access to specific teams and projects"],"relatedNodes":["n8n-nodes-trackingtime.trackingTime","n8n-nodes-trackingtime.trackingTimeWebhook"]}


node_type: @lusha-org/n8n-nodes-lusha.lusha
package_name: @lusha-org/n8n-nodes-lusha
display_name: Lusha
description: Lusha API integration for contact and company enrichment with prospecting
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: lusha-oss
author_github_url: https://github.com/lusha-oss/n8n-nodes-lusha.git
npm_package_name: @lusha-org/n8n-nodes-lusha
npm_version: 1.0.10
community_fetched_at: 2026-03-25T21:19:40.772Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Company",
          "value": "company"
        }
      ],
      "description": "The resource to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrichSingle",
      "options": [
        {
          "name": "Enrich Single",
          "value": "enrichSingle",
          "action": "Enrich a single contact",
          "description": "Enrich a single contact with additional information"
        },
        {
          "name": "Enrich Bulk",
          "value": "enrichBulk",
          "action": "Enrich contacts in bulk",
          "description": "Enrich multiple contacts with additional information"
        },
        {
          "name": "Search Contacts",
          "value": "searchContacts",
          "action": "Search for contacts",
          "description": "Search and discover new contacts based on criteria"
        },
        {
          "name": "Enrich from Search",
          "value": "enrichFromSearch",
          "action": "Enrich contacts from search results",
          "description": "Enrich contacts found through a previous search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrichSingle",
      "options": [
        {
          "name": "Enrich Single",
          "value": "enrichSingle",
          "action": "Enrich a single company",
          "description": "Enrich a single company with additional information"
        },
        {
          "name": "Enrich Bulk",
          "value": "enrichBulk",
          "action": "Enrich companies in bulk",
          "description": "Enrich multiple companies with additional information"
        },
        {
          "name": "Search Companies",
          "value": "searchCompanies",
          "action": "Search for companies",
          "description": "Search and discover new companies based on criteria"
        },
        {
          "name": "Enrich from Search",
          "value": "enrichFromSearch",
          "action": "Enrich companies from search results",
          "description": "Enrich companies found through a previous search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Enrich Single",
      "value": "enrichSingle",
      "action": "Enrich a single contact",
      "description": "Enrich a single contact with additional information"
    },
    {
      "name": "Enrich Bulk",
      "value": "enrichBulk",
      "action": "Enrich contacts in bulk",
      "description": "Enrich multiple contacts with additional information"
    },
    {
      "name": "Search Contacts",
      "value": "searchContacts",
      "action": "Search for contacts",
      "description": "Search and discover new contacts based on criteria"
    },
    {
      "name": "Enrich from Search",
      "value": "enrichFromSearch",
      "action": "Enrich contacts from search results",
      "description": "Enrich contacts found through a previous search"
    },
    {
      "name": "Enrich Single",
      "value": "enrichSingle",
      "action": "Enrich a single company",
      "description": "Enrich a single company with additional information"
    },
    {
      "name": "Enrich Bulk",
      "value": "enrichBulk",
      "action": "Enrich companies in bulk",
      "description": "Enrich multiple companies with additional information"
    },
    {
      "name": "Search Companies",
      "value": "searchCompanies",
      "action": "Search for companies",
      "description": "Search and discover new companies based on criteria"
    },
    {
      "name": "Enrich from Search",
      "value": "enrichFromSearch",
      "action": "Enrich companies from search results",
      "description": "Enrich companies found through a previous search"
    }
  ]

npm_readme:
  # n8n-nodes-lusha

  This is an n8n community node that integrates [Lusha](https://www.lusha.com/) with n8n, enabling contact and company data enrichment directly in your workflows.

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

  ## Features

  This node provides comprehensive access to Lusha's API capabilities:

  ### 🧑‍💼 Contact Operations

  - **Single Contact Enrichment** - Find contact details using name & company, email, or LinkedIn URL
  - **Bulk Contact Enrichment** - Enrich up to 100 contacts in a single operation
  - **Contact Prospecting** - Search for contacts with advanced filters
  - **Smart Enrichment** - Enrich all, new, or specific contacts from search results

  ### 🏢 Company Operations

  - **Single Company Enrichment** - Get company details using domain or company name
  - **Bulk Company Enrichment** - Enrich up to 100 companies at once
  - **Company Prospecting** - Search for companies with comprehensive filters
  - **Flexible Selection** - Enrich all or specific companies from search results

  ### 🔍 Advanced Filtering

  - **Contact Filters**: Departments, seniority levels, job titles, locations, existing data points
  - **Company Filters**: Industries, sub-industries, employee count, revenue ranges, technologies, locations, SIC/NAICS codes
  - **Smart Pagination**: Navigate through large result sets efficiently

  ## Installation

  ### Community Node (Recommended)

  In your n8n instance:

  1. Go to **Settings** > **Community Nodes**
  2. Click **Install a community node**
  3. Enter: `n8n-nodes-lusha`
  4. Click **Install**

  ### Manual Installation

  ```bash
  # Navigate to your n8n custom nodes folder
  cd ~/.n8n/custom

  # Clone this repository
  git clone https://github.com/lusha-oss/n8n-nodes-lusha.git

  # Install dependencies
  cd n8n-nodes-lusha
  npm install

  # Build the node
  npm run build

  # Restart n8n
  ```

  ## Credentials

  To use this node, you'll need a Lusha API key:

  1. Sign up for a [Lusha account](https://www.lusha.com/)
  2. Navigate to Settings > API
  3. Generate your API key
  4. In n8n, add new Lusha credentials with your API key

  ## Usage Examples

  ### Example 1: Enrich Single Contact

  Find contact information using a person's name and company:

  - **Resource**: Contact
  - **Operation**: Enrich Single
  - **Search By**: Name and Company
  - **First Name**: John
  - **Last Name**: Doe
  - **Company Name**: Acme Corp

  ### Example 2: Bulk Company Enrichment

  Enrich multiple companies from a spreadsheet:

  - **Resource**: Company
  - **Operation**: Enrich Bulk
  - **Companies JSON**: Connect from previous node or provide JSON array

  ### Example 3: Contact Prospecting

  Search for sales leaders in technology companies:

  - **Resource**: Prospecting
  - **Operation**: Search Contacts
  - **Departments**: Sales
  - **Seniority**: Director, Vice President, C-Suite
  - **Industries**: Technology

  ### Example 4: Enrich Search Results

  After running a prospecting search:

  - **Resource**: Prospecting
  - **Operation**: Enrich Contacts
  - **Selection Type**: All Contacts
  - **Request ID**: (automatically passed from search)

  ## Parameters

  ### Contact Enrichment

  - **Search Methods**: Name & Company, Email, LinkedIn URL
  - **Filter Options**: All data, emails only, phones only

  ### Company Enrichment

  - **Search Methods**: Domain, Company Name
  - **Bulk Format**: JSON array with company identifiers

  ### Prospecting Filters

  #### Contact Filters

  - **Job Titles**: Free text, comma-separated
  - **Departments**: Dropdown selection (Sales, Marketing, IT, etc.)
  - **Seniority**: Levels from Intern to Founder
  - **Locations**: Countries, states, cities
  - **Data Points**: Filter by available contact information

  #### Company Filters

  - **Industries**: Main industry categories
  - **Sub-Industries**: Specific industry segments
  - **Employee Count**: Size ranges from 1-10 to 10,000+
  - **Revenue**: Min/Max revenue selection
  - **Locations**: Company headquarters
  - **Technologies**: Tech stack used
  - **Codes**: SIC and NAICS classifications

  ## Error Handling

  The node includes comprehensive error handling:

  - Invalid API credentials
  - Rate limiting responses
  - Invalid input data
  - Empty results handling
  - Network timeouts

  ## Rate Limits

  Please be aware of Lusha's API rate limits:

  - Check your plan's specific limits
  - The node handles responses appropriately
  - Consider adding delays for large bulk operations

  ## Support

  - **Issues**: [GitHub Issues](https://github.com/yourusername/n8n-nodes-lusha/issues)
  - **n8n Community**: [n8n Community Forum](https://community.n8n.io)
  - **Lusha API Docs**: [Lusha API Documentation](https://docs.lusha.com/apis)

  ## License

  [MIT](LICENSE.md)

  ## Contributing

  Contributions are welcome! Please feel free to submit a Pull Request.

  ## Version History

  ### 1.0.0

  - Initial release
  - Full contact and company enrichment
  - Prospecting search and enrichment
  - Bulk operations support
  - Advanced filtering options

  ## Credits

  Created by [Your Name]
  Based on the Lusha API v2

ai_documentation_summary:
  {"purpose":"Integrates Lusha API with n8n to enrich contact and company data, perform prospecting searches, and filter results for sales and marketing workflows.","capabilities":["Single contact enrichment by name, company, email, or LinkedIn URL","Bulk contact enrichment (up to 100 contacts)","Contact prospecting with advanced filters","Smart enrichment of search results (all or specific)","Single company enrichment by domain or name","Bulk company enrichment (up to 100 companies)","Company prospecting with comprehensive filters","Filtering by job titles, departments, seniority, locations, industries, employee count, revenue, and technologies","Smart pagination for large result sets"],"authentication":"API key required","commonUseCases":["Sales prospecting by finding decision-makers in target companies","Enriching lead lists with email addresses and phone numbers","Validating existing contact data for accuracy","Finding contacts in specific departments (e.g., Sales, Marketing) at target companies","Bulk updating company details for a database"],"limitations":["Bulk operations are limited to 100 items per request","Subject to Lusha API rate limits","Requires a paid Lusha account for API access","Manual installation requires npm build step"],"relatedNodes":["Spreadsheet","JSON","Delay","HTTP Request","Split In Batches"]}


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-03-25 21:19:40
author_name: lucaguindani
author_github_url: https://github.com/lucaguindani/
npm_package_name: n8n-nodes-bookstack
npm_version: 1.3.0
community_fetched_at: 2026-03-25T21:19:40.773Z
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": "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": "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Global search"
    },
    {
      "name": "Audit Log",
      "value": "auditLogList",
      "action": "Audit log"
    },
    {
      "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"
    }
  ]

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: 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 24.5+
  - 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/updating entities, `tags` can be provided as a comma‑separated list: `tagA, tagB`.

  ---
  ## 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: @tavily/n8n-nodes-tavily.tavily
package_name: @tavily/n8n-nodes-tavily
display_name: Tavily
description: Tavily API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs: "={{['main']}}"
updated_at: 2026-03-25 21:19:40
author_name: konstantintzt
author_github_url: https://github.com/tavily-ai/tavily-n8n-node.git
npm_package_name: @tavily/n8n-nodes-tavily
npm_version: 0.5.1
community_fetched_at: 2026-03-25T21:19:40.774Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Crawl",
          "value": "crawl"
        },
        {
          "name": "Extract",
          "value": "extract"
        },
        {
          "name": "Map",
          "value": "map"
        },
        {
          "name": "Research",
          "value": "research"
        },
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "urls",
      "options": [
        {
          "name": "URLs",
          "value": "urls",
          "action": "Extract",
          "description": "Extract raw content from URLs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "extract"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "query",
      "options": [
        {
          "name": "Query",
          "value": "query",
          "action": "Search",
          "description": "Search query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "url",
      "options": [
        {
          "name": "URL",
          "value": "url",
          "action": "Crawl",
          "description": "The root URL to begin the crawl"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "crawl"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "url",
      "options": [
        {
          "name": "URL",
          "value": "url",
          "action": "Map",
          "description": "Discover all internal links starting from a base URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "map"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Research Task",
          "value": "create",
          "action": "Create research task",
          "description": "Initiate a comprehensive research task on a given topic"
        },
        {
          "name": "Get Research Status",
          "value": "status",
          "action": "Get research status",
          "description": "Retrieve the status and results of a research task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "research"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "URLs",
      "value": "urls",
      "action": "Extract",
      "description": "Extract raw content from URLs"
    },
    {
      "name": "Query",
      "value": "query",
      "action": "Search",
      "description": "Search query"
    },
    {
      "name": "URL",
      "value": "url",
      "action": "Crawl",
      "description": "The root URL to begin the crawl"
    },
    {
      "name": "URL",
      "value": "url",
      "action": "Map",
      "description": "Discover all internal links starting from a base URL"
    },
    {
      "name": "Create Research Task",
      "value": "create",
      "action": "Create research task",
      "description": "Initiate a comprehensive research task on a given topic"
    },
    {
      "name": "Get Research Status",
      "value": "status",
      "action": "Get research status",
      "description": "Retrieve the status and results of a research task"
    }
  ]

npm_readme:
  # @tavily/n8n-nodes-tavily

  @tavily/n8n-nodes-tavily is a node for n8n that integrates the Tavily API, enabling powerful web search and content extraction within your no-code automation workflows.

  ## Features

  ### Tavily Search
  Tavily Search allows you to query the web with powerful filtering capabilities, including options to refine results by topic, time range, and specific domains to include or exclude. You can choose to retrieve a generated answer, raw content, or even related images, depending on your workflow needs. It also supports different search depths—basic or advanced. 

  ### Tavily Extract
   Tavily Extract allows you to effortlessly retrieve raw content from a list of websites, making it ideal for data collection, content analysis, and research. You can also combine Tavily Extract with our Search method: first, obtain a list of relevant documents, then perform further processing on selected links to gather additional information and use it as context for your research tasks.

  ### Tavily Crawl
  Tavily Crawl allows you to intelligently crawl a website from a starting URL to discover and extract content across multiple pages. Control depth, breadth, and apply filters to tailor your crawl for comprehensive analysis and content aggregation.

  ### Tavily Map
  Tavily Map allows you to discover and map out all the URLs within a website starting from a root URL. Unlike Crawl, which extracts content, Map focuses on efficiently building a comprehensive sitemap of a website's structure. This is ideal for understanding site architecture, planning content extraction, or identifying specific pages for further processing.

  ### Tavily Research
  Tavily Research performs comprehensive research on a given topic by conducting multiple searches, analyzing sources, and generating a detailed research report. Choose between different models (Mini for targeted research, Pro for comprehensive multi-angle analysis) and customize the output format with citation styles and structured schemas.

  ## Getting a Tavily API Key

  1. Go to the [Tavily website](https://tavily.com) and create an account
  2. Navigate to the [Tavily dashboard](https://app.tavily.com/home) to get your API key

  ## Configuring Credentials in n8n

  1. In your n8n instance, go to the "Credentials" section
  2. Click "Create Credential"
  3. Search for or select "Tavily API"
  4. Enter your Tavily API key in the appropriate field
  5. Save the credential

  ## Usage

  ### Tavily Search

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node in your workflow
  3. Click on 'Search'
  4. In the node's settings:
     - Select your Tavily API
     - Enter your search query
     - Configure any other desired search parameters (topic, search depth, etc.)
  5. Run the workflow to execute the search

  ### Tavily Extract

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node
  3. Click on 'Extract'
  4. In the node's settings:
     - Select your Tavily API credential
     - Enter the URLs you want to extract content from
     - Configure any other extraction parameters (include images, extract depth)
  5. Run the workflow to extract the content

  ### Tavily Crawl

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node
  3. Click on 'Crawl'
  4. In the node's settings:
     - Select your Tavily API credential
     - Enter the root URL to begin the crawl
     - Configure crawl parameters (max depth, limit, etc.)
  5. Run the workflow to crawl the website and extract content

  ### Tavily Map

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node
  3. Click on 'Map'
  4. In the node's settings:
     - Select your Tavily API credential
     - Enter the root URL to begin mapping
     - Configure map parameters (max depth, limit, filters, etc.)
  5. Run the workflow to map the website's URL structure

  ### Tavily Research

  #### Create Research Task

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node
  3. Click on 'Research'
  4. Select 'Create Research Task' operation
  5. In the node's settings:
     - Select your Tavily API credential
     - Enter your research task or question
     - Configure model (Auto, Mini, or Pro) and other options
  6. Run the workflow to initiate the research task
  7. The response will include a `request_id` to check the status later

  #### Get Research Status

  1. Add the "Tavily" node to your n8n workflow
  2. Connect it to the preceding node
  3. Click on 'Research'
  4. Select 'Get Research Status' operation
  5. In the node's settings:
     - Select your Tavily API credential
     - Enter the `request_id` from the create research task response
  6. Run the workflow to get the research status and results

  ## Parameters

  ### Tavily Search Parameters

  | Parameter | Description |
  |-----------|-------------|
  | Query | The search query to execute |
  | Topic | The category of the search (General, News, or Finance) |
  | Search Depth | The depth of the search (Basic or Advanced) |
  | Chunks Per Source (Advanced Search only) | Number of content chunks to retrieve from each source (1-3) |
  | Max Results | Maximum number of search results to return (1-20) |
  | Time Range | Time range filter for results (day, week, month, year) |
  | Days (News Only) | Number of days back from the current date to include (for News topic) |
  | Include Answer | Include an LLM-generated answer in the response (Basic or Advanced) |
  | Include Raw Content | Include cleaned and parsed HTML content of each search result |
  | Include Images | Perform an image search and include the results in the response |
  | Include Image Descriptions | When including images, also add a descriptive text for each image |
  | Include Domains | A list of domains to specifically include in the search results |
  | Exclude Domains | A list of domains to specifically exclude from the search results |
  | Include Favicon | Include the favicon URL for each result |
  | Include Usage | Whether to include credit usage information in the response. |
  | Country | Boost search results from a specific country. |
  | Auto Parameters | When enabled, Tavily automatically configures search parameters based on your query's content and intent |
  | Start Date | Will return all results after the specified start date (publish date). Required to be written in the format YYYY-MM-DD |
  | End Date | Will return all results before the specified end date (publish date). Required to be written in the format YYYY-MM-DD |

  ### Tavily Extract Parameters

  | Parameter | Description |
  |-----------|-------------|
  | URLs | One or more URLs to extract content from |
  | Include Images | Include a list of images extracted from each URL |
  | Extract Depth | How deeply to parse each URL (Basic or Advanced) |
  | Format | Format of the extracted web page content (Markdown or Text) |
  | Include Favicon | Include the favicon URL for each result |
  | Include Usage | Whether to include credit usage information in the response. NOTE:The value may be 0 if the total successful URL extractions has not yet reached 5 calls. See our [Credits & Pricing documentation](https://docs.tavily.com/documentation/api-credits) for details. |

  ### Tavily Crawl Parameters

  | Parameter | Description |
  |-----------|-------------|
  | URL | The root URL to begin the crawl |
  | Instructions | Natural language instructions for the crawler |
  | Max Depth | Maximum depth of the crawl (≥ 1) |
  | Max Breadth | Maximum number of links to follow per level (≥ 1) |
  | Limit | Maximum number of results to return (≥ 1) |
  | Select Paths | Regex patterns to select only URLs with specific path patterns |
  | Select Domains | Regex patterns to select crawling to specific domains or subdomains |
  | Exclude Paths | Regex patterns to exclude URLs with specific path patterns |
  | Exclude Domains | Regex patterns to exclude specific domains or subdomains from crawling |
  | Allow External | Whether to allow following links that go to external domains |
  | Include Images | Whether to include images in the crawl results |
  | Extract Depth | Extraction depth (Basic or Advanced) |
  | Format | Format of the extracted web page content (Markdown or Text) |
  | Include Favicon | Include the favicon URL for each result |
  | Include Usage | Whether to include credit usage information in the response. NOTE:The value may be 0 if the total use of /extract and /map calls has not yet reached minimum needed. See our [Credits & Pricing documentation](https://docs.tavily.com/documentation/api-credits) for details. |

  ### Tavily Map Parameters

  | Parameter | Description |
  |-----------|-------------|
  | URL | The root URL to begin mapping |
  | Instructions | Natural language instructions guiding the mapping process |
  | Max Depth | Defines how far from the base URL the crawler can explore (≥ 1) |
  | Max Breadth | Maximum number of links to follow per level of the tree (≥ 1) |
  | Limit | Total number of links the crawler will process before stopping (≥ 1) |
  | Select Paths | Regex patterns to select only URLs with specific path patterns |
  | Select Domains | Regex patterns to select crawling to specific domains or subdomains |
  | Exclude Paths | Regex patterns to exclude URLs with specific path patterns |
  | Exclude Domains | Regex patterns to exclude specific domains or subdomains from crawling |
  | Allow External | Whether to include external domain links in the final results list |
  | Timeout | Maximum time in seconds to wait for the map operation (10-150) |

  ### Tavily Research Parameters

  #### Create Research Task

  | Parameter | Description |
  |-----------|-------------|
  | Input | The research task or question to investigate |
  | Model | The model used by the research agent (Auto, Mini, or Pro). Mini is optimized for targeted research, Pro provides comprehensive multi-angle research |
  | Citation Format | The format for citations in the research report (Numbered, MLA, APA, or Chicago) |
  | Output Schema | A JSON Schema object that defines the structure of the research output |
  | Stream | Whether to stream research results in real-time as Server-Sent Events (SSE) with progress updates and incremental results |

  #### Get Research Status

  | Parameter | Description |
  |-----------|-------------|
  | Request ID | The unique identifier of the research task returned from the Create Research Task operation |

  ## Troubleshooting

  ### Error Codes

  | Error Code | Description | Solution |
  |------------|-------------|----------|
  | 400 Bad Request | Invalid request parameters or unsupported values | Check all parameters and their formats |
  | 401 Unauthorized | Missing or invalid API key | Verify API key or generate a new one |
  | 429 Too Many Requests | Rate limit exceeded | Reduce request frequency or implement backoff |
  | 432 Plan Limit Exceeded | Exceeds plan limits | Upgrade your plan via [Tavily Dashboard](https://app.tavily.com/billing) |
  | 433 Pay-As-You-Go Limit Exceeded | Exceeds pay-as-you-go limit | Increase limit via [Tavily Dashboard](https://app.tavily.com/billing) |
  | 500 Internal Server Error | Server-side issue | Retry request after a few minutes |

  ## Cost

  Head to the [API Credits Overview](https://docs.tavily.com/documentation/api-credits) in our documentation to learn more about how many API Credits each request costs.

  ## License

  This project is licensed under the terms of the MIT license.

  ## Contact

  If you are encountering issues while using Tavily, please email us at support@tavily.com. We'll be happy to help you.

  If you want to stay updated on the latest Tavily news and releases, head to our [Developer Community](https://community.tavily.com) to learn more!

ai_documentation_summary:
  {"purpose":"This n8n node integrates the Tavily API to perform web search, content extraction, website crawling, site mapping, and comprehensive research within no-code automation workflows.","capabilities":["Web search with filtering by topic, time range, and domains","Content extraction from specific URLs","Website crawling with configurable depth and breadth","Website URL mapping and sitemap generation","Automated research with multiple search iterations and source analysis","Support for different search depths (basic/advanced)","Support for different research models (Mini/Pro)","Image retrieval in search results"],"authentication":"API key required","commonUseCases":["Market research and competitor analysis","Data collection from multiple sources","Content aggregation and summarization","Website structure analysis","Automated fact-checking and verification"],"limitations":["Research tasks require a separate request_id to check status","Some advanced features may depend on specific Tavily API plan tiers","Crawl and Map operations are limited by API rate limits"],"relatedNodes":["HTTP Request","Code","Function","Wait Until","Split In Batches"]}


node_type: n8n-nodes-resend.resend
package_name: n8n-nodes-resend
display_name: Resend
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: zenorocha
author_github_url: https://github.com/resend/
npm_package_name: n8n-nodes-resend
npm_version: 2.3.4
community_fetched_at: 2026-03-25T21:19:40.774Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  Send emails, manage contacts, create broadcasts, handle templates, domains, segments, topics, and webhooks using the Resend email platform

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Broadcast",
          "value": "broadcasts",
          "description": "Create, send, update, or delete email broadcasts to reach multiple contacts at once"
        },
        {
          "name": "Contact",
          "value": "contacts",
          "description": "Add, update, delete, or list contacts (email subscribers) and manage their segment and topic memberships"
        },
        {
          "name": "Contact Property",
          "value": "contactProperties",
          "description": "Create, update, delete, or list custom contact properties (metadata fields) for storing additional contact information"
        },
        {
          "name": "Domain",
          "value": "domains",
          "description": "Add, verify, update, or delete sending domains for email authentication and deliverability"
        },
        {
          "name": "Email",
          "value": "email",
          "description": "Send single or batch emails, retrieve sent emails, cancel scheduled emails, or manage email attachments"
        },
        {
          "name": "Event",
          "value": "events",
          "description": "Create, send, retrieve, update, or delete events for triggering workflows (private alpha)"
        },
        {
          "name": "Receiving Email",
          "value": "receivingEmails",
          "description": "List and retrieve received emails and their attachments from inbound email processing"
        },
        {
          "name": "Segment",
          "value": "segments",
          "description": "Create, update, delete, or list contact segments for grouping contacts based on criteria"
        },
        {
          "name": "Template",
          "value": "templates",
          "description": "Create, update, publish, duplicate, or delete reusable email templates with dynamic variables"
        },
        {
          "name": "Topic",
          "value": "topics",
          "description": "Create, update, delete, or list subscription topics for managing email preferences"
        },
        {
          "name": "Webhook",
          "value": "webhooks",
          "description": "Create, update, delete, or list webhooks for receiving real-time notifications about email events"
        },
        {
          "name": "Workflow",
          "value": "workflows",
          "description": "Create, update, delete, or list automated email workflows and monitor runs (private alpha)"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel a scheduled email",
          "description": "Cancel a previously scheduled email by its email ID before it gets sent"
        },
        {
          "name": "Get Attachment",
          "value": "getAttachment",
          "action": "Get attachment from email",
          "description": "Download a specific attachment from a sent email using the email ID and attachment ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all sent emails",
          "description": "Get a list of all previously sent emails with their status, subject, and recipients"
        },
        {
          "name": "List Attachments",
          "value": "listAttachments",
          "action": "List email attachments",
          "description": "Get all attachments from a sent email by providing the email ID"
        },
        {
          "name": "Retrieve",
          "value": "retrieve",
          "action": "Get email details",
          "description": "Get details of a specific sent email including subject, recipients, status, and timestamps"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a new email",
          "description": "Send a new email to one or more recipients with HTML or plain text content, attachments, and optional scheduling"
        },
        {
          "name": "Send and Wait for Response",
          "value": "sendAndWait",
          "action": "Send email and wait for recipient response",
          "description": "Send an email with response buttons and pause workflow execution until the recipient clicks a response"
        },
        {
          "name": "Send Batch",
          "value": "sendBatch",
          "action": "Send multiple emails in batch",
          "description": "Send up to 100 emails in a single API call for bulk email delivery with individual customization"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update scheduled email time",
          "description": "Reschedule a scheduled email by updating its scheduled_at time before it is sent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an email template",
          "description": "Create a new reusable email template with HTML content and dynamic variables for personalization"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a template",
          "description": "Permanently delete an email template by its template ID"
        },
        {
          "name": "Duplicate",
          "value": "duplicate",
          "action": "Duplicate a template",
          "description": "Create a copy of an existing template with a new name for easy customization"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get template details",
          "description": "Retrieve a template's details including HTML content, variables, and publish status by template ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all templates",
          "description": "Get all email templates with their names, IDs, and publish status"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a template",
          "description": "Publish a template to make it available for sending emails. Required before a template can be used in email operations."
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a template",
          "description": "Update a template's name, subject, HTML content, or variables"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "templates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Add a new sending domain",
          "description": "Add a new sending domain for email authentication. Returns DNS records that must be configured for verification."
        },
        {
          "name": "Create Tracking Domain",
          "value": "createTrackingDomain",
          "action": "Create a tracking domain",
          "description": "Create a custom domain for click and open tracking (private alpha)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a domain",
          "description": "Remove a sending domain from your account. Emails can no longer be sent from this domain after deletion."
        },
        {
          "name": "Delete Tracking Domain",
          "value": "deleteTrackingDomain",
          "action": "Delete a tracking domain",
          "description": "Remove an existing click tracking domain (private alpha)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get domain details",
          "description": "Retrieve details of a domain including DNS records, verification status, and configuration"
        },
        {
          "name": "Get Tracking Domain",
          "value": "getTrackingDomain",
          "action": "Get tracking domain details",
          "description": "Retrieve a single click tracking domain with its DNS records and verification status (private alpha)"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all domains",
          "description": "Get all sending domains with their verification status and DNS record requirements"
        },
        {
          "name": "List Tracking Domains",
          "value": "listTrackingDomains",
          "action": "List tracking domains",
          "description": "List all tracking domains for a given domain (private alpha)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update domain settings",
          "description": "Update domain settings such as click tracking, open tracking, or TLS requirements"
        },
        {
          "name": "Verify",
          "value": "verify",
          "action": "Verify domain DNS records",
          "description": "Trigger verification of DNS records for a domain. Use after configuring DNS to check if domain is ready for sending."
        },
        {
          "name": "Verify Tracking Domain",
          "value": "verifyTrackingDomain",
          "action": "Verify a tracking domain",
          "description": "Trigger DNS verification for a tracking domain (private alpha)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domains"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a broadcast campaign",
          "description": "Create a new email broadcast campaign with subject, content, and target audience for bulk email sending"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a broadcast",
          "description": "Permanently delete a broadcast campaign by its broadcast ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get broadcast details",
          "description": "Retrieve details of a specific broadcast including status, subject, audience, and send statistics"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all broadcasts",
          "description": "Get a list of all broadcast campaigns with their status, subject lines, and creation dates"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a broadcast",
          "description": "Trigger the sending of a broadcast campaign to its target audience immediately or at a scheduled time"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a broadcast",
          "description": "Update a broadcast's subject, content, audience, or schedule before it is sent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "broadcasts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact segment",
          "description": "Create a new contact segment for grouping contacts based on criteria or manual assignment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a segment",
          "description": "Permanently delete a segment by its segment ID. Contacts in the segment are not deleted."
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get segment details",
          "description": "Retrieve details of a specific segment including its name, contact count, and creation date"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all segments",
          "description": "Get all segments in the account with their names, IDs, and contact counts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "segments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a subscription topic",
          "description": "Create a new subscription topic for organizing email preferences and managing unsubscribe options"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a topic",
          "description": "Permanently delete a subscription topic by its topic ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get topic details",
          "description": "Retrieve details of a specific topic including its name, description, and subscriber count"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all topics",
          "description": "Get all subscription topics with their names, IDs, and subscriber counts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a topic",
          "description": "Update a topic's name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "topics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Add to Segment",
          "value": "addToSegment",
          "action": "Add contact to a segment",
          "description": "Add an existing contact to a segment by providing the contact ID and segment ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new contact",
          "description": "Create a new contact with email address, optional name, custom properties, and segment/topic assignments"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Permanently delete a contact by their contact ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get contact details",
          "description": "Retrieve a contact's details including email, name, properties, and subscription status by contact ID"
        },
        {
          "name": "Get Topics",
          "value": "getTopics",
          "action": "Get contact topic subscriptions",
          "description": "Get all topic subscriptions (opt-in/opt-out status) for a specific contact"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all contacts",
          "description": "Get a list of all contacts in the account with their email addresses and basic information"
        },
        {
          "name": "List Segments",
          "value": "listSegments",
          "action": "List contact segments",
          "description": "Get all segments that a specific contact belongs to"
        },
        {
          "name": "Remove From Segment",
          "value": "removeFromSegment",
          "action": "Remove contact from segment",
          "description": "Remove a contact from a segment by providing the contact ID and segment ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update contact details",
          "description": "Update a contact's information including name, email, properties, or unsubscribe status"
        },
        {
          "name": "Update Topics",
          "value": "updateTopics",
          "action": "Update contact topic subscriptions",
          "description": "Update a contact's topic subscription preferences (opt-in or opt-out of specific topics)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact property",
          "description": "Create a new custom contact property (metadata field) for storing additional information about contacts"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact property",
          "description": "Permanently delete a contact property. This removes the property from all contacts."
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get contact property details",
          "description": "Retrieve details of a specific contact property including its name, type, and configuration"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all contact properties",
          "description": "Get all custom contact properties defined for storing contact metadata"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact property",
          "description": "Update a contact property's name or configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactProperties"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook endpoint",
          "description": "Create a new webhook endpoint to receive real-time notifications for email events like delivered, opened, clicked, bounced"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "description": "Delete a webhook endpoint. Events will no longer be sent to this URL."
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get webhook details",
          "description": "Retrieve details of a webhook including its URL, subscribed events, and status"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all webhooks",
          "description": "Get all configured webhooks with their URLs, event subscriptions, and status"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "description": "Update a webhook's URL or the events it is subscribed to"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhooks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get received email details",
          "description": "Retrieve a specific received email including sender, subject, body, and headers by email ID"
        },
        {
          "name": "Get Attachment",
          "value": "getAttachment",
          "action": "Download attachment from received email",
          "description": "Download a specific attachment from a received email by email ID and attachment ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all received emails",
          "description": "Get all emails received through inbound email processing with sender, subject, and timestamps"
        },
        {
          "name": "List Attachments",
          "value": "listAttachments",
          "action": "List attachments from received email",
          "description": "Get all attachments from a received email including filenames, sizes, and content types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "receivingEmails"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a workflow",
          "description": "Create a new workflow to automate email sequences"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a workflow",
          "description": "Remove an existing workflow"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get workflow details",
          "description": "Retrieve a single workflow with its steps and edges"
        },
        {
          "name": "Get Run",
          "value": "getRun",
          "action": "Get a workflow run",
          "description": "Retrieve a single workflow run"
        },
        {
          "name": "Get Run Step",
          "value": "getRunStep",
          "action": "Get a workflow run step",
          "description": "Retrieve a single workflow run step"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all workflows",
          "description": "Retrieve a list of workflows"
        },
        {
          "name": "List Run Steps",
          "value": "listRunSteps",
          "action": "List workflow run steps",
          "description": "Retrieve a list of workflow run steps"
        },
        {
          "name": "List Runs",
          "value": "listRuns",
          "action": "List workflow runs",
          "description": "Retrieve a list of workflow runs"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a workflow",
          "description": "Update an existing workflow (enable or disable)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflows"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an event",
          "description": "Create a new event that can be used to trigger workflows"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an event",
          "description": "Remove an existing event by ID or name"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get event details",
          "description": "Retrieve a single event by ID or name"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all events",
          "description": "Retrieve a list of events"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send an event",
          "description": "Send a named event to trigger matching workflows"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an event",
          "description": "Update an existing event schema"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel a scheduled email",
      "description": "Cancel a previously scheduled email by its email ID before it gets sent"
    },
    {
      "name": "Get Attachment",
      "value": "getAttachment",
      "action": "Get attachment from email",
      "description": "Download a specific attachment from a sent email using the email ID and attachment ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all sent emails",
      "description": "Get a list of all previously sent emails with their status, subject, and recipients"
    },
    {
      "name": "List Attachments",
      "value": "listAttachments",
      "action": "List email attachments",
      "description": "Get all attachments from a sent email by providing the email ID"
    },
    {
      "name": "Retrieve",
      "value": "retrieve",
      "action": "Get email details",
      "description": "Get details of a specific sent email including subject, recipients, status, and timestamps"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a new email",
      "description": "Send a new email to one or more recipients with HTML or plain text content, attachments, and optional scheduling"
    },
    {
      "name": "Send and Wait for Response",
      "value": "sendAndWait",
      "action": "Send email and wait for recipient response",
      "description": "Send an email with response buttons and pause workflow execution until the recipient clicks a response"
    },
    {
      "name": "Send Batch",
      "value": "sendBatch",
      "action": "Send multiple emails in batch",
      "description": "Send up to 100 emails in a single API call for bulk email delivery with individual customization"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update scheduled email time",
      "description": "Reschedule a scheduled email by updating its scheduled_at time before it is sent"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an email template",
      "description": "Create a new reusable email template with HTML content and dynamic variables for personalization"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a template",
      "description": "Permanently delete an email template by its template ID"
    },
    {
      "name": "Duplicate",
      "value": "duplicate",
      "action": "Duplicate a template",
      "description": "Create a copy of an existing template with a new name for easy customization"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get template details",
      "description": "Retrieve a template's details including HTML content, variables, and publish status by template ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all templates",
      "description": "Get all email templates with their names, IDs, and publish status"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a template",
      "description": "Publish a template to make it available for sending emails. Required before a template can be used in email operations."
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a template",
      "description": "Update a template's name, subject, HTML content, or variables"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Add a new sending domain",
      "description": "Add a new sending domain for email authentication. Returns DNS records that must be configured for verification."
    },
    {
      "name": "Create Tracking Domain",
      "value": "createTrackingDomain",
      "action": "Create a tracking domain",
      "description": "Create a custom domain for click and open tracking (private alpha)"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a domain",
      "description": "Remove a sending domain from your account. Emails can no longer be sent from this domain after deletion."
    },
    {
      "name": "Delete Tracking Domain",
      "value": "deleteTrackingDomain",
      "action": "Delete a tracking domain",
      "description": "Remove an existing click tracking domain (private alpha)"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get domain details",
      "description": "Retrieve details of a domain including DNS records, verification status, and configuration"
    },
    {
      "name": "Get Tracking Domain",
      "value": "getTrackingDomain",
      "action": "Get tracking domain details",
      "description": "Retrieve a single click tracking domain with its DNS records and verification status (private alpha)"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all domains",
      "description": "Get all sending domains with their verification status and DNS record requirements"
    },
    {
      "name": "List Tracking Domains",
      "value": "listTrackingDomains",
      "action": "List tracking domains",
      "description": "List all tracking domains for a given domain (private alpha)"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update domain settings",
      "description": "Update domain settings such as click tracking, open tracking, or TLS requirements"
    },
    {
      "name": "Verify",
      "value": "verify",
      "action": "Verify domain DNS records",
      "description": "Trigger verification of DNS records for a domain. Use after configuring DNS to check if domain is ready for sending."
    },
    {
      "name": "Verify Tracking Domain",
      "value": "verifyTrackingDomain",
      "action": "Verify a tracking domain",
      "description": "Trigger DNS verification for a tracking domain (private alpha)"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a broadcast campaign",
      "description": "Create a new email broadcast campaign with subject, content, and target audience for bulk email sending"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a broadcast",
      "description": "Permanently delete a broadcast campaign by its broadcast ID"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get broadcast details",
      "description": "Retrieve details of a specific broadcast including status, subject, audience, and send statistics"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all broadcasts",
      "description": "Get a list of all broadcast campaigns with their status, subject lines, and creation dates"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a broadcast",
      "description": "Trigger the sending of a broadcast campaign to its target audience immediately or at a scheduled time"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a broadcast",
      "description": "Update a broadcast's subject, content, audience, or schedule before it is sent"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact segment",
      "description": "Create a new contact segment for grouping contacts based on criteria or manual assignment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a segment",
      "description": "Permanently delete a segment by its segment ID. Contacts in the segment are not deleted."
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get segment details",
      "description": "Retrieve details of a specific segment including its name, contact count, and creation date"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all segments",
      "description": "Get all segments in the account with their names, IDs, and contact counts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a subscription topic",
      "description": "Create a new subscription topic for organizing email preferences and managing unsubscribe options"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a topic",
      "description": "Permanently delete a subscription topic by its topic ID"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get topic details",
      "description": "Retrieve details of a specific topic including its name, description, and subscriber count"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all topics",
      "description": "Get all subscription topics with their names, IDs, and subscriber counts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a topic",
      "description": "Update a topic's name or description"
    },
    {
      "name": "Add to Segment",
      "value": "addToSegment",
      "action": "Add contact to a segment",
      "description": "Add an existing contact to a segment by providing the contact ID and segment ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new contact",
      "description": "Create a new contact with email address, optional name, custom properties, and segment/topic assignments"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Permanently delete a contact by their contact ID"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get contact details",
      "description": "Retrieve a contact's details including email, name, properties, and subscription status by contact ID"
    },
    {
      "name": "Get Topics",
      "value": "getTopics",
      "action": "Get contact topic subscriptions",
      "description": "Get all topic subscriptions (opt-in/opt-out status) for a specific contact"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all contacts",
      "description": "Get a list of all contacts in the account with their email addresses and basic information"
    },
    {
      "name": "List Segments",
      "value": "listSegments",
      "action": "List contact segments",
      "description": "Get all segments that a specific contact belongs to"
    },
    {
      "name": "Remove From Segment",
      "value": "removeFromSegment",
      "action": "Remove contact from segment",
      "description": "Remove a contact from a segment by providing the contact ID and segment ID"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update contact details",
      "description": "Update a contact's information including name, email, properties, or unsubscribe status"
    },
    {
      "name": "Update Topics",
      "value": "updateTopics",
      "action": "Update contact topic subscriptions",
      "description": "Update a contact's topic subscription preferences (opt-in or opt-out of specific topics)"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact property",
      "description": "Create a new custom contact property (metadata field) for storing additional information about contacts"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact property",
      "description": "Permanently delete a contact property. This removes the property from all contacts."
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get contact property details",
      "description": "Retrieve details of a specific contact property including its name, type, and configuration"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all contact properties",
      "description": "Get all custom contact properties defined for storing contact metadata"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact property",
      "description": "Update a contact property's name or configuration"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook endpoint",
      "description": "Create a new webhook endpoint to receive real-time notifications for email events like delivered, opened, clicked, bounced"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "description": "Delete a webhook endpoint. Events will no longer be sent to this URL."
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get webhook details",
      "description": "Retrieve details of a webhook including its URL, subscribed events, and status"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all webhooks",
      "description": "Get all configured webhooks with their URLs, event subscriptions, and status"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "description": "Update a webhook's URL or the events it is subscribed to"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get received email details",
      "description": "Retrieve a specific received email including sender, subject, body, and headers by email ID"
    },
    {
      "name": "Get Attachment",
      "value": "getAttachment",
      "action": "Download attachment from received email",
      "description": "Download a specific attachment from a received email by email ID and attachment ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all received emails",
      "description": "Get all emails received through inbound email processing with sender, subject, and timestamps"
    },
    {
      "name": "List Attachments",
      "value": "listAttachments",
      "action": "List attachments from received email",
      "description": "Get all attachments from a received email including filenames, sizes, and content types"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a workflow",
      "description": "Create a new workflow to automate email sequences"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a workflow",
      "description": "Remove an existing workflow"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get workflow details",
      "description": "Retrieve a single workflow with its steps and edges"
    },
    {
      "name": "Get Run",
      "value": "getRun",
      "action": "Get a workflow run",
      "description": "Retrieve a single workflow run"
    },
    {
      "name": "Get Run Step",
      "value": "getRunStep",
      "action": "Get a workflow run step",
      "description": "Retrieve a single workflow run step"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all workflows",
      "description": "Retrieve a list of workflows"
    },
    {
      "name": "List Run Steps",
      "value": "listRunSteps",
      "action": "List workflow run steps",
      "description": "Retrieve a list of workflow run steps"
    },
    {
      "name": "List Runs",
      "value": "listRuns",
      "action": "List workflow runs",
      "description": "Retrieve a list of workflow runs"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a workflow",
      "description": "Update an existing workflow (enable or disable)"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an event",
      "description": "Create a new event that can be used to trigger workflows"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an event",
      "description": "Remove an existing event by ID or name"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get event details",
      "description": "Retrieve a single event by ID or name"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all events",
      "description": "Retrieve a list of events"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send an event",
      "description": "Send a named event to trigger matching workflows"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an event",
      "description": "Update an existing event schema"
    }
  ]

npm_readme:
  <h1 align="center">
    <br>
    <a href="/"><img src=".github/media/resend-header.png" alt="n8n-nodes-resend" width="900"></a>
    <br>
  </h1>

  <p align="center">
  	<img alt="NPM Version" src="https://img.shields.io/npm/v/n8n-nodes-resend">
  	<img alt="GitHub License" src="https://img.shields.io/github/license/resend/n8n-nodes-resend">
  	<img alt="NPM Downloads" src="https://img.shields.io/npm/dm/n8n-nodes-resend">
  	<img alt="NPM Last Update" src="https://img.shields.io/npm/last-update/n8n-nodes-resend">
  	<img alt="Static Badge" src="https://img.shields.io/badge/n8n-2.6.4-EA4B71?logo=n8n">
  </p>

  <p align="center">
    <a href="#installation">Installation</a> |
    <a href="#credentials">Credentials</a> |
    <a href="#human-in-the-loop">Human in the Loop</a> |
    <a href="#resources">Resources</a> |
    <a href="#trigger-events">Trigger Events</a> |
    <a href="#limitations">Limitations</a> |
    <a href="#development">Development</a>
  </p>

  ---

  The official node for [n8n](https://n8n.io) that integrates with the [Resend](https://resend.com) API. Send emails, manage contacts, handle domains, and receive webhooks.

  ## API Coverage

  > [!WARNING]
  > Audiences are deprecated in favor of Segments and won't be supported in this node. Please use Segments for contact grouping and targeting.

  The table below shows which endpoints are currently implemented:

  <details>
  <summary><strong>View all endpoints</strong></summary>

  | API Resource           | Endpoint              | Status  | Operations                                                                                                       |
  | ---------------------- | --------------------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
  | **Email**              | `/emails`             | ✅ Full | Send, Send Batch, Send and Wait, List, Get, Update, Cancel, List Attachments, Get Attachment                     |
  | **Receiving Emails**   | `/emails/receiving`   | ✅ Full | List, Get, List Attachments, Get Attachment                                                                      |
  | **Domains**            | `/domains`            | ✅ Full | Create, List, Get, Update, Delete, Verify                                                                        |
  | **Templates**          | `/templates`          | ✅ Full | Create, List, Get, Update, Delete, Publish, Duplicate                                                            |
  | **Contacts**           | `/contacts`           | ✅ Full | Create, List, Get, Update, Delete, Add to Segment, List Segments, Remove from Segment, Get Topics, Update Topics |
  | **Broadcasts**         | `/broadcasts`         | ✅ Full | Create, List, Get, Update, Delete, Send                                                                          |
  | **Segments**           | `/segments`           | ✅ Full | Create, List, Get, Delete                                                                                        |
  | **Topics**             | `/topics`             | ✅ Full | Create, List, Get, Update, Delete                                                                                |
  | **Contact Properties** | `/contact-properties` | ✅ Full | Create, List, Get, Update, Delete                                                                                |
  | **Webhooks**           | `/webhooks`           | ✅ Full | Create, List, Get, Update, Delete                                                                                |

  </details>

  ## Installation

  1. Make a new workflow or open an existing one
  2. Open the nodes panel by selecting **+** or pressing **Tab**
  3. Search for **Resend**
  4. Select **Install** to install the node for your instance

  ## Credentials

  This package uses two separate credentials:

  ### Resend API

  1. Get your API key from [Resend Dashboard](https://resend.com/api-keys)
  2. In n8n, go to **Credentials** > **Add credential**
  3. Search for **Resend API** and paste your key

  This credential is used by the main **Resend** node for all API operations.

  ### Resend Webhook Signing Secret

  1. Create a webhook endpoint in your [Resend Dashboard](https://resend.com/webhooks)
  2. Copy the signing secret (starts with `whsec_`)
  3. In n8n, go to **Credentials** > **Add credential**
  4. Search for **Resend Webhook Signing Secret** and paste your secret

  This credential is used exclusively by the **Resend Trigger** node for webhook signature verification. Each webhook endpoint in Resend has its own unique signing secret.

  ## Human in the Loop

  The **Send and Wait for Response** operation enables human-in-the-loop workflows. Send an email and pause the workflow until the recipient responds via approval buttons or a form.

  ### Features

  - **Approval Workflows**: Send emails with Approve/Decline buttons for quick decisions
  - **Free Text Responses**: Collect text input via a response form
  - **Configurable Wait Time**: Set a timeout or wait indefinitely
  - **Secure Callbacks**: Responses use signed URLs for security

  ### How to Use

  The workflow pauses at the email step and resumes automatically once the recipient clicks a button or submits the response form.

  1. In the node panel, go to **Human in the Loop** > **Resend**
  2. Or select **Email** resource > **Send and Wait for Response** operation

  ### Configuration Options

  | Option                   | Description                                              |
  | ------------------------ | -------------------------------------------------------- |
  | **Response Type**        | Choose between Approval (buttons) or Free Text (form)    |
  | **Approval Type**        | Single button (Approve only) or Double (Approve/Decline) |
  | **Button Labels**        | Customize the button text                                |
  | **Button Styles**        | Primary or Secondary styling                             |
  | **Message Button Label** | Label for the form link button (Free Text mode)          |
  | **Response Form Title**  | Title shown on the response form                         |
  | **Limit Wait Time**      | Set a timeout for the wait period                        |

  ## Resources

  <details>
  <summary><strong>Email</strong></summary>

  | Operation        | Description                                       |
  | ---------------- | ------------------------------------------------- |
  | Send             | Send a single email with optional attachments     |
  | Send Batch       | Send up to 100 emails in one request              |
  | Send and Wait    | Send email and wait for recipient response (HITL) |
  | List             | List sent emails                                  |
  | Get              | Retrieve email details and status                 |
  | Cancel           | Cancel a scheduled email                          |
  | Update           | Modify a scheduled email                          |
  | List Attachments | List attachments for a sent email                 |
  | Get Attachment   | Get a specific attachment from a sent email       |

  </details>

  <details>
  <summary><strong>Receiving Email</strong></summary>

  | Operation        | Description                                     |
  | ---------------- | ----------------------------------------------- |
  | List             | List all received emails                        |
  | Get              | Retrieve a received email                       |
  | List Attachments | List attachments for a received email           |
  | Get Attachment   | Get a specific attachment from a received email |

  </details>

  <details>
  <summary><strong>Contact</strong></summary>

  | Operation           | Description                              |
  | ------------------- | ---------------------------------------- |
  | Create              | Add a new contact                        |
  | Get                 | Retrieve contact details                 |
  | Update              | Modify contact information               |
  | Delete              | Remove a contact                         |
  | List                | List all contacts                        |
  | Add to Segment      | Add a contact to a segment               |
  | List Segments       | List segments for a contact              |
  | Remove From Segment | Remove a contact from a segment          |
  | Get Topics          | Get topic subscriptions for a contact    |
  | Update Topics       | Update topic subscriptions for a contact |

  </details>

  <details>
  <summary><strong>Contact Property</strong></summary>

  | Operation | Description                      |
  | --------- | -------------------------------- |
  | Create    | Create a custom contact property |
  | Get       | Retrieve property details        |
  | Update    | Modify property settings         |
  | Delete    | Remove a property                |
  | List      | List all contact properties      |

  </details>

  <details>
  <summary><strong>Segment</strong></summary>

  | Operation | Description                                          |
  | --------- | ---------------------------------------------------- |
  | Create    | Create a new segment with optional filter conditions |
  | Get       | Retrieve segment details                             |
  | Delete    | Remove a segment                                     |
  | List      | List all segments                                    |

  </details>

  <details>
  <summary><strong>Topic</strong></summary>

  | Operation | Description                 |
  | --------- | --------------------------- |
  | Create    | Create a subscription topic |
  | Get       | Retrieve topic details      |
  | Update    | Modify topic settings       |
  | Delete    | Remove a topic              |
  | List      | List all topics             |

  </details>

  <details>
  <summary><strong>Broadcast</strong></summary>

  | Operation | Description                   |
  | --------- | ----------------------------- |
  | Create    | Create an email campaign      |
  | Get       | Retrieve broadcast details    |
  | Send      | Send a broadcast to a segment |
  | Update    | Modify broadcast settings     |
  | Delete    | Remove a broadcast            |
  | List      | List all broadcasts           |

  </details>

  <details>
  <summary><strong>Template</strong></summary>

  | Operation | Description                    |
  | --------- | ------------------------------ |
  | Create    | Create an email template       |
  | Get       | Retrieve template details      |
  | Update    | Modify a template              |
  | Delete    | Remove a template              |
  | List      | List all templates             |
  | Publish   | Publish a template             |
  | Duplicate | Duplicate an existing template |

  </details>

  <details>
  <summary><strong>Domain</strong></summary>

  | Operation | Description                 |
  | --------- | --------------------------- |
  | Create    | Add a sending domain        |
  | Get       | Retrieve domain details     |
  | Verify    | Trigger domain verification |
  | Update    | Modify domain settings      |
  | Delete    | Remove a domain             |
  | List      | List all domains            |

  </details>

  <details>
  <summary><strong>Webhook</strong></summary>

  | Operation | Description               |
  | --------- | ------------------------- |
  | Create    | Create a webhook endpoint |
  | Get       | Retrieve webhook details  |
  | Update    | Modify webhook settings   |
  | Delete    | Remove a webhook          |
  | List      | List all webhooks         |

  </details>

  ## Trigger Events

  The **Resend Trigger** node receives webhooks for real-time email events. Signatures are automatically verified using Svix.

  > **Note:** The trigger node requires the **Resend Webhook Signing Secret** credential (separate from the Resend API credential). See the [Credentials](#credentials) section for setup instructions.

  <details>
  <summary><strong>View all events</strong></summary>

  | Event                    | Description                          |
  | ------------------------ | ------------------------------------ |
  | `email.sent`             | Email sent to recipient              |
  | `email.delivered`        | Email delivered successfully         |
  | `email.delivery_delayed` | Email delivery delayed               |
  | `email.opened`           | Recipient opened the email           |
  | `email.clicked`          | Link clicked in email                |
  | `email.bounced`          | Email bounced                        |
  | `email.complained`       | Spam complaint received              |
  | `email.failed`           | Email failed to send due to an error |
  | `email.received`         | Inbound email received by Resend     |
  | `email.scheduled`        | Email scheduled to be sent           |
  | `email.suppressed`       | Email suppressed by Resend           |
  | `contact.created`        | New contact added                    |
  | `contact.updated`        | Contact modified                     |
  | `contact.deleted`        | Contact removed                      |
  | `domain.created`         | New domain added                     |
  | `domain.updated`         | Domain modified                      |
  | `domain.deleted`         | Domain removed                       |

  </details>

  ## Limitations

  - Maximum email size: 40MB (including attachments)
  - Attachments not supported with scheduled emails

  ## Development

  ```bash
  git clone https://github.com/resend/n8n-nodes-resend.git
  cd n8n-nodes-resend
  npm install
  npm run build
  npm run lint
  ```

  ## License

  [MIT](LICENSE.md)

  <p align="center">
    <a href="https://github.com/resend/n8n-nodes-resend">GitHub</a> |
    <a href="https://github.com/resend/n8n-nodes-resend/issues">Issues</a> |
    <a href="https://resend.com/docs">Resend Docs</a>
  </p>

ai_documentation_summary:
  {"purpose":"This n8n node integrates with the Resend email platform to send emails, manage contacts, create broadcasts, handle templates and domains, and receive webhooks.","capabilities":["Send emails (single, batch, with wait)","List and retrieve email details and attachments","Manage email domains (create, verify, update, delete)","Create and manage email templates","Manage contacts and segments","Create and send broadcasts","Manage topics and contact properties","Set up and manage webhooks","Human-in-the-loop workflows with approval buttons and form responses"],"authentication":"API key required (Resend API key) and Webhook Signing Secret (whsec_) for trigger nodes","commonUseCases":["Transactional email notifications","Marketing email campaigns and broadcasts","Customer segmentation and targeted messaging","Email verification and domain management","Workflow pauses for user approval or feedback collection"],"limitations":["Audiences feature is deprecated; only Segments are supported","Webhook signing secrets are unique per endpoint and must be configured separately"],"relatedNodes":["Resend Trigger","Human in the Loop (Resend)","Generic HTTP Request","Generic Webhook"]}


node_type: n8n-nodes-deliverect.deliverectTrigger
package_name: n8n-nodes-deliverect
display_name: Deliverect Order Webhook Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: deliverect-stefaang
author_github_url: https://github.com/Deliverect/
npm_package_name: n8n-nodes-deliverect
npm_version: 0.1.6
community_fetched_at: 2026-03-25T21:19:40.775Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Triggers the workflow when order events are received from Deliverect. Handles new orders, order status updates, and courier/delivery updates.

npm_readme:
  # n8n-nodes-deliverect

  This is an n8n community node. It lets you use [Deliverect](https://developers.deliverect.com/) 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)
  [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.

  ## Operations

  Store API: 

  * get stores
  * get snoozed products
  * set snoozed products

  POSAPI

  * sync products

  Channel API

  * publish menu

  ## Credentials

  [Request](https://developers.deliverect.com/docs/getting-started) a client credentials keypair with Deliverect API support.

  Bearer token support is WIP.

  ## Compatibility

  Tested with N8N 1.97.1

  ## Usage

  If you're new with N8N, [try it out](https://docs.n8n.io/try-it-out/) first.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Deliverect API documentation](https://developers.deliverect.com)

  ## Version history

  v1.0: Initial version

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when order events, status updates, or courier/delivery updates are received from Deliverect.","capabilities":["Monitor new orders","Track order status updates","Handle courier and delivery updates","Retrieve stores","Retrieve snoozed products","Set snoozed products","Sync products via POSAPI","Publish menu via Channel API"],"authentication":"API key required (Client credentials keypair)","commonUseCases":["Automate order processing upon delivery confirmation","Update inventory based on order status changes","Trigger notifications for delivery updates","Sync product data between POS and delivery systems"],"limitations":["Bearer token support is currently in progress (WIP)","Limited to Deliverect-specific operations"],"relatedNodes":["Deliverect Store","Deliverect Product","Deliverect Order","Deliverect Courier"]}


node_type: n8n-nodes-medullar.medullar
package_name: n8n-nodes-medullar
display_name: Medullar
description: AI-powered discovery & insight platform that acts as your extended digital mind.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: medullar_solutions
author_github_url: https://github.com/medullar/n8n-node.git
npm_package_name: n8n-nodes-medullar
npm_version: 0.2.3
community_fetched_at: 2026-03-25T21:19:40.776Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "space",
      "options": [
        {
          "name": "Space",
          "value": "space"
        }
      ],
      "required": true,
      "description": "Interact with a Medullar Space",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list-space",
      "options": [
        {
          "name": "Add Space Record",
          "value": "add-record",
          "action": "Add record to space",
          "description": "Adds a Record into a Space"
        },
        {
          "name": "Ask Space",
          "value": "ask-space",
          "action": "Ask a question to a space",
          "description": "Ask anything to a Space"
        },
        {
          "name": "Create Space",
          "value": "create-new-space",
          "action": "Create new space",
          "description": "Create a new Space"
        },
        {
          "name": "Delete Space",
          "value": "delete-space",
          "action": "Delete a space",
          "description": "Delete a Space"
        },
        {
          "name": "List Spaces",
          "value": "list-space",
          "action": "List all spaces",
          "description": "List all user Spaces"
        },
        {
          "name": "Rename Space",
          "value": "rename-space",
          "action": "Rename a space",
          "description": "Rename a Space"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "space"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Space Record",
      "value": "add-record",
      "action": "Add record to space",
      "description": "Adds a Record into a Space"
    },
    {
      "name": "Ask Space",
      "value": "ask-space",
      "action": "Ask a question to a space",
      "description": "Ask anything to a Space"
    },
    {
      "name": "Create Space",
      "value": "create-new-space",
      "action": "Create new space",
      "description": "Create a new Space"
    },
    {
      "name": "Delete Space",
      "value": "delete-space",
      "action": "Delete a space",
      "description": "Delete a Space"
    },
    {
      "name": "List Spaces",
      "value": "list-space",
      "action": "List all spaces",
      "description": "List all user Spaces"
    },
    {
      "name": "Rename Space",
      "value": "rename-space",
      "action": "Rename a space",
      "description": "Rename a Space"
    }
  ]

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

  # n8n-nodes-medullar

  ![Icon image](https://cdn.medullar.com/images/web/logo/medullar_favicon_128x128.png)

  This is an [n8n](https://n8n.io) community node that lets you integrate seamlessly with Medullar’s collaborative knowledge platform in your n8n workflows [Medullar](https://medullar.com).

  **Medullar** is an AI-powered workspace for actionable team intelligence—capturing insights, connecting conversations, and automating knowledge sharing across your daily tools. With this node, you can connect to your Medullar Spaces, fetch key insights, trigger knowledge actions, and weave Medullar’s contextual smarts directly into your workflow automation.

  Use this node to unify scattered information, automate knowledge handoffs, and bridge project data—so your workflows become not just automated, but genuinely intelligent.

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

  ## Features
  - **List Spaces**: Retrieve all your Medullar Spaces to keep track of your collaborative environments.
  - **Create Space**: Easily create new Spaces to organize your projects and knowledge.
  - **Add Space Record**: Add various types of content to your Spaces including text, URLs, images, and files to build your knowledge base.
  - **Ask Space**: Interact with your Medullar Spaces using multiple AI modes:
    - MedullaryAI Agent (OpenAI and xAI Grok variants)
    - MedullaryAI Fact Check for verification
    - MedullaryAI Researcher for in-depth analysis
    - MedullaryAI Sales Researcher for sales intelligence
    - MedullaryAI Search Agent for targeted searches
    - Optional Deep Analysis for more accurate but slower responses
  - **Rename Space**: Update the name of existing Spaces to better reflect their purpose.
  - **Delete Space**: Remove Spaces that are no longer needed to keep your workspace organized.

  ## Credentials

  To use this node, you need to set up credentials for Medullar. You can find your API key in your Medullar account settings.

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Requires Medullar paid plan

  ## Resources
  - [n8n Documentation](https://docs.n8n.io)
  - [Medullar](https://www.medullar.com)

  ## License

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

ai_documentation_summary:
  {"purpose":"Integrates Medullar's AI-powered collaborative knowledge platform into n8n workflows to manage spaces, retrieve insights, and trigger knowledge-based actions.","capabilities":["List Medullar Spaces","Create new Spaces","Add content to Spaces (text, URLs, images, files)","Rename Spaces","Delete Spaces","Query Spaces using MedullaryAI Agent","Verify facts using MedullaryAI Fact Check","Conduct in-depth analysis using MedullaryAI Researcher","Gather sales intelligence using MedullaryAI Sales Researcher","Perform targeted searches using MedullaryAI Search Agent"],"authentication":"API key required","commonUseCases":["Automating knowledge sharing across team tools","Unifying scattered information into centralized Spaces","Integrating AI-driven insights into workflow automation","Conducting sales research and fact-checking within workflows"],"limitations":["Requires a Medullar paid plan subscription","Requires n8n version 1.0.0 or later"],"relatedNodes":["Medullar","OpenAI","xAI Grok"]}


node_type: @cloudconvert/n8n-nodes-cloudconvert.cloudConvert
package_name: @cloudconvert/n8n-nodes-cloudconvert
display_name: CloudConvert
description: Use CloudConvert to convert files, create thumbnails, merge files, add watermarks and more!
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: josiasmontag
author_github_url: https://github.com/cloudconvert/n8n-nodes-cloudconvert.git
npm_package_name: @cloudconvert/n8n-nodes-cloudconvert
npm_version: 1.1.1
community_fetched_at: 2026-03-25T21:19:40.777Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "file",
      "options": [
        {
          "name": "Command",
          "value": "command"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Metadata",
          "value": "metadata"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Website",
          "value": "website"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Add Watermark",
          "value": "watermark",
          "action": "Add watermark to a file",
          "description": "Add a watermark to a PDF file, to an image or to a video"
        },
        {
          "name": "Convert File",
          "value": "convert",
          "action": "Convert a file",
          "description": "Convert a file to a different format"
        },
        {
          "name": "Create Archive",
          "value": "archive",
          "action": "Create archive",
          "description": "Create an archive (ZIP, RAR...) for multiple files"
        },
        {
          "name": "Create Thumbnail",
          "value": "thumbnail",
          "action": "Create a thumbnail",
          "description": "Create a thumbnail of a file"
        },
        {
          "name": "Optimize File",
          "value": "optimize",
          "action": "Optimize a file",
          "description": "Optimize / compress a file to reduce its size"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "metadata",
      "options": [
        {
          "name": "Get Metadata",
          "value": "metadata",
          "action": "Get metadata from a file",
          "description": "Extract metadata from files"
        },
        {
          "name": "Write Metadata",
          "value": "metadata/write",
          "action": "Write metadata to a file",
          "description": "Write metadata to files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "metadata"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "pdf/a",
      "options": [
        {
          "name": "Add PDF OCR Layer",
          "value": "pdf/ocr",
          "action": "Add OCR layer to PDF",
          "description": "Add an OCR text layer to scanned PDF files"
        },
        {
          "name": "Convert PDF to PDF/A",
          "value": "pdf/a",
          "action": "Convert PDF to PDF/A",
          "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B"
        },
        {
          "name": "Decrypt PDF",
          "value": "pdf/decrypt",
          "action": "Decrypt PDF",
          "description": "Decrypt a password-protected PDF file"
        },
        {
          "name": "Encrypt PDF",
          "value": "pdf/encrypt",
          "action": "Encrypt PDF",
          "description": "Encrypt a PDF file and optionally set a password and restrictions"
        },
        {
          "name": "Extract Pages From PDF",
          "value": "pdf/extract-pages",
          "action": "Extract pages from PDF",
          "description": "Extract specific pages or page ranges from a PDF file"
        },
        {
          "name": "Merge Files",
          "value": "pdf/merge",
          "action": "Merge files to PDF",
          "description": "Merge multiple files into a single PDF"
        },
        {
          "name": "Rotate PDF Pages",
          "value": "pdf/rotate-pages",
          "action": "Rotate PDF pages",
          "description": "Rotate single pages or all pages of a PDF file"
        },
        {
          "name": "Split PDF Into Pages",
          "value": "pdf/split-pages",
          "action": "Split PDF into pages",
          "description": "Split a PDF into one PDF file per page"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "command",
      "options": [
        {
          "name": "Execute Command",
          "value": "command",
          "action": "Execute command",
          "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "command"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "capture-website",
      "options": [
        {
          "name": "Capture Website",
          "value": "capture-website",
          "action": "Capture website",
          "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "website"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Watermark",
      "value": "watermark",
      "action": "Add watermark to a file",
      "description": "Add a watermark to a PDF file, to an image or to a video"
    },
    {
      "name": "Convert File",
      "value": "convert",
      "action": "Convert a file",
      "description": "Convert a file to a different format"
    },
    {
      "name": "Create Archive",
      "value": "archive",
      "action": "Create archive",
      "description": "Create an archive (ZIP, RAR...) for multiple files"
    },
    {
      "name": "Create Thumbnail",
      "value": "thumbnail",
      "action": "Create a thumbnail",
      "description": "Create a thumbnail of a file"
    },
    {
      "name": "Optimize File",
      "value": "optimize",
      "action": "Optimize a file",
      "description": "Optimize / compress a file to reduce its size"
    },
    {
      "name": "Get Metadata",
      "value": "metadata",
      "action": "Get metadata from a file",
      "description": "Extract metadata from files"
    },
    {
      "name": "Write Metadata",
      "value": "metadata/write",
      "action": "Write metadata to a file",
      "description": "Write metadata to files"
    },
    {
      "name": "Add PDF OCR Layer",
      "value": "pdf/ocr",
      "action": "Add OCR layer to PDF",
      "description": "Add an OCR text layer to scanned PDF files"
    },
    {
      "name": "Convert PDF to PDF/A",
      "value": "pdf/a",
      "action": "Convert PDF to PDF/A",
      "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B"
    },
    {
      "name": "Decrypt PDF",
      "value": "pdf/decrypt",
      "action": "Decrypt PDF",
      "description": "Decrypt a password-protected PDF file"
    },
    {
      "name": "Encrypt PDF",
      "value": "pdf/encrypt",
      "action": "Encrypt PDF",
      "description": "Encrypt a PDF file and optionally set a password and restrictions"
    },
    {
      "name": "Extract Pages From PDF",
      "value": "pdf/extract-pages",
      "action": "Extract pages from PDF",
      "description": "Extract specific pages or page ranges from a PDF file"
    },
    {
      "name": "Merge Files",
      "value": "pdf/merge",
      "action": "Merge files to PDF",
      "description": "Merge multiple files into a single PDF"
    },
    {
      "name": "Rotate PDF Pages",
      "value": "pdf/rotate-pages",
      "action": "Rotate PDF pages",
      "description": "Rotate single pages or all pages of a PDF file"
    },
    {
      "name": "Split PDF Into Pages",
      "value": "pdf/split-pages",
      "action": "Split PDF into pages",
      "description": "Split a PDF into one PDF file per page"
    },
    {
      "name": "Execute Command",
      "value": "command",
      "action": "Execute command",
      "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file"
    },
    {
      "name": "Capture Website",
      "value": "capture-website",
      "action": "Capture website",
      "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG"
    }
  ]

npm_readme:
  # n8n-nodes-cloudconvert

  This is an n8n community node. It lets you use [CloudConvert](https://cloudconvert.com) your n8n workflows.

  CloudConvert is an online file conversion and processing API which allows to convert files, create thumbnails, merge files, add watermarks and more!

  [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

  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 `@cloudconvert/n8n-nodes-cloudconvert` in **Enter 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**.

  After installing the node, you can use it like any other node. n8n displays the node in search results in the **Nodes** panel.

  ## Operations

  It supports these operations:

  - Convert files from one format to another
  - Create thumbnails of files
  - Add watermarks to images, PDFs and videos
  - Capture website screenshots and save websites as PDF
  - Merge multiple input files in one single PDF
  - Create archives (ZIP, RAR...) for multiple input files
  - Get file metadata (EXIF etc)

  ## Credentials

  Create a free CloudConvert account [here](https://cloudconvert.com/register) which allows 25 free credits per day.

  - Generate OAuth 2 credentials (default auth method) here: https://cloudconvert.com/dashboard/api/v2/clients
  - Generate an API key (alternative auth method) here: https://cloudconvert.com/dashboard/api/v2/keys

  ## Compatibility

  Tested against n8n version 0.225+.

  ## Usage

  A typical workflow using this node would look like this:
  <img width="906" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/3cd6f332-74ee-4997-8e67-7d873a124592">

  This is a workflow merging multiple input files in a single PDF:
  <img width="1276" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/9324c941-eb86-48ac-8d83-aaeecf16fd09">



  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [CloudConvert API v2 Documentation](https://cloudconvert.com/api/v2)

ai_documentation_summary:
  {"purpose":"A community node that enables file conversion, thumbnail creation, watermarking, merging, and other processing tasks using the CloudConvert API within n8n workflows.","capabilities":["Convert files between different formats","Create thumbnails for images, PDFs, and videos","Add watermarks to images, PDFs, and videos","Capture website screenshots","Save websites as PDF","Merge multiple input files into a single PDF","Create archives (ZIP, RAR) from multiple input files","Retrieve file metadata (EXIF, etc.)"],"authentication":"OAuth 2 (default) or API Key","commonUseCases":["Automating document format conversion in business workflows","Generating image thumbnails for media galleries","Creating watermarked promotional materials","Consolidating multiple documents into a single PDF","Archiving multiple files for storage or backup"],"limitations":["Requires a free CloudConvert account for usage (25 free credits per day)","Community node status may require accepting installation risks","Compatible with n8n version 0.225+ only"],"relatedNodes":["n8n Community Nodes","CloudConvert API Integration"]}


node_type: n8n-nodes-deeptagger.deepTagger
package_name: n8n-nodes-deeptagger
display_name: DeepTagger
description: Extract structured data from documents using DeepTagger
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: deeptagger
author_github_url: https://github.com/deeptaggerhq/
npm_package_name: n8n-nodes-deeptagger
npm_version: 0.1.7
community_fetched_at: 2026-03-25T21:19:40.777Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "extractData",
      "options": [
        {
          "name": "Extract Data",
          "value": "extractData",
          "action": "Extract data from document",
          "description": "Extract structured data from a document"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Extract Data",
      "value": "extractData",
      "action": "Extract data from document",
      "description": "Extract structured data from a document"
    }
  ]

npm_readme:
  <div align="center">
    <img src="https://raw.githubusercontent.com/deeptaggerhq/n8n-nodes-deeptagger/master/nodes/DeepTagger/deeptagger.svg" alt="DeepTagger Logo" width="200"/>
    <h1>DeepTagger</h1>
    <p><strong>n8n-nodes-deeptagger</strong></p>
  </div>

  This is an n8n community node that integrates [DeepTagger](https://deeptagger.com) into your n8n workflows. DeepTagger is an AI-powered document intelligence platform that automatically extracts structured data from documents like invoices, receipts, forms, and contracts.

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

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

  ## What is DeepTagger?

  DeepTagger uses machine learning to extract structured information from documents automatically. Instead of writing complex extraction rules, you simply annotate a few example documents, and DeepTagger learns to extract similar data from new documents. It's perfect for automating data entry from invoices, receipts, forms, contracts, and other business documents.

  ## What does this node do?

  The DeepTagger node allows you to:
  - **Extract structured data** from documents (PDF, images, text) using pre-trained DeepTagger projects
  - **Process both files and text** - upload documents or send text directly
  - **Return structured JSON** - get clean, structured data ready for use in your workflows
  - **Automate document processing** - integrate document intelligence into your automation workflows

  ## Prerequisites

  - An active [DeepTagger account](https://deeptagger.com)
  - A DeepTagger API key (available in your account settings)
  - At least one trained DeepTagger project with a Project ID

  ## Installation

  ### For n8n Cloud users

  n8n Cloud users can install this node directly from the n8n interface once it has been verified by the n8n team.

  ### For self-hosted n8n instances

  Install the node using npm:

  ```bash
  npm install n8n-nodes-deeptagger
  ```

  Then restart your n8n instance. The DeepTagger node should now appear in your node list.

  Alternatively, you can install it directly from the n8n interface by going to **Settings > Community Nodes** and entering `n8n-nodes-deeptagger`.

  ## Credentials

  To use this node, you'll need to configure your DeepTagger API credentials:

  1. In n8n, click on **Credentials** in the left sidebar
  2. Click **New Credential**
  3. Search for and select **DeepTagger API**
  4. Enter your credentials:
     - **API Key**: Your DeepTagger API key (find this in your DeepTagger account settings)
     - **Base URL**: Leave as default (`https://deeptagger.com/api/v1`) unless using a custom deployment
  5. Click **Save**

  ## Operations

  ### Extract Data

  Extracts structured data from a document or text using a trained DeepTagger project.

  **Parameters:**
  - **Project ID** (required): The ID of your DeepTagger project (e.g., `fo_1759714105892`)
    - Find your Project ID by browsing to https://deeptagger.com/das/fos and opening a project - the ID will be in the URL
  - **Input Type**: Choose between `File` (default) or `Text`
    - **File**: Upload a document (PDF, image, etc.) from a binary property
    - **Text**: Send raw text for extraction
  - **Binary Property** (for File input): Name of the binary property containing the file (default: `data`)
  - **Text** (for Text input): The text content to extract data from

  ## Usage

  ### Example 1: Extract Invoice Data from Uploaded Files

  **Workflow:**
  1. **Webhook Trigger** - Receive file upload
  2. **DeepTagger Node** - Extract invoice data
     - Operation: `Extract Data`
     - Project ID: `fo_1759714105892` (your invoice extraction project)
     - Input Type: `File`
     - Binary Property: `data`
  3. **Process Data** - Use extracted fields (invoice number, total, date, etc.) in subsequent nodes

  **Use Case:** Automatically extract invoice details from uploaded PDFs and save them to your accounting system or database.

  ### Example 2: Extract Receipt Data from Email Attachments

  **Workflow:**
  1. **Email Trigger** - Monitor inbox for new emails with attachments
  2. **Filter** - Only process emails with PDF or image attachments
  3. **DeepTagger Node** - Extract receipt data
     - Project ID: Your receipt extraction project ID
     - Input Type: `File`
  4. **Spreadsheet Node** - Add extracted data to Google Sheets or Airtable

  **Use Case:** Process expense receipts sent via email and automatically log them in a spreadsheet.

  ### Example 3: Extract Form Data from Text

  **Workflow:**
  1. **Webhook Trigger** - Receive form submission as text
  2. **DeepTagger Node** - Extract structured fields
     - Operation: `Extract Data`
     - Project ID: Your form extraction project ID
     - Input Type: `Text`
     - Text: `{{$json["formContent"]}}`
  3. **CRM Node** - Create or update contact with extracted data

  **Use Case:** Parse unstructured form submissions and create structured records in your CRM.

  ### Example 4: Batch Process Documents from Cloud Storage

  **Workflow:**
  1. **Schedule Trigger** - Run daily at midnight
  2. **Google Drive Node** - List new PDFs in a specific folder
  3. **Loop Over Items**
  4. **DeepTagger Node** - Extract data from each document
  5. **Database Node** - Insert extracted data
  6. **Google Drive Node** - Move processed files to archive folder

  **Use Case:** Automatically process new documents uploaded to a shared drive overnight.

  ### Example 5: Extract Contract Details for Legal Review

  **Workflow:**
  1. **Dropbox Trigger** - Monitor contracts folder
  2. **DeepTagger Node** - Extract key contract terms
     - Project ID: Your contract extraction project ID
     - Input Type: `File`
  3. **Slack Node** - Send notification with extracted terms to legal team
  4. **Airtable Node** - Create contract record with extracted metadata

  **Use Case:** Automatically extract and catalog key terms from new contracts for review and tracking.

  ## Troubleshooting

  ### Error: "No API key found in request"

  **Solution:** Make sure you've configured your DeepTagger API credentials correctly. The API key must be set in the credentials and properly selected in the node.

  ### Error: "Project not found" or 404

  **Solution:** Verify your Project ID is correct. You can find it in the URL when viewing your project at https://deeptagger.com/das/fos.

  ### Node not appearing in n8n

  **Solution:**
  - Restart your n8n instance after installation
  - Check that the package is installed: `npm list n8n-nodes-deeptagger`
  - For n8n Cloud, wait for the node to be verified by the n8n team

  ### Extraction results are not accurate

  **Solution:**
  - This node uses your trained DeepTagger projects. If results aren't accurate, you may need to:
    - Add more training examples in DeepTagger
    - Review and correct annotations in your project
    - Check that you're using the correct Project ID for the document type

  ### Binary data / file upload issues

  **Solution:**
  - Ensure the previous node outputs binary data in the property you specified (default: `data`)
  - Use the **Move Binary Data** node if needed to reorganize your binary properties
  - Check that the file type is supported by your DeepTagger project

  ## Resources

  - [DeepTagger Documentation](https://deeptagger.com/docs)
  - [DeepTagger Dashboard](https://deeptagger.com/das/fos)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Forum](https://community.n8n.io)

  ## Support

  For issues related to:
  - **This n8n node**: Open an issue on [GitHub](https://github.com/deeptaggerhq/n8n-nodes-deeptagger/issues)
  - **DeepTagger API or platform**: Contact support@deeptagger.com
  - **n8n platform**: Visit the [n8n community forum](https://community.n8n.io)

  ## License

  [MIT](LICENSE)

  ## Version History

  ### 0.1.0 (2025-01-06)
  - Initial release
  - Extract Data operation with file and text input support

ai_documentation_summary:
  {"purpose":"The DeepTagger node extracts structured data from documents (PDFs, images) or text using pre-trained AI models to automate data entry for invoices, receipts, forms, and contracts.","capabilities":["Extract structured data from uploaded files (PDF, images)","Extract structured data from raw text input","Return clean JSON output","Support multiple input types (File vs Text)","Integrate with various triggers (Webhook, Email, Schedule, Dropbox, Google Drive)"],"authentication":"API key required (DeepTagger API key)","commonUseCases":["Automate invoice data extraction from uploaded PDFs","Process expense receipts from email attachments","Parse unstructured form submissions into structured records","Batch process documents from cloud storage (Google Drive, Dropbox)","Extract contract terms for legal review"],"limitations":["Requires a pre-trained DeepTagger project with a Project ID","Requires an active DeepTagger account","Node is a community node and may not be available in all n8n environments"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.email","n8n-nodes-base.spreadsheet","n8n-nodes-base.googleDrive","n8n-nodes-base.dropbox"]}


node_type: n8n-nodes-keephub.keephub
package_name: n8n-nodes-keephub
display_name: Keephub
description: Interact with Keephub API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: development_keephub
author_github_url: https://github.com/RetailInTouch/
npm_package_name: n8n-nodes-keephub
npm_version: 1.8.1
community_fetched_at: 2026-03-25T21:19:40.778Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "content",
      "options": [
        {
          "name": "Content",
          "value": "content"
        },
        {
          "name": "Form Submission",
          "value": "formSubmission"
        },
        {
          "name": "Orgchart",
          "value": "orgchart"
        },
        {
          "name": "Storage",
          "value": "storage"
        },
        {
          "name": "Task Template",
          "value": "task"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Approve Content",
          "value": "approveContent",
          "action": "Approve content",
          "description": "Approve content pending approval"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create content",
          "description": "Create new content"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete content",
          "description": "Delete content by ID"
        },
        {
          "name": "Find by Content Pool",
          "value": "findByContentPool",
          "action": "Find content by content pool",
          "description": "Find contents by content pool"
        },
        {
          "name": "Find by Group",
          "value": "findByGroup",
          "action": "Find content by group",
          "description": "Find contents by group"
        },
        {
          "name": "Find by Orgunit",
          "value": "findByOrgunit",
          "action": "Find content by orgunit",
          "description": "Find contents by organization unit"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get content by ID",
          "description": "Get content by ID"
        },
        {
          "name": "Reject Content",
          "value": "rejectContent",
          "action": "Reject content",
          "description": "Reject content pending approval"
        },
        {
          "name": "Update by ID",
          "value": "updateById",
          "action": "Update content by ID",
          "description": "Update content by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "content"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFormSubmission",
      "options": [
        {
          "name": "Calculate Response Duration",
          "value": "calculateResponseDuration",
          "action": "Calculate response duration for a form submission",
          "description": "Time from form creation to submission"
        },
        {
          "name": "Find by Form",
          "value": "findByForm",
          "action": "Find form submissions by form",
          "description": "Retrieve all submissions for a given form"
        },
        {
          "name": "Get",
          "value": "getFormSubmission",
          "action": "Get a form submission",
          "description": "Fetch full form submission data"
        },
        {
          "name": "Get Submission Orgunits",
          "value": "getSubmissionOrgunits",
          "action": "Get submission orgunits for a form submission",
          "description": "Fetch orgunit hierarchy"
        },
        {
          "name": "Get Submitter Details",
          "value": "getSubmitterDetails",
          "action": "Get submitter details for a form submission",
          "description": "Fetch full user data of the submitter"
        },
        {
          "name": "Update Submission Orgunits",
          "value": "updateSubmissionOrgunits",
          "action": "Update submission orgunits for a form submission",
          "description": "Change submission orgunit to limit visibility"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "formSubmission"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Get Ancestors",
          "value": "getAncestors",
          "action": "Get ancestors of an orgchart node",
          "description": "Get all ancestors of an orgchart node by ID"
        },
        {
          "name": "Get by External Ref",
          "value": "getByExternalRef",
          "action": "Get an orgchart node by external reference",
          "description": "Get a single orgchart node by external reference"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get an orgchart node",
          "description": "Get a single orgchart node by ID"
        },
        {
          "name": "Get Children",
          "value": "getChildren",
          "action": "Get children of an orgchart node",
          "description": "Get all children/descendants of an orgchart node by ID"
        },
        {
          "name": "Get Parent",
          "value": "getParent",
          "action": "Get parent of an orgchart node",
          "description": "Get the parent of an orgchart node by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "orgchart"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSignedUrl",
      "options": [
        {
          "name": "Get Signed URL",
          "value": "getSignedUrl",
          "action": "Get a signed URL for a stored file",
          "description": "Generate a pre-signed URL for secure access to a stored file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "storage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createTask",
      "options": [
        {
          "name": "Approve Task",
          "value": "approveTask",
          "action": "Approve a task",
          "description": "Approve a pending task"
        },
        {
          "name": "Create Task Template",
          "value": "createTask",
          "action": "Create a task template",
          "description": "Create a new task template"
        },
        {
          "name": "Delete Task Template",
          "value": "deleteTask",
          "action": "Delete a task template",
          "description": "Delete a task template by ID"
        },
        {
          "name": "Get Task",
          "value": "getTaskInstance",
          "action": "Get a task by ID",
          "description": "Fetch a task instance by its ID"
        },
        {
          "name": "Get Task Template by ID",
          "value": "getTask",
          "action": "Get a task template by ID",
          "description": "Fetch a task template by its ID"
        },
        {
          "name": "Get Task Template by Task",
          "value": "getTemplateByTask",
          "action": "Get the task template for a given task",
          "description": "Fetch the task template that a specific task was created from"
        },
        {
          "name": "Get Task Template Progress",
          "value": "getTaskProgress",
          "action": "Get progress for a task template",
          "description": "Get completion progress for a task template"
        },
        {
          "name": "Get Task Template Status Counts",
          "value": "getTaskStatusCounts",
          "action": "Get status counts for a task template",
          "description": "Get status distribution counts for a task template"
        },
        {
          "name": "Get Task Templates by Orgunit",
          "value": "getTaskByOrgunit",
          "action": "Get task templates by orgunit",
          "description": "Find all task templates for a specific organization unit"
        },
        {
          "name": "Reject Task",
          "value": "rejectTask",
          "action": "Reject a task",
          "description": "Reject a pending task with a reason"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get a user by ID",
          "description": "Retrieve a user by their unique ID"
        },
        {
          "name": "Find by Login Name",
          "value": "findByLoginName",
          "action": "Find a user by login name",
          "description": "Retrieve a user by their Login Name"
        },
        {
          "name": "Find by Group",
          "value": "findByGroup",
          "action": "Find a user by group",
          "description": "Find all users in a specific group"
        },
        {
          "name": "Find by Orgunit",
          "value": "findByOrgunit",
          "action": "Find a user by orgunit",
          "description": "Find all users in a specific organization unit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Approve Content",
      "value": "approveContent",
      "action": "Approve content",
      "description": "Approve content pending approval"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create content",
      "description": "Create new content"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete content",
      "description": "Delete content by ID"
    },
    {
      "name": "Find by Content Pool",
      "value": "findByContentPool",
      "action": "Find content by content pool",
      "description": "Find contents by content pool"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find content by group",
      "description": "Find contents by group"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find content by orgunit",
      "description": "Find contents by organization unit"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get content by ID",
      "description": "Get content by ID"
    },
    {
      "name": "Reject Content",
      "value": "rejectContent",
      "action": "Reject content",
      "description": "Reject content pending approval"
    },
    {
      "name": "Update by ID",
      "value": "updateById",
      "action": "Update content by ID",
      "description": "Update content by ID"
    },
    {
      "name": "Calculate Response Duration",
      "value": "calculateResponseDuration",
      "action": "Calculate response duration for a form submission",
      "description": "Time from form creation to submission"
    },
    {
      "name": "Find by Form",
      "value": "findByForm",
      "action": "Find form submissions by form",
      "description": "Retrieve all submissions for a given form"
    },
    {
      "name": "Get",
      "value": "getFormSubmission",
      "action": "Get a form submission",
      "description": "Fetch full form submission data"
    },
    {
      "name": "Get Submission Orgunits",
      "value": "getSubmissionOrgunits",
      "action": "Get submission orgunits for a form submission",
      "description": "Fetch orgunit hierarchy"
    },
    {
      "name": "Get Submitter Details",
      "value": "getSubmitterDetails",
      "action": "Get submitter details for a form submission",
      "description": "Fetch full user data of the submitter"
    },
    {
      "name": "Update Submission Orgunits",
      "value": "updateSubmissionOrgunits",
      "action": "Update submission orgunits for a form submission",
      "description": "Change submission orgunit to limit visibility"
    },
    {
      "name": "Get Ancestors",
      "value": "getAncestors",
      "action": "Get ancestors of an orgchart node",
      "description": "Get all ancestors of an orgchart node by ID"
    },
    {
      "name": "Get by External Ref",
      "value": "getByExternalRef",
      "action": "Get an orgchart node by external reference",
      "description": "Get a single orgchart node by external reference"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get an orgchart node",
      "description": "Get a single orgchart node by ID"
    },
    {
      "name": "Get Children",
      "value": "getChildren",
      "action": "Get children of an orgchart node",
      "description": "Get all children/descendants of an orgchart node by ID"
    },
    {
      "name": "Get Parent",
      "value": "getParent",
      "action": "Get parent of an orgchart node",
      "description": "Get the parent of an orgchart node by ID"
    },
    {
      "name": "Get Signed URL",
      "value": "getSignedUrl",
      "action": "Get a signed URL for a stored file",
      "description": "Generate a pre-signed URL for secure access to a stored file"
    },
    {
      "name": "Approve Task",
      "value": "approveTask",
      "action": "Approve a task",
      "description": "Approve a pending task"
    },
    {
      "name": "Create Task Template",
      "value": "createTask",
      "action": "Create a task template",
      "description": "Create a new task template"
    },
    {
      "name": "Delete Task Template",
      "value": "deleteTask",
      "action": "Delete a task template",
      "description": "Delete a task template by ID"
    },
    {
      "name": "Get Task",
      "value": "getTaskInstance",
      "action": "Get a task by ID",
      "description": "Fetch a task instance by its ID"
    },
    {
      "name": "Get Task Template by ID",
      "value": "getTask",
      "action": "Get a task template by ID",
      "description": "Fetch a task template by its ID"
    },
    {
      "name": "Get Task Template by Task",
      "value": "getTemplateByTask",
      "action": "Get the task template for a given task",
      "description": "Fetch the task template that a specific task was created from"
    },
    {
      "name": "Get Task Template Progress",
      "value": "getTaskProgress",
      "action": "Get progress for a task template",
      "description": "Get completion progress for a task template"
    },
    {
      "name": "Get Task Template Status Counts",
      "value": "getTaskStatusCounts",
      "action": "Get status counts for a task template",
      "description": "Get status distribution counts for a task template"
    },
    {
      "name": "Get Task Templates by Orgunit",
      "value": "getTaskByOrgunit",
      "action": "Get task templates by orgunit",
      "description": "Find all task templates for a specific organization unit"
    },
    {
      "name": "Reject Task",
      "value": "rejectTask",
      "action": "Reject a task",
      "description": "Reject a pending task with a reason"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get a user by ID",
      "description": "Retrieve a user by their unique ID"
    },
    {
      "name": "Find by Login Name",
      "value": "findByLoginName",
      "action": "Find a user by login name",
      "description": "Retrieve a user by their Login Name"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find a user by group",
      "description": "Find all users in a specific group"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find a user by orgunit",
      "description": "Find all users in a specific organization unit"
    }
  ]

npm_readme:
  # 🚀 n8n-nodes-keephub

  <div align="center">
    <img src="https://github.com/RetailInTouch/n8n-nodes-keephub/blob/master/assets/Keephub%20Banner.png?raw=true" alt="Keephub Banner" width="50%" height="auto">
  </div>



  <div align="center">

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-keephub.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-keephub)
  [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-keephub.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-keephub)
  [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](./LICENSE.md)
  [![Maintenance](https://img.shields.io/badge/maintained%3F-yes-green.svg?style=flat-square)](https://github.com/RetailInTouch/n8n-nodes-keephub)

  **Seamlessly integrate Keephub with your n8n workflows** 🎯

  Unlock the power of employee engagement and communication automation with this comprehensive n8n community node for Keephub.

  [🔧 Installation](#-installation) • [📚 Documentation](#-operations) • [🚀 Quick Start](#-quick-start) • [📝 Changelog](#-version-history) • [🤝 Contributing](#-contributing)

  </div>

  ---

  ## 📖 About

  This is a professional **n8n community node** that enables you to harness the full power of **Keephub** within your workflow automation.

  **Keephub** is an enterprise-grade employee engagement platform for managing:

  - 👥 User management and organizational structures
  - 📰 Content creation and distribution
  - ✅ Task management and templates
  - 📋 Dynamic form submissions and responses

  **n8n** is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that puts automation in the hands of technical and business users.

  ---

  ## 🔧 Installation

  ### 📦 Community Nodes Method (Recommended)

  1. Open your n8n instance
  2. Navigate to **Settings** ⚙️ → **Community Nodes**
  3. Click **Install a community node**
  4. Enter: `n8n-nodes-keephub`
  5. Click **Install**
  6. ✅ Done! The node is ready to use

  ### 🛠️ Manual Installation

  **For Local n8n:**

  ```bash
  cd ~/.n8n/nodes
  npm install n8n-nodes-keephub
  ```

  **For Docker:**

  ```bash
  docker exec -it <n8n-container> sh
  cd /home/node/.n8n/nodes
  npm install n8n-nodes-keephub
  # Restart your container
  ```

  **For Node.js n8n:**

  ```bash
  npm install -g n8n-nodes-keephub
  ```

  > [!TIP]
  > Restart your n8n instance and the Keephub node will appear in your palette! 🎨

  ---

  ## 🚀 Quick Start

  ### 1️⃣ Set Up Credentials

  Keephub supports **two separate credential types**. Choose the one that matches your setup:

  **Option A — Bearer Token** (recommended for API integrations):
  1. In n8n, go to **Credentials** 🔐
  2. Create **New** → Search for **Keephub Bearer API**
  3. Fill in:
     - **Client URL**: `https://yourcompany.keephub.io`
     - **Bearer Token**: Your API token
     - **Language** (optional): Default is `en`
  4. Test & Save ✔️

  **Option B — Login Credentials** (username & password):
  1. In n8n, go to **Credentials** 🔐
  2. Create **New** → Search for **Keephub Login API**
  3. Fill in:
     - **Client URL**: `https://yourcompany.keephub.io`
     - **Login Name**: Your username
     - **Password**: Your password
     - **Auth Endpoint** (optional): Custom auth endpoint path
     - **Language** (optional): Default is `en`
  4. Test & Save ✔️

  ### 2️⃣ Add the Node to Your Workflow

  1. Click **+** to add a node
  2. Search for **Keephub**
  3. Select your **Authentication** method (Bearer Token or Login Credentials)
  4. Select your resource and operation
  5. Configure parameters
  6. Run! 🏃

  ### 3️⃣ Example: Get User Info

  ```
  Keephub Node Configuration:
  ├── Resource: User
  ├── Operation: Find by Login Name
  └── Login Name: john.doe

  Output:
  {
    "id": "63bd885034d0466d11073575",
    "loginName": "john.doe",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@company.com"
  }
  ```

  ---

  ## 📚 Operations

  ### 👥 **User Operations**

  | Operation                 | Description                              |
  | ------------------------- | ---------------------------------------- |
  | 🆔 **Get by ID**          | Retrieve a user by their unique ID       |
  | 🔍 **Find by Login Name** | Search users by login name               |
  | 👨‍💼 **Find by Group**      | Fetch all users in a specific group      |
  | 🏢 **Find by Orgunit**    | Retrieve users from an organization unit |

  **Example:**

  ```javascript
  // Get all users in a group
  {
    "resource": "user",
    "operation": "findByGroup",
    "groupId": "group_12345"
  }
  ```

  ---

  ### 📰 **Content Operations**

  | Operation                   | Description                                            |
  | --------------------------- | ------------------------------------------------------ |
  | ✅ **Approve Content**      | Approve content that is pending approval               |
  | ✨ **Create**               | Create new content (news, forms, manuals, etc.)        |
  | 🗑️ **Delete**               | Remove content                                         |
  | 📁 **Find by Content Pool** | Filter content by pool with optional sorting           |
  | 🏷️ **Find by Group**        | Get content assigned to groups with optional sorting   |
  | 🏢 **Find by Orgunit**      | Retrieve content by organization with optional sorting |
  | 📖 **Get by ID**            | Retrieve specific content                              |
  | ❌ **Reject Content**       | Reject content that is pending approval                |
  | ✏️ **Update by ID**         | Modify existing content                                |

  **Example - Create Content:**

  ```json
  {
  	"resource": "content",
  	"operation": "create",
  	"defineContentInput": "json",
  	"contentBody": {
  		"originLanguage": "en",
  		"contentType": "news",
  		"contentPool": "POOL_ID",
  		"title": { "en": "🎉 Company Announcement" },
  		"message": { "en": "<p>Great news everyone!</p>" },
  		"orgchartSelection": { "include": ["root0001"], "exclude": [] }
  	}
  }
  ```

  **Example - Find Content by Orgunit with Filtering:**

  ```json
  {
  	"resource": "content",
  	"operation": "findByOrgunit",
  	"orgunitId": "root0077",
  	"options": {
  		"limit": 50,
  		"skip": 0,
  		"sortBy": "createdAt",
  		"sortOrder": 1
  	}
  }
  ```

  **Content Filtering Parameters:**

  - **Orgunit ID** (required): The organization unit ID

  **Options** (all optional):

  - **Limit**: Maximum number of results (default: 50)
  - **Skip**: Number of results to skip (pagination)
  - **Sort Field**: Field to sort by (e.g., `createdAt`, `updatedAt`)
  - **Sort Order**: `1` for ascending, `-1` for descending

  ---

  ### ✅ **Task Template Operations**

  | Operation                                  | Description                                                            |
  | ------------------------------------------ | ---------------------------------------------------------------------- |
  | ✅ **Approve Task**                     | Approve a pending task, with an optional comment              |
  | ➕ **Create Task Template**              | Create a new task template                                             |
  | 🗑️ **Delete Task Template**              | Remove a task template                                                 |
  | 📋 **Get Task**                          | Fetch a task instance by its ID                                        |
  | 📋 **Get Task Template by ID**           | Retrieve a task template by its own ID                                 |
  | 🔍 **Get Task Template by Task**         | Fetch the template a specific task instance was created from           |
  | 🔍 **Get Task Templates by Orgunit**     | Fetch task templates by organization unit with filtering & pagination  |
  | 📊 **Get Task Template Progress**        | Check task template progress                                           |
  | 📈 **Get Task Template Status Counts**   | View task template completion statistics                               |
  | ❌ **Reject Task**                      | Reject a pending task with a required reason                           |

  **Example - Create Task with JSON Body:**

  ```json
  {
  	"resource": "task",
  	"operation": "createTask",
  	"defineTaskInput": "json",
  	"taskJsonBody": {
  		"title": { "en": "Q4 Performance Review" },
  		"template": {
  			"form": {
  				"fields": [
  					{ "name": "rating", "type": "number" },
  					{ "name": "feedback", "type": "text" }
  				]
  			}
  		}
  	}
  }
  ```

  **Example - Create Task with Additional Fields:**

  ```json
  {
  	"resource": "task",
  	"operation": "createTask",
  	"defineTaskInput": "fields",
  	"taskTitle": "Q4 Performance Review",
  	"taskType": "form",
  	"additionalFields": {
  		"taskMessage": "Please complete your review by end of quarter.",
  		"taskNotification": true
  	}
  }
  ```

  **Example - Get Tasks by Orgunit with Filtering:**

  ```json
  {
  	"resource": "task",
  	"operation": "getTaskByOrgunit",
  	"orgunitId": "root0077",
  	"options": {
  		"limit": 50,
  		"skip": 0,
  		"sortBy": "template.dueDate",
  		"sortOrder": 1,
  		"startDateGte": "2025-11-01T00:00:00Z",
  		"startDateLte": "2025-11-30T23:59:59Z"
  	}
  }
  ```

  **Task Template Create Parameters:**

  - **Task Title** (required): Name of the task template
  - **Task Type** (required): `form`, `confirmation`, or `read`

  **Additional Fields** (optional):

  - **Message**: Custom message body for the task template
  - **Send Notification**: Whether to notify assigned users (`true`/`false`)

  **Task Template Get by Orgunit Parameters:**

  - **Orgunit ID** (required): The organization unit ID to filter task templates

  **Options** (all optional):

  - **Limit**: Maximum number of results (default: 50)
  - **Skip**: Number of results to skip (pagination)
  - **Sort Field**: Field to sort by (e.g., `template.dueDate`)
  - **Sort Order**: `1` for ascending, `-1` for descending
  - **Start Date After**: Filter tasks after this date
  - **Start Date Before**: Filter tasks before this date

  ---

  ### 📋 **Form Submission Operations**

  | Operation                          | Description                                       |
  | ---------------------------------- | ------------------------------------------------- |
  | 🔍 **Find by Form**               | Retrieve all submissions for a form with filtering |
  | 📥 **Get**                         | Fetch complete form submission data               |
  | 👤 **Get Submitter Details**       | Retrieve full user profile of submitter           |
  | 🏢 **Get Submission Orgunits**     | View orgunit hierarchy                            |
  | 📍 **Update Submission Orgunits**  | Change visibility by orgunit                      |
  | ⏱️ **Calculate Response Duration** | Time from creation to submission                  |

  **Example - Find Submissions by Form:**

  ```json
  {
  	"resource": "formSubmission",
  	"operation": "findByForm",
  	"contentRef": "699848533ab62d9d50409890",
  	"options": {
  		"limit": 50,
  		"skip": 0,
  		"sortBy": "updatedAt",
  		"sortOrder": -1
  	}
  }
  ```

  **Find by Form Parameters:**

  - **Form Content ID** (required): The content ID of the form (24-character MongoDB ObjectID)

  **Options** (all optional):

  - **Limit**: Maximum number of results (default: 50)
  - **Skip**: Number of results to skip (pagination)
  - **Sort Field**: Field to sort by (default: `updatedAt`)
  - **Sort Order**: `-1` for descending (newest first), `1` for ascending

  **Example - Calculate Response Time:**

  ```javascript
  {
    "resource": "formSubmission",
    "operation": "calculateResponseDuration",
    "formSubmissionId": "form_67890"
  }

  // Returns:
  {
    "duration": {
      "days": 2,
      "hours": 5,
      "minutes": 30,
      "totalSeconds": 183930
    }
  }
  ```

  ---

  ### 🏢 **Orgchart Operations**

  | Operation                   | Description                                        |
  | --------------------------- | -------------------------------------------------- |
  | 🌳 **Get Ancestors**        | Get all ancestors in the org hierarchy             |
  | 🔗 **Get by External Ref**  | Retrieve an orgchart node by its externalRef value |
  | 🆔 **Get by ID**            | Retrieve an orgchart node by ID                    |
  | 👶 **Get Children**         | Retrieve all children/descendants                  |
  | ⬆️ **Get Parent**            | Fetch the parent node of an orgchart node          |

  **Example - Get Children with Depth Limit:**

  ```json
  {
  	"resource": "orgchart",
  	"operation": "getChildren",
  	"orgunitId": "node123",
  	"additionalFields": {
  		"limit": 100
  	}
  }
  ```

  **Example - Get Ancestors with Depth Limit:**

  ```json
  {
  	"resource": "orgchart",
  	"operation": "getAncestors",
  	"orgunitId": "node123",
  	"additionalFields": {
  		"depthLimit": 3
  	}
  }
  ```

  **Optional Additional Fields:**

  - **Get Children** → `limit`: Maximum number of child nodes to return (default: 0 = unlimited)
  - **Get Ancestors** → `depthLimit`: How many levels up to traverse (default: 0 = unlimited)

  ---

  ### 🗄️ **Storage Operations**

  | Operation           | Description                                               |
  | ------------------- | --------------------------------------------------------- |
  | 🔗 **Get Signed URL** | Generate a pre-signed URL for secure access to a stored file |

  **Use case:** Retrieve a signed CloudFront URL for a file attached to a task, form answer, or content item, then pass it directly to an AI vision model for analysis.

  **Required fields:**

  | Field | Description |
  | ----- | ----------- |
  | **Origin** | The entity type that owns the file (e.g. `Task Form Answer`, `Content Attachment`) |
  | **Origin ID** | The `_id` of the owning entity — use `{{ $json._id }}` from a preceding Keephub node |
  | **Storage ID** | The S3 path of the file — use `{{ $json.answers[N].value.value }}` for upload form answers |
  | **Force Download** | Optional. Sets `Content-Disposition: attachment` to force a file download instead of inline display |

  **Example:**

  ```json
  {
  	"resource": "storage",
  	"operation": "getSignedUrl",
  	"origin": "taskFormAnswer",
  	"originId": "699974e8f6c386b2e3e93cbc",
  	"storageId": "live/image/dev/contents/abc123/photo.jpg"
  }
  ```

  **Output:**

  ```json
  {
  	"url": "https://d2qp115j4w1ptn.cloudfront.net/live/image/...?Expires=...&Signature=..."
  }
  ```

  > ⚠️ The returned URL is time-limited and contains embedded credentials. Treat it as a secret and use it immediately in your workflow — do not log or store it.

  ---

  ## 🔐 Credentials Setup

  Keephub uses **two separate credential types** — select the matching authentication method from the **Authentication** dropdown on the Keephub node.

  ### 🔑 Keephub Bearer API

  ```
  ✓ Most secure for API integrations
  ✓ Use existing API tokens from Keephub
  ✓ Perfect for server-to-server communication
  ✓ Uses IAuthenticateGeneric — token sent automatically in headers
  ```

  | Field          | Description                          |
  | -------------- | ------------------------------------ |
  | **Client URL** | Your Keephub instance base URL       |
  | **Bearer Token** | API bearer token                   |
  | **Language**   | Language code (default: `en`)        |

  ### 🔒 Keephub Login API

  ```
  ✓ Automatic token generation from username/password
  ✓ Simple to set up
  ✓ Token refreshed dynamically per request
  ✓ Credentials securely stored and encrypted in n8n
  ```

  | Field              | Description                                     |
  | ------------------ | ----------------------------------------------- |
  | **Client URL**     | Your Keephub instance base URL                  |
  | **Login Name**     | Username for authentication                     |
  | **Password**       | Password for authentication                     |
  | **Auth Endpoint**  | Custom auth path (default: `/authentication`)   |
  | **Language**       | Language code (default: `en`)                   |

  **All credentials are encrypted** 🔒 and never exposed in logs or workflows.

  ---

  ## 💡 Real-World Examples

  ### 📧 Example 1: Auto-Create Tasks from Email

  ```
  Gmail Trigger
    ↓
  Extract email data
    ↓
  Keephub: Create Task
    ↓
  Send confirmation email
  ```

  ### 📊 Example 2: Sync Users to Slack

  ```
  Keephub: Get all users in a group
    ↓
  Filter active users
    ↓
  Slack: Create channels per active users in group
  ```

  ### 📋 Example 3: Form Response Automation

  ```
  Schedule Trigger (daily)
    ↓
  Keephub: Get Form Submission
    ↓
  Keephub: Get Submitter Details
    ↓
  Keephub: Calculate Response Duration
    ↓
  Store in database
  ```

  ---

  ## ⚙️ Node Configuration

  ### Authentication

  The Keephub node provides an **Authentication** dropdown at the top of the configuration panel:

  - **Bearer Token** → uses the **Keephub Bearer API** credential
  - **Login Credentials** → uses the **Keephub Login API** credential

  ### Input Data

  - All parameters support dynamic expressions with `{{ }}`
  - Use previous node outputs: `{{ $node["Previous Node"].json.field }}`
  - Access environment variables: `{{ $env.MY_VAR }}`

  ### Output Format

  ```javascript
  {
    "pairedItem": { "item": 0 },
    "json": {
      // API response data
    }
  }
  ```

  ### Error Handling

  Enable "Continue on Error" to handle failures gracefully in your workflow.

  ---

  ## 📦 Requirements

  | Requirement | Version  |
  | ----------- | -------- |
  | **n8n**     | v1.0.0+  |
  | **Node.js** | 18.17.0+ |
  | **npm**     | 8.0.0+   |

  ---

  ## 🐛 Troubleshooting

  ### ❌ "Authentication failed"

  - ✅ Verify your Keephub instance URL
  - ✅ Check API credentials are correct
  - ✅ Ensure credentials have required permissions

  ### ❌ "Unknown operation"

  - ✅ Verify resource and operation combination exist
  - ✅ Check node version is latest
  - ✅ Try refreshing the node palette

  ### ❌ "Connection timeout"

  - ✅ Check network connectivity
  - ✅ Verify firewall allows outbound HTTPS
  - ✅ Check Keephub instance is accessible

  ---

  ## 📚 Documentation

  - 📖 [n8n Documentation](https://docs.n8n.io/)
  - 🔗 [Keephub API Docs](https://dev.api.keephub.io/api-docs/)
  - 💬 [n8n Community Forum](https://community.n8n.io/)

  ---

  ## 🏗️ Project Structure

  ```
  n8n-nodes-keephub/
  ├── nodes/
  │   └── Keephub/
  │       ├── Keephub.node.ts           # Main node class
  │       ├── descriptions/             # Field definitions
  │       │   ├── UserDescription.ts
  │       │   ├── ContentDescription.ts
  │       │   ├── TaskDescription.ts
  │       │   ├── FormSubmissionDescription.ts
  │       │   ├── OrgchartDescription.ts
  │       │   └── StorageDescription.ts
  │       ├── actions/                  # Operation implementations
  │       │   ├── user/
  │       │   ├── content/
  │       │   ├── task/
  │       │   ├── formSubmission/
  │       │   ├── orgchart/
  │       │   └── storage/
  │       └── utils/
  │           └── helpers.ts
  ├── credentials/
  │   ├── KeephubBearerApi.credentials.ts
  │   └── KeephubLoginApi.credentials.ts
  ├── package.json
  └── README.md
  ```

  ---

  ## 🚀 Development

  ### Build

  ```bash
  npm run build
  ```

  ### Verify (lint + build)

  ```bash
  npm run test
  ```

  ### Lint

  ```bash
  npm run lint
  ```

  ---

  ## 📝 Version History

  ### v1.0.0 (2025-01-09) 🎉

  - ✨ Initial release
  - 👥 User management operations
  - 📰 Content creation & management
  - ✅ Task template operations
  - 📋 Form submission handling
  - 🔐 Secure API authentication

  ### v1.1.0 (2025-11-10) 📦

  - 📊 Added Orgchart operations (Get, Parent, Ancestors, Children)
  - 🧹 Fixed console.log in updateById operation
  - 🔧 Code cleanup and optimizations

  ### v1.2.0 (2025-11-12) 🆕

  - 🔍 Added Get By Orgunit task operation
  - 📅 Date range filtering support for tasks (Start Date Before/After)
  - 📰 Enhanced Content filtering

  ### v1.2.1 (2025-11-20)

  - 📖 README updates and documentation improvements

  ### v1.2.2 (2025-11-20)

  - 🧹 Build process improvements (added dist folder cleanup script)

  ### v1.3.0 (2025-12-04)

  - 🔍 Added Get by External Ref operation to Orgchart resource for querying nodes by external reference

  ### v1.3.4 (2025-12-08)

  - 🔧 Added externalRef of orgunit to the output of the Get submission orgunits node
  - 🧹 Fixed typo that was causing README rendering issues

  ### v1.4.0 (2026-02-09) 🔐

  - 🔑 **Split credentials** into two separate types: **Keephub Bearer API** and **Keephub Login API**
  - 🛡️ Added `IAuthenticateGeneric` to Bearer credential for automatic header injection
  - 🔀 Added **Authentication** selector dropdown to the node UI (Bearer Token / Login Credentials)
  - 🔌 Updated `inputs`/`outputs` to use `NodeConnectionTypes.Main` (n8n best practice)
  - 📦 Moved non-required fields into **Additional Fields** / **Options** collections:
    - Content: Limit, Skip, Sort Field, Sort Order → Options
    - Orgchart: Depth Limit, Result Limit → Additional Fields
    - Task: Message, Send Notification → Additional Fields; Limit → Options
  - 🧹 Updated helpers to dynamically resolve credentials based on authentication selector
  - 📖 Updated README documentation to reflect all changes

  ### v1.4.3 (2026-02-19)

  - 🖼️ Changed Image assets to better match n8n's dark theme


  ### v1.4.4 (2026-02-19)

  - 🐛 Empty content/task searches now return `[]` instead of throwing error (`findByContentPool`, `findByGroup`, `findByOrgunit`, `task/getByOrgunit`)
  - 🐛 Orgchart node IDs now properly URL-encoded (`getById`, `getParent`, `getAncestors`)
  - 🐛 Added null check for submitter ID in form submissions (`getSubmitterDetails`)
  - 🐛 Fixed double indentation in content delete operation
  - 🐛 Fixed paginated response unwrapping in user `findByLoginName`, `findByGroup`, `findByOrgunit` — now correctly returns individual user items instead of the raw envelope
  - 📋 Added codex metadata with expanded aliases for better node discoverability
  - 🔍 Expanded package keywords from 4 to 19 for better discoverability
  - 🖼️ Optimized icon SVG viewBox to show full logo without cutoff
  - 🖼️ Restored white ellipse border for visibility in dark mode
  - 🔐 Improved credential test behavior for both auth methods:
  	- Bearer credential test now handles both client URL and API subdomain URL formats (strips `.api.` for compatibility)
  	- Login credential test now performs real auth validation via `POST` to the configured auth endpoint (uses string manipulation compatible with n8n's expression sandbox)
  	- Both use protocol normalization to handle URLs without `https://` prefix
  - 🧩 Renamed Login credential field from **Token Endpoint** to **Auth Endpoint** for clarity (runtime keeps backward compatibility with legacy `tokenEndpoint`)
  - 📚 Fixed metadata/docs pointers:
  	- Updated node credential documentation anchor link
  	- Fixed README MIT badge link target
  	- Updated clientUrl field descriptions to clarify "Do not use the API URL"
  - 📦 Added `prepublishOnly` guard (`npm run test`) and aligned package Node engine requirement to `>=18.17.0`
  - 🔗 Enhanced URL transformation robustness:
  	- Client URL now auto-normalizes `.api.` subdomain (handles both formats transparently)
  	- Protocol normalization adds `https://` if missing

  ### v1.5.0 (2026-02-20) 📋

  - 🔍 Added **Find by Form** operation to Form Submission resource — retrieve all submissions for a given form with pagination & sorting
  - 📦 Supports Limit, Skip, Sort Field, Sort Order options (consistent with Content and Task list operations)
  - 🔗 Uses `$sort[_id]=1` tiebreaker for stable pagination across pages

  ### v1.6.0 (2026-02-22)

  - ✅ Added **Approve Task** operation — approve a pending task with an optional comment
  - ❌ Added **Reject Task** operation — reject a pending task with a required reason
  - ✅ Added **Approve Content** operation — approve content pending approval
  - ❌ Added **Reject Content** operation — reject content pending approval

  ### v1.8.0 (2026-02-23)

  - 🗄️ Added **Storage** resource with **Get Signed URL** operation — generates pre-signed CloudFront URLs for secure file access from tasks, form answers, and content
  - Supports all 11 origin types with inline field hints for common expressions; optional Force Download flag
  - 🏷️ Renamed **Task** resource display label to **Task Template** for clarity across all template-managing operations (Create, Delete, Get by ID, Get by Orgunit, Get Progress, Get Status Counts)
  - **Approve Task** and **Reject Task** intentionally kept as-is — they operate on task instances, not templates; no breaking changes
  - 🔍 Added **Get Task Template by Task** operation — resolves a task template from a task instance ID via `/tasks/{id}` → `/tasktemplates/{templateRef}`
  - 📋 Added **Get Task** operation — fetches a task instance directly by its ID from `/tasks/{id}`

  ### v1.8.1 (2026-02-23)

  - 🐛 Fixed missing `description` property on six Task Template operations (Create, Delete, Get by ID, Progress, Status Counts, By Orgunit) — these were not visible on the [n8n integrations page](https://n8n.io/integrations/keephub/)

  ---

  ## 🤝 Contributing

  Contributions are welcome! 🙌

  1. **Fork** the repository
  2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
  3. **Commit** your changes (`git commit -m 'Add amazing feature'`)
  4. **Push** to the branch (`git push origin feature/amazing-feature`)
  5. **Open** a Pull Request

  ### Development Setup

  ```bash
  git clone https://github.com/RetailInTouch/n8n-nodes-keephub.git
  cd n8n-nodes-keephub
  npm install
  npm run build
  ```

  ---

  ## 📄 License

  This project is licensed under the **MIT License** - see the [LICENSE](LICENSE.md) file for details.

  ---

  ## 🙏 Support

  Found a bug? Have a feature request?

  - 🐛 [Open an Issue](https://github.com/RetailInTouch/n8n-nodes-keephub/issues)
  - 💬 [Start a Discussion](https://github.com/RetailInTouch/n8n-nodes-keephub/discussions)

  ---

  ## ⭐ Show Your Support

  If you find this node useful, please consider:

  - ⭐ Starring this repository
  - 🐦 Sharing it on social media
  - 📢 Recommending it to the community

  ---

  <div align="center">

  **Made with ❤️ for the automation community**

  [Visit n8n](https://n8n.io) • [View on npm](https://www.npmjs.com/package/n8n-nodes-keephub) • [GitHub Repo](https://github.com/RetailInTouch/n8n-nodes-keephub)

  </div>

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of Keephub API operations for employee engagement, including user management, content creation, and task handling.","capabilities":["Retrieve users by ID, login name, group, or organization unit","Create, update, delete, and approve/reject content","Filter content by content pool, group, or organization unit","Manage organizational structures and user groups","Support for both Bearer Token and Login Credentials authentication"],"authentication":"API Key (Bearer Token) or Basic Auth (Username/Password)","commonUseCases":["Automated employee onboarding and user provisioning","Internal communication and announcement distribution","Content approval workflows for company news and manuals","Organizational structure updates and group management"],"limitations":["Requires manual installation via npm for local/Node.js n8n instances","Requires separate credential setup for Bearer Token vs Login methods","Some advanced operations may require specific Keephub platform permissions not detailed in README"],"relatedNodes":["n8n-nodes-keephub.keephub","n8n-nodes-keephub.keephub-user","n8n-nodes-keephub.keephub-content"]}


node_type: n8n-nodes-visualping.visualpingTrigger
package_name: n8n-nodes-visualping
display_name: Visualping Trigger
description: Triggers workflow on Visualping job events
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: ccomparon
author_github_url: https://github.com/webmonitoring/
npm_package_name: n8n-nodes-visualping
npm_version: 1.0.2
community_fetched_at: 2026-03-25T21:19:40.779Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-visualping

  This is an n8n community node that integrates [Visualping](https://visualping.io) with your n8n workflows, allowing you to trigger workflows when website changes are detected.

  [Visualping](https://visualping.io) is a web monitoring service that tracks changes on websites and sends notifications, while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that allows you to connect various services.

  ## Table of contents

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

  ## Installation

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

  ## Operations

  This node provides a trigger operation for Visualping.

  ### Triggers
  - **Visualping Trigger**: Automatically starts an n8n workflow when a Visualping job detects changes on a monitored website
    - Configure webhook notifications for specific Visualping jobs
    - Receive change detection events in real-time
    - Supports job selection from list or by ID

  ## Credentials

  To use this node, you need to authenticate with your Visualping account:

  1. **Email and Password Authentication**
     - Configure your Visualping account credentials in the n8n credentials section under `Visualping Credentials API`
     - Provide your Visualping account email and password

  ## Compatibility

  This node has been tested with n8n version 1.57.0 and requires Node.js version 20.15 or higher.

  ## Usage

  1. **Create a Visualping Job**: Set up a new monitoring job on [Visualping](https://visualping.io) to track changes on your target website.
  2. **Set up a workflow**: Create a new workflow in n8n.
  3. **Add the Visualping Trigger node**: Insert the Visualping Trigger node into your workflow.
  4. **Configure credentials**: Enter your Visualping account email and password.
  5. **Select a job**: Choose the Visualping job you want to monitor for changes.
  6. **Configure the trigger**: The node will automatically set up webhook notifications for the selected job.
  7. **Execute the workflow**: The workflow will trigger whenever Visualping detects changes on the monitored website.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Visualping API Documentation](https://api.visualping.io/doc.html)
  - [Visualping Authentication Guide](https://api.visualping.io/doc.html#section/Authentication)

  ## Version history

  Track changes and updates to the node here.

  ## Troubleshooting

  ### Common issues

  1. **Authentication errors**
     - Verify your Visualping email and password are correct
     - Ensure your Visualping account is active

  2. **Job not found**
     - Verify the job ID format (should be numeric)
     - Check if the job exists in your Visualping account
     - Ensure you have access to the job

  3. **Webhook configuration issues**
     - Check that your n8n instance is accessible from the internet
     - Verify the webhook URL is correctly configured
     - Review Visualping job settings for webhook notifications

  ### Getting help

  If you encounter issues:
  1. Check the [Visualping API documentation](https://api.visualping.io/doc.html)
  2. Review the [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  3. Open an issue in the [GitHub repository](https://github.com/webmonitoring/n8n-nodes-visualping)

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow automatically when Visualping detects changes on a monitored website.","capabilities":["Starts n8n workflow on Visualping job events","Receives change detection events in real-time","Supports job selection by ID or from a list","Configures webhook notifications for specific Visualping jobs"],"authentication":"Email and Password","commonUseCases":["Website change monitoring","Real-time alerts for content updates","Automated responses to site modifications"],"limitations":["Requires n8n version 1.57.0 or higher","Requires Node.js version 20.15 or higher","Requires active Visualping account with access to the monitored job"],"relatedNodes":["n8n-nodes-visualping.visualpingJob","n8n-nodes-visualping.visualpingJobList","n8n-nodes-visualping.visualpingJobStatus"]}


node_type: n8n-nodes-ticktick.tickTick
package_name: n8n-nodes-ticktick
display_name: TickTick
description: Interact with TickTick tasks and projects
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: hansdoe
author_github_url: https://github.com/hansdoebel/
npm_package_name: n8n-nodes-ticktick
npm_version: 2.1.3
community_fetched_at: 2026-03-25T21:19:40.779Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "task",
      "options": [
        {
          "name": "Focus",
          "value": "focus"
        },
        {
          "name": "Habit",
          "value": "habit"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Group",
          "value": "projectGroup"
        },
        {
          "name": "Sync",
          "value": "sync"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Assign",
          "value": "assign",
          "action": "Assign a task to a user",
          "description": "Assign a task to a user (V2 API only)"
        },
        {
          "name": "Complete",
          "value": "complete",
          "action": "Complete a task"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task"
        },
        {
          "name": "List All",
          "value": "listAll",
          "action": "List all tasks",
          "description": "List all tasks (V2 API only)"
        },
        {
          "name": "List Completed",
          "value": "listCompleted",
          "action": "List completed tasks",
          "description": "List completed tasks (V2 API only)"
        },
        {
          "name": "List Deleted",
          "value": "listDeleted",
          "action": "List deleted tasks",
          "description": "List deleted tasks (V2 API only)"
        },
        {
          "name": "Move",
          "value": "move",
          "action": "Move a task",
          "description": "Move a task to another project (V2 API only)"
        },
        {
          "name": "Set Parent",
          "value": "setParent",
          "action": "Set parent task",
          "description": "Set parent task (V2 API only)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "Get users in a project",
          "description": "Get users in a shared project (V2 API only)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tag",
          "description": "Create a new tag"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a tag",
          "description": "Delete a tag"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all tags",
          "description": "Get all tags"
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge tags",
          "description": "Merge one tag into another"
        },
        {
          "name": "Rename",
          "value": "rename",
          "action": "Rename a tag",
          "description": "Rename a tag"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tag",
          "description": "Update a tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Archive",
          "value": "archive",
          "action": "Archive a habit",
          "description": "Archive a habit"
        },
        {
          "name": "Check In",
          "value": "checkin",
          "action": "Check in a habit",
          "description": "Record a habit check-in"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a habit",
          "description": "Create a new habit"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a habit",
          "description": "Delete a habit"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a habit",
          "description": "Get a habit by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all habits",
          "description": "Get all habits"
        },
        {
          "name": "Unarchive",
          "value": "unarchive",
          "action": "Unarchive a habit",
          "description": "Unarchive a habit"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a habit",
          "description": "Update a habit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "habit"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getHeatmap",
      "options": [
        {
          "name": "Get Distribution",
          "value": "getDistribution",
          "action": "Get focus distribution",
          "description": "Get focus time distribution by tag"
        },
        {
          "name": "Get Heatmap",
          "value": "getHeatmap",
          "action": "Get focus heatmap",
          "description": "Get focus/pomodoro heatmap data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "focus"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project group",
          "description": "Create a new project group (folder)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project group",
          "description": "Delete a project group"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all project groups",
          "description": "Get all project groups"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project group",
          "description": "Update a project group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectGroup"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProfile",
      "options": [
        {
          "name": "Get Preferences",
          "value": "getPreferences",
          "action": "Get user preferences",
          "description": "Get user preferences and settings"
        },
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Get user profile",
          "description": "Get the user profile"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get user status",
          "description": "Get user subscription status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "syncAll",
      "options": [
        {
          "name": "Sync All",
          "value": "syncAll",
          "action": "Sync all data",
          "description": "Get all user data including projects, tasks, and more"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sync"
          ],
          "authentication": [
            "tickTickSessionApi"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Assign",
      "value": "assign",
      "action": "Assign a task to a user",
      "description": "Assign a task to a user (V2 API only)"
    },
    {
      "name": "Complete",
      "value": "complete",
      "action": "Complete a task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task"
    },
    {
      "name": "List All",
      "value": "listAll",
      "action": "List all tasks",
      "description": "List all tasks (V2 API only)"
    },
    {
      "name": "List Completed",
      "value": "listCompleted",
      "action": "List completed tasks",
      "description": "List completed tasks (V2 API only)"
    },
    {
      "name": "List Deleted",
      "value": "listDeleted",
      "action": "List deleted tasks",
      "description": "List deleted tasks (V2 API only)"
    },
    {
      "name": "Move",
      "value": "move",
      "action": "Move a task",
      "description": "Move a task to another project (V2 API only)"
    },
    {
      "name": "Set Parent",
      "value": "setParent",
      "action": "Set parent task",
      "description": "Set parent task (V2 API only)"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "Get users in a project",
      "description": "Get users in a shared project (V2 API only)"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tag",
      "description": "Create a new tag"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a tag",
      "description": "Delete a tag"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all tags",
      "description": "Get all tags"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge tags",
      "description": "Merge one tag into another"
    },
    {
      "name": "Rename",
      "value": "rename",
      "action": "Rename a tag",
      "description": "Rename a tag"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tag",
      "description": "Update a tag"
    },
    {
      "name": "Archive",
      "value": "archive",
      "action": "Archive a habit",
      "description": "Archive a habit"
    },
    {
      "name": "Check In",
      "value": "checkin",
      "action": "Check in a habit",
      "description": "Record a habit check-in"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a habit",
      "description": "Create a new habit"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a habit",
      "description": "Delete a habit"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a habit",
      "description": "Get a habit by ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all habits",
      "description": "Get all habits"
    },
    {
      "name": "Unarchive",
      "value": "unarchive",
      "action": "Unarchive a habit",
      "description": "Unarchive a habit"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a habit",
      "description": "Update a habit"
    },
    {
      "name": "Get Distribution",
      "value": "getDistribution",
      "action": "Get focus distribution",
      "description": "Get focus time distribution by tag"
    },
    {
      "name": "Get Heatmap",
      "value": "getHeatmap",
      "action": "Get focus heatmap",
      "description": "Get focus/pomodoro heatmap data"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project group",
      "description": "Create a new project group (folder)"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project group",
      "description": "Delete a project group"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all project groups",
      "description": "Get all project groups"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project group",
      "description": "Update a project group"
    },
    {
      "name": "Get Preferences",
      "value": "getPreferences",
      "action": "Get user preferences",
      "description": "Get user preferences and settings"
    },
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Get user profile",
      "description": "Get the user profile"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get user status",
      "description": "Get user subscription status"
    },
    {
      "name": "Sync All",
      "value": "syncAll",
      "action": "Sync all data",
      "description": "Get all user data including projects, tasks, and more"
    }
  ]

npm_readme:
  # n8n-nodes-ticktick

  n8n community node for integrating TickTick with your workflows. Manage tasks, projects, tags, habits, and productivity seamlessly.

  ## Installation

  ```
  n8n-nodes-ticktick
  ```

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

  ## Features

  - **Tasks** - Create, update, complete, delete, move, assign, set parent
  - **Projects** - Manage projects and shared collaborators
  - **Project Groups** - Organize projects into groups (V2)
  - **Tags** - Create, rename, merge tags (V2)
  - **Habits** - Track habits with check-ins (V2)
  - **Focus** - Get focus time heatmaps and distribution (V2)
  - **User** - Get profile, status, and preferences (V2)
  - **Sync** - Full data sync (V2)

  ## Documentation

  | Document | Description |
  |----------|-------------|
  | [Getting Started](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/getting-started.md) | Installation and setup |
  | [Credentials](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/credentials.md) | Authentication options |
  | [API Reference](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/api-reference.md) | All operations |
  | [Testing](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/testing.md) | Running tests |
  | [Development](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/development.md) | Contributing |
  | [Troubleshooting](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/docs/troubleshooting.md) | Known issues and FAQ |
  | [Changelog](https://github.com/hansdoebel/n8n-nodes-ticktick/blob/main/CHANGELOG.md) | Version history |

  ## Resources

  - [GitHub Repository](https://github.com/hansdoebel/n8n-nodes-ticktick)
  - [TickTick Open API](https://developer.ticktick.com/docs#/openapi)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables workflow automation for managing TickTick productivity tasks, projects, tags, habits, and user data.","capabilities":["Create, update, complete, delete, and move tasks","Assign tasks and set parent-child relationships","Manage projects and shared collaborators","Organize projects into groups","Create, rename, and merge tags","Track habits with check-ins","Retrieve focus time heatmaps and distribution","Get user profile, status, and preferences","Perform full data synchronization"],"authentication":"API key required (via Credentials configuration)","commonUseCases":["Automating daily task completion and status updates","Syncing external calendar events to TickTick projects","Managing habit tracking and streaks","Organizing work into project groups with tags","Retrieving user productivity analytics"],"limitations":["Community-maintained node (may have less official support than official n8n nodes)","V2 features indicated for some capabilities (tags, habits, focus, user, sync) suggesting potential API versioning differences"],"relatedNodes":["n8n-nodes-ticktick","n8n-nodes-github","n8n-nodes-google-calendar","n8n-nodes-automation"]}


node_type: n8n-nodes-logsnag.LogSnag
package_name: n8n-nodes-logsnag
display_name: LogSnag
description: Send events and insights to LogSnag
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: joff
author_github_url: https://github.com/joffcom/
npm_package_name: n8n-nodes-logsnag
npm_version: 0.1.0
community_fetched_at: 2026-03-25T21:19:40.780Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Log",
          "value": "log"
        },
        {
          "name": "Insight",
          "value": "insight"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish an event to LogSnag",
          "routing": {
            "request": {
              "url": "/log",
              "method": "POST"
            }
          },
          "description": "Publish an event to LogSnag"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "log"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish an insight to LogSnag",
          "routing": {
            "request": {
              "url": "/insight",
              "method": "POST"
            }
          },
          "description": "Publish an insight to LogSnag"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "insight"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish an event to LogSnag",
      "routing": {
        "request": {
          "url": "/log",
          "method": "POST"
        }
      },
      "description": "Publish an event to LogSnag"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish an insight to LogSnag",
      "routing": {
        "request": {
          "url": "/insight",
          "method": "POST"
        }
      },
      "description": "Publish an insight to LogSnag"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    }
  ]

npm_readme:
  # n8n-nodes-logsnag

  This is an n8n community node for sending events and insights to [LogSnag](https://logsnag.com/)

  This trigger node will get any items that have a published date that is after the date of the last run of the trigger.

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

  [Installation](#installation)  
  [Version history](#version-history) 

  ## Installation

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

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

ai_documentation_summary:
  {"purpose":"A community node that sends events and insights to LogSnag, including a trigger node that captures items published after the last run.","capabilities":["Send events to LogSnag","Send insights to LogSnag","Trigger-based item capture based on published date"],"authentication":"API key required (implied by LogSnag integration)","commonUseCases":["Automated event logging to LogSnag","Monitoring workflow execution events","Capturing published items for tracking"],"limitations":["Community node (not official n8n node)","Trigger functionality limited to items with published dates after last run"],"relatedNodes":["n8n-nodes-base.Trigger","n8n-nodes-base.httpRequest"]}


node_type: @datafix/n8n-nodes-exact-online.exactOnline
package_name: @datafix/n8n-nodes-exact-online
display_name: Exact Online
description: Exact Online Node
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: bramknuever
author_github_url: https://github.com/DataFix-B-V/ExactOnline.git
npm_package_name: @datafix/n8n-nodes-exact-online
npm_version: 0.3.7
community_fetched_at: 2026-03-25T21:19:40.781Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "description": "Resource to connect to. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code-examples/expressions/\">expression</a>. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.",
      "displayName": "Resource Name or ID",
      "typeOptions": {
        "loadOptionsMethod": "getResources",
        "loadOptionsDependsOn": [
          "service"
        ]
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "description": "Operation to use. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code-examples/expressions/\">expression</a>. Choose from the list, or specify an ID using an <a href=\"https://docs.n8n.io/code/expressions/\">expression</a>.",
      "displayName": "Operation Name or ID",
      "typeOptions": {
        "loadOptionsMethod": "getOperations",
        "loadOptionsDependsOn": [
          "resource"
        ]
      },
      "noDataExpression": true
    }
  ]

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

  # n8n-nodes-exact-online

  This node was developed during the n8n node-athon. This is version one with a basic CRUD implemented.
  During the development the API reference docs were scraped with a n8n workflow. This Workflow was also included in the repo.
  There were 396 pages scraped and processed into a config file.

  The node is usable with a Developer account which can be created for free at Exact Online's website. This way you can test the node however you like it without compromising your production environment.
  After you can easily connect it with a production environment and automate your workflows.

  ## Developer

  Hi, 

  We are [DataFix](https://datafix.nl), an expert partner of n8n.
  > :warning: **We have developed this node to be free to use. The node is as-is, support is not included.**

  Some of the services we offer:
  * Node Development
  * Workflow Development
  * Mentoring
  * Support

  Feel free to reach out if you want to hire us @ hi@datafix.nl

  For questions or issues with the node, please open an issue on Github.
  We will have a look and if it is an issue with the node we will try to fix it. Be sure to include a proper description and screenshot(s) of the issue so we can easily understand the issue.

  ## Exact Online

  Exact Online is an ERP solution that is offered as a cloud service. Most companies that use exact use it as their main application and have all kinds of applications they use around that. Exact has been expanding over the years and they now offer Exact Online internationally.

  ## Install instructions

  The node can be installed with the community package feature. It can also be installed manually. 
  If you need more information on that, please refer to the n8n docs.

  Make sure to restart n8n when you have installed the node.
  > :warning: **Make sure to restart n8n when you have installed the node.**

  ## Setup instructions

  > :warning: **You need a HTTPS callback url for it to function. Exact Online does not allow you to use HTTP. Make sure you have this before starting the setup.**

  > **_NOTE:_**  Some of the documentation was rewritten because the production app setup is a bit different from the development app. That is also why some names and urls arent the same everywhere, I hope it is clear enough not to get you confused about changing names and such.

  To setup this node you will have to create an App in Exact online. Below there is a step by step guide on how to do this.
  In the future there might be a possibility to simply select it from the app store of Exact Online. I will be looking into getting it approved at a later date.

  The Images should be clear enough for you to follow along.

  Login into Exact Online by clicking on the marked button

  ![Login](https://github.com/bramkn/ExactOnline/blob/master/Images/login.png)

  Click on appcenter button to open the app center, this where you can connect apps.

  ![ManageApps](https://github.com/bramkn/ExactOnline/blob/master/Images/appcenterNormal.png)

  At this point it will forward you to all the apps you can browse. You probably need to click on login in the top right again to actually login on this page.

  After that you will see the manage apps button
  Click on the manage apps button

  ![ManageApps2](https://github.com/bramkn/ExactOnline/blob/master/Images/manageapps2.png)

  You will then see your apps. There is a choice between production and test. Click on register an app.
  If you do not have a choice simply click on the big + to register an app.

  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/Apps.png)

  Open a tab with n8n and go to the Exact Online Node, if you do not have it open already.
  Create a new credentials entry or modify an existing one in the app.

  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/credentials.png)

  You should see the credential information. You need to fill this in, but first you need the Callback URL to be filled in into the app setup in Exact Online.
  Copy the callback URL from n8n into Exact Online. 
  If you are registering a production app you will need to do this in this first screen that pops up. If it is a testing app this pop-up is skipped. (fill in the name and the callback url in the following screen if this step is skipped)

  ![prodRegister](https://github.com/bramkn/ExactOnline/blob/master/Images/registerappProd.png)

  Fill in the rest of the information in the credentials of n8n.
  Should look a bit like this:

  Exact Online:
  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/oauth2Exact2.png)

  n8n:
  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/Oauth2n8n2.png)

  After you can Click connect / reconnect and it might give you a pop-up to login to exact online if you aren't logged in yet or you need to confirm the connection / approve some terms.

  ## Features v1.0

  All posible API requests were scraped from the Exact Online docs. This was used to create a config file. some quality of life features were added and more will be added in the future.

  You can choose al Devisions your account has access to. And all data you have access to will be able to be retrieved.
  Somtimes you do not retrieve any data that is because there is non or you do not have access.

  you can use the dropdowns to select what you want to do.

  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/options1.png)

  when retrieving data you can add filters and choose what fields you want to include. You can both name field to be included and excluded. Some Api endpoints allow you to retrieve all fields when not selecting any and some require you to select the fields you want to include. By setting the slider to exclude the selected fields and not selecting any fields the node will automatically fetch all fields available.

  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/options3.png)


  when you want to create a new record or edit it, you will be able to add fields and select fields from a list of options for that specific resource.

  ![Apps](https://github.com/bramkn/ExactOnline/blob/master/Images/options2.png)

  ## Using the scraper

  - You do not need an account for the scraper.
  - Paste the JSON into an n8n workflow.
  - Set the Github Authorization
  - The first time you might want to set the Github node to create the file.
  - Start
  - Done -> make sure to format the output file as this will improve the readability ;-)

  ## More info on the API

  [Exact Online ref](https://start.exactonline.nl/docs/HlpRestAPIResources.aspx?SourceAction=10)

  ## License

  [ChickenDance](https://github.com/bramkn/ExactOnline/blob/master/n8n-nodes-exact-online/LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node enables automation of Exact Online ERP systems by providing CRUD operations and data retrieval capabilities via the Exact Online API.","capabilities":["Create, Read, Update, and Delete (CRUD) operations on Exact Online entities","Retrieve data with customizable filters","Select specific fields to include or exclude in API responses","Access multiple divisions within an Exact Online account","Authentication via OAuth2 using a callback URL"],"authentication":"OAuth2 (requires HTTPS callback URL)","commonUseCases":["Automating data synchronization between Exact Online and other systems","Extracting inventory or financial data for reporting","Testing Exact Online API integrations without affecting production data"],"limitations":["Requires a HTTPS callback URL (HTTP is not supported by Exact Online)","Support is not included; the node is provided as-is","Some API endpoints may require explicit field selection even when retrieving all data","Version 1.0 is a basic implementation with potential for future enhancements"],"relatedNodes":["n8n-nodes-exact-online.exactOnline","n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: @levelrmm/n8n-nodes-level.level
package_name: @levelrmm/n8n-nodes-level
display_name: Level
description: Interact with the Level API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: level-dev
author_github_url: https://github.com/levelrmm/n8n-nodes-level.git
npm_package_name: @levelrmm/n8n-nodes-level
npm_version: 0.2.8
community_fetched_at: 2026-03-25T21:19:40.782Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "devices",
      "options": [
        {
          "name": "Alert",
          "value": "alerts"
        },
        {
          "name": "Automation",
          "value": "automation"
        },
        {
          "name": "Device",
          "value": "devices"
        },
        {
          "name": "Group",
          "value": "groups"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an alert",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/alerts/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "List",
          "value": "list",
          "action": "List alerts",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/alerts",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "alerts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "triggerWebhook",
      "options": [
        {
          "name": "Trigger Webhook",
          "value": "triggerWebhook",
          "action": "Trigger a webhook automation",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/automations/webhooks/{{$parameter[\"token\"]}}",
              "method": "POST"
            }
          },
          "description": "Invoke a Level automation webhook by token"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List devices",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/devices",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a device",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/devices",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "devices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a group",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/groups/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "List",
          "value": "list",
          "action": "List groups",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/groups",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "groups"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an alert",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/alerts/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "List",
      "value": "list",
      "action": "List alerts",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/alerts",
          "method": "GET"
        }
      }
    },
    {
      "name": "Trigger Webhook",
      "value": "triggerWebhook",
      "action": "Trigger a webhook automation",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/automations/webhooks/{{$parameter[\"token\"]}}",
          "method": "POST"
        }
      },
      "description": "Invoke a Level automation webhook by token"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List devices",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/devices",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a device",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/devices",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a group",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/groups/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "List",
      "value": "list",
      "action": "List groups",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/groups",
          "method": "GET"
        }
      }
    }
  ]

npm_readme:
  ![Level Logo](https://media.level.io/i/logo/logo-bg.jpg)
  # n8n-nodes-level

  Official [n8n](https://n8n.io) community nodes for [Level.io](https://level.io), the RMM and automation platform for modern MSPs. These nodes let you orchestrate Level alerts, devices, groups, automations, and webhook events directly from your n8n workflows.

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

  ## Installation

  Follow the [community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) to add `n8n-nodes-level` to your n8n instance. Once installed, the Level nodes appear in the n8n editor under **Level**.

  ## Operations

  ### Level node

  | Resource | Operations |
  | --- | --- |
  | Alert | Get alert by ID, List alerts |
  | Automation | Trigger webhook |
  | Device | Get device by ID, List devices |
  | Group | Get group by ID, List groups |

  ### Level Trigger node

  The trigger node listens for signed webhook events from Level and emits them into your workflows. Supported event types include alert, device, group, and automation lifecycle notifications.

  ## Credentials

  Create the following credentials in n8n:

  - **Level API** – Generate an API key from the Level dashboard (**Settings → API Keys**) and store it in this credential. Assign it to the Level node (and to the trigger if you enrich incoming events with REST calls).
  - **Level Webhook Secret** – Copy the signing secret from **Settings → Webhooks** in Level and store it in this credential. Assign it to the Level Trigger node to verify incoming webhook signatures.

  ## Compatibility

  These nodes target `n8nNodesApiVersion` 1 and are developed against n8n v1.60.0 and later. Earlier releases of n8n might not expose all required node features.

  ## Usage

  1. **Add credentials** – In n8n, open *Settings → Credentials* and create both a **Level API** credential (API key) and a **Level Webhook Secret** credential (webhook signing secret).
  2. **Automate API calls** – Place the **Level** node in a workflow to query alerts, devices, or groups, or to invoke an automation webhook by token. Use the *Response Property Name* parameter to reshape the API response when needed.
  3. **React to webhooks** – Add the **Level Trigger** node, select the event types you want to handle, and copy the webhook URL generated by n8n. Configure this URL and the shared secret in Level so events flow into your workflow securely.
  4. **Chain actions** – Combine Level data with other n8n nodes to notify teams, update tickets, or enrich records in downstream systems.

  Refer to the [Level API reference](https://levelapi.readme.io/reference/getting-started-with-your-api) for endpoint details, pagination behavior, and payload schemas when building workflows.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Level API reference](https://levelapi.readme.io/reference/getting-started-with-your-api)
  - [Level help center](https://help.level.io/)

  ## Version history

  | Version | Changes |
  | --- | --- |
  | 0.1.0 | Initial release of the Level community nodes for n8n. |

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Level.io API to manage alerts, devices, groups, and automations for MSPs.","capabilities":["Get alert by ID","List alerts","Trigger automation webhook","Get device by ID","List devices","Get group by ID","List groups","Listen for signed webhook events (alert, device, group, automation lifecycle)"],"authentication":"API key required (Level API) and Webhook secret required (Level Webhook Secret)","commonUseCases":["Automate Level.io alerts and device management","React to webhook events from Level.io","Orchestrate Level automations via n8n workflows","Integrate Level data with other n8n nodes for notifications or ticket updates"],"limitations":["Developed against n8n v1.60.0 and later; earlier versions may not expose all required node features","Requires manual setup of both API credentials and webhook secrets in n8n"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n If","n8n Set"]}


