# nodes

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

updated_at: 2026-04-16 09:43:36
author_name: gsharp-assemblyai
author_github_url: https://github.com/gsharp-aai/
npm_package_name: n8n-nodes-assemblyai
npm_version: 0.2.0
community_fetched_at: 2026-04-16T09:43:36.434Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Transcribe audio and video files using AssemblyAI's speech-to-text and speech understanding AI models.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcript",
      "options": [
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "LeMUR (Deprecated)",
          "value": "lemur",
          "description": "LeMUR is deprecated. Please use LLM Gateway instead."
        },
        {
          "name": "LLM Gateway",
          "value": "llm_gateway"
        },
        {
          "name": "Transcript",
          "value": "transcript"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a file",
          "description": "Upload a media file to AssemblyAI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a transcription",
          "description": "Create a new transcription"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a transcription",
          "description": "Delete a transcription"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a transcription",
          "description": "Get a transcription by ID"
        },
        {
          "name": "Get Paragraphs",
          "value": "getParagraphs",
          "action": "Get paragraphs",
          "description": "Get paragraphs from transcription"
        },
        {
          "name": "Get Redacted Audio",
          "value": "getRedactedAudio",
          "action": "Get redacted audio",
          "description": "Get redacted audio URL"
        },
        {
          "name": "Get Sentences",
          "value": "getSentences",
          "action": "Get sentences",
          "description": "Get sentences from transcription"
        },
        {
          "name": "Get Subtitles",
          "value": "getSubtitles",
          "action": "Get subtitles",
          "description": "Get subtitles for a transcription"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List transcriptions",
          "description": "List all transcriptions"
        },
        {
          "name": "Word Search",
          "value": "wordSearch",
          "action": "Search words",
          "description": "Search for words in transcript"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "summary",
      "options": [
        {
          "name": "Custom Task",
          "value": "task",
          "action": "Run custom task",
          "description": "Run a custom LeMUR task"
        },
        {
          "name": "Get Response",
          "value": "getResponse",
          "action": "Get LeMUR response",
          "description": "Get a LeMUR response by ID"
        },
        {
          "name": "Purge Data",
          "value": "purgeData",
          "action": "Purge LeMUR data",
          "description": "Delete LeMUR request data"
        },
        {
          "name": "Question & Answer",
          "value": "questionAnswer",
          "action": "Question and answer",
          "description": "Ask questions about your transcript"
        },
        {
          "name": "Summary",
          "value": "summary",
          "action": "Generate summary",
          "description": "Generate a summary using LeMUR"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lemur"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "chatCompletion",
      "options": [
        {
          "name": "Chat Completion",
          "value": "chatCompletion",
          "action": "Chat completion",
          "description": "Send chat completion request to LLM"
        },
        {
          "name": "Speech Understanding",
          "value": "speechUnderstanding",
          "action": "Speech understanding",
          "description": "Process speech understanding task on existing transcript"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "llm_gateway"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a file",
      "description": "Upload a media file to AssemblyAI",
      "resource": "file"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a transcription",
      "description": "Create a new transcription",
      "resource": "transcript"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a transcription",
      "description": "Delete a transcription",
      "resource": "transcript"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a transcription",
      "description": "Get a transcription by ID",
      "resource": "transcript"
    },
    {
      "name": "Get Paragraphs",
      "value": "getParagraphs",
      "action": "Get paragraphs",
      "description": "Get paragraphs from transcription",
      "resource": "transcript"
    },
    {
      "name": "Get Redacted Audio",
      "value": "getRedactedAudio",
      "action": "Get redacted audio",
      "description": "Get redacted audio URL",
      "resource": "transcript"
    },
    {
      "name": "Get Sentences",
      "value": "getSentences",
      "action": "Get sentences",
      "description": "Get sentences from transcription",
      "resource": "transcript"
    },
    {
      "name": "Get Subtitles",
      "value": "getSubtitles",
      "action": "Get subtitles",
      "description": "Get subtitles for a transcription",
      "resource": "transcript"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List transcriptions",
      "description": "List all transcriptions",
      "resource": "transcript"
    },
    {
      "name": "Word Search",
      "value": "wordSearch",
      "action": "Search words",
      "description": "Search for words in transcript",
      "resource": "transcript"
    },
    {
      "name": "Custom Task",
      "value": "task",
      "action": "Run custom task",
      "description": "Run a custom LeMUR task",
      "resource": "lemur"
    },
    {
      "name": "Get Response",
      "value": "getResponse",
      "action": "Get LeMUR response",
      "description": "Get a LeMUR response by ID",
      "resource": "lemur"
    },
    {
      "name": "Purge Data",
      "value": "purgeData",
      "action": "Purge LeMUR data",
      "description": "Delete LeMUR request data",
      "resource": "lemur"
    },
    {
      "name": "Question & Answer",
      "value": "questionAnswer",
      "action": "Question and answer",
      "description": "Ask questions about your transcript",
      "resource": "lemur"
    },
    {
      "name": "Summary",
      "value": "summary",
      "action": "Generate summary",
      "description": "Generate a summary using LeMUR",
      "resource": "lemur"
    },
    {
      "name": "Chat Completion",
      "value": "chatCompletion",
      "action": "Chat completion",
      "description": "Send chat completion request to LLM",
      "resource": "llm_gateway"
    },
    {
      "name": "Speech Understanding",
      "value": "speechUnderstanding",
      "action": "Speech understanding",
      "description": "Process speech understanding task on existing transcript",
      "resource": "llm_gateway"
    }
  ]

npm_readme:
  # n8n-nodes-assemblyai
  <p align="center">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="./images/AAI_Dark_Mode.svg">
      <source media="(prefers-color-scheme: light)" srcset="./images/AAI_Light_Mode.svg">
      <img src="./images/AAI_Light_Mode.svg" alt="AssemblyAI Logo">
    </picture>
  </p>
  <div align="center">

  [![npm version](https://badge.fury.io/js/n8n-nodes-assemblyai.svg)](https://www.npmjs.com/package/n8n-nodes-assemblyai)
  [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-assemblyai.svg)](https://www.npmjs.com/package/n8n-nodes-assemblyai)

  </div>

  This is an n8n community node. It lets you use [AssemblyAI](https://www.assemblyai.com/) in your n8n workflows.

  [AssemblyAI](https://www.assemblyai.com/) develops industry-leading Speech AI models for transcription and audio understanding, accessible through their API. It provides features like speaker diarization, sentiment analysis, entity detection, PII redaction, and LLM Gateway capabilities for processing transcripts with AI.

  ## Resources
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [AssemblyAI API reference](https://www.assemblyai.com/docs/api-reference)
  - [AssemblyAI API documentation](https://www.assemblyai.com/docs)
    - [AssemblyAI Speech-to-Text guide](https://www.assemblyai.com/docs/getting-started/transcribe-an-audio-file)
    - [AssemblyAI LLM Gateway guide](https://www.assemblyai.com/docs/llm-gateway/apply-llms-to-audio-files)
    - [AssemblyAI LeMUR guide](https://www.assemblyai.com/docs/lemur) - ⚠️ **Deprecated**: LeMUR is deprecated. Please use LLM Gateway instead.

  ## Quick links
  - [Installation](#installation)
  - [Credentials](#credentials)
  - [Operations](#operations)
  - [Development](#development)
  - [Support & Feedback](#support--feedback)

  ## Installation

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

  ## Credentials

  To use this node, you need an AssemblyAI API key.

  ### Prerequisites

  1. Sign up for a free account at [AssemblyAI](https://www.assemblyai.com/) and receive $50 in free credits.
  2. Navigate to your [API Keys page](https://www.assemblyai.com/dashboard/api-keys) in the dashboard.

  ### Setup in n8n

  1. In n8n, go to **Credentials** → **New**
  2. Search for **AssemblyAI API** and select it
  3. Enter your API key from the AssemblyAI dashboard
  4. Click **Save**

  Learn more about API keys in the [AssemblyAI documentation](https://www.assemblyai.com/docs/deployment/account-management#api-keys).

  ## Operations

  ### File ([API Reference](https://www.assemblyai.com/docs/api-reference/files/upload))

  - **Upload**: Upload a media file to AssemblyAI for transcription

  ### Transcript ([API Reference](https://www.assemblyai.com/docs/api-reference/transcripts/submit))

  - **Create**: Start a new transcription job with support for:
    - Language detection
    - Speaker diarization
    - PII redaction and profanity filtering
    - **Speech Understanding**:
      - Enable translation, speaker identification, and/or custom formatting during transcription
      - Keyterm prompting, punctuation, disfluencies, formatting, sentiment analysis, entity detection, chapterization, etc.
  - **Get**: Retrieve a transcription by ID
  - **Delete**: Delete a transcription
  - **List**: List all your transcriptions
  - **Get Sentences**: Get transcript broken into sentences
  - **Get Paragraphs**: Get transcript broken into paragraphs
  - **Get Subtitles**: Export subtitles in SRT or VTT format
  - **Get Redacted Audio**: Get redacted audio URL
  - **Word Search**: Search for specific words in the transcript

  ### LLM Gateway ([API Reference](https://www.assemblyai.com/docs/api-reference/llm-gateway/create-chat-completion))

  - **Chat Completion**: Send chat completion requests to LLMs (Claude, GPT, Gemini models). See [available models](https://www.assemblyai.com/docs/llm-gateway/overview#available-models).
  - **Speech Understanding**: Process speech understanding tasks on existing transcripts:
    - **Translation**: Translate transcripts into multiple languages
    - **Speaker Identification**: Identify speakers by name or role
    - **Custom Formatting**: Apply custom formatting to dates, phone numbers, and emails

  ### LeMUR

  ⚠️ **Deprecated**: LeMUR is deprecated. Please use LLM Gateway instead.

  - **Summary**: Generate AI summaries of transcripts
  - **Question & Answer**: Ask questions about your transcripts
  - **Custom Task**: Run custom AI tasks on transcripts
  - **Get Response**: Retrieve a LeMUR response by ID
  - **Purge Data**: Delete LeMUR request data

  ## Development

  To work on this node locally, clone the repository and install dependencies:

  ```bash
  git clone https://github.com/gsharp-aai/n8n-nodes-assemblyai.git
  cd n8n-nodes-assemblyai
  npm install
  ```

  Build and run with linting:

  ```bash
  npm run dev:fresh
  ```

  The node will be available in n8n at http://localhost:5678

  ## Support & Feedback

  Need help or have feedback? Reach out to [support@assemblyai.com](mailto:support@assemblyai.com).

  Stay up to date with the latest features and improvements:
  - [AssemblyAI Product Changelog](https://www.assemblyai.com/changelog)
  - [AssemblyAI Product Roadmap](https://assemblyai.com/roadmap)

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

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Transcribes audio and video files using AssemblyAI's speech-to-text models and provides AI-powered speech understanding features like translation, speaker identification, and entity detection.","capabilities":["Upload media files for transcription","Create transcription jobs with language detection","Enable speaker diarization","Perform PII redaction and profanity filtering","Translate transcripts to multiple languages","Identify speakers by name or role","Detect entities and sentiment analysis","Generate subtitles in SRT or VTT format","Search for specific words in transcripts","Apply custom formatting to dates, phone numbers, and emails"],"authentication":"API key required (AssemblyAI API key)","commonUseCases":["Automated meeting transcription","Video content analysis and summarization","Automated subtitle generation","Speaker identification in audio files","PII redaction for privacy compliance"],"limitations":["LeMUR feature is deprecated and should be replaced with LLM Gateway","Requires AssemblyAI account and API key setup"],"relatedNodes":["n8n-nodes-assemblyai.assemblyAi","n8n-nodes-assemblyai.transcript","n8n-nodes-assemblyai.llmGateway","n8n-nodes-assemblyai.lemur"]}


node_type: @globalping/n8n-nodes-globalping.globalping
package_name: @globalping/n8n-nodes-globalping
display_name: Globalping
description: Consume the Globalping API
category: Development
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: jimaek
author_github_url: https://github.com/jsdelivr/n8n-nodes-globalping.git
npm_package_name: @globalping/n8n-nodes-globalping
npm_version: 1.0.5
community_fetched_at: 2026-04-16T09:43:36.435Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "measurements",
      "options": [
        {
          "name": "Measurement",
          "value": "measurements"
        },
        {
          "name": "Probe",
          "value": "probes"
        },
        {
          "name": "Limit",
          "value": "limits"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "Returns a list of all probes currently online and their metadata such as location and assigned tags for advanced use cases"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "probes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "Returns rate limits for the current user if authenticated or IP address if not authenticated"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "limits"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Ping",
          "value": "measurementPing",
          "action": "PING. Raw output, latency data, max 16 packets."
        },
        {
          "name": "Traceroute",
          "value": "measurementTraceroute",
          "action": "Traceroute. Raw output, latency data, all protocols and ports."
        },
        {
          "name": "DNS",
          "value": "measurementDns",
          "action": "DNS resolve. All types, latency data and optional tracing."
        },
        {
          "name": "MTR",
          "value": "measurementMtr",
          "action": "MTR trace. Raw output, latency data, all protocols."
        },
        {
          "name": "HTTP",
          "value": "measurementHttp",
          "action": "HTTP Request. GET or HEAD, raw output, latency and TLS data. Limited to 10kb."
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "measurements"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "Returns a list of all probes currently online and their metadata such as location and assigned tags for advanced use cases",
      "resource": "probes"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "probes"
    },
    {
      "name": "List",
      "value": "list",
      "action": "Returns rate limits for the current user if authenticated or IP address if not authenticated",
      "resource": "limits"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "limits"
    },
    {
      "name": "Ping",
      "value": "measurementPing",
      "action": "PING. Raw output, latency data, max 16 packets.",
      "resource": "measurements"
    },
    {
      "name": "Traceroute",
      "value": "measurementTraceroute",
      "action": "Traceroute. Raw output, latency data, all protocols and ports.",
      "resource": "measurements"
    },
    {
      "name": "DNS",
      "value": "measurementDns",
      "action": "DNS resolve. All types, latency data and optional tracing.",
      "resource": "measurements"
    },
    {
      "name": "MTR",
      "value": "measurementMtr",
      "action": "MTR trace. Raw output, latency data, all protocols.",
      "resource": "measurements"
    },
    {
      "name": "HTTP",
      "value": "measurementHttp",
      "action": "HTTP Request. GET or HEAD, raw output, latency and TLS data. Limited to 10kb.",
      "resource": "measurements"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "measurements"
    }
  ]

npm_readme:
  # @globalping/n8n-nodes-globalping
  This is an n8n community node. It lets you use [Globalping](https://globalping.io/) in your n8n workflows.

  The Globalping node allows you to perform network measurements such as `ping`, `traceroute`, `mtr`, `http` and `DNS` lookups from a specified location. 
  You can use this node to test network connections, do latency checks or troubleshoot connectivity issues from various regions.

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

  ## Installation

  1. Go to n8n Settings in bottom left
  2. Select "Community nodes"
  3. Enter `@globalping/n8n-nodes-globalping` and install

  <img width="673" alt="n8n globalping" src="https://github.com/user-attachments/assets/1772ec9d-e5a5-47f8-983f-31e8f33a9c9a">


  ## Operations

  - All measurements support both IPv4 and IPv6 endpoints, as long as you manually enable it per measurement.
  - The location field is smart enough to accept many different types of inputs. [Learn more about the magic location field](https://github.com/jsdelivr/globalping?tab=readme-ov-file#test-with-magic-).
  - While the Globalping network is large and is constantly expanding we can't guarantee a probe in every single location. [Explore our online probes on our website](https://globalping.io/network)

   	### Measurements:
   	- `Ping` - Ping an endpoint using ICMP. Default 3 packets.
   	- `Traceroute` - Traceroute an endpoint using ICMP, TCP or UDP on any port. 
   	- `DNS` - Resolve a DNS record of any type. By default the local resolver is used but a different one can be provided. For troubleshooting purposes the `trace` function can be enabled.
   	- `MTR` - MTR an endpoint using ICMP, TCP or UDP on any port. 
   	- `HTTP` - Make an HTTP GET or HEAD request to any URL. Responses are limited to first 10kb. Note that the `Host` and `User-Agent` headers are reserved and internally overridden.

  	 ### Probes:
   	- `List` - returns a list of all probes currently online and their metadata such as location and assigned tags.

  	 ### Limits:
   	- `List` - returns rate limits for the current user if authenticated or IP address if not authenticated.

  ## Credentials

  Globalping is free to use, and doesn't require authentication. However, it implements rate limits to ensure fair usage and reliability. 
  Sign up on the [Globalping Dashboard](https://dash.globalping.io/) to enjoy higher limits. [Learn more about limits](https://globalping.io/credits).

  To take advantage of the higher limits you need to generate a token in the dashboard and store it in n8n by setting ```Access token``` in ```Credentials``` of your workflow.

  ## Usage

   Create a workflow and add Globalping node with operation you need. Make sure to enable "Authentication" in each step if you have provided your token and want to use it.

   <img width="1920" alt="globalping n8n usage" src="https://github.com/user-attachments/assets/09021705-4e78-4973-866d-92291b659fd4">

ai_documentation_summary:
  {"purpose":"A community n8n node that enables network measurements and connectivity testing from various global locations.","capabilities":["Ping endpoints using ICMP","Traceroute using ICMP, TCP, or UDP","DNS resolution for any record type","MTR (My Traceroute) analysis","HTTP GET and HEAD requests","List available probes and their metadata","Retrieve rate limit information","Support for both IPv4 and IPv6 endpoints"],"authentication":"Optional - Free tier available without authentication; Access token required for higher rate limits","commonUseCases":["Testing network connectivity from specific geographic regions","Measuring latency between locations","Troubleshooting DNS resolution issues","Verifying HTTP endpoint availability","Monitoring global network performance"],"limitations":["Probe availability not guaranteed in every location","HTTP responses limited to first 10kb","Host and User-Agent headers are reserved and overridden","Rate limits apply to free tier users"],"relatedNodes":["HTTP Request","DNS Lookup","Ping","Traceroute","MTR"]}


node_type: n8n-nodes-chartmogul.chartmogul
package_name: n8n-nodes-chartmogul
display_name: ChartMogul
description: Interact with ChartMogul API
category: Community
development_style: declarative
version: 2.0.2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: gef-chartmogul
author_github_url: https://github.com/chartmogul/
npm_package_name: n8n-nodes-chartmogul
npm_version: 2.0.2
community_fetched_at: 2026-04-16T09:43:36.435Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-chartmogul

  This is an n8n community node. It lets you interact with the ChartMogul API in your n8n workflows. 

  [ChartMogul](https://www.chartmogul.com/) is a subscription analytics platform that helps SaaS (Software-as-a-Service) and recurring revenue businesses understand, measure, and grow their revenue. ChartMogul CRM is a customer relationship management platform built specifically for B2B SaaS companies that unifies sales pipeline tracking with subscription analytics, enabling teams to manage leads, opportunities, and recurring revenue in a single integrated system.

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

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

  ## Installation
  ### Community Nodes (Recommended)
  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-chartmogul` 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
  V1 of the ChartMogul N8N node focuses on functions that help you interface with ChartMogul CRM. These are based on the publicly available endpoints found at [https://dev.chartmogul.com/](https://dev.chartmogul.com/).
  Functions:
  1. Sources
  2. Customers
  3. Contacts
  4. Enrichment (Custom Attributes and Tags)
  5. Notes and Call Logs
  6. Opportunities
  7. Tasks
     
  ## Credentials

  _If users need to authenticate with the app/service, provide details here. You should include prerequisites (such as signing up with the service), available authentication methods, and how to set them up._
  You need to have a ChartMogul account to interact with this node.

  In ChartMogul, create an API key by navigating to **Profile > View Profile > API keys**. Then:
  1. Click **Add API Key**.
  2. Enter a unique name for the key in the **Name** field.
  3. A **Read & Write** key is required for this node.
  4. Click **Add** to create the key.
  5. Copy your newly created key and create a ChartMogul credential in N8N
  <img width="776" height="370" alt="image" src="https://github.com/user-attachments/assets/6443c18e-fe9e-4146-a3e1-b4e62862b774" />

  ## Compatibility

  This node was developed and tested using N8N version 1.116.2.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [ChartMogul Help Center](https://help.chartmogul.com)
  * [ChartMogul Developer Reference](https://dev.chartmogul.com)
    
  ## Versioning

  This node implements n8n's versioning system to support future updates while maintaining backwards compatibility. The current version is v1.

  For detailed information about the versioning structure and how to add new versions, see [VERSIONING.md](VERSIONING.md).

  ## Version history

  **v1.0.4** (Current)
  - Implemented full versioning structure
  - Reorganized codebase with v1 directory for future version support

  **v1.0.0**
  - Initial Release

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by interacting with the ChartMogul API for SaaS subscription analytics and CRM management.","capabilities":["Retrieve and manage customer data","Access contact information","Perform data enrichment with custom attributes and tags","Manage notes and call logs","Track and manage sales opportunities","Create and assign tasks"],"authentication":"API Key (Read & Write required)","commonUseCases":["Automating SaaS revenue tracking workflows","Syncing customer data between ChartMogul and other tools","Enriching lead records with custom attributes","Automating sales pipeline management"],"limitations":["Limited to ChartMogul CRM endpoints (not all ChartMogul API features)","Community node status may lack official support","Requires a paid ChartMogul account with API key access"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: @gotohuman/n8n-nodes-gotohuman.gotoHuman
package_name: @gotohuman/n8n-nodes-gotohuman
display_name: gotoHuman
description: Request human reviews with gotoHuman
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: gotohuman-admin
author_github_url: https://github.com/gotohuman/n8n-nodes-gotohuman.git
npm_package_name: @gotohuman/n8n-nodes-gotohuman
npm_version: 0.1.1
community_fetched_at: 2026-04-16T09:43:36.436Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "reviewRequest",
      "options": [
        {
          "name": "Review Request",
          "value": "reviewRequest",
          "description": "Request for Human Review"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendAndWait",
      "options": [
        {
          "name": "Send and Wait for Response",
          "value": "sendAndWait",
          "action": "Send review request and wait for response",
          "description": "Request a human review and wait for the response"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reviewRequest"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send and Wait for Response",
      "value": "sendAndWait",
      "action": "Send review request and wait for response",
      "description": "Request a human review and wait for the response",
      "resource": "reviewRequest"
    }
  ]

npm_readme:
  ![Banner Image](https://github.com/user-attachments/assets/4d31e977-018f-47cc-86f5-2caff3fae1d7)

  # n8n-nodes-gotohuman

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

  gotoHuman is a Human-in-the-Loop solution that lets you easily add highly customizable human approvals to your AI workflows.  
  Perfect for long-running workflows or workflows triggered in the background by external triggers like emails, tickets, or webhooks.

  Many built-in features:
  - Ready-to-use web UI
  	- Inbox
  	- Customizable review interface
  	- Controls to approve, reject, or edit AI outputs
  	- Allow retries with instructions
  	- Supports text, markdown, JSON, images, and more
  - Slack integration
  - Notifications
  - Response dataset to use as memory
  - And much more!

  ## Installation

  npm package name:
  ```
  @gotohuman/n8n-nodes-gotohuman
  ```

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

  ## Credentials

  Find your API key in the [gotoHuman dashboard](https://app.gotohuman.com).

  ## Usage

  Refer to our [documentation](https://docs.gotohuman.com/Integrations/n8n/) for detailed information on using this node.

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables users to integrate gotoHuman, a Human-in-the-Loop solution, into their workflows for customizable human approvals on AI outputs.","capabilities":["Request human reviews for AI outputs","Approve, reject, or edit AI-generated content","Allow retries with custom instructions","Support multiple content formats (text, markdown, JSON, images)","Provide a ready-to-use web UI with inbox and review interface","Integrate with Slack for notifications","Create response datasets for memory retention","Handle long-running workflows and background triggers"],"authentication":"API key required (found in gotoHuman dashboard)","commonUseCases":["Human approval for AI-generated content before deployment","Quality assurance for long-running AI workflows","Processing external triggers like emails or tickets with human oversight","Building memory-based systems using response datasets"],"limitations":[],"relatedNodes":["n8n HTTP Request","n8n Slack","n8n Webhook","n8n Email"]}


node_type: @predictleads/n8n-nodes-predictleads.predictLeads
package_name: @predictleads/n8n-nodes-predictleads
display_name: PredictLeads
description: Get company insights from PredictLeads' official node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: deankostomaj_predictleads
author_github_url: https://github.com/PredictLeads/n8n-nodes-predict-leads.git
npm_package_name: @predictleads/n8n-nodes-predictleads
npm_version: 1.0.1
community_fetched_at: 2026-04-16T09:43:36.437Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "companies",
      "options": [
        {
          "name": "Company",
          "value": "companies"
        },
        {
          "name": "Connection",
          "value": "connections"
        },
        {
          "name": "Financing Event",
          "value": "financingEvents"
        },
        {
          "name": "Job Opening",
          "value": "jobOpenings"
        },
        {
          "name": "News Event",
          "value": "newsEvents"
        },
        {
          "name": "Technology",
          "value": "technologies"
        },
        {
          "name": "Technology Detection",
          "value": "technologyDetections"
        },
        {
          "name": "Website Evolution",
          "value": "websiteEvolution"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company",
          "value": "retrieveCompany",
          "action": "Retrieve Company",
          "routing": {
            "request": {
              "url": "=/companies/{{$parameter.domain}}",
              "method": "GET"
            }
          },
          "description": "Returns Company"
        },
        {
          "name": "Retrieve Companies",
          "value": "retrieveCompanies",
          "action": "Retrieve Companies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "sizes": "={{ $parameter.sizes }}",
                "location": "={{ $parameter.location }}"
              },
              "url": "=/discover/companies",
              "method": "GET",
              "arrayFormat": "brackets"
            }
          },
          "description": "Returns a list of companies filtered by their location and size, ordered by last updated date"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Job Openings",
          "value": "retrieveCompanyJobOpenings",
          "action": "Retrieve Company Job Openings",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "not_closed": "={{ $parameter.notClosed }}",
                "active_only": "={{ $parameter.activeOnly }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "with_location_only": "={{ $parameter.withLocationOnly }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}",
                "with_description_only": "={{ $parameter.withDescriptionOnly }}"
              },
              "url": "=/companies/{{$parameter.domain}}/job_openings",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Job Openings"
        },
        {
          "name": "Retrieve Single Job Opening",
          "value": "retrieveSingleJobOpening",
          "action": "Retrieve Single Job Opening",
          "routing": {
            "request": {
              "url": "=/job_openings/{{$parameter.id}}",
              "method": "GET"
            }
          },
          "description": "Returns a single Job Opening"
        },
        {
          "name": "Retrieve a List of Job Openings",
          "value": "retrieveListOfJobOpenings",
          "action": "Retrieve a List of Job Openings",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "location": "={{ $parameter.location }}",
                "onet_codes": "={{ $parameter.onetCodes }}"
              },
              "url": "=/discover/job_openings",
              "method": "GET"
            }
          },
          "description": "Returns a list of Job Openings filtered by a given profession (e.g. \"Sales Engineers\" or \"Marketing Managers\") using O*NET occupation codes and/or location of the company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobOpenings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Technologies Used by Specific Company",
          "value": "retrieveTechnologiesUsedByCompany",
          "action": "Retrieve Technologies used by specific Company",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/technology_detections",
              "method": "GET"
            }
          },
          "description": "Returns Technologies used by a specific Company as a list of Technology Detections"
        },
        {
          "name": "Retrieve Companies Using Specific Technology ID or Fuzzy Name",
          "value": "retrieveCompaniesUsingSpecificTechnology",
          "action": "Retrieve Companies using specific Technology ID or Fuzzy Name",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/discover/technologies/{{$parameter.idOrFuzzyName}}/technology_detections",
              "method": "GET"
            }
          },
          "description": "Returns Companies using a specific Technology as a list of Technology Detections, ordered by the first_seen_at, descending"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "technologyDetections"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve All Tracked Technologies",
          "value": "retrieveAllTrackedTechnologies",
          "action": "Retrieve All Tracked Technologies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "order_by": "={{ $parameter.orderBy }}",
                "fuzzy_name": "={{ $parameter.fuzzyName }}"
              },
              "url": "=/technologies",
              "method": "GET"
            }
          },
          "description": "Returns a list of all tracked Technologies"
        },
        {
          "name": "Retrieve a Single Technology by ID or Fuzzy Name",
          "value": "retrieveSingleTechnologyByIdOrFuzzyName",
          "action": "Retrieve a Single Technology by ID or Fuzzy Name",
          "routing": {
            "request": {
              "url": "=/technologies/{{$parameter.idOrFuzzyName}}",
              "method": "GET"
            }
          },
          "description": "Returns a single Technology"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "technologies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company News Events",
          "value": "retrieveCompanyNewsEvents",
          "action": "Retrieve Company News Events",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "found_at_from": "={{ $parameter.foundAtFrom }}",
                "found_at_until": "={{ $parameter.foundAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/news_events",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's News Events"
        },
        {
          "name": "Retrieve Single News Event",
          "value": "retrieveSingleNewsEvent",
          "action": "Retrieve Single News Event",
          "routing": {
            "request": {
              "url": "=/news_events/{{$parameter.id}}",
              "method": "GET"
            }
          },
          "description": "Returns specific News Event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "newsEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Financing Events",
          "value": "retrieveCompanyFinancingEvents",
          "action": "Retrieve Company Financing Events",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/financing_events",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Financing Events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "financingEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Connections",
          "value": "retrieveCompanyConnections",
          "action": "Retrieve Company Connections",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "categories": "={{ $parameter.categories.join(\",\") }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/connections",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Connections"
        },
        {
          "name": "Retrieve Portfolio Companies",
          "value": "retrievePortfolioCompanies",
          "action": "Retrieve Portfolio Companies",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/discover/portfolio_companies/connections",
              "method": "GET"
            }
          },
          "description": "Returns the Portfolio Companies found on the portfolio pages of thousands of VCs, accelerators, and incubators, as a list of Connections categorized as investor, ordered by the first_seen_at, descending"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connections"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve Company Website Evolution",
          "value": "retrieveCompanyWebsiteEvolution",
          "action": "Retrieve Company Website Evolution",
          "routing": {
            "request": {
              "qs": {
                "page": "={{ $parameter.page }}",
                "limit": "={{ $parameter.limit }}",
                "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
                "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
              },
              "url": "=/companies/{{$parameter.domain}}/website_evolution",
              "method": "GET"
            }
          },
          "description": "Returns a list of company's Website Evolution"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "websiteEvolution"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Retrieve Company",
      "value": "retrieveCompany",
      "action": "Retrieve Company",
      "routing": {
        "request": {
          "url": "=/companies/{{$parameter.domain}}",
          "method": "GET"
        }
      },
      "description": "Returns Company",
      "resource": "companies"
    },
    {
      "name": "Retrieve Companies",
      "value": "retrieveCompanies",
      "action": "Retrieve Companies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "sizes": "={{ $parameter.sizes }}",
            "location": "={{ $parameter.location }}"
          },
          "url": "=/discover/companies",
          "method": "GET",
          "arrayFormat": "brackets"
        }
      },
      "description": "Returns a list of companies filtered by their location and size, ordered by last updated date",
      "resource": "companies"
    },
    {
      "name": "Retrieve Company Job Openings",
      "value": "retrieveCompanyJobOpenings",
      "action": "Retrieve Company Job Openings",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "not_closed": "={{ $parameter.notClosed }}",
            "active_only": "={{ $parameter.activeOnly }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "with_location_only": "={{ $parameter.withLocationOnly }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}",
            "with_description_only": "={{ $parameter.withDescriptionOnly }}"
          },
          "url": "=/companies/{{$parameter.domain}}/job_openings",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Job Openings",
      "resource": "jobOpenings"
    },
    {
      "name": "Retrieve Single Job Opening",
      "value": "retrieveSingleJobOpening",
      "action": "Retrieve Single Job Opening",
      "routing": {
        "request": {
          "url": "=/job_openings/{{$parameter.id}}",
          "method": "GET"
        }
      },
      "description": "Returns a single Job Opening",
      "resource": "jobOpenings"
    },
    {
      "name": "Retrieve a List of Job Openings",
      "value": "retrieveListOfJobOpenings",
      "action": "Retrieve a List of Job Openings",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "location": "={{ $parameter.location }}",
            "onet_codes": "={{ $parameter.onetCodes }}"
          },
          "url": "=/discover/job_openings",
          "method": "GET"
        }
      },
      "description": "Returns a list of Job Openings filtered by a given profession (e.g. \"Sales Engineers\" or \"Marketing Managers\") using O*NET occupation codes and/or location of the company",
      "resource": "jobOpenings"
    },
    {
      "name": "Retrieve Technologies Used by Specific Company",
      "value": "retrieveTechnologiesUsedByCompany",
      "action": "Retrieve Technologies used by specific Company",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/technology_detections",
          "method": "GET"
        }
      },
      "description": "Returns Technologies used by a specific Company as a list of Technology Detections",
      "resource": "technologyDetections"
    },
    {
      "name": "Retrieve Companies Using Specific Technology ID or Fuzzy Name",
      "value": "retrieveCompaniesUsingSpecificTechnology",
      "action": "Retrieve Companies using specific Technology ID or Fuzzy Name",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/discover/technologies/{{$parameter.idOrFuzzyName}}/technology_detections",
          "method": "GET"
        }
      },
      "description": "Returns Companies using a specific Technology as a list of Technology Detections, ordered by the first_seen_at, descending",
      "resource": "technologyDetections"
    },
    {
      "name": "Retrieve All Tracked Technologies",
      "value": "retrieveAllTrackedTechnologies",
      "action": "Retrieve All Tracked Technologies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "order_by": "={{ $parameter.orderBy }}",
            "fuzzy_name": "={{ $parameter.fuzzyName }}"
          },
          "url": "=/technologies",
          "method": "GET"
        }
      },
      "description": "Returns a list of all tracked Technologies",
      "resource": "technologies"
    },
    {
      "name": "Retrieve a Single Technology by ID or Fuzzy Name",
      "value": "retrieveSingleTechnologyByIdOrFuzzyName",
      "action": "Retrieve a Single Technology by ID or Fuzzy Name",
      "routing": {
        "request": {
          "url": "=/technologies/{{$parameter.idOrFuzzyName}}",
          "method": "GET"
        }
      },
      "description": "Returns a single Technology",
      "resource": "technologies"
    },
    {
      "name": "Retrieve Company News Events",
      "value": "retrieveCompanyNewsEvents",
      "action": "Retrieve Company News Events",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "found_at_from": "={{ $parameter.foundAtFrom }}",
            "found_at_until": "={{ $parameter.foundAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/news_events",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's News Events",
      "resource": "newsEvents"
    },
    {
      "name": "Retrieve Single News Event",
      "value": "retrieveSingleNewsEvent",
      "action": "Retrieve Single News Event",
      "routing": {
        "request": {
          "url": "=/news_events/{{$parameter.id}}",
          "method": "GET"
        }
      },
      "description": "Returns specific News Event",
      "resource": "newsEvents"
    },
    {
      "name": "Retrieve Company Financing Events",
      "value": "retrieveCompanyFinancingEvents",
      "action": "Retrieve Company Financing Events",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/financing_events",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Financing Events",
      "resource": "financingEvents"
    },
    {
      "name": "Retrieve Company Connections",
      "value": "retrieveCompanyConnections",
      "action": "Retrieve Company Connections",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "categories": "={{ $parameter.categories.join(\",\") }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/connections",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Connections",
      "resource": "connections"
    },
    {
      "name": "Retrieve Portfolio Companies",
      "value": "retrievePortfolioCompanies",
      "action": "Retrieve Portfolio Companies",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "last_seen_at_from": "={{ $parameter.lastSeenAtFrom }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "last_seen_at_until": "={{ $parameter.lastSeenAtUntil }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/discover/portfolio_companies/connections",
          "method": "GET"
        }
      },
      "description": "Returns the Portfolio Companies found on the portfolio pages of thousands of VCs, accelerators, and incubators, as a list of Connections categorized as investor, ordered by the first_seen_at, descending",
      "resource": "connections"
    },
    {
      "name": "Retrieve Company Website Evolution",
      "value": "retrieveCompanyWebsiteEvolution",
      "action": "Retrieve Company Website Evolution",
      "routing": {
        "request": {
          "qs": {
            "page": "={{ $parameter.page }}",
            "limit": "={{ $parameter.limit }}",
            "first_seen_at_from": "={{ $parameter.firstSeenAtFrom }}",
            "first_seen_at_until": "={{ $parameter.firstSeenAtUntil }}"
          },
          "url": "=/companies/{{$parameter.domain}}/website_evolution",
          "method": "GET"
        }
      },
      "description": "Returns a list of company's Website Evolution",
      "resource": "websiteEvolution"
    }
  ]

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

  # n8n-nodes-predict-leads

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

  [PredictLeads](https://predictleads.com/) company intelligence data powers a wide range of business applications, from AI-powered automation to market research and investment analysis.

  ## Installation

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

  ## Operations

  This node supports the following operations:
  - retrieve company's data
  - retrieve companies' data based on their size and location
  - retrieve company's job openings
  - retrieve a single job opening
  - retrieve a list of job openings based on O*NET codes and location
  - retrieve technologies used by a specific company
  - retrieve companies using a specific technology
  - retrieve all tracked technologies
  - retrieve a single technology
  - retrieve company's news events
  - retrieve a single news event
  - retrieve company's financing events
  - retrieve company's connections
  - retrieve portfolio companies
  - retrieve company's website evolution

  ## Credentials

  You must have a PredictLeads API key and token to use this node. You can register for a free account to get your API key and token here:

  https://predictleads.com/sign_in

  Once registered, you can find your API key and token here:

  https://predictleads.com/dashboard

  Then you'll need to create credentials in n8n for PredictLeads.

  ![Add Credentials](images/add-credentials.png)

  ## Compatibility

  - Minimum n8n version: 1.84.0
  - Verified working with: 1.119.1
  - Known issues: None

  ## Usage

  Add PredictLeads node to a workflow.

  ![Add PredictLeads to Workflow](images/workflow.png)

  Configure a basic query and hit "Test step" to get the data.

  ![Test a company search through PredictLeads](images/test-company-search.png)

  ## API Resources / Search Engines

  This node currently only supports the most popular PredictLeads endpoints. If there's an endpoints missing that you would like to use, please let us know at support@predictleads.com

  In the meantime, you can also use the [generic HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to get the data from other endpoints.

  ## Related Resources

  PredictLeads's complete API documentation is available here:

  https://docs.predictleads.com/

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node retrieves company intelligence data from PredictLeads, including company profiles, job openings, technologies, news, financing events, and connections.","capabilities":["Retrieve company data","Search companies by size and location","Retrieve company job openings","Retrieve specific job opening details","Search job openings by O*NET codes and location","Retrieve technologies used by a company","Find companies using a specific technology","Retrieve all tracked technologies","Retrieve specific technology details","Retrieve company news events"],"authentication":"API key and token required","commonUseCases":["Market research and competitor analysis","Investment analysis and due diligence","AI-powered automation workflows","Recruitment and talent sourcing","Technology stack analysis"],"limitations":["Only supports the most popular PredictLeads endpoints; some endpoints may be missing","Missing endpoints can be accessed via the generic HTTP Request node instead"],"relatedNodes":["n8n-nodes-base.httprequest"]}


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-04-16 09:43:36
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-04-16T09:43:36.440Z
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",
      "resource": "content"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create content",
      "description": "Create new content",
      "resource": "content"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete content",
      "description": "Delete content by ID",
      "resource": "content"
    },
    {
      "name": "Find by Content Pool",
      "value": "findByContentPool",
      "action": "Find content by content pool",
      "description": "Find contents by content pool",
      "resource": "content"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find content by group",
      "description": "Find contents by group",
      "resource": "content"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find content by orgunit",
      "description": "Find contents by organization unit",
      "resource": "content"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get content by ID",
      "description": "Get content by ID",
      "resource": "content"
    },
    {
      "name": "Reject Content",
      "value": "rejectContent",
      "action": "Reject content",
      "description": "Reject content pending approval",
      "resource": "content"
    },
    {
      "name": "Update by ID",
      "value": "updateById",
      "action": "Update content by ID",
      "description": "Update content by ID",
      "resource": "content"
    },
    {
      "name": "Calculate Response Duration",
      "value": "calculateResponseDuration",
      "action": "Calculate response duration for a form submission",
      "description": "Time from form creation to submission",
      "resource": "formSubmission"
    },
    {
      "name": "Find by Form",
      "value": "findByForm",
      "action": "Find form submissions by form",
      "description": "Retrieve all submissions for a given form",
      "resource": "formSubmission"
    },
    {
      "name": "Get",
      "value": "getFormSubmission",
      "action": "Get a form submission",
      "description": "Fetch full form submission data",
      "resource": "formSubmission"
    },
    {
      "name": "Get Submission Orgunits",
      "value": "getSubmissionOrgunits",
      "action": "Get submission orgunits for a form submission",
      "description": "Fetch orgunit hierarchy",
      "resource": "formSubmission"
    },
    {
      "name": "Get Submitter Details",
      "value": "getSubmitterDetails",
      "action": "Get submitter details for a form submission",
      "description": "Fetch full user data of the submitter",
      "resource": "formSubmission"
    },
    {
      "name": "Update Submission Orgunits",
      "value": "updateSubmissionOrgunits",
      "action": "Update submission orgunits for a form submission",
      "description": "Change submission orgunit to limit visibility",
      "resource": "formSubmission"
    },
    {
      "name": "Get Ancestors",
      "value": "getAncestors",
      "action": "Get ancestors of an orgchart node",
      "description": "Get all ancestors of an orgchart node by ID",
      "resource": "orgchart"
    },
    {
      "name": "Get by External Ref",
      "value": "getByExternalRef",
      "action": "Get an orgchart node by external reference",
      "description": "Get a single orgchart node by external reference",
      "resource": "orgchart"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get an orgchart node",
      "description": "Get a single orgchart node by ID",
      "resource": "orgchart"
    },
    {
      "name": "Get Children",
      "value": "getChildren",
      "action": "Get children of an orgchart node",
      "description": "Get all children/descendants of an orgchart node by ID",
      "resource": "orgchart"
    },
    {
      "name": "Get Parent",
      "value": "getParent",
      "action": "Get parent of an orgchart node",
      "description": "Get the parent of an orgchart node by ID",
      "resource": "orgchart"
    },
    {
      "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",
      "resource": "storage"
    },
    {
      "name": "Approve Task",
      "value": "approveTask",
      "action": "Approve a task",
      "description": "Approve a pending task",
      "resource": "task"
    },
    {
      "name": "Create Task Template",
      "value": "createTask",
      "action": "Create a task template",
      "description": "Create a new task template",
      "resource": "task"
    },
    {
      "name": "Delete Task Template",
      "value": "deleteTask",
      "action": "Delete a task template",
      "description": "Delete a task template by ID",
      "resource": "task"
    },
    {
      "name": "Get Task",
      "value": "getTaskInstance",
      "action": "Get a task by ID",
      "description": "Fetch a task instance by its ID",
      "resource": "task"
    },
    {
      "name": "Get Task Template by ID",
      "value": "getTask",
      "action": "Get a task template by ID",
      "description": "Fetch a task template by its ID",
      "resource": "task"
    },
    {
      "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",
      "resource": "task"
    },
    {
      "name": "Get Task Template Progress",
      "value": "getTaskProgress",
      "action": "Get progress for a task template",
      "description": "Get completion progress for a task template",
      "resource": "task"
    },
    {
      "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",
      "resource": "task"
    },
    {
      "name": "Get Task Templates by Orgunit",
      "value": "getTaskByOrgunit",
      "action": "Get task templates by orgunit",
      "description": "Find all task templates for a specific organization unit",
      "resource": "task"
    },
    {
      "name": "Reject Task",
      "value": "rejectTask",
      "action": "Reject a task",
      "description": "Reject a pending task with a reason",
      "resource": "task"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get a user by ID",
      "description": "Retrieve a user by their unique ID",
      "resource": "user"
    },
    {
      "name": "Find by Login Name",
      "value": "findByLoginName",
      "action": "Find a user by login name",
      "description": "Retrieve a user by their Login Name",
      "resource": "user"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find a user by group",
      "description": "Find all users in a specific group",
      "resource": "user"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find a user by orgunit",
      "description": "Find all users in a specific organization unit",
      "resource": "user"
    }
  ]

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: @woztell-sanuker/n8n-nodes-woztell-sanuker.woztell
package_name: @woztell-sanuker/n8n-nodes-woztell-sanuker
display_name: WOZTELL
description: Automate messaging workflows across WhatsApp, Messenger, and Instagram with WOZTELL
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: krisatwoztell
author_github_url: https://github.com/Woztell/n8n-nodes-woztell-sanuker.git
npm_package_name: @woztell-sanuker/n8n-nodes-woztell-sanuker
npm_version: 0.1.15
community_fetched_at: 2026-04-16T09:43:36.441Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "botAPI",
      "options": [
        {
          "name": "Bot API",
          "value": "botAPI"
        },
        {
          "name": "Member",
          "value": "memberAPI"
        }
      ],
      "displayName": "Resource",
      "disabledOptions": {
        "hideOnCloud": true
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMembers",
      "options": [
        {
          "name": "Get Members By Tags",
          "value": "getMembers",
          "action": "Get members by tags",
          "routing": {
            "send": {
              "paginate": "={{ $parameter.options.returnAll }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data.apiViewer.members"
                  }
                }
              ]
            },
            "request": {
              "body": {
                "query": "query getMembers(\n  $first: IntMax100\n  $channelId: String\n  $tagFilters: [TagFilter]\n  $after: String\n) {\n  apiViewer {\n    members(first: $first, channelId: $channelId, tagFilters: $tagFilters, after: $after) {\n      edges {\n        node {\n          _id\n          externalId\n          name\n          tags\n        }\n      }\n      pageInfo {\n        hasNextPage\n        totalCount\n        endCursor\n      }\n    }\n  }\n}\n",
                "variables": {
                  "after": "={{$parameter.options.cursor || \"\"}}",
                  "first": "={{$parameter.maxResults || 100}}",
                  "channelId": "={{$parameter.channel}}",
                  "tagFilters": [
                    {
                      "operator": "IN"
                    }
                  ]
                }
              }
            },
            "operations": {}
          }
        },
        {
          "name": "Set Member Tags",
          "value": "memberTagging",
          "action": "Set member tags",
          "routing": {
            "request": {
              "body": {
                "query": "mutation AddMemberTags($input: ModifyMemberTagsInput!) {\n  addMemberTags(input: $input) {\n    err_code\n    member {\n      _id\n      externalId\n    }\n    memberId\n    ok\n  }\n}\n",
                "variables": {
                  "input": {
                    "channel": "={{$parameter.channel}}"
                  }
                }
              }
            }
          }
        },
        {
          "name": "Get Member Info By ID",
          "value": "getMemberInfo",
          "action": "Get member info by id",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data.apiViewer"
                  }
                },
                null
              ]
            },
            "request": {
              "body": {
                "query": "query getMemberInfo($channelId: ID, $externalId: ID) {\n  apiViewer {\n    member(channelId: $channelId, externalId: $externalId) {\n      _id\n      createdAt\n      updatedAt\n      channelId\n      platform\n      tags\n      meta\n      externalId\n      botMeta {\n        subscribe\n        liveChat\n        treeId\n        nodeCompositeId\n        tree {\n          name\n        }\n        node {\n          name\n        }\n      }\n      name\n      firstName\n      lastName\n      gender\n      customLocale\n      locale\n      email\n    }\n  }\n}\n",
                "variables": {
                  "channelId": "={{$parameter.channel}}",
                  "externalId": "={{$parameter.externalId.replace(/[-()+]/g, \"\").replaceAll(\" \", \"\")}}"
                }
              }
            }
          }
        },
        {
          "name": "Get Conversation History By ID",
          "value": "getConversationHistory",
          "action": "Get conversation history by id",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data.apiViewer.conversationHistory"
                  }
                }
              ]
            },
            "request": {
              "body": {
                "query": "query getConversationHistory(\n  $channelId: String\n  $memberId: String\n  $last: IntMax100\n  $before: String\n  $from: Long\n  $to: Long\n) {\n  apiViewer {\n    conversationHistory(\n      channelId: $channelId\n      memberId: $memberId\n      last: $last\n      before: $before\n      from: $from\n      to: $to\n    ) {\n      edges {\n        node {\n          _id\n          messageEvent\n          id\n          createdAt\n          updatedAt\n          sentAt\n          readAt\n          deliveredAt\n          deletedAt\n          from\n          member {\n            name\n          }\n          memberId\n          errors\n          failedAt\n          platform\n          channelId\n          tags\n          meta\n          etag\n          isMultipleParty\n        }\n      }\n      pageInfo {\n        hasPreviousPage\n        startCursor\n      }\n    }\n  }\n}\n",
                "variables": {
                  "last": "={{$parameter.maxResults || 100}}",
                  "before": "={{$parameter.options.cursor || \"\"}}",
                  "channelId": "={{$parameter.channel}}"
                }
              }
            }
          }
        }
      ],
      "displayName": "Operation",
      "placeholder": "",
      "displayOptions": {
        "show": {
          "resource": [
            "memberAPI"
          ]
        }
      },
      "disabledOptions": {
        "hideOnCloud": true
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendResponses",
      "options": [
        {
          "name": "Send Responses",
          "value": "sendResponses",
          "action": "Send responses",
          "routing": {
            "request": {
              "url": "/sendResponses",
              "baseURL": "https://bot.api.woztell.com/"
            }
          }
        },
        {
          "name": "Redirect Member to Node",
          "value": "redirectMemberToNode",
          "action": "Redirect member to node",
          "routing": {
            "request": {
              "url": "/redirectMemberToNode",
              "baseURL": "https://bot.api.woztell.com/"
            }
          }
        },
        {
          "name": "Send Message Template",
          "value": "sendTemplates",
          "action": "Send message template",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/sendResponses",
              "baseURL": "https://bot.api.woztell.com/"
            }
          }
        }
      ],
      "displayName": "Operation",
      "placeholder": "",
      "displayOptions": {
        "show": {
          "resource": [
            "botAPI"
          ]
        }
      },
      "disabledOptions": {
        "hideOnCloud": true
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Members By Tags",
      "value": "getMembers",
      "action": "Get members by tags",
      "routing": {
        "send": {
          "paginate": "={{ $parameter.options.returnAll }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data.apiViewer.members"
              }
            }
          ]
        },
        "request": {
          "body": {
            "query": "query getMembers(\n  $first: IntMax100\n  $channelId: String\n  $tagFilters: [TagFilter]\n  $after: String\n) {\n  apiViewer {\n    members(first: $first, channelId: $channelId, tagFilters: $tagFilters, after: $after) {\n      edges {\n        node {\n          _id\n          externalId\n          name\n          tags\n        }\n      }\n      pageInfo {\n        hasNextPage\n        totalCount\n        endCursor\n      }\n    }\n  }\n}\n",
            "variables": {
              "after": "={{$parameter.options.cursor || \"\"}}",
              "first": "={{$parameter.maxResults || 100}}",
              "channelId": "={{$parameter.channel}}",
              "tagFilters": [
                {
                  "operator": "IN"
                }
              ]
            }
          }
        },
        "operations": {}
      },
      "resource": "memberAPI"
    },
    {
      "name": "Set Member Tags",
      "value": "memberTagging",
      "action": "Set member tags",
      "routing": {
        "request": {
          "body": {
            "query": "mutation AddMemberTags($input: ModifyMemberTagsInput!) {\n  addMemberTags(input: $input) {\n    err_code\n    member {\n      _id\n      externalId\n    }\n    memberId\n    ok\n  }\n}\n",
            "variables": {
              "input": {
                "channel": "={{$parameter.channel}}"
              }
            }
          }
        }
      },
      "resource": "memberAPI"
    },
    {
      "name": "Get Member Info By ID",
      "value": "getMemberInfo",
      "action": "Get member info by id",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data.apiViewer"
              }
            },
            null
          ]
        },
        "request": {
          "body": {
            "query": "query getMemberInfo($channelId: ID, $externalId: ID) {\n  apiViewer {\n    member(channelId: $channelId, externalId: $externalId) {\n      _id\n      createdAt\n      updatedAt\n      channelId\n      platform\n      tags\n      meta\n      externalId\n      botMeta {\n        subscribe\n        liveChat\n        treeId\n        nodeCompositeId\n        tree {\n          name\n        }\n        node {\n          name\n        }\n      }\n      name\n      firstName\n      lastName\n      gender\n      customLocale\n      locale\n      email\n    }\n  }\n}\n",
            "variables": {
              "channelId": "={{$parameter.channel}}",
              "externalId": "={{$parameter.externalId.replace(/[-()+]/g, \"\").replaceAll(\" \", \"\")}}"
            }
          }
        }
      },
      "resource": "memberAPI"
    },
    {
      "name": "Get Conversation History By ID",
      "value": "getConversationHistory",
      "action": "Get conversation history by id",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data.apiViewer.conversationHistory"
              }
            }
          ]
        },
        "request": {
          "body": {
            "query": "query getConversationHistory(\n  $channelId: String\n  $memberId: String\n  $last: IntMax100\n  $before: String\n  $from: Long\n  $to: Long\n) {\n  apiViewer {\n    conversationHistory(\n      channelId: $channelId\n      memberId: $memberId\n      last: $last\n      before: $before\n      from: $from\n      to: $to\n    ) {\n      edges {\n        node {\n          _id\n          messageEvent\n          id\n          createdAt\n          updatedAt\n          sentAt\n          readAt\n          deliveredAt\n          deletedAt\n          from\n          member {\n            name\n          }\n          memberId\n          errors\n          failedAt\n          platform\n          channelId\n          tags\n          meta\n          etag\n          isMultipleParty\n        }\n      }\n      pageInfo {\n        hasPreviousPage\n        startCursor\n      }\n    }\n  }\n}\n",
            "variables": {
              "last": "={{$parameter.maxResults || 100}}",
              "before": "={{$parameter.options.cursor || \"\"}}",
              "channelId": "={{$parameter.channel}}"
            }
          }
        }
      },
      "resource": "memberAPI"
    },
    {
      "name": "Send Responses",
      "value": "sendResponses",
      "action": "Send responses",
      "routing": {
        "request": {
          "url": "/sendResponses",
          "baseURL": "https://bot.api.woztell.com/"
        }
      },
      "resource": "botAPI"
    },
    {
      "name": "Redirect Member to Node",
      "value": "redirectMemberToNode",
      "action": "Redirect member to node",
      "routing": {
        "request": {
          "url": "/redirectMemberToNode",
          "baseURL": "https://bot.api.woztell.com/"
        }
      },
      "resource": "botAPI"
    },
    {
      "name": "Send Message Template",
      "value": "sendTemplates",
      "action": "Send message template",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/sendResponses",
          "baseURL": "https://bot.api.woztell.com/"
        }
      },
      "resource": "botAPI"
    }
  ]

npm_readme:
  # n8n-nodes-woztell-sanuker

  Welcome to our WOZTELL n8n nodes, for easier [WOZTELL](https://woztell.com/) integration within your n8n workflows, please read:

  *  [Product Features](#product-features)
  *  [In case you don't have the n8n](#in-case-you-dont-have-the-n8n)
  *  [Sign up WOZTELL and WhatsApp Business API for Free](#sign-up-woztell-and-whatsapp-business-api-for-free)
  *  [Installation](#installation)
  *  [Credentials](#credentials)
  *  [Build automation with WOZTELL](#build-automation-with-woztell)
  *  [Triggers and Nodes](#triggers-and-nodes)
  *  [Contact](#contact)
  *  [About Us](#about-us)
  *  [Resources](#resources)


  ## Product Features

  * **Webhook**: Receive all WhatsApp, Facebook Messenger, Instagram, WebChat, and website messages in WOZTELL inbox in real time.

  * **Send Messages**: Send messages or approved message templates to target customers via WhatsApp Business API.

  * **Chatbot Forwarding**: Route customer conversations to WOZTELL chatbot for autoreply.

  * **Full WhatsApp Message Type Support**: Support all business message types and conversation categories available on WhatsApp and Facebook Messenger.

  * **Member Search**: Batch query WOZTELL user information using Member Tags.

  * **OpenAPI Information Query**: Directly query and update user profiles, conversation histories, and related data on WOZTELL platform via OpenAPI.


  ## In case you don't have the n8n

  Connect WOZTELL on n8n | Unlock AI-powered WhatsApp automation in just a few clicks. Easily build no-code workflows on WhatsApp, Messenger, Instagram, and WebChat by connecting WOZTELL with thousands of n8n integrations. Automate personalized broadcasts, conversations, and inbox management, fully powered by WOZTELL’s OpenAPI and GenAI engine.


  ## Sign up WOZTELL and WhatsApp Business API for Free

  You can now create a WOZTELL account and open up a WhatsApp Business API account, completely for free.

  1.  Go to the registration link: https://platform.woztell.com/signup?lang=en&utm_campaign=plugin-n8n&utm_medium=plugin-n8n&utm_source=N8N

  2.  Fill in personal and company details and verify your email.

      ![register2](https://store.sanuker.cn/nn/images/register2.png)

      ![register3](https://store.sanuker.cn/nn/images/register3.png)

  3.  Once you signed up, you will be directed to the platform homepage. There, you can register a WhatsApp Business API account for free following [https://doc.woztell.com/docs/procedures/basic-whatsapp-chatbot-setup/standard-procedures-wa-connect-waba/](https://doc.woztell.com/docs/procedures/basic-whatsapp-chatbot-setup/standard-procedures-wa-connect-waba/) or  use the buttons on the top right of the homepage to chat with our sales team or book a demo session.

      ![register4](https://store.sanuker.cn/nn/images/register4.png)

  ## Installation

  Install WOZTELL community node package in your n8n

  1.	Sign in to n8n with admin access
  2.	Go to **Settings** > **Community Nodes**
  3.	Select **Install**
  4.	Copy and paste the n8n package name @woztell-sanuker/n8n-nodes-woztell-sanuker

  ```
  @woztell-sanuker/n8n-nodes-woztell-sanuker
  ```

  <img src="https://store.sanuker.cn/nn/images/image-20250826180723230.png" alt="image-20250826180723230" style="zoom:50%;" />

  5.  Click **Install**. n8n will now download the package and you may return to n8n to use.

  Learn more about installation from  [https://docs.n8n.io/integrations/community-nodes/installation/gui-install/](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)



  ## Credentials

  Before you begin using our n8n plugin, you will need to obtain your API Credential information from the WOZTELL Platform. These credentials serve as the essential authentication keys for accessing the WOZTELL Product API. Please refer to the documentation linked below to acquire the appropriate credential according to the required permission level, and then enter this information into the WOZTELL n8n Credential configuration.

  1.  Open **Credential**

  ![image-20250829102707280](https://store.sanuker.cn/nn/images/image-20250829102707280.png)

  2.  Create credential by searching **WOZTELL**

  <img src="https://store.sanuker.cn/nn/images/image-20250829122336781.png" alt="image-20250829122336781" style="zoom:50%;" />

  3.  Login your WOZTELL account and open [**https://platform.woztell.com/settings/accesstokens?lang=en**](https://platform.woztell.com/settings/accesstokens?lang=en), and enable the **channel:list**, **botapi:sendResponses**, and **bot:redirectMemberToNode** permissions.

  4.  For more functions you need, please check the document [**https://doc.woztell.com/docs/documentations/settings/access-token/**](https://doc.woztell.com/docs/documentations/settings/access-token/)

  5.  Generate the access token

  6.  For more details on access token, please refer to this [https://doc.woztell.com/docs/documentations/settings/access-token](https://doc.woztell.com/docs/documentations/settings/access-token).

      ![image-20250829103010464](https://store.sanuker.cn/nn/images/image-20250829103010464.png)

  7.  Fill in access token and **Save**

      ![image-20250829103034574](https://store.sanuker.cn/nn/images/image-20250829103034574.png)

      

  ## Build automation with WOZTELL

  #### Create a n8n workflow

  ![image-20250829121753114](https://store.sanuker.cn/nn/images/image-20250829121753114.png)

  #### Open the nodes panel

  ![image-20250829121645155](https://store.sanuker.cn/nn/images/image-20250829121645155.png)

  #### Search WOZTELL

  <img src="https://store.sanuker.cn/nn/images/image-20250829121853114.png" alt="image-20250829121853114" style="zoom:50%;" />



  ## Triggers and Nodes

  #### Overview

  By searching the keyword **“WOZTELL”** in the sidebar, you can access the list of available n8n nodes and triggers.

  <img src="https://store.sanuker.cn/nn/images/image-20250829122639889.png" alt="image-20250829122639889" style="zoom:50%;" />

  Within this list, you will find all nodes and triggers developed by WOZTELL for n8n. You may directly drag and drop the required node or trigger into the workflow designer to make it part of your workflow.

  -  **Triggers**: These nodes enable you to receive all webhook message data coming from WOZTELL products.
  -  **BOT API Actions**: These nodes provide your workflow with the ability to send messages and perform data operations through WOZTELL products.
  -  **Member Actions**: These nodes allow you to efficiently manage all member information stored within WOZTELL products.



  #### Webhook: On WOZTELL Message received

  Through the **WOZTELL Trigger** node, you can receive webhook messages from any WOZTELL Channel, including various types such as *Inbound*, *Outbound*, and *Member Update*. Each message is delivered in JSON format and contains comprehensive data along with the associated event information.

  ![image-20250829122535949](https://store.sanuker.cn/nn/images/image-20250829122535949.png)

  Within this node, you can specify the corresponding **Webhook Path** and configure filtering options based on **Channel ID** and **Event Type**, ensuring that the information you receive is properly filtered and can be utilized effectively.

  Learn more from: [https://doc.woztell.com/docs/documentations/channels/channels-webhook](https://doc.woztell.com/docs/documentations/channels/channels-webhook)

  ![image-20250826184406024](https://store.sanuker.cn/nn/images/image-20250826184406024.png)



  #### Node: Send Response

  Using the **Send Response** node, you can directly send messages from your WhatsApp Business number to the target customer’s WhatsApp account via the WOZTELL BotAPI. All message content can be placed directly within the Response data.

  Once the message is sent, you will receive the corresponding API result, which allows subsequent nodes to continue processing the data.

  For more details, please refer to the official WOZTELL product documentation: [https://doc.woztell.com/docs/reference/bot-api-reference#send-responses](https://doc.woztell.com/docs/reference/bot-api-reference#send-responses)

  ![sendResponse](https://store.sanuker.cn/nn/images/sendResponse.png)



  #### Node: Redirect member to node

  With the **Redirect Member to Node** node, you no longer need to manually construct complex JSON data for sending messages. Instead, you simply pass the relevant WOZTELL information to a **Chatbot Tree** node, and the WOZTELL Chatbot will handle the subsequent actions for you — such as sending WhatsApp conversation message templates.

  This node can be understood as a memory pointer: it redirects the current operation to the WOZTELL Chatbot. You do not need to prepare complicated data structures; you only need to initiate a request to the BotAPI.

  For customers who already have chatbot designs running on the WOZTELL platform, this provides an excellent way to integrate with n8n.

  Learn more from: [https://doc.woztell.com/docs/reference/bot-api-reference#redirect-member-to-node](https://doc.woztell.com/docs/reference/bot-api-reference#redirect-member-to-node)

  ![redirectMemberToNode](https://store.sanuker.cn/nn/images/redirectMemberToNode.png)

  #### Node: Send WhatsApp Template message

  According to WhatsApp’s official business messaging guidelines, when contacting unfamiliar WhatsApp numbers or numbers outside the 24-hour session window, you must first send a **WhatsApp Template Message**.

  Our n8n plugin significantly simplifies the complexity of working with WhatsApp Template Messages. The current node can automatically generate the required message content based on templates that have already been created and approved. You only need to complete the corresponding form fields, and the Template Message can be sent directly.

  Learn more from: [https://doc.woztell.com/docs/integrations/whatsapp/wa-message-types#whatsapp-message-template](https://doc.woztell.com/docs/integrations/whatsapp/wa-message-types#whatsapp-message-template)

  ![image-20250826185818626](https://store.sanuker.cn/nn/images/image-20250826185818626.png)



  ## Contact

  We sincerely appreciate your strong support and understanding of our current n8n plugin. If you are interested in learning more about our products or services, you may also reach us through the following channels:

  *  WOZTELL product team: [https://woztell.com](https://woztell.com)
  *  Sanuker service team: [https://sanuker.com](https://sanuker.com)
  *  Email: [kris@woztell.com](mailto:kris@woztell.com)
  *  Email: [hello@woztell.com](mailto:hello@woztell.com)
  *  WOZTELL Customer Success WhatsApp: [https://wa.me/14157959796](https://wa.me/14157959796)
  *  Sanuker Service WhatsApp: [https://wa.me/85254432330](https://wa.me/85254432330)



  ## About Us

  **Sanuker**

  Sanuker is a leading AI Business Messaging Consulting firm, offering professional business messaging services and AI chatbot solutions tailored for enterprises. We distinguish ourselves in the market through our innovative approach to messaging designs and strategies, especially across Meta platforms - WhatsApp, Messenger, Instagram.

  As a trusted partners of AWS, HSBC Business Go, and Meta, we serve 10K+ clients across 25 countries through our WOZTELL Conversational Platform, empowering businesses to qualify leads and boost conversions.

  **WOZTELL**

  WOZTELL is your all-in-one platform to seamlessly create, manage, and deploy chatbots across WhatsApp, Messenger, Instagram, and Websites. Powered by cutting-edge GenAI engines, WOZTELL empowers you to execute personalized broadcasts, manage unlimited live chat agents, and integrate effortlessly with any third-party software via our robust OpenAPI.

  ## Resources

  - n8n Community Nodes, [https://docs.n8n.io/integrations/#community-nodes](https://docs.n8n.io/integrations/#community-nodes)
  - WOZTELL Platform documentation, [https://doc.woztell.com/](https://doc.woztell.com/)
  - WOZTELL Bot API, [https://doc.woztell.com/docs/reference/bot-api-reference](https://doc.woztell.com/docs/reference/bot-api-reference)
  - WOZTELL Open API, [https://doc.woztell.com/open-api-reference](https://doc.woztell.com/open-api-reference)
  - WOZTELL Webhook, [https://doc.woztell.com/docs/documentations/channels/channels-webhook](https://doc.woztell.com/docs/documentations/channels/channels-webhook)
  - WhatsApp Integration on Woztell: [https://doc.woztell.com/docs/integrations/whatsapp/wa-overview](https://doc.woztell.com/docs/integrations/whatsapp/wa-overview)
  - Facebook Messenger Integration on WOZTELL: [https://doc.woztell.com/docs/integrations/facebook/fb-overview](https://doc.woztell.com/docs/integrations/facebook/fb-overview)
  - Instagram Integration on WOZTELL: [https://doc.woztell.com/docs/integrations/instagram/ig-overview](https://doc.woztell.com/docs/integrations/instagram/ig-overview)
  - Webchat Integration on WOZTELL: [https://doc.woztell.com/docs/integrations/web-chat/webchat-overview](https://doc.woztell.com/docs/integrations/web-chat/webchat-overview)

ai_documentation_summary:
  {"purpose":"Automates messaging workflows across WhatsApp, Facebook Messenger, and Instagram by integrating WOZTELL's API with n8n for real-time message handling, chatbot forwarding, and user management.","capabilities":["Receive real-time messages from WhatsApp, Messenger, Instagram, WebChat, and websites","Send messages and approved message templates via WhatsApp Business API","Route conversations to WOZTELL chatbot for automated replies","Support all business message types and conversation categories","Batch query user information using Member Tags","Query and update user profiles, conversation histories, and related data via OpenAPI"],"authentication":"API Token (Access Token) with specific permissions (channel:list, botapi:sendResponses, bot:redirectMemberToNode)","commonUseCases":["Automated customer support on multiple messaging platforms","Chatbot integration for instant responses","Broadcasting personalized messages to customers","Inbox management and message routing"],"limitations":["Requires separate setup of WOZTELL account and WhatsApp Business API","Access token requires specific permission levels to function correctly","Node is a community package and may depend on n8n's community node support"],"relatedNodes":["Webhook Node","HTTP Request Node","If Node","Wait Node"]}


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

updated_at: 2026-04-16 09:43:36
author_name: craftmypdf
author_github_url: https://github.com/craftmypdf/
npm_package_name: n8n-nodes-craftmypdf
npm_version: 0.2.1
community_fetched_at: 2026-04-16T09:43:36.443Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Create beautiful PDF documents with ease using our drag-and-drop template editor. Start from ready-made templates for invoices, certificates, receipts, contracts, and more.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "account",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Transaction",
          "value": "transaction"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get account information",
          "description": "Get account information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an image",
          "description": "Creates an image file with JSON data and your template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a PDF",
          "description": "Creates a PDF file with JSON data and your template"
        },
        {
          "name": "Create Async",
          "value": "createAsync",
          "action": "Create a PDF asynchronously",
          "description": "Creates a PDF file asynchronously with JSON data and your template. The API returns immediately and once the PDF document is generated, it will make a HTTP/HTTPS GET to your URL (will retry for 3 times before giving up)."
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge multiple PDF files",
          "description": "Merges multiple PDF URLs"
        },
        {
          "name": "Add Watermark",
          "value": "addWatermark",
          "action": "Add watermark",
          "description": "Add watermark to a PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List transactions",
          "description": "List transactions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transaction"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get account information",
      "description": "Get account information",
      "resource": "account"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an image",
      "description": "Creates an image file with JSON data and your template",
      "resource": "image"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a PDF",
      "description": "Creates a PDF file with JSON data and your template",
      "resource": "pdf"
    },
    {
      "name": "Create Async",
      "value": "createAsync",
      "action": "Create a PDF asynchronously",
      "description": "Creates a PDF file asynchronously with JSON data and your template. The API returns immediately and once the PDF document is generated, it will make a HTTP/HTTPS GET to your URL (will retry for 3 times before giving up).",
      "resource": "pdf"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge multiple PDF files",
      "description": "Merges multiple PDF URLs",
      "resource": "pdf"
    },
    {
      "name": "Add Watermark",
      "value": "addWatermark",
      "action": "Add watermark",
      "description": "Add watermark to a PDF",
      "resource": "pdf"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List transactions",
      "description": "List transactions",
      "resource": "transaction"
    }
  ]

npm_readme:
  # n8n-nodes-craftmypdf

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

  [CraftMyPDF](https://craftmypdf.com) offers PDF generation API and image generation API. CraftMyPDF's advanced drag & drop editor lets you design PDF templates in any browser and generate pixel-perfect PDF documents from reusable templates and data with no-code platforms such as N8n, Zapier, Make, Bubble.io or REST API.

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

  The sections:

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

  ## Installation

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

  ## Operations

  The following are the options:

  | Name          | Operation      | Description                                                                                                                  | Action                      | Documentation Link                                                                              |
  | ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------- |
  | Create        | `create`       | Creates a PDF file with JSON data and your template.                                                                         | Create a PDF                | [Link](https://craftmypdf.com/docs/index.html#tag/PDF-Generation-API/operation/create)          |
  | Create Image  | `create-image` | Creates an image file with JSON data and your template.                                                                      | Create an image             | [Link](https://craftmypdf.com/docs/index.html#tag/Image-Generation-API/operation/create-image)  |
  | Create Async  | `createAsync`  | Creates a PDF file asynchronously with JSON data and your template. The API returns immediately, and will retry for 3 times. | Create a PDF asynchronously | [Link](https://craftmypdf.com/docs/index.html#tag/PDF-Generation-API/operation/create-async)    |
  | Merge         | `merge`        | Merges multiple PDF URLs.                                                                                                    | Merge multiple PDF files    | [Link](https://craftmypdf.com/docs/index.html#tag/PDF-Manipulation-API/operation/merge-pdfs)    |
  | Add Watermark | `addWatermark` | Adds a watermark to a PDF.                                                                                                   | Add watermark               | [Link](https://craftmypdf.com/docs/index.html#tag/PDF-Manipulation-API/operation/add-watermark) |

  ## Credentials

  You only need a CraftMyPDF API Key for this, you can get it in the API Integration tab in the web portal.

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Usage

  Please check out the [CraftMyPDF API Reference](https://craftmypdf.com/docs/index.html) for more information on how to use the integration.

  Please check out the [N8n integration tutorial](https://craftmypdf.com/blog/automate-pdf-generation-with-n8n-and-craftmypdf/) for more information.

  ## License

  CraftMyPDF/n8n-nodes-craftmypdf is licensed under the [MIT License](LICENSE.md).

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [CraftMyPDF API Reference](https://craftmypdf.com/docs/index.html)

ai_documentation_summary:
  {"purpose":"Generates PDF documents and images from reusable templates using the CraftMyPDF API, supporting both synchronous and asynchronous operations.","capabilities":["Create PDF files from JSON data and templates","Create image files from JSON data and templates","Generate PDFs asynchronously with automatic retry logic","Merge multiple PDF files","Add watermarks to PDFs","Access drag-and-drop template editor for invoice, certificate, receipt, and contract templates"],"authentication":"API key required","commonUseCases":["Automated invoice generation","Certificate creation and distribution","Receipt generation for e-commerce","Contract document assembly","Bulk document processing with retry logic"],"limitations":["Requires valid CraftMyPDF API key","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":["n8n-nodes-craftmypdf.craftMyPdf"]}


node_type: @easybits/n8n-nodes-extractor.easybitsExtractor
package_name: @easybits/n8n-nodes-extractor
display_name: easybits Extractor
category: Community
development_style: declarative
version: 1,2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: ivan.easybits
author_github_url: https://github.com/easybits-tech/n8n-nodes-extractor.git
npm_package_name: @easybits/n8n-nodes-extractor
npm_version: 1.4.0
community_fetched_at: 2026-04-16T09:43:36.444Z
description:
  Sends files to the easybits Extractor API for data extraction. Supports binary file attachments and base64 Data URLs as input.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document",
          "description": "A document file (PDF, JPEG, or PNG) to extract data from"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "extract",
      "options": [
        {
          "name": "Extract",
          "value": "extract",
          "action": "Extract a document",
          "description": "Send documents to the easybits' Extractor API for structured data extraction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Extract",
      "value": "extract",
      "action": "Extract a document",
      "description": "Send documents to the easybits' Extractor API for structured data extraction",
      "resource": "document"
    }
  ]

npm_readme:
  # @easybits/n8n-nodes-extractor

  [![npm version](https://img.shields.io/npm/v/@easybits%2Fn8n-nodes-extractor.svg)](https://www.npmjs.com/package/@easybits/n8n-nodes-extractor)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  n8n community node that sends documents to the [Easybits Extractor](https://extractor.easybits.tech) API for structured data extraction.

  Replace complex OCR setups, fragile Regex logic, and heavy cloud consoles (like AWS Textract) with a single node that guarantees strictly typed JSON output.

  ## What it does

  Here is the standard flow:
  1. Create a pipeline: Define your extraction schema for free at [extractor.easybits.tech](https://extractor.easybits.tech).
  2. Pass the file: Use this node in n8n to send your document. It accepts PDF, JPG, or PNG files, either as standard n8n Binary Files or base64 Data URLs.
  3. Get structured data back: The node returns a strictly typed JSON object containing the exact key-value pairs you defined, ready to be used in your downstream n8n nodes.

  ## Installation

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

  The package name is: `@easybits/n8n-nodes-extractor`

  ## What can you build with this node?

  This node is designed for high-stakes, production-grade document automation:

  **Accounting & Order Processing:** Automate the extraction of key data points from order and invoice documents for inventory management and accounting.

  **Digital Document Archiving:** Automate the extraction and classification of relevant information for structured storage in public administration Document Management Systems (DMS).

  **Claims Processing for Insurers:** Automate FNOL (First Notice of Loss) capture and extract structured data from messy claims documents.

  **Medical Reports:** Extract critical findings from medical reports and handwritten doctor prescriptions.

  ## Supported file formats

  **JPEG**, **PNG**, and **PDF** — other file types will be rejected with a clear error message.

  ## Configuration

  ### Credential

  Both **Pipeline ID** and **API Key** are configured in the credential dialog. Each Easybits Extractor pipeline has its own API key, so bundling them together prevents accidental mismatches. The credential also includes a built-in connection test.

  | Credential Field   | Description                                                              |
  | ------------------ | ------------------------------------------------------------------------ |
  | **Pipeline ID**    | The ID of your extraction pipeline, obtained from Easybits Extractor     |
  | **API Key**        | Your API key from the Easybits Extractor dashboard (stored as a secret)  |

  ### Node parameters

  | Parameter          | Description                                                              |
  | ------------------ | ------------------------------------------------------------------------ |
  | **Input Type**     | How files are provided: **Binary Files** (default), **Data URLs**, or **Auto** |
  | **Data URL Field** | JSON field name containing base64 Data URL(s). Shown when Input Type is Data URLs or Auto. Default: `dataUrl` |

  ### Input types

  - **Binary Files** — reads binary attachments from input items (e.g. from Read Binary File, HTTP Request, or email trigger nodes). This is the default and matches the original behavior.
  - **Data URLs** — reads pre-encoded base64 Data URLs from a JSON field on each item. Useful when you already have Data URLs from a previous API response or a Set node.
  - **Auto** — collects both binary attachments and Data URLs from the same items. Handy when mixing sources.

  ## How it works

  1. Collects files from all input items (as binary attachments, Data URLs, or both — depending on Input Type)
  2. Converts binary files to base64 Data URLs; passes Data URLs through as-is
  3. POSTs them all to `https://extractor.easybits.tech/api/pipelines/{pipelineId}` with Bearer auth
  4. Returns the extraction result as a single JSON output item

  ## usage

  ### Extract data from a single file

  Use **Read Binary File** to load a document, then connect it to easybits Extractor.

  ```
  [Read Binary File] → [easybits Extractor]
  ```

  Extractor settings:
  - **Input Type**: Binary Files
  - **Credential**: select your Easybits Extractor credential (Pipeline ID + API Key)

  ### Extract data from multiple files

  Any node that outputs multiple items with binary attachments works — for example, reading files from disk in a loop, or an email trigger that has several attachments.

  ```
  [Read Binary Files (loop)] → [easybits Extractor]
  ```

  All binary attachments across all input items are collected and sent in a single API call.

  ### Extract from an HTTP-downloaded file

  Use **HTTP Request** with "Response Format" set to **File** to download a PDF or image, then pass it directly to the extractor.

  ```
  [HTTP Request (download file)] → [easybits Extractor]
  ```

  ### Pass a base64 Data URL from a previous step

  If you already have a base64 Data URL (e.g. from another API response), use the **Data URLs** input type.

  ```
  [HTTP Request / Set node] → [easybits Extractor]
  ```

  Extractor settings:
  - **Input Type**: Data URLs
  - **Data URL Field**: `dataUrl` (or whatever field contains the Data URL in your JSON)

  The JSON item should look like:

  ```json
  {
    "dataUrl": "data:image/png;base64,iVBORw0KGgo..."
  }
  ```

  The field can also contain an **array** of Data URLs:

  ```json
  {
    "dataUrl": [
      "data:image/jpeg;base64,/9j/4AAQ...",
      "data:image/jpeg;base64,JVBERi0..."
    ]
  }
  ```

  ### Read a Data URL from a nested JSON field

  If the Data URL is nested inside the JSON structure, use dot notation in the **Data URL Field** parameter.

  For this JSON:

  ```json
  {
    "response": {
      "attachments": [
        { "url": "data:image/png;base64,iVBORw0KGgo..." }
      ]
    }
  }
  ```

  Set **Data URL Field** to `response.attachments.0.url`.

  ### Mix binary files and Data URLs

  Use **Auto** to collect from both sources at once.

  ```
  [Read Binary File] ──┐
                        ├──→ [Merge] → [easybits Extractor]
  [HTTP Request (JSON)] ┘
  ```

  Extractor settings:
  - **Input Type**: Auto
  - **Data URL Field**: the field name for items that carry Data URLs

  Binary attachments are converted to Data URLs automatically; JSON Data URLs are passed through as-is. Everything is sent in one API call.

  ## Compatibility

  Requires n8n v0.187 or later (community node support).

  ## Resources

  - [Easybits Extractor documentation](https://extractor.easybits.tech/documentation)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)


node_type: n8n-nodes-stencilpdf.stencilpdf
package_name: n8n-nodes-stencilpdf
display_name: StencilPDF
description: Generate PDF Reports from templates using stencil
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: kirschner
author_github_url: https://github.com/trpouh/
npm_package_name: n8n-nodes-stencilpdf
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:36.444Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "report",
      "options": [
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get reports",
          "description": "Get many reports"
        },
        {
          "name": "Render PDF",
          "value": "renderPDF",
          "action": "Render PDF",
          "description": "Render a report template as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get reports",
      "description": "Get many reports",
      "resource": "report"
    },
    {
      "name": "Render PDF",
      "value": "renderPDF",
      "action": "Render PDF",
      "description": "Render a report template as PDF",
      "resource": "report"
    }
  ]

npm_readme:
  # n8n-nodes-stencilpdf

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

  StencilPDF is a service for generating PDFs from customizable templates with dynamic variables.

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

  ## Installation

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

  ## Operations

  ### Report

  - **Get Many**: Retrieve a list of all available report templates from your StencilPDF account
  - **Render PDF**: Generate a PDF from a report template by providing variable values. Returns the PDF as binary data.

  ## Credentials

  To use this node, you need a StencilPDF API key.

  1. Sign up for an account at [stencilpdf.com](https://stencilpdf.com)
  2. Navigate to your account settings to generate an API key. It will start with `rbk_`
  3. In n8n, create new credentials of type "StencilPDF API"
  4. Enter your API key

  ## Compatibility

  Tested with n8n version 2.4.6

  ## Resources

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


node_type: @serphouse/n8n-nodes-serphouse.serphouse
package_name: @serphouse/n8n-nodes-serphouse
display_name: SERPHouse
description: Scrape Google and other search engines from SERPHouse's official node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: serphouse
author_github_url: https://github.com/SERPHouse/n8n-node-serphouse.git
npm_package_name: @serphouse/n8n-nodes-serphouse
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:36.445Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "serpLiveSearchPost",
      "options": [
        {
          "name": "Serp Live Search (POST)",
          "value": "serpLiveSearchPost",
          "action": "Serp Live Search (POST)",
          "routing": {
            "request": {
              "url": "/serp/live",
              "method": "POST"
            }
          }
        },
        {
          "name": "Google SERP (Top 100 Results)",
          "value": "googleSerpTopHundred",
          "action": "Google SERP (Top 100 results)",
          "routing": {
            "request": {
              "url": "/serp/google_advanced",
              "method": "POST"
            }
          }
        },
        {
          "name": "Google Jobs API",
          "value": "googleJobs",
          "action": "Google Jobs API",
          "routing": {
            "request": {
              "url": "/google-jobs-api",
              "method": "POST"
            }
          }
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Serp Live Search (POST)",
      "value": "serpLiveSearchPost",
      "action": "Serp Live Search (POST)",
      "routing": {
        "request": {
          "url": "/serp/live",
          "method": "POST"
        }
      },
      "resource": "search"
    },
    {
      "name": "Google SERP (Top 100 Results)",
      "value": "googleSerpTopHundred",
      "action": "Google SERP (Top 100 results)",
      "routing": {
        "request": {
          "url": "/serp/google_advanced",
          "method": "POST"
        }
      },
      "resource": "search"
    },
    {
      "name": "Google Jobs API",
      "value": "googleJobs",
      "action": "Google Jobs API",
      "routing": {
        "request": {
          "url": "/google-jobs-api",
          "method": "POST"
        }
      },
      "resource": "search"
    }
  ]

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

  # n8n-nodes-serphouse

  This is an n8n community node that lets you use [SERPHouse](https://serphouse.com/) in your n8n workflows.

  SERPHouse is a powerful SERP API that allows you to scrape Google, Bing, Yahoo, and other search engines with ease. Get real-time search results, job listings, and comprehensive SERP data.

  ## Installation

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

  ## Prerequisites

  You need a SERPHouse account and API key. You can sign up at [serphouse.com](https://serphouse.com/register).

  ## Operations

  The SERPHouse node supports the following operations:

  ### Serp Live Search (POST)

  Perform real-time searches across Google, Bing, and Yahoo search engines.

  **Supported Search Engines:**

  - Google
  - Bing
  - Yahoo

  **Features:**

  - Multiple search types: Web, News, Image, Shop
  - Device-specific results: Desktop, Tablet, Mobile
  - Location targeting
  - Date range filtering
  - Customizable result count and pagination
  - Verbatim search and GFilter options

  ### Google SERP (Top 100 Results)

  Retrieve comprehensive Google search results with up to 100 results per query.

  **Features:**

  - Multi-page scraping (max_pages parameter)
  - Device-specific results: Desktop, Tablet, Mobile
  - Location targeting
  - Date range filtering
  - Verbatim search and GFilter options
  - JSON or HTML response formats

  ### Google Jobs API

  Search and retrieve job listings from Google Jobs.

  **Features:**

  - Location-based job search
  - Date range filtering
  - Multi-language and domain support
  - JSON or HTML response formats

  ## Credentials

  To use this node, you need to configure your SERPHouse API credentials:

  1. Go to **Credentials** → **New**
  2. Select **SERPHouse API**
  3. Enter your API key from your [SERPHouse account](https://www.serphouse.com/home)

  ## Usage

  ### Example 1: Basic Search

  ```
  1. Add SERPHouse node to your workflow
  2. Select "Serp Live Search (POST)" operation
  3. Enter your search query
  4. Choose your search engine from Google, Bing and Yahoo
  5. Select domain and language
  6. Choose your location
  7. Execute the node
  ```

  ### Example 2: Multi-page SERP Results

  ```
  1. Add SERPHouse node to your workflow
  2. Select "Google SERP (Top 100 Results)" operation
  3. Enter your search query
  4. Configure domain, language, and location
  5. In Additional Fields, set "Max Pages" to desired value
  6. Execute the node to get comprehensive results
  ```

  ### Example 3: Google Jobs Search

  ```
  1. Add SERPHouse node to your workflow
  2. Select "Google Jobs API" operation
  3. Enter job search query (e.g., "software engineer")
  4. Select domain and language
  5. Choose location
  6. Optionally add date range filtering
  7. Execute the node
  ```

  ## Resources

  - [SERPHouse API Documentation](https://docs.serphouse.com/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [SERPHouse Website](https://serphouse.com/)

  ## Version History

  ### 1.0.0

  - Initial release
  - Serp Live Search (POST) operation
  - Google SERP (Top 100 Results) operation
  - Google Jobs API operation

  ## License

  [MIT](https://github.com/SERPHouse/n8n-node-serphouse/blob/master/LICENSE.md)

  ## Support

  For issues or questions:

  - Contact SERPHouse support at [serphouse.com/contact-us](https://www.serphouse.com/contact-us)
  - You contact send your suggestions to [serphouse](accounts@serphouse.com)

ai_documentation_summary:
  {"purpose":"This n8n community node enables scraping search results from Google, Bing, and Yahoo, as well as retrieving job listings, using SERPHouse's API.","capabilities":["Real-time search across Google, Bing, and Yahoo","Support for Web, News, Image, and Shop search types","Device-specific results (Desktop, Tablet, Mobile)","Location targeting","Date range filtering","Multi-page SERP result retrieval (up to 100 results)","Google Jobs API for job listing searches","Verbatim search and GFilter options","JSON or HTML response formats"],"authentication":"API key required","commonUseCases":["Real-time keyword research and competitor analysis","Job market analysis and recruitment","Market trend monitoring across multiple search engines","Automated data collection for SEO or marketing campaigns"],"limitations":["Requires a paid SERPHouse account and API key","Google SERP operation limited to top 100 results per query","No built-in rate limiting or retry logic mentioned in README"],"relatedNodes":["HTTP Request","Code","Split In Batches"]}


node_type: n8n-nodes-airparser.airparser
package_name: n8n-nodes-airparser
display_name: Airparser
description: Extract structured data from emails, PDFs, images, and other documents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: andrew_io
author_github_url: https://github.com/Airparser/
npm_package_name: n8n-nodes-airparser
npm_version: 1.0.2
community_fetched_at: 2026-04-16T09:43:36.446Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "importFileSync",
      "options": [
        {
          "name": "Import File",
          "value": "importFileSync",
          "action": "Import a binary file into an inbox and return extracted data immediately",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a binary file into an inbox and return extracted data immediately"
        },
        {
          "name": "Import Text/HTML",
          "value": "importTextHtmlSync",
          "action": "Import a text html document into an inbox and return extracted data immediately",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a text/HTML document into an inbox and return extracted data immediately"
        },
        {
          "name": "Import File (Async)",
          "value": "importFile",
          "action": "Import a binary file into an inbox asynchronously and return the document ID",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a binary file into an inbox asynchronously and return the document ID"
        },
        {
          "name": "Import Text/HTML (Async)",
          "value": "importTextHtml",
          "action": "Import a text html document into an inbox asynchronously and return the document ID",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a text/HTML document into an inbox asynchronously and return the document ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Import File",
      "value": "importFileSync",
      "action": "Import a binary file into an inbox and return extracted data immediately",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a binary file into an inbox and return extracted data immediately",
      "resource": "document"
    },
    {
      "name": "Import Text/HTML",
      "value": "importTextHtmlSync",
      "action": "Import a text html document into an inbox and return extracted data immediately",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a text/HTML document into an inbox and return extracted data immediately",
      "resource": "document"
    },
    {
      "name": "Import File (Async)",
      "value": "importFile",
      "action": "Import a binary file into an inbox asynchronously and return the document ID",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a binary file into an inbox asynchronously and return the document ID",
      "resource": "document"
    },
    {
      "name": "Import Text/HTML (Async)",
      "value": "importTextHtml",
      "action": "Import a text html document into an inbox asynchronously and return the document ID",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a text/HTML document into an inbox asynchronously and return the document ID",
      "resource": "document"
    }
  ]

npm_readme:
  # Airparser n8n Node

  > 🧩 Official n8n Node to interact with [Airparser](https://airparser.com): import documents and extract structured data from emails, PDFs, images, and other documents.

  [About](#about)  
  [Operations](#operations)  
  [Credentials](#credentials)  
  [Usage](#usage)  
  [Resources](#resources)

  ## About

  **Airparser** is a powerful document parsing service that extracts structured data from emails, PDFs, images, and other documents using AI and machine learning.

  This official **n8n Node** allows you to:

  ✅ Import documents into Airparser for parsing  
  ✅ Automatically trigger workflows when documents are parsed  
  ✅ Extract structured data and use it in your automation workflows

  ## Operations

  ### Airparser Actions

  - **Import Document From File**
    - Use when you have a binary file (PDF, image, email attachment, etc.)
    - Example: Send files uploaded to a Google Drive folder to Airparser for data extraction
    - Automatically extracts structured data from the document

  - **Import Text/HTML Document**
    - Use when you have HTML pages, email content, or plain text
    - Example: Parse HTML from a website or email body content
    - Perfect for extracting data from web pages or text-based content

  ### Airparser Trigger

  - **Document Parsed**
    - Automatically starts your workflow when a document is parsed in Airparser
    - Receives the extracted data and passes it to the next node
    - Built-in security to protect your webhook

  ## Credentials

  ### Airparser API Key

  1. Sign in to your [Airparser account](https://app.airparser.com/account)
  2. Go to your account settings
  3. Copy your **API Key**

  In n8n:

  - Click **"Add Credential"** and search for **"Airparser API"**
  - Paste your API Key

  For more information, visit the [Airparser documentation](https://help.airparser.com/).

  ## Usage

  ### Airparser Trigger

  **Quick Start:**

  1. Add the **Airparser Trigger** node to your workflow
  2. Select **"Document processed"** as the event
  3. Choose the **Inbox** where you want to receive events
  4. Activate your workflow

  That's it! Your workflow will now automatically run whenever a document is parsed in the selected inbox.

  **What happens:**

  - When a document is parsed in your Airparser inbox, the trigger receives the extracted data
  - The data is automatically passed to the next node in your workflow
  - You can use this data in any n8n node (send emails, update databases, create records, etc.)

  **Example Use Cases:**

  - **Email Notifications**: Send an email notification when an invoice is parsed
  - **Data Logging**: Save parsed data to Google Sheets or Airtable
  - **CRM Updates**: Create or update records in your CRM when documents are processed
  - **Approval Workflows**: Route documents for approval based on parsed data

  ### Import Document From File

  1. Select the **Import Document From File** operation
  2. Choose an **Inbox** from the dropdown
  3. Enter the **Document File (Binary)** property name (usually "data")
  4. Optionally add a custom **Filename** or **Additional Metadata**

  **Example workflow:**

  - Read a PDF file → Airparser node → Extract data → Use in next steps

  ### Import Text/HTML Document

  1. Select the **Import Text/HTML Document** operation
  2. Choose an **Inbox** from the dropdown
  3. Enter the **HTML/Text Content** (paste directly or use an expression)
  4. Optionally add a custom **Filename** or **Additional Metadata**

  **Example workflow:**

  - Fetch HTML from a website → Airparser node → Extract data → Process results

  ## Resources

  - [Airparser](https://airparser.com) — Document parsing & data extraction
  - [Airparser Documentation](https://help.airparser.com/) — Help and guides
  - [n8n](https://n8n.io) — Workflow automation platform
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"This n8n node interacts with the Airparser service to extract structured data from emails, PDFs, images, and other documents using AI and machine learning.","capabilities":["Import documents from binary files (PDFs, images, email attachments)","Import text or HTML content (web pages, email bodies)","Trigger workflows automatically when documents are parsed","Extract structured data for use in subsequent automation steps","Support custom metadata and filename configuration"],"authentication":"API Key required","commonUseCases":["Automated invoice processing and data logging","CRM record creation or updates from parsed documents","Email notification triggers based on document content","Approval workflows initiated by document parsing","Data extraction from web pages or text sources"],"limitations":[],"relatedNodes":["n8n-nodes-core.binaryData","n8n-nodes-core.httpRequest","n8n-nodes-core.code","n8n-nodes-github.githubWebhook","n8n-nodes-google-sheets.googleSheets"]}


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

updated_at: 2026-04-16 09:43:36
author_name: wix-ci
author_github_url: https://github.com/wix-incubator/n8n-nodes-wix.git
npm_package_name: @wix/n8n-nodes-wix
npm_version: 1.0.4
community_fetched_at: 2026-04-16T09:43:36.447Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "order",
      "options": [
        {
          "name": "Order",
          "value": "order"
        },
        {
          "name": "Product",
          "value": "product"
        }
      ],
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel an order",
          "routing": {
            "request": {
              "url": "=/ecom/v1/orders/{{$parameter.orderId}}/cancel",
              "method": "POST"
            }
          },
          "description": "Cancel an existing order"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an order",
          "routing": {
            "request": {
              "url": "/ecom/v1/orders",
              "method": "POST"
            }
          },
          "description": "Create a new order"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an order",
          "routing": {
            "request": {
              "url": "=/ecom/v1/orders/{{$parameter.orderId}}",
              "method": "GET"
            }
          },
          "description": "Get a single order by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many orders",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/ecom/v1/orders/search",
              "method": "POST"
            }
          },
          "description": "Query and list orders"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an order",
          "routing": {
            "request": {
              "url": "=/ecom/v1/orders/{{$parameter.orderId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "order"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "routing": {
            "request": {
              "url": "/stores/v3/products-with-inventory",
              "method": "POST"
            }
          },
          "description": "Create a new product with inventory"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product",
          "routing": {
            "request": {
              "url": "=/stores/v3/products/{{$parameter.productId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing product"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "routing": {
            "request": {
              "url": "=/stores/v3/products/{{$parameter.productId}}",
              "method": "GET"
            }
          },
          "description": "Get a single product by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many products",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/stores/v3/products/search",
              "method": "POST"
            }
          },
          "description": "Query and list products"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "routing": {
            "request": {
              "url": "=/stores/v3/products-with-inventory/{{$parameter.productId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing product with inventory"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel an order",
      "routing": {
        "request": {
          "url": "=/ecom/v1/orders/{{$parameter.orderId}}/cancel",
          "method": "POST"
        }
      },
      "description": "Cancel an existing order",
      "resource": "order"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an order",
      "routing": {
        "request": {
          "url": "/ecom/v1/orders",
          "method": "POST"
        }
      },
      "description": "Create a new order",
      "resource": "order"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an order",
      "routing": {
        "request": {
          "url": "=/ecom/v1/orders/{{$parameter.orderId}}",
          "method": "GET"
        }
      },
      "description": "Get a single order by ID",
      "resource": "order"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many orders",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/ecom/v1/orders/search",
          "method": "POST"
        }
      },
      "description": "Query and list orders",
      "resource": "order"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an order",
      "routing": {
        "request": {
          "url": "=/ecom/v1/orders/{{$parameter.orderId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing order",
      "resource": "order"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "routing": {
        "request": {
          "url": "/stores/v3/products-with-inventory",
          "method": "POST"
        }
      },
      "description": "Create a new product with inventory",
      "resource": "product"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product",
      "routing": {
        "request": {
          "url": "=/stores/v3/products/{{$parameter.productId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing product",
      "resource": "product"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "routing": {
        "request": {
          "url": "=/stores/v3/products/{{$parameter.productId}}",
          "method": "GET"
        }
      },
      "description": "Get a single product by ID",
      "resource": "product"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many products",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/stores/v3/products/search",
          "method": "POST"
        }
      },
      "description": "Query and list products",
      "resource": "product"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "routing": {
        "request": {
          "url": "=/stores/v3/products-with-inventory/{{$parameter.productId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing product with inventory",
      "resource": "product"
    }
  ]

npm_readme:
  # @wix/n8n-nodes-wix

  This is an n8n community node that lets you use **Wix** in your n8n workflows.

  [Wix](https://www.wix.com/) is a leading cloud-based website development platform that enables users to create professional websites, online stores, bookings, and more. This node allows you to automate workflows by integrating with Wix's eCommerce, CRM, and other services.

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

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

  ## Installation

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

  ## Operations

  This node provides actions for managing Products and Orders in your Wix store.

  ### Product

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Create a new product with inventory |
  | **Delete** | Delete an existing product |
  | **Get** | Get a single product by ID |
  | **Get Many** | Query and list products |
  | **Update** | Update an existing product with inventory |

  > **Note**: Product operations use **Catalog V3** and are not compatible with Catalog V1 sites.

  📚 [Wix Stores Products API Documentation](https://dev.wix.com/docs/rest/business-solutions/stores/catalog/products/introduction)

  ### Order

  | Operation | Description |
  |-----------|-------------|
  | **Cancel** | Cancel an existing order |
  | **Create** | Create a new order |
  | **Get** | Get a single order by ID |
  | **Get Many** | Query and list orders |
  | **Update** | Update an existing order |

  📚 [Wix eCommerce Orders API Documentation](https://dev.wix.com/docs/rest/business-solutions/e-commerce/orders/order-object)

  ## Triggers

  The **Wix Trigger** node allows you to start workflows based on events happening in your Wix site. Triggers are powered by [Wix Automations](https://dev.wix.com/docs/rest/business-management/automations/automations/introduction).

  ### Available Triggers

  <details>
  <summary><strong>Back in Stock</strong></summary>

  - Back in stock request created
  - Product back in stock

  </details>

  <details>
  <summary><strong>Bookings</strong></summary>

  - Appointment request approved
  - Appointment request declined
  - Appointment requested
  - Appointment or class updated
  - Booking canceled
  - Client checks in
  - Client checked in X times
  - Client marked as "no-show"
  - Course updated
  - Failed to apply booking fee
  - Failed to collect applied booking fees
  - No sessions left
  - Session booked
  - Session double-booked
  - Session ends
  - Session starts

  </details>

  <details>
  <summary><strong>Blog</strong></summary>

  - Blog post liked
  - Blog post new comment
  - New blog post published

  </details>

  <details>
  <summary><strong>Chat & Inbox</strong></summary>

  - Chat message received
  - Chat message sent
  - Message received (Wix Chat or Inbox preset email)
  - Pre-chat form submitted
  - Visitor on site

  </details>

  <details>
  <summary><strong>CMS</strong></summary>

  - CMS form submitted

  </details>

  <details>
  <summary><strong>Contacts & Segments</strong></summary>

  - Contact Assigned
  - Contact enters segment
  - Contact leaves segment
  - Label added to contact
  - Label removed from contact
  - New contact created

  </details>

  <details>
  <summary><strong>Donations</strong></summary>

  - Donation is made
  - Recurring donation is canceled
  - Recurring donation is charged

  </details>

  <details>
  <summary><strong>Events & Tickets</strong></summary>

  - Daily report
  - Daily RSVP report
  - Event canceled
  - Event ends
  - Event published
  - Event reminder date has arrived
  - Event starts
  - Guest checked in
  - Guest registers to waitlist
  - Guest RSVPd NO email
  - Guest RSVPd YES email
  - Guest RSVPs
  - New spot opened for waitlist guests
  - Order confirmed but ticket couldn't be generated
  - Order placed
  - RSVP confirmed
  - Ticket order email
  - Ticket ordered
  - Ticket sale ended
  - Ticket sale started

  </details>

  <details>
  <summary><strong>File Share</strong></summary>

  - Folder access given
  - Folder access requested

  </details>

  <details>
  <summary><strong>Forms</strong></summary>

  - Form submitted

  </details>

  <details>
  <summary><strong>Forum</strong></summary>

  - Forum comment deleted
  - Forum comment published
  - Forum post published
  - Reacted to Forum comment
  - Reacted to Forum post
  - Removed reaction from Forum comment
  - Removed reaction from Forum post

  </details>

  <details>
  <summary><strong>Groups</strong></summary>

  - Group create request declined
  - Group has new member generic update
  - Group Updated
  - Member comments on a post
  - Member creates a post
  - Member invited to group
  - Member joins a group
  - Member leaves a group
  - Member mentioned someone
  - Member mentions someone
  - Member pays for a group
  - Member reacts to a comment
  - Member reacts to a post
  - Member removed as payment plan expired
  - Member request to join a group approved
  - Member request to join a group declined
  - Member requests to create a group
  - Member requests to join a group
  - Member role updated
  - Members create posts
  - Members join a group
  - New group created
  - Person invited to group
  - Reminder to create group
  - Reminder to invite members
  - Someone you follow creates a post
  - Weekly Digest

  </details>

  <details>
  <summary><strong>Invoices</strong></summary>

  - Invoice overdue
  - Invoice paid
  - Invoice payment received
  - Invoice sent

  </details>

  <details>
  <summary><strong>Loyalty Program</strong></summary>

  - Customer earns points
  - Customer enters tier
  - Customer has enough points for rewards
  - Points balance adjusted manually
  - Points expire in 14 days
  - Social media profile followed

  </details>

  <details>
  <summary><strong>Members</strong></summary>

  - Member approved
  - Member blocked
  - Member deleted
  - Member email confirmation required
  - Member logs in
  - Set contact as member
  - Site member asks to reset password
  - Visitor signs up to your site

  </details>

  <details>
  <summary><strong>Online Programs</strong></summary>

  - Certificate available to download
  - Member invited to join a program
  - Member joins a program
  - Member pays for a program
  - Member's join request approved
  - Member's join request declined
  - Offline payment declined
  - Offline program payment received
  - Participant access denied
  - Participant completes a program
  - Participant completes a step
  - Participant data exported
  - Participant leaves a program
  - Participant manually added to program
  - Payment failed
  - Program end date has passed
  - Program ended without all steps completed
  - Program join request received
  - Reminder to complete scheduled steps
  - Visitor access denied

  </details>

  <details>
  <summary><strong>Pay Links</strong></summary>

  - Payment received
  - Send a pay link

  </details>

  <details>
  <summary><strong>Portfolio</strong></summary>

  - New project created

  </details>

  <details>
  <summary><strong>Price Quotes</strong></summary>

  - Price quote accepted
  - Price quote expired
  - Price quote sent

  </details>

  <details>
  <summary><strong>Pricing Plans</strong></summary>

  - Plan canceled
  - Plan ordered

  </details>

  <details>
  <summary><strong>Proposals</strong></summary>

  - Proposal accepted
  - Proposal sent

  </details>

  <details>
  <summary><strong>Recurring Invoices</strong></summary>

  - Recurring payment canceled
  - Recurring payment starts

  </details>

  <details>
  <summary><strong>Restaurants</strong></summary>

  - Delivery order ready
  - Future order due by
  - Order accepted
  - Order canceled
  - Order created
  - Order edited
  - Order fulfilled
  - Order out for Delivery
  - Pickup order ready
  - Restaurant order placed

  </details>

  <details>
  <summary><strong>Reviews</strong></summary>

  - Review created
  - Review deleted
  - Review moderation status changed
  - Review request created

  </details>

  <details>
  <summary><strong>Stores (eCommerce)</strong></summary>

  - Checkout abandoned
  - Credit card is charged
  - Order placed
  - Payment Added to Order
  - Store order placed

  </details>

  <details>
  <summary><strong>Subscriptions</strong></summary>

  - Customer's payment method updated
  - Payment fails - grace period starts
  - Payment successful - grace period ends
  - Subscription's billing date updated
  - Subscription's item price updated

  </details>

  <details>
  <summary><strong>Table Reservations</strong></summary>

  - Table reservation added manually
  - Table reservation canceled
  - Table reservation starts
  - Table reservation time updated
  - Table reserved by guest

  </details>

  <details>
  <summary><strong>Tasks</strong></summary>

  - Task overdue

  </details>

  <details>
  <summary><strong>Workflows</strong></summary>

  - Card added or moved

  </details>

  📚 [Wix Automations API Documentation](https://dev.wix.com/docs/rest/business-management/automations/automations/introduction)

  ## Credentials

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

  ### Prerequisites

  1. A [Wix](https://www.wix.com/) account with a published website

  ### Setup

  1. Go to the [API Keys Manager](https://manage.wix.com/account/api-keys) to create a new API key
  2. Assign the appropriate permissions for the APIs you want to access
  3. Copy your API key and store it securely
  4. Get your **Site ID** from your site's dashboard URL (it appears after `/dashboard/` in the URL)
  5. In n8n, create new credentials for **Wix API** and enter:
     - **API Key**: Your Wix API key
     - **Site ID**: Your Wix site ID

  > **Important**: Store your API keys securely and use them only in server-side code.

  📚 [How to Generate an API Key](https://dev.wix.com/docs/go-headless/develop-your-project/admin-operations/generate-an-api-key)

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Wix REST API Documentation](https://dev.wix.com/docs/api-reference)
  - [Wix Developer Center](https://dev.wix.com/)
  - [Wix Stores API](https://dev.wix.com/docs/rest/business-solutions/stores/catalog/products/introduction)
  - [Wix eCommerce Orders API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/orders/order-object)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables automation by interacting with Wix's eCommerce, CRM, and other services through its API.","capabilities":["Create products with inventory","Delete products","Get single product by ID","List all products","Update product inventory","Cancel orders","Create orders","Get single order by ID","List all orders","Update orders"],"authentication":"API key required","commonUseCases":["Automate product inventory management","Process and track customer orders","React to Wix form submissions","Monitor booking and appointment changes","Sync customer data between Wix and other systems"],"limitations":["Product operations require Catalog V3 and are not compatible with Catalog V1 sites"],"relatedNodes":["Wix Trigger","Wix Order","Wix Product"]}


node_type: n8n-nodes-docugenerate.docuGenerate
package_name: n8n-nodes-docugenerate
display_name: DocuGenerate
description: Automatically generate high-quality PDF documents from Word templates
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: docugenerate
author_github_url: https://github.com/docugenerate/
npm_package_name: n8n-nodes-docugenerate
npm_version: 1.0.1
community_fetched_at: 2026-04-16T09:43:36.448Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "template",
      "options": [
        {
          "name": "Document",
          "value": "document",
          "description": "Manage documents"
        },
        {
          "name": "Template",
          "value": "template",
          "description": "Manage templates"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Delete Document",
          "value": "delete",
          "action": "Delete document",
          "routing": {
            "request": {
              "url": "=/v1/document/{{$parameter.documentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a document by ID"
        },
        {
          "name": "Generate Document",
          "value": "generate",
          "action": "Generate document",
          "routing": {
            "request": {
              "url": "/v1/document",
              "method": "POST"
            }
          },
          "description": "Generate a document from a template"
        },
        {
          "name": "Get Document",
          "value": "get",
          "action": "Get document",
          "routing": {
            "request": {
              "url": "=/v1/document/{{$parameter.documentId}}",
              "method": "GET"
            }
          },
          "description": "Get a document by ID"
        },
        {
          "name": "List Documents",
          "value": "list",
          "action": "List documents",
          "routing": {
            "request": {
              "url": "=/v1/document?template_id={{$parameter.templateId}}",
              "method": "GET"
            }
          },
          "description": "List documents for a template"
        },
        {
          "name": "Update Document",
          "value": "update",
          "action": "Update document",
          "routing": {
            "request": {
              "url": "=/v1/document/{{$parameter.documentId}}",
              "method": "PUT"
            }
          },
          "description": "Update a document by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete Template",
          "value": "delete",
          "action": "Delete template",
          "routing": {
            "request": {
              "url": "=/v1/template/{{$parameter.templateId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a template by ID"
        },
        {
          "name": "Get Template",
          "value": "get",
          "action": "Get template",
          "routing": {
            "request": {
              "url": "=/v1/template/{{$parameter.templateId}}",
              "method": "GET"
            }
          },
          "description": "Get a template by ID"
        },
        {
          "name": "List Templates",
          "value": "list",
          "action": "List templates",
          "routing": {
            "request": {
              "url": "/v1/template",
              "method": "GET"
            }
          },
          "description": "List all templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Delete Document",
      "value": "delete",
      "action": "Delete document",
      "routing": {
        "request": {
          "url": "=/v1/document/{{$parameter.documentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a document by ID",
      "resource": "document"
    },
    {
      "name": "Generate Document",
      "value": "generate",
      "action": "Generate document",
      "routing": {
        "request": {
          "url": "/v1/document",
          "method": "POST"
        }
      },
      "description": "Generate a document from a template",
      "resource": "document"
    },
    {
      "name": "Get Document",
      "value": "get",
      "action": "Get document",
      "routing": {
        "request": {
          "url": "=/v1/document/{{$parameter.documentId}}",
          "method": "GET"
        }
      },
      "description": "Get a document by ID",
      "resource": "document"
    },
    {
      "name": "List Documents",
      "value": "list",
      "action": "List documents",
      "routing": {
        "request": {
          "url": "=/v1/document?template_id={{$parameter.templateId}}",
          "method": "GET"
        }
      },
      "description": "List documents for a template",
      "resource": "document"
    },
    {
      "name": "Update Document",
      "value": "update",
      "action": "Update document",
      "routing": {
        "request": {
          "url": "=/v1/document/{{$parameter.documentId}}",
          "method": "PUT"
        }
      },
      "description": "Update a document by ID",
      "resource": "document"
    },
    {
      "name": "Delete Template",
      "value": "delete",
      "action": "Delete template",
      "routing": {
        "request": {
          "url": "=/v1/template/{{$parameter.templateId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a template by ID",
      "resource": "template"
    },
    {
      "name": "Get Template",
      "value": "get",
      "action": "Get template",
      "routing": {
        "request": {
          "url": "=/v1/template/{{$parameter.templateId}}",
          "method": "GET"
        }
      },
      "description": "Get a template by ID",
      "resource": "template"
    },
    {
      "name": "List Templates",
      "value": "list",
      "action": "List templates",
      "routing": {
        "request": {
          "url": "/v1/template",
          "method": "GET"
        }
      },
      "description": "List all templates",
      "resource": "template"
    }
  ]

npm_readme:
  # n8n-nodes-docugenerate

  This is an n8n community node. It lets you use [DocuGenerate](https://www.docugenerate.com/) in your n8n workflows.

  DocuGenerate is a powerful document generation service that creates high-quality PDF documents from Word templates using
  merge tags. Automatically populate templates with dynamic data to generate invoices, contracts, reports, and other
  business documents.

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

  ## Installation

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

  ## Operations

  **Document Operations:**
  - **Generate Document** - Create a document from a template with your data
  - **List Documents** - Get all documents generated from a specific template
  - **Get Document** - Retrieve details of a specific generated document
  - **Update Document** - Change the name of a generated document
  - **Delete Document** - Remove a generated document

  **Template Operations:**
  - **List Templates** - Retrieve all available templates
  - **Get Template** - Fetch details of a specific template including merge tags
  - **Delete Template** - Remove a template from your account

  ## Credentials

  You need a DocuGenerate API Key to use this node.

  ### Prerequisites
  1. Sign up for a [DocuGenerate account](https://app.docugenerate.com/signup)
  2. Get your unique API Key from the Developers tab in the [Settings](https://app.docugenerate.com/settings/developers) page.

  ### Authentication Setup
  1. In n8n, go to **Credentials** → **Create New**
  2. Search for **DocuGenerate API** 
  3. Enter your API Key
  4. Test the connection
  5. Save the credential

  ## Compatibility

  - **Minimum n8n version:** 0.198.0
  - **Tested with:** n8n 1.0+
  - **Node API version:** 1

  ## Usage

  ### Generating Documents

  The most common workflow is generating documents from templates:

  ```
  HTTP Request (get data) → DocuGenerate (Generate Document)
  ```

  **Data Field:** By default, the data field uses `{{ $json }}` to automatically populate with data from the previous
  node. You can also manually customize the JSON structure to match your template's merge tags.

  **Supported Output Formats:**
  - Microsoft Word (.docx, .doc)
  - PDF (.pdf) 
  - OpenDocument (.odt)
  - Plain Text (.txt)
  - PNG (.png)

  ### Template Data Structure

  DocuGenerate templates use merge tags like `[Name]`, `[Address]`, etc. Your data should be structured as JSON arrays:

  ```json
  [{
    "Name": "John Doe",
    "Address": "123 Main St",
    "Items": [
      {"Product": "Widget", "Price": "$10.00"},
      {"Product": "Gadget", "Price": "$15.00"}
    ]
  }]
  ```

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [DocuGenerate API Reference](https://api.docugenerate.com/)
  * [DocuGenerate Website](https://www.docugenerate.com/)
  * [Template Creation Guide](https://www.docugenerate.com/help/templates/)

  ## Version History

  ### 1.0.0 (2025-07-21)
  - Initial release
  - Template and document operations
  - Dynamic template dropdown loading
  - Populate data field with previous node data by default

ai_documentation_summary:
  {"purpose":"Automatically generates high-quality PDF documents and other formats from Word templates using merge tags and dynamic data.","capabilities":["Generate documents from templates","List generated documents","Retrieve specific document details","Update document names","Delete generated documents","List available templates","Fetch template details and merge tags","Delete templates","Supports multiple output formats (PDF, DOCX, ODT, TXT, PNG)"],"authentication":"API Key required","commonUseCases":["Automated invoice generation","Contract creation","Report generation","Personalized business documents"],"limitations":["Community node (not official n8n node)","Requires external DocuGenerate account setup"],"relatedNodes":["HTTP Request","JSON","Code"]}


node_type: @simplesat/n8n-nodes-simplesat.simplesat
package_name: @simplesat/n8n-nodes-simplesat
display_name: Simplesat
description: Connect to Simplesat API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: simplesat-integrations
author_github_url: https://github.com/simplesat/simplesat-n8n-node.git
npm_package_name: @simplesat/n8n-nodes-simplesat
npm_version: 1.0.4
community_fetched_at: 2026-04-16T09:43:36.449Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "survey",
      "options": [
        {
          "name": "Answer",
          "value": "answer"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Question",
          "value": "question"
        },
        {
          "name": "Response",
          "value": "response"
        },
        {
          "name": "Survey",
          "value": "survey"
        },
        {
          "name": "Team Member",
          "value": "teamMember"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List surveys",
          "description": "List surveys"
        },
        {
          "name": "Send by Email",
          "value": "sendByEmail",
          "action": "Send survey by email",
          "description": "Send survey by email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "survey"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List questions",
          "description": "List questions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "question"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get response by ID",
          "description": "Get response by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search responses",
          "description": "Search responses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "response"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get answer by ID",
          "description": "Get answer by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search answers",
          "description": "Search answers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "answer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List customers",
          "description": "List customers"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get customer by ID",
          "description": "Get customer by ID"
        },
        {
          "name": "Create or Update",
          "value": "createOrUpdate",
          "action": "Create or update customer by email",
          "description": "Create or update customer by email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update customer by ID",
          "description": "Update customer by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get team member by ID",
          "description": "Get team member by ID"
        },
        {
          "name": "Create or Update",
          "value": "createOrUpdate",
          "action": "Create or update team member",
          "description": "Create or update team member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "teamMember"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "List surveys",
      "description": "List surveys",
      "resource": "survey"
    },
    {
      "name": "Send by Email",
      "value": "sendByEmail",
      "action": "Send survey by email",
      "description": "Send survey by email",
      "resource": "survey"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List questions",
      "description": "List questions",
      "resource": "question"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get response by ID",
      "description": "Get response by ID",
      "resource": "response"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search responses",
      "description": "Search responses",
      "resource": "response"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get answer by ID",
      "description": "Get answer by ID",
      "resource": "answer"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search answers",
      "description": "Search answers",
      "resource": "answer"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List customers",
      "description": "List customers",
      "resource": "customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get customer by ID",
      "description": "Get customer by ID",
      "resource": "customer"
    },
    {
      "name": "Create or Update",
      "value": "createOrUpdate",
      "action": "Create or update customer by email",
      "description": "Create or update customer by email",
      "resource": "customer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update customer by ID",
      "description": "Update customer by ID",
      "resource": "customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get team member by ID",
      "description": "Get team member by ID",
      "resource": "teamMember"
    },
    {
      "name": "Create or Update",
      "value": "createOrUpdate",
      "action": "Create or update team member",
      "description": "Create or update team member",
      "resource": "teamMember"
    }
  ]

npm_readme:
  # Simplesat's n8n node

  This is an n8n community node. It lets you connect to the Simplesat API in your n8n workflows to manage surveys, responses, answers, customers, and team members.

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

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

  ## Installation

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

  ## Operations

  ### Surveys

  - **List** - Retrieve all surveys with pagination
  - **Send by Email** - Send a survey to a customer via email with optional team member and ticket information

  ### Questions

  - **List** - Get questions with filtering by survey ID and metric type (NPS, CSAT, 5-Star, CES, Custom)

  ### Responses

  - **Get** - Retrieve a specific response by ID
  - **Search** - Advanced search with date ranges, filters, and pagination

  ### Answers

  - **Get** - Retrieve a specific answer by ID
  - **Search** - Advanced search with date ranges, filters, and pagination

  ### Customers

  - **List** - Get customers with date filtering and subscription status
  - **Get** - Retrieve a specific customer by ID
  - **Create or Update** - Create new customers or update existing ones

  ### Team Members

  - **Get** - Retrieve a specific team member by ID
  - **Create or Update** - Create new team members or update existing ones

  ## Credentials

  To use this node, you need a Simplesat account with an API key:

  1. Log into your Simplesat account
  2. Navigate to [Workspace Settings](https://app.simplesat.io/settings/workspace/)
  3. Copy your API key
  4. Use the API key in the Simplesat API credentials in n8n

  The node uses the `X-Simplesat-Token` header for authentication.

  ## Usage

  For detailed usage information, API endpoints, and examples, please refer to the [Simplesat API documentation](https://developer.simplesat.io/api).

  ## Resources

  - [Simplesat n8n help guide](https://help.simplesat.io/en/articles/12679403-simplesat-s-n8n-community-node)
  - [Simplesat API Documentation](https://developer.simplesat.io/api)
  - [Simplesat Website](https://simplesat.io/)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by connecting to the Simplesat API to manage customer surveys, responses, answers, customers, and team members.","capabilities":["List all surveys with pagination","Send surveys to customers via email","List questions filtered by survey ID and metric type (NPS, CSAT, 5-Star, CES, Custom)","Retrieve specific responses by ID","Advanced search for responses with date ranges and filters","Retrieve specific answers by ID","Advanced search for answers with date ranges and filters","List customers with date filtering and subscription status","Retrieve specific customers by ID","Create or update customers"],"authentication":"API key required (X-Simplesat-Token header)","commonUseCases":["Automating customer feedback collection via email surveys","Tracking and analyzing survey response trends over time","Managing customer profiles and subscription status","Handling team member data and access control"],"limitations":["Community node (not official n8n node)","Requires a paid Simplesat account with API key access","Detailed API endpoint specifics require external documentation"],"relatedNodes":["Email node","HTTP Request node","Data Processing nodes"]}


node_type: @postnitro/n8n-nodes-postnitro-ai.postNitro
package_name: @postnitro/n8n-nodes-postnitro-ai
display_name: PostNitro
description: Interact with PostNitro Embed API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: postnitro
author_github_url: https://github.com/postnitro/n8n-nodes-postnitro-ai.git
npm_package_name: @postnitro/n8n-nodes-postnitro-ai
npm_version: 0.1.2
community_fetched_at: 2026-04-16T09:43:36.456Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "embedPost",
      "options": [
        {
          "name": "Embed Post",
          "value": "embedPost"
        }
      ],
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "aiFromText",
      "options": [
        {
          "name": "Generate Carousel from Text (AI)",
          "value": "aiFromText",
          "action": "Generate carousel using AI from plain text"
        },
        {
          "name": "Generate Carousel from an Article URL (AI)",
          "value": "aiFromArticle",
          "action": "Generate carousel using AI from an Article URL"
        },
        {
          "name": "Generate Carousel from an X (Twitter) Post (AI)",
          "value": "aiFromXPost",
          "action": "Generate carousel using AI from an X (Twitter) post URL"
        },
        {
          "name": "Import Carousel Slides",
          "value": "importSlides",
          "action": "Create carousel by Importing a predefined set of slides content"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Carousel from Text (AI)",
      "value": "aiFromText",
      "action": "Generate carousel using AI from plain text"
    },
    {
      "name": "Generate Carousel from an Article URL (AI)",
      "value": "aiFromArticle",
      "action": "Generate carousel using AI from an Article URL"
    },
    {
      "name": "Generate Carousel from an X (Twitter) Post (AI)",
      "value": "aiFromXPost",
      "action": "Generate carousel using AI from an X (Twitter) post URL"
    },
    {
      "name": "Import Carousel Slides",
      "value": "importSlides",
      "action": "Create carousel by Importing a predefined set of slides content"
    }
  ]

npm_readme:
  # n8n-nodes-postnitro-ai

  This is an n8n community node. It lets you use [PostNitro](https://postnitro.ai) in your n8n workflows.

  PostNitro.ai is a platform for creating and publishing social media carousels and visuals.

  The PostNitro Embed API is an embed-friendly API to generate carousel posts, images, and PDFs using AI or imported slide content to create carousels.


  [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

  The PostNitro node supports:
  - Generate Carousel from Text (AI)
  - Generate Carousel from Article URL (AI)
  - Generate Carousel from X (Twitter) Post (AI)
  - Import Carousel Slides

  Optional behaviors:
  - Wait for completion: Poll the post status until it completes or fails
  - On complete: Return status only, or fetch the generated output
  - Download output as binary: Attach the generated file(s) to the workflow item

  ## Credentials

  This node requires API credentials for the PostNitro Embed API.

  Prerequisites:
  - A PostNitro account and API key

  Setup in n8n:
  - Create credentials of type `PostNitro Embed API`
  - Fields:
    - API Base URL: Base URL of the PostNitro Embed API (for example, `https://embed-api.postnitro.ai`)
    - API Key: Your API key (sent as `embed-api-key` header)

  ## Compatibility

  - Minimum n8n version: 1.0+
  - Tested with `n8n-workflow` ^1.40.0 and TypeScript ^5.4.0

  ## Usage

  Basic flow:
  1. Choose an operation (AI generation from Text/Article/X, or Import Slides)
  2. Provide required fields such as `templateId`, `brandId`, and (for AI flows) `presetId`
  3. Optionally enable "Wait for Completion" to poll status and then fetch output
  4. If you choose to fetch output, you can return just the JSON or download the file(s) as binary

  Output formats:
  - PDF: Single file
  - PNG: Multiple images (array). If "Download Output as Binary" is enabled, multiple binary properties will be attached (e.g., `data1`, `data2`, ...)

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [PostNitro Embed API documentation](https://postnitro.ai/docs/embed/api)

  ## Version history

  - 0.1.0: Initial release with AI generation (Text/Article/X), Import Slides, status polling, and binary download options.
  - 0.1.1: postType drop down set to CAROUSEL type only
  - 0.1.2: implemented fixes suggested in node review

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the PostNitro Embed API to generate social media carousels, images, and PDFs using AI or imported slide content.","capabilities":["Generate carousel from text using AI","Generate carousel from article URL using AI","Generate carousel from X (Twitter) post using AI","Import existing carousel slides","Poll post status until completion","Fetch generated output as JSON or binary files","Download output as PDF or PNG images"],"authentication":"API key required (sent as embed-api-key header)","commonUseCases":["Automated social media content creation","Generating carousel posts from blog articles","Creating visual content from text prompts","Batch processing slide decks into carousels"],"limitations":["Limited to carousel post type only","Requires separate PostNitro account and API key setup","Minimum n8n version 1.0+"],"relatedNodes":["HTTP Request","Binary File","JSON"]}


node_type: n8n-nodes-dremio.dremio
package_name: n8n-nodes-dremio
display_name: Dremio
description: Execute queries against Dremio Cloud or Software
category: Community
development_style: declarative
version: 1
operations:
  [
  {
  "name": "Execute",
  "value": "execute",
  "resource": "query"
  }
  ]

credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: alexmerced
author_github_url: https://github.com/developer-advocacy-dremio/dremio-n8n-connector.git
npm_package_name: n8n-nodes-dremio
npm_version: 2.0.17
community_fetched_at: 2026-04-16T09:43:36.456Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "query",
      "options": [
        {
          "name": "Query",
          "value": "query"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "query"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

npm_readme:
  # Dremio n8n Connector

  A community n8n node for executing SQL queries against **Dremio Cloud** and **Dremio Software** directly from your n8n workflows.

  [![npm](https://img.shields.io/npm/v/n8n-nodes-dremio)](https://www.npmjs.com/package/n8n-nodes-dremio)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

  ## Features

  - **Execute SQL** — Run any SQL query supported by Dremio
  - **Dual Compatibility** — First-class support for both Dremio Cloud and Dremio Software (self-hosted)
  - **Credential-Based Auth** — Authentication via Personal Access Token (PAT) using n8n's built-in `httpRequestWithAuthentication`
  - **Automatic Credential Test** — Validates your credentials when you save them in n8n
  - **SSL Flexibility** — Option to skip SSL certificate validation for self-hosted instances with self-signed certificates
  - **Data Lineage** — Full `pairedItem` tracking for n8n's data lineage feature
  - **Proper Error Handling** — Uses `NodeOperationError` for clear, actionable error messages

  ## Installation

  ### n8n Community Nodes (Recommended)

  1. Go to your n8n dashboard
  2. Navigate to **Settings** > **Community Nodes**
  3. Click **Install a community node**
  4. Enter: `n8n-nodes-dremio`
  5. Click **Install**

  The **Dremio** node will now be available in your workflow editor.

  ### Self-Hosted n8n (Manual)

  ```bash
  # Clone and build
  git clone https://github.com/developer-advocacy-dremio/dremio-n8n-connector.git
  cd dremio-n8n-connector
  npm install
  npm run build

  # Link to n8n
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom
  npm link /path/to/dremio-n8n-connector

  # Restart n8n
  ```

  ## Usage Guide

  ### 1. Add the Node
  Open your n8n workflow, click **+**, and search for **Dremio**.

  ### 2. Configure Credentials

  Click the credential dropdown and create a new **Dremio API** credential.

  #### Dremio Cloud
  | Field | Value |
  |:---|:---|
  | **Type** | `Cloud` |
  | **Base URL** | `https://api.dremio.cloud` (default) or `https://api.eu.dremio.cloud` for EU |
  | **Project ID** | Found in Dremio Cloud → Project Settings |
  | **Access Token** | Your Personal Access Token (PAT) |
  | **Ignore SSL Issues** | `False` |

  #### Dremio Software
  | Field | Value |
  |:---|:---|
  | **Type** | `Software` |
  | **Base URL** | `https://<HOST>:9047/api/v3` |
  | **Access Token** | Your Personal Access Token (PAT) |
  | **Ignore SSL Issues** | `True` if using a self-signed certificate |

  > **Tip:** Click **Test Credential** to verify connectivity before saving.

  ### 3. Execute SQL
  - **Resource**: `Query`
  - **Operation**: `Execute`
  - **SQL Query**: Your SQL statement

  **Examples:**
  ```sql
  -- Query sample data
  SELECT * FROM "Samples"."samples.dremio.com"."NYC-taxi-trips" LIMIT 10

  -- Use with expressions from previous nodes
  SELECT * FROM my_table WHERE id = '{{ $json.id }}'
  ```

  ## How It Works

  The connector uses the Dremio REST API's asynchronous job execution model:

  1. **Submit** — `POST` the SQL query to the `/sql` endpoint → receives a Job ID
  2. **Poll** — Checks job status every second until `COMPLETED`, `FAILED`, or `CANCELED`
  3. **Fetch** — Retrieves results from `/job/{id}/results` and outputs rows as n8n items

  Each output item includes `pairedItem` metadata for n8n's data lineage tracking.

  ## Project Structure

  | Path | Description |
  |:---|:---|
  | `credentials/DremioApi.credentials.ts` | Credential definition — auth, SSL, and credential test |
  | `nodes/Dremio/Dremio.node.ts` | Node logic — SQL execution via submit/poll/fetch |
  | `nodes/Dremio/dremio.svg` | Node icon |
  | `scripts/verify_api.js` | Standalone API test script (reads from `.env`) |
  | `.github/workflows/publish.yml` | GitHub Actions — auto-publish to npm with provenance on release |
  | `.env.template` | Template for local API testing credentials |

  ## Development

  See the **[Developer Guide](DEVELOPMENT.md)** for implementation details.

  ### Quick Start

  ```bash
  npm install          # Install dependencies
  npm run build        # Compile TypeScript + copy SVG assets
  npm run lint         # Run ESLint
  npm run dev          # Watch mode for development
  ```

  ### Testing API Connectivity

  ```bash
  cp .env.template .env   # Fill in your Dremio credentials
  node scripts/verify_api.js
  ```

  ### Publishing

  Releases are automated via GitHub Actions. To publish a new version:

  1. Bump the version in `package.json`
  2. Commit, tag, and push:
     ```bash
     git tag v2.x.x
     git push origin main --tags
     ```
  3. Create a **GitHub Release** from the tag — this triggers the publish workflow

  ## Troubleshooting

  | Problem | Solution |
  |:---|:---|
  | **Job Failed** | Check the Dremio UI Jobs page for detailed SQL error messages |
  | **SSL Error** | Toggle **Ignore SSL Issues** to `True` in credentials |
  | **Timeout** | Use `LIMIT` clauses or paginate large result sets |
  | **Credential Test Fails** | Verify your PAT is valid and Project ID is correct (Cloud) |
  | **401 Unauthorized** | Regenerate your Personal Access Token in Dremio |

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that executes SQL queries against Dremio Cloud or Dremio Software by leveraging the Dremio REST API's asynchronous job execution model.","capabilities":["Execute SQL queries against Dremio Cloud","Execute SQL queries against self-hosted Dremio Software","Support for Personal Access Token (PAT) authentication","Automatic credential validation","SSL certificate validation toggle","Data lineage tracking via pairedItem","Asynchronous job polling for query results"],"authentication":"Personal Access Token (PAT) via n8n credential system","commonUseCases":["Extracting data from Dremio for n8n workflows","Running ad-hoc SQL queries in automated processes","Integrating Dremio data with other n8n nodes"],"limitations":["Requires manual installation for self-hosted n8n (not included in standard n8n Community Nodes)","Relies on Dremio's asynchronous job model which may introduce latency","Large result sets may require LIMIT clauses or pagination to avoid timeouts"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code","n8n-nodes-base.splitInBatches"]}


node_type: @docuseal/n8n-nodes-docuseal.docuseal
package_name: @docuseal/n8n-nodes-docuseal
display_name: DocuSeal
description: Create, send, and sign documents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: petem
author_github_url: https://github.com/docusealco/n8n-nodes-docuseal.git
npm_package_name: @docuseal/n8n-nodes-docuseal
npm_version: 1.0.4
community_fetched_at: 2026-04-16T09:43:36.457Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createSubmission",
      "options": [
        {
          "name": "Create Submission",
          "value": "createSubmission",
          "action": "Create submission",
          "description": "Create a signature request from template"
        },
        {
          "name": "Create Submission From DOCX",
          "value": "createSubmissionFromDocx",
          "action": "Create submission from DOCX",
          "description": "Create a signature request from DOCX file with dynamic variables"
        },
        {
          "name": "Create Submission From HTML",
          "value": "createSubmissionFromHtml",
          "action": "Create submission from HTML",
          "description": "Create a signature request from HTML content"
        },
        {
          "name": "Create Submission From PDF",
          "value": "createSubmissionFromPdf",
          "action": "Create submission from PDF",
          "description": "Create a signature request from PDF document"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Submission",
      "value": "createSubmission",
      "action": "Create submission",
      "description": "Create a signature request from template"
    },
    {
      "name": "Create Submission From DOCX",
      "value": "createSubmissionFromDocx",
      "action": "Create submission from DOCX",
      "description": "Create a signature request from DOCX file with dynamic variables"
    },
    {
      "name": "Create Submission From HTML",
      "value": "createSubmissionFromHtml",
      "action": "Create submission from HTML",
      "description": "Create a signature request from HTML content"
    },
    {
      "name": "Create Submission From PDF",
      "value": "createSubmissionFromPdf",
      "action": "Create submission from PDF",
      "description": "Create a signature request from PDF document"
    }
  ]

npm_readme:
  # n8n-nodes-docuseal

  This is an **n8n community node** that allows you to integrate [DocuSeal](https://www.docuseal.com) with your n8n workflows.

  [DocuSeal](https://www.docuseal.com) is a modern document signing platform that lets you securely collect legally binding electronic signatures online. You can create templates, send signature requests, and automate your signing process with ease.

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

  ## Table of Contents

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage Examples](#usage-examples)
  - [Resources](#resources)
  - [License](#license)

  ## Installation

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

  ### Community Nodes (Recommended)

  For n8n cloud or instances with UI access:

  1. Go to **Settings → Community Nodes** in your n8n dashboard.
  2. Click **Install**.
  3. Enter `@docuseal/n8n-nodes-docuseal` in the **Enter npm package name** field.
  4. Accept the [community node usage risks](https://docs.n8n.io/integrations/community-nodes/risks/).
  5. Click **Install** to complete setup.

  ### npm Installation

  To install manually in your n8n root directory:

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

  ### Docker Installation

  For Docker users, add the package to your setup using environment variables:

  **docker-compose.yml:**
  ```yaml
  services:
    n8n:
      image: docker.n8n.io/n8nio/n8n
      environment:
        - N8N_COMMUNITY_PACKAGES=@docuseal/n8n-nodes-docuseal
      ports:
        - "5678:5678"
      volumes:
        - ~/.n8n:/home/node/.n8n
  ```

  **Docker run command:**
  ```bash
  docker run -it --rm \
    --name n8n \
    -p 5678:5678 \
    -e N8N_COMMUNITY_PACKAGES="@docuseal/n8n-nodes-docuseal" \
    -v ~/.n8n:/home/node/.n8n \
    docker.n8n.io/n8nio/n8n
  ```

  ## Operations

  This package includes two nodes:

  ### DocuSeal Node

  The main node for creating and managing signature requests.

  #### Create Submission
  Create a signature request from an existing template.

  **Features:**
  - Select from your existing templates
  - Define multiple signers with their details
  - Pre-fill form fields
  - Customize email notifications
  - Set expiration dates
  - Configure signing order (sequential or random)

  #### Create Submission From DOCX
  Create a signature request from DOCX files with dynamic content.

  **Features:**
  - Upload DOCX or PDF files
  - Use dynamic variables for content replacement
  - Merge multiple documents
  - Define signers with roles
  - Support for template merging

  #### Create Submission From HTML
  Generate signature requests from HTML content.

  **Features:**
  - HTML document content with field tags
  - Custom headers and footers
  - Multiple page sizes (Letter, A4, Legal, etc.)
  - Merge with existing templates
  - Convert HTML to PDF automatically

  #### Create Submission From PDF
  Create signature requests from PDF documents.

  **Features:**
  - Upload PDF files (Base64 or URL)
  - Flatten PDF form fields
  - Remove or preserve text tags
  - Merge multiple PDFs
  - Template integration

  ### DocuSeal Trigger Node

  Webhook-based trigger for DocuSeal events.

  #### Signing Form Completed
  Triggers when a single signer completes their signing form.

  **Use cases:**
  - Send notifications to internal teams
  - Update CRM records
  - Trigger follow-up workflows

  #### Submission Completed
  Triggers when all parties complete the signing process.

  **Use cases:**
  - Archive completed documents
  - Send completion notifications
  - Update databases with signed document URLs
  - Generate invoices or contracts

  ## Credentials

  You'll need your **DocuSeal API key** to connect n8n to your account.

  ### Getting Your API Key

  1. Create an account at [DocuSeal Global](https://docuseal.com/sign_in) or [DocuSeal Europe](https://docuseal.eu/sign_in)
  2. Go to **Settings → Console → API**
  3. Copy an API key for your account

  ### Setting Up Credentials in n8n

  1. In n8n, click on **Credentials** in the left sidebar
  2. Click **Add Credential**
  3. Search for "DocuSeal" and select **DocuSeal API**
  4. Fill in the following fields:
     - **API Key** – your generated API key
     - **Server** – choose between *Global Server* or *Europe Server*
  5. Click **Save**

  ### Authentication Methods

  This node supports two authentication methods:

  - **Access Token** (recommended) - Use your API key directly
  - **OAuth2** - For more secure integrations (requires app setup)

  ## Compatibility

  - **n8n** version `0.187.0` or later
  - **Node.js** version `18.10` or later

  ## Usage Examples

  ### Example 1: Automated Contract Signing

  Send contracts for signing whenever a new deal is created in your CRM:

  1. **Trigger**: CRM Trigger (e.g., HubSpot, Salesforce)
  2. **DocuSeal Node**: Create Submission
     - Template: "Sales Contract"
     - Signer Email: `{{$json.contact_email}}`
     - Pre-fill fields with deal data
  3. **Slack Node**: Notify sales team

  ### Example 2: Onboarding Automation

  Automatically send onboarding documents to new employees:

  1. **Trigger**: HR System Webhook
  2. **DocuSeal Node**: Create Submission From DOCX
     - Upload employee handbook
     - Variables: Employee name, start date, department
     - Signers: New employee + HR manager
  3. **Email Node**: Send welcome email with signing link

  ### Example 3: Document Archive Workflow

  Archive completed documents automatically:

  1. **DocuSeal Trigger**: Submission Completed
  2. **HTTP Request Node**: Download signed PDF
  3. **Google Drive Node**: Upload to archive folder
  4. **Database Node**: Update records with document URL

  ### Example 4: Multi-Party Signing

  Send documents requiring multiple signatures in sequence:

  1. **Google Sheets Trigger**: New row in contracts sheet
  2. **DocuSeal Node**: Create Submission
     - Signers Order: "Preserved"
     - Signer 1: Client
     - Signer 2: Account Manager
     - Signer 3: Legal Team
  3. **Slack Node**: Notify when all parties sign

  ## Advanced Features

  ### Pre-filling Form Fields

  You can pre-fill form fields in your templates using the `Values` parameter in submitters:

  ```json
  {
    "field": "Company Name",
    "value": "{{$json.company}}"
  }
  ```

  ### Custom Email Notifications

  Customize the email sent to signers:

  - **Email Subject**: Your custom subject line
  - **Email Body**: Your custom message (supports plain text)
  - **Reply-To**: Set a custom reply-to address
  - **BCC**: Add BCC recipients for completed documents

  ### Metadata and External IDs

  Track your documents by adding:

  - **External ID**: Your internal reference ID
  - **Metadata**: Custom key-value pairs for additional data

  ### Expiration Dates

  Set expiration dates for signature requests:
  - After expiration, the signing link becomes unavailable
  - Use ISO 8601 format: `2025-12-31T23:59:59Z`

  ## Troubleshooting

  ### 🧩 Common Issues

  #### 🔑 Invalid API Key error
  **Solution:** Verify your API key is correct and matches the selected server (Global/Europe)

  #### 📄 Template not found
  **Solution:** Ensure the template exists in your DocuSeal account and is not archived

  #### 🌐 Webhook not triggering
  **Solution:** Check that your n8n instance is publicly accessible and the webhook is properly registered

  #### 📚 Documents not merging
  **Solution:** Verify that all documents are valid PDFs or DOCX files and properly encoded

  ### Getting Help

  If you encounter issues:

  1. Check the [DocuSeal API documentation](https://www.docuseal.com/docs/api)
  2. Visit the [n8n community forum](https://community.n8n.io/)
  3. Open an issue on [GitHub](https://github.com/docusealco/n8n-nodes-docuseal/issues)

  ## Resources

  - [DocuSeal Website](https://www.docuseal.com)
  - [DocuSeal API Reference](https://www.docuseal.com/docs/api)
  - [DocuSeal Webhooks Documentation](https://www.docuseal.com/docs/api#form-webhook)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n Community Forum](https://community.n8n.io/)

  ## Support

  - 📧 Email: support@docuseal.com
  - 💬 Community: [n8n Community Forum](https://community.n8n.io/)
  - 🐛 Issues: [GitHub Issues](https://github.com/docusealco/n8n-nodes-docuseal/issues)

  ## License

  [MIT](https://github.com/docusealco/n8n-nodes-docuseal/blob/main/LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node integrates DocuSeal, a document signing platform, to create, send, and manage legally binding electronic signature requests within automated workflows.","capabilities":["Create signature requests from existing templates","Create signature requests from DOCX files with dynamic content","Create signature requests from HTML content","Create signature requests from PDF files","Define multiple signers with roles and signing order (sequential or random)","Pre-fill form fields with dynamic variables","Configure email notifications and expiration dates","Merge multiple documents","Webhook triggers for signing form completion","Webhook triggers for full submission completion"],"authentication":"API Key (Access Token) or OAuth2","commonUseCases":["Automated contract signing for sales deals","Employee onboarding document collection","Multi-party document signing workflows","Document archiving after signing completion","CRM integration for signature status updates"],"limitations":["Community node (may have fewer updates or support than official nodes)","Requires separate DocuSeal account and API key setup","Minimum n8n version 0.187.0 required","Minimum Node.js version 18.10 required"],"relatedNodes":["HTTP Request Node","Email Node","Google Drive Node","Database Node","Slack Node"]}


node_type: n8n-nodes-itop.iTop
package_name: n8n-nodes-itop
display_name: iTop
description: Interact with iTop CMDB via REST API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: larhip
author_github_url: https://github.com/itomig-de/
npm_package_name: n8n-nodes-itop
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:36.458Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "object",
      "options": [
        {
          "name": "Object",
          "value": "object"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Apply Stimulus",
          "value": "apply_stimulus",
          "action": "Apply stimulus to an object",
          "description": "Update fields and apply a stimulus on a single iTop object"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new object",
          "description": "Create a new object in iTop"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an object",
          "description": "Delete an existing object in iTop"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get objects",
          "description": "Search for and retrieve iTop objects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an object",
          "description": "Update a single iTop object"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "object"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Apply Stimulus",
      "value": "apply_stimulus",
      "action": "Apply stimulus to an object",
      "description": "Update fields and apply a stimulus on a single iTop object",
      "resource": "object"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new object",
      "description": "Create a new object in iTop",
      "resource": "object"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an object",
      "description": "Delete an existing object in iTop",
      "resource": "object"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get objects",
      "description": "Search for and retrieve iTop objects",
      "resource": "object"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an object",
      "description": "Update a single iTop object",
      "resource": "object"
    }
  ]

npm_readme:
  # n8n-nodes-itop

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

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

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

  ## Preview

  https://github.com/user-attachments/assets/6524dc6b-c6c9-4a39-ae8f-218ec982d13b


  ## Installation

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

  ## Operations

  - **Get**: Search for and retrieve iTop objects using OQL queries or object IDs
  - **Update**: Update a single iTop object with new field values

  ## Credentials

  You can use either username/password or token-based authentication to use this node.

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials** and create a new **iTop API** credential
  2. Enter your **iTop URL** (e.g., `https://your-itop-instance.com`)
  3. Select your **Authentication Method**:

  ### Username and Password

  1. Select **Username and Password** as the authentication method
  2. Enter your iTop **Username**
  3. Enter your iTop **Password**
  4. Optionally adjust the **API Version** (default: 1.3)

  ### Token

  1. Select **Token** as the authentication method
  2. Enter your iTop **Auth Token**
     - To generate a token in iTop, go to **User Account** > **Personal Tokens**
  3. Optionally adjust the **API Version** (default: 1.3)

  ### Required iTop Permissions

  Users need the following permissions in iTop:
  - **REST Services User** profile
  - **Write access** on the classes they want to modify
  - **Bulk write** permissions on the classes they want to modify

  Note: Standard administrator accounts do not have REST access by default unless the REST Services User profile is explicitly granted.

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [iTop REST/JSON API documentation](https://www.itophub.io/wiki/page?id=latest:advancedtopics:rest_json)

ai_documentation_summary:
  {"purpose":"Allows n8n workflows to interact with iTop CMDB through its REST API for retrieving and updating objects.","capabilities":["Search and retrieve iTop objects using OQL queries","Retrieve iTop objects using object IDs","Update single iTop objects with new field values"],"authentication":"Username and Password or Token-based authentication","commonUseCases":["Automating CMDB data retrieval in n8n workflows","Synchronizing IT asset information between systems","Updating CMDB records based on workflow triggers"],"limitations":["Standard administrator accounts do not have REST access by default; explicit REST Services User profile is required","Requires specific permissions: REST Services User profile, write access on target classes, and bulk write permissions","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-rye.rye
package_name: n8n-nodes-rye
display_name: Rye
description: Interact with the Rye Universal Checkout API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: rye-api
author_github_url: https://github.com/rye-com/
npm_package_name: n8n-nodes-rye
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:36.459Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "checkoutIntent",
      "options": [
        {
          "name": "Checkout Intent",
          "value": "checkoutIntent"
        },
        {
          "name": "Brand",
          "value": "brand"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a checkout intent",
          "description": "Create a new checkout intent"
        },
        {
          "name": "Get State",
          "value": "getState",
          "action": "Get checkout intent state",
          "description": "Get the state of a checkout intent"
        },
        {
          "name": "Confirm",
          "value": "confirm",
          "action": "Confirm a checkout intent",
          "description": "Confirm a checkout intent with payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "checkoutIntent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "verifyBrandSupport",
      "options": [
        {
          "name": "Verify Support",
          "value": "verifyBrandSupport",
          "action": "Verify brand support",
          "description": "Check if a brand/domain is supported"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "brand"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a checkout intent",
      "description": "Create a new checkout intent",
      "resource": "checkoutIntent"
    },
    {
      "name": "Get State",
      "value": "getState",
      "action": "Get checkout intent state",
      "description": "Get the state of a checkout intent",
      "resource": "checkoutIntent"
    },
    {
      "name": "Confirm",
      "value": "confirm",
      "action": "Confirm a checkout intent",
      "description": "Confirm a checkout intent with payment",
      "resource": "checkoutIntent"
    },
    {
      "name": "Verify Support",
      "value": "verifyBrandSupport",
      "action": "Verify brand support",
      "description": "Check if a brand/domain is supported",
      "resource": "brand"
    }
  ]

npm_readme:
  # n8n-nodes-rye

  This is an n8n community node that lets you use the Rye Universal Checkout API in your n8n workflows.

  The Rye Universal Checkout API turns any product URL into a completed checkout. Instantly retrieve price, tax, and shipping for any product, and let users buy without ever leaving your native AI experience.

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

  **Table of Contents**

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Example Workflows](#example-workflows)
  - [Resources](#resources)
  - [Support](#support)

  ## Installation

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

  ## Operations

  This node provides the following operations:

  ### Checkout Intent

  - **Create**: Submit a new checkout with a product URL and buyer information
  - **Get State**: Check the state of a checkout intent (with optional automatic polling)
  - **Confirm**: Confirm a checkout intent with a payment method

  ### Brand

  - **Verify Support**: Check if a merchant domain is supported by the Rye API

  ## Credentials

  To use this node, you need a Rye API account and access token.

  ### Prerequisites

  1. Sign up for a Rye API staging account from the [developer console](https://staging.console.rye.com/register)
  2. Generate an API access token from your [Rye account](https://staging.console.rye.com/account)

  For more information, refer to the official [Rye Account Registration](https://docs.rye.com/api-v2/account-registration) documentation.

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials** → **New**
  2. Search for "Rye API"
  3. Enter your **API URL**:
     - Staging: `https://staging.api.rye.com/api/v1`
     - Production: `https://api.rye.com/api/v1`
  4. Enter your **Access Token** (without the HTTP authentication scheme prefix, e.g., "Basic")
  5. Click **Save**

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested against**: n8n 1.115.3

  ## Usage

  ### Basic Checkout Flow

  The typical checkout flow involves these steps:

  1. **Create a Checkout Intent** with a product URL and buyer details
  2. **Poll for State** until the checkout reaches `awaiting_confirmation` state
  3. **Confirm the Checkout** with a payment token
  4. **Poll for State** again until the checkout reaches `completed` state

  ### Using the Get State Operation with Polling

  The "Get State" operation includes automatic polling functionality to wait for the checkout to reach a terminal state.

  #### Polling Parameters

  - **Enable Polling**: When enabled, the node automatically retries checking the state
  - **Max Attempts**: Maximum number of times to check (default: 20). Note: Some merchants may take up to 45 minutes to process.
  - **Initial Interval (Seconds)**: Starting wait time (default: 5 seconds)
  - **Max Interval (Seconds)**: Maximum wait time between attempts (default: 60 seconds)

  #### Checkout States

  **Terminal States** (polling stops automatically):

  - `awaiting_confirmation` - Checkout is ready and awaiting payment confirmation
  - `completed` - Checkout successfully completed
  - `failed` - Checkout failed

  **Processing States** (polling continues):

  - `retrieving_offer` - Initial state after creating a checkout intent; Rye is retrieving the offer from the merchant

  > **💡 Tip**: If polling times out in the `retrieving_offer` state, increase the **Max Attempts** value or handle this state explicitly in your workflow.

  #### Polling Behavior

  The "Get State" node uses exponential backoff to space out polling attempts, giving you flexibility to manage the [Rye API rate limits](https://docs.rye.com/api-v2/developer-notes#ordering-%26-checkout) more effectively.

  Wait time starts at `initialIntervalSeconds` and doubles with each attempt up to `maxIntervalSeconds`

  Example timing: 5s → 10s → 20s → 40s → 60s → 60s...

  Note: using the default parameter values (`maxAttempts = 20`, `initialIntervalSeconds = 5`, `maxIntervalSeconds = 60`), the node will poll for up to ~17 minutes

  #### Best Practice

  After polling completes, use a **Switch** or **IF** node to route your workflow based on the final state.

  ### Address Validation

  > **⚠️ Important**: The Rye API currently only supports US addresses. The node will validate this and throw an error if a non-US country code is provided.

  ## Example Workflows

  ### Complete Checkout with State Routing

  ```
  Manual Trigger
    ↓
  Verify Brand Support (Rye)
    ↓
  Create Checkout Intent (Rye)
    ↓
  Get State with Polling (Rye)
    ↓
  Switch (based on state)
    ├─ awaiting_confirmation → Confirm Checkout (Rye)
    │                            ↓
    │                         Get State with Polling (Rye)
    │                            ↓
    │                         Switch (based on final state)
    │                            ├─ completed → Success notification
    │                            └─ failed → Error notification
    │
    └─ failed → Error notification
  ```

  ### Step-by-Step Configuration

  #### 1. Verify Brand Support

  - **Resource**: Brand
  - **Operation**: Verify Support
  - **Domain**: `amazon.com` (or your target merchant domain)

  #### 2. Create Checkout Intent

  - **Resource**: Checkout Intent
  - **Operation**: Create
  - **Product URL**: Full URL of the product to purchase
  - **Buyer Email**: Customer's email address
  - **Shipping Address**: Complete US address details

  #### 3. Get State (with Polling) - First Check

  - **Resource**: Checkout Intent
  - **Operation**: Get State
  - **Checkout Intent ID**: `{{ $json.id }}` (from Create step)
  - **Enable Polling**: `true`
  - **Max Attempts**: `20`
  - **Initial Interval (Seconds)**: `5`
  - **Max Interval (Seconds)**: `60`

  #### 4. Switch Node - Route Based on Initial State

  Configure switch rules:

  - **Rule 1**: `{{ $json.state === "awaiting_confirmation" }}` → Continue to Confirm
  - **Rule 2**: `{{ $json.state === "failed" }}` → Error handling

  #### 5. Confirm Checkout (if awaiting_confirmation)

  - **Resource**: Checkout Intent
  - **Operation**: Confirm
  - **Checkout Intent ID**: `{{ $('Get State').item.json.id }}`
  - **Payment Token**: Payment method token from your payment processor (e.g., Stripe)

  #### 6. Get State (with Polling) - Final Check

  - **Resource**: Checkout Intent
  - **Operation**: Get State
  - **Checkout Intent ID**: `{{ $('Confirm Checkout').item.json.id }}`
  - **Enable Polling**: `true`
  - **Max Attempts**: `20`
  - **Initial Interval (Seconds)**: `5`
  - **Max Interval (Seconds)**: `60`

  #### 7. Switch Node - Route Based on Final State

  Configure switch rules:

  - **Rule 1**: `{{ $json.state === "completed" }}` → Success handling
  - **Rule 2**: `{{ $json.state === "failed" }}` → Error handling

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Rye API Documentation](https://docs.rye.com)
  - [Rye Universal Checkout Guide](https://docs.rye.com/api-v2/introduction)

  ## Support

  For issues or questions:

  - **Node Issues**: [GitHub Issues](https://github.com/rye-com/n8n-nodes-rye/issues)
  - **n8n Community**: [n8n Forum](https://community.n8n.io/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Rye Universal Checkout API to create, track, and confirm checkout intents for e-commerce products without leaving the user's AI experience.","capabilities":["Create checkout intent with product URL and buyer information","Get and poll checkout state with automatic retry logic","Confirm checkout with payment method","Verify merchant domain support","Exponential backoff polling for rate limit management","State-based workflow routing (awaiting_confirmation, completed, failed)"],"authentication":"API key required (Access Token from Rye developer console)","commonUseCases":["E-commerce checkout automation within AI workflows","Product purchase initiation without leaving the application","Automated order tracking and confirmation","Merchant support validation before checkout"],"limitations":["Only supports US addresses (non-US country codes will cause errors)","Some merchants may take up to 45 minutes to process checkouts","Polling timeout in 'retrieving_offer' state may require manual intervention or increased max attempts","Requires separate Rye API account and access token setup"],"relatedNodes":["Switch","IF","Manual Trigger","Wait"]}


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

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

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

npm_readme:
  # n8n-nodes-murf

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

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

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

  ## Installation

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

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

  ## Operations

  The Murf AI node provides the following operations:

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

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

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

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

  ## Node Structure

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

  ## Credentials

  The node requires API credentials from Murf AI:

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

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Development

  To develop the node:

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

  ## License

  [MIT](LICENSE.md)

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


node_type: n8n-nodes-exa-official.exa
package_name: n8n-nodes-exa-official
display_name: Exa
description: Semantic web search and research via Exa API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: exa-jakub
author_github_url: https://github.com/exa-labs/n8n-integration.git
npm_package_name: n8n-nodes-exa-official
npm_version: 0.3.3
community_fetched_at: 2026-04-16T09:43:36.461Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Answer",
          "value": "answer",
          "description": "Get a web-grounded LLM answer to a query"
        },
        {
          "name": "Content",
          "value": "contents",
          "description": "Get contents from URLs"
        },
        {
          "name": "Search",
          "value": "search",
          "description": "Search the web intelligently"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search the web",
          "routing": {
            "request": {
              "url": "/search",
              "method": "POST"
            }
          },
          "description": "Search the web and optionally extract contents"
        },
        {
          "name": "Deep Search",
          "value": "deepSearch",
          "action": "Deep search the web",
          "routing": {
            "request": {
              "url": "/search",
              "method": "POST"
            }
          },
          "description": "Run a deep or deep-reasoning search with synthesized output"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContents",
      "options": [
        {
          "name": "Get Contents",
          "value": "getContents",
          "action": "Get contents from urls",
          "routing": {
            "request": {
              "url": "/contents",
              "method": "POST"
            }
          },
          "description": "Retrieve contents from a list of URLs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAnswer",
      "options": [
        {
          "name": "Get Answer",
          "value": "getAnswer",
          "action": "Get a web grounded LLM answer",
          "routing": {
            "request": {
              "url": "/answer",
              "method": "POST"
            }
          },
          "description": "Get a web-grounded LLM answer to a query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "answer"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search",
      "value": "search",
      "action": "Search the web",
      "routing": {
        "request": {
          "url": "/search",
          "method": "POST"
        }
      },
      "description": "Search the web and optionally extract contents",
      "resource": "search"
    },
    {
      "name": "Deep Search",
      "value": "deepSearch",
      "action": "Deep search the web",
      "routing": {
        "request": {
          "url": "/search",
          "method": "POST"
        }
      },
      "description": "Run a deep or deep-reasoning search with synthesized output",
      "resource": "search"
    },
    {
      "name": "Get Contents",
      "value": "getContents",
      "action": "Get contents from urls",
      "routing": {
        "request": {
          "url": "/contents",
          "method": "POST"
        }
      },
      "description": "Retrieve contents from a list of URLs",
      "resource": "contents"
    },
    {
      "name": "Get Answer",
      "value": "getAnswer",
      "action": "Get a web grounded LLM answer",
      "routing": {
        "request": {
          "url": "/answer",
          "method": "POST"
        }
      },
      "description": "Get a web-grounded LLM answer to a query",
      "resource": "answer"
    }
  ]

npm_readme:
  # n8n-nodes-exa-official

  This is an n8n community node that provides integration with the Exa API for intelligent web search, async research, and content extraction.

  [Exa](https://exa.ai) is an AI-powered search engine that provides embeddings-based semantic search, deep web research, and structured content extraction.

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

  ## Installation

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

  ## Operations

  This node supports the following Exa API operations:

  ### Search
  - **Search**: Intelligently search the web with neural or keyword-based search
    - Supports multiple search types: auto, neural, keyword, fast
    - Filter by domain, date, category, and text content
    - Extract page contents (text, highlights, summaries)
    - Configure livecrawl and subpage crawling

  ### Contents
  - **Get Contents**: Retrieve cleaned text, highlights, and summaries from a list of URLs

  ### Find Similar
  - **Find Similar Links**: Discover pages similar to a given URL

  ### Answer
  - **Get Answer**: Get an AI-generated answer to a query using Exa's research capabilities

  ### Research
  - **Create Research Task**: Launch a long-running research job powered by Exa Research or Research Pro
  - **Get Research Task**: Poll a specific research task for status, findings, and generated artifacts
  - **List Research Tasks**: Fetch paginated task history for monitoring and auditing

  ## Credentials

  To use this node, you need an Exa API key. You can obtain one by:

  1. Signing up at [dashboard.exa.ai](https://dashboard.exa.ai)
  2. Navigating to the API Keys section
  3. Creating a new API key

  Add the API key to your n8n credentials as "Exa API".

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n version: 1.60.0

  ## Usage

  ### Basic Search Example

  1. Add the Exa node to your workflow
  2. Select "Search" as the resource
  3. Enter your search query (e.g., "Latest AI research papers")
  4. Configure search type (auto, neural, keyword, or fast)
  5. Optionally add filters:
     - Category (research paper, news, company, etc.)
     - Date range (published date)
     - Domain filters (include/exclude specific domains)
     - Text filters (include/exclude specific text)

  ### Content Extraction

  Enable content extraction options:
  - **Text**: Get cleaned page text
  - **Highlights**: Get relevant excerpts
  - **Summary**: Get AI-generated summaries
  - **Livecrawl**: Crawl pages in real-time
  - **Subpages**: Crawl linked subpages

  ### Advanced Features

  **Date Filtering**: Filter results by publication date
  ```
  Start Published Date: 2024-01-01
  End Published Date: 2024-12-31
  ```

  **Domain Control**: Focus on or exclude specific domains
  ```
  Include Domains: arxiv.org, github.com
  Exclude Domains: reddit.com
  ```

  **Category Filtering**: Focus on specific content types
  - Company profiles
  - Research papers
  - News articles
  - PDFs
  - GitHub repositories
  - Twitter/LinkedIn profiles
  - Financial reports

  ### Research Workflow Example

  1. Add an Exa node and set **Resource** to `Research` with the **Create Research Task** operation.
  2. Provide a clear research instruction (for example, "Compare emerging open-source RAG frameworks and summarize trade-offs").
  3. Choose the Research product tier (`exa-research` or `exa-research-pro`) and optional guardrails like domain/category allowlists.
  4. Store the returned `id` or use paired nodes (Set/Code) to persist it inside the workflow.
  5. Add another Exa node in the same workflow set to **Get Research Task** and reference the saved `id` to poll results until the status becomes `completed`.
  6. Inspect the response for `insights`, `sources`, `outline`, or generated assets, then continue your workflow (e.g., send a Slack summary or populate a database).

  For bulk monitoring, use **List Research Tasks** and apply parameters for pagination, status filtering, or creation date ranges.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Exa API documentation](https://docs.exa.ai)
  * [Exa API reference](https://docs.exa.ai/reference/search)

  ## Development

  To work on this node locally:

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Link for local testing
  npm link

  # In your n8n installation directory
  cd ~/.n8n/custom
  npm link n8n-nodes-exa-official

  # Start n8n
  n8n start
  ```

  ## License

  [MIT](https://github.com/exa-labs/n8n-integration/blob/main/LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Exa API to perform semantic web search, deep web research, and structured content extraction.","capabilities":["Semantic web search with neural, keyword, and fast search modes","Content extraction (text, highlights, summaries) from search results","Domain, date, category, and text content filtering","Retrieve cleaned text and summaries from specific URLs","Discover similar pages to a given URL","Generate AI-powered answers to research queries","Create and monitor long-running research tasks","List and paginate research task history"],"authentication":"API key required (Exa API key)","commonUseCases":["Conducting deep web research for business intelligence","Extracting and summarizing content from multiple sources","Finding similar web pages or content","Monitoring research tasks and generating reports","Filtering search results by domain, date, or category"],"limitations":["Requires a paid Exa API key (free tier may have limitations)","Research tasks are long-running and require polling for status","Some advanced features like Research Pro may require specific product tiers"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-code","n8n-nodes-set"]}


node_type: @soniox/n8n-nodes-soniox.soniox
package_name: @soniox/n8n-nodes-soniox
display_name: Soniox
description: Create Soniox transcriptions and fetch results
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: ambroz-soniox
author_github_url: https://github.com/soniox/n8n-nodes-soniox.git
npm_package_name: @soniox/n8n-nodes-soniox
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:36.462Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcription",
      "options": [
        {
          "name": "Transcription",
          "value": "transcription"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a transcription"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete transcription and or file"
        },
        {
          "name": "Get Results",
          "value": "getResults",
          "action": "Get transcription results"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcription"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a transcription",
      "resource": "transcription"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete transcription and or file",
      "resource": "transcription"
    },
    {
      "name": "Get Results",
      "value": "getResults",
      "action": "Get transcription results",
      "resource": "transcription"
    }
  ]

npm_readme:
  # @soniox/n8n-nodes-soniox

  This is an n8n community node for [Soniox](https://soniox.com), providing speech-to-text transcription capabilities in your n8n workflows.

  Soniox offers state-of-the-art speech recognition with support for multiple languages, speaker diarization, and real-time transcription.

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

  ## Installation

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

  **Quick install:**

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

  ## Operations

  ### Transcription

  - **Create** - Create a new transcription job from an audio file
    - Supports binary file upload, audio URL, or previously uploaded file ID
    - Optional: Wait for completion and return results
    - Optional: Configure webhook for async notifications

  - **Get Results** - Retrieve transcription results
    - Fetch status and transcript for a given transcription ID
    - Optional: Wait for completion if still processing

  ## Credentials

  To use this node, you need a Soniox API key:

  1. Go to [Soniox Console](https://console.soniox.com/)
  2. Navigate to API Keys and create a new key
  3. In n8n, create new credentials of type **Soniox API**
  4. Enter your API key

  ## Features

  - **Multiple audio sources**: Upload binary files, provide URLs, or use pre-uploaded file IDs
  - **Language detection**: Automatic language identification or specify language hints
  - **Speaker diarization**: Identify and separate different speakers
  - **Translation**: One-way or two-way translation support
  - **Flexible output**: Get full transcript with metadata or text-only
  - **Async support**: Use webhooks for long-running transcriptions
  - **Custom context**: Improve accuracy with domain-specific vocabulary

  ## Usage Examples

  ### Basic Transcription

  1. Add a **Soniox** node to your workflow
  2. Select **Create** operation
  3. Choose your audio source (Binary File, URL, or File ID)
  4. Enable **Wait for Completion** to get results immediately
  5. Execute the workflow

  ### Webhook-Based Async Flow

  1. Create a transcription with **Wait for Completion** disabled
  2. Configure a **Webhook URL** pointing to an n8n Webhook trigger
  3. When transcription completes, Soniox calls your webhook
  4. Use a second **Soniox** node with **Get Results** to fetch the transcript

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested with n8n versions: 1.x, 2.x

  ## Resources

  - [Soniox n8n Integration Guide](https://soniox.com/docs/stt/integrations/n8n)
  - [Soniox Documentation](https://soniox.com/docs/)
  - [Soniox API Reference](https://soniox.com/docs/stt/api-reference)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## Support

  - For Soniox API issues: [support@soniox.com](mailto:support@soniox.com)
  - For node issues: [GitHub Issues](https://github.com/soniox/n8n-nodes-soniox/issues)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that creates speech-to-text transcriptions via Soniox and retrieves their results, supporting multiple languages, speaker diarization, and translation.","capabilities":["Create transcription jobs from binary files, audio URLs, or file IDs","Retrieve transcription status and results by ID","Automatic or manual language detection","Speaker diarization to identify different speakers","One-way and two-way translation","Async transcription via webhooks","Custom context for domain-specific vocabulary","Flexible output formats (full transcript with metadata or text-only)"],"authentication":"API key required (Soniox API key)","commonUseCases":["Automated meeting note generation","Voice-to-text content creation","Audio file processing pipelines","Real-time transcription workflows","Speaker identification in interviews"],"limitations":["Requires valid Soniox API key and account","Async transcription requires additional webhook configuration","Minimum n8n version 1.0.0 required"],"relatedNodes":["Webhook","Binary File","HTTP Request","Wait"]}


node_type: @algolia/n8n-nodes-algolia.algolia
package_name: @algolia/n8n-nodes-algolia
display_name: Algolia
description: Use Algolia in your n8n workflows
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: ejaldorau
author_github_url: https://github.com/algolia/n8n-nodes-algolia.git
npm_package_name: @algolia/n8n-nodes-algolia
npm_version: 0.15.0
community_fetched_at: 2026-04-16T09:43:36.467Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Advanced",
          "value": "Advanced",
          "description": "Query your logs"
        },
        {
          "name": "Api Keys",
          "value": "Api Keys",
          "description": "Manage your API keys"
        },
        {
          "name": "Clusters",
          "value": "Clusters",
          "description": "Multi-cluster operations"
        },
        {
          "name": "Dictionaries",
          "value": "Dictionaries",
          "description": "Manage your dictionaries"
        },
        {
          "name": "Indices",
          "value": "Indices",
          "description": "Manage your indices and index settings"
        },
        {
          "name": "Records",
          "value": "Records",
          "description": "Add, update, and delete records from your indices"
        },
        {
          "name": "Rules",
          "value": "Rules",
          "description": "Create, update, delete, and search for rules"
        },
        {
          "name": "Search",
          "value": "Search",
          "description": "Search one or more indices for matching records or facet values"
        },
        {
          "name": "Synonyms",
          "value": "Synonyms",
          "description": "Create, update, delete, and search for synonyms"
        },
        {
          "name": "Vaults",
          "value": "Vaults",
          "description": "Algolia Vault lets you restrict access to your clusters to specific IP addresses and provides disk-level encryption at rest"
        }
      ],
      "description": "Select the resource to work with",
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Search an index",
          "value": "searchSingleIndex",
          "action": "Search an index",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/query",
              "method": "POST"
            }
          },
          "description": "Searches a single index and returns matching search results as hits.",
          "inputSchema": {
            "simplifiedOutput": [
              "hits"
            ]
          }
        },
        {
          "name": "Search multiple indices",
          "value": "search",
          "action": "Search multiple indices",
          "routing": {
            "request": {
              "url": "=/1/indexes/*/queries",
              "method": "POST"
            }
          },
          "description": "Sends multiple search requests to one or more indices."
        },
        {
          "name": "Search for facet values",
          "value": "searchForFacetValues",
          "action": "Search for facet values",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/facets/{{ $parameter.facetName_string }}/query",
              "method": "POST"
            }
          },
          "description": "Searches for values of a specified facet attribute."
        },
        {
          "name": "Browse for records",
          "value": "browse",
          "action": "Browse for records",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/browse",
              "method": "POST"
            }
          },
          "description": "Retrieves records from an index, up to 1,000 per request.",
          "inputSchema": {
            "simplifiedOutput": [
              "hits"
            ]
          }
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Search"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add a new record (with auto-generated object ID)",
          "value": "saveObject",
          "action": "Add a new record (with auto-generated object ID)",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}",
              "method": "POST"
            }
          },
          "description": "Adds a record to an index or replaces it."
        },
        {
          "name": "Retrieve a record",
          "value": "getObject",
          "action": "Retrieve a record",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
              "method": "GET"
            }
          },
          "description": "Retrieves one record by its object ID."
        },
        {
          "name": "Add or replace a record",
          "value": "addOrUpdateObject",
          "action": "Add or replace a record",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
              "method": "PUT"
            }
          },
          "description": "If a record with the specified object ID exists, the existing record is replaced."
        },
        {
          "name": "Delete a record",
          "value": "deleteObject",
          "action": "Delete a record",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a record by its object ID."
        },
        {
          "name": "Delete records matching a filter",
          "value": "deleteBy",
          "action": "Delete records matching a filter",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/deleteByQuery",
              "method": "POST"
            }
          },
          "description": "This operation doesn't accept empty filters."
        },
        {
          "name": "Delete all records from an index",
          "value": "clearObjects",
          "action": "Delete all records from an index",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/clear",
              "method": "POST"
            }
          },
          "description": "Deletes only the records from an index while keeping settings, synonyms, and rules."
        },
        {
          "name": "Add or update attributes",
          "value": "partialUpdateObject",
          "action": "Add or update attributes",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}/partial",
              "method": "POST"
            }
          },
          "description": "Adds new attributes to a record, or updates existing ones."
        },
        {
          "name": "Batch indexing operations on one index",
          "value": "batch",
          "action": "Batch indexing operations on one index",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/batch",
              "method": "POST"
            }
          },
          "description": "Adds, updates, or deletes records in one index with a single API request."
        },
        {
          "name": "Batch indexing operations on multiple indices",
          "value": "multipleBatch",
          "action": "Batch indexing operations on multiple indices",
          "routing": {
            "request": {
              "url": "=/1/indexes/*/batch",
              "method": "POST"
            }
          },
          "description": "Adds, updates, or deletes records in multiple indices with a single API request."
        },
        {
          "name": "Retrieve records",
          "value": "getObjects",
          "action": "Retrieve records",
          "routing": {
            "request": {
              "url": "=/1/indexes/*/objects",
              "method": "POST"
            }
          },
          "description": "Retrieves one or more records, potentially from different indices."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Records"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Delete an index",
          "value": "deleteIndex",
          "action": "Delete an index",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes an index and all its settings."
        },
        {
          "name": "Retrieve index settings",
          "value": "getSettings",
          "action": "Retrieve index settings",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/settings",
              "method": "GET"
            }
          },
          "description": "Retrieves an object with non-null index settings.",
          "inputSchema": {
            "simplifiedOutput": [
              "advancedSyntax",
              "advancedSyntaxFeatures",
              "allowCompressionOfIntegerArray",
              "allowTyposOnNumericTokens",
              "alternativesAsExact",
              "attributeCriteriaComputedByMinProximity",
              "attributeForDistinct",
              "attributesForFaceting",
              "attributesToHighlight",
              "attributesToRetrieve"
            ]
          }
        },
        {
          "name": "Update index settings",
          "value": "setSettings",
          "action": "Update index settings",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/settings",
              "method": "PUT"
            }
          },
          "description": "Update the specified index settings."
        },
        {
          "name": "Check task status",
          "value": "getTask",
          "action": "Check task status",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/task/{{ $parameter.taskID_number }}",
              "method": "GET"
            }
          },
          "description": "Checks the status of a given task."
        },
        {
          "name": "Copy or move an index",
          "value": "operationIndex",
          "action": "Copy or move an index",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/operation",
              "method": "POST"
            }
          },
          "description": "Copies or moves (renames) an index within the same Algolia application."
        },
        {
          "name": "List indices",
          "value": "listIndices",
          "action": "List indices",
          "routing": {
            "request": {
              "url": "=/1/indexes",
              "method": "GET"
            }
          },
          "description": "Lists all indices in the current Algolia application."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Indices"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve a synonym",
          "value": "getSynonym",
          "action": "Retrieve a synonym",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
              "method": "GET"
            }
          },
          "description": "Retrieves a synonym by its ID."
        },
        {
          "name": "Create or replace a synonym",
          "value": "saveSynonym",
          "action": "Create or replace a synonym",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
              "method": "PUT"
            }
          },
          "description": "If a synonym with the specified object ID doesn't exist, Algolia adds a new one."
        },
        {
          "name": "Delete a synonym",
          "value": "deleteSynonym",
          "action": "Delete a synonym",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a synonym by its ID."
        },
        {
          "name": "Create or replace synonyms",
          "value": "saveSynonyms",
          "action": "Create or replace synonyms",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/batch",
              "method": "POST"
            }
          },
          "description": "If a synonym with the `objectID` doesn't exist, Algolia adds a new one."
        },
        {
          "name": "Delete all synonyms",
          "value": "clearSynonyms",
          "action": "Delete all synonyms",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/clear",
              "method": "POST"
            }
          },
          "description": "Deletes all synonyms from the index."
        },
        {
          "name": "Search for synonyms",
          "value": "searchSynonyms",
          "action": "Search for synonyms",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/search",
              "method": "POST"
            }
          },
          "description": "Searches for synonyms in your index."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Synonyms"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "List API keys",
          "value": "listApiKeys",
          "action": "List API keys",
          "routing": {
            "request": {
              "url": "=/1/keys",
              "method": "GET"
            }
          },
          "description": "Lists all API keys associated with your Algolia application, including their permissions and restrictions."
        },
        {
          "name": "Create an API key",
          "value": "addApiKey",
          "action": "Create an API key",
          "routing": {
            "request": {
              "url": "=/1/keys",
              "method": "POST"
            }
          },
          "description": "Creates a new API key with specific permissions and restrictions."
        },
        {
          "name": "Retrieve API key permissions",
          "value": "getApiKey",
          "action": "Retrieve API key permissions",
          "routing": {
            "request": {
              "url": "=/1/keys/{{ $parameter.key_string }}",
              "method": "GET"
            }
          },
          "description": "Gets the permissions and restrictions of an API key."
        },
        {
          "name": "Update an API key",
          "value": "updateApiKey",
          "action": "Update an API key",
          "routing": {
            "request": {
              "url": "=/1/keys/{{ $parameter.key_string }}",
              "method": "PUT"
            }
          },
          "description": "Replaces the permissions of an existing API key."
        },
        {
          "name": "Delete an API key",
          "value": "deleteApiKey",
          "action": "Delete an API key",
          "routing": {
            "request": {
              "url": "=/1/keys/{{ $parameter.key_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes the API key."
        },
        {
          "name": "Restore an API key",
          "value": "restoreApiKey",
          "action": "Restore an API key",
          "routing": {
            "request": {
              "url": "=/1/keys/{{ $parameter.key_string }}/restore",
              "method": "POST"
            }
          },
          "description": "Restores a deleted API key."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Api Keys"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve a rule",
          "value": "getRule",
          "action": "Retrieve a rule",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
              "method": "GET"
            }
          },
          "description": "Retrieves a rule by its ID."
        },
        {
          "name": "Create or replace a rule",
          "value": "saveRule",
          "action": "Create or replace a rule",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
              "method": "PUT"
            }
          },
          "description": "If a rule with the specified object ID doesn't exist, it's created."
        },
        {
          "name": "Delete a rule",
          "value": "deleteRule",
          "action": "Delete a rule",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a rule by its ID."
        },
        {
          "name": "Create or update rules",
          "value": "saveRules",
          "action": "Create or update rules",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/batch",
              "method": "POST"
            }
          },
          "description": "Create or update multiple rules."
        },
        {
          "name": "Delete all rules",
          "value": "clearRules",
          "action": "Delete all rules",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/clear",
              "method": "POST"
            }
          },
          "description": "Deletes all rules from the index."
        },
        {
          "name": "Search for rules",
          "value": "searchRules",
          "action": "Search for rules",
          "routing": {
            "request": {
              "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/search",
              "method": "POST"
            }
          },
          "description": "Searches for rules in your index."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Rules"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add or delete dictionary entries",
          "value": "batchDictionaryEntries",
          "action": "Add or delete dictionary entries",
          "routing": {
            "request": {
              "url": "=/1/dictionaries/{{ $parameter.dictionaryName_options }}/batch",
              "method": "POST"
            }
          },
          "description": "Adds or deletes multiple entries from your plurals, segmentation, or stop word dictionaries."
        },
        {
          "name": "Search dictionary entries",
          "value": "searchDictionaryEntries",
          "action": "Search dictionary entries",
          "routing": {
            "request": {
              "url": "=/1/dictionaries/{{ $parameter.dictionaryName_options }}/search",
              "method": "POST"
            }
          },
          "description": "Searches for standard and custom dictionary entries."
        },
        {
          "name": "Retrieve dictionary settings",
          "value": "getDictionarySettings",
          "action": "Retrieve dictionary settings",
          "routing": {
            "request": {
              "url": "=/1/dictionaries/*/settings",
              "method": "GET"
            }
          },
          "description": "Retrieves the languages for which standard dictionary entries are turned off."
        },
        {
          "name": "Update dictionary settings",
          "value": "setDictionarySettings",
          "action": "Update dictionary settings",
          "routing": {
            "request": {
              "url": "=/1/dictionaries/*/settings",
              "method": "PUT"
            }
          },
          "description": "Turns standard stop word dictionary entries on or off for a given language."
        },
        {
          "name": "List available languages",
          "value": "getDictionaryLanguages",
          "action": "List available languages",
          "routing": {
            "request": {
              "url": "=/1/dictionaries/*/languages",
              "method": "GET"
            }
          },
          "description": "Lists supported languages with their supported dictionary types and number of custom entries."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Dictionaries"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Assign or move a user ID",
          "value": "assignUserId",
          "action": "Assign or move a user ID",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping",
              "method": "POST"
            }
          },
          "description": "Assigns or moves a user ID to a cluster."
        },
        {
          "name": "List user IDs",
          "value": "listUserIds",
          "action": "List user IDs",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping",
              "method": "GET"
            }
          },
          "description": "Lists the userIDs assigned to a multi-cluster application."
        },
        {
          "name": "Assign multiple userIDs",
          "value": "batchAssignUserIds",
          "action": "Assign multiple userIDs",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/batch",
              "method": "POST"
            }
          },
          "description": "Assigns multiple user IDs to a cluster."
        },
        {
          "name": "Get top user IDs",
          "value": "getTopUserIds",
          "action": "Get top user IDs",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/top",
              "method": "GET"
            }
          },
          "description": "Get the IDs of the 10 users with the highest number of records per cluster."
        },
        {
          "name": "Retrieve user ID",
          "value": "getUserId",
          "action": "Retrieve user ID",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/{{ $parameter.userID_string }}",
              "method": "GET"
            }
          },
          "description": "Returns the user ID data stored in the mapping."
        },
        {
          "name": "Delete user ID",
          "value": "removeUserId",
          "action": "Delete user ID",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/{{ $parameter.userID_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a user ID and its associated data from the clusters."
        },
        {
          "name": "List clusters",
          "value": "listClusters",
          "action": "List clusters",
          "routing": {
            "request": {
              "url": "=/1/clusters",
              "method": "GET"
            }
          },
          "description": "Lists the available clusters in a multi-cluster setup."
        },
        {
          "name": "Search for user IDs",
          "value": "searchUserIds",
          "action": "Search for user IDs",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/search",
              "method": "POST"
            }
          },
          "description": "Since it can take a few seconds to get the data from the different clusters,"
        },
        {
          "name": "Get migration and user mapping status",
          "value": "hasPendingMappings",
          "action": "Get migration and user mapping status",
          "routing": {
            "request": {
              "url": "=/1/clusters/mapping/pending",
              "method": "GET"
            }
          },
          "description": "To determine when the time-consuming process of creating a large batch of users or migrating users from one cluster to another is complete, this operation retrieves the status of the process."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Clusters"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "List allowed sources",
          "value": "getSources",
          "action": "List allowed sources",
          "routing": {
            "request": {
              "url": "=/1/security/sources",
              "method": "GET"
            }
          },
          "description": "Retrieves all allowed IP addresses with access to your application."
        },
        {
          "name": "Replace allowed sources",
          "value": "replaceSources",
          "action": "Replace allowed sources",
          "routing": {
            "request": {
              "url": "=/1/security/sources",
              "method": "PUT"
            }
          },
          "description": "Replaces the list of allowed sources."
        },
        {
          "name": "Add a source",
          "value": "appendSource",
          "action": "Add a source",
          "routing": {
            "request": {
              "url": "=/1/security/sources/append",
              "method": "POST"
            }
          },
          "description": "Adds a source to the list of allowed sources."
        },
        {
          "name": "Delete a source",
          "value": "deleteSource",
          "action": "Delete a source",
          "routing": {
            "request": {
              "url": "=/1/security/sources/{{ $parameter.source_string }}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a source from the list of allowed sources."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Vaults"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Retrieve log entries",
          "value": "getLogs",
          "action": "Retrieve log entries",
          "routing": {
            "request": {
              "url": "=/1/logs",
              "method": "GET"
            }
          },
          "description": "The request must be authenticated by an API key with the [`logs` ACL](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl)."
        },
        {
          "name": "Check application task status",
          "value": "getAppTask",
          "action": "Check application task status",
          "routing": {
            "request": {
              "url": "=/1/task/{{ $parameter.taskID_number }}",
              "method": "GET"
            }
          },
          "description": "Checks the status of a given application task."
        }
      ],
      "description": "Select the operation to work with",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Advanced"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Search an index",
      "value": "searchSingleIndex",
      "action": "Search an index",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/query",
          "method": "POST"
        }
      },
      "description": "Searches a single index and returns matching search results as hits.",
      "inputSchema": {
        "simplifiedOutput": [
          "hits"
        ]
      },
      "resource": "Search"
    },
    {
      "name": "Search multiple indices",
      "value": "search",
      "action": "Search multiple indices",
      "routing": {
        "request": {
          "url": "=/1/indexes/*/queries",
          "method": "POST"
        }
      },
      "description": "Sends multiple search requests to one or more indices.",
      "resource": "Search"
    },
    {
      "name": "Search for facet values",
      "value": "searchForFacetValues",
      "action": "Search for facet values",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/facets/{{ $parameter.facetName_string }}/query",
          "method": "POST"
        }
      },
      "description": "Searches for values of a specified facet attribute.",
      "resource": "Search"
    },
    {
      "name": "Browse for records",
      "value": "browse",
      "action": "Browse for records",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/browse",
          "method": "POST"
        }
      },
      "description": "Retrieves records from an index, up to 1,000 per request.",
      "inputSchema": {
        "simplifiedOutput": [
          "hits"
        ]
      },
      "resource": "Search"
    },
    {
      "name": "Add a new record (with auto-generated object ID)",
      "value": "saveObject",
      "action": "Add a new record (with auto-generated object ID)",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}",
          "method": "POST"
        }
      },
      "description": "Adds a record to an index or replaces it.",
      "resource": "Records"
    },
    {
      "name": "Retrieve a record",
      "value": "getObject",
      "action": "Retrieve a record",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
          "method": "GET"
        }
      },
      "description": "Retrieves one record by its object ID.",
      "resource": "Records"
    },
    {
      "name": "Add or replace a record",
      "value": "addOrUpdateObject",
      "action": "Add or replace a record",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
          "method": "PUT"
        }
      },
      "description": "If a record with the specified object ID exists, the existing record is replaced.",
      "resource": "Records"
    },
    {
      "name": "Delete a record",
      "value": "deleteObject",
      "action": "Delete a record",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a record by its object ID.",
      "resource": "Records"
    },
    {
      "name": "Delete records matching a filter",
      "value": "deleteBy",
      "action": "Delete records matching a filter",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/deleteByQuery",
          "method": "POST"
        }
      },
      "description": "This operation doesn't accept empty filters.",
      "resource": "Records"
    },
    {
      "name": "Delete all records from an index",
      "value": "clearObjects",
      "action": "Delete all records from an index",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/clear",
          "method": "POST"
        }
      },
      "description": "Deletes only the records from an index while keeping settings, synonyms, and rules.",
      "resource": "Records"
    },
    {
      "name": "Add or update attributes",
      "value": "partialUpdateObject",
      "action": "Add or update attributes",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/{{ $parameter.objectID_string }}/partial",
          "method": "POST"
        }
      },
      "description": "Adds new attributes to a record, or updates existing ones.",
      "resource": "Records"
    },
    {
      "name": "Batch indexing operations on one index",
      "value": "batch",
      "action": "Batch indexing operations on one index",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/batch",
          "method": "POST"
        }
      },
      "description": "Adds, updates, or deletes records in one index with a single API request.",
      "resource": "Records"
    },
    {
      "name": "Batch indexing operations on multiple indices",
      "value": "multipleBatch",
      "action": "Batch indexing operations on multiple indices",
      "routing": {
        "request": {
          "url": "=/1/indexes/*/batch",
          "method": "POST"
        }
      },
      "description": "Adds, updates, or deletes records in multiple indices with a single API request.",
      "resource": "Records"
    },
    {
      "name": "Retrieve records",
      "value": "getObjects",
      "action": "Retrieve records",
      "routing": {
        "request": {
          "url": "=/1/indexes/*/objects",
          "method": "POST"
        }
      },
      "description": "Retrieves one or more records, potentially from different indices.",
      "resource": "Records"
    },
    {
      "name": "Delete an index",
      "value": "deleteIndex",
      "action": "Delete an index",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes an index and all its settings.",
      "resource": "Indices"
    },
    {
      "name": "Retrieve index settings",
      "value": "getSettings",
      "action": "Retrieve index settings",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/settings",
          "method": "GET"
        }
      },
      "description": "Retrieves an object with non-null index settings.",
      "inputSchema": {
        "simplifiedOutput": [
          "advancedSyntax",
          "advancedSyntaxFeatures",
          "allowCompressionOfIntegerArray",
          "allowTyposOnNumericTokens",
          "alternativesAsExact",
          "attributeCriteriaComputedByMinProximity",
          "attributeForDistinct",
          "attributesForFaceting",
          "attributesToHighlight",
          "attributesToRetrieve"
        ]
      },
      "resource": "Indices"
    },
    {
      "name": "Update index settings",
      "value": "setSettings",
      "action": "Update index settings",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/settings",
          "method": "PUT"
        }
      },
      "description": "Update the specified index settings.",
      "resource": "Indices"
    },
    {
      "name": "Check task status",
      "value": "getTask",
      "action": "Check task status",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/task/{{ $parameter.taskID_number }}",
          "method": "GET"
        }
      },
      "description": "Checks the status of a given task.",
      "resource": "Indices"
    },
    {
      "name": "Copy or move an index",
      "value": "operationIndex",
      "action": "Copy or move an index",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/operation",
          "method": "POST"
        }
      },
      "description": "Copies or moves (renames) an index within the same Algolia application.",
      "resource": "Indices"
    },
    {
      "name": "List indices",
      "value": "listIndices",
      "action": "List indices",
      "routing": {
        "request": {
          "url": "=/1/indexes",
          "method": "GET"
        }
      },
      "description": "Lists all indices in the current Algolia application.",
      "resource": "Indices"
    },
    {
      "name": "Retrieve a synonym",
      "value": "getSynonym",
      "action": "Retrieve a synonym",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
          "method": "GET"
        }
      },
      "description": "Retrieves a synonym by its ID.",
      "resource": "Synonyms"
    },
    {
      "name": "Create or replace a synonym",
      "value": "saveSynonym",
      "action": "Create or replace a synonym",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
          "method": "PUT"
        }
      },
      "description": "If a synonym with the specified object ID doesn't exist, Algolia adds a new one.",
      "resource": "Synonyms"
    },
    {
      "name": "Delete a synonym",
      "value": "deleteSynonym",
      "action": "Delete a synonym",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/{{ $parameter.objectID_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a synonym by its ID.",
      "resource": "Synonyms"
    },
    {
      "name": "Create or replace synonyms",
      "value": "saveSynonyms",
      "action": "Create or replace synonyms",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/batch",
          "method": "POST"
        }
      },
      "description": "If a synonym with the `objectID` doesn't exist, Algolia adds a new one.",
      "resource": "Synonyms"
    },
    {
      "name": "Delete all synonyms",
      "value": "clearSynonyms",
      "action": "Delete all synonyms",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/clear",
          "method": "POST"
        }
      },
      "description": "Deletes all synonyms from the index.",
      "resource": "Synonyms"
    },
    {
      "name": "Search for synonyms",
      "value": "searchSynonyms",
      "action": "Search for synonyms",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/synonyms/search",
          "method": "POST"
        }
      },
      "description": "Searches for synonyms in your index.",
      "resource": "Synonyms"
    },
    {
      "name": "List API keys",
      "value": "listApiKeys",
      "action": "List API keys",
      "routing": {
        "request": {
          "url": "=/1/keys",
          "method": "GET"
        }
      },
      "description": "Lists all API keys associated with your Algolia application, including their permissions and restrictions.",
      "resource": "Api Keys"
    },
    {
      "name": "Create an API key",
      "value": "addApiKey",
      "action": "Create an API key",
      "routing": {
        "request": {
          "url": "=/1/keys",
          "method": "POST"
        }
      },
      "description": "Creates a new API key with specific permissions and restrictions.",
      "resource": "Api Keys"
    },
    {
      "name": "Retrieve API key permissions",
      "value": "getApiKey",
      "action": "Retrieve API key permissions",
      "routing": {
        "request": {
          "url": "=/1/keys/{{ $parameter.key_string }}",
          "method": "GET"
        }
      },
      "description": "Gets the permissions and restrictions of an API key.",
      "resource": "Api Keys"
    },
    {
      "name": "Update an API key",
      "value": "updateApiKey",
      "action": "Update an API key",
      "routing": {
        "request": {
          "url": "=/1/keys/{{ $parameter.key_string }}",
          "method": "PUT"
        }
      },
      "description": "Replaces the permissions of an existing API key.",
      "resource": "Api Keys"
    },
    {
      "name": "Delete an API key",
      "value": "deleteApiKey",
      "action": "Delete an API key",
      "routing": {
        "request": {
          "url": "=/1/keys/{{ $parameter.key_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes the API key.",
      "resource": "Api Keys"
    },
    {
      "name": "Restore an API key",
      "value": "restoreApiKey",
      "action": "Restore an API key",
      "routing": {
        "request": {
          "url": "=/1/keys/{{ $parameter.key_string }}/restore",
          "method": "POST"
        }
      },
      "description": "Restores a deleted API key.",
      "resource": "Api Keys"
    },
    {
      "name": "Retrieve a rule",
      "value": "getRule",
      "action": "Retrieve a rule",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
          "method": "GET"
        }
      },
      "description": "Retrieves a rule by its ID.",
      "resource": "Rules"
    },
    {
      "name": "Create or replace a rule",
      "value": "saveRule",
      "action": "Create or replace a rule",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
          "method": "PUT"
        }
      },
      "description": "If a rule with the specified object ID doesn't exist, it's created.",
      "resource": "Rules"
    },
    {
      "name": "Delete a rule",
      "value": "deleteRule",
      "action": "Delete a rule",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/{{ $parameter.objectID_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a rule by its ID.",
      "resource": "Rules"
    },
    {
      "name": "Create or update rules",
      "value": "saveRules",
      "action": "Create or update rules",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/batch",
          "method": "POST"
        }
      },
      "description": "Create or update multiple rules.",
      "resource": "Rules"
    },
    {
      "name": "Delete all rules",
      "value": "clearRules",
      "action": "Delete all rules",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/clear",
          "method": "POST"
        }
      },
      "description": "Deletes all rules from the index.",
      "resource": "Rules"
    },
    {
      "name": "Search for rules",
      "value": "searchRules",
      "action": "Search for rules",
      "routing": {
        "request": {
          "url": "=/1/indexes/{{ $parameter.indexName_string }}/rules/search",
          "method": "POST"
        }
      },
      "description": "Searches for rules in your index.",
      "resource": "Rules"
    },
    {
      "name": "Add or delete dictionary entries",
      "value": "batchDictionaryEntries",
      "action": "Add or delete dictionary entries",
      "routing": {
        "request": {
          "url": "=/1/dictionaries/{{ $parameter.dictionaryName_options }}/batch",
          "method": "POST"
        }
      },
      "description": "Adds or deletes multiple entries from your plurals, segmentation, or stop word dictionaries.",
      "resource": "Dictionaries"
    },
    {
      "name": "Search dictionary entries",
      "value": "searchDictionaryEntries",
      "action": "Search dictionary entries",
      "routing": {
        "request": {
          "url": "=/1/dictionaries/{{ $parameter.dictionaryName_options }}/search",
          "method": "POST"
        }
      },
      "description": "Searches for standard and custom dictionary entries.",
      "resource": "Dictionaries"
    },
    {
      "name": "Retrieve dictionary settings",
      "value": "getDictionarySettings",
      "action": "Retrieve dictionary settings",
      "routing": {
        "request": {
          "url": "=/1/dictionaries/*/settings",
          "method": "GET"
        }
      },
      "description": "Retrieves the languages for which standard dictionary entries are turned off.",
      "resource": "Dictionaries"
    },
    {
      "name": "Update dictionary settings",
      "value": "setDictionarySettings",
      "action": "Update dictionary settings",
      "routing": {
        "request": {
          "url": "=/1/dictionaries/*/settings",
          "method": "PUT"
        }
      },
      "description": "Turns standard stop word dictionary entries on or off for a given language.",
      "resource": "Dictionaries"
    },
    {
      "name": "List available languages",
      "value": "getDictionaryLanguages",
      "action": "List available languages",
      "routing": {
        "request": {
          "url": "=/1/dictionaries/*/languages",
          "method": "GET"
        }
      },
      "description": "Lists supported languages with their supported dictionary types and number of custom entries.",
      "resource": "Dictionaries"
    },
    {
      "name": "Assign or move a user ID",
      "value": "assignUserId",
      "action": "Assign or move a user ID",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping",
          "method": "POST"
        }
      },
      "description": "Assigns or moves a user ID to a cluster.",
      "resource": "Clusters"
    },
    {
      "name": "List user IDs",
      "value": "listUserIds",
      "action": "List user IDs",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping",
          "method": "GET"
        }
      },
      "description": "Lists the userIDs assigned to a multi-cluster application.",
      "resource": "Clusters"
    },
    {
      "name": "Assign multiple userIDs",
      "value": "batchAssignUserIds",
      "action": "Assign multiple userIDs",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/batch",
          "method": "POST"
        }
      },
      "description": "Assigns multiple user IDs to a cluster.",
      "resource": "Clusters"
    },
    {
      "name": "Get top user IDs",
      "value": "getTopUserIds",
      "action": "Get top user IDs",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/top",
          "method": "GET"
        }
      },
      "description": "Get the IDs of the 10 users with the highest number of records per cluster.",
      "resource": "Clusters"
    },
    {
      "name": "Retrieve user ID",
      "value": "getUserId",
      "action": "Retrieve user ID",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/{{ $parameter.userID_string }}",
          "method": "GET"
        }
      },
      "description": "Returns the user ID data stored in the mapping.",
      "resource": "Clusters"
    },
    {
      "name": "Delete user ID",
      "value": "removeUserId",
      "action": "Delete user ID",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/{{ $parameter.userID_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a user ID and its associated data from the clusters.",
      "resource": "Clusters"
    },
    {
      "name": "List clusters",
      "value": "listClusters",
      "action": "List clusters",
      "routing": {
        "request": {
          "url": "=/1/clusters",
          "method": "GET"
        }
      },
      "description": "Lists the available clusters in a multi-cluster setup.",
      "resource": "Clusters"
    },
    {
      "name": "Search for user IDs",
      "value": "searchUserIds",
      "action": "Search for user IDs",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/search",
          "method": "POST"
        }
      },
      "description": "Since it can take a few seconds to get the data from the different clusters,",
      "resource": "Clusters"
    },
    {
      "name": "Get migration and user mapping status",
      "value": "hasPendingMappings",
      "action": "Get migration and user mapping status",
      "routing": {
        "request": {
          "url": "=/1/clusters/mapping/pending",
          "method": "GET"
        }
      },
      "description": "To determine when the time-consuming process of creating a large batch of users or migrating users from one cluster to another is complete, this operation retrieves the status of the process.",
      "resource": "Clusters"
    },
    {
      "name": "List allowed sources",
      "value": "getSources",
      "action": "List allowed sources",
      "routing": {
        "request": {
          "url": "=/1/security/sources",
          "method": "GET"
        }
      },
      "description": "Retrieves all allowed IP addresses with access to your application.",
      "resource": "Vaults"
    },
    {
      "name": "Replace allowed sources",
      "value": "replaceSources",
      "action": "Replace allowed sources",
      "routing": {
        "request": {
          "url": "=/1/security/sources",
          "method": "PUT"
        }
      },
      "description": "Replaces the list of allowed sources.",
      "resource": "Vaults"
    },
    {
      "name": "Add a source",
      "value": "appendSource",
      "action": "Add a source",
      "routing": {
        "request": {
          "url": "=/1/security/sources/append",
          "method": "POST"
        }
      },
      "description": "Adds a source to the list of allowed sources.",
      "resource": "Vaults"
    },
    {
      "name": "Delete a source",
      "value": "deleteSource",
      "action": "Delete a source",
      "routing": {
        "request": {
          "url": "=/1/security/sources/{{ $parameter.source_string }}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a source from the list of allowed sources.",
      "resource": "Vaults"
    },
    {
      "name": "Retrieve log entries",
      "value": "getLogs",
      "action": "Retrieve log entries",
      "routing": {
        "request": {
          "url": "=/1/logs",
          "method": "GET"
        }
      },
      "description": "The request must be authenticated by an API key with the [`logs` ACL](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl).",
      "resource": "Advanced"
    },
    {
      "name": "Check application task status",
      "value": "getAppTask",
      "action": "Check application task status",
      "routing": {
        "request": {
          "url": "=/1/task/{{ $parameter.taskID_number }}",
          "method": "GET"
        }
      },
      "description": "Checks the status of a given application task.",
      "resource": "Advanced"
    }
  ]

npm_readme:
  # n8n-nodes-algolia

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

  Algolia is a hosted search API that provides search-as-a-service solutions. It offers powerful search capabilities including full-text search, faceting, geo-search, and instant search with typo tolerance.

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

  ## Installation

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

  ## Credentials

  To use this node, you need to authenticate with Algolia using API credentials.

  ### Prerequisites

  1. [Sign up](https://dashboard.algolia.com/users/sign_up) or [log into](https://dashboard.algolia.com/users/sign_in) your Algolia account
  2. In your Algolia dashboard, go to [Settings](https://dashboard.algolia.com/account/overview) > [API Keys](https://dashboard.algolia.com/account/api-keys/all)
  3. Copy your Application ID
  4. Copy your Admin API Key
     - Required for if you want to manage your API keys from n8n - otherwise the Write API Key should be enough)

  ![API Keys page](assets/algolia-credentials.png)

  5. In n8n, create new Algolia API credentials with:
     - **Application ID**: Your Algolia Application ID
     - **Admin API Key**: Your Algolia Admin API Key

  ![Credentials page](assets/n8n-credentials.png)

  ## Operations

  This node supports the following operations:

  <!-- THE FOLLOWING SECTION IS GENERATED BY CI. ANY CHANGES WILL BE OVERRIDDEN -->
  <!-- OPERATIONS START -->

  ### Advanced

  - **Retrieve log entries** - The request must be authenticated by an API key with the [`logs` ACL](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl).
  - **Check application task status** - Checks the status of a given application task.

  ### Api Keys

  - **List API keys** - Lists all API keys associated with your Algolia application, including their permissions and restrictions.
  - **Create an API key** - Creates a new API key with specific permissions and restrictions.
  - **Retrieve API key permissions** - Gets the permissions and restrictions of an API key.
  - **Update an API key** - Replaces the permissions of an existing API key.
  - **Delete an API key** - Deletes the API key.
  - **Restore an API key** - Restores a deleted API key.

  ### Clusters

  - **Assign or move a user ID** - Assigns or moves a user ID to a cluster.
  - **List user IDs** - Lists the userIDs assigned to a multi-cluster application.
  - **Assign multiple userIDs** - Assigns multiple user IDs to a cluster.
  - **Get top user IDs** - Get the IDs of the 10 users with the highest number of records per cluster.
  - **Retrieve user ID** - Returns the user ID data stored in the mapping.
  - **Delete user ID** - Deletes a user ID and its associated data from the clusters.
  - **List clusters** - Lists the available clusters in a multi-cluster setup.
  - **Search for user IDs** - Since it can take a few seconds to get the data from the different clusters,
  - **Get migration and user mapping status** - To determine when the time-consuming process of creating a large batch of users or migrating users from one cluster to another is complete, this operation retrieves the status of the process.

  ### Dictionaries

  - **Add or delete dictionary entries** - Adds or deletes multiple entries from your plurals, segmentation, or stop word dictionaries.
  - **Search dictionary entries** - Searches for standard and custom dictionary entries.
  - **Retrieve dictionary settings** - Retrieves the languages for which standard dictionary entries are turned off.
  - **Update dictionary settings** - Turns standard stop word dictionary entries on or off for a given language.
  - **List available languages** - Lists supported languages with their supported dictionary types and number of custom entries.

  ### Indices

  - **Delete an index** - Deletes an index and all its settings.
  - **Retrieve index settings** - Retrieves an object with non-null index settings.
  - **Update index settings** - Update the specified index settings.
  - **Check task status** - Checks the status of a given task.
  - **Copy or move an index** - Copies or moves (renames) an index within the same Algolia application.
  - **List indices** - Lists all indices in the current Algolia application.

  ### Records

  - **Add a new record (with auto-generated object ID)** - Adds a record to an index or replaces it.
  - **Retrieve a record** - Retrieves one record by its object ID.
  - **Add or replace a record** - If a record with the specified object ID exists, the existing record is replaced.
  - **Delete a record** - Deletes a record by its object ID.
  - **Delete records matching a filter** - This operation doesn't accept empty filters.
  - **Delete all records from an index** - Deletes only the records from an index while keeping settings, synonyms, and rules.
  - **Add or update attributes** - Adds new attributes to a record, or updates existing ones.
  - **Batch indexing operations on one index** - Adds, updates, or deletes records in one index with a single API request.
  - **Batch indexing operations on multiple indices** - Adds, updates, or deletes records in multiple indices with a single API request.
  - **Retrieve records** - Retrieves one or more records, potentially from different indices.

  ### Rules

  - **Retrieve a rule** - Retrieves a rule by its ID.
  - **Create or replace a rule** - If a rule with the specified object ID doesn't exist, it's created.
  - **Delete a rule** - Deletes a rule by its ID.
  - **Create or update rules** - Create or update multiple rules.
  - **Delete all rules** - Deletes all rules from the index.
  - **Search for rules** - Searches for rules in your index.

  ### Search

  - **Search an index** - Searches a single index and returns matching search results as hits.
  - **Search multiple indices** - Sends multiple search requests to one or more indices.
  - **Search for facet values** - Searches for values of a specified facet attribute.
  - **Browse for records** - Retrieves records from an index, up to 1,000 per request.

  ### Synonyms

  - **Retrieve a synonym** - Retrieves a synonym by its ID.
  - **Create or replace a synonym** - If a synonym with the specified object ID doesn't exist, Algolia adds a new one.
  - **Delete a synonym** - Deletes a synonym by its ID.
  - **Create or replace synonyms** - If a synonym with the `objectID` doesn't exist, Algolia adds a new one.
  - **Delete all synonyms** - Deletes all synonyms from the index.
  - **Search for synonyms** - Searches for synonyms in your index.

  ### Vaults

  - **List allowed sources** - Retrieves all allowed IP addresses with access to your application.
  - **Replace allowed sources** - Replaces the list of allowed sources.
  - **Add a source** - Adds a source to the list of allowed sources.
  - **Delete a source** - Deletes a source from the list of allowed sources.
  <!-- OPERATIONS END -->

  ## Usage examples

  ### Batch insert into an Algolia Index

  This section demonstrates how to efficiently perform batch inserts into an Algolia index using n8n.

  Batch operations are ideal for processing large datasets, as they reduce latency and improve data consistency.

  <div align="center">

  ![Batch workflow](assets/workflow-1.png)
  <i>Example of a Batch indexing operation workflow</i>

  </div>

  **Step-by-step guide:**

  1. Add a **webhook node** or a third-party webhook trigger node to initiate your workflow.

  2. Utilize a **Code node** (JavaScript or Python) to format your data for the Algolia batch insert operation.
     - If your items already have unique identifiers, assign them to the `objectID` property.
     - If not, Algolia will automatically generate a unique `objectID` when using the `addObject` or `partialUpdateObject` actions.
     - To remove a record, use the `deleteObject` action.
     - For a complete overview of available actions, refer to the [official documentation](https://www.algolia.com/doc/rest-api/search/batch#body-requests).

  ![Batch workflow](assets/workflow-1-1.png)

  3. Add the Algolia node for **Batch indexing operations on one index** and connect it to your data list. As a best practice, ensure that only one item at a time enters this node.

  ![Batch workflow](assets/workflow-1-2.png)

  4. Activate the workflow to begin automated batch indexing.

  Now, when items are added/deleted from your 3pr-party software, this workflow will make sure your index stays fresh and up to date!

  _API Rate limitations apply. See https://www.algolia.com/doc/guides/scaling/algolia-service-limits for more details._

  ### Scheduled Cleanup of Deprecated Synonyms

  Over time, synonyms in your Algolia index might become outdated or no longer needed. With n8n, you can automate the removal of deprecated or unused synonyms to keep your index clean and relevant.

  <div align="center">

  ![Synonym workflow](assets/workflow-2.png)
  <i>Example of a Batch indexing operation workflow</i>

  </div>

  **Step-by-step guide:**

  1. Use the **Schedule trigger** node to schedule the cleanup to run regularly (daily, weekly, etc.).
  2. Add the Algolia node to **"Search for synonyms"** in your target index.
  3. Use a code node to filter synonyms that match your criteria for deprecation or removal (for example, a custom `deprecated` tag or certain naming patterns).
  4. For each deprecated synonym, add an Algolia node to **"Delete a synonym"** by its ID.

  This workflow helps ensure your Algolia synonyms stay accurate and up to date.

  _API Rate limitations apply. See https://www.algolia.com/doc/guides/scaling/algolia-service-limits for more details._

  ## Compatibility

  This node requires n8n version 1.0.0 or higher and Node.js 20.15 or higher.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Algolia API documentation](https://www.algolia.com/doc/rest-api/search)
  - [Algolia dashboard](https://www.algolia.com/apps)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Algolia, a hosted search API, to perform full-text search, faceting, geo-search, and instant search with typo tolerance within n8n workflows.","capabilities":["Full-text search with typo tolerance","Faceting and geo-search","Instant search","Create, update, delete, and list API keys","Manage index settings and operations","Add, retrieve, update, and delete records","Batch indexing operations across one or multiple indices","Retrieve and manage synonyms and rules","Multi-cluster user management","Dictionary management (plurals, segmentation, stop words)"],"authentication":"API key required (Application ID and Admin API Key)","commonUseCases":["Implementing search functionality in web applications","Automating content indexing and search","Managing Algolia API keys and permissions","Handling multi-cluster user data","Performing batch record operations"],"limitations":["Community node (not official n8n node)","Requires Algolia account setup","Some operations require specific API key ACL permissions (e.g., logs)"],"relatedNodes":["Algolia Search","Algolia Index","Algolia Record","Algolia API Key","Algolia Cluster"]}


node_type: n8n-nodes-pubnub.pubNub
package_name: n8n-nodes-pubnub
display_name: PubNub
description: Interact with PubNub real-time messaging platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: pubnub-admin
author_github_url: https://github.com/pubnub/
npm_package_name: n8n-nodes-pubnub
npm_version: 0.1.16
community_fetched_at: 2026-04-16T09:43:36.468Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "History",
          "value": "history"
        },
        {
          "name": "Presence",
          "value": "presence"
        },
        {
          "name": "Channel Group",
          "value": "channelGroup"
        }
      ],
      "description": "The resource to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a message",
          "description": "Publish a message to a channel"
        },
        {
          "name": "Signal",
          "value": "signal",
          "action": "Send a signal",
          "description": "Send a signal (lightweight message, max 30 characters)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "fetchMessages",
      "options": [
        {
          "name": "Fetch Messages",
          "value": "fetchMessages",
          "action": "Fetch message history",
          "description": "Fetch message history from a channel"
        },
        {
          "name": "Delete Messages",
          "value": "deleteMessages",
          "action": "Delete messages",
          "description": "Delete messages from a channel"
        },
        {
          "name": "Message Counts",
          "value": "messageCounts",
          "action": "Get message counts",
          "description": "Get message counts for channels"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "history"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "hereNow",
      "options": [
        {
          "name": "Here Now",
          "value": "hereNow",
          "action": "Get current occupancy",
          "description": "Get current occupancy information for channels"
        },
        {
          "name": "Where Now",
          "value": "whereNow",
          "action": "Get user presence",
          "description": "Get channels where a user is present"
        },
        {
          "name": "Set State",
          "value": "setState",
          "action": "Set user state",
          "description": "Set state data for a user on channels"
        },
        {
          "name": "Get State",
          "value": "getState",
          "action": "Get user state",
          "description": "Get state data for a user on channels"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "presence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listChannels",
      "options": [
        {
          "name": "Add Channels",
          "value": "addChannels",
          "action": "Add channels to group",
          "description": "Add channels to a channel group"
        },
        {
          "name": "Remove Channels",
          "value": "removeChannels",
          "action": "Remove channels from group",
          "description": "Remove channels from a channel group"
        },
        {
          "name": "List Channels",
          "value": "listChannels",
          "action": "List channels in group",
          "description": "List all channels in a channel group"
        },
        {
          "name": "Delete Group",
          "value": "deleteGroup",
          "action": "Delete channel group",
          "description": "Delete a channel group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channelGroup"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a message",
      "description": "Publish a message to a channel",
      "resource": "message"
    },
    {
      "name": "Signal",
      "value": "signal",
      "action": "Send a signal",
      "description": "Send a signal (lightweight message, max 30 characters)",
      "resource": "message"
    },
    {
      "name": "Fetch Messages",
      "value": "fetchMessages",
      "action": "Fetch message history",
      "description": "Fetch message history from a channel",
      "resource": "history"
    },
    {
      "name": "Delete Messages",
      "value": "deleteMessages",
      "action": "Delete messages",
      "description": "Delete messages from a channel",
      "resource": "history"
    },
    {
      "name": "Message Counts",
      "value": "messageCounts",
      "action": "Get message counts",
      "description": "Get message counts for channels",
      "resource": "history"
    },
    {
      "name": "Here Now",
      "value": "hereNow",
      "action": "Get current occupancy",
      "description": "Get current occupancy information for channels",
      "resource": "presence"
    },
    {
      "name": "Where Now",
      "value": "whereNow",
      "action": "Get user presence",
      "description": "Get channels where a user is present",
      "resource": "presence"
    },
    {
      "name": "Set State",
      "value": "setState",
      "action": "Set user state",
      "description": "Set state data for a user on channels",
      "resource": "presence"
    },
    {
      "name": "Get State",
      "value": "getState",
      "action": "Get user state",
      "description": "Get state data for a user on channels",
      "resource": "presence"
    },
    {
      "name": "Add Channels",
      "value": "addChannels",
      "action": "Add channels to group",
      "description": "Add channels to a channel group",
      "resource": "channelGroup"
    },
    {
      "name": "Remove Channels",
      "value": "removeChannels",
      "action": "Remove channels from group",
      "description": "Remove channels from a channel group",
      "resource": "channelGroup"
    },
    {
      "name": "List Channels",
      "value": "listChannels",
      "action": "List channels in group",
      "description": "List all channels in a channel group",
      "resource": "channelGroup"
    },
    {
      "name": "Delete Group",
      "value": "deleteGroup",
      "action": "Delete channel group",
      "description": "Delete a channel group",
      "resource": "channelGroup"
    }
  ]

npm_readme:
  # n8n-nodes-pubnub

  This is an n8n community node that provides integration with PubNub real-time messaging platform.

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

  [PubNub](https://www.pubnub.com/) is a real-time communication platform for building live chat, multiplayer games, IoT device control, and other real-time features.

  ## Installation

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

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-pubnub` in **Enter npm package name**
  4. Click **Install**

  ### Manual Installation

  To use this package in your n8n instance, you can install it via npm:

  ```bash
  npm install n8n-nodes-pubnub
  ```

  ## Credentials

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

  1. **Publish Key**: Your PubNub Publish Key (required for publishing messages)
  2. **Subscribe Key**: Your PubNub Subscribe Key (required for subscribing to channels)
  3. **Secret Key**: Optional secret key for encryption and access manager
  4. **User ID**: Optional unique identifier for this client (auto-generated if not provided)

  You can find your keys in the [PubNub Admin Portal](https://admin.pubnub.com/).

  ## Nodes

  This package provides two nodes:

  ### 1. PubNub Node

  The main node for interacting with PubNub. Supports the following operations:

  #### Message Operations
  - **Publish**: Send a message to a channel
    - Supports metadata, TTL, and history storage options
  - **Signal**: Send a lightweight signal (max 30 characters)

  #### History Operations
  - **Fetch Messages**: Retrieve message history from a channel
    - Supports pagination, metadata, and message actions
  - **Delete Messages**: Delete messages from a channel
  - **Message Counts**: Get message counts for channels

  #### Presence Operations
  - **Here Now**: Get current occupancy and user list for channels
  - **Where Now**: Get channels where a specific user is present
  - **Set State**: Set state data for a user on channels
  - **Get State**: Get state data for a user on channels

  #### Channel Group Operations
  - **Add Channels**: Add channels to a channel group
  - **Remove Channels**: Remove channels from a channel group
  - **List Channels**: List all channels in a channel group
  - **Delete Group**: Delete a channel group

  ### 2. PubNub Trigger Node

  A trigger node that starts your workflow when PubNub events occur:

  - **Trigger On**: Choose to trigger on messages, presence events, or both
  - **Channels**: Subscribe to specific channels (comma-separated)
  - **Channel Groups**: Subscribe to channel groups (comma-separated)

  #### Options:
  - **Filter Expression**: Apply message filtering
  - **With Presence**: Receive presence events
  - **Time Token**: Start receiving messages from a specific timetoken
  - **Include Message Actions**: Include message actions in events
  - **Include Metadata**: Include message metadata

  ## Usage Examples

  ### Example 1: Publish a Message

  1. Add a **PubNub** node to your workflow
  2. Select **Message** resource and **Publish** operation
  3. Enter your channel name (e.g., `my-channel`)
  4. Enter your message as JSON: `{"text": "Hello World!", "timestamp": "{{$now}}"}`
  5. Configure credentials and execute

  ### Example 2: Subscribe to Real-time Messages

  1. Add a **PubNub Trigger** node to start your workflow
  2. Set **Trigger On** to **Message**
  3. Enter channel name(s) (e.g., `chat-room,notifications`)
  4. Configure credentials
  5. Activate the workflow - it will now trigger whenever messages arrive

  ### Example 3: Check Channel Presence

  1. Add a **PubNub** node
  2. Select **Presence** resource and **Here Now** operation
  3. Enter channel name(s)
  4. Enable options: **Include UUIDs** and **Include State**
  5. Execute to see who's currently online

  ### Example 4: Fetch Message History

  1. Add a **PubNub** node
  2. Select **History** resource and **Fetch Messages** operation
  3. Enter channel name
  4. Set count to desired number of messages (e.g., 50)
  5. Enable **Include Metadata** if needed
  6. Execute to retrieve historical messages

  ## Development

  To develop or modify this package:

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

  # Install dependencies
  npm install

  # Build the package
  npm run build

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

  ## Resources

  - [PubNub Documentation](https://www.pubnub.com/docs/)
  - [PubNub JavaScript SDK](https://www.pubnub.com/docs/sdks/javascript)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n Creating Nodes](https://docs.n8n.io/integrations/creating-nodes/)

  ## Version History

  ### 0.1.0
  - Initial release
  - PubNub node with message, history, presence, and channel group operations
  - PubNub Trigger node for real-time subscriptions
  - Full credential support with auto-generated User ID fallback

  ## License

  [MIT](LICENSE.md)

  ## Support

  If you encounter issues or have questions:

  1. Check the [PubNub Documentation](https://www.pubnub.com/docs/)
  2. Visit the [n8n Community Forum](https://community.n8n.io/)
  3. Open an issue on [GitHub](https://github.com/pubnub/n8n-nodes-pubnub/issues)

  ## Contributing

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

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

ai_documentation_summary:
  {"purpose":"A community n8n node that enables real-time messaging and event handling via the PubNub platform, supporting message publishing, history retrieval, presence tracking, and channel management.","capabilities":["Publish messages to channels with metadata, TTL, and history options","Send lightweight signals (max 30 characters)","Fetch message history with pagination and metadata","Delete messages from channels","Get message counts for channels","Retrieve current channel occupancy and user presence","Track user presence across channels","Set and retrieve user state data on channels","Manage channel groups (add, remove, list, delete)","Trigger workflows on incoming messages or presence events"],"authentication":"API key required (Publish Key and Subscribe Key)","commonUseCases":["Real-time chat applications","Live multiplayer game updates","IoT device control notifications","Event-driven workflow automation","User presence monitoring"],"limitations":["Signal messages are limited to 30 characters","User ID is optional and auto-generated if not provided","Secret key is optional and not required for basic operations"],"relatedNodes":["n8n Trigger Node","n8n Webhook Node","n8n HTTP Request Node"]}


node_type: @poof-bg/n8n-nodes-poof.poof
package_name: @poof-bg/n8n-nodes-poof
display_name: Poof
description: Remove backgrounds from images with Poof API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: rafalzawadzki
author_github_url: https://github.com/poof-bg/n8n-nodes-poof.git
npm_package_name: @poof-bg/n8n-nodes-poof
npm_version: 1.0.7
community_fetched_at: 2026-04-16T09:43:36.469Z
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "removeBackground",
      "options": [
        {
          "name": "Get Account",
          "value": "getAccount",
          "action": "Get account information",
          "description": "Get account information and credit usage"
        },
        {
          "name": "Remove Background",
          "value": "removeBackground",
          "action": "Remove background from an image",
          "description": "Remove background from an image"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Account",
      "value": "getAccount",
      "action": "Get account information",
      "description": "Get account information and credit usage"
    },
    {
      "name": "Remove Background",
      "value": "removeBackground",
      "action": "Remove background from an image",
      "description": "Remove background from an image"
    }
  ]

npm_readme:
  # @poof-bg/n8n-nodes-poof

  This is an n8n community node for the [Poof](https://poof.bg) background removal API.

  Poof is the developer-first standard for background removal — precise, fast, and scalable.

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

  ## Installation

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

  ### npm

  ```bash
  npm install @poof-bg/n8n-nodes-poof
  ```

  ### n8n Desktop/Cloud

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `@poof-bg/n8n-nodes-poof` and click **Install**

  ## Operations

  ### Remove Background

  Remove the background from an image.

  **Parameters:**

  | Parameter | Description |
  |-----------|-------------|
  | Input Binary Field | Name of the binary property containing the image |
  | Output Binary Field | Name of the binary property for the result |

  **Options:**

  | Option | Description | Default |
  |--------|-------------|---------|
  | Format | Output format: PNG, JPG, or WebP | PNG |
  | Channels | RGBA (transparent) or RGB (opaque) | RGBA |
  | Background Color | Color for RGB output (hex, rgb, or name) | - |
  | Size | Output size: full, preview, small, medium, large | full |
  | Crop to Subject | Crop image to subject bounds | false |

  ### Get Account

  Retrieve account information including plan details and credit usage.

  **Returns:**

  - `organizationId` - Your organization ID
  - `plan` - Current plan name
  - `maxCredits` - Total credits in billing cycle
  - `usedCredits` - Credits used this cycle
  - `autoRechargeThreshold` - Auto-recharge threshold (if enabled)

  ## Credentials

  You need a Poof API key to use this node.

  1. Sign up at [dash.poof.bg](https://dash.poof.bg)
  2. Create an API key in your dashboard
  3. In n8n, create new credentials of type **Poof API**
  4. Paste your API key

  ## Example Workflow

  ```
  [Read Binary File] → [Poof: Remove Background] → [Write Binary File]
  ```

  1. **Read Binary File**: Load an image
  2. **Poof**: Remove the background
  3. **Write Binary File**: Save the result

  ## Resources

  - [Poof Documentation](https://docs.poof.bg)
  - [Poof Dashboard](https://dash.poof.bg)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)


node_type: n8n-nodes-onepage.onepageTrigger
package_name: n8n-nodes-onepage
display_name: OnePage Trigger
description: Trigger workflows on new OnePage form leads
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: rjsebening
author_github_url: https://github.com/rjsebening/
npm_package_name: n8n-nodes-onepage
npm_version: 0.1.8
community_fetched_at: 2026-04-16T09:43:36.470Z
npm_readme:
  # n8n-nodes-onepage

  ![OnePage Node](https://img.shields.io/badge/n8n-community--node-FF6D5A)

  ![Version](https://img.shields.io/badge/version-1.0.0-blue)

  ![License](https://img.shields.io/badge/license-MIT-green)

  A streamlined n8n Community Node for **real-time integration of OnePage Leads** via a trigger.

  Ideal for anyone who wants to **immediately automate the processing of new leads** – without polling, without detours.

  ---

  ## What is n8n?

  n8n is a workflow automation tool that lets you automate processes between different web applications – such as **OnePage**, CRM systems, Slack, email, or databases.

  Instead of manual work, processes run automatically in the background as soon as an event occurs.

  ---

  ## ⚖️ Legal Notice

  This community node uses the public OnePage API and is **not officially affiliated with OnePage**.

  All trademarks and product names are the property of their respective owners.

  **Note:** This is a community-developed integration. For official support, please contact OnePage directly.

  ---

  ## 🚀 Overview

  The **OnePage n8n Node** provides a **trigger** that is activated as soon as **a new lead is received in OnePage**.

  The trigger is perfect for:

  * Lead forwarding
  * CRM synchronization
  * Notifications
  * Automated follow-ups
  * Internal processes & scoring

  No manual retrieval.

  No time delay.


  * No manual retrieval. **100% Event-Based.**

  ---

  ## ✨ Main Function

  ### ⚡ **OnePage Trigger – New Lead**

  This node provides **exactly one trigger**:

  * **New Lead**

  * Triggered as soon as a new lead is created in OnePage

  * Use via webhooks (real-time)

  * Automatic registration & removal of the webhook in OnePage

  ---

  ## 🔔 Trigger Details

  ### **OnePage Trigger: New Lead**

  | Property | Description |

  | ----------------- | --------------------- |

  | Trigger Type | Webhook |

  | Trigger | New Lead in OnePage |

  | Execution | Real-time |

  | Webhook Handling | Automatic |

  | Multiple Workflows | Supported |

  The trigger sends all lead data provided by the OnePage webhook directly to the workflow.


  ---

  ## 📦 Installation

  ### Requirements

  * n8n version **1.0.0 or higher**
  * Active OnePage account

  ---

  ### Installation via Community Nodes

  1. Open your **n8n instance**

  2. Go to **Settings → Community Nodes**

  3. Click **Install**

  4. Install one of the following packages:

  #### Option 1 – Scoped (recommended)

  ```bash
  @rjsebening/n8n-nodes-onepage
  ```

  #### Option 2 – Unscoped

  ```bash
  n8n-nodes-onepage
  ```

  5. Restart n8n → Node is available

  ---

  ## 🔐 Configuration

  ### Creating OnePage API Credentials

  1. In n8n, go to **Credentials → New Credential**

  2. Select **OnePage API**

  3. Enter your login details:

  * **Email**: OnePage Login Email

  * **Password**: OnePage Login Password

  * **Base URL**:

  ```

  https://api-eu.onepage.io/api/v1

  ```

  4. Save

  The connection will be tested automatically upon saving.

  ---

  ## 🧩 Workflow Usage

  1. Create a new workflow

  2. Add the **OnePage Trigger**

  3. Select the **New Lead** trigger type

  4. Activate the workflow

  👉 From now on, the workflow will be executed **automatically for every new lead**.


  ---

  ## 📖 Typical Use Cases

  * Automatically transfer new OnePage leads to the CRM
  * Instant notification via Slack, email, or Microsoft Teams
  * Lead scoring and qualification immediately upon receipt
  * Initiate automated follow-up workflows
  * Handoff to sales or onboarding processes

  ---

  ## 🌍 Why this is important

  Many teams don't lose leads during marketing –

  but **after they've been received**.


  This node ensures that:

  * **No leads are left behind**
  * **Response times drop to seconds**
  * **Manual work is eliminated**
  * **Processes become scalable**

  In short: **Leads come in – everything else runs automatically.**

  ---

  ## 📬 About the author

  I am [Rezk Jörg Sebening](https://github.com/rjsebening) –
  a business automation expert for n8n, APIs, and scalable processes in the DACH region.

  I develop n8n nodes and systems that consistently eliminate manual work.

  👉 Follow me on GitHub for more practical community nodes and integrations.

  ## 📋 Disclaimer

  This unofficial community Node is **not affiliated with, supported, or sponsored by OnePage**.  
  It only provides an interface to the publicly available OnePage API under its terms of use.

  **Important Notes:**

  - This Node is developed and maintained by the community
  - For issues with the OnePage API itself, please contact official OnePage support
  - All OnePage trademarks and logos belong to OnePage
  - This Node only acts as a connector to the public API


node_type: @2chat/n8n-nodes-twochat.twoChatTrigger
package_name: @2chat/n8n-nodes-twochat
display_name: 2Chat Trigger
description: Triggers on 2Chat events (messages, phone calls, status updates, etc.)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: 2chat_integrations
author_github_url: https://github.com/2ChatCo/2chat-n8n.git
npm_package_name: @2chat/n8n-nodes-twochat
npm_version: 0.4.1
community_fetched_at: 2026-04-16T09:43:36.470Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-twochat

  This is an n8n community node. It lets you use 2Chat WhatsApp API in your n8n workflows.

  2Chat is a conversational commerce automation platform that makes WhatsApp Messenger and WhatsApp Business programmable through a unified API.

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

  ## Installation

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

  ```
  npm install n8n-nodes-twochat
  ```

  ## Operations

  ### Message Resource
  - **Send Message**: Send WhatsApp messages to individual contacts
    - Support for text messages
    - Support for media attachments (images, documents, etc.)
    - Support for location pins

  - **Send Message to group**: Send WhatsApp messages to groups
  	- Support for text messages
    - Support for media attachments (images, documents, etc.)
    - Support for location pins

  ### Phone Number Resource
  - **Check Number**: Verify if a phone number is registered on WhatsApp
    - Get detailed information about the number (region, carrier, timezone)
    - Check if the number is a business account
    - Get business profile information when available

  ### WABA Resource
  - **Send Message**: Send WABA messages to individual contacts
  	- Support for text messages

  - **Send Template Message**: Send WABA template messages to individual contacts
    - Support for template messages

  ## Triggers

  - **WhatsApp Message Events:** Listen for message events
    - New Message: Triggers when a new message is either sent or received on 2Chat. Works for messages sent by agents or your users/customers.
    - Message Received: Triggers when a WhatsApp message is received on your 2Chat connected number.
    - Message Sent: Triggers when a WhatsApp message is sent from your 2Chat connected number.
    - New Conversation: Triggers when a new WhatsApp conversation is started within the specified time period.
    - Message Edited: Triggers when a message is edited. It will also trigger for group messages being edited.
    - Reaction Received: Triggers when a WhatsApp message is reacted to.

  - **WhatsApp Business API Events**: Listen for WhatsApp Business API events
  	- WABA Message Received: Triggers when a new WABA message is received
  	- WABA Message Sent: Triggers when a new WABA message is sent

  - **WhatsApp Calls**: Listen for WhatsApp calls events
  	- Call Made: Triggers when a new WhatsApp call is made
  	- Call Received: Triggers when a new WhatsApp call is received or missed on your connected number

  - **WhatsApp group**: Listen for WhatsApp group events
    - Message Received: Triggers when a new WhatsApp Group Message is received on the configured group
    - Participant Join: Triggers when someone joins a group
    - Participant Left: Triggers when someone leaves a group
    - Participant Removed: Triggers when someone is kicked/removed from a group
    - Message Reaction Received: Triggers when a group participant reacts to a message

  - **Phone Calls**: Listen for phone calls events
  	- Incoming completed: Triggers when an incoming phone call is completed (answered or missed)
  	- Oubound Completed: Triggers when an outbound phone call is completed (answered or failed)
  	- Status Update: Triggers when a phone call status changes (e.g., ringing, answered, ended)

  ## Credentials

  You need to create a 2Chat account and get an API key to use this node.

  1. Create a 2Chat account at [2Chat.co](https://2chat.co)
  2. Connect a WhatsApp channel in the channels section
  3. Get an API key from the developers section
  4. Use this API key in the n8n credentials for the 2Chat node

  ## Compatibility

  - Requires n8n version 1.0.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [2Chat API Documentation](https://developers.2chat.co/docs/intro)

ai_documentation_summary:
  {"purpose":"The 2Chat Trigger node monitors and responds to real-time events from 2Chat's WhatsApp API, including messages, calls, and group activities, enabling automated workflows within n8n.","capabilities":["Trigger on new WhatsApp messages (sent or received)","Trigger on message edits and reactions","Trigger on new conversations","Trigger on WhatsApp Business API events (WABA messages)","Trigger on WhatsApp calls (incoming/outbound)","Trigger on phone call status updates","Trigger on WhatsApp group events (messages, participants joining/leaving)","Send text and media messages to individuals and groups","Send WABA template messages"],"authentication":"API key required (obtained from 2Chat account developers section)","commonUseCases":["Automated customer support responses via WhatsApp","Monitoring incoming messages for order confirmations","Notifying team members of new conversations","Automated follow-ups after missed calls","Managing group chat interactions and member changes"],"limitations":["Requires a paid 2Chat account and API key","Requires n8n version 1.0.0 or later","Limited to events supported by the 2Chat platform"],"relatedNodes":["2Chat Send Message","2Chat Check Number","2Chat Send Template Message","2Chat WABA Send Message"]}


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-04-16 09:43:36
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-04-16T09:43:36.471Z
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: @a700/n8n-nodes-agent700.agent700Agent
package_name: @a700/n8n-nodes-agent700
display_name: Agent700 Agent
description: Send context to any trusted agent within Agent700 via our API
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: a700
author_github_url: https://github.com/Agent700-ai/Agent700-n8n.git
npm_package_name: @a700/n8n-nodes-agent700
npm_version: 1.2.2
community_fetched_at: 2026-04-16T09:43:36.472Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message to agent",
          "description": "Send a message to an agent. Uses POST /api/chat with messages[]. Optionally include an Agent ID."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send message to agent",
      "description": "Send a message to an agent. Uses POST /api/chat with messages[]. Optionally include an Agent ID.",
      "resource": "chat"
    }
  ]

npm_readme:
  # Agent700 n8n Custom Nodes

  Production-ready custom n8n nodes for integrating with the Agent700 API. These nodes provide seamless authentication, chat interactions, context management, and more.

  ## Table of Contents

  - [Installation](#installation)
  - [Authentication](#authentication)
  - [Node Documentation](#node-documentation)
  - [Workflow Examples](#workflow-examples)
  - [Best Practices](#best-practices)
  - [Troubleshooting](#troubleshooting)

  ## Installation

  ### Install from npm (recommended for production)

  Install the package in your n8n instance (or in your n8n project if using embedded nodes):

  ```bash
  npm install @a700/n8n-nodes-agent700
  ```

  - **Package:** [@a700/n8n-nodes-agent700](https://www.npmjs.com/package/@a700/n8n-nodes-agent700)
  - Restart n8n after installing. The nodes appear as **Agent700 Agent** and **Agent700 Context Library**.

  ### Prerequisites

  - n8n installed and running
  - Node.js 18+ and npm
  - Agent700 account credentials

  ### Build from source (optional)

  To build and run from the repository:

  ```bash
  git clone https://github.com/Agent700-ai/Agent700-n8n.git
  cd Agent700-n8n
  npm install
  npm run build
  ```

  This compiles TypeScript to JavaScript in the `dist/` folder.

  ### Manual installation (Docker / custom path)

  Choose the installation method that matches your n8n setup:

  #### Option 1: Docker Setup (Recommended for Testing)

  If you're using Docker Compose, you have two options:

  **Option A: Volume Mount (Recommended)**

  1. Update your `docker-compose.yml` to mount the built package:
     ```yaml
     volumes:
       - ./n8n-data:/home/node/.n8n/data
       - ./Agent700-n8n:/home/node/.n8n/custom/Agent700-n8n
     ```

  2. Restart your containers:
     ```bash
     docker-compose down
     docker-compose up -d
     ```

  3. Install dependencies inside the container:
     ```bash
     docker exec <CONTAINER_NAME> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"
     ```

  **Option B: Copy into Container**

  1. Find your n8n container:
     ```bash
     docker ps | grep n8n
     ```

  2. Copy the built package into the container:
     ```bash
     docker cp Agent700-n8n <CONTAINER_NAME>:/home/node/.n8n/custom/
     ```

  3. Install dependencies inside container:
     ```bash
     docker exec <CONTAINER_NAME> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"
     ```

  4. Restart container:
     ```bash
     docker restart <CONTAINER_NAME>
     ```

  #### Option 2: Local n8n Installation (Non-Docker)

  If you have n8n installed locally (not in Docker):

  1. Copy to n8n custom directory:
     ```bash
     # Find your n8n custom directory (usually ~/.n8n/custom)
     cp -r Agent700-n8n ~/.n8n/custom/
     
     # Install production dependencies
     cd ~/.n8n/custom/Agent700-n8n
     npm install --production
     ```

  2. Set environment variable (if needed):
     ```bash
     export N8N_CUSTOM_EXTENSIONS=~/.n8n/custom
     ```

  3. Restart n8n:
     ```bash
     # If running as service
     systemctl restart n8n
     
     # Or if running manually
     n8n start
     ```

  #### Option 3: Using npm link (For Development)

  For active development with hot reloading:

  1. Build and link your package:
     ```bash
     cd Agent700-n8n
     npm install
     npm run build
     npm link
     ```

  2. Link in n8n directory:
     ```bash
     # If n8n is installed globally
     cd $(npm root -g)/n8n
     npm link @a700/n8n-nodes-agent700
     
     # Or if n8n is in a specific directory
     cd /path/to/n8n
     npm link @a700/n8n-nodes-agent700
     ```

  3. Restart n8n

  **Note:** After making code changes, rebuild (`npm run build`) and restart n8n for changes to take effect.

  ### Verify Installation

  After installation, verify everything works:

  1. **Check nodes appear in n8n UI:**
     - Open n8n interface (typically `http://localhost:5678`)
     - Create a new workflow
     - Search for "Agent700" - you should see all nodes available:
       - Agent700 Agent
       - Agent700 Context Library

  3. **Check n8n logs for errors:**
     ```bash
     # Docker
     docker logs <CONTAINER_NAME>
     
     # Local
     n8n start --log-level=debug
     ```

  ### Troubleshooting Installation

  **Nodes don't appear:**
  - Verify `dist/` folder exists and contains `.node.js` files
  - Check `package.json` has correct `n8n.nodes` array
  - Ensure file permissions are correct (Docker: check container user permissions)
  - Restart n8n after installation
  - Check n8n logs for specific error messages

  **Dependencies missing:**
  - Run `npm install --production` in the custom nodes directory
  - For Docker: `docker exec <CONTAINER> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"`

  **Build errors:**
  - Ensure TypeScript is installed: `npm install`
  - Check for TypeScript errors: `npm run build`
  - Verify Node.js version is 18+

  ## Authentication

  ### How Authentication Works

  All Agent700 nodes authenticate using an **App Password** configured directly in the node parameters. Nodes automatically handle authentication on each request - no manual token copying needed!

  ### Setting Up Authentication

  1. **Get your App Password** from the Agent700 web interface
     - Format: `app_a7_` followed by 32 characters
     - Example: `app_a7_12345678901234567890123456789012`

  2. **Configure in Node Parameters:**
     - **Base URL**: `https://api.agent700.ai` (default)
     - **App Password**: Your app password token (required)
     - Nodes automatically use this to obtain access tokens

  ### Authentication Flow

  1. Node sends App Password to `/api/auth/app-login`
  2. API returns an access token
  3. Node uses Bearer token for all subsequent API calls
  4. Token is obtained fresh for each execution

  ## Node Documentation

  ### 1. Agent700 Agent

  **Purpose**: Send messages to agents and get structured responses

  **Key Features:**
  - Auto-authenticates using App Password
  - Agent ID via manual entry
  - Simplify output option for cleaner responses
  - Full n8n UX guidelines compliance

  **Parameters:**
  - **Base URL**: `https://api.agent700.ai` (default)
  - **App Password** (required): Your Agent700 app password token
  - **Resource**: Chat (single resource)
  - **Operation**: Send Message
  - **Agent ID** (optional): Enter the Agent UUID manually
  - **Message** (required): Your message to send
  - **Simplify** (default: true): Return simplified output with key fields only

  **Output (Simplified):**
  ```json
  {
    "response": "Agent response",
    "finish_reason": "stop",
    "scrubbed_message": "...",
    "error": null,
    "prompt_tokens": 100,
    "completion_tokens": 50
  }
  ```

  **Output (Full):**
  Returns complete API response with all fields.

  **Example:**
  ```
  1. Add "Agent700 Agent" node
  2. Enter App Password
  3. Enter Agent ID (UUID from Agent700 web interface)
  4. Enter message: "What is AI?"
  5. Enable Simplify for cleaner output (optional)
  6. Execute
  ```

  ### 2. Agent700 Context Library

  **Purpose**: Manage alignment data (key-value storage) with encryption at rest

  **Key Features:**
  - Full CRUD operations following n8n vocabulary
  - Pattern matching and query operations
  - JSON construction from patterns
  - Auto-authenticates using App Password

  **Resource**: Entry

  **Operations:**
  - **Get**: Retrieve a single entry by key
  - **Get Many**: List all entries
  - **Create**: Create a new entry
  - **Update**: Update an existing entry (with optional key renaming)
  - **Upsert**: Create or update an entry (upsert)
  - **Delete**: Delete an entry (returns `{ deleted: true, key }`)
  - **Query**: List key/value pairs matching a pattern
  - **Query + Construct**: Construct JSON from pattern matches using a template

  **Example (Upsert):**
  ```
  1. Add "Agent700 Context Library" node
  2. Enter App Password
  3. Resource: Entry
  4. Operation: "Upsert"
  5. Key: "user_preference"
  6. Value: {"theme": "dark_mode"}
  7. Execute
  ```

  **Example (Delete):**
  ```
  1. Operation: "Delete"
  2. Key: "old_key"
  3. Returns: { "deleted": true, "key": "old_key" }
  ```


  ## Workflow Examples

  ### Example 1: Simple Chat Workflow

  **Use Case**: One-off questions, simple Q&A

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → Send message
     - Enter App Password
     - Select Agent ID
     - Message: "What is machine learning?"
  3. **Display Response** → Show result

  **Node Flow:**
  ```
  Manual Trigger → Agent700 Agent → Display Response
  ```

  **When to Use:**
  - Quick questions
  - Single message interactions
  - No conversation history needed

  ---

  ### Example 2: Chat with Conversation Context

  **Use Case**: Multi-turn conversations, follow-up questions

  **Note**: Conversation context feature is not available in v2. For multi-turn conversations, manually include previous messages in your prompt or use the Context Library to store conversation history.

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → First message
     - Enter App Password
     - Select Agent ID
     - Message: "Explain quantum computing"
  3. **Agent700 Agent** → Follow-up
     - Include previous context in message
     - Message: "Based on your previous explanation, how does it differ from classical computing?"
  4. **Display Response** → Show result

  **Node Flow:**
  ```
  Manual Trigger → Agent700 Agent → Agent700 Agent (with context) → Display
  ```

  ---

  ### Example 3: URL Evaluation Workflow

  **Use Case**: Content analysis, privacy policy scanning, URL validation

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Get URLs** → Retrieve URLs (from Context Library or input)
  3. **Split in Batches** → Process one at a time
  4. **Agent700 Agent** → Evaluate each URL
     - Message: "Analyze this URL for privacy concerns: {{$json.url}}"
  5. **Save Results** → Store in Context Library
  6. **Aggregate** → Combine all evaluations

  **Node Flow:**
  ```
  Trigger → Get URLs → Split → Chat → Save → Aggregate
  ```

  **Advanced Version:**
  ```
  Trigger → Context Library (List) → Loop → Chat → Context Library (Upsert) → Summary
  ```

  ---

  ### Example 4: Context Library Management Workflow

  **Use Case**: Dynamic context injection, data-driven conversations

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Context Library** → List all data
     - Operation: "List All Data"
  3. **Process Data** → Filter/transform as needed
  4. **Agent700 Context Library** → Upsert new data
     - Operation: "Upsert Data"
     - Key: "user_context"
     - Value: "{{$json.processed_data}}"
  5. **Agent700 Agent** → Use context in conversation
     - Message: "Based on this context: {{$json.user_context}}, answer my question"

  **Node Flow:**
  ```
  Trigger → Context Library (List) → Process → Context Library (Upsert) → Chat
  ```

  ---

  ### Example 8: Error Handling Workflow

  **Use Case**: Production workflows, reliability-critical applications

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → Attempt chat
  3. **Error Handler** → Catch errors
  4. **Retry Logic** → Retry on failure (with delay)
  5. **Fallback Response** → Use cached/default response if all retries fail

  **Node Flow:**
  ```
  Trigger → Chat → Error Handler → Retry → Fallback
  ```

  **Implementation Tips:**
  - Use "Continue on Fail" option in nodes
  - Implement retry with exponential backoff
  - Cache successful responses for fallback

  ---

  ### Example 9: Batch Processing Workflow

  **Use Case**: Bulk operations, data processing pipelines

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Get Items** → Retrieve items to process (from Context Library, database, etc.)
  3. **Split in Batches** → Process in batches
  4. **Agent700 Agent** → Process each item
     - Message: "Process this item: {{$json.item}}"
  5. **Aggregate Results** → Combine all results
  6. **Save** → Store aggregated results

  **Node Flow:**
  ```
  Trigger → Get Items → Split → Chat (per item) → Aggregate → Save
  ```

  **Performance Tips:**
  - Process in parallel batches
  - Use Continue on Fail for individual items
  - Aggregate results efficiently


  ## Best Practices

  ### When to Use Which Node

  - **Agent Node**: Regular chat interactions, sending messages to agents
  - **Context Library Node**: Data storage, context injection, pattern matching

  ### Authentication Management

  1. **Use App Passwords**
     - Required for all nodes
     - Can be revoked individually
     - Better audit trail
     - Format: `app_a7_` + 32 characters

  2. **Store App Passwords Securely**
     - Use n8n's parameter encryption
     - Never hard-code in workflows
     - Rotate app passwords regularly
     - Consider using n8n environment variables for sensitive values

  3. **One App Password Per Environment**
     - Separate app passwords for dev/staging/prod
     - Use different Agent IDs per environment

  ### Error Handling

  1. **Enable Continue on Fail**
     - For batch processing
     - When individual failures shouldn't stop workflow

  2. **Implement Retry Logic**
     - For transient errors (network, timeouts)
     - Use exponential backoff

  3. **Log Errors Properly**
     - Use n8n's error handling
     - Store error details in Context Library for debugging

  ### Performance Tips

  1. **Message Context**
     - Include previous messages manually in prompts when needed
     - Use Context Library to store conversation history
     - Limit context size to avoid token limits

  2. **Batch Processing**
     - Process items in parallel when possible
     - Use Split in Batches node
     - Aggregate results efficiently

  3. **Caching**
     - Cache agent configs in Context Library
     - Cache frequently accessed data
     - Use workflow static data for session management

  ### Security

  1. **SSL/TLS Configuration**
     - Use "Strict SSL" in production
     - Only disable for development/testing

  2. **Token Management**
     - Tokens auto-refresh via credentials

  3. **Data Privacy**
     - Be careful with PII in messages
     - Use Context Library encryption features
     - Review scrubbed_message in responses

  ## Troubleshooting

  ### Common Issues

  #### Authentication Fails

  **Symptoms:**
  - "Authentication failed" errors
  - 401 Unauthorized responses
  - "App login did not return accessToken" errors

  **Solutions:**
  1. Verify App Password is correct (format: `app_a7_` + 32 chars)
  2. Check API Base URL is correct (`https://api.agent700.ai`)
  3. Verify App Password is valid in Agent700 web interface
  4. Try creating a new app password
  5. Check network connectivity
  6. Ensure App Password parameter is set in node (not empty)

  #### Node Not Appearing

  **Symptoms:**
  - Can't find Agent700 nodes in n8n

  **Solutions:**
  1. Verify installation path is correct (see [Installation](#installation) section)
  2. Check `dist/` folder exists and contains compiled `.node.js` files
  3. Verify `package.json` n8n.nodes array matches actual file paths
  4. Check file permissions (Docker: ensure container user can read files)
  5. Restart n8n after installation
  6. Check n8n logs for errors: `docker logs <CONTAINER>` or `n8n start --log-level=debug`
  7. Verify TypeScript compiled successfully (`npm run build`)
  8. For Docker: Ensure volume mount path is correct in `docker-compose.yml`
  9. Install dependencies: `npm install --production` in the custom nodes directory

  #### Agent ID Not Found

  **Symptoms:**
  - "Agent not found" errors

  **Solutions:**
  1. Verify the Agent UUID is correct (copy from Agent700 web interface)
  2. Verify App Password is correct and has access to the agent
  3. Check you have access to agents in Agent700 account
  4. Verify API Base URL is correct

  #### API Errors

  **Symptoms:**
  - 4xx/5xx HTTP errors
  - "API Error" messages

  **Solutions:**
  1. Check error details in node output
  2. Verify Agent UUID is correct
  3. Check API rate limits
  4. Review API documentation for endpoint changes
  5. Enable Continue on Fail to see detailed errors

  #### SSL/TLS Issues

  **Symptoms:**
  - Certificate errors
  - Connection refused

  **Solutions:**
  1. Use "Strict SSL" in production
  2. Check API Base URL uses HTTPS
  3. Verify certificate is valid
  4. Only use "Allow Self-Signed" for development

  ### Debugging Tips

  1. **Check Node Output**
     - Look at `json` output for error details
     - Check `status` field for operation results

  2. **Enable Continue on Fail**
     - See what errors occur
     - Don't stop workflow on first error

  3. **Use Context Library for Logging**
     - Store debug information
     - Track workflow execution

  4. **Test Individual Nodes**
     - Test each node separately
     - Verify credentials work
     - Check API connectivity

  ### Getting Help

  1. **Check n8n Logs**
     - Look for error messages
     - Check execution logs

  2. **Review API Documentation**
     - Agent700 API docs
     - n8n node development docs

  3. **Test with Simple Workflow**
     - Start with basic chat
     - Add complexity gradually

  ## Workflow Templates

  Ready-to-use workflow templates are available in the `workflows/` folder:

  - `simple-chat.json` - Basic chat workflow
  - `chat-with-context.json` - Conversation context example
  - `url-evaluation.json` - URL evaluation workflow
  - `context-library-management.json` - Context Library operations
  - `error-handling.json` - Error handling example
  - `batch-processing.json` - Batch processing workflow

  **Note**: Workflow templates from v1 may need updates for v2:
  - Replace credential references with App Password parameter
  - Update node type names (`agent700Chat` → `agent700Agent`)
  - Update operation names in Context Library node

  **To import:**
  1. In n8n, go to **Workflows** → **Import from File**
  2. Select the JSON file from `workflows/` folder
  3. Configure App Password in each node
  4. Update Agent IDs if needed
  5. Execute and customize

  ## License

  MIT License - see LICENSE file for details.

  ## Support

  - Check n8n documentation for general n8n issues
  - Review Agent700 API documentation for API-specific issues
  - Create issues in the repository for bugs or feature requests

ai_documentation_summary:
  {"purpose":"This n8n node enables communication with the Agent700 AI platform by sending context to trusted agents via their API and receiving structured responses.","capabilities":["Send messages to Agent700 agents","Receive structured responses from agents","Manage context libraries","Auto-authentication using App Password","Simplify output formatting","API token refresh per execution"],"authentication":"App Password required (format: app_a7_ + 32 characters)","commonUseCases":["Integrating AI agents into n8n workflows","Automated customer support routing","Context-aware data processing","API-driven chatbot interactions"],"limitations":["Requires manual App Password configuration","Base URL must be manually set (default: https://api.agent700.ai)","Requires npm installation or custom node deployment"],"relatedNodes":["Agent700 Context Library","Generic HTTP Request","Function Item"]}


