# nodes

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

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

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

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

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

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

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

  ## Installation

  ### Install from n8n Integrations (Recommended)

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

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

  ### Install via Community Nodes

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

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

  ## Operations

  ### Company

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

  ### Domain

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

  ### Email

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

  ### Finder

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

  ### Phone

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

  ### Custom API Call

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

  ## Credentials

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

  ### Getting Your API Credentials

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

  ### Setting Up Credentials in n8n

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

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

  ### Using Tomba Credentials with the HTTP Request Node

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

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

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

  ## Usage

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

  ### Example 1: Email Verification Workflow

  This workflow verifies the deliverability of email addresses:

  **Nodes needed:**

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

  **Setup:**

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

  ### Example 2: Domain Email Discovery

  Find all email addresses associated with a company domain:

  **Setup:**

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

  ### Example 3: Email Finder for Lead Generation

  Generate email addresses using names and company domains:

  **Setup:**

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

  ### Example 4: Phone Number Discovery

  Find phone numbers associated with emails or domains:

  **Setup:**

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

  ### Example 5: Company Search

  Search for companies matching specific criteria:

  **Setup:**

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

  ### Example 6: Custom API Call

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

  **Setup:**

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

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

  ### Example 7: Company Intelligence Workflow

  Gather comprehensive company data:

  **Setup:**

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

  ### Pro Tips

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

  ## Resources

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

  ## Test the node

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

  ### Install n8n using npm

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

  ### Clone git repository

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

  ### Available Scripts

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

  ### Publish it locally

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

  ### Install the node into your local n8n instance

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

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

  ## More information

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

  ## License

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

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


node_type: n8n-nodes-wcrm.wcrmTrigger
package_name: n8n-nodes-wcrm
display_name: wCRM Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: srlines
author_github_url: https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM.git
npm_package_name: n8n-nodes-wcrm
npm_version: 1.0.28
community_fetched_at: 2026-04-16T09:43:36.019Z
description:
  Receives incoming WhatsApp messages forwarded by wCRM via webhook. Use this as the starting point for chatbot workflows.

npm_readme:
  # n8n-nodes-wcrm

  This is an n8n community node for the **wCRM WhatsApp Cloud API**. It allows you to send and receive WhatsApp messages directly from your n8n workflows, build complex AI-powered chatbots, and manage conversation history — making it a comprehensive alternative to the official WhatsApp API node.

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

  ## Documentation & Support

  - **wCRM Application/API Base URL:** https://crm.srlines.net
  - **Package Documentation (this README):** https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM#readme
  - **Main Website:** https://srlines.net
  - **Support Email:** contact@srlines.net
  - **WhatsApp Support:** +92 333 9776136

  > Note: This package only integrates with the existing `crm.srlines.net` service.

  ## Features

  - **Send Messages** — Text, Image, Audio, Document, Video, Interactive Lists, Interactive Buttons
  - **Send Templates** — Pre-approved WhatsApp template messages with variable substitution and media
  - **Receive Incoming Messages** — Webhook trigger node to capture all incoming WhatsApp messages in real time
  - **Internal Message Store** — Save, retrieve, filter, and clear incoming message payloads for chatbot context and conversation history
  - **Chatbot Ready** — Designed for complex chatbot workflows with OpenAI, database queries, catalog integrations, and more

  ## Installation

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

  1. Go to **Settings > Community Nodes** in your n8n instance.
  2. Select **Install**.
  3. Enter `n8n-nodes-wcrm` in the **Enter npm package name** field.
  4. Agree to the risks of using community nodes and select **Install**.

  ## Credentials

  To use this node you need a **wCRM API Key**.

  1. In n8n, go to **Credentials** and create a new credential of type **wCRM API**.
  2. Enter your **API Key** obtained from your wCRM dashboard.
  3. Save the credential.

  This single API Key is used to authenticate all requests to the wCRM API.

  ### Incoming Messages — Callback URI Setup

  The wCRM platform forwards all incoming WhatsApp message payloads to your n8n webhook URL.

  - **If you are using the SRLINES n8n instance**, your callback URI is already configured — no action needed.
  - **If you are self-hosting n8n**, copy your wCRM Trigger webhook URL from the active workflow and provide it to **SRLINES support** so they can configure it in your wCRM account.

  ## Nodes

  This package includes two nodes:

  | Node | Type | Description |
  |---|---|---|
  | **wCRM** | Action | Send messages, templates, and manage the internal message store |
  | **wCRM Trigger** | Trigger | Receives incoming WhatsApp messages via webhook |

  ## Operations

  ### Message (Send)

  Send WhatsApp messages of various types:

  | Operation | Description |
  |---|---|
  | **Send Text** | Send a plain text message with optional URL preview |
  | **Send Image** | Send an image by providing a URL |
  | **Send Audio** | Send an audio file by providing a URL |
  | **Send Document** | Send a document with an optional caption |
  | **Send Video** | Send a video with an optional caption |
  | **Send Interactive List** | Send an interactive list message with sections and rows |
  | **Send Interactive Buttons** | Send an interactive button message with reply buttons |

  ### Template (Send)

  | Operation | Description |
  |---|---|
  | **Send Template** | Send a pre-approved WhatsApp template message with variable substitution and optional media |

  ### Message Store

  Manage stored incoming messages for chatbot context and conversation history:

  | Operation | Description |
  |---|---|
  | **Get All Messages** | Retrieve all stored incoming messages |
  | **Get Messages by Phone** | Retrieve messages filtered by sender phone number |
  | **Save Message** | Manually save a message payload to the internal store |
  | **Clear Messages** | Clear all stored messages |

  ## Usage

  ### Receiving Incoming Messages (wCRM Trigger)

  1. Add the **wCRM Trigger** node to your workflow as the starting node.
  2. Configure your wCRM API credentials.
  3. Activate the workflow — n8n generates a webhook URL.
  4. If self-hosting, provide the webhook URL to SRLINES support for callback configuration.
  5. Incoming WhatsApp messages will now trigger your workflow with the full message payload.

  The trigger node outputs:
  - `body` — The raw incoming message payload from WhatsApp
  - `from` — Sender's phone number
  - `messageType` — Type of message (text, image, audio, etc.)
  - `textBody` — The text content (for text messages)
  - `timestamp` — Message timestamp
  - `headers` — HTTP headers from the webhook request

  The trigger node can also **automatically store** incoming messages in the workflow's internal data store (enabled by default) for later reference in chatbot conversations.

  ### Sending a Text Message

  1. Add the **wCRM** node to your workflow.
  2. Select **Message** as the Resource and **Send Text** as the Operation.
  3. Enter the recipient's phone number (with country code, e.g. `+1234567890`).
  4. Enter the message body text.
  5. Optionally enable URL preview.

  ### Sending Media (Image/Audio/Document/Video)

  1. Select the appropriate operation (Send Image, Send Audio, etc.).
  2. Enter the recipient's phone number.
  3. Provide the publicly accessible URL of the media file.
  4. For documents and videos, you can add an optional caption.

  ### Sending Interactive List

  1. Select **Send Interactive List** as the operation.
  2. Provide header text, body text, footer text, and button text.
  3. Define sections as JSON, for example:
  ```json
  [
    {
      "title": "Section 1",
      "rows": [
        {
          "id": "row_1",
          "title": "Option 1",
          "description": "Description for option 1"
        }
      ]
    }
  ]
  ```

  ### Sending Interactive Buttons

  1. Select **Send Interactive Buttons** as the operation.
  2. Provide the body text.
  3. Define buttons as JSON, for example:
  ```json
  [
    {
      "type": "reply",
      "reply": {
        "id": "btn_yes",
        "title": "Yes"
      }
    },
    {
      "type": "reply",
      "reply": {
        "id": "btn_no",
        "title": "No"
      }
    }
  ]
  ```

  ### Sending a Template Message

  1. Select **Template** as the Resource and **Send Template** as the Operation.
  2. Enter the recipient's phone number.
  3. Enter the template name as configured in your WhatsApp Business account.
  4. Provide template variables as a JSON array (e.g. `["John", "Order #123"]`).
  5. Optionally provide a media URI to attach media to the template.

  ### Using the Message Store

  The internal message store allows you to save and reference past messages within your chatbot workflows:

  1. **Auto-storage via Trigger** — Enable "Store Incoming Messages" on the wCRM Trigger node to automatically save all incoming messages.
  2. **Manual save** — Use the wCRM node with Resource: **Message Store** → Operation: **Save Message** to save any message payload.
  3. **Retrieve all** — Use **Get All Messages** to fetch the complete conversation history.
  4. **Filter by phone** — Use **Get Messages by Phone** to get messages from a specific sender.
  5. **Clear** — Use **Clear Messages** to reset the store.

  ## Building Complex Chatbot Workflows

  The wCRM node is designed for building sophisticated WhatsApp chatbots. Here are common patterns:

  ### AI-Powered Chatbot (with OpenAI)

  ```
  [wCRM Trigger] → [wCRM: Get Messages by Phone] → [OpenAI] → [wCRM: Send Text]
  ```

  1. **wCRM Trigger** receives the incoming message.
  2. **wCRM (Message Store: Get Messages by Phone)** retrieves conversation history for that sender.
  3. Pass the incoming message + conversation history to an **OpenAI** node as context.
  4. **wCRM (Send Text)** sends the AI-generated response back to the user.

  ### Catalog / Database Lookup Bot

  ```
  [wCRM Trigger] → [IF: Check Message Type] → [Database/HTTP Node] → [OpenAI] → [wCRM: Send Text/Image/Document]
  ```

  1. **wCRM Trigger** receives the incoming query from the customer.
  2. **IF node** checks the message type or content to determine intent.
  3. Query your **database** (MySQL, PostgreSQL, etc.) or **HTTP Request** node to fetch product catalog, order status, etc.
  4. Merge the query results with the customer question and send to **OpenAI** for a natural language response.
  5. **wCRM** sends the response back — as text, image, document, or interactive list depending on the content.

  ### Interactive Menu Bot

  ```
  [wCRM Trigger] → [Switch] → [wCRM: Send Interactive List/Buttons] → [wCRM Trigger] → [Process Selection]
  ```

  1. Send an interactive list or button message to present options.
  2. When the user selects an option, the trigger receives the selection.
  3. Process the selection (query database, call API, generate AI response, etc.).
  4. Reply with the result or present further options.

  ### Multi-Step Workflow with Message History

  ```
  [wCRM Trigger] → [wCRM: Save Message] → [wCRM: Get Messages by Phone] → [Code/Function] → [OpenAI] → [wCRM: Send Text]
  ```

  1. Save each incoming message to the store for context.
  2. Retrieve full conversation history for the sender.
  3. Use a **Code** or **Function** node to format the conversation as a prompt.
  4. Send to **OpenAI** with full context for an informed response.
  5. Reply via wCRM.

  ### Key Tips for Chatbot Workflows

  - **Use the Message Store** to maintain conversation context across multiple interactions.
  - **Combine with n8n's built-in nodes** — IF, Switch, Merge, Code, HTTP Request, database nodes.
  - **Chain with OpenAI/AI nodes** for intelligent, context-aware responses.
  - **Use Interactive Lists and Buttons** for structured user input (menus, confirmations, selections).
  - **Use Templates** for standardized messages (order confirmations, appointment reminders, etc.).
  - **Reference old messages** via the Message Store to provide contextual responses.

  ## License

  [MIT](LICENSE)


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

updated_at: 2026-04-16 09:43:36
author_name: pulsetic.com
author_github_url: https://github.com/designmodo/pulsetic-n8n.git
npm_package_name: @pulsetic/n8n-nodes-pulsetic
npm_version: 1.0.16
community_fetched_at: 2026-04-16T09:43:36.020Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "monitor",
      "options": [
        {
          "name": "Monitor",
          "value": "monitor"
        },
        {
          "name": "Status Page",
          "value": "statusPage"
        },
        {
          "name": "Status Page Incident",
          "value": "statusPageIncident"
        },
        {
          "name": "Status Page Incident Update",
          "value": "statusPageIncidentUpdate"
        },
        {
          "name": "Status Page Maintenance",
          "value": "statusPageMaintenance"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Add Notification Channel",
          "value": "addNotificationChannel",
          "action": "Add a notification channel"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a monitor"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a monitor"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a monitor"
        },
        {
          "name": "Get Checks",
          "value": "getChecks",
          "action": "Get checks for monitor"
        },
        {
          "name": "Get Events",
          "value": "getEvents",
          "action": "Get events for monitor"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many monitors"
        },
        {
          "name": "Get Snapshots",
          "value": "getSnapshots",
          "action": "Get snapshots for monitor"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get monitor statistics"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a monitor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monitor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a status page"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a status page"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many status pages"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a status page"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statusPage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create maintenance"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete maintenance"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update maintenance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statusPageMaintenance"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create incident"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete incident"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many incidents for a status page"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update incident"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statusPageIncident"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create incident update"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete incident update"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update incident update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statusPageIncidentUpdate"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Notification Channel",
      "value": "addNotificationChannel",
      "action": "Add a notification channel",
      "resource": "monitor"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a monitor",
      "resource": "monitor"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a monitor",
      "resource": "monitor"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a monitor",
      "resource": "monitor"
    },
    {
      "name": "Get Checks",
      "value": "getChecks",
      "action": "Get checks for monitor",
      "resource": "monitor"
    },
    {
      "name": "Get Events",
      "value": "getEvents",
      "action": "Get events for monitor",
      "resource": "monitor"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many monitors",
      "resource": "monitor"
    },
    {
      "name": "Get Snapshots",
      "value": "getSnapshots",
      "action": "Get snapshots for monitor",
      "resource": "monitor"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get monitor statistics",
      "resource": "monitor"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a monitor",
      "resource": "monitor"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a status page",
      "resource": "statusPage"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a status page",
      "resource": "statusPage"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many status pages",
      "resource": "statusPage"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a status page",
      "resource": "statusPage"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create maintenance",
      "resource": "statusPageMaintenance"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete maintenance",
      "resource": "statusPageMaintenance"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update maintenance",
      "resource": "statusPageMaintenance"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create incident",
      "resource": "statusPageIncident"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete incident",
      "resource": "statusPageIncident"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many incidents for a status page",
      "resource": "statusPageIncident"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update incident",
      "resource": "statusPageIncident"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create incident update",
      "resource": "statusPageIncidentUpdate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete incident update",
      "resource": "statusPageIncidentUpdate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update incident update",
      "resource": "statusPageIncidentUpdate"
    }
  ]

npm_readme:
  # pulsetic-n8n
  Connect Pulsetic with 1000+ apps using n8n automation. Trigger workflows from uptime and incident events, automate alerts, sync incidents across tools, create tickets, and build powerful custom monitoring integrations that fit seamlessly into your existing DevOps workflows.

  The Pulsetic node allows you to connect your Pulsetic account with n8n and automate uptime monitoring workflows.

  ## About Pulsetic

  Pulsetic is a modern website uptime monitoring service.

  Get instant website downtime alerts via phone call, SMS, email, or Slack when your website goes down. Create beautiful public status pages, manage incidents, and generate uptime reports to keep your visitors and customers informed.

  Learn more at: https://pulsetic.com


node_type: n8n-nodes-mallabe-images.mallabeImages
package_name: n8n-nodes-mallabe-images
display_name: Mallabe Images
category: Images
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: dinbrca
author_github_url: https://github.com/mallabe/
npm_package_name: n8n-nodes-mallabe-images
npm_version: 0.1.7
community_fetched_at: 2026-04-16T09:43:36.021Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Mallabe Images is an automation toolchain that allows you to process images, resize, crop and apply other manipulations on images on the fly.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "resize",
      "options": [
        {
          "name": "Blur Image",
          "value": "blur",
          "action": "Blur image",
          "description": "Blur images and send the new image to another integration"
        },
        {
          "name": "Compress Image",
          "value": "compress",
          "action": "Compress image",
          "description": "Compress images and drive the new image to another integration.Note: if a given URL isn't an image file (png, jpg/jpeg, etc..) - the file will not convert. Note: some Zapier integrations give URLs that are protected - these can't be used & compressed."
        },
        {
          "name": "Crop Image",
          "value": "crop",
          "action": "Crop image",
          "description": "Crop images and send the new image to another integration. Note: If a given URL isn't an image file (e.g., png, jpg/jpeg, gif), the file will not convert. Also, some Zapier integrations provide protected URLs that cannot be cropped."
        },
        {
          "name": "Extract Image Metadata",
          "value": "metadata",
          "action": "Extract image metadata",
          "description": "Extract image metadata. Note: some integrations give URLs that are protected - these can't be used & resized."
        },
        {
          "name": "Flip Image",
          "value": "flip",
          "action": "Flip image",
          "description": "Flip images and send the new image to another integration"
        },
        {
          "name": "Greyscale Image",
          "value": "greyscale",
          "action": "Greyscale image",
          "description": "Greyscale images and send the new image to another integration"
        },
        {
          "name": "Join/Combine Images",
          "value": "join",
          "action": "Join combine images",
          "description": "Join images into one image and send the new image to another integration"
        },
        {
          "name": "Resize Image",
          "value": "resize",
          "action": "Resize image",
          "description": "Resize or Scale images and drive the new image to another integration. Note: if a given URL isn't an image file (png, jpg/jpeg, gif, etc..) - the file will not convert.Note: some Zapier integrations give URLs that are protected - these can't be used & resized."
        },
        {
          "name": "Rotate Image",
          "value": "rotate",
          "action": "Rotate image",
          "description": "Rotate images and send the new image to another integration"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Blur Image",
      "value": "blur",
      "action": "Blur image",
      "description": "Blur images and send the new image to another integration",
      "resource": "image"
    },
    {
      "name": "Compress Image",
      "value": "compress",
      "action": "Compress image",
      "description": "Compress images and drive the new image to another integration.Note: if a given URL isn't an image file (png, jpg/jpeg, etc..) - the file will not convert. Note: some Zapier integrations give URLs that are protected - these can't be used & compressed.",
      "resource": "image"
    },
    {
      "name": "Crop Image",
      "value": "crop",
      "action": "Crop image",
      "description": "Crop images and send the new image to another integration. Note: If a given URL isn't an image file (e.g., png, jpg/jpeg, gif), the file will not convert. Also, some Zapier integrations provide protected URLs that cannot be cropped.",
      "resource": "image"
    },
    {
      "name": "Extract Image Metadata",
      "value": "metadata",
      "action": "Extract image metadata",
      "description": "Extract image metadata. Note: some integrations give URLs that are protected - these can't be used & resized.",
      "resource": "image"
    },
    {
      "name": "Flip Image",
      "value": "flip",
      "action": "Flip image",
      "description": "Flip images and send the new image to another integration",
      "resource": "image"
    },
    {
      "name": "Greyscale Image",
      "value": "greyscale",
      "action": "Greyscale image",
      "description": "Greyscale images and send the new image to another integration",
      "resource": "image"
    },
    {
      "name": "Join/Combine Images",
      "value": "join",
      "action": "Join combine images",
      "description": "Join images into one image and send the new image to another integration",
      "resource": "image"
    },
    {
      "name": "Resize Image",
      "value": "resize",
      "action": "Resize image",
      "description": "Resize or Scale images and drive the new image to another integration. Note: if a given URL isn't an image file (png, jpg/jpeg, gif, etc..) - the file will not convert.Note: some Zapier integrations give URLs that are protected - these can't be used & resized.",
      "resource": "image"
    },
    {
      "name": "Rotate Image",
      "value": "rotate",
      "action": "Rotate image",
      "description": "Rotate images and send the new image to another integration",
      "resource": "image"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__",
      "resource": "image"
    }
  ]

npm_readme:
  ![Mallabe Logo](/docs/mallabe-logo.png)

  # n8n-nodes-mallabe-images

  This is an n8n community node for [Mallabe Images](https://www.mallabe.com/).

  It allows you to manipulate images using different operations.

  For more information, refer to the [Mallabe website](https://www.mallabe.com/).

  Current supported operations:
  - Resize Image
  - Compress Image
  - Get Image Metadata
  - Crop Image
  - Rotate Image
  - Flip / Flop Image
  - Greyscale Image
  - Join 2 Images

  ## License

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

  ## Development
  ### Running Locally (Summary)
  1. Install n8n globally using https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/
  2. Run `nvm use` to use the correct node version in the node folder.
  3. Run `pnpm install` in the node folder.
  4. Run `pnpm link --global` to register as package.
  5. Run `pnpm run build` whenever you make changes to the node.
  6. Run `cd ~/.n8n`
  7. Stop n8n if it was already running.
  8. Run `pnpm link --global n8n-nodes-mallabe-images` in n8n `custom` folder.
  9. Run `n8n start`

  Note: if you like to watch the development instead of rebuilding every time, use `npm run dev`.

ai_documentation_summary:
  {"purpose":"This n8n community node enables real-time image manipulation by processing images through operations like resizing, cropping, and applying filters.","capabilities":["Resize images","Compress images","Get image metadata","Crop images","Rotate images","Flip/Flop images","Convert to greyscale","Join two images"],"authentication":"API key required (implied by external service integration)","commonUseCases":["Automating image preprocessing for e-commerce listings","Batch image optimization for web performance","Applying consistent filters or crops to image sets","Generating image thumbnails dynamically"],"limitations":["Limited to operations supported by the external Mallabe service","Requires external API access to Mallabe Images service"],"relatedNodes":["HTTP Request","Code","Wait Until"]}


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

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

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

npm_readme:
  # n8n-nodes-infranodus

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

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

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

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

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

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

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

  ## Installation

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

  ### For automatic installation

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

  ### For manual installation:

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

  0. Install the local version of n8n

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

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

  ```bash
  docker volume create n8n_data

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

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

  ```bash
  npx n8n
  ```

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

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

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

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

  1. Launch the local version of n8n

  - If it's installed globally:

  ```bash
  n8n start
  ```

  - If it's installed through Docker:

  Start the Docker n8n instsance:

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

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

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

  1. Install the node

  Change to the nodes folder:

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

  If it doesn't exist, create it first:

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

  2. Install the node into this folder:

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

  3. Then restart n8n

  ## Local Node Development

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

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

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

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

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

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

  ```bash
  npm install
  ```

  2. Make the necessary changes and build the node

  ```bash
  npm build
  ```

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

  ```bash
  npm link
  ```

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

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

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

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

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

  5. Then run the n8n instance locally using the

  ```bash
  n8n start
  ```

  ### To Update the Local Node in n8n

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

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

  ```bash
  npm run build
  ```

  2. Restart n8n:

  ```bash
  n8n start
  ```

  ## Operations

  The node supports the following operations:

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

  ## Credentials

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

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Version history

  v 0.1.8 (2025-12-09)

  - better naming convention for create / update graph

  v 0.1.7 (2025-12-03)

  - bug fixes
  - improve installation instructions

  v 0.1.5 (2025-12-03)

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

  v 0.1.4 (2025-10-25)

  - Fix bugs with duplicate tool definitions

  v 0.1.3 (2025-09-17)

  - Fix bugs and incorrect tool settings

  v 0.1.0 (2025-09-11)

  - Initial release

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


node_type: @bdzscaler/n8n-nodes-aiguard.aiGuard
package_name: @bdzscaler/n8n-nodes-aiguard
display_name: Zscaler AI Guard
description: Scan AI prompts and responses for security threats using Zscaler AI Guard
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: bd-devrel
author_github_url: https://github.com/zscaler/n8n-nodes-aiguard.git
npm_package_name: @bdzscaler/n8n-nodes-aiguard
npm_version: 0.1.3
community_fetched_at: 2026-04-16T09:43:36.023Z
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "promptScan",
      "options": [
        {
          "name": "Dual Scan",
          "value": "dualScan",
          "action": "Perform dual scanning of prompt and response",
          "description": "Scan both prompt and response in sequence"
        },
        {
          "name": "Prompt Scan",
          "value": "promptScan",
          "action": "Scan a prompt for security threats",
          "description": "Scan user input/prompts for security threats"
        },
        {
          "name": "Response Scan",
          "value": "responseScan",
          "action": "Scan a response for policy violations",
          "description": "Scan AI-generated responses for policy violations"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Dual Scan",
      "value": "dualScan",
      "action": "Perform dual scanning of prompt and response",
      "description": "Scan both prompt and response in sequence"
    },
    {
      "name": "Prompt Scan",
      "value": "promptScan",
      "action": "Scan a prompt for security threats",
      "description": "Scan user input/prompts for security threats"
    },
    {
      "name": "Response Scan",
      "value": "responseScan",
      "action": "Scan a response for policy violations",
      "description": "Scan AI-generated responses for policy violations"
    }
  ]

npm_readme:
  # Zscaler AI Guard n8n Community Node

  A production-ready n8n community node for integrating with the [Zscaler AI Guard](https://help.zscaler.com/ai-guard) API. This node enables you to scan AI prompts and responses for security threats — toxicity, PII, secrets, prompt injection, and more — directly within your n8n workflows.

  ## Features

  - **Prompt Scan** — Scan user input for security threats (direction: `IN`)
  - **Response Scan** — Scan AI-generated responses for policy violations (direction: `OUT`)
  - **Dual Scan** — Scan both prompt and response in sequence; if the prompt is blocked, the response scan is skipped
  - **Automatic Policy Resolution** — When no Policy ID is configured, the API resolves the policy linked to your API key
  - **Fail-Closed Error Handling** — On internal errors with "Continue On Fail" enabled, the node returns `action: BLOCK` so security is never silently bypassed
  - **Attribution Metadata** — Enriches output with n8n workflow context (`workflowId`, `workflowName`, `executionId`, `executionMode`)
  - **Content Size Validation** — Rejects payloads exceeding 5 MB before sending to the API
  - **Configurable Retries & Timeout** — Adjustable retry count (up to 6) and request timeout

  ## Installation

  ### Prerequisites

  - n8n instance (Cloud or self-hosted) — [Setup Docs](https://docs.n8n.io/hosting/installation/docker/)
  - A Zscaler AI Guard license and API key (Bearer token)

  ### Option 1: Install via n8n Community Nodes (Recommended)

  1. Open your n8n instance
  2. Go to **Settings → Community Nodes**
  3. Search for `@bdzscaler/n8n-nodes-aiguard`
  4. Click **Install**
  5. Restart n8n if prompted

  ### Option 2: Install via npm

  ```bash
  npm install @bdzscaler/n8n-nodes-aiguard
  ```

  ### Local Development

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

  Link to a local n8n instance:

  ```bash
  # Native n8n
  ln -s $(pwd) ~/.n8n/custom/n8n-nodes-aiguard

  # Docker n8n — add a volume mount:
  # -v /path/to/n8n-nodes-aiguard:/home/node/.n8n/custom/n8n-nodes-aiguard
  ```

  Restart n8n to load the node.

  ## Configuration

  ### 1. Create Credentials

  1. In n8n, go to **Credentials** → **Add Credential**
  2. Search for **"Zscaler AI Guard API"**
  3. Fill in:

  | Field | Required | Description |
  |-------|:--------:|-------------|
  | **API Key** | Yes | Your Zscaler AI Guard API key (Bearer token) |
  | **Cloud** | Yes | Zscaler cloud for your tenancy (default: `us1`). Builds the URL `https://api.{cloud}.zseclipse.net` |
  | **Override URL** | No | Override the API base URL entirely. When set, the Cloud field is ignored. Equivalent to `AIGUARD_OVERRIDE_URL` in the [Python SDK](https://github.com/zscaler/zscaler-sdk-python) |
  | **Policy ID** | No | AI Guard policy ID. When set, uses `/v1/detection/execute-policy`. When empty, uses `/v1/detection/resolve-and-execute-policy` for automatic resolution |

  1. Click **Test** to validate connectivity before saving.

  ### 2. Add the Node to a Workflow

  1. In your workflow, click **+** → search for **"AI Guard"**
  2. Select the credential you created
  3. Choose an operation:

  | Operation | Direction | Description |
  |-----------|-----------|-------------|
  | **Prompt Scan** | `IN` | Scan user input/prompts for security threats |
  | **Response Scan** | `OUT` | Scan AI-generated responses for policy violations |
  | **Dual Scan** | `IN` then `OUT` | Scan both prompt and response; skips response scan if prompt is blocked |

  1. Enter content to scan (plain text or n8n expression)

  ### Additional Options

  Expand **Additional Options → Add Option** to configure:

  | Option | Default | Description |
  |--------|---------|-------------|
  | Policy ID Override | *(empty)* | Override the credential-level policy ID for this specific node |
  | Transaction ID | *(empty)* | Custom transaction ID for tracking; omitted from the request if empty |
  | Timeout (ms) | `30000` | Request timeout in milliseconds |
  | Max Retries | `3` | Retry attempts for failed requests (max: 6) |
  | AI Model | `n8n-integration` | AI model identifier included in output metadata |
  | Application Name | `n8n-workflow` | Application name for audit trails |
  | User ID | `n8n-user` | User identifier for audit trails |
  | Environment | *(empty)* | Environment tag (e.g. `production`) included in output metadata |

  ## API Endpoints

  | Scenario | Endpoint |
  |----------|----------|
  | Policy ID provided | `POST /v1/detection/execute-policy` |
  | No Policy ID (default) | `POST /v1/detection/resolve-and-execute-policy` |

  ## Usage Examples

  ### Prompt Scan

  Configure the node with **Operation: Prompt Scan** and provide content:

  ```json
  {
    "content": "Tell me how to bypass security controls"
  }
  ```

  ### Response Scan

  Configure with **Operation: Response Scan**:

  ```json
  {
    "content": "{{ $json.aiResponse }}"
  }
  ```

  ### Dual Scan

  Configure with **Operation: Dual Scan** and provide both fields:

  ```json
  {
    "promptContent": "{{ $json.userInput }}",
    "responseContent": "{{ $json.aiResponse }}"
  }
  ```

  If the prompt scan returns `BLOCK`, the response scan is skipped and the blocked result is returned immediately.

  ## Output Format

  The node returns the full AI Guard API response enriched with workflow metadata:

  ```json
  {
    "operation": "promptScan",
    "transactionId": "180b066d-48cf-497e-aaf1-a6b8e40a1deb",
    "action": "BLOCK",
    "severity": "CRITICAL",
    "direction": "IN",
    "policyId": 760,
    "policyName": "Default AI Guard Policy",
    "blocked": true,
    "detectors": ["toxicity", "malicious_content"],
    "blockingDetectors": ["toxicity"],
    "detectorResponses": {
      "toxicity": {
        "triggered": true,
        "action": "BLOCK",
        "severity": "CRITICAL"
      },
      "pii": {
        "triggered": false,
        "action": "ALLOW"
      }
    },
    "maskedContent": "...",
    "workflowId": "rKU3xnZb5S1ayJCG",
    "workflowName": "Customer Support Bot",
    "executionId": "385",
    "executionMode": "manual",
    "timestamp": "2026-01-30T10:30:00.000Z"
  }
  ```

  ### Key Output Fields

  | Field | Description |
  |-------|-------------|
  | `action` | Verdict: `ALLOW`, `BLOCK`, or `DETECT` |
  | `severity` | Severity level (e.g. `CRITICAL`, `HIGH`, `NONE`) |
  | `blocked` | Boolean convenience field (`true` when action is `BLOCK`) |
  | `detectors` | Array of triggered detector names |
  | `blockingDetectors` | Array of detectors that returned `BLOCK` |
  | `detectorResponses` | Per-detector results with trigger status, action, and severity |
  | `maskedContent` | Content with sensitive data masked (when applicable) |
  | `policyId` / `policyName` | The policy that was applied |
  | `transactionId` | Unique scan transaction identifier |

  Use the `action` or `blocked` field in an **IF** node to branch your workflow logic.

  ## Implementation Notes

  The node calls the Zscaler AI Guard API over HTTPS using n8n’s `helpers.httpRequest` (required for n8n Cloud–verified community packages). Headers match the [zscaler-sdk-python](https://github.com/zscaler/zscaler-sdk-python) pattern:

  - `Authorization: Bearer <API_KEY>`
  - `Content-Type: application/json`
  - `Accept: application/json`

  ## Error Handling

  - **Fail-closed by default**: When "Continue On Fail" is enabled in n8n, errors produce `{ action: "BLOCK", blocked: true }` rather than silently allowing content through
  - **Timeout protection**: Configurable per-request timeout (passed to the HTTP client)
  - **Content validation**: Payloads exceeding 5 MB are rejected before the API call
  - **Retry logic**: Configurable retry count (default 3, max 6) for transient failures

  ## Development

  ```bash
  npm run build       # Compile TypeScript and copy assets
  npm run dev         # Watch mode
  npm run lint        # ESLint (TypeScript + n8n-nodes-base)
  npm run lint:dist   # ESLint on dist/ (n8n Cloud rules; run after build)
  npm run scan:local  # build + ESLint (unpublished dist/; same rules as official scanner)
  npm run scan:npm    # npx @n8n/scan-community-package @…@version from package.json (needs publish)
  npm run lintfix     # Auto-fix lint issues
  npm run format      # Run Prettier
  npm test            # Run Jest tests
  npm run test:coverage  # Tests with coverage report
  ```

  ### Validate like the n8n Creator Portal

  n8n’s official tool is **`@n8n/scan-community-package`**. It **downloads the package from the npm registry** and runs ESLint with the same rules the Creator Portal uses. It **never** reads your local git tree.

  Use **both** of these, at different times:

  | Command | When to use |
  |--------|-------------|
  | **`npm run scan:local`** | Before publish: builds `dist/` and runs the **same ESLint config** the scanner uses (`eslint.community.config.mjs`). This is what CI runs as `lint:dist`. |
  | **`npm run scan:npm`** | After that **exact `version` in `package.json` exists on npm**: runs `npx @n8n/scan-community-package <name>@<version>`. Confirms the **published tarball** matches what the Portal checks. |

  ```bash
  # Unpublished changes (day to day)
  npm run scan:local

  # After npm publish of the current package.json version
  npm run scan:npm
  ```

  You can also call the CLI directly, for example `npx @n8n/scan-community-package @bdzscaler/n8n-nodes-aiguard@0.1.2`. If the version is **not** on the registry yet, the download step fails—that is expected; use **`scan:local`** until it is published.

  ## Releasing (maintainers)

  Releases are automated with [semantic-release](https://github.com/semantic-release/semantic-release) (see `.releaserc.json`), similar to [zscaler-mcp-server](https://github.com/zscaler/zscaler-mcp-server).

  - **Version and tag**: After the **first** git tag exists, the next version is computed from [Conventional Commits](https://www.conventionalcommits.org/) (for example `fix:` → patch, `feat:` → minor) and bumps from that last tag. semantic-release updates `package.json` and `package-lock.json`, creates tag `vX.Y.Z`, opens a **GitHub Release**, and publishes to npm with **provenance** (requires `NPM_TOKEN` in repository secrets).
  - **0.x packages — read this**: If there are **no** `vMAJOR.MINOR.PATCH` tags on the branch yet, semantic-release’s **first** automated release is **always `1.0.0`** ([`FIRST_RELEASE` in semantic-release](https://github.com/semantic-release/semantic-release/blob/master/lib/get-next-version.js)) — it does **not** seed from `package.json` (e.g. `0.1.2`). **Before the first successful release workflow**, create and push tags for versions already published to npm, e.g. `git tag v0.1.0 <commit>` … `git tag v0.1.2 <commit>` then `git push origin --tags`. The Release workflow includes a guard that **fails** if `package.json` is still `0.x` but there are no such tags.
  - **Pre-release checks**: The **Release** workflow runs `npm audit`, build, Prettier, ESLint (including `lint:dist`, which mirrors the n8n Creator Portal scanner rules), and Jest before any publish.
  - **Prerelease channels**: Pushes to branches `beta` or `alpha` publish npm prereleases (for example `1.0.0-beta.1`) on the corresponding dist-tag.
  - **If `1.0.0` was published by mistake**: npm generally does not allow unpublishing popular packages; you can **deprecate** `1.0.0` with an explanation, then either stay on the `1.x` line or coordinate a git/npm cleanup (remove erroneous tag/release, restore `v0.1.x` tags at the right commits, revert the `chore(release): 1.0.0` commit if policy allows) and publish **`0.1.3`** as the next intended 0.x release. There is no single-button undo — pick the line (`0.x` vs `1.x`) and document it for consumers.

  ## Security

  - API keys are stored encrypted via n8n's credential system
  - No content is logged or persisted by the node
  - All communication uses HTTPS/TLS
  - Error messages do not leak sensitive information

  ## Links

  - npm: <https://www.npmjs.com/package/@bdzscaler/n8n-nodes-aiguard>
  - Source: <https://github.com/zscaler/n8n-nodes-aiguard>
  - Zscaler AI Guard: <https://help.zscaler.com/ai-guard>
  - Zscaler Python SDK: <https://github.com/zscaler/zscaler-sdk-python>

  ## License

  MIT — see [LICENSE](LICENSE) for details.

  ## Contributing

  1. Fork the repository
  2. Create a feature branch from `main`
  3. Test thoroughly against the AI Guard API
  4. Ensure `npm run build`, `npm run lint`, `npm run lint:dist`, and `npm test` pass
  5. Use conventional commit messages (`fix:`, `feat:`, etc.) so releases version correctly
  6. Submit a pull request


node_type: n8n-nodes-campaignkit.campaignKit
package_name: n8n-nodes-campaignkit
display_name: CampaignKit
description: Email validation and verification with CampaignKit
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: campaignkit
author_github_url: https://github.com/campaignkit-cc/
npm_package_name: n8n-nodes-campaignkit
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:36.023Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "validateEmail",
      "options": [
        {
          "name": "Validate Email",
          "value": "validateEmail",
          "action": "Validate a single email address",
          "description": "Validate a single email address"
        },
        {
          "name": "Validate Batch",
          "value": "validateBatch",
          "action": "Validate multiple email addresses",
          "description": "Validate multiple email addresses"
        },
        {
          "name": "Get Job Status",
          "value": "getJobStatus",
          "action": "Get validation job status",
          "description": "Get the status of a validation job"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Validate Email",
      "value": "validateEmail",
      "action": "Validate a single email address",
      "description": "Validate a single email address"
    },
    {
      "name": "Validate Batch",
      "value": "validateBatch",
      "action": "Validate multiple email addresses",
      "description": "Validate multiple email addresses"
    },
    {
      "name": "Get Job Status",
      "value": "getJobStatus",
      "action": "Get validation job status",
      "description": "Get the status of a validation job"
    }
  ]

npm_readme:
  # n8n-nodes-campaignkit

  This is an n8n community node for [CampaignKit Email Validation](https://campaignkit.cc). It lets you validate email addresses and receive notifications when validation jobs complete in your n8n workflows.

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

  ### Community Node Installation

  1. Go to **Settings** > **Community Nodes** in your n8n instance
  2. Select **Install**
  3. Enter `n8n-nodes-campaignkit` in the **Enter npm package name** field
  4. Click **Install**

  ### Manual Installation

  If you're self-hosting n8n, you can install the node manually:

  ```bash
  npm install n8n-nodes-campaignkit
  ```

  For Docker-based installations, add the package to your n8n Docker image or install it in your running container.

  ## Operations

  ### CampaignKit Node

  The main CampaignKit node supports the following operations:

  #### Validate Email
  Validates a single email address and returns detailed verification results.

  **Input:**
  - `email` (string, required): The email address to validate

  **Output:**
  ```json
  {
    "email": "user@example.com",
    "is_valid": true,
    "is_risky": false,
    "is_invalid": false,
    "is_disposable": false,
    "is_role_email": false,
    "is_catchall": false,
    "is_blacklisted": false,
    "is_free_email": true,
    "is_mx_found": true,
    "is_smtp_valid": true,
    "score": 10,
    "classifier": "valid",
    "domain": "example.com",
    "mx_record": "mail.example.com",
    "smtp_provider": "Google",
    "free_email_provider": "Gmail",
    "did_you_mean": ""
  }
  ```

  #### Validate Batch
  Validates multiple email addresses as a batch job.

  **Input:**
  - `emails` (string, required): Email addresses to validate (one per line)
  - `label` (string, optional): Label for the validation job

  **Output:**
  ```json
  {
    "job_id": 12345,
    "email_count": 100,
    "status": "pending",
    "label": "My Email List",
    "created_at": "2025-01-15T10:00:00Z"
  }
  ```

  #### Get Job Status
  Retrieves the status and results of a validation job.

  **Input:**
  - `jobId` (number, required): The ID of the validation job

  **Output:**
  ```json
  {
    "job_id": 12345,
    "account_id": 456,
    "label": "My Email List",
    "state": "done",
    "email_count": 100,
    "valid_count": 85,
    "invalid_count": 10,
    "risky_count": 5,
    "deliverable_count": 85,
    "undeliverable_count": 15,
    "credits_used": 100,
    "progress": 100,
    "created_at": "2025-01-15T10:00:00Z",
    "started_at": "2025-01-15T10:00:05Z",
    "finished_at": "2025-01-15T10:05:00Z"
  }
  ```

  ### CampaignKit Trigger

  The CampaignKit Trigger node responds to events from CampaignKit.

  #### Job Completed
  Triggers when a validation job is completed.

  **Output:**
  ```json
  {
    "event": "validation.job.completed",
    "job_id": 12345,
    "account_id": 456,
    "label": "My Email List",
    "state": "done",
    "email_count": 100,
    "deliverable_count": 85,
    "undeliverable_count": 15,
    "risky_count": 5,
    "credits_used": 100,
    "created_at": "2025-01-15T10:00:00Z",
    "finished_at": "2025-01-15T10:05:00Z"
  }
  ```

  ## Credentials

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

  ### Getting Your API Key

  1. Sign up for a [CampaignKit account](https://app.campaignkit.cc)
  2. Navigate to **Settings** > **API Keys**
  3. Create a new API key or copy an existing one

  ### Configuring Credentials in n8n

  1. In your n8n workflow, add a CampaignKit node
  2. Click on **Credentials** > **Create New**
  3. Select **CampaignKit API**
  4. Enter your API key
  5. (Optional) Modify the Base URL if using a custom instance
  6. Click **Save**

  The credential will be automatically tested by making a request to `/v1/account/me`.

  ## Example Workflows

  ### Example 1: Validate Single Email

  ```
  Manual Trigger → CampaignKit (Validate Email) → Filter (is_valid = true) → Send Email
  ```

  1. Trigger workflow manually or via webhook
  2. Use **CampaignKit** node with **Validate Email** operation
  3. Filter results to only include valid emails
  4. Send confirmation email for valid addresses

  ### Example 2: Batch Validation with Notification

  ```
  Schedule Trigger → HTTP Request (Get Emails) → CampaignKit (Validate Batch) → Wait → CampaignKit (Get Job Status) → Send Notification
  ```

  1. Schedule workflow to run daily
  2. Fetch email list from your database/API
  3. Start batch validation with CampaignKit
  4. Wait for job to complete (or use webhook trigger)
  5. Get final job results
  6. Send summary notification

  ### Example 3: Webhook-Based Batch Validation

  ```
  CampaignKit Trigger (Job Completed) → Filter (deliverable_count > 0) → HTTP Request (Update Database) → Slack Notification
  ```

  1. **CampaignKit Trigger** listens for job completion
  2. Filter to only process jobs with deliverable emails
  3. Update your database with results
  4. Send Slack notification with summary

  ## Understanding Email Validation Scores

  CampaignKit assigns each email a score from 0-10:

  - **10**: Valid - All checks passed, email is deliverable
  - **9**: Valid but unverified - Syntax and MX checks passed, but SMTP verification failed
  - **2**: Risky - Email exists but may be a spam trap or temporary
  - **0**: Invalid - Email will bounce

  ### Key Output Fields

  - `is_valid`: Email is deliverable (score 9-10)
  - `is_invalid`: Email will bounce (score 0)
  - `is_risky`: Email is suspicious (score 2)
  - `is_disposable`: Temporary/disposable email service
  - `is_role_email`: Generic role address (info@, support@, etc.)
  - `is_catchall`: Domain accepts all email addresses
  - `is_blacklisted`: Email is on CampaignKit's blacklist
  - `did_you_mean`: Suggested correction for typos

  ## API Rate Limits

  CampaignKit API has the following limits:

  - **Authenticated requests**: Based on your account plan
  - **Batch validation**: Uses credits based on email count
  - **Webhook delivery**: Up to 5 retry attempts with exponential backoff

  Monitor your credit usage via the `/v1/account/billing/balance` endpoint or in your CampaignKit dashboard.

  ## Troubleshooting

  ### Credential Test Fails

  - Verify your API key is correct
  - Check that your CampaignKit account is active
  - Ensure the Base URL is correct (default: `https://api.campaignkit.cc`)

  ### Webhook Not Receiving Events

  - Ensure your n8n instance is accessible from the internet
  - Check that the workflow is activated
  - Verify webhook was created successfully in CampaignKit dashboard
  - Check n8n execution logs for incoming webhook requests

  ### Batch Job Stuck in "Pending"

  - Large batches may take time to process
  - Use the **Get Job Status** operation to monitor progress
  - Jobs process at approximately 100-500 emails/minute depending on validation type

  ### "Insufficient Credits" Error

  - Check your account credit balance
  - Purchase additional credits in your CampaignKit dashboard
  - Contact support@campaignkit.cc for billing assistance

  ## Development

  ### Building the Node

  ```bash
  npm install
  npm run build
  ```

  ### Local Testing

  1. Build the node
  2. Link it to your n8n installation:
     ```bash
     npm link
     cd ~/.n8n/nodes
     npm link n8n-nodes-campaignkit
     ```
  3. Restart n8n

  ### Project Structure

  ```
  n8n-nodes-campaignkit/
  ├── credentials/
  │   └── CampaignKitApi.credentials.ts
  ├── nodes/
  │   └── CampaignKit/
  │       ├── CampaignKit.node.ts
  │       └── CampaignKitTrigger.node.ts
  ├── types/
  │   └── CampaignKit.types.ts
  ├── package.json
  ├── tsconfig.json
  └── README.md
  ```

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [CampaignKit API Documentation](https://campaignkit.cc/docs)
  - [CampaignKit Dashboard](https://app.campaignkit.cc)
  - [CampaignKit Support](mailto:support@campaignkit.cc)

  ## Compatibility

  - n8n version: 0.220.0 or higher
  - Node.js version: 18.x or higher

  ## License

  [MIT](LICENSE)

  ## Version History

  ### 0.1.0 (Initial Release)
  - ✅ Validate Email operation
  - ✅ Validate Batch operation
  - ✅ Get Job Status operation
  - ✅ Job Completed webhook trigger
  - ✅ API Key authentication
  - ✅ Comprehensive error handling

  ## Support

  For issues related to:
  - **This n8n node**: Open an issue on [GitHub](https://github.com/yourusername/CampaignKit/issues)
  - **CampaignKit API**: Contact support@campaignkit.cc
  - **n8n platform**: Visit [n8n community forum](https://community.n8n.io)

ai_documentation_summary:
  {"purpose":"Validates email addresses individually or in batches using CampaignKit's API and provides detailed verification results including deliverability scores and risk indicators.","capabilities":["Validate single email addresses","Validate multiple email addresses in batch jobs","Retrieve status and results of validation jobs","Provide detailed email verification metrics (MX, SMTP, blacklist, disposable, role-based)","Offer email typo suggestions","Support webhook triggers for job completion events"],"authentication":"API key required","commonUseCases":["Email list cleaning before sending campaigns","Automated email verification workflows with batch processing","Integrating with CRM or database updates upon validation completion","Filtering invalid or risky emails before outreach"],"limitations":["Batch validation requires credits based on email count","Webhook delivery limited to 5 retry attempts with exponential backoff","Rate limits vary by account plan"],"relatedNodes":["n8n-nodes-base.manualTrigger","n8n-nodes-base.httpRequest","n8n-nodes-base.filter","n8n-nodes-base.scheduleTrigger","n8n-nodes-base.webhook"]}


node_type: @bedrijfsdatanl/n8n-nodes-prospectpro.prospectpro
package_name: @bedrijfsdatanl/n8n-nodes-prospectpro
display_name: ProspectPro
description: Get data from the ProspectPro API.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: ocjanssen
author_github_url: https://github.com/ocjanssen/n8n-nodes-prospectpro.git
npm_package_name: @bedrijfsdatanl/n8n-nodes-prospectpro
npm_version: 0.1.8
community_fetched_at: 2026-04-16T09:43:36.024Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "prospects",
      "options": [
        {
          "name": "Prospect",
          "value": "prospects"
        },
        {
          "name": "Contact",
          "value": "contacts"
        },
        {
          "name": "Event",
          "value": "events"
        },
        {
          "name": "Pageview",
          "value": "pageviews"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get prospect",
          "routing": {
            "request": {
              "url": "/prospects",
              "method": "GET"
            }
          },
          "description": "Retrieve a prospect from ProspectPro"
        },
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get prospects",
          "routing": {
            "request": {
              "url": "/prospects",
              "method": "GET"
            }
          },
          "description": "Retrieve prospects from ProspectPro"
        },
        {
          "name": "Update",
          "value": "patch",
          "action": "Update prospect",
          "routing": {
            "request": {
              "qs": {
                "no_header": 1
              },
              "url": "/prospects",
              "method": "PATCH"
            }
          },
          "description": "Update a prospect in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prospects"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get pageviews",
          "routing": {
            "request": {
              "url": "/pageviews",
              "method": "GET"
            }
          },
          "description": "Retrieve pageviews from ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pageviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get contacts",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "Retrieve contacts from ProspectPro"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create contact",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/contacts",
              "method": "POST"
            }
          },
          "description": "Create a contact in ProspectPro"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update contact",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/contacts",
              "method": "PATCH"
            }
          },
          "description": "Update a contact in ProspectPro"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete contact",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "DELETE"
            }
          },
          "description": "Delete a contact in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_many",
      "options": [
        {
          "name": "Get Many",
          "value": "get_many",
          "action": "Get events",
          "routing": {
            "request": {
              "url": "/events",
              "method": "GET"
            }
          },
          "description": "Retrieve events from ProspectPro"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create event",
          "routing": {
            "request": {
              "qs": {
                "no_header": "={{ $value && $value === true ? undefined : 1 }}"
              },
              "url": "/events",
              "method": "POST"
            }
          },
          "description": "Create an event in ProspectPro"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete event",
          "routing": {
            "request": {
              "url": "/events",
              "method": "DELETE"
            }
          },
          "description": "Delete an event in ProspectPro"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get prospect",
      "routing": {
        "request": {
          "url": "/prospects",
          "method": "GET"
        }
      },
      "description": "Retrieve a prospect from ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get prospects",
      "routing": {
        "request": {
          "url": "/prospects",
          "method": "GET"
        }
      },
      "description": "Retrieve prospects from ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Update",
      "value": "patch",
      "action": "Update prospect",
      "routing": {
        "request": {
          "qs": {
            "no_header": 1
          },
          "url": "/prospects",
          "method": "PATCH"
        }
      },
      "description": "Update a prospect in ProspectPro",
      "resource": "prospects"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get pageviews",
      "routing": {
        "request": {
          "url": "/pageviews",
          "method": "GET"
        }
      },
      "description": "Retrieve pageviews from ProspectPro",
      "resource": "pageviews"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get contacts",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "Retrieve contacts from ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create contact",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/contacts",
          "method": "POST"
        }
      },
      "description": "Create a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update contact",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/contacts",
          "method": "PATCH"
        }
      },
      "description": "Update a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete contact",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "DELETE"
        }
      },
      "description": "Delete a contact in ProspectPro",
      "resource": "contacts"
    },
    {
      "name": "Get Many",
      "value": "get_many",
      "action": "Get events",
      "routing": {
        "request": {
          "url": "/events",
          "method": "GET"
        }
      },
      "description": "Retrieve events from ProspectPro",
      "resource": "events"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create event",
      "routing": {
        "request": {
          "qs": {
            "no_header": "={{ $value && $value === true ? undefined : 1 }}"
          },
          "url": "/events",
          "method": "POST"
        }
      },
      "description": "Create an event in ProspectPro",
      "resource": "events"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete event",
      "routing": {
        "request": {
          "url": "/events",
          "method": "DELETE"
        }
      },
      "description": "Delete an event in ProspectPro",
      "resource": "events"
    }
  ]

npm_readme:
  # n8n-nodes-prospectpro

  ![n8n.io - Workflow Automation](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-logo.png)

  An n8n community node for integrating with the [ProspectPro API](https://docs.prospectpro.nl/). This node allows you to manage and retrieve prospect, contact, pageview, and event data directly within your n8n workflows.

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

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Select **Install**
  3. Enter `n8n-nodes-prospectpro`
  4. Agree to the risks and select **Install**

  ### Docker (Quick Start)

  Run n8n with the ProspectPro node pre-installed:

  ```bash
  ./run.sh
  ```

  Then access n8n at http://localhost:5679

  To update the node after making changes:
  ```bash
  npm run build && docker-compose restart
  ```

  ### Manual Installation

  To get started:

  ```bash
  npm install n8n-nodes-prospectpro
  ```

  ## Credentials

  You need a ProspectPro API key to use this node:

  1. Sign up at [ProspectPro](https://www.prospectpro.nl/)
  2. Get your API key from your account dashboard
  3. In n8n, create new credentials of type "ProspectPro API"
  4. Enter your API key

  ## Supported Operations

  ### Prospects Resource

  #### Get Prospect
  Retrieve a single prospect from ProspectPro.

  #### Get Many Prospects
  Search and retrieve multiple prospects with filtering options.

  #### Update Prospect
  Update prospect information in ProspectPro.

  ### Pageviews Resource

  #### Get Many Pageviews
  Retrieve pageview data for prospects.

  ### Contacts Resource

  #### Get Many Contacts
  Retrieve contact information.

  #### Create Contact
  Create a new contact in ProspectPro.

  #### Update Contact
  Update existing contact information.

  #### Delete Contact
  Remove a contact from ProspectPro.

  ### Events Resource

  #### Get Many Events
  Retrieve event data.

  #### Create Event
  Create a new event in ProspectPro.

  #### Delete Event
  Remove an event from ProspectPro.

  ## ProspectPro Trigger Node

  The package also includes a trigger node that can poll for new or updated prospects. This node supports:

  - Filtering by qualification status
  - Filtering by tags
  - Filtering by audiences
  - Filtering by owner

  The trigger will automatically track the last time it ran to only retrieve new or updated prospects.

  ## Usage Examples

  ### Basic Prospect Search
  Retrieve prospects from ProspectPro:
  ```json
  {
    "resource": "prospects",
    "operation": "get_many",
    "additionalFields": {
      "rows": 10
    }
  }
  ```

  ### Create Contact for a Prospect
  Create a new contact associated with a prospect:
  ```json
  {
    "resource": "contacts",
    "operation": "create",
    "prospectId": "123456",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com"
  }
  ```

  ### Retrieve Recent Pageviews
  Get recent pageviews data:
  ```json
  {
    "resource": "pageviews",
    "operation": "get_many",
    "additionalFields": {
      "rows": 20,
      "sort_by": "timestamp",
      "sort_order": "desc"
    }
  }
  ```

  ### Create a Custom Event
  Log a custom event in ProspectPro:
  ```json
  {
    "resource": "events",
    "operation": "create",
    "prospectId": "123456",
    "eventType": "meeting_scheduled",
    "eventData": {
      "time": "2023-05-15T14:30:00Z",
      "notes": "Initial consultation"
    }
  }
  ```

  ## Trigger Node Example
  Create an automated workflow that triggers when new qualified prospects are found:
  ```json
  {
    "label": 1,
    "tags": ["high-value", "inbound"],
    "owner": "12345678"
  }
  ```

  ## API Documentation

  For detailed API documentation, visit [docs.prospectpro.nl](https://docs.prospectpro.nl/).

  ## Compatibility

  - **n8n version**: 0.187.0 or later
  - **Node.js version**: 20.15 or later

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [ProspectPro API Documentation](https://docs.prospectpro.nl/)

  ## Development

  ### Prerequisites

  - Node.js 20.15 or later
  - npm or pnpm

  ### Setup

  ```bash
  # Clone the repository
  git clone [your-repository-url]

  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Lint the code
  npm run lint
  ```

  ### Testing

  To test the node locally:

  1. Build the node: `npm run build`
  2. Link it to your global n8n installation: `npm link`
  3. In your n8n directory: `npm link n8n-nodes-prospectpro`
  4. Start n8n: `n8n start`

  OR

  ```bash
  ./run.sh
  ```

  ## License

  [MIT](LICENSE.md)

  ## Support

  If you encounter any issues or have questions:

  1. Check the [ProspectPro API documentation](https://docs.prospectpro.nl/)
  2. Review the [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  3. Open an issue in this repository

  [ProspectPro](https://www.prospectpro.nl/) is a part of [Bedrijfsdata.nl](https://www.bedrijfsdata.nl/)

ai_documentation_summary:
  {"purpose":"An n8n community node that integrates with the ProspectPro API to manage and retrieve prospect, contact, pageview, and event data within workflows.","capabilities":["Retrieve single prospect data","Search and retrieve multiple prospects with filtering","Update prospect information","Retrieve pageview data","Retrieve contact information","Create new contacts","Update existing contacts","Delete contacts","Retrieve event data","Create new events"],"authentication":"API key required","commonUseCases":["Automated lead management workflows","Tracking prospect engagement via pageviews","Creating and updating CRM contacts","Logging custom events for sales tracking","Automated prospect discovery and qualification"],"limitations":["Requires external ProspectPro API key and account","Requires n8n version 0.187.0 or later","Requires Node.js version 20.15 or later","Community node (may have limited support compared to official nodes)"],"relatedNodes":["ProspectPro Trigger Node","ProspectPro API Credentials","n8n Community Nodes"]}


node_type: n8n-nodes-graphorlm.graphor
package_name: n8n-nodes-graphorlm
display_name: Graphor
description: Interact with Graphor API for document processing, RAG, and AI-powered document chat
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: thiagohirano
author_github_url: https://github.com/thiagohirano/
npm_package_name: n8n-nodes-graphorlm
npm_version: 0.1.22
community_fetched_at: 2026-04-16T09:43:36.025Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat",
          "description": "Ask questions about your documents"
        },
        {
          "name": "Extraction",
          "value": "extraction",
          "description": "Extract structured data from documents"
        },
        {
          "name": "Source",
          "value": "source",
          "description": "Manage document sources"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "askQuestion",
      "options": [
        {
          "name": "Ask Question",
          "value": "askQuestion",
          "action": "Ask a question about your documents",
          "description": "Ask a question about your documents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "extractData",
      "options": [
        {
          "name": "Extract Data",
          "value": "extractData",
          "action": "Extract structured data from documents",
          "description": "Extract structured data from documents using JSON Schema"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "extraction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a source",
          "description": "Delete a source from your project"
        },
        {
          "name": "Get Elements",
          "value": "getElements",
          "action": "Get source elements",
          "description": "Get structured elements from a processed source"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all sources",
          "description": "List all sources in your project"
        },
        {
          "name": "Process",
          "value": "process",
          "action": "Process a source",
          "description": "Process a source with OCR/parsing"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload a file",
          "description": "Upload a file to your project"
        },
        {
          "name": "Upload From GitHub",
          "value": "uploadGithub",
          "action": "Upload from Git Hub",
          "description": "Upload content from a GitHub repository"
        },
        {
          "name": "Upload From URL",
          "value": "uploadUrl",
          "action": "Upload from URL",
          "description": "Upload content from a web page URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "source"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Ask Question",
      "value": "askQuestion",
      "action": "Ask a question about your documents",
      "description": "Ask a question about your documents",
      "resource": "chat"
    },
    {
      "name": "Extract Data",
      "value": "extractData",
      "action": "Extract structured data from documents",
      "description": "Extract structured data from documents using JSON Schema",
      "resource": "extraction"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a source",
      "description": "Delete a source from your project",
      "resource": "source"
    },
    {
      "name": "Get Elements",
      "value": "getElements",
      "action": "Get source elements",
      "description": "Get structured elements from a processed source",
      "resource": "source"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all sources",
      "description": "List all sources in your project",
      "resource": "source"
    },
    {
      "name": "Process",
      "value": "process",
      "action": "Process a source",
      "description": "Process a source with OCR/parsing",
      "resource": "source"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload a file",
      "description": "Upload a file to your project",
      "resource": "source"
    },
    {
      "name": "Upload From GitHub",
      "value": "uploadGithub",
      "action": "Upload from Git Hub",
      "description": "Upload content from a GitHub repository",
      "resource": "source"
    },
    {
      "name": "Upload From URL",
      "value": "uploadUrl",
      "action": "Upload from URL",
      "description": "Upload content from a web page URL",
      "resource": "source"
    }
  ]

npm_readme:
  # n8n-nodes-graphorlm

  [![npm version](https://badge.fury.io/js/n8n-nodes-graphorlm.svg)](https://www.npmjs.com/package/n8n-nodes-graphorlm)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  This is an n8n community node that lets you interact with [Graphor](https://graphorlm.com) - an intelligent document processing platform with RAG pipelines, document chat, and data extraction capabilities.

  [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 n8n-nodes-graphorlm
  ```

  ### n8n Desktop/Cloud

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-graphorlm` and agree to the risks
  4. Click **Install**

  ## Nodes

  This package includes two nodes:

  1. **Graphor** - Full-featured node with all operations
  2. **Graphor Tool** - Simplified node optimized for AI Agents

  Both nodes can be used as tools with n8n AI Agents (like the AI Agent node with OpenAI, Anthropic, etc.)

  ## Operations

  ### Chat
  - **Ask Question**: Ask questions about your documents using natural language with conversational memory support

  ### Extraction
  - **Extract Data**: Extract structured data from documents using JSON Schema definitions

  ### Flow
  - **List**: List all flows in your project
  - **Run**: Execute a deployed RAG flow with a query
  - **Deploy**: Deploy a flow to make it accessible via API

  ### Source
  - **List**: List all sources in your project
  - **Upload File**: Upload a file (PDF, DOCX, images, audio, video)
  - **Upload From URL**: Ingest content from a web page URL
  - **Upload From GitHub**: Ingest content from a public GitHub repository
  - **Upload From YouTube**: Ingest content from a YouTube video
  - **Process**: Process a source with OCR/parsing (Basic, Hi-Res, Hi-Res FT, MAI, GraphorLM)
  - **Get Elements**: Get structured elements from a processed source
  - **Delete**: Delete a source from your project

  ## Credentials

  To use this node, you need a Graphor API token:

  1. Log in to your [Graphor account](https://app.graphorlm.com)
  2. Go to **Settings** > **API Tokens**
  3. Create a new API token
  4. Copy the token (it starts with `grlm_`)

  ## Supported File Types

  - **Documents**: PDF, DOC, DOCX, ODT, TXT, MD, HTML
  - **Presentations**: PPT, PPTX
  - **Spreadsheets**: CSV, TSV, XLS, XLSX
  - **Images**: PNG, JPG, JPEG, TIFF, BMP, HEIC
  - **Audio**: MP3, WAV, M4A, OGG, FLAC
  - **Video**: MP4, MOV, AVI, MKV, WEBM

  ## Processing Methods

  | Method | Description |
  |--------|-------------|
  | **Basic** | Fast processing with heuristic classification |
  | **Hi-Res** | High resolution processing with advanced layout detection |
  | **Hi-Res FT** | Fine-tuned high resolution processing |
  | **MAI** | Multi-modal AI processing |
  | **GraphorLM** | Graphor proprietary processing method |

  ## Compatibility

  - n8n version 1.0.0 or later
  - Node.js 18.0.0 or later

  ## Resources

  - [Graphor Introduction](https://docs.graphorlm.com/introduction)
  - [Graphor Documentation](https://docs.graphorlm.com)
  - [Graphor API Reference](https://docs.graphorlm.com/api-reference/overview)
  - [API Tokens Guide](https://docs.graphorlm.com/guides/api-tokens)
  - [Data Ingestion Guide](https://docs.graphorlm.com/guides/data-ingestion)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Graphor API for document processing, RAG pipelines, and AI-powered document chat.","capabilities":["Ask questions about documents using natural language with conversational memory","Extract structured data from documents using JSON Schema definitions","List and execute deployed RAG flows","Deploy flows to make them accessible via API","List and manage document sources","Upload files from local disk, URLs, GitHub, and YouTube","Process documents with various methods (Basic, Hi-Res, Hi-Res FT, MAI, GraphorLM)","Retrieve structured elements from processed sources","Delete sources from projects"],"authentication":"API key required (Graphor API token starting with 'grlm_')","commonUseCases":["Document Q&A with conversational memory","Structured data extraction from PDFs and other documents","Document ingestion and processing for RAG applications","AI agent tool integration for document analysis"],"limitations":["Requires a paid Graphor account with API token access","Processing methods vary in complexity and resource requirements","Some advanced features may require GraphorLM-specific processing"],"relatedNodes":["n8n-nodes-core.aiAgent","n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: n8n-nodes-winston-ai.winstonAi
package_name: n8n-nodes-winston-ai
display_name: Winston AI
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: philippe_vincent_dev
author_github_url: https://github.com/gowinston-ai/winston-ai-n8n.git
npm_package_name: n8n-nodes-winston-ai
npm_version: 1.0.8
community_fetched_at: 2026-04-16T09:43:36.026Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  AI detector with industry leading accuracy rates in detecting use of AI in text and images. The Winston AI tools also offers a robust plagiarism checker to help maintain integrity.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "aiTextDetection",
      "options": [
        {
          "name": "AI Text Detection",
          "value": "aiTextDetection"
        },
        {
          "name": "AI Image Detection",
          "value": "aiImageDetection"
        },
        {
          "name": "Plagiarism",
          "value": "plagiarism"
        },
        {
          "name": "Text Compare",
          "value": "textCompare"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scan-ai-text",
      "options": [
        {
          "name": "Scan AI Generated Text",
          "value": "scan-ai-text",
          "action": "Scan AI generated text",
          "routing": {
            "request": {
              "url": "/v2/ai-content-detection",
              "method": "POST"
            }
          },
          "description": "Analyze text to detect AI-generated content. The Human Score we give is a metric used by Winston AI to estimate the likelihood that a given piece of content was generated by an AI tool versus being written by a human."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiTextDetection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scan-ai-image",
      "options": [
        {
          "name": "Scan AI Generated Image",
          "value": "scan-ai-image",
          "action": "Scan AI generated image",
          "routing": {
            "request": {
              "url": "/v2/image-detection",
              "method": "POST"
            }
          },
          "description": "Our image detection feature enables AI-generated image detection by verifying image metadata and using a machine learning system trained to differentiate between human and AI-generated images"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiImageDetection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scan-plagiarism",
      "options": [
        {
          "name": "Scan for Plagiarism",
          "value": "scan-plagiarism",
          "action": "Scan for plagiarism",
          "routing": {
            "request": {
              "url": "/v2/plagiarism",
              "method": "POST"
            }
          },
          "description": "Winston AI’s plagiarism API is a powerful tool designed to check text for plagiarism by scouring the internet for similar content. It queries multiple websites and compares the input text with the content found on these websites. This can be particularly useful in academic settings, content creation, legal scenarios or any other situation where originality of content is required."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plagiarism"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "compare-texts",
      "options": [
        {
          "name": "Compare Texts",
          "value": "compare-texts",
          "action": "Compare texts",
          "routing": {
            "request": {
              "url": "/v2/text-compare",
              "method": "POST"
            }
          },
          "description": "Compare two texts to find similarities and differences between them. This endpoint analyzes both texts and returns detailed information about matching content, word counts, and similarity scores."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "textCompare"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Scan AI Generated Text",
      "value": "scan-ai-text",
      "action": "Scan AI generated text",
      "routing": {
        "request": {
          "url": "/v2/ai-content-detection",
          "method": "POST"
        }
      },
      "description": "Analyze text to detect AI-generated content. The Human Score we give is a metric used by Winston AI to estimate the likelihood that a given piece of content was generated by an AI tool versus being written by a human.",
      "resource": "aiTextDetection"
    },
    {
      "name": "Scan AI Generated Image",
      "value": "scan-ai-image",
      "action": "Scan AI generated image",
      "routing": {
        "request": {
          "url": "/v2/image-detection",
          "method": "POST"
        }
      },
      "description": "Our image detection feature enables AI-generated image detection by verifying image metadata and using a machine learning system trained to differentiate between human and AI-generated images",
      "resource": "aiImageDetection"
    },
    {
      "name": "Scan for Plagiarism",
      "value": "scan-plagiarism",
      "action": "Scan for plagiarism",
      "routing": {
        "request": {
          "url": "/v2/plagiarism",
          "method": "POST"
        }
      },
      "description": "Winston AI’s plagiarism API is a powerful tool designed to check text for plagiarism by scouring the internet for similar content. It queries multiple websites and compares the input text with the content found on these websites. This can be particularly useful in academic settings, content creation, legal scenarios or any other situation where originality of content is required.",
      "resource": "plagiarism"
    },
    {
      "name": "Compare Texts",
      "value": "compare-texts",
      "action": "Compare texts",
      "routing": {
        "request": {
          "url": "/v2/text-compare",
          "method": "POST"
        }
      },
      "description": "Compare two texts to find similarities and differences between them. This endpoint analyzes both texts and returns detailed information about matching content, word counts, and similarity scores.",
      "resource": "textCompare"
    }
  ]

npm_readme:
  # n8n-nodes-winston-ai ⚡️

  [![CI](https://github.com/gowinston-ai/winston-ai-n8n/actions/workflows/CI.yml/badge.svg)](https://github.com/gowinston-ai/winston-ai-n8n/actions/workflows/CI.yml)
  ![TypeScript](https://img.shields.io/badge/code-TypeScript-blue?logo=typescript)

  This is an n8n community node that lets you access all Winston AI analysis endpoints in your n8n workflows.

  [Winston AI](https://gowinston.ai/) provides industry-leading tools to:

  * Detect whether a text was generated by AI or written by a human
  * Detect AI-generated images
  * Scan content for plagiarism on the public web
  * Compare two texts for similarity

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

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

  ---

  ## Installation 💻

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


  ## Operations 🕹️

  | Resource           | Operation (value)      | Description |
  |--------------------|------------------------|-------------|
  | AI Text Detection  | Scan AI generated text (`scan-ai-text`) | Analyse a text and return Winston AI’s *Human Score* plus optional sentence-level scores. |
  | AI Image Detection | Scan AI generated image (`scan-ai-image`) | Determine the likelihood that an image was generated by AI, plus metadata such as EXIF, MIME type and watermark detection. |
  | Plagiarism         | Scan for plagiarism (`scan-plagiarism`) | Check text for plagiarism by searching the web for matching content. Optional language / country filtering and source exclusion supported. |
  | Text Compare       | Compare texts (`compare-texts`) | Compare two texts and return a similarity score and detailed match information. |

  ## Credentials 🔐

  The node requires a Winston AI API key.

  1. Sign in to the [Winston AI dashboard](https://dev.gowinston.ai/) and generate an API key.
  2. In n8n, create new **Winston AI API** credentials:
     * Field **API Key** → paste your key.
  3. Use these credentials in any Winston AI node. The key will be sent in the `Authorization` header as `Bearer <token>`.

  ## Compatibility

  * Minimum n8n version: **1.0.0** (tested on 1.24)
  * Requires Node.js **≥ 20.15**

  ## Usage 📊

  1. Add the **Winston AI** node to your workflow.
  2. Choose a *Resource* and *Operation*.
  3. Configure the mandatory fields (e.g. *Text*, *Image URL*, *First Text*, *Second Text*).
  4. Execute the node. The JSON response from the Winston AI API is returned in the output data.

  Example: Detect AI-generated text
  ```text
  Resource: AI Text Detection
  Operation: Scan AI generated text
  Text: "This paragraph was written by ChatGPT…"
  → Returns score, sentence-level analysis, attack detection flags, credits info, etc.
  ```

  ## Resources

  * Winston AI API Docs: 
    * [AI text detection](https://docs.gowinston.ai/api-reference/v2/ai-content-detection/post)
    * [AI image detection](https://docs.gowinston.ai/api-reference/v2/image-detection/post)
    * [Plagiarism](https://docs.gowinston.ai/api-reference/v2/plagiarism/post)
    * [Text compare](https://docs.gowinston.ai/api-reference/v2/text-compare/post)
  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## Version history

  | Version | Date       | Notes |
  |---------|------------|-------|
  | 1.0.0   | 2025-07-25 | Initial release with text detection, image detection, plagiarism scan and text compare. |

ai_documentation_summary:
  {"purpose":"Analyze text, images, and content for AI generation, plagiarism, and similarity using Winston AI's industry-leading detection tools.","capabilities":["Detect AI-generated text with human score and sentence-level analysis","Detect AI-generated images with EXIF, MIME type, and watermark analysis","Scan text for plagiarism against the public web","Compare two texts for similarity with detailed match information","Return attack detection flags and credits information"],"authentication":"API key required (Bearer token in Authorization header)","commonUseCases":["Verify if content was written by AI or a human","Ensure image authenticity in content moderation","Check for plagiarism in academic or professional writing","Compare document similarity for duplicate detection"],"limitations":["Requires Winston AI API key for all operations","Requires Node.js version 20.15 or higher","Minimum n8n version is 1.0.0 (tested on 1.24)"],"relatedNodes":["HTTP Request","Credentials (Winston AI API)"]}


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

updated_at: 2026-04-16 09:43:36
author_name: alexanderberkov
author_github_url: https://github.com/deutschlandgpt/deutschlandgpt-n8n.git
npm_package_name: @deutschlandgpt/n8n-nodes-deutschlandgpt
npm_version: 0.1.2
community_fetched_at: 2026-04-16T09:43:36.027Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Model",
          "value": "model"
        },
        {
          "name": "Chat",
          "value": "chat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "fetch_models",
      "options": [
        {
          "name": "Fetch Models",
          "value": "fetch_models",
          "action": "Fetch models",
          "routing": {
            "request": {
              "url": "v1/models",
              "method": "GET"
            }
          },
          "description": "Fetch Models from DeutschlandGPT"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "model"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send_chat_message",
      "options": [
        {
          "name": "Send Chat Message",
          "value": "send_chat_message",
          "action": "Send chat message",
          "routing": {
            "request": {
              "url": "v1/chat/completions",
              "body": {
                "model": "={{$parameter[\"model\"]}}",
                "messages": [
                  {
                    "role": "user",
                    "content": "={{$parameter[\"user_message\"]}}"
                  }
                ]
              },
              "json": true,
              "method": "POST"
            }
          },
          "description": "Send a message to the chat"
        },
        {
          "name": "Send Chat Message with System Prompt",
          "value": "send_chat_message_with_system_prompt",
          "action": "Send chat message with system prompt",
          "routing": {
            "request": {
              "url": "v1/chat/completions",
              "body": {
                "model": "={{$parameter[\"model\"]}}",
                "messages": [
                  {
                    "role": "system",
                    "content": "={{$parameter[\"system_prompt\"]}}"
                  },
                  {
                    "role": "user",
                    "content": "={{$parameter[\"user_message\"]}}"
                  }
                ]
              },
              "json": true,
              "method": "POST"
            }
          },
          "description": "Send a message to the chat with a system prompt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Fetch Models",
      "value": "fetch_models",
      "action": "Fetch models",
      "routing": {
        "request": {
          "url": "v1/models",
          "method": "GET"
        }
      },
      "description": "Fetch Models from DeutschlandGPT",
      "resource": "model"
    },
    {
      "name": "Send Chat Message",
      "value": "send_chat_message",
      "action": "Send chat message",
      "routing": {
        "request": {
          "url": "v1/chat/completions",
          "body": {
            "model": "={{$parameter[\"model\"]}}",
            "messages": [
              {
                "role": "user",
                "content": "={{$parameter[\"user_message\"]}}"
              }
            ]
          },
          "json": true,
          "method": "POST"
        }
      },
      "description": "Send a message to the chat",
      "resource": "chat"
    },
    {
      "name": "Send Chat Message with System Prompt",
      "value": "send_chat_message_with_system_prompt",
      "action": "Send chat message with system prompt",
      "routing": {
        "request": {
          "url": "v1/chat/completions",
          "body": {
            "model": "={{$parameter[\"model\"]}}",
            "messages": [
              {
                "role": "system",
                "content": "={{$parameter[\"system_prompt\"]}}"
              },
              {
                "role": "user",
                "content": "={{$parameter[\"user_message\"]}}"
              }
            ]
          },
          "json": true,
          "method": "POST"
        }
      },
      "description": "Send a message to the chat with a system prompt",
      "resource": "chat"
    }
  ]

npm_readme:
  # n8n-nodes-deutschlandgpt

  This is an n8n community node. It lets you use the DeutschlandGPT API in your n8n workflows.

  DeutschlandGPT is an AI Platform where different LLMs can be used GDPR compliant without risks of losing data.

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

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

  ## Installation

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

  ## Operations

  - Fetch Models: Query all available models in the DeutschlandGPT API.
  - Send Chat Message: Send a chat message to a certain model.
  - Send Chat Message with System Prompt: Send a chat message to a certain model with a defined system prompt.

  ## Credentials

  To register the node you'll need an API Key. You can create an API Key at the [DeutschlandGPT Platform](https://platform.deutschlandgpt.de/). For this you'll need to sign up and provide a payment method. You can then set up the credentials inside of n8n.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [DeutschlandGPT documentation](https://platform.deutschlandgpt.de/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the DeutschlandGPT API to interact with GDPR-compliant LLMs in workflow automation.","capabilities":["Fetch available models from the API","Send chat messages to specific models","Send chat messages with custom system prompts"],"authentication":"API key required (must be obtained from DeutschlandGPT Platform with payment method)","commonUseCases":["GDPR-compliant AI chat interactions","Enterprise data processing with secure LLMs","Workflow automation using compliant AI models"],"limitations":["Requires payment method setup on the platform","Community node (may have fewer features than official nodes)"],"relatedNodes":["n8n HTTP Request","n8n Code","n8n Text"]}


node_type: n8n-nodes-scrapingfish.scrapingfish
package_name: n8n-nodes-scrapingfish
display_name: Scrapingfish
description: Interact with the Scrapingfish API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: maciejw94
author_github_url: https://github.com/Narf-AI/n8n-scrapingfish.git
npm_package_name: n8n-nodes-scrapingfish
npm_version: 0.1.3
community_fetched_at: 2026-04-16T09:43:36.028Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-scrapingfish

  This is an n8n community node for [Scrapingfish](https://scrapingfish.com/), a web scraping API. It allows you to scrape web pages, render JavaScript, and extract structured data directly within 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)
  [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 a single operation to scrape a URL with various options:

  - **URL**: The target URL to scrape.
  - **Render JS**: Enable to render JavaScript on the page.
  - **Additional Fields**:
    - **Extraction Rules**: Define CSS selectors to extract structured JSON data.
    - **JS Scenario**: Execute a sequence of browser actions.
    - **Headers**: Forward custom HTTP headers.
    - **Timeouts**: Configure request, trial, and rendering timeouts.

  ## Credentials

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

  1. Sign up at [scrapingfish.com](https://scrapingfish.com/) to get your API key.
  2. In your n8n instance, go to **Credentials > New**.
  3. Search for "Scrapingfish API" and add your API key.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Scrapingfish API Documentation](https://scrapingfish.com/docs)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community node that interacts with the Scrapingfish API to scrape web pages, render JavaScript, and extract structured data within n8n workflows.","capabilities":["Scrape any URL","Render JavaScript on the page","Extract structured JSON data using CSS selectors","Execute custom browser actions via JS scenarios","Forward custom HTTP headers","Configure request, trial, and rendering timeouts"],"authentication":"API key required","commonUseCases":["Extracting dynamic content from websites","Parsing e-commerce product data","Monitoring price changes across multiple sites","Automating data collection from JavaScript-heavy pages"],"limitations":["Requires a paid Scrapingfish API key","Limited to Scrapingfish's supported domains and features","No built-in error handling for failed extractions"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Code"]}


node_type: @dropinblog/n8n-nodes-dropinblog.dropInBlogTrigger
package_name: @dropinblog/n8n-nodes-dropinblog
display_name: DropInBlog Trigger
description: Starts the workflow when a DropInBlog event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: jason18505
author_github_url: https://github.com/DropInBlog/n8n-nodes-dropinblog.git
npm_package_name: @dropinblog/n8n-nodes-dropinblog
npm_version: 1.0.11
community_fetched_at: 2026-04-16T09:43:36.029Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-dropinblog

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

  DropInBlog is an SEO-friendly blog solution that embeds into any website.

  [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

  ### DropInBlog Node

  - **Post**
    - **Create** - Create a new blog post with title, content, and optional fields:
      - Status
      - Slug
      - Featured image URL
      - SEO title and description
      - Keyword
      - Author name
      - Category names
    - **Get** - Retrieve a post by its numeric ID or slug
    - **Search** - Search blog posts with optional filters:
      - Status (Draft/Published)
      - Limit

  ### DropInBlog Trigger Node

  - **Post Published** - Triggers when a post is published in your DropInBlog

  ## Credentials

  This node uses OAuth2 authentication with DropInBlog. You'll need to:

  1. Contact [DropInBlog support](https://dropinblog.com/contact/) to request OAuth credentials for your account
  2. Configure the OAuth2 credentials in n8n with the Client ID and Client Secret provided
  3. Complete the OAuth authorization flow

  ## Compatibility

  Tested with n8n version 1.48.0 and above. Requires Node.js 18.10 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [DropInBlog API documentation](https://dropinblog.readme.io/reference/api-reference)
  * [DropInBlog website](https://dropinblog.com)

ai_documentation_summary:
  {"purpose":"The DropInBlog Trigger node starts an n8n workflow automatically when a blog post is published in a DropInBlog account.","capabilities":["Triggers workflow on post publication events","Supports OAuth2 authentication with DropInBlog","Integrates with DropInBlog's blog management system"],"authentication":"OAuth2 required (Client ID and Client Secret obtained via DropInBlog support)","commonUseCases":["Automatically process new blog posts upon publication","Send notifications when content is published","Trigger downstream actions based on blog updates"],"limitations":["Requires manual OAuth credential setup via DropInBlog support","Limited to triggering on post publication events only (no manual trigger operations)"],"relatedNodes":["DropInBlog Post Node","DropInBlog Get Node","DropInBlog Search Node"]}


node_type: @nvoip/n8n-nodes-nvoip.nvoip
package_name: @nvoip/n8n-nodes-nvoip
display_name: Nvoip
description: Make calls, send WhatsApp and SMS.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: lucasnaves
author_github_url: https://github.com/Nvoip/nvoip-n8n.git
npm_package_name: @nvoip/n8n-nodes-nvoip
npm_version: 0.1.11
community_fetched_at: 2026-04-16T09:43:36.030Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sms",
      "options": [
        {
          "name": "SMS",
          "value": "sms",
          "description": "SMS actions"
        },
        {
          "name": "WhatsApp",
          "value": "whatsapp",
          "description": "WhatsApp actions"
        },
        {
          "name": "Call",
          "value": "call",
          "description": "Call actions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "makeCall",
      "options": [
        {
          "name": "Make Call",
          "value": "makeCall",
          "action": "Make a phone call",
          "description": "Make an outbound call using Nvoip"
        },
        {
          "name": "Send Interactive Voice Broadcast",
          "value": "sendVoiceBlastInteractive",
          "action": "Send interactive voice broadcast",
          "description": "Send an automated voice message with the ability to receive DTMF input"
        },
        {
          "name": "Send Voice Broadcast",
          "value": "sendVoiceBlast",
          "action": "Send voice broadcast",
          "description": "Send an automated voice message delivered as audio file or TTS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendSms",
      "options": [
        {
          "name": "Send SMS",
          "value": "sendSms",
          "action": "Send SMS",
          "description": "Send a customized SMS message to a customer"
        },
        {
          "name": "Send SMS (Template)",
          "value": "sendTemplateSms",
          "action": "Send template SMS",
          "description": "Send an SMS using a predefined template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendWhatsapp",
      "options": [
        {
          "name": "Send WhatsApp (With HSM)",
          "value": "sendWhatsapp",
          "action": "Send whatsapp message",
          "description": "Send WhatsApp template messages using Nvoip for automated communication"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whatsapp"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Make Call",
      "value": "makeCall",
      "action": "Make a phone call",
      "description": "Make an outbound call using Nvoip",
      "resource": "call"
    },
    {
      "name": "Send Interactive Voice Broadcast",
      "value": "sendVoiceBlastInteractive",
      "action": "Send interactive voice broadcast",
      "description": "Send an automated voice message with the ability to receive DTMF input",
      "resource": "call"
    },
    {
      "name": "Send Voice Broadcast",
      "value": "sendVoiceBlast",
      "action": "Send voice broadcast",
      "description": "Send an automated voice message delivered as audio file or TTS",
      "resource": "call"
    },
    {
      "name": "Send SMS",
      "value": "sendSms",
      "action": "Send SMS",
      "description": "Send a customized SMS message to a customer",
      "resource": "sms"
    },
    {
      "name": "Send SMS (Template)",
      "value": "sendTemplateSms",
      "action": "Send template SMS",
      "description": "Send an SMS using a predefined template",
      "resource": "sms"
    },
    {
      "name": "Send WhatsApp (With HSM)",
      "value": "sendWhatsapp",
      "action": "Send whatsapp message",
      "description": "Send WhatsApp template messages using Nvoip for automated communication",
      "resource": "whatsapp"
    }
  ]

npm_readme:
  # 📡 @nvoip/n8n-nodes-nvoip

  [![Node.js Version](https://img.shields.io/badge/Node.js-20+-green)](https://nodejs.org/)
  [![n8n](https://img.shields.io/badge/n8n-supported-brightgreen)](https://n8n.io/)
  [![License](https://img.shields.io/badge/License-MIT-blue)](LICENSE)

  Integração da **Nvoip** com o **[n8n](https://n8n.io/)** para automação de comunicações:  
  ✅ Envio de SMS  
  ✅ Mensagens via WhatsApp  
  ✅ Ligações telefônicas  
  ✅ Torpedos de voz (simples e interativos)  

  ---

  ## 🚀 Introdução
  Este pacote fornece um **node personalizado para o n8n**, permitindo integrar de forma simples e rápida os serviços da **Nvoip** em fluxos de automação.  
  O projeto foi desenvolvido em **TypeScript**, com suporte a **OAuth2** para autenticação segura e diversas funcionalidades de comunicação.

  ---

  ## ⚙️ Como usar o node

  Siga este passo a passo para configurar e usar o node @nvoip/n8n-nodes-nvoip:

  1. **Instale o node da comunidade**  
     - Abra o n8n e vá até a aba de **Nodes da Comunidade**.  
     - Procure por `@nvoip/n8n-nodes-nvoip` e instale.

  2. **Adicione o node no seu fluxo**  
     - Arraste o node para o seu canvas de automação.  
     - Clique nele para abrir as configurações.

  3. **Configure suas credenciais**  
     - Na aba de **Login/Autenticação**, insira suas credenciais da Nvoip.  
     - O node utiliza **OAuth2**, garantindo acesso seguro à API da Nvoip.

  4. **Configure a ação desejada**  
     - **SMS**: Defina o número do destinatário e a mensagem (suporte a variáveis e templates).  
     - **WhatsApp**: Configure o envio de mensagens via API oficial, com suporte a templates predefinidos.  
     - **Ligações telefônicas**: Escolha o ramal de origem, número de destino e configure transferências se necessário.  
     - **Torpedo de voz**: Selecione **Simples** (texto convertido em áudio) ou **Interativo** (envio de link para áudio público).

  5. **Teste o fluxo**  
     - Execute o node no modo de teste.  
     - Verifique logs e mensagens enviadas para garantir que a integração está funcionando corretamente.

  6. **Salve e publique seu fluxo**  
     - Quando tudo estiver configurado, salve o fluxo e publique para produção.


  ## SMS

  -	Envio de mensagens customizadas
  	
  -	Suporte a variáveis e templates de SMS

  ## WhatsApp

  -	Envio de mensagens via API oficial
  	
  -	Suporte a templates predefinidos

  ## Ligações Telefônicas

  -	Disparo de chamadas via ramal
  	
  -	Conexão entre usuário e cliente final
  	
  -	Implementação inicial do recurso transferTrue (em desenvolvimento)
  	
  -	Torpedo de Voz
  	
  -	Simples: texto convertido em áudio
  	
  -	Interativo: envio de link para áudio público

  ## 📌 Conclusão

  O @nvoip/n8n-nodes-nvoip amplia o poder de automação no n8n, permitindo gerenciar toda a comunicação multicanal da Nvoip em um único node.
  A arquitetura modular garante extensibilidade e manutenção simples, abrindo espaço para futuras evoluções.

ai_documentation_summary:
  {"purpose":"This n8n community node integrates Nvoip services to automate SMS, WhatsApp messaging, phone calls, and voice torpedos within workflow executions.","capabilities":["Send custom SMS messages with variable and template support","Send WhatsApp messages via official API with predefined templates","Initiate phone calls from specific trunks","Implement voice torpedo features (simple text-to-audio and interactive public audio links)","Support for call transfers (in development)"],"authentication":"OAuth2","commonUseCases":["Automated customer notifications via SMS or WhatsApp","Interactive voice response systems for surveys or menus","Automated outbound calling campaigns","Multi-channel communication automation"],"limitations":["Call transfer functionality is in development and not yet fully implemented"],"relatedNodes":["n8n Community Node","n8n HTTP Request"]}


node_type: n8n-nodes-krispcall.krispcall
package_name: n8n-nodes-krispcall
display_name: KrispCall
description: Interact with KrispCall API to manage contacts.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: kapil-krispcall
author_github_url: https://github.com/kapil-krispcall/
npm_package_name: n8n-nodes-krispcall
npm_version: 0.1.11
community_fetched_at: 2026-04-16T09:43:36.030Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Contact",
          "value": "contact",
          "description": "Manage contacts in KrispCall"
        },
        {
          "name": "SMS_MMS",
          "value": "sms",
          "description": "Manage SMS in KrispCall"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact in KrispCall"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete contacts",
          "description": "Delete contacts in KrispCall"
        },
        {
          "name": "Get Voicemail",
          "value": "getVoicemail",
          "action": "Get many voicemails",
          "description": "Retrieve voicemails from KrispCall"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "new_contact",
      "options": [
        {
          "name": "New Contact",
          "value": "new_contact",
          "action": "On New Contact",
          "description": "Triggers when a new contact is added in your Workspace"
        },
        {
          "name": "New SMS/MMS",
          "value": "new_sms_or_mms",
          "action": "On New SMS/MMS",
          "description": "Triggers when a new SMS or MMS is received in your Workspace"
        },
        {
          "name": "New Voicemail",
          "value": "new_voicemail",
          "action": "On New Voicemail",
          "description": "Triggers when a new voicemail is received in your Workspace"
        },
        {
          "name": "New Call Event",
          "value": "new_call_log",
          "action": "On New Call Event",
          "description": "Triggers when a new call related activity is created in your Workspace"
        },
        {
          "name": "New SMS/MMS Sent",
          "value": "outbound_sms_or_mms",
          "action": "On New SMS/MMS Sent",
          "description": "Triggers when a new SMS or MMS is sent from your Workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send SMS",
          "value": "send",
          "action": "Send an SMS",
          "description": "Send an SMS in KrispCall"
        },
        {
          "name": "Send MMS",
          "value": "mms",
          "action": "Send an MMS",
          "description": "Send an MMS in KrispCall"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact in KrispCall",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete contacts",
      "description": "Delete contacts in KrispCall",
      "resource": "contact"
    },
    {
      "name": "Get Voicemail",
      "value": "getVoicemail",
      "action": "Get many voicemails",
      "description": "Retrieve voicemails from KrispCall",
      "resource": "contact"
    },
    {
      "name": "New Contact",
      "value": "new_contact",
      "action": "On New Contact",
      "description": "Triggers when a new contact is added in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New SMS/MMS",
      "value": "new_sms_or_mms",
      "action": "On New SMS/MMS",
      "description": "Triggers when a new SMS or MMS is received in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New Voicemail",
      "value": "new_voicemail",
      "action": "On New Voicemail",
      "description": "Triggers when a new voicemail is received in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New Call Event",
      "value": "new_call_log",
      "action": "On New Call Event",
      "description": "Triggers when a new call related activity is created in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New SMS/MMS Sent",
      "value": "outbound_sms_or_mms",
      "action": "On New SMS/MMS Sent",
      "description": "Triggers when a new SMS or MMS is sent from your Workspace",
      "resource": "webhook"
    },
    {
      "name": "Send SMS",
      "value": "send",
      "action": "Send an SMS",
      "description": "Send an SMS in KrispCall",
      "resource": "sms"
    },
    {
      "name": "Send MMS",
      "value": "mms",
      "action": "Send an MMS",
      "description": "Send an MMS in KrispCall",
      "resource": "sms"
    }
  ]

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

  # n8n-nodes-krispcall

  This repository contains the custom [n8n](https://n8n.io) node for Krispcall, designed to help you automate your telephony workflows directly within n8n. It includes the node linter and other necessary development dependencies.

  **KrispCall** is an AI-powered modern telephony platform that helps businesses streamline communication with virtual numbers, advanced calling features, and seamless CRM integrations.

  This **n8n community node** enables you to integrate KrispCall’s advanced telephony features into your n8n workflows. You can create and manage contacts, send SMS/MMS messages, retrieve voicemails, and manage webhooks directly from n8n.

  ---

  ## 🔧 Features

  - 🔐 API key authentication
  - 📇 Create and manage contacts
  - 📤 Send SMS and MMS
  - 📥 Retrieve voicemails and phone numbers
  - 🌐 Create and delete webhooks for real-time event handling

  ---

  ## 📦 Installation

  Install this community node in your n8n instance:

  ```bash
  npm install n8n-nodes-krispcall
  ```

  Or via the n8n Community Nodes UI (under Settings → Community Nodes → Install).

  ## 🔐 Authentication

  To use this node, you must have a [KrispCall](https://krispcall.com) account and an API key.

  ### Get your API Key

  1. Sign in to your [KrispCall](https://krispcall.com) account
  2. Navigate to **Settings** → **Developer**
  3. Click **Generate API Key**
  4. Copy the key and use it when setting up **credentials** in n8n

  ### Credentials Setup in n8n

  **Base URL:** `https://app.krispcall.com/api/v3/platform/n8n`

  **API Key:** Paste your [KrispCall](https://krispcall.com) API key

  ## 🔁 Supported Resources & Operations Resource

  | Resource    | Actions              |Triggers |
  | ----------- | ----------------------- | -- |
  | `Contact`   | Create, Delete | New Contact, Call Logs|
  | `SMS` `MMS`  | Send              | New SMS or MMS, |
  | `Voicemail` | Get| New Voicemail|

  ## 📘 Example Usage

  ### Create a Contact

  1. Connect to KrispCall via `credentials`
  2. Select resource: `Contact`
  3. Choose operation: `Create`
  4. Provide the contact details (`name`, `phone`, etc.)
  5. Execute

  ### Send SMS

  1. Select resource: `SMS`
  2. Choose operation: `Send`
  3. Set `phone number` and `message`
  4. Execute

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of telephony workflows by interacting with the KrispCall API to manage contacts, send messages, and handle webhooks.","capabilities":["Create contacts","Delete contacts","Send SMS messages","Send MMS messages","Retrieve voicemails","Retrieve phone numbers","Create webhooks","Delete webhooks"],"authentication":"API key required","commonUseCases":["Automating customer communication via SMS/MMS","Managing CRM contacts through telephony integration","Handling incoming voicemails automatically","Setting up real-time event notifications via webhooks"],"limitations":["Community node (may require manual installation)","Requires a separate KrispCall account and API key"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.credentialManager"]}


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

updated_at: 2026-04-16 09:43:36
author_name: goranstjepanovic
author_github_url: https://github.com/flarelight-io/n8n-nodes-flarelight.git
npm_package_name: @flarelight/n8n-nodes-flarelight
npm_version: 1.0.3
community_fetched_at: 2026-04-16T09:43:36.031Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "import",
      "options": [
        {
          "name": "Automation",
          "value": "automation"
        },
        {
          "name": "Import",
          "value": "import"
        },
        {
          "name": "Preparation",
          "value": "preparation"
        },
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute Automation",
          "value": "execute",
          "action": "Execute automation",
          "routing": {
            "request": {
              "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute an automation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many imports",
          "routing": {
            "request": {
              "url": "/Import/All",
              "method": "GET"
            }
          },
          "description": "Get many available imports"
        },
        {
          "name": "Get Import Data",
          "value": "getData",
          "action": "Get import data",
          "routing": {
            "request": {
              "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific import"
        },
        {
          "name": "Create Import",
          "value": "create",
          "action": "Create import",
          "routing": {
            "request": {
              "url": "/Import/Data",
              "body": "={{ JSON.parse($parameter.importRequest) }}",
              "method": "POST"
            }
          },
          "description": "Create a new data import"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "import"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many preparations",
          "routing": {
            "request": {
              "url": "/Preparation/All",
              "method": "GET"
            }
          },
          "description": "Get many available data preparations"
        },
        {
          "name": "Get Preparation Data",
          "value": "getData",
          "action": "Get preparation data",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific preparation"
        },
        {
          "name": "Execute Preparation",
          "value": "execute",
          "action": "Execute preparation",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute a data preparation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "preparation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many reports",
          "routing": {
            "request": {
              "url": "/Report/All",
              "method": "GET"
            }
          },
          "description": "Get many available reports"
        },
        {
          "name": "Get Report",
          "value": "get",
          "action": "Get report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific report by ID"
        },
        {
          "name": "Generate Report",
          "value": "generate",
          "action": "Generate report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
              "method": "POST"
            }
          },
          "description": "Generate a report by ID"
        },
        {
          "name": "Get Chart Data",
          "value": "getChartData",
          "action": "Get chart data",
          "routing": {
            "request": {
              "url": "/Report/ChartData",
              "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
              "method": "POST"
            }
          },
          "description": "Get chart data for reports"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Execute Automation",
      "value": "execute",
      "action": "Execute automation",
      "routing": {
        "request": {
          "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute an automation by ID",
      "resource": "automation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many imports",
      "routing": {
        "request": {
          "url": "/Import/All",
          "method": "GET"
        }
      },
      "description": "Get many available imports",
      "resource": "import"
    },
    {
      "name": "Get Import Data",
      "value": "getData",
      "action": "Get import data",
      "routing": {
        "request": {
          "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific import",
      "resource": "import"
    },
    {
      "name": "Create Import",
      "value": "create",
      "action": "Create import",
      "routing": {
        "request": {
          "url": "/Import/Data",
          "body": "={{ JSON.parse($parameter.importRequest) }}",
          "method": "POST"
        }
      },
      "description": "Create a new data import",
      "resource": "import"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many preparations",
      "routing": {
        "request": {
          "url": "/Preparation/All",
          "method": "GET"
        }
      },
      "description": "Get many available data preparations",
      "resource": "preparation"
    },
    {
      "name": "Get Preparation Data",
      "value": "getData",
      "action": "Get preparation data",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific preparation",
      "resource": "preparation"
    },
    {
      "name": "Execute Preparation",
      "value": "execute",
      "action": "Execute preparation",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute a data preparation by ID",
      "resource": "preparation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many reports",
      "routing": {
        "request": {
          "url": "/Report/All",
          "method": "GET"
        }
      },
      "description": "Get many available reports",
      "resource": "report"
    },
    {
      "name": "Get Report",
      "value": "get",
      "action": "Get report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific report by ID",
      "resource": "report"
    },
    {
      "name": "Generate Report",
      "value": "generate",
      "action": "Generate report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
          "method": "POST"
        }
      },
      "description": "Generate a report by ID",
      "resource": "report"
    },
    {
      "name": "Get Chart Data",
      "value": "getChartData",
      "action": "Get chart data",
      "routing": {
        "request": {
          "url": "/Report/ChartData",
          "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
          "method": "POST"
        }
      },
      "description": "Get chart data for reports",
      "resource": "report"
    }
  ]

npm_readme:
  # n8n-nodes-flarelight

  This is an n8n community node that lets you use [Flarelight](https://www.flarelight.io) APIs in your n8n workflows.

  Flarelight is a modern no-code Business Intelligence (BI) platform designed for micro-businesses, professionals, and small teams that enables users to import, prepare, analyze, automate, and report on data in a streamlined, easy-to-use workflow. The platform combines simplicity, automation, and AI-assisted insights, giving smaller organizations access to capabilities traditionally reserved for enterprise BI tools.

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

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

  ## Installation

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-flarelight` 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

  The node mirrors the primary resource groups exposed by the Flarelight API so you can:

  - Run automations to orchestrate Flarelight workflows.
  - Manage imports, including creating new imports and retrieving their data.
  - Handle preparation pipelines to transform datasets before downstream use.
  - Generate and retrieve reports, including chart data extraction.

  For the full list of endpoints and payloads, refer to the [Flarelight API specification](https://integration.eu1.flarelight.cloud/swagger/index.html).

  ## Credentials

  Create a Flarelight credential in n8n using the values supplied by your Flarelight workspace:

  - `Subscription ID` (sent as `X-Subscription-Id`)
  - `Integration Key` (sent as `X-Api-Key`)
  - Optional custom API base URL (defaults to `https://integration.eu1.flarelight.cloud`)

  Store credentials in n8n and reference them from every Flarelight node instance.

  ## Compatibility

  Tested against n8n version **1.120.4**.

  ## Usage

  1. Install the community node and configure the Flarelight credential once per n8n instance.
  2. Add the **Flarelight** node to a workflow and pick a resource (`Automation`, `Import`, `Preparation`, or `Report`).
  3. Choose an operation, supply required IDs or payloads, and optionally enable pagination or JSON body inputs where available.
  4. Chain the Flarelight node with other n8n nodes to automate end-to-end BI and reporting workflows.

  Review `n8nNodeDocPortal.md` in this repository for deeper, operation-by-operation guidance.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Flarelight website](https://www.flarelight.io)
  - [Flarelight API documentation](https://docs.flarelight.cloud/docs/integration-api/)

  ## Version history

  | Version | Date       | Notes                    |
  |---------|------------|--------------------------|
  | 1.0.3   | 2025-11-27 | POST Requests fix |
  | 1.0.2   | 2025-11-25 | Fixed gulp file copy which corrupted the icon  |
  | 1.0.1   | 2025-11-25 | Clean up template files  |
  | 1.0.0   | 2025-11-25 | Initial community release |

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by interacting with the Flarelight Business Intelligence (BI) platform API to manage data imports, preparation pipelines, automations, and reporting.","capabilities":["Run Flarelight automations","Create and retrieve data imports","Manage data preparation pipelines","Generate and retrieve reports","Extract chart data from reports","Support pagination for API responses"],"authentication":"API Key required (Integration Key sent as X-Api-Key header) and Subscription ID (sent as X-Subscription-Id header)","commonUseCases":["Automating data import and transformation workflows","Generating automated BI reports for micro-businesses","Orchestrating data analysis pipelines within n8n","Extracting visual data from Flarelight charts"],"limitations":["Community node (unverified code from public source)","Requires valid Flarelight workspace credentials","Tested only against n8n version 1.120.4"],"relatedNodes":["n8n HTTP Request node","n8n Code node","n8n Function node"]}


node_type: @jetbrains/n8n-nodes-youtrack.youtrack
package_name: @jetbrains/n8n-nodes-youtrack
display_name: YouTrack
description: Get data from YouTrack API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: jetbrains-admin
author_github_url: https://github.com/JetBrains/n8n-nodes-youtrack.git
npm_package_name: @jetbrains/n8n-nodes-youtrack
npm_version: 0.1.8
community_fetched_at: 2026-04-16T09:43:36.032Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "issue",
      "options": [
        {
          "name": "Command",
          "value": "command",
          "description": "Execute YouTrack commands on issues (tags, assignees, comments, work items, votes, etc.)"
        },
        {
          "name": "Comment",
          "value": "comment",
          "description": "Add and manage comments on issues"
        },
        {
          "name": "Issue",
          "value": "issue",
          "description": "Create and manage issues in YouTrack"
        },
        {
          "name": "Issue Draft",
          "value": "issueDraft",
          "description": "Create and manage issue drafts"
        },
        {
          "name": "Project",
          "value": "project",
          "description": "Access project information"
        },
        {
          "name": "Saved Query",
          "value": "savedQueries",
          "description": "Get many and create saved searches"
        },
        {
          "name": "Tag",
          "value": "tag",
          "description": "Add and manage tags on issues"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Find and manage users"
        },
        {
          "name": "User Group",
          "value": "userGroup",
          "description": "Find user groups and get group members"
        },
        {
          "name": "Work Item",
          "value": "workItem",
          "description": "Track time spent on issues"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a comment",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/comments",
              "method": "POST"
            }
          },
          "description": "Add a comment to an issue"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many comments",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/comments",
              "method": "GET"
            }
          },
          "description": "Get many comments on an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a command",
          "routing": {
            "request": {
              "url": "/commands",
              "method": "POST"
            }
          },
          "description": "Execute a YouTrack command on one or more issues (bulk operations supported). Supports all YouTrack commands: tags, assignees, comments, work items, votes, watchers, links, custom fields, and more. For star/watcher commands, use \"star username\" or \"watcher username\"."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "command"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an issue",
          "routing": {
            "request": {
              "url": "=/admin/projects/{{$parameter.project}}/issues",
              "method": "POST"
            }
          },
          "description": "Create a new issue"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an issue",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/issues/{{$parameter.issueId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an issue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an issue",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}",
              "method": "GET"
            }
          },
          "description": "Get an issue by ID"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many issues",
          "routing": {
            "request": {
              "url": "/issues",
              "method": "GET"
            }
          },
          "description": "Get many issues"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an issue",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}",
              "method": "POST"
            }
          },
          "description": "Update an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "issue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an issue draft",
          "routing": {
            "request": {
              "url": "/users/me/drafts",
              "method": "POST"
            }
          },
          "description": "Create a new issue draft"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an issue draft",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/users/me/drafts/{{$parameter.draftId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an issue draft"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an issue draft",
          "routing": {
            "request": {
              "url": "=/users/me/drafts/{{$parameter.draftId}}",
              "method": "GET"
            }
          },
          "description": "Get an issue draft by ID"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many issue drafts",
          "routing": {
            "request": {
              "url": "/users/me/drafts",
              "method": "GET"
            }
          },
          "description": "Get many issue drafts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an issue draft",
          "routing": {
            "request": {
              "url": "=/users/me/drafts/{{$parameter.draftId}}",
              "method": "POST"
            }
          },
          "description": "Update an issue draft"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "issueDraft"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "routing": {
            "request": {
              "url": "=/admin/projects/{{$parameter.projectId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific project"
        },
        {
          "name": "Get Fields Schema",
          "value": "getFieldsSchema",
          "action": "Get issue fields schema",
          "routing": {
            "request": {
              "url": "=/admin/projects/{{$parameter.projectId}}/customFields",
              "method": "GET"
            }
          },
          "description": "Get the JSON schema for custom fields in the specified project"
        },
        {
          "name": "Get Issues",
          "value": "getIssues",
          "action": "Get project issues",
          "routing": {
            "request": {
              "url": "=/admin/projects/{{$parameter.projectId}}/issues",
              "method": "GET"
            }
          },
          "description": "Get issues for a specific project"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many projects",
          "routing": {
            "request": {
              "url": "/admin/projects",
              "method": "GET"
            }
          },
          "description": "Get many projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addToIssue",
      "options": [
        {
          "name": "Add to Issue",
          "value": "addToIssue",
          "action": "Add tag to issue",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/tags",
              "method": "POST"
            }
          },
          "description": "Add a tag to an issue"
        },
        {
          "name": "Get Issue Tags",
          "value": "getIssueTags",
          "action": "Get issue tags",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/tags",
              "method": "GET"
            }
          },
          "description": "Get all tags on a specific issue"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many tags",
          "routing": {
            "request": {
              "url": "/tags",
              "method": "GET"
            }
          },
          "description": "Get many available tags"
        },
        {
          "name": "Remove From Issue",
          "value": "removeFromIssue",
          "action": "Remove tag from issue",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/tags/{{$parameter.tagId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a tag from an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a work item",
          "routing": {
            "request": {
              "url": "=/issues/{{$parameter.issueId}}/timeTracking/workItems",
              "method": "POST"
            }
          },
          "description": "Add a work item (time tracking) to an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workItem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific user by ID or login"
        },
        {
          "name": "Get Current",
          "value": "getCurrent",
          "action": "Get current user",
          "routing": {
            "request": {
              "url": "/users/me",
              "method": "GET"
            }
          },
          "description": "Get current authenticated user"
        },
        {
          "name": "Get General Profile",
          "value": "getGeneralProfile",
          "action": "Get user general profile",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}/profiles/general",
              "method": "GET"
            }
          },
          "description": "Get general profile settings for a specific user"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many users",
          "routing": {
            "request": {
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "Get many users"
        },
        {
          "name": "Get Notifications Profile",
          "value": "getNotificationsProfile",
          "action": "Get user notifications profile",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}/profiles/notifications",
              "method": "GET"
            }
          },
          "description": "Get notification settings for a specific user"
        },
        {
          "name": "Get Saved Queries",
          "value": "getSavedQueries",
          "action": "Get user saved queries",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}/savedQueries",
              "method": "GET"
            }
          },
          "description": "Get saved queries for a specific user"
        },
        {
          "name": "Get Tags",
          "value": "getTags",
          "action": "Get user tags",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}/tags",
              "method": "GET"
            }
          },
          "description": "Get tags for a specific user"
        },
        {
          "name": "Get Time Tracking Profile",
          "value": "getTimeTrackingProfile",
          "action": "Get user time tracking profile",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}/profiles/timetracking",
              "method": "GET"
            }
          },
          "description": "Get time tracking settings for a specific user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many user groups",
          "routing": {
            "request": {
              "url": "/groups",
              "method": "GET"
            }
          },
          "description": "Get many user groups"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user group",
          "routing": {
            "request": {
              "url": "=/groups/{{$parameter.groupId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific user group by ID"
        },
        {
          "name": "Get Members",
          "value": "getMembers",
          "action": "Get user group members",
          "routing": {
            "request": {
              "url": "=/groups/{{$parameter.groupId}}",
              "method": "GET"
            }
          },
          "description": "Get members of a user group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many saved queries",
          "routing": {
            "request": {
              "url": "/savedQueries",
              "method": "GET"
            }
          },
          "description": "Get many saved queries visible to the current user"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create saved query",
          "routing": {
            "request": {
              "url": "/savedQueries",
              "method": "POST"
            }
          },
          "description": "Create a new saved query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "savedQueries"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add",
      "value": "add",
      "action": "Add a comment",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/comments",
          "method": "POST"
        }
      },
      "description": "Add a comment to an issue",
      "resource": "comment"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many comments",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/comments",
          "method": "GET"
        }
      },
      "description": "Get many comments on an issue",
      "resource": "comment"
    },
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a command",
      "routing": {
        "request": {
          "url": "/commands",
          "method": "POST"
        }
      },
      "description": "Execute a YouTrack command on one or more issues (bulk operations supported). Supports all YouTrack commands: tags, assignees, comments, work items, votes, watchers, links, custom fields, and more. For star/watcher commands, use \"star username\" or \"watcher username\".",
      "resource": "command"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an issue",
      "routing": {
        "request": {
          "url": "=/admin/projects/{{$parameter.project}}/issues",
          "method": "POST"
        }
      },
      "description": "Create a new issue",
      "resource": "issue"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an issue",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/issues/{{$parameter.issueId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an issue",
      "resource": "issue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an issue",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}",
          "method": "GET"
        }
      },
      "description": "Get an issue by ID",
      "resource": "issue"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many issues",
      "routing": {
        "request": {
          "url": "/issues",
          "method": "GET"
        }
      },
      "description": "Get many issues",
      "resource": "issue"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an issue",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}",
          "method": "POST"
        }
      },
      "description": "Update an issue",
      "resource": "issue"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an issue draft",
      "routing": {
        "request": {
          "url": "/users/me/drafts",
          "method": "POST"
        }
      },
      "description": "Create a new issue draft",
      "resource": "issueDraft"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an issue draft",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/users/me/drafts/{{$parameter.draftId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an issue draft",
      "resource": "issueDraft"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an issue draft",
      "routing": {
        "request": {
          "url": "=/users/me/drafts/{{$parameter.draftId}}",
          "method": "GET"
        }
      },
      "description": "Get an issue draft by ID",
      "resource": "issueDraft"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many issue drafts",
      "routing": {
        "request": {
          "url": "/users/me/drafts",
          "method": "GET"
        }
      },
      "description": "Get many issue drafts",
      "resource": "issueDraft"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an issue draft",
      "routing": {
        "request": {
          "url": "=/users/me/drafts/{{$parameter.draftId}}",
          "method": "POST"
        }
      },
      "description": "Update an issue draft",
      "resource": "issueDraft"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "routing": {
        "request": {
          "url": "=/admin/projects/{{$parameter.projectId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific project",
      "resource": "project"
    },
    {
      "name": "Get Fields Schema",
      "value": "getFieldsSchema",
      "action": "Get issue fields schema",
      "routing": {
        "request": {
          "url": "=/admin/projects/{{$parameter.projectId}}/customFields",
          "method": "GET"
        }
      },
      "description": "Get the JSON schema for custom fields in the specified project",
      "resource": "project"
    },
    {
      "name": "Get Issues",
      "value": "getIssues",
      "action": "Get project issues",
      "routing": {
        "request": {
          "url": "=/admin/projects/{{$parameter.projectId}}/issues",
          "method": "GET"
        }
      },
      "description": "Get issues for a specific project",
      "resource": "project"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many projects",
      "routing": {
        "request": {
          "url": "/admin/projects",
          "method": "GET"
        }
      },
      "description": "Get many projects",
      "resource": "project"
    },
    {
      "name": "Add to Issue",
      "value": "addToIssue",
      "action": "Add tag to issue",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/tags",
          "method": "POST"
        }
      },
      "description": "Add a tag to an issue",
      "resource": "tag"
    },
    {
      "name": "Get Issue Tags",
      "value": "getIssueTags",
      "action": "Get issue tags",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/tags",
          "method": "GET"
        }
      },
      "description": "Get all tags on a specific issue",
      "resource": "tag"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many tags",
      "routing": {
        "request": {
          "url": "/tags",
          "method": "GET"
        }
      },
      "description": "Get many available tags",
      "resource": "tag"
    },
    {
      "name": "Remove From Issue",
      "value": "removeFromIssue",
      "action": "Remove tag from issue",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/tags/{{$parameter.tagId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a tag from an issue",
      "resource": "tag"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a work item",
      "routing": {
        "request": {
          "url": "=/issues/{{$parameter.issueId}}/timeTracking/workItems",
          "method": "POST"
        }
      },
      "description": "Add a work item (time tracking) to an issue",
      "resource": "workItem"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific user by ID or login",
      "resource": "user"
    },
    {
      "name": "Get Current",
      "value": "getCurrent",
      "action": "Get current user",
      "routing": {
        "request": {
          "url": "/users/me",
          "method": "GET"
        }
      },
      "description": "Get current authenticated user",
      "resource": "user"
    },
    {
      "name": "Get General Profile",
      "value": "getGeneralProfile",
      "action": "Get user general profile",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}/profiles/general",
          "method": "GET"
        }
      },
      "description": "Get general profile settings for a specific user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many users",
      "routing": {
        "request": {
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "Get many users",
      "resource": "user"
    },
    {
      "name": "Get Notifications Profile",
      "value": "getNotificationsProfile",
      "action": "Get user notifications profile",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}/profiles/notifications",
          "method": "GET"
        }
      },
      "description": "Get notification settings for a specific user",
      "resource": "user"
    },
    {
      "name": "Get Saved Queries",
      "value": "getSavedQueries",
      "action": "Get user saved queries",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}/savedQueries",
          "method": "GET"
        }
      },
      "description": "Get saved queries for a specific user",
      "resource": "user"
    },
    {
      "name": "Get Tags",
      "value": "getTags",
      "action": "Get user tags",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}/tags",
          "method": "GET"
        }
      },
      "description": "Get tags for a specific user",
      "resource": "user"
    },
    {
      "name": "Get Time Tracking Profile",
      "value": "getTimeTrackingProfile",
      "action": "Get user time tracking profile",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}/profiles/timetracking",
          "method": "GET"
        }
      },
      "description": "Get time tracking settings for a specific user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many user groups",
      "routing": {
        "request": {
          "url": "/groups",
          "method": "GET"
        }
      },
      "description": "Get many user groups",
      "resource": "userGroup"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user group",
      "routing": {
        "request": {
          "url": "=/groups/{{$parameter.groupId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific user group by ID",
      "resource": "userGroup"
    },
    {
      "name": "Get Members",
      "value": "getMembers",
      "action": "Get user group members",
      "routing": {
        "request": {
          "url": "=/groups/{{$parameter.groupId}}",
          "method": "GET"
        }
      },
      "description": "Get members of a user group",
      "resource": "userGroup"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many saved queries",
      "routing": {
        "request": {
          "url": "/savedQueries",
          "method": "GET"
        }
      },
      "description": "Get many saved queries visible to the current user",
      "resource": "savedQueries"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create saved query",
      "routing": {
        "request": {
          "url": "/savedQueries",
          "method": "POST"
        }
      },
      "description": "Create a new saved query",
      "resource": "savedQueries"
    }
  ]

npm_readme:
  # @jetbrains/n8n-nodes-youtrack

  [![official JetBrains project](https://jb.gg/badges/official-flat-square.svg)](https://github.com/JetBrains#jetbrains-on-github)

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

  YouTrack is a project management and issue tracking tool by JetBrains that helps teams manage projects, track issues, and collaborate effectively.

  [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

  This node provides two components: the YouTrack node for API operations and the YouTrack Trigger node for webhook-based automation.

  ### YouTrack Node

  The YouTrack node supports the following resources and operations:

  ### Command
  - **Execute** - Execute YouTrack commands on one or more issues (bulk operations supported). Supports all YouTrack commands: tags, assignees, comments, work items, votes, watchers, links, custom fields, and more.

  ### Comment
  - **Add** - Add a comment to an issue
  - **List** - List all comments on an issue

  ### Issue
  - **Create** - Create a new issue
  - **Delete** - Delete an issue
  - **Get** - Get an issue by ID
  - **List** - List issues
  - **Update** - Update an issue

  ### Issue Draft
  - **Create** - Create a new issue draft
  - **Delete** - Delete an issue draft
  - **Get** - Get an issue draft by ID
  - **List** - List issue drafts
  - **Update** - Update an issue draft

  ### Project
  - **Get** - Get a specific project
  - **Get Fields Schema** - Get the JSON schema for custom fields in the specified project
  - **Get Issues** - Get issues for a specific project
  - **List** - List all projects

  ### Saved Query
  - **Create** - Create a new saved query
  - **List** - List all saved queries visible to the current user

  ### Tag
  - **Add to Issue** - Add a tag to an issue
  - **Get Issue Tags** - Get all tags on a specific issue
  - **List** - List all available tags
  - **Remove From Issue** - Remove a tag from an issue

  ### User
  - **Get** - Get a specific user by ID or login
  - **Get Current** - Get current authenticated user
  - **Get General Profile** - Get general profile settings for a specific user
  - **Get Notifications Profile** - Get notification settings for a specific user
  - **Get Saved Queries** - Get saved queries for a specific user
  - **Get Tags** - Get tags for a specific user
  - **Get Time Tracking Profile** - Get time tracking settings for a specific user
  - **List** - List users

  ### User Group
  - **Get** - Get a specific user group by ID
  - **Get Members** - Get members of a user group
  - **List** - List user groups

  ### Work Item
  - **Add** - Add a work item (time tracking) to an issue

  ### YouTrack Trigger Node

  The YouTrack Trigger node allows you to start workflows automatically when events occur in YouTrack.

  **Supported Events:**
  - Issue Created
  - Issue Updated
  - Issue Deleted
  - Comment Added
  - Comment Updated
  - Comment Deleted
  - Work Item Added
  - Work Item Updated
  - Work Item Deleted
  - Issue Attachment Added
  - Issue Attachment Deleted

  ## Credentials

  This node uses permanent token authentication to connect to YouTrack.

  ### Prerequisites

  1. Access to a YouTrack instance (cloud or self-hosted)
  2. A YouTrack account with appropriate permissions

  ### Authentication Setup

  1. **Generate a Permanent Token:**
     - Log in to your YouTrack instance
     - Navigate to your Hub profile under **Authentication > Tokens**
     - Create a new permanent token

  2. **Configure Credentials in n8n:**
     - In n8n, go to **Credentials** > **New Credential**
     - Select **YouTrack API**
     - Enter your **YouTrack URL** (e.g., `https://your-instance.myjetbrains.com/youtrack` for cloud
        - **Important:** Enter the base URL without `/api` at the end
     - Enter your **Permanent Token**
     - Click **Save**

  ## Compatibility

  - **Minimum n8n version:** Requires n8n version that supports community nodes with API version 1
  - **YouTrack API:** Compatible with YouTrack REST API (cloud and self-hosted instances)

  ## Usage

  ### Command Execute

  The **Command Execute** operation allows you to apply YouTrack commands to issues using natural language syntax:

  - `tag MyTag for me` - Adds the tag "MyTag" to an issue and assigns it to you
  - `tag To Deploy for jane.doe` - Adds the "To Deploy" tag to an issue and assigns to jane.doe
  - `work 2h Fixed bug` - Logs 2 hours of work on the issue with a comment

  **Note:** The `vote+1` command cannot be used on your own issues, and usernames must be valid YouTrack logins.

  ### Custom Fields

  To discover available custom fields for a project, use the **Project > Get Fields Schema** operation, which returns the JSON schema for all custom fields in the specified project.

  ### Issue Queries

  When listing or filtering issues, YouTrack uses its own query language. See the [YouTrack Query Syntax documentation](https://www.jetbrains.com/help/youtrack/incloud/Search-and-Command-Attributes.html) for details.

  ### Webhooks

  For webhook triggers, configure the Webhook Triggers app in your YouTrack instance. The YouTrack Trigger node will provide the webhook URL during setup.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [YouTrack REST API documentation](https://www.jetbrains.com/help/youtrack/devportal/youtrack-rest-api.html)
  * [YouTrack documentation](https://www.jetbrains.com/help/youtrack/)

  ## License
  [MIT License](http://www.opensource.org/licenses/MIT)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation with JetBrains YouTrack by providing API operations for issues, projects, users, and webhooks.","capabilities":["Execute YouTrack commands on issues (bulk operations supported)","Manage issues (create, delete, get, list, update)","Manage issue drafts (create, delete, get, list, update)","Manage projects (get, list, get fields schema, get issues)","Manage saved queries (create, list)","Manage tags (add, remove, list, get issue tags)","Manage users (get, list, get profiles, get notifications, get saved queries, get tags, get time tracking)","Manage user groups (get, list members, list)","Manage work items (add, update, delete)","Add comments to issues (add, list)"],"authentication":"Permanent token authentication","commonUseCases":["Automating issue creation and updates based on external triggers","Bulk updating issue properties via natural language commands","Integrating YouTrack events into n8n workflows via webhooks","Automating time tracking and work item logging","Managing project and user data programmatically"],"limitations":["The `vote+1` command cannot be used on your own issues","Usernames in commands must be valid YouTrack logins","Requires YouTrack REST API access (cloud or self-hosted)","Requires n8n version that supports community nodes with API version 1"],"relatedNodes":["Webhook Trigger","HTTP Request","Code"]}


node_type: n8n-nodes-openmrs.openMrs
package_name: n8n-nodes-openmrs
display_name: OpenMRS
description: Interact with OpenMRS FHIR R4 API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: monfortbrian
author_github_url: https://github.com/monfortbrian/
npm_package_name: n8n-nodes-openmrs
npm_version: 1.2.1
community_fetched_at: 2026-04-16T09:43:36.033Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "patient",
      "options": [
        {
          "name": "Condition",
          "value": "condition"
        },
        {
          "name": "Custom API Call",
          "value": "customApiCall"
        },
        {
          "name": "Diagnostic Report",
          "value": "diagnosticReport"
        },
        {
          "name": "Encounter",
          "value": "encounter"
        },
        {
          "name": "Medication Statement",
          "value": "medicationStatement"
        },
        {
          "name": "Observation",
          "value": "observation"
        },
        {
          "name": "Patient",
          "value": "patient"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchByIdentifier",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a patient",
          "description": "Get a patient by UUID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many patients",
          "description": "Get many patients"
        },
        {
          "name": "Search by Identifier",
          "value": "searchByIdentifier",
          "action": "Search patient by identifier",
          "description": "Search patient by OpenMRS ID or National ID"
        },
        {
          "name": "Search by Name",
          "value": "searchByName",
          "action": "Search patient by name",
          "description": "Search patient by name (partial match supported)"
        },
        {
          "name": "Search by Phone",
          "value": "searchByPhone",
          "action": "Search patient by phone",
          "description": "Search patient by phone number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "patient"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a resource",
          "description": "Get a resource by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many resources",
          "description": "Get many resources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "encounter",
            "observation",
            "diagnosticReport",
            "condition",
            "medicationStatement"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "customApiCall",
      "options": [
        {
          "name": "Custom API Call",
          "value": "customApiCall",
          "action": "Make custom API call",
          "description": "Make a custom API call to OpenMRS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customApiCall"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a patient",
      "description": "Get a patient by UUID",
      "resource": "patient"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many patients",
      "description": "Get many patients",
      "resource": "patient"
    },
    {
      "name": "Search by Identifier",
      "value": "searchByIdentifier",
      "action": "Search patient by identifier",
      "description": "Search patient by OpenMRS ID or National ID",
      "resource": "patient"
    },
    {
      "name": "Search by Name",
      "value": "searchByName",
      "action": "Search patient by name",
      "description": "Search patient by name (partial match supported)",
      "resource": "patient"
    },
    {
      "name": "Search by Phone",
      "value": "searchByPhone",
      "action": "Search patient by phone",
      "description": "Search patient by phone number",
      "resource": "patient"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a resource",
      "description": "Get a resource by ID",
      "resource": "encounter"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many resources",
      "description": "Get many resources",
      "resource": "encounter"
    },
    {
      "name": "Custom API Call",
      "value": "customApiCall",
      "action": "Make custom API call",
      "description": "Make a custom API call to OpenMRS",
      "resource": "customApiCall"
    }
  ]

npm_readme:
  # n8n-nodes-openmrs

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-openmrs)](https://www.npmjs.com/package/n8n-nodes-openmrs)
  [![npm downloads](https://img.shields.io/npm/dt/n8n-nodes-openmrs)](https://www.npmjs.com/package/n8n-nodes-openmrs)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  Community node for [n8n](https://n8n.io/) providing OpenMRS FHIR R4 integration with intelligent patient search, clinical data access, and healthcare workflow automation.

  ---

  ## What's New in v1.2.0

  **Smart Patient Search** - No more memorizing UUIDs!
  - Search by OpenMRS ID: `131280865`
  - Search by Name: `Patricia Lewis` (partial matching)
  - Search by Phone: `+254712345678`

  ---

  ## Features

  ### Intelligent Patient Lookup

  Real-world clinics don't use UUIDs. Search patients the way healthcare workers actually do:

  - **By Identifier** - OpenMRS ID, National ID, Facility Number
  - **By Name** - First name, last name, or partial matches
  - **By Phone** - Mobile number in any format
  - **By UUID** - For system integrations

  ### Complete FHIR R4 Coverage

  Access all essential clinical resources:

  | Resource | What You Get | Common Use Cases |
  |----------|-------------|------------------|
  | **Patient** | Demographics, identifiers, contacts | Registration, identity verification |
  | **Encounter** | Visits, admissions, consultations | Attendance tracking, visit history |
  | **Observation** | Labs, vitals, diagnostic results | Trend analysis, clinical alerts |
  | **Diagnostic Report** | Imaging, pathology reports | Disease progression tracking |
  | **Condition** | Diagnoses, active problems | Differential diagnosis, comorbidities |
  | **Medication Statement** | Current & past medications | Treatment history, drug interactions |

  ### Developer-Friendly

  - **Simple Auth** - HTTP Basic Authentication
  - **Pagination** - Handle large datasets efficiently
  - **Error Handling** - Clear error messages and continue-on-fail support
  - **Custom API Calls** - Direct access to any OpenMRS FHIR endpoint

  ### Built for Global Health

  - Optimized for low-bandwidth environments
  - Works with OpenMRS 2.x and 3.x
  - Compatible with DHIS2 workflows
  - Supports both cloud and on-premise deployments

  ---

  ## Installation

  ### Via n8n Community Nodes (Recommended)

  1. Open n8n
  2. Go to **Settings** → **Community Nodes**
  3. Click **Install a community node**
  4. Enter: `n8n-nodes-openmrs`
  5. Click **Install**

  ### Via npm
  ```bash
  npm install n8n-nodes-openmrs
  ```

  ### From Source
  ```bash
  git clone https://github.com/monfortbrian/n8n-nodes-openmrs.git
  cd n8n-nodes-openmrs
  npm install
  npm run build
  npm link
  ```

  ---

  ## Quick Start

  ### 1. Configure Credentials

  1. In n8n, go to **Credentials** → **New**
  2. Search for **OpenMRS API**
  3. Configure:
     - **Base URL**: `https://demo.openmrs.org/openmrs` (include `/openmrs`)
     - **Username**: `admin`
     - **Password**: `Admin123`
  4. Test & Save

  ### 2. Search Patient by OpenMRS ID
  ```
  Add Node → OpenMRS
  ├─ Resource: Patient
  ├─ Operation: Search by Identifier
  └─ Identifier: 131280865
  ```

  **Result:** Complete patient record instantly

  ### 3. Find Patient by Name
  ```
  Add Node → OpenMRS
  ├─ Resource: Patient
  ├─ Operation: Search by Name
  └─ Name: Patricia
  ```

  **Result:** All patients with "Patricia" in their name

  ---

  ## Examples

  ### Example 1: Patient Search by ID (Real-World)

  **Instead of this (nobody remembers):**
  ```
  UUID: 7826f08a-0258-4fb1-ba69-2af192f392db
  ```

  **Do this:**
  ```
  OpenMRS ID: 131280865
  ```

  **n8n Workflow:**
  1. Add OpenMRS node
  2. Resource: **Patient**
  3. Operation: **Search by Identifier**
  4. Identifier: `131280865`
  5. Execute

  **Output:** Full patient FHIR record

  ---

  ### Example 2: Get Patient Lab Results
  ```
  1. Add OpenMRS node
  2. Resource: Observation
  3. Operation: Get Many
  4. Patient UUID: 7826f08a-0258-4fb1-ba69-2af192f392db
  5. Limit: 50
  6. Execute
  ```

  **Output:** Up to 50 most recent lab results with values, units, reference ranges

  ---

  ### Example 3: Track Patient Visit History
  ```
  1. Add OpenMRS node
  2. Resource: Encounter
  3. Operation: Get Many
  4. Patient UUID: 7826f08a-0258-4fb1-ba69-2af192f392db
  5. Return All: true
  6. Execute
  ```

  **Output:** Complete visit timeline from first to last encounter

  ---

  ### Example 4: Custom FHIR Query

  Use the **Custom API Call** resource for advanced queries:
  ```
  1. Add OpenMRS node
  2. Resource: Custom API Call
  3. HTTP Method: GET
  4. Endpoint: /ws/fhir2/R4/Patient
  5. Query Parameters:
     - name: birthdate
     - value: gt1990-01-01
  6. Execute
  ```

  **Output:** All patients born after January 1, 1990

  ---

  ## Real-World Use Cases

  ### Clinical Workflows

  **Patient Admission Dashboard**
  ```
  Webhook Trigger
  → OpenMRS: Search by OpenMRS ID
  → OpenMRS: Get Encounters (last 6 months)
  → OpenMRS: Get Observations (recent labs)
  → Code: Calculate risk scores
  → Display: Admission summary
  ```

  **Lost-to-Follow-Up Recovery**
  ```
  Schedule (weekly)
  → OpenMRS: Get All Patients on ART
  → Code: Filter last visit > 28 days
  → OpenMRS: Search by Phone
  → SMS: "Medication ready for pickup"
  → DHIS2: Update tracker
  ```

  ### Data Analytics

  **Disease Surveillance**
  ```
  Schedule (every 6 hours)
  → OpenMRS: Get Conditions (last 6h)
  → Code: Filter cholera, measles, meningitis
  → Code: Check outbreak threshold
  → DHIS2: Post to IDSR module
  → SMS: Alert district officer
  ```

  **Lab Turnaround Time Monitoring**
  ```
  OpenMRS: Observation created
  → Calculate: Order time - Result time
  → IF > 48 hours
    → Alert lab manager
    → DHIS2: Post performance indicator
  ```

  ### Global Health

  - HIV/TB treatment adherence tracking
  - Maternal health visit reminders
  - Vaccine defaulter identification
  - Stockout prevention for ARVs

  ---

  ## API Reference

  ### Supported Resources

  - `Patient` - Demographics, identifiers
  - `Encounter` - Visits, admissions
  - `Observation` - Labs, vitals, diagnostics
  - `Diagnostic Report` - Imaging, pathology
  - `Condition` - Diagnoses, problems
  - `Medication Statement` - Prescriptions, dispensing
  - `Custom API Call` - Any FHIR endpoint

  ### Patient Operations

  - **Search by Identifier** - OpenMRS ID, National ID
  - **Search by Name** - Partial name matching
  - **Search by Phone** - Phone number search
  - **Get** - Retrieve by UUID
  - **Get Many** - Retrieve all (paginated)

  ### Other Resource Operations

  - **Get** - Retrieve single resource by UUID
  - **Get Many** - Retrieve all for patient (paginated)

  ### Pagination

  All `Get Many` and search operations support:
  - **Return All**: `true/false`
  - **Limit**: `1-100` (default: 50)

  ---

  ## FHIR Endpoints Used
  ```
  GET /ws/fhir2/R4/Patient?identifier={id}
  GET /ws/fhir2/R4/Patient?name={name}
  GET /ws/fhir2/R4/Patient?telecom={phone}
  GET /ws/fhir2/R4/Patient/{uuid}
  GET /ws/fhir2/R4/Encounter?patient={uuid}&_count=50
  GET /ws/fhir2/R4/Observation?patient={uuid}&_count=50
  GET /ws/fhir2/R4/DiagnosticReport?patient={uuid}&_count=50
  GET /ws/fhir2/R4/Condition?patient={uuid}&_count=50
  GET /ws/fhir2/R4/MedicationStatement?patient={uuid}&_count=50
  ```

  ---

  ## Compatibility

  - **n8n**: 0.187.0 or higher
  - **OpenMRS**: 2.3+ with FHIR2 module
  - **Node.js**: 18.0.0 or higher

  ---

  ## Troubleshooting

  ### Node doesn't appear
  ```bash
  # Check installation
  npm list -g n8n-nodes-openmrs

  # Clear cache
  rm -rf ~/.n8n/cache

  # Restart n8n
  n8n start
  ```

  ### Authentication fails

  - Include `/openmrs` in Base URL
  - Verify credentials in OpenMRS
  - Check FHIR2 module is enabled

  ### Empty search results

  - Patient may not exist with that identifier
  - Try different search criteria
  - Verify FHIR2 module configuration

  ### Build errors (for developers)
  ```bash
  # Clean rebuild
  rm -rf node_modules dist
  npm install
  npm run build
  ```

  ---

  ## Development

  ### Building
  ```bash
  npm run build      # Compile TypeScript
  npm run dev        # Watch mode
  npm run lint       # Check code quality
  npm run lintfix    # Auto-fix issues
  ```

  ### Testing Locally
  ```bash
  # Build and link
  npm run build
  npm link

  # Start n8n
  n8n start

  # Test in n8n UI
  # Your node appears as "OpenMRS"
  ```

  ### Publishing
  ```bash
  # Bump version
  npm version minor  # 1.1.0 → 1.2.0

  # Publish
  npm publish

  # Push to GitHub
  git push origin main --tags
  ```

  ---

  ## Contributing

  Contributions welcome! Please:

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

  ---

  ## Changelog

  ### [1.2.0] - 2026-03-05

  **Added**
  - Patient search by OpenMRS ID/identifier
  - Patient search by name (partial matching)
  - Patient search by phone number
  - Custom API Call resource for advanced queries

  **Changed**
  - Improved error messages
  - Better TypeScript types
  - Updated documentation

  ### [1.1.0] - 2026-03-03

  **Added**
  - 6 FHIR resources (Patient, Encounter, Observation, etc.)
  - Get and Get Many operations
  - Pagination support

  ### [1.0.0] - 2026-03-01

  **Added**
  - Initial release
  - Basic FHIR R4 support

  ---

  ## License

  [MIT License](LICENSE)

  Copyright © 2026 Monfort Brian N.

  ---

  ## Support

  - **Issues**: [GitHub Issues](https://github.com/monfortbrian/n8n-nodes-openmrs/issues)
  - **Discussions**: [GitHub Discussions](https://github.com/monfortbrian/n8n-nodes-openmrs/discussions)
  - **n8n Community**: [n8n Forum](https://community.n8n.io/)

  ---

  ## Acknowledgments

  Built for healthcare workers in low-resource settings. Enabling better patient outcomes through data interoperability and workflow automation.

  **Made with ❤️ for global health**

ai_documentation_summary:
  {"purpose":"This n8n node enables interaction with the OpenMRS FHIR R4 API, facilitating healthcare workflow automation, patient data access, and clinical information retrieval.","capabilities":["Search patients by OpenMRS ID, National ID, Facility Number, Name, or Phone","Retrieve Patient demographics and identifiers","Access Encounter data for visit history tracking","Fetch Observation data for labs and vitals","Retrieve Diagnostic Reports for imaging and pathology","Access Condition data for diagnoses and comorbidities","Retrieve Medication Statements for treatment history","Execute custom FHIR API queries via HTTP methods","Support pagination for large datasets","Handle both OpenMRS 2.x and 3.x versions"],"authentication":"HTTP Basic Authentication (Username and Password)","commonUseCases":["Patient admission dashboard creation","Lost-to-follow-up recovery workflows","Disease surveillance and outbreak tracking","Lab turnaround time monitoring","HIV/TB treatment adherence tracking"],"limitations":["Requires valid OpenMRS FHIR R4 API credentials","Base URL must include '/openmrs' path segment","Some advanced FHIR features may require custom API calls"],"relatedNodes":["n8n-nodes-code.code","n8n-nodes-http.request","n8n-nodes-sms.messenger","n8n-nodes-dhis2.dhis2"]}


node_type: n8n-nodes-mrscraper.mrscraper
package_name: n8n-nodes-mrscraper
display_name: MrScraper
description: Interact with the MrScraper API
category: Community
development_style: declarative
version: 2,0
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: hagairaja-mrscraper
author_github_url: https://github.com/mrscraper-com/
npm_package_name: n8n-nodes-mrscraper
npm_version: 2.1.0
community_fetched_at: 2026-04-16T09:43:36.034Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "rerun",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Batch Operation",
          "value": "batchOperation"
        },
        {
          "name": "Create Scraper",
          "value": "createScraper"
        },
        {
          "name": "Get Result",
          "value": "result"
        },
        {
          "name": "Rerun Scraper",
          "value": "rerun"
        },
        {
          "name": "Scraping",
          "value": "scraping"
        },
        {
          "name": "Web Unblocker",
          "value": "webUnblocker"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "manual",
      "options": [
        {
          "name": "Run Manual Scraper",
          "value": "manual",
          "action": "Run manual scraper",
          "routing": {
            "request": {
              "url": "/api/v1/scrapers-manual-rerun",
              "method": "POST"
            }
          },
          "description": "Rerun a manual scraper you already created (e.g. at app.mrscraper.com/scrapers/form?mode=manual). Provide the scraper ID and one URL to get the result."
        },
        {
          "name": "Run General Agent Scraper",
          "value": "generalAgent",
          "action": "Run general agent scraper",
          "routing": {
            "request": {
              "url": "/api/v1/scrapers-ai-rerun",
              "method": "POST"
            }
          },
          "description": "Rerun a General Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result."
        },
        {
          "name": "Run Listing Agent Scraper",
          "value": "listingAgent",
          "action": "Run listing agent scraper",
          "routing": {
            "request": {
              "url": "/api/v1/scrapers-ai-rerun",
              "method": "POST"
            }
          },
          "description": "Rerun a Listing Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result."
        },
        {
          "name": "Run Map Agent Scraper",
          "value": "mapAgent",
          "action": "Run map agent scraper",
          "routing": {
            "request": {
              "url": "/api/v1/scrapers-ai-rerun",
              "method": "POST"
            }
          },
          "description": "Rerun a Map Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rerun"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Results",
          "value": "getMany",
          "action": "Get Results",
          "routing": {
            "request": {
              "url": "=/api/v1/results?filters[scraperId]={{$parameter.scraperId}}&page={{$parameter.page}}&pageSize={{$parameter.pageSize}}&sort={{$parameter.sort}}&sortOrder={{$parameter.sortOrder}}",
              "method": "GET"
            }
          },
          "description": "Get results based on given page number, page size, filters, and sorting by scraper ID"
        },
        {
          "name": "Get Latest Results",
          "value": "getLatest",
          "action": "Get Latest Results",
          "routing": {
            "request": {
              "url": "=/api/v1/results?filters[scraperId]={{$parameter.scraperId}}&page=1&pageSize={{$parameter.pageSize}}&sort=createdAt&sortOrder=DESC",
              "method": "GET"
            }
          },
          "description": "Get N latest results by scraper ID"
        },
        {
          "name": "Get Result Detail",
          "value": "get",
          "action": "Get Result Detail",
          "routing": {
            "request": {
              "url": "=/api/v1/results/{{$parameter.resultId}}",
              "method": "GET"
            }
          },
          "description": "Get a result detail by its result ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "result"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generalAgent",
      "options": [
        {
          "name": "Create General Agent Scraper",
          "value": "generalAgent",
          "action": "Create General Agent",
          "routing": {
            "send": {
              "type": "body",
              "value": "general",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a General Agent (AI) scraper at Mrscraper platform using input link and message"
        },
        {
          "name": "Create Listing Agent Scraper",
          "value": "listingAgent",
          "action": "Create Listing Agent",
          "routing": {
            "send": {
              "type": "body",
              "value": "listing",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a listing agent (AI) scraper at Mrscraper platform using input link and message"
        },
        {
          "name": "Create Map Agent Scraper",
          "value": "mapAgent",
          "action": "Create Map Agent",
          "routing": {
            "send": {
              "type": "body",
              "value": "map",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a map agent (AI) scraper at Mrscraper platform using input link and message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "createScraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "accountInformation",
      "options": [
        {
          "name": "Get Account Info",
          "value": "accountInformation",
          "action": "Get Account Info",
          "routing": {
            "request": {
              "url": "/api/v1/subscription-accounts",
              "method": "GET"
            }
          },
          "description": "Get account details including token usage and token limits"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "aiAgent",
      "options": [
        {
          "name": "AI Agent",
          "value": "aiAgent",
          "action": "Create AI Agent Scraper",
          "routing": {
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create an AI agent scraper on the Mrscraper platform. Choose General, Listing, or Map agent type."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "batchScrapeUrls",
      "options": [
        {
          "name": "Batch Scrape URLs",
          "value": "batchScrapeUrls",
          "action": "Batch scrape urls",
          "routing": {
            "request": {
              "url": "={{ $parameter.batchScrapeMode === \"manual\" ? \"/api/v1/scrapers-manual-rerun/bulk\" : \"/api/v1/scrapers-ai-rerun/bulk\" }}",
              "method": "POST"
            }
          },
          "description": "Run multiple URLs in one batch against a scraper you created in the app. Choose AI or manual scraper mode."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "batchOperation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "fetchHTML",
      "options": [
        {
          "name": "Crawl Website Sitemap",
          "value": "mapAgent",
          "action": "Crawl website sitemap",
          "routing": {
            "send": {
              "type": "body",
              "value": "map",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Crawl a website sitemap and extract all URLs up to a limit"
        },
        {
          "name": "Scrape Dynamic Content by Prompt",
          "value": "generalAgent",
          "action": "Scrape dynamic content by prompt",
          "routing": {
            "send": {
              "type": "body",
              "value": "general",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a General Agent (AI) scraper at Mrscraper platform using input link and Prompt to instruct the agent on what data to extract"
        },
        {
          "name": "Scrape Paginated Content",
          "value": "listingAgentPaginated",
          "action": "Scrape paginated content",
          "routing": {
            "request": {
              "qs": {
                "token": "={{$credentials.apiToken}}"
              },
              "url": "/",
              "method": "POST",
              "baseURL": "https://api.mrscraper.com",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Listing agent on api.mrscraper.com: send URL, prompt, agent listing, and maxPages for paginated scrape"
        },
        {
          "name": "Scrape Search Results",
          "value": "listingAgent",
          "action": "Scrape search results",
          "routing": {
            "send": {
              "type": "body",
              "value": "listing",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a listing agent (AI) scraper at Mrscraper platform using input link and message"
        },
        {
          "name": "Scrape Structured Data",
          "value": "scrapeStructuredData",
          "action": "Scrape structured data",
          "routing": {
            "send": {
              "type": "body",
              "value": "general",
              "property": "graph"
            },
            "request": {
              "url": "/api/v1/scrapers-ai",
              "method": "POST"
            }
          },
          "description": "Create a General Agent (AI) scraper with a preset schema by category (article, product, hotel, etc.). The prompt is chosen from the selected category."
        },
        {
          "name": "Scrape Web Page",
          "value": "fetchHTML",
          "action": "Scrape web page",
          "routing": {
            "request": {
              "qs": {
                "url": "={{$parameter.url}}",
                "token": "={{$credentials.apiToken}}",
                "geoCode": "={{$parameter.geoCode ?? \"US\"}}",
                "timeout": "={{$parameter.timeout ?? 120}}",
                "blockResources": "={{$parameter.blockResources ? \"true\" : \"false\"}}"
              },
              "url": "/",
              "method": "GET",
              "baseURL": "https://api.mrscraper.com"
            }
          },
          "description": "Fetch the rendered HTML of a page via the MrScraper stealth browser (JavaScript, bot evasion, optional geo proxy)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scraping"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "fetchHTML",
      "options": [
        {
          "name": "Fetch Rendered HTML",
          "value": "fetchHTML",
          "action": "Fetch Rendered HTML",
          "routing": {
            "request": {
              "qs": {
                "url": "={{$parameter.url}}",
                "token": "={{$credentials.apiToken}}",
                "geoCode": "={{$parameter.geoCode ?? \"US\"}}",
                "timeout": "={{$parameter.timeout ?? 120}}",
                "blockResources": "={{$parameter.blockResources ? \"true\" : \"false\"}}"
              },
              "url": "/",
              "method": "GET",
              "baseURL": "https://api.mrscraper.com"
            }
          },
          "description": "Fetch the rendered HTML of a page via the MrScraper stealth browser (JavaScript, bot evasion, optional geo proxy)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webUnblocker"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run Manual Scraper",
      "value": "manual",
      "action": "Run manual scraper",
      "routing": {
        "request": {
          "url": "/api/v1/scrapers-manual-rerun",
          "method": "POST"
        }
      },
      "description": "Rerun a manual scraper you already created (e.g. at app.mrscraper.com/scrapers/form?mode=manual). Provide the scraper ID and one URL to get the result.",
      "resource": "rerun"
    },
    {
      "name": "Run General Agent Scraper",
      "value": "generalAgent",
      "action": "Run general agent scraper",
      "routing": {
        "request": {
          "url": "/api/v1/scrapers-ai-rerun",
          "method": "POST"
        }
      },
      "description": "Rerun a General Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result.",
      "resource": "rerun"
    },
    {
      "name": "Run Listing Agent Scraper",
      "value": "listingAgent",
      "action": "Run listing agent scraper",
      "routing": {
        "request": {
          "url": "/api/v1/scrapers-ai-rerun",
          "method": "POST"
        }
      },
      "description": "Rerun a Listing Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result.",
      "resource": "rerun"
    },
    {
      "name": "Run Map Agent Scraper",
      "value": "mapAgent",
      "action": "Run map agent scraper",
      "routing": {
        "request": {
          "url": "/api/v1/scrapers-ai-rerun",
          "method": "POST"
        }
      },
      "description": "Rerun a Map Agent scraper you created (e.g at app.mrscraper.com/scrapers/form). Provide the scraper ID and one URL to get the result.",
      "resource": "rerun"
    },
    {
      "name": "Get Results",
      "value": "getMany",
      "action": "Get Results",
      "routing": {
        "request": {
          "url": "=/api/v1/results?filters[scraperId]={{$parameter.scraperId}}&page={{$parameter.page}}&pageSize={{$parameter.pageSize}}&sort={{$parameter.sort}}&sortOrder={{$parameter.sortOrder}}",
          "method": "GET"
        }
      },
      "description": "Get results based on given page number, page size, filters, and sorting by scraper ID",
      "resource": "result"
    },
    {
      "name": "Get Latest Results",
      "value": "getLatest",
      "action": "Get Latest Results",
      "routing": {
        "request": {
          "url": "=/api/v1/results?filters[scraperId]={{$parameter.scraperId}}&page=1&pageSize={{$parameter.pageSize}}&sort=createdAt&sortOrder=DESC",
          "method": "GET"
        }
      },
      "description": "Get N latest results by scraper ID",
      "resource": "result"
    },
    {
      "name": "Get Result Detail",
      "value": "get",
      "action": "Get Result Detail",
      "routing": {
        "request": {
          "url": "=/api/v1/results/{{$parameter.resultId}}",
          "method": "GET"
        }
      },
      "description": "Get a result detail by its result ID",
      "resource": "result"
    },
    {
      "name": "Create General Agent Scraper",
      "value": "generalAgent",
      "action": "Create General Agent",
      "routing": {
        "send": {
          "type": "body",
          "value": "general",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a General Agent (AI) scraper at Mrscraper platform using input link and message",
      "resource": "createScraper"
    },
    {
      "name": "Create Listing Agent Scraper",
      "value": "listingAgent",
      "action": "Create Listing Agent",
      "routing": {
        "send": {
          "type": "body",
          "value": "listing",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a listing agent (AI) scraper at Mrscraper platform using input link and message",
      "resource": "createScraper"
    },
    {
      "name": "Create Map Agent Scraper",
      "value": "mapAgent",
      "action": "Create Map Agent",
      "routing": {
        "send": {
          "type": "body",
          "value": "map",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a map agent (AI) scraper at Mrscraper platform using input link and message",
      "resource": "createScraper"
    },
    {
      "name": "Get Account Info",
      "value": "accountInformation",
      "action": "Get Account Info",
      "routing": {
        "request": {
          "url": "/api/v1/subscription-accounts",
          "method": "GET"
        }
      },
      "description": "Get account details including token usage and token limits",
      "resource": "account"
    },
    {
      "name": "AI Agent",
      "value": "aiAgent",
      "action": "Create AI Agent Scraper",
      "routing": {
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create an AI agent scraper on the Mrscraper platform. Choose General, Listing, or Map agent type.",
      "resource": "agent"
    },
    {
      "name": "Batch Scrape URLs",
      "value": "batchScrapeUrls",
      "action": "Batch scrape urls",
      "routing": {
        "request": {
          "url": "={{ $parameter.batchScrapeMode === \"manual\" ? \"/api/v1/scrapers-manual-rerun/bulk\" : \"/api/v1/scrapers-ai-rerun/bulk\" }}",
          "method": "POST"
        }
      },
      "description": "Run multiple URLs in one batch against a scraper you created in the app. Choose AI or manual scraper mode.",
      "resource": "batchOperation"
    },
    {
      "name": "Crawl Website Sitemap",
      "value": "mapAgent",
      "action": "Crawl website sitemap",
      "routing": {
        "send": {
          "type": "body",
          "value": "map",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Crawl a website sitemap and extract all URLs up to a limit",
      "resource": "scraping"
    },
    {
      "name": "Scrape Dynamic Content by Prompt",
      "value": "generalAgent",
      "action": "Scrape dynamic content by prompt",
      "routing": {
        "send": {
          "type": "body",
          "value": "general",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a General Agent (AI) scraper at Mrscraper platform using input link and Prompt to instruct the agent on what data to extract",
      "resource": "scraping"
    },
    {
      "name": "Scrape Paginated Content",
      "value": "listingAgentPaginated",
      "action": "Scrape paginated content",
      "routing": {
        "request": {
          "qs": {
            "token": "={{$credentials.apiToken}}"
          },
          "url": "/",
          "method": "POST",
          "baseURL": "https://api.mrscraper.com",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Listing agent on api.mrscraper.com: send URL, prompt, agent listing, and maxPages for paginated scrape",
      "resource": "scraping"
    },
    {
      "name": "Scrape Search Results",
      "value": "listingAgent",
      "action": "Scrape search results",
      "routing": {
        "send": {
          "type": "body",
          "value": "listing",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a listing agent (AI) scraper at Mrscraper platform using input link and message",
      "resource": "scraping"
    },
    {
      "name": "Scrape Structured Data",
      "value": "scrapeStructuredData",
      "action": "Scrape structured data",
      "routing": {
        "send": {
          "type": "body",
          "value": "general",
          "property": "graph"
        },
        "request": {
          "url": "/api/v1/scrapers-ai",
          "method": "POST"
        }
      },
      "description": "Create a General Agent (AI) scraper with a preset schema by category (article, product, hotel, etc.). The prompt is chosen from the selected category.",
      "resource": "scraping"
    },
    {
      "name": "Scrape Web Page",
      "value": "fetchHTML",
      "action": "Scrape web page",
      "routing": {
        "request": {
          "qs": {
            "url": "={{$parameter.url}}",
            "token": "={{$credentials.apiToken}}",
            "geoCode": "={{$parameter.geoCode ?? \"US\"}}",
            "timeout": "={{$parameter.timeout ?? 120}}",
            "blockResources": "={{$parameter.blockResources ? \"true\" : \"false\"}}"
          },
          "url": "/",
          "method": "GET",
          "baseURL": "https://api.mrscraper.com"
        }
      },
      "description": "Fetch the rendered HTML of a page via the MrScraper stealth browser (JavaScript, bot evasion, optional geo proxy)",
      "resource": "scraping"
    },
    {
      "name": "Fetch Rendered HTML",
      "value": "fetchHTML",
      "action": "Fetch Rendered HTML",
      "routing": {
        "request": {
          "qs": {
            "url": "={{$parameter.url}}",
            "token": "={{$credentials.apiToken}}",
            "geoCode": "={{$parameter.geoCode ?? \"US\"}}",
            "timeout": "={{$parameter.timeout ?? 120}}",
            "blockResources": "={{$parameter.blockResources ? \"true\" : \"false\"}}"
          },
          "url": "/",
          "method": "GET",
          "baseURL": "https://api.mrscraper.com"
        }
      },
      "description": "Fetch the rendered HTML of a page via the MrScraper stealth browser (JavaScript, bot evasion, optional geo proxy)",
      "resource": "webUnblocker"
    }
  ]

npm_readme:
  # n8n-nodes-mrscraper
  ![](./mrscraper.jpeg)

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

  **MrScraper** is an AI-powered web scraping platform. Create scrapers once (via the app or this node), then run them on any URL. Supports manual step-by-step scrapers, AI agents for detail/listing/map pages, preset structured-data extraction, paginated listing scrapes, batch reruns, and a stealth HTML fetcher.

  - **Main site:** https://mrscraper.com  
  - **API docs:** https://docs.mrscraper.com/docs/getting-started/overview

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

  ## Table of contents

  - [Installation](#installation)
  - [Credentials](#credentials)
  - [Resources & operations](#resources--operations)
    - [Account](#account)
    - [Agent](#agent)
    - [Batch Operation](#batch-operation)
    - [Create Scraper](#create-scraper)
    - [Rerun Scraper](#rerun-scraper)
    - [Get Result](#get-result)
    - [Scraping](#scraping)
    - [Web Unblocker](#web-unblocker)
  - [Usage](#usage)
  - [Compatibility](#compatibility)
  - [Resources & links](#resources--links)
  - [Version history](#version-history)

  ## Installation

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

  ## Credentials

  **MrScraper API** credentials are required. Use your API token from the [MrScraper API Tokens](https://app.mrscraper.com) page.

  ## Resources & operations

  The node exposes **8 resources**. Pick a resource, then choose an operation.

  Most calls use the app API (`api.app.mrscraper.com`). Some operations (paginated listing scrape and stealth HTML) use `api.mrscraper.com` with your token in the query string, as in the MrScraper API.

  ### Account

  - **Get Account Information** – Returns account details, token usage, and token limits.

  ### Agent

  Create AI scrapers directly from n8n (they appear in your MrScraper account):

  - **General Agent** – AI-powered extraction from a single page (detail pages). Sends URL + instructions to build a targeted JSON schema.
  - **Listing Agent** – AI-powered extraction from listing/search pages with pagination, infinite scroll, or “load more”.
  - **Map Agent** – Crawls from a start URL and collects URLs up to a limit (sitemap-style crawling).

  ### Batch Operation

  Run many URLs against a scraper you already created in the app (parallel server-side dispatch):

  - **Batch Scrape URLs** – Choose **AI** or **Manual** mode, provide the scraper ID and a list of URLs. Calls the bulk rerun endpoints (`/api/v1/scrapers-ai-rerun/bulk` or `/api/v1/scrapers-manual-rerun/bulk`).

  ### Create Scraper

  Same as Agent but under the “Create Scraper” resource: create General, Listing, or Map Agent scrapers. Matches the [programmatic creation docs](https://docs.mrscraper.com/docs/guides/programmatically#step-4-create-detail-scraper).

  ### Rerun Scraper

  Re-run existing scrapers (one URL per run). Parameters match the MrScraper platform.

  - **Run Manual Scraper** – Run a manual (step-by-step) scraper created in the app on a new URL.
  - **Run General Agent Scraper** – Run a General Agent scraper on a new URL.
  - **Run Listing Agent Scraper** – Run a Listing Agent scraper on a new URL.
  - **Run Map Agent Scraper** – Run a Map Agent scraper on a new URL.

  ### Get Result

  Read scraping results from MrScraper:

  - **Get Many** – Paginated list with filters and sorting (e.g. by scraper ID, date).
  - **Get Latest** – N most recent results for a scraper.
  - **Get Detail** – Full result by ID (data, screenshots, HTML if available).

  ### Scraping

  Single-step flows that create or run AI scrapers and helpers. Operations are named for what you do in the UI:

  - **Crawl Website Sitemap** – Map Agent: from a start URL, collect URLs up to a limit (`graph: map`).
  - **Scrape Dynamic Content by Prompt** – General Agent: URL + prompt to define what to extract (`graph: general`).
  - **Scrape Search Results** – Listing Agent: URL + message for listing/search pages (`graph: listing`), via the app AI scrapers API.
  - **Scrape Paginated Content** – Listing-style scrape with explicit pagination controls (URL, prompt, `maxPages`, etc.) via `api.mrscraper.com` (token in query).
  - **Scrape Structured Data** – General Agent with a **preset schema by category** (Article, Product, Hotel, Job Posting, Property, Restaurant, and others). The prompt is selected from the chosen category.
  - **Scrape Web Page** – Returns rendered HTML via the MrScraper stealth browser on `api.mrscraper.com` (JavaScript, bot evasion, optional geo proxy, resource blocking). Same family of behavior as **Web Unblocker → Fetch Rendered HTML**, exposed here under Scraping for convenience.

  ### Web Unblocker

  - **Fetch Rendered HTML** – Fetch the rendered HTML of a URL using the MrScraper stealth browser (`api.mrscraper.com`). Options include URL, timeout, geo code, and whether to block images/CSS/fonts for faster loads.

  ## Usage

  1. Create scrapers on the [MrScraper platform](https://app.mrscraper.com) (manual or AI) or create them from n8n via **Agent** or **Create Scraper**.
  2. Enable API access for the scraper (platform or API).
  3. In n8n, use **Rerun Scraper** for one URL per run, or **Batch Operation** to send many URLs to an existing scraper in one request.
  4. Use **Scraping** for single-shot AI creation/scrape flows (dynamic prompt, structured categories, paginated listing API, sitemap crawl, or stealth HTML).
  5. Use **Get Result** to fetch results (Get Many, Get Latest, or Get Detail).
  6. Use **Web Unblocker → Fetch Rendered HTML** (or **Scraping → Scrape Web Page**) when you only need rendered HTML without scraper definitions.
  7. Use **Account** to check token usage and limits.

  ## Compatibility

  Tested with:

  - n8n 2.x (e.g. 2.0.3)

  Node package version: **2.0.0**.

  ## Version history

  ### 2.0.0

  - **Account** resource: Get Account Information.
  - **Agent** resource: Create General, Listing, and Map Agent scrapers from n8n.
  - **Batch Operation** resource: Batch Scrape URLs (AI or manual bulk rerun).
  - **Create Scraper** resource: Programmatic creation of General, Listing, and Map Agent scrapers.
  - **Rerun Scraper** resource: Run Manual, General Agent, Listing Agent, and Map Agent scrapers (single URL).
  - **Get Result** resource: Get Many, Get Latest, Get Detail.
  - **Scraping** resource: Crawl Website Sitemap; Scrape Dynamic Content by Prompt; Scrape Search Results; Scrape Paginated Content; Scrape Structured Data (preset categories); Scrape Web Page (stealth HTML).
  - **Web Unblocker** resource: Fetch Rendered HTML (stealth browser, geo, block resources).
  - Node version set to `[2, 0]` for n8n.

  ## Resources

  - [n8n community nodes](https://docs.n8n.io/integrations/#community-nodes)
  - [MrScraper API documentation](https://docs.mrscraper.com/docs/getting-started/overview)
  - [MrScraper programmatic guide](https://docs.mrscraper.com/docs/guides/programmatically)
  - [Mrscraper Description & Template](https://n8n.io/integrations/mrscraper/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by interacting with the MrScraper API to extract structured data from websites using AI-powered scraping agents.","capabilities":["Create AI scrapers programmatically (General, Listing, Map agents)","Rerun existing scrapers with parameters matching the MrScraper platform","Retrieve scraping results (Get Many, Get Latest, Get Detail)","Handle pagination, infinite scroll, and load more buttons","Convert URL HTML to targeted JSON structures based on prompts"],"authentication":"API Token (MrScraper API Token required)","commonUseCases":["Extracting structured data from detail pages","Scraping search results or listing pages with pagination","Collecting URLs from complex landing pages","Automating data extraction workflows without coding"],"limitations":["Requires prior setup of scraping agents on the MrScraper platform","Limited to n8n version 2.0.3 (as per tested compatibility)","Manual scraping operations must be configured via the platform first"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-http-request","n8n-nodes-code"]}


node_type: n8n-nodes-scrapingant.scrapingAnt
package_name: n8n-nodes-scrapingant
display_name: ScrapingAnt
description: Scrape websites and extract data using ScrapingAnt API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: kami4ka
author_github_url: https://github.com/ScrapingAnt/
npm_package_name: n8n-nodes-scrapingant
npm_version: 0.1.6
community_fetched_at: 2026-04-16T09:43:36.036Z
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "AI Extract",
          "value": "aiExtract",
          "action": "Extract data from a webpage using AI",
          "description": "Extract structured data from a webpage using AI"
        },
        {
          "name": "Get Markdown",
          "value": "getMarkdown",
          "action": "Get a webpage as markdown",
          "description": "Scrape a webpage and return its content as Markdown (LLM-ready)"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get API credit usage",
          "description": "Get API credit usage information"
        },
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape a webpage",
          "description": "Scrape a webpage and return its HTML content"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "AI Extract",
      "value": "aiExtract",
      "action": "Extract data from a webpage using AI",
      "description": "Extract structured data from a webpage using AI"
    },
    {
      "name": "Get Markdown",
      "value": "getMarkdown",
      "action": "Get a webpage as markdown",
      "description": "Scrape a webpage and return its content as Markdown (LLM-ready)"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get API credit usage",
      "description": "Get API credit usage information"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape a webpage",
      "description": "Scrape a webpage and return its HTML content"
    }
  ]

npm_readme:
  # n8n-nodes-scrapingant

  [n8n](https://n8n.io/) community node for the [ScrapingAnt](https://scrapingant.com) web scraping API.

  Scrape websites, convert pages to Markdown, extract structured data with AI, and monitor API usage — all from your n8n workflows. Works as an **AI Agent tool** out of the box.

  ## Installation

  ### n8n Cloud / Desktop

  1. Open any workflow and click **+** (or press **N**) to open the nodes panel
  2. Search for **ScrapingAnt**
  3. Look for the **"More from the community"** section at the bottom of the results
  4. Click the **ScrapingAnt** node and hit **Install**

  > **Note:** Only verified community nodes are available on n8n Cloud. If ScrapingAnt does not appear yet, it may still be pending verification.

  ### Self-hosted

  Install from the n8n UI: **Settings** > **Community Nodes** > enter `n8n-nodes-scrapingant` > **Install**

  Or via npm:

  ```bash
  npm install n8n-nodes-scrapingant
  ```

  ## Credentials

  1. Sign up at [app.scrapingant.com](https://app.scrapingant.com)
  2. Copy your API key from the dashboard
  3. In n8n: **Credentials** > **Add Credential** > **ScrapingAnt API**
  4. Paste your API key and save

  The credential is validated automatically against the ScrapingAnt API.

  ## Operations

  | Operation | Endpoint | Description |
  |-----------|----------|-------------|
  | **Scrape** | `/v2/general` | Scrape a webpage and return raw HTML. Supports headless Chrome, datacenter/residential proxies, custom JS snippets, and country targeting. |
  | **Get Markdown** | `/v2/markdown` | Convert a webpage to clean Markdown — optimized for LLM and RAG pipelines. |
  | **AI Extract** | `/v2/extract` | Extract structured data from any page using natural language. Describe what you need (e.g., `"title, price, reviews"`) and get back JSON. |
  | **Get Usage** | `/v2/usage` | Check your plan name, total credits, remaining credits, and billing period. |

  ### Scrape Parameters

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | URL | string | — | Target webpage URL (required) |
  | Browser Rendering | boolean | `true` | Use headless Chrome for JavaScript rendering |
  | Proxy Type | options | `datacenter` | `datacenter` or `residential` |
  | Proxy Country | string | — | Two-letter country code (e.g., `us`, `gb`, `de`) |
  | Return Page Source | boolean | `false` | Return raw page source instead of rendered HTML |
  | JavaScript Snippet | string | — | Custom JS to execute on the page before returning (auto Base64-encoded) |
  | Timeout | number | `30` | Request timeout in seconds (5–60) |

  ### Get Markdown Parameters

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | URL | string | — | Target webpage URL (required) |
  | Browser Rendering | boolean | `true` | Use headless Chrome |
  | Proxy Type | options | `datacenter` | `datacenter` or `residential` |
  | Proxy Country | string | — | Two-letter country code |

  ### AI Extract Parameters

  | Parameter | Type | Description |
  |-----------|------|-------------|
  | URL | string | Target webpage URL (required) |
  | Extract Properties | string | Comma-separated list of properties to extract (required). Supports nested structures, e.g., `"title, price(number), reviews(list: author, text)"` |

  ## AI Agent Tool

  This node has `usableAsTool` enabled, so it can be connected directly to the **n8n AI Agent** node. The agent can autonomously scrape pages, extract data, and check usage.

  ## Credit Costs

  Credit costs vary by operation, rendering mode, and proxy type. See the [official credit cost reference](https://docs.scrapingant.com/credits-cost) for current pricing.

  ## Resources

  - [ScrapingAnt Documentation](https://docs.scrapingant.com)
  - [ScrapingAnt API Reference](https://docs.scrapingant.com/request-response-format)
  - [Credit Cost Reference](https://docs.scrapingant.com/credits-cost)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)


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

updated_at: 2026-04-16 09:43:36
author_name: kylasdevops
author_github_url: https://github.com/kylastech/
npm_package_name: n8n-nodes-kylas
npm_version: 1.0.4
community_fetched_at: 2026-04-16T09:43:36.037Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "user",
      "options": [
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Lead",
          "value": "lead"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "description": "Get the data of a single user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search companies",
          "description": "Search companies"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search leads",
          "description": "Search leads"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "description": "Get the data of a single lead"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new lead",
          "description": "Create a new lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "description": "Update an existing lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "description": "Get the data of a single user",
      "resource": "user"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search companies",
      "description": "Search companies",
      "resource": "company"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search leads",
      "description": "Search leads",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "description": "Get the data of a single lead",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new lead",
      "description": "Create a new lead",
      "resource": "lead"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "description": "Update an existing lead",
      "resource": "lead"
    }
  ]

npm_readme:
  # n8n-nodes-kylas

  This is an n8n community node that lets you use Kylas CRM in your n8n workflows.

  Kylas is a comprehensive sales CRM platform designed for growing businesses. It provides lead management, sales automation, contact management, and pipeline tracking capabilities to help sales teams streamline their processes and increase productivity.

  [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](#usage)
  - [Advanced Features](#advanced-features)
  - [Examples](#examples)
  - [Troubleshooting](#troubleshooting)
  - [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.

  ### Manual Installation

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-kylas`
  4. Agree to the risks of using community nodes
  5. Select **Install**

  After installation restart n8n to register the community node.

  ## Operations

  The Kylas node supports the following operations:

  ### User
  - **Get**: Retrieve user information by ID

  ### Company
  - **Get All**: Retrieve all companies with advanced filtering options
    - Support for field-based filtering
    - JSON rule-based filtering with operators (equal, contains, etc.)
    - Pagination support

  ### Lead
  - **Create**: Create a new lead with custom fields support
  - **Get**: Retrieve lead information by ID
  - **Update**: Update existing lead information
  - **Search**: Search for leads using various criteria
  - **Custom Fields**: Full support for dynamic custom fields with type validation

  ## Credentials

  To use this node, you need to authenticate with Kylas using an API key.

  ### Prerequisites

  1. You must have a Kylas CRM account
  2. You need to generate an API key from your Kylas account

  ### Setting up Authentication

  1. Log in to your Kylas CRM account
  2. Navigate to your account settings or API section
  3. Generate a new API key
  4. In n8n, create new credentials for "Kylas API"
  5. Enter your API key in the credentials configuration

  ### Authentication Method

  The node uses API key authentication via the `api-key` header. The credentials are automatically applied to all requests to the Kylas API.

  ## Compatibility

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

  This node follows n8n's latest development standards and should be compatible with all recent versions of n8n.

  ## Usage

  ### Basic Lead Creation

  1. Add the Kylas node to your workflow
  2. Select "Lead" as the resource
  3. Choose "Create" as the operation
  4. Fill in the required lead information
  5. Optionally configure custom fields

  ### Company Filtering

  The company "Get All" operation supports advanced filtering:

  - **Simple filtering**: Use the fields array to specify which fields to return
  - **Advanced filtering**: Use JSON rules with conditions like:
    - `equal`: Exact match
    - `contains`: Partial match
    - Support for multiple field types (text, number, date, etc.)

  ### Custom Fields

  The node provides dynamic custom field support for leads:

  - Custom fields are automatically loaded from your Kylas instance
  - Field types are validated (TEXT_FIELD, NUMBER, DATE, etc.)
  - Required fields are clearly marked
  - Supports various field types including text, numbers, dates, and more

  ## Advanced Features

  ### Dynamic Custom Fields Loading

  The Kylas node automatically fetches and validates custom fields from your Kylas instance:

  - **Real-time field loading**: Custom fields are loaded directly from the Kylas API
  - **Type validation**: Each field type is validated according to Kylas specifications
  - **Required field handling**: Required fields are clearly marked and validated
  - **Supported field types**:
    - TEXT_FIELD: Single-line text input
    - NUMBER: Numeric values
    - DATE: Date fields with proper formatting
    - EMAIL: Email address validation
    - PHONE: Phone number fields
    - URL: Website URL fields
    - And more...

  ### Company Filtering System

  Advanced filtering capabilities for company data retrieval:

  ```json
  {
    "fields": ["name", "email", "phone"],
    "jsonRule": {
      "condition": "AND",
      "rules": [
        {
          "field": "name",
          "operator": "contains",
          "value": "Tech"
        },
        {
          "field": "status",
          "operator": "equal",
          "value": "Active"
        }
      ]
    }
  }
  ```

  ### Error Handling and Validation

  - Comprehensive error handling for API responses
  - Field type validation before submission
  - Duplicate field prevention
  - Clear error messages for troubleshooting

  ## Examples

  ### Example 1: Create a Lead with Custom Fields

  ```json
  {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "phone": "+1234567890",
    "customFields": {
      "companyName": "Tech Corp",
      "leadSource": "Website",
      "budget": 50000
    }
  }
  ```

  ### Example 2: Filter Companies

  ```json
  {
    "fields": ["name", "email", "industry"],
    "jsonRule": {
      "condition": "OR",
      "rules": [
        {
          "field": "industry",
          "operator": "equal",
          "value": "Technology"
        },
        {
          "field": "revenue",
          "operator": "greaterThan",
          "value": 1000000
        }
      ]
    }
  }
  ```

  ### Example 3: Search Leads

  ```json
  {
    "searchTerm": "john@example.com",
    "filters": {
      "status": "New",
      "source": "Website"
    }
  }
  ```

  ## Troubleshooting

  ### Common Issues

  1. **Authentication Errors**
     - Verify your API key is correct
     - Check that your Kylas account has API access enabled
     - Ensure the API key hasn't expired

  2. **Custom Fields Not Loading**
     - Verify you have permission to access custom fields
     - Check that custom fields are active in your Kylas instance
     - Try refreshing the node configuration

  3. **Validation Errors**
     - Ensure required fields are provided
     - Check field types match expected formats
     - Verify field names are correct

  4. **Rate Limiting**
     - Kylas API has rate limits; implement delays between requests if needed
     - Use pagination for large data sets

  ### Debug Tips

  - Enable debug mode in n8n to see detailed API requests and responses
  - Check the Kylas API documentation for field requirements
  - Use the test functionality to verify credentials before running workflows

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Kylas CRM Official Website](https://kylas.io/)
  - [Kylas API Documentation](https://www.postman.com/ss0225/test/collection/yikzmca/kylas-apis-public)
  - [Kylas Help Center](https://support.kylas.io/portal/en/home)
  - [n8n Documentation](https://docs.n8n.io/)

  ## Version History

  ### v0.1.0 (Current)

  **Initial Release**
  - User operations: Get
  - Company operations: Get All with advanced filtering
  - Lead operations: Create, Get, Update, Search
  - Dynamic custom fields support for leads
  - Comprehensive error handling and validation
  - Support for JSON-based filtering rules
  - Field type validation and required field handling

  **Features:**
  - API key authentication
  - Real-time custom field loading
  - Advanced company filtering with JSON rules
  - Lead management with custom fields
  - User management operations
  - Comprehensive error handling

  **Compatibility:**
  - n8n version 0.198.0+
  - Kylas API v1

  ---

  ## Contributing

  This is a community-maintained node. If you encounter issues or have suggestions for improvements, please feel free to contribute or report issues.

  ## License

  MIT License - see the LICENSE file for details.

ai_documentation_summary:
  {"purpose":"A community n8n node that enables interaction with the Kylas CRM API for managing leads, companies, and users within automated workflows.","capabilities":["Create new leads with custom fields","Retrieve lead information by ID","Update existing lead information","Search for leads using various criteria","Retrieve all companies with advanced filtering","Retrieve user information by ID","Dynamic custom field support with type validation","JSON rule-based filtering for companies","Pagination support for company retrieval"],"authentication":"API key required (via 'api-key' header)","commonUseCases":["Automating lead creation from web forms","Syncing company data between Kylas and other systems","Filtering and searching leads based on custom criteria","Integrating CRM data into marketing automation workflows"],"limitations":["Community node (requires manual installation and risk acceptance)","Requires a Kylas CRM account with API access enabled","Requires n8n version 0.198.0 or higher"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.webhook"]}


node_type: n8n-nodes-tmpfiles.tmpfiles
package_name: n8n-nodes-tmpfiles
display_name: Tmpfiles
description: Upload files to Tmpfiles and get a temporary URL
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: mookielian
author_github_url: https://github.com/MookieLian/
npm_package_name: n8n-nodes-tmpfiles
npm_version: 2.1.0
community_fetched_at: 2026-04-16T09:43:36.038Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tmpfiles",
      "options": [
        {
          "name": "Tmpfile",
          "value": "tmpfiles"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload file to tmpfiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tmpfiles"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload file to tmpfiles",
      "resource": "tmpfiles"
    }
  ]

npm_readme:
  # n8n-nodes-tmpfiles

  This is an n8n community node for using the `tmpfiles.org` service in your n8n workflows. It uploads a binary file and returns a temporary download URL.

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

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

  ---

  Profile: https://gravatar.com/mookielian

  ---

  ## Installation

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

  Quick steps:

  1. In n8n UI → Settings → Community Nodes → Install a community node
  2. Package name: `n8n-nodes-tmpfiles`
  3. Click Install and restart n8n if prompted

  For self-hosted CLI:

  ```bash
  npm install n8n-nodes-tmpfiles
  ```

  ## Supported Operations

  - Upload File: Accepts a binary field, uploads it to `tmpfiles.org` API, and returns a temporary URL.

  ## Credentials

  - Not required. `tmpfiles.org` does not require authentication.

  ## Compatibility

  - n8n Nodes API Version: 1
  - Tested with current n8n versions. No known incompatibilities.

  ## Usage

  1. Add the `Tmpfiles` node to your workflow.
  2. Set `Input Data Field Name` to the name of your binary property (e.g., `data`).
  3. Execute the node; the output contains the temporary URL of the uploaded file.

  Tip: Chain this after a node that provides binary data (e.g., HTTP Request / Read Binary File).

  ## Resources

  - [n8n community nodes docs](https://docs.n8n.io/integrations/#community-nodes)
  - `tmpfiles.org` API: `https://tmpfiles.org/api/v1/upload`

  ## Version History

  - 0.1.0: Initial release

ai_documentation_summary:
  {"purpose":"Uploads binary files to the tmpfiles.org service and returns a temporary download URL for sharing or temporary storage.","capabilities":["Upload binary files to tmpfiles.org","Generate temporary download URLs","Accept binary data from input fields","Return temporary URL as output"],"authentication":"None","commonUseCases":["Temporary file sharing","Storing large files temporarily","Workflow intermediate file storage","File distribution without permanent hosting"],"limitations":["URLs are temporary and may expire","File size limits apply to tmpfiles.org service","No authentication or access control","Files are not permanently stored"],"relatedNodes":["HTTP Request","Read Binary File","Binary File","Webhook"]}


node_type: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudDns
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (Cloud DNS)
description: Interact with IONOS Cloud DNS API v1
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-04-16T09:43:36.039Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "zone",
      "options": [
        {
          "name": "DNSSEC",
          "value": "dnssec",
          "description": "Manage DNSSEC keys"
        },
        {
          "name": "Quota",
          "value": "quota",
          "description": "Get quota information"
        },
        {
          "name": "Record",
          "value": "record",
          "description": "Manage DNS records"
        },
        {
          "name": "Reverse Record",
          "value": "reverseRecord",
          "description": "Manage reverse DNS records"
        },
        {
          "name": "Secondary Zone",
          "value": "secondaryZone",
          "description": "Manage secondary DNS zones"
        },
        {
          "name": "Zone",
          "value": "zone",
          "description": "Manage primary DNS zones"
        },
        {
          "name": "Zone File",
          "value": "zoneFile",
          "description": "Import/export zone files in BIND format"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a zone",
          "routing": {
            "request": {
              "url": "",
              "method": "POST"
            }
          },
          "description": "Create a DNS zone"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a zone",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/{{$parameter.zoneId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a DNS zone"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a zone",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}",
              "method": "GET"
            }
          },
          "description": "Get a DNS zone"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many zones",
          "routing": {
            "request": {
              "url": "",
              "method": "GET"
            }
          },
          "description": "Get many DNS zones"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a zone",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}",
              "method": "PUT"
            }
          },
          "description": "Update a DNS zone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zone"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a record",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/records",
              "method": "POST"
            }
          },
          "description": "Create a DNS record"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a record",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a DNS record"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a record",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
              "method": "GET"
            }
          },
          "description": "Get a DNS record"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many records",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "={{ $parameter.zoneId ? \"/\" + $parameter.zoneId + \"/records\" : \"/records\" }}",
              "method": "GET"
            }
          },
          "description": "Get many DNS records"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a record",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
              "method": "PUT"
            }
          },
          "description": "Update a DNS record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "record"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a secondary zone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/secondaryzones",
              "method": "POST"
            }
          },
          "description": "Create a secondary zone"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a secondary zone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a secondary zone"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a secondary zone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
              "method": "GET"
            }
          },
          "description": "Get a secondary zone"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many secondary zones",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/secondaryzones",
              "method": "GET"
            }
          },
          "description": "Get many secondary zones"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a secondary zone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
              "method": "PUT"
            }
          },
          "description": "Update a secondary zone"
        },
        {
          "name": "AXFR Get",
          "value": "axfrGet",
          "action": "Get AXFR status",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}/axfr",
              "method": "GET"
            }
          },
          "description": "Get AXFR status for a secondary zone"
        },
        {
          "name": "AXFR Start",
          "value": "axfrStart",
          "action": "Start AXFR transfer",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}/axfr",
              "method": "PUT"
            }
          },
          "description": "Trigger AXFR transfer for a secondary zone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "secondaryZone"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a zone file",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/zonefile",
              "method": "GET"
            }
          },
          "description": "Export a zone file in BIND format"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a zone file",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/{{$parameter.zoneId}}/zonefile",
              "method": "PUT",
              "headers": {
                "Content-Type": "text/plain"
              }
            }
          },
          "description": "Import a zone file in BIND format"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zoneFile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get quota",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/quota",
              "method": "GET"
            }
          },
          "description": "Get quota information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "quota"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create DNSSEC keys",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/keys",
              "method": "POST"
            }
          },
          "description": "Create DNSSEC keys for a zone"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete DNSSEC keys",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/{{$parameter.zoneId}}/keys",
              "method": "DELETE"
            }
          },
          "description": "Delete DNSSEC keys for a zone"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get DNSSEC keys",
          "routing": {
            "request": {
              "url": "=/{{$parameter.zoneId}}/keys",
              "method": "GET"
            }
          },
          "description": "Get DNSSEC keys for a zone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dnssec"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a reverse record",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/reverserecords",
              "method": "POST"
            }
          },
          "description": "Create a reverse DNS record"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a reverse record",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/reverserecords/{{$parameter.reverserecordId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a reverse DNS record"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a reverse record",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/reverserecords/{{$parameter.reverserecordId}}",
              "method": "GET"
            }
          },
          "description": "Get a reverse DNS record"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many reverse records",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/reverserecords",
              "method": "GET"
            }
          },
          "description": "Get many reverse DNS records"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a reverse record",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/reverserecords/{{$parameter.reverserecordId}}",
              "method": "PUT"
            }
          },
          "description": "Update a reverse DNS record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reverseRecord"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a zone",
      "routing": {
        "request": {
          "url": "",
          "method": "POST"
        }
      },
      "description": "Create a DNS zone",
      "resource": "zone"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a zone",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/{{$parameter.zoneId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a DNS zone",
      "resource": "zone"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a zone",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}",
          "method": "GET"
        }
      },
      "description": "Get a DNS zone",
      "resource": "zone"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many zones",
      "routing": {
        "request": {
          "url": "",
          "method": "GET"
        }
      },
      "description": "Get many DNS zones",
      "resource": "zone"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a zone",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}",
          "method": "PUT"
        }
      },
      "description": "Update a DNS zone",
      "resource": "zone"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a record",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/records",
          "method": "POST"
        }
      },
      "description": "Create a DNS record",
      "resource": "record"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a record",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a DNS record",
      "resource": "record"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a record",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
          "method": "GET"
        }
      },
      "description": "Get a DNS record",
      "resource": "record"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many records",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "={{ $parameter.zoneId ? \"/\" + $parameter.zoneId + \"/records\" : \"/records\" }}",
          "method": "GET"
        }
      },
      "description": "Get many DNS records",
      "resource": "record"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a record",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/records/{{$parameter.recordId}}",
          "method": "PUT"
        }
      },
      "description": "Update a DNS record",
      "resource": "record"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a secondary zone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/secondaryzones",
          "method": "POST"
        }
      },
      "description": "Create a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a secondary zone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a secondary zone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
          "method": "GET"
        }
      },
      "description": "Get a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many secondary zones",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/secondaryzones",
          "method": "GET"
        }
      },
      "description": "Get many secondary zones",
      "resource": "secondaryZone"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a secondary zone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}",
          "method": "PUT"
        }
      },
      "description": "Update a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "AXFR Get",
      "value": "axfrGet",
      "action": "Get AXFR status",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}/axfr",
          "method": "GET"
        }
      },
      "description": "Get AXFR status for a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "AXFR Start",
      "value": "axfrStart",
      "action": "Start AXFR transfer",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/secondaryzones/{{$parameter.secondaryZoneId}}/axfr",
          "method": "PUT"
        }
      },
      "description": "Trigger AXFR transfer for a secondary zone",
      "resource": "secondaryZone"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a zone file",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/zonefile",
          "method": "GET"
        }
      },
      "description": "Export a zone file in BIND format",
      "resource": "zoneFile"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a zone file",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/{{$parameter.zoneId}}/zonefile",
          "method": "PUT",
          "headers": {
            "Content-Type": "text/plain"
          }
        }
      },
      "description": "Import a zone file in BIND format",
      "resource": "zoneFile"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get quota",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/quota",
          "method": "GET"
        }
      },
      "description": "Get quota information",
      "resource": "quota"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create DNSSEC keys",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/keys",
          "method": "POST"
        }
      },
      "description": "Create DNSSEC keys for a zone",
      "resource": "dnssec"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete DNSSEC keys",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/{{$parameter.zoneId}}/keys",
          "method": "DELETE"
        }
      },
      "description": "Delete DNSSEC keys for a zone",
      "resource": "dnssec"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get DNSSEC keys",
      "routing": {
        "request": {
          "url": "=/{{$parameter.zoneId}}/keys",
          "method": "GET"
        }
      },
      "description": "Get DNSSEC keys for a zone",
      "resource": "dnssec"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a reverse record",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/reverserecords",
          "method": "POST"
        }
      },
      "description": "Create a reverse DNS record",
      "resource": "reverseRecord"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a reverse record",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/reverserecords/{{$parameter.reverserecordId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a reverse DNS record",
      "resource": "reverseRecord"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a reverse record",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/reverserecords/{{$parameter.reverserecordId}}",
          "method": "GET"
        }
      },
      "description": "Get a reverse DNS record",
      "resource": "reverseRecord"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many reverse records",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/reverserecords",
          "method": "GET"
        }
      },
      "description": "Get many reverse DNS records",
      "resource": "reverseRecord"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a reverse record",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/reverserecords/{{$parameter.reverserecordId}}",
          "method": "PUT"
        }
      },
      "description": "Update a reverse DNS record",
      "resource": "reverseRecord"
    }
  ]

npm_readme:
[cell repeats an earlier one in this file: 19360 characters]

ai_documentation_summary:
  {"purpose":"This node enables interaction with the IONOS Cloud DNS API v1 to manage DNS zones, records, DNSSEC, and zone transfers within n8n workflows.","capabilities":["Manage DNS zones","Create and update DNS records (15 types)","Manage DNSSEC","Handle zone transfers","Query DNS records","Delete DNS records"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Automating DNS record updates for new domain deployments","Managing DNS configurations for multi-domain setups","Enabling DNSSEC for security","Syncing DNS changes across environments"],"limitations":["Limited to DNS-specific operations (unlike other IONOS nodes that cover infrastructure, certificates, CDN, and AI)"],"relatedNodes":["IONOS Cloud (Infrastructure)","IONOS Cloud (Certificate Manager)","IONOS Cloud (CDN)","IONOS Cloud (AI Model Hub)","IONOS Cloud Chat Model"]}


node_type: n8n-nodes-copyseeker.copyseeker
package_name: n8n-nodes-copyseeker
display_name: Copyseeker
description: Reverse image search and copyright analysis
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: copyseeker
author_github_url: https://github.com/man-tas/
npm_package_name: n8n-nodes-copyseeker
npm_version: 1.0.5
community_fetched_at: 2026-04-16T09:43:36.040Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Image",
          "value": "image"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reverseSearch",
      "options": [
        {
          "name": "Reverse Search",
          "value": "reverseSearch",
          "action": "Perform reverse image search",
          "description": "Find where an image appears online"
        },
        {
          "name": "Site-Specific Search",
          "value": "siteSearch",
          "action": "Search specific site for image",
          "description": "Search for image on a specific website"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Reverse Search",
      "value": "reverseSearch",
      "action": "Perform reverse image search",
      "description": "Find where an image appears online",
      "resource": "image"
    },
    {
      "name": "Site-Specific Search",
      "value": "siteSearch",
      "action": "Search specific site for image",
      "description": "Search for image on a specific website",
      "resource": "image"
    }
  ]

npm_readme:
  # n8n-nodes-copyseeker

  n8n community node for [Copyseeker](https://copyseeker.net) - Reverse Image Search API

  [Installation](#installation) • [Configuration](#configuration) • [Operations](#operations) • [Use Cases](#use-cases) • [Support](#support)

  ## Installation

  ### Via n8n Community Nodes

  1. Go to **Settings** > **Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-copyseeker`
  4. Click **Install**

  ### Via npm
  ```bash
  npm install n8n-nodes-copyseeker
  ```

  ## Prerequisites

  Get your API key from [RapidAPI Copyseeker](https://rapidapi.com/copyseeker1-copyseeker-default/api/reverse-image-search-by-copyseeker)

  ## Configuration

  1. Add **Copyseeker** node to workflow
  2. Click **Create New Credentials**
  3. Enter your RapidAPI key
  4. Save

  ## Operations

  ### Reverse Image Search

  Find where an image appears online.

  **Input:**
  - Image URL (required)
  - Return Full Response (optional)
  - Filter by Minimum Rank (optional)
  - Include Visual Similar Images (optional)

  **Output:**
  ```json
  {
    "bestGuess": "logo design",
    "totalMatches": 15,
    "highestRankedSource": {
      "url": "https://example.com",
      "title": "Example Website",
      "rank": 8.5
    },
    "topEntities": ["Web Design", "Logo", "Branding"],
    "visuallySimilarCount": 23,
    "allPages": [],
    "entities": [],
    "visuallySimilar": []
  }
  ```

  ### Site-Specific Search

  Search for an image on a specific website.

  **Input:**
  - Image URL (required)
  - Target Site (required) - domain without protocol
  - Return Full Response (optional)
  - Filter by Minimum Rank (optional)
  - Include Visual Similar Images (optional)

  ## Use Cases

  ### Copyright Protection
  Monitor unauthorized use of your images across the web.

  ### E-commerce Visual Search
  Enable customers to find products by uploading images.

  ### Brand Protection
  Detect counterfeit products and unauthorized logo usage.

  ### Content Moderation
  Filter duplicate or previously flagged content.

  ### Fraud Detection
  Verify profile photos in dating apps, insurance claims, job applications.

  ### Fact-Checking
  Verify image authenticity and track original sources.

  ## Page Authority Scores

  | Score | Authority |
  |-------|-----------|
  | 8.0-10.0 | Very High - Major sites, likely original |
  | 6.0-7.9 | High - Established sites |
  | 4.0-5.9 | Medium - Regular sites |
  | 2.0-3.9 | Low - Smaller sites |
  | 0.0-1.9 | Very Low - New or low-authority |

  ## Best Practices

  **Do:**
  - Use direct image URLs (.jpg, .png, .gif, .webp)
  - Keep images under 10MB
  - Implement error handling
  - Cache results when possible
  - Use minimum rank filtering

  **Don't:**
  - Use HTML page URLs
  - Include protocol in Target Site
  - Exceed rate limits
  - Process same image repeatedly

  ## Troubleshooting

  **No matches found**
  - Verify URL is direct and public
  - Image may be too new to index

  **Rate limit exceeded**
  - Check RapidAPI plan limits
  - Add delays between requests

  **Invalid credentials**
  - Verify RapidAPI key
  - Check subscription status

  ## Support

  - [Copyseeker Website](https://copyseeker.net)
  - [GitHub Issues](https://github.com/man-tas/n8n-nodes-copyseeker/issues)
  - [RapidAPI Page](https://rapidapi.com/copyseeker1-copyseeker-default/api/reverse-image-search-by-copyseeker)

  ## License

  MIT

  ---

  Built for the n8n community • [Documentation](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"A n8n community node that performs reverse image search and copyright analysis using the Copyseeker API to find where images appear online.","capabilities":["Reverse image search to find image sources","Site-specific image search","Visual similarity detection","Return best guess and entity analysis","Filter results by minimum rank","Return full response data including all pages"],"authentication":"RapidAPI key required","commonUseCases":["Copyright protection monitoring","E-commerce visual search","Brand protection and counterfeit detection","Content moderation","Fraud detection in profile photos"],"limitations":["Requires direct image URLs (not HTML page URLs)","Images must be under 10MB","Subject to RapidAPI rate limits","May not find very new or unindexed images","Target Site parameter should not include protocol"],"relatedNodes":[]}


node_type: @chatarchitect/n8n-nodes-chatarchitectcom-for-whatsapp.chatArchitectWhatsApp
package_name: @chatarchitect/n8n-nodes-chatarchitectcom-for-whatsapp
display_name: ChatArchitect WhatsApp
description: ChatArchitect WhatsApp integration
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: chatarchitect
author_github_url: https://github.com/ChatArchitect/n8n-nodes-chatarchitectcom-for-whatsapp.git
npm_package_name: @chatarchitect/n8n-nodes-chatarchitectcom-for-whatsapp
npm_version: 0.0.34
community_fetched_at: 2026-04-16T09:43:36.041Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Send Text",
          "value": "sendText",
          "action": "Send a text message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendImage",
      "options": [
        {
          "name": "Send Image",
          "value": "sendImage",
          "action": "Send an image"
        },
        {
          "name": "Send Video",
          "value": "sendVideo",
          "action": "Send a video"
        },
        {
          "name": "Send Audio",
          "value": "sendAudio",
          "action": "Send an audio file"
        },
        {
          "name": "Send Document",
          "value": "sendDocument",
          "action": "Send a document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "set",
      "options": [
        {
          "name": "Set Webhook",
          "value": "set",
          "action": "Set a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Text",
      "value": "sendText",
      "action": "Send a text message",
      "resource": "message"
    },
    {
      "name": "Send Image",
      "value": "sendImage",
      "action": "Send an image",
      "resource": "media"
    },
    {
      "name": "Send Video",
      "value": "sendVideo",
      "action": "Send a video",
      "resource": "media"
    },
    {
      "name": "Send Audio",
      "value": "sendAudio",
      "action": "Send an audio file",
      "resource": "media"
    },
    {
      "name": "Send Document",
      "value": "sendDocument",
      "action": "Send a document",
      "resource": "media"
    },
    {
      "name": "Set Webhook",
      "value": "set",
      "action": "Set a webhook",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-chatarchitectcom-for-whatsapp

  The application integrates the official WhatsApp Business API into your n8n.

  Incoming and outgoing messages, media, buttons, also you can initiate a conversation.

  The cost of WhatsApp Business API starts from €15 per month, for more details visit the website https://www.chatarchitect.com/whatsapp/

  1 month free trial, to connect and receive a key, you can write to our WhatsApp https://wa.me/421233221242


node_type: n8n-nodes-ship24.ship24
package_name: n8n-nodes-ship24
display_name: Ship24
description: Automate shipment tracking using the Ship24 API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: ship24
author_github_url: https://github.com/ship24-official/
npm_package_name: n8n-nodes-ship24
npm_version: 1.0.13
community_fetched_at: 2026-04-16T09:43:36.042Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tracker",
      "options": [
        {
          "name": "Tracker",
          "value": "tracker"
        },
        {
          "name": "Utility",
          "value": "utility"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tracker"
        },
        {
          "name": "Create and Get Results",
          "value": "createAndGetResults",
          "action": "Create and get results"
        },
        {
          "name": "Get Results By Tracker ID",
          "value": "getResultsByTrackerId",
          "action": "Get results by tracker ID"
        },
        {
          "name": "Get Results By Tracking Number",
          "value": "getResultsByTrackingNumber",
          "action": "Get results by tracking number"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tracker"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tracker"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tracker",
      "resource": "tracker"
    },
    {
      "name": "Create and Get Results",
      "value": "createAndGetResults",
      "action": "Create and get results",
      "resource": "tracker"
    },
    {
      "name": "Get Results By Tracker ID",
      "value": "getResultsByTrackerId",
      "action": "Get results by tracker ID",
      "resource": "tracker"
    },
    {
      "name": "Get Results By Tracking Number",
      "value": "getResultsByTrackingNumber",
      "action": "Get results by tracking number",
      "resource": "tracker"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tracker",
      "resource": "tracker"
    }
  ]

npm_readme:
  # n8n-nodes-ship24

  Automate global shipment tracking inside n8n using the Ship24 API.

  The Ship24 node enables production-grade shipment tracking workflows
  including bulk tracker creation, structured result retrieval, multi-item
  processing, and robust error handling.

  ------------------------------------------------------------------------

  ## About Ship24

  Ship24 is a global shipment tracking API supporting 1500+ couriers and
  marketplaces worldwide.

  This node allows n8n users to:

  -   Create shipment trackers
  -   Retrieve tracking results
  -   Update tracker subscription status
  -   Process bulk shipments
  -   Automate delivery workflows at scale

  ------------------------------------------------------------------------

  ## Features

  -   Single tracker creation
  -   Bulk tracker creation (automatic chunking up to 100 per request)
  -   Create and immediately fetch tracking results
  -   Retrieve results by tracking number
  -   Retrieve results by tracker ID
  -   Update tracker subscription status
  -   Full n8n multi-item support
  -   Structured per-item error handling
  -   `continueOnFail` support
  -   Utility mode for advanced API access

  ------------------------------------------------------------------------

  ## Installation

  ### Community Node Installation

  1.  Open n8n.
  2.  Go to **Settings → Community Nodes**.
  3.  Click **Install**.
  4.  Enter:

  ```{=html}
  <!-- -->
  ```
      n8n-nodes-ship24

  5.  Restart n8n if required.

  ------------------------------------------------------------------------

  ## Credentials Setup

  This node requires a Ship24 API key.

  1.  In n8n, create new credentials.
  2.  Select **Ship24 API**.
  3.  Enter your API key.
  4.  Save.

  ![Credentials Setup](docs/images/credentials-setup.png)

  ------------------------------------------------------------------------

  ## Node Overview

  ![Node Overview](docs/images/node-overview.png)

  The node provides two resources:

  -   **Tracker**
  -   **Utility**

  ------------------------------------------------------------------------

  # Tracker Resource

  ## Create

  Create shipment trackers.

  Supports:

  -   Single per item
  -   Bulk mode (up to 100 tracking numbers per API request)

  ![Create operation](docs/images/create-operation.png)

  ### Bulk Mode Behaviour

  Bulk mode still follows standard n8n multi-item logic.

  Each incoming item must contain one tracking number per item.
  The Ship24 node automatically batches those items into API requests of
  up to 100 tracking numbers per call.

  Expected Input Format

  Your previous node (Set, Code, HTTP Request, Google Sheets, etc.) should
  output items like:

  -   Item 1 → { "trackingNumber": "00340435063770617839" }
  -   Item 2 → { "trackingNumber": "00340434788009688510" }
  -   Item 3 → { "trackingNumber": "00340434788009688268" }

  If your upstream system provides an array of tracking numbers, use an
  Item Lists, Split Out Items, or Code node to convert the array into
  multiple items before passing them to the Ship24 node.

  Automatic Chunking

  If more than 100 items are provided, the node automatically splits them into multiple API calls.

  | Input items | API calls |
  |------------|-----------|
  | 80         | 1         |
  | 150        | 2         |
  | 250        | 3         |

  Each input item returns exactly one output item.

  ![Bulk Mode](docs/images/bulk-mode.png)

  ------------------------------------------------------------------------

  ## Create and Get Results

  Creates a tracker and immediately retrieves tracking results.

  Useful when:

  -   You need tracking data immediately
  -   You want simplified output for automation workflows

  ![Create and Get Results](docs/images/create-tracker-get-results.png)

  ------------------------------------------------------------------------

  ## Update

  Update tracker subscription status (`isSubscribed` only).

  -   Requires a valid `trackerId` (UUID)
  -   Performs UUID validation before the API call

  ![Update Tracker](docs/images/update-tracker.png)

  ------------------------------------------------------------------------

  ## Get Results

  Retrieve tracking data:

  -   By tracking number
  -   By tracker ID

  ![Get Results](docs/images/get-results-by-trackerId.png)

  ------------------------------------------------------------------------

  # Utility Resource

  The Utility resource allows advanced API access.

  You can:

  -   Define HTTP method
  -   Define path
  -   Provide custom request body
  -   Provide query parameters

  ![Utility Resource](docs/images/utility-call.png)

  ------------------------------------------------------------------------

  ## Response Modes

  ### Raw Mode

  This node returns the full Ship24 API response (raw mode).

  ------------------------------------------------------------------------

  ## Multi-Item Behaviour

  This node fully supports n8n multi-item processing:

  -   One output item per input item
  -   Bulk operations preserve input-to-output mapping
  -   No silent drops
  -   Large workflows (50+ items) supported

  ------------------------------------------------------------------------

  ## Error Handling

  The node includes structured error handling for:

  -   401 Unauthorized
  -   404 Not Found
  -   429 Rate limit
  -   Invalid UUID format
  -   Empty tracking number
  -   Bulk mapping failures

  With `continueOnFail` enabled, per-item failures return structured
  objects:

  ``` json
  {
    "success": false,
    "error": {
      "type": "request_error",
      "message": "..."
    }
  }
  ```

  This allows resilient workflow design without unexpected crashes.

  ------------------------------------------------------------------------

  ## Performance Notes

  -   Bulk mode automatically chunks at 100 items per API request.
  -   Large workflows are processed sequentially per chunk.

  ------------------------------------------------------------------------

  ## Development

  ### Build

  ``` bash
  npm run build
  ```

  ### Lint

  ``` bash
  npm run lint
  ```

  ### Local package test

  ``` bash
  npm pack
  ```

  ------------------------------------------------------------------------

  ## License

  MIT


node_type: n8n-nodes-streak-crm.streak
package_name: n8n-nodes-streak-crm
display_name: Streak
description: Streak CRM Node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: nader_heidari
author_github_url: https://github.com/nukleas/
npm_package_name: n8n-nodes-streak-crm
npm_version: 1.2.1
community_fetched_at: 2026-04-16T09:43:36.042Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "user",
      "options": [
        {
          "name": "Box",
          "value": "box",
          "description": "Operate on Streak boxes (deals/opportunities)"
        },
        {
          "name": "Comment",
          "value": "comment",
          "description": "Operate on Streak comments"
        },
        {
          "name": "Contact",
          "value": "contact",
          "description": "Operate on Streak contacts"
        },
        {
          "name": "Field",
          "value": "field",
          "description": "Operate on Streak fields and field values"
        },
        {
          "name": "File",
          "value": "file",
          "description": "Operate on Streak files"
        },
        {
          "name": "Meeting",
          "value": "meeting",
          "description": "Operate on Streak meetings"
        },
        {
          "name": "Newsfeed",
          "value": "newsfeed",
          "description": "View Streak activity newsfeeds"
        },
        {
          "name": "Organization",
          "value": "organization",
          "description": "Operate on Streak organizations"
        },
        {
          "name": "Pipeline",
          "value": "pipeline",
          "description": "Operate on Streak pipelines"
        },
        {
          "name": "Search",
          "value": "search",
          "description": "Search across Streak data"
        },
        {
          "name": "Snippet",
          "value": "snippet",
          "description": "Operate on Streak snippets"
        },
        {
          "name": "Stage",
          "value": "stage",
          "description": "Operate on Streak pipeline stages"
        },
        {
          "name": "Task",
          "value": "task",
          "description": "Operate on Streak tasks"
        },
        {
          "name": "Team",
          "value": "team",
          "description": "Operate on Streak teams"
        },
        {
          "name": "Thread",
          "value": "thread",
          "description": "Operate on Streak email threads"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Operate on Streak users"
        },
        {
          "name": "Webhook",
          "value": "webhook",
          "description": "Manage Streak webhooks"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrentUser",
      "options": [
        {
          "name": "Get Current User",
          "value": "getCurrentUser",
          "action": "Get current user",
          "description": "Get information about the current user"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get a user",
          "description": "Get information about a specific user by their key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMyTeams",
      "options": [
        {
          "name": "Get My Teams",
          "value": "getMyTeams",
          "action": "Get my teams",
          "description": "List all teams the authenticated user belongs to"
        },
        {
          "name": "Get Team",
          "value": "getTeam",
          "action": "Get a team",
          "description": "Get information about a specific team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "team"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAllPipelines",
      "options": [
        {
          "name": "Create Pipeline",
          "value": "createPipeline",
          "action": "Create a pipeline",
          "description": "Creates a new pipeline"
        },
        {
          "name": "Delete Pipeline",
          "value": "deletePipeline",
          "action": "Delete a pipeline",
          "description": "Deletes a pipeline"
        },
        {
          "name": "Get Pipeline",
          "value": "getPipeline",
          "action": "Get a pipeline",
          "description": "Gets a specific pipeline by its key"
        },
        {
          "name": "List All Pipelines",
          "value": "listAllPipelines",
          "action": "List all pipelines",
          "description": "Lists all pipelines the user has access to"
        },
        {
          "name": "Move Boxes (Batch)",
          "value": "moveBoxesBatch",
          "action": "Move boxes between pipelines",
          "description": "Moves multiple boxes to a different pipeline"
        },
        {
          "name": "Update Pipeline",
          "value": "updatePipeline",
          "action": "Update a pipeline",
          "description": "Updates an existing pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pipeline"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listBoxes",
      "options": [
        {
          "name": "Create Box in a Pipeline",
          "value": "createBox",
          "action": "Create a box in a pipeline",
          "description": "Creates a new box in a pipeline"
        },
        {
          "name": "Delete Box",
          "value": "deleteBox",
          "action": "Delete a box",
          "description": "Deletes a box"
        },
        {
          "name": "Get Box",
          "value": "getBox",
          "action": "Get a box",
          "description": "Gets a specific box by its key"
        },
        {
          "name": "Get Multiple Boxes",
          "value": "getMultipleBoxes",
          "action": "Get multiple boxes",
          "description": "Gets multiple boxes by their keys"
        },
        {
          "name": "Get Timeline",
          "value": "getTimeline",
          "action": "Get timeline",
          "description": "Gets the timeline of events for a box"
        },
        {
          "name": "List Boxes in Pipeline",
          "value": "listBoxes",
          "action": "Get all boxes in a pipeline",
          "description": "Get all boxes (deals) in a pipeline"
        },
        {
          "name": "Update Box",
          "value": "updateBox",
          "action": "Update a box",
          "description": "Updates an existing box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "box"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listStages",
      "options": [
        {
          "name": "Create Stage in a Pipeline",
          "value": "createStage",
          "action": "Create a stage in a pipeline",
          "description": "Creates a new stage in a pipeline"
        },
        {
          "name": "Delete Stage",
          "value": "deleteStage",
          "action": "Delete a stage",
          "description": "Deletes a stage"
        },
        {
          "name": "Get Stage",
          "value": "getStage",
          "action": "Get a stage",
          "description": "Gets a specific stage by its key"
        },
        {
          "name": "List Stages in a Pipeline",
          "value": "listStages",
          "action": "List stages in a pipeline",
          "description": "Lists all stages in a pipeline"
        },
        {
          "name": "Update Stage",
          "value": "updateStage",
          "action": "Update a stage",
          "description": "Updates an existing stage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listFields",
      "options": [
        {
          "name": "Create Field in a Pipeline",
          "value": "createField",
          "action": "Create a field in a pipeline",
          "description": "Creates a new field in a pipeline"
        },
        {
          "name": "Delete Field",
          "value": "deleteField",
          "action": "Delete a field",
          "description": "Deletes a field"
        },
        {
          "name": "Get Field",
          "value": "getField",
          "action": "Get a field",
          "description": "Gets a specific field by its key"
        },
        {
          "name": "Get Field Value in a Box",
          "value": "getFieldValue",
          "action": "Get a field value in a box",
          "description": "Gets a specific field value for a box"
        },
        {
          "name": "List Field Values in a Box",
          "value": "listFieldValues",
          "action": "List field values in a box",
          "description": "Lists all field values for a box"
        },
        {
          "name": "List Fields in a Pipeline",
          "value": "listFields",
          "action": "List fields in a pipeline",
          "description": "Lists all fields in a pipeline"
        },
        {
          "name": "Update Field",
          "value": "updateField",
          "action": "Update a field",
          "description": "Updates an existing field"
        },
        {
          "name": "Update Field Value in a Box",
          "value": "updateFieldValue",
          "action": "Update a field value in a box",
          "description": "Updates a field value for a box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "field"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContact",
      "options": [
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get a contact",
          "description": "Gets a specific contact"
        },
        {
          "name": "Create Contact",
          "value": "createContact",
          "action": "Create a contact",
          "description": "Creates a new contact"
        },
        {
          "name": "Update Contact",
          "value": "updateContact",
          "action": "Update a contact",
          "description": "Updates an existing contact"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete a contact",
          "description": "Deletes a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOrganization",
      "options": [
        {
          "name": "Check Existing Organizations",
          "value": "checkExistingOrganizations",
          "action": "Check existing organizations",
          "description": "Checks for existing organizations by name or domain"
        },
        {
          "name": "Create Organization",
          "value": "createOrganization",
          "action": "Create an organization",
          "description": "Creates a new organization"
        },
        {
          "name": "Delete Organization",
          "value": "deleteOrganization",
          "action": "Delete an organization",
          "description": "Deletes an organization"
        },
        {
          "name": "Get Organization",
          "value": "getOrganization",
          "action": "Get an organization",
          "description": "Gets a specific organization"
        },
        {
          "name": "Update Organization",
          "value": "updateOrganization",
          "action": "Update an organization",
          "description": "Updates an existing organization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTask",
      "options": [
        {
          "name": "Create Task in a Box",
          "value": "createTask",
          "action": "Create a task in a box",
          "description": "Creates a new task for a box"
        },
        {
          "name": "Delete Task",
          "value": "deleteTask",
          "action": "Delete a task",
          "description": "Deletes a task"
        },
        {
          "name": "Get Task",
          "value": "getTask",
          "action": "Get a task",
          "description": "Gets a specific task"
        },
        {
          "name": "Get Tasks in a Box",
          "value": "getTasksInBox",
          "action": "Get tasks in a box",
          "description": "Gets all tasks associated with a box"
        },
        {
          "name": "Update Task",
          "value": "updateTask",
          "action": "Update a task",
          "description": "Updates an existing task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listCommentsInBox",
      "options": [
        {
          "name": "Create Comment",
          "value": "createComment",
          "action": "Create a comment",
          "description": "Creates a new comment on a box"
        },
        {
          "name": "Delete Comment",
          "value": "deleteComment",
          "action": "Delete a comment",
          "description": "Deletes a comment"
        },
        {
          "name": "Edit Comment",
          "value": "editComment",
          "action": "Edit a comment",
          "description": "Edits an existing comment"
        },
        {
          "name": "Get Comment",
          "value": "getComment",
          "action": "Get a comment",
          "description": "Gets a specific comment"
        },
        {
          "name": "List Comments in Box",
          "value": "listCommentsInBox",
          "action": "List comments in a box",
          "description": "Lists all comments in a box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listMeetingsInBox",
      "options": [
        {
          "name": "Create Meeting",
          "value": "createMeeting",
          "action": "Create a meeting",
          "description": "Creates a new meeting or call log for a box"
        },
        {
          "name": "Delete Meeting",
          "value": "deleteMeeting",
          "action": "Delete a meeting",
          "description": "Deletes a meeting"
        },
        {
          "name": "Edit Meeting",
          "value": "editMeeting",
          "action": "Edit a meeting",
          "description": "Edits an existing meeting"
        },
        {
          "name": "Get Meeting",
          "value": "getMeeting",
          "action": "Get a meeting",
          "description": "Gets a single meeting by key"
        },
        {
          "name": "List Meetings in Box",
          "value": "listMeetingsInBox",
          "action": "List meetings in a box",
          "description": "Lists all meetings for a box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "meeting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listThreadsInBox",
      "options": [
        {
          "name": "Add Thread to Box",
          "value": "addThreadToBox",
          "action": "Add a thread to a box",
          "description": "Adds an email thread to a box"
        },
        {
          "name": "Get Thread",
          "value": "getThread",
          "action": "Get a thread",
          "description": "Gets a specific email thread"
        },
        {
          "name": "Get Thread by Gmail ID",
          "value": "getThreadByGmailId",
          "action": "Get a thread by gmail id",
          "description": "Gets thread info by Gmail thread ID"
        },
        {
          "name": "List Threads in Box",
          "value": "listThreadsInBox",
          "action": "List threads in a box",
          "description": "Lists all email threads in a box"
        },
        {
          "name": "Remove Thread",
          "value": "removeThread",
          "action": "Remove a thread",
          "description": "Removes an email thread from a box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "thread"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listFilesInBox",
      "options": [
        {
          "name": "Add File to Box",
          "value": "addFileToBox",
          "action": "Add a file to a box",
          "description": "Adds a Google Drive file to a box"
        },
        {
          "name": "Get File Contents",
          "value": "getFileContents",
          "action": "Get file contents",
          "description": "Gets the contents of a file (only works for GMAIL_API file types)"
        },
        {
          "name": "Get File Metadata",
          "value": "getFile",
          "action": "Get file metadata",
          "description": "Gets metadata for a specific file"
        },
        {
          "name": "List Files in Box",
          "value": "listFilesInBox",
          "action": "List files in a box",
          "description": "Lists all files associated with a box"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllNewsfeed",
      "options": [
        {
          "name": "Get All Newsfeed",
          "value": "getAllNewsfeed",
          "action": "Get all newsfeed",
          "description": "Gets activity across all pipelines"
        },
        {
          "name": "Get Box Newsfeed",
          "value": "getBoxNewsfeed",
          "action": "Get box newsfeed",
          "description": "Gets activity history for a specific box"
        },
        {
          "name": "Get Pipeline Newsfeed",
          "value": "getPipelineNewsfeed",
          "action": "Get pipeline newsfeed",
          "description": "Gets activity history for a pipeline and its boxes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "newsfeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSnippets",
      "options": [
        {
          "name": "Create Snippet",
          "value": "createSnippet",
          "action": "Create a snippet",
          "description": "Creates a new snippet"
        },
        {
          "name": "Delete Snippet",
          "value": "deleteSnippet",
          "action": "Delete a snippet",
          "description": "Deletes a snippet"
        },
        {
          "name": "Edit Snippet",
          "value": "editSnippet",
          "action": "Edit a snippet",
          "description": "Edits an existing snippet"
        },
        {
          "name": "Get Snippet",
          "value": "getSnippet",
          "action": "Get a snippet",
          "description": "Gets a specific snippet"
        },
        {
          "name": "List Snippets",
          "value": "listSnippets",
          "action": "List snippets",
          "description": "Lists all snippets for the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "snippet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchByQuery",
      "options": [
        {
          "name": "Search by Name",
          "value": "searchByName",
          "action": "Search boxes by name",
          "description": "Search for boxes by exact name match"
        },
        {
          "name": "Search by Query",
          "value": "searchByQuery",
          "action": "Search streak data",
          "description": "Search across boxes, contacts, and organizations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listWebhooks",
      "options": [
        {
          "name": "Create Webhook",
          "value": "createWebhook",
          "action": "Create a webhook",
          "description": "Creates a new webhook"
        },
        {
          "name": "Delete Webhook",
          "value": "deleteWebhook",
          "action": "Delete a webhook",
          "description": "Deletes a webhook"
        },
        {
          "name": "Get Webhook",
          "value": "getWebhook",
          "action": "Get a webhook",
          "description": "Gets a specific webhook"
        },
        {
          "name": "List Webhooks",
          "value": "listWebhooks",
          "action": "List webhooks",
          "description": "Lists all webhooks for a pipeline or team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Current User",
      "value": "getCurrentUser",
      "action": "Get current user",
      "description": "Get information about the current user",
      "resource": "user"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get a user",
      "description": "Get information about a specific user by their key",
      "resource": "user"
    },
    {
      "name": "Get My Teams",
      "value": "getMyTeams",
      "action": "Get my teams",
      "description": "List all teams the authenticated user belongs to",
      "resource": "team"
    },
    {
      "name": "Get Team",
      "value": "getTeam",
      "action": "Get a team",
      "description": "Get information about a specific team",
      "resource": "team"
    },
    {
      "name": "Create Pipeline",
      "value": "createPipeline",
      "action": "Create a pipeline",
      "description": "Creates a new pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Delete Pipeline",
      "value": "deletePipeline",
      "action": "Delete a pipeline",
      "description": "Deletes a pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Get Pipeline",
      "value": "getPipeline",
      "action": "Get a pipeline",
      "description": "Gets a specific pipeline by its key",
      "resource": "pipeline"
    },
    {
      "name": "List All Pipelines",
      "value": "listAllPipelines",
      "action": "List all pipelines",
      "description": "Lists all pipelines the user has access to",
      "resource": "pipeline"
    },
    {
      "name": "Move Boxes (Batch)",
      "value": "moveBoxesBatch",
      "action": "Move boxes between pipelines",
      "description": "Moves multiple boxes to a different pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Update Pipeline",
      "value": "updatePipeline",
      "action": "Update a pipeline",
      "description": "Updates an existing pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Create Box in a Pipeline",
      "value": "createBox",
      "action": "Create a box in a pipeline",
      "description": "Creates a new box in a pipeline",
      "resource": "box"
    },
    {
      "name": "Delete Box",
      "value": "deleteBox",
      "action": "Delete a box",
      "description": "Deletes a box",
      "resource": "box"
    },
    {
      "name": "Get Box",
      "value": "getBox",
      "action": "Get a box",
      "description": "Gets a specific box by its key",
      "resource": "box"
    },
    {
      "name": "Get Multiple Boxes",
      "value": "getMultipleBoxes",
      "action": "Get multiple boxes",
      "description": "Gets multiple boxes by their keys",
      "resource": "box"
    },
    {
      "name": "Get Timeline",
      "value": "getTimeline",
      "action": "Get timeline",
      "description": "Gets the timeline of events for a box",
      "resource": "box"
    },
    {
      "name": "List Boxes in Pipeline",
      "value": "listBoxes",
      "action": "Get all boxes in a pipeline",
      "description": "Get all boxes (deals) in a pipeline",
      "resource": "box"
    },
    {
      "name": "Update Box",
      "value": "updateBox",
      "action": "Update a box",
      "description": "Updates an existing box",
      "resource": "box"
    },
    {
      "name": "Create Stage in a Pipeline",
      "value": "createStage",
      "action": "Create a stage in a pipeline",
      "description": "Creates a new stage in a pipeline",
      "resource": "stage"
    },
    {
      "name": "Delete Stage",
      "value": "deleteStage",
      "action": "Delete a stage",
      "description": "Deletes a stage",
      "resource": "stage"
    },
    {
      "name": "Get Stage",
      "value": "getStage",
      "action": "Get a stage",
      "description": "Gets a specific stage by its key",
      "resource": "stage"
    },
    {
      "name": "List Stages in a Pipeline",
      "value": "listStages",
      "action": "List stages in a pipeline",
      "description": "Lists all stages in a pipeline",
      "resource": "stage"
    },
    {
      "name": "Update Stage",
      "value": "updateStage",
      "action": "Update a stage",
      "description": "Updates an existing stage",
      "resource": "stage"
    },
    {
      "name": "Create Field in a Pipeline",
      "value": "createField",
      "action": "Create a field in a pipeline",
      "description": "Creates a new field in a pipeline",
      "resource": "field"
    },
    {
      "name": "Delete Field",
      "value": "deleteField",
      "action": "Delete a field",
      "description": "Deletes a field",
      "resource": "field"
    },
    {
      "name": "Get Field",
      "value": "getField",
      "action": "Get a field",
      "description": "Gets a specific field by its key",
      "resource": "field"
    },
    {
      "name": "Get Field Value in a Box",
      "value": "getFieldValue",
      "action": "Get a field value in a box",
      "description": "Gets a specific field value for a box",
      "resource": "field"
    },
    {
      "name": "List Field Values in a Box",
      "value": "listFieldValues",
      "action": "List field values in a box",
      "description": "Lists all field values for a box",
      "resource": "field"
    },
    {
      "name": "List Fields in a Pipeline",
      "value": "listFields",
      "action": "List fields in a pipeline",
      "description": "Lists all fields in a pipeline",
      "resource": "field"
    },
    {
      "name": "Update Field",
      "value": "updateField",
      "action": "Update a field",
      "description": "Updates an existing field",
      "resource": "field"
    },
    {
      "name": "Update Field Value in a Box",
      "value": "updateFieldValue",
      "action": "Update a field value in a box",
      "description": "Updates a field value for a box",
      "resource": "field"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get a contact",
      "description": "Gets a specific contact",
      "resource": "contact"
    },
    {
      "name": "Create Contact",
      "value": "createContact",
      "action": "Create a contact",
      "description": "Creates a new contact",
      "resource": "contact"
    },
    {
      "name": "Update Contact",
      "value": "updateContact",
      "action": "Update a contact",
      "description": "Updates an existing contact",
      "resource": "contact"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete a contact",
      "description": "Deletes a contact",
      "resource": "contact"
    },
    {
      "name": "Check Existing Organizations",
      "value": "checkExistingOrganizations",
      "action": "Check existing organizations",
      "description": "Checks for existing organizations by name or domain",
      "resource": "organization"
    },
    {
      "name": "Create Organization",
      "value": "createOrganization",
      "action": "Create an organization",
      "description": "Creates a new organization",
      "resource": "organization"
    },
    {
      "name": "Delete Organization",
      "value": "deleteOrganization",
      "action": "Delete an organization",
      "description": "Deletes an organization",
      "resource": "organization"
    },
    {
      "name": "Get Organization",
      "value": "getOrganization",
      "action": "Get an organization",
      "description": "Gets a specific organization",
      "resource": "organization"
    },
    {
      "name": "Update Organization",
      "value": "updateOrganization",
      "action": "Update an organization",
      "description": "Updates an existing organization",
      "resource": "organization"
    },
    {
      "name": "Create Task in a Box",
      "value": "createTask",
      "action": "Create a task in a box",
      "description": "Creates a new task for a box",
      "resource": "task"
    },
    {
      "name": "Delete Task",
      "value": "deleteTask",
      "action": "Delete a task",
      "description": "Deletes a task",
      "resource": "task"
    },
    {
      "name": "Get Task",
      "value": "getTask",
      "action": "Get a task",
      "description": "Gets a specific task",
      "resource": "task"
    },
    {
      "name": "Get Tasks in a Box",
      "value": "getTasksInBox",
      "action": "Get tasks in a box",
      "description": "Gets all tasks associated with a box",
      "resource": "task"
    },
    {
      "name": "Update Task",
      "value": "updateTask",
      "action": "Update a task",
      "description": "Updates an existing task",
      "resource": "task"
    },
    {
      "name": "Create Comment",
      "value": "createComment",
      "action": "Create a comment",
      "description": "Creates a new comment on a box",
      "resource": "comment"
    },
    {
      "name": "Delete Comment",
      "value": "deleteComment",
      "action": "Delete a comment",
      "description": "Deletes a comment",
      "resource": "comment"
    },
    {
      "name": "Edit Comment",
      "value": "editComment",
      "action": "Edit a comment",
      "description": "Edits an existing comment",
      "resource": "comment"
    },
    {
      "name": "Get Comment",
      "value": "getComment",
      "action": "Get a comment",
      "description": "Gets a specific comment",
      "resource": "comment"
    },
    {
      "name": "List Comments in Box",
      "value": "listCommentsInBox",
      "action": "List comments in a box",
      "description": "Lists all comments in a box",
      "resource": "comment"
    },
    {
      "name": "Create Meeting",
      "value": "createMeeting",
      "action": "Create a meeting",
      "description": "Creates a new meeting or call log for a box",
      "resource": "meeting"
    },
    {
      "name": "Delete Meeting",
      "value": "deleteMeeting",
      "action": "Delete a meeting",
      "description": "Deletes a meeting",
      "resource": "meeting"
    },
    {
      "name": "Edit Meeting",
      "value": "editMeeting",
      "action": "Edit a meeting",
      "description": "Edits an existing meeting",
      "resource": "meeting"
    },
    {
      "name": "Get Meeting",
      "value": "getMeeting",
      "action": "Get a meeting",
      "description": "Gets a single meeting by key",
      "resource": "meeting"
    },
    {
      "name": "List Meetings in Box",
      "value": "listMeetingsInBox",
      "action": "List meetings in a box",
      "description": "Lists all meetings for a box",
      "resource": "meeting"
    },
    {
      "name": "Add Thread to Box",
      "value": "addThreadToBox",
      "action": "Add a thread to a box",
      "description": "Adds an email thread to a box",
      "resource": "thread"
    },
    {
      "name": "Get Thread",
      "value": "getThread",
      "action": "Get a thread",
      "description": "Gets a specific email thread",
      "resource": "thread"
    },
    {
      "name": "Get Thread by Gmail ID",
      "value": "getThreadByGmailId",
      "action": "Get a thread by gmail id",
      "description": "Gets thread info by Gmail thread ID",
      "resource": "thread"
    },
    {
      "name": "List Threads in Box",
      "value": "listThreadsInBox",
      "action": "List threads in a box",
      "description": "Lists all email threads in a box",
      "resource": "thread"
    },
    {
      "name": "Remove Thread",
      "value": "removeThread",
      "action": "Remove a thread",
      "description": "Removes an email thread from a box",
      "resource": "thread"
    },
    {
      "name": "Add File to Box",
      "value": "addFileToBox",
      "action": "Add a file to a box",
      "description": "Adds a Google Drive file to a box",
      "resource": "file"
    },
    {
      "name": "Get File Contents",
      "value": "getFileContents",
      "action": "Get file contents",
      "description": "Gets the contents of a file (only works for GMAIL_API file types)",
      "resource": "file"
    },
    {
      "name": "Get File Metadata",
      "value": "getFile",
      "action": "Get file metadata",
      "description": "Gets metadata for a specific file",
      "resource": "file"
    },
    {
      "name": "List Files in Box",
      "value": "listFilesInBox",
      "action": "List files in a box",
      "description": "Lists all files associated with a box",
      "resource": "file"
    },
    {
      "name": "Get All Newsfeed",
      "value": "getAllNewsfeed",
      "action": "Get all newsfeed",
      "description": "Gets activity across all pipelines",
      "resource": "newsfeed"
    },
    {
      "name": "Get Box Newsfeed",
      "value": "getBoxNewsfeed",
      "action": "Get box newsfeed",
      "description": "Gets activity history for a specific box",
      "resource": "newsfeed"
    },
    {
      "name": "Get Pipeline Newsfeed",
      "value": "getPipelineNewsfeed",
      "action": "Get pipeline newsfeed",
      "description": "Gets activity history for a pipeline and its boxes",
      "resource": "newsfeed"
    },
    {
      "name": "Create Snippet",
      "value": "createSnippet",
      "action": "Create a snippet",
      "description": "Creates a new snippet",
      "resource": "snippet"
    },
    {
      "name": "Delete Snippet",
      "value": "deleteSnippet",
      "action": "Delete a snippet",
      "description": "Deletes a snippet",
      "resource": "snippet"
    },
    {
      "name": "Edit Snippet",
      "value": "editSnippet",
      "action": "Edit a snippet",
      "description": "Edits an existing snippet",
      "resource": "snippet"
    },
    {
      "name": "Get Snippet",
      "value": "getSnippet",
      "action": "Get a snippet",
      "description": "Gets a specific snippet",
      "resource": "snippet"
    },
    {
      "name": "List Snippets",
      "value": "listSnippets",
      "action": "List snippets",
      "description": "Lists all snippets for the current user",
      "resource": "snippet"
    },
    {
      "name": "Search by Name",
      "value": "searchByName",
      "action": "Search boxes by name",
      "description": "Search for boxes by exact name match",
      "resource": "search"
    },
    {
      "name": "Search by Query",
      "value": "searchByQuery",
      "action": "Search streak data",
      "description": "Search across boxes, contacts, and organizations",
      "resource": "search"
    },
    {
      "name": "Create Webhook",
      "value": "createWebhook",
      "action": "Create a webhook",
      "description": "Creates a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete Webhook",
      "value": "deleteWebhook",
      "action": "Delete a webhook",
      "description": "Deletes a webhook",
      "resource": "webhook"
    },
    {
      "name": "Get Webhook",
      "value": "getWebhook",
      "action": "Get a webhook",
      "description": "Gets a specific webhook",
      "resource": "webhook"
    },
    {
      "name": "List Webhooks",
      "value": "listWebhooks",
      "action": "List webhooks",
      "description": "Lists all webhooks for a pipeline or team",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-streak-crm

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

  Streak CRM is a powerful customer relationship management (CRM) tool integrated directly into Gmail that helps teams track leads, manage sales pipelines, and streamline customer communications.

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

  [Installation](#installation)
  [Operations](#operations)
  [Trigger Events](#trigger-events)
  [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.

  ```bash
  npm install n8n-nodes-streak-crm
  ```

  Or if you use n8n Desktop, you can go to **Settings > Community nodes > Install** and provide the package name `n8n-nodes-streak-crm`.

  ## Operations

  This node supports a comprehensive set of operations across various Streak CRM resources.

  ### Architecture Improvements

  The node now features a dedicated `StreakApiService` class that centralizes all API interactions, providing:

  - Consistent error handling across all operations
  - Strong TypeScript typing for better code reliability
  - Improved performance with optimized request handling
  - Better developer experience for future enhancements

  ### User Operations
  - **Get Current User** - Retrieve the details of the current authenticated user
  - **Get User** - Retrieve details of a specific user by key

  ### Team Operations
  - **Get My Teams** - Retrieve all teams the current user belongs to
  - **Get Team** - Retrieve details of a specific team by key

  ### Pipeline Operations
  - **List All Pipelines** - Get all available pipelines
  - **Get Pipeline** - Retrieve a specific pipeline by key
  - **Create Pipeline** - Create a new pipeline with customizable properties
  - **Update Pipeline** - Update properties of an existing pipeline
  - **Delete Pipeline** - Remove a pipeline
  - **Move Boxes Between Pipelines** - Move multiple boxes (deals) between pipelines in batch

  ### Box Operations
  - **List Boxes in Pipeline** - Get all boxes (deals) in a specific pipeline
  - **Get Box** - Retrieve a specific box by key
  - **Get Multiple Boxes** - Retrieve multiple boxes at once
  - **Create Box** - Create a new box in a pipeline
  - **Update Box** - Update properties of an existing box
  - **Delete Box** - Remove a box
  - **Get Box Timeline** - Retrieve the timeline of events for a box

  ### Stage Operations
  - **List Stages** - Get all stages in a pipeline
  - **Get Stage** - Retrieve a specific stage by key
  - **Create Stage** - Create a new stage in a pipeline
  - **Update Stage** - Update properties of an existing stage
  - **Delete Stage** - Remove a stage from a pipeline

  ### Field Operations
  - **List Fields** - Get all fields in a pipeline
  - **Get Field** - Retrieve a specific field by key
  - **Create Field** - Create a new field in a pipeline
  - **Update Field** - Update properties of an existing field
  - **Delete Field** - Remove a field from a pipeline
  - **List Field Values** - Get all field values for a box
  - **Get Field Value** - Retrieve a specific field value
  - **Update Field Value** - Update a field value for a box

  ### Contact Operations
  - **Get Contact** - Retrieve a specific contact by key
  - **Create Contact** - Create a new contact
  - **Update Contact** - Update properties of an existing contact
  - **Delete Contact** - Remove a contact

  ### Organization Operations
  - **Get Organization** - Retrieve a specific organization by key
  - **Create Organization** - Create a new organization
  - **Check Existing Organizations** - Search for existing organizations by name or domain
  - **Update Organization** - Update properties of an existing organization
  - **Delete Organization** - Remove an organization

  ### Task Operations
  - **Get Task** - Retrieve a specific task by key
  - **Get Tasks in Box** - Get all tasks associated with a box
  - **Create Task** - Create a new task for a box
  - **Update Task** - Update properties of an existing task
  - **Delete Task** - Remove a task

  ### Comment Operations
  - **List Comments** - Get all comments on a box
  - **Get Comment** - Retrieve a specific comment by key
  - **Create Comment** - Add a comment to a box
  - **Delete Comment** - Remove a comment

  ### Meeting Operations
  - **List Meetings** - Get all meetings for a box
  - **Get Meeting** - Retrieve a specific meeting by key
  - **Create Meeting** - Create a new meeting for a box
  - **Update Meeting** - Update properties of an existing meeting
  - **Delete Meeting** - Remove a meeting

  ### Thread Operations
  - **List Threads** - Get all threads for a box
  - **Get Thread** - Retrieve a specific thread by key
  - **Get Thread by Gmail ID** - Retrieve a thread using its Gmail ID
  - **Add Thread to Box** - Link a Gmail thread to a box

  ### File Operations
  - **List Files** - Get all files attached to a box
  - **Get File** - Retrieve a specific file by key
  - **Upload File** - Upload a file to a box
  - **Delete File** - Remove a file

  ### Newsfeed Operations
  - **Get Pipeline Newsfeed** - Get recent activity for a pipeline
  - **Get Box Newsfeed** - Get recent activity for a box
  - **Get All Newsfeed** - Get all recent activity

  ### Snippet Operations
  - **List Snippets** - Get all snippets
  - **Get Snippet** - Retrieve a specific snippet by key
  - **Create Snippet** - Create a new snippet
  - **Delete Snippet** - Remove a snippet

  ### Webhook Operations
  - **List Webhooks** - Get all webhooks for a pipeline or team
  - **Get Webhook** - Retrieve a specific webhook by key
  - **Create Webhook** - Create a new webhook for a pipeline or team event
  - **Delete Webhook** - Remove a webhook

  ### Search Operations
  - **Search by Query** - Search across Streak using a query string
  - **Search by Name** - Search for boxes by name

  ## Trigger Events

  The **Streak Trigger** node starts workflows automatically when events occur in Streak. Webhooks can be scoped to a specific pipeline or team.

  ### Supported Events

  | Event | Description |
  |-------|-------------|
  | Box Create | A new box is created |
  | Box Delete | A box is deleted |
  | Box Edit | A box's fields, notes, assignments, or name change |
  | Box Change Stage | A box moves to a different stage |
  | Box Change Pipeline | A box is transferred to a different pipeline |
  | Box New Email Address | A new email address is detected on a box |
  | Stage Create | A new stage is created |
  | Comment Create | A comment is added to a box |
  | Meeting Create | A meeting is created |
  | Meeting Update | A meeting is updated |
  | Task Create | A task is created |
  | Task Complete | A task is marked complete |
  | Task Due | A task reaches its due date |
  | Task Updated | A task is updated |
  | Contact Create | A contact is created |
  | Contact Update | A contact is updated |
  | Contact Delete | A contact is deleted |
  | Org Create | An organization is created |
  | Org Update | An organization is updated |
  | Org Delete | An organization is deleted |

  ## Credentials

  To use this node, you need an API key from Streak CRM.

  ### How to get your API key:

  1. Log in to your Streak account at [streak.com](https://streak.com)
  2. Go to **Settings** > **API** 
  3. Copy your API key

  In n8n, create a new credential of type **Streak CRM API** and enter your API key.

  ## Compatibility

  This node was developed and tested with n8n version 1.0.0 and uses Streak API v1 and v2.

  ## Usage

  ### Example: Creating a new pipeline and adding a box (deal)

  This is a simple workflow to create a pipeline and then add a box to it:

  1. **Streak CRM node** with operation **Create Pipeline**
     - Set name: `New Sales Pipeline`
     - Optional: Add description, team key, and other properties

  2. **Streak CRM node** with operation **Create Box**
     - Use the pipeline key from the previous node
     - Set name: `Potential Client`
     - Optional: Add stage key and other properties

  ### Example: Triggering a workflow when a box changes stage

  1. Add a **Streak Trigger** node
     - Set scope to **Pipeline** and select your pipeline
     - Set event to **Box Change Stage**
  2. Activate the workflow — it will now run automatically whenever a box moves between stages

  ### Example: Managing contacts and linking them to boxes

  1. **Streak CRM node** with operation **Create Contact**
     - Set email: `client@example.com`
     - Add fields for name, organization, etc.

  2. **Streak CRM node** with operation **Update Box**
     - Use an existing box key
     - Link the contact by updating field values

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Streak API Documentation](https://streak.readme.io/reference/about-the-streak-api)
  * [Streak User Guide](https://streak.com/support/articles)

  ## Version History

  ### 1.2.0
  - Added **Streak Trigger** node with webhook support for 20 event types
  - Webhooks can be scoped to a pipeline or team
  - Automatic webhook registration/cleanup on workflow activate/deactivate
  - Added Comment operations (list, get, create, delete)
  - Added Meeting operations (list, get, create, update, delete)
  - Added Thread operations (list, get, get by Gmail ID, add to box)
  - Added File operations (list, get, upload, delete)
  - Added Newsfeed operations (pipeline, box, all)
  - Added Snippet operations (list, get, create, delete)
  - Added Search operations (by query, by name)

  ### 1.0.3
  - Added a comprehensive StreakApiService class to centralize API interactions
  - Improved pipeline selection with dynamic dropdown loading
  - Fixed Box Keys field handling in Move Boxes operation
  - Enhanced error handling and API request consistency
  - Added TypeScript interfaces for better type safety

  ### 1.0.2
  - Initial release with comprehensive support for Users, Teams, Pipelines, Boxes, Stages, Fields, Contacts, Organizations, and Tasks
  - Support for pagination in list operations
  - Detailed error handling

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of Streak CRM workflows, allowing users to manage pipelines, boxes (deals), contacts, organizations, tasks, and other CRM resources directly within n8n.","capabilities":["Create, read, update, and delete pipelines","Create, read, update, and delete boxes (deals)","Create, read, update, and delete contacts","Create, read, update, and delete organizations","Create, read, update, and delete tasks","Manage stages and fields within pipelines","Move boxes between pipelines in batch","Retrieve box timelines","Search for existing organizations by name or domain","Retrieve current authenticated user details"],"authentication":"API key required","commonUseCases":["Automating lead tracking and sales pipeline management","Syncing CRM data between Streak and other tools via n8n","Automating contact creation and organization management","Batch moving deals between sales stages"],"limitations":["Requires a Streak API key from the user's account","Compatible with Streak API v1 only","Requires manual installation via npm package"],"relatedNodes":["Streak CRM API","Gmail","Generic HTTP Request"]}


node_type: @nalpeiron/n8n-nodes-nalpeiron.nalpeironZentitle2
package_name: @nalpeiron/n8n-nodes-nalpeiron
display_name: Nalpeiron Zentitle2
description: Interact with Nalpeiron Zentitle2 API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: tszturmaj-nalpeiron
author_github_url: https://github.com/Nalpeiron/integrations-n8n.git
npm_package_name: @nalpeiron/n8n-nodes-nalpeiron
npm_version: 1.0.5
community_fetched_at: 2026-04-16T09:43:36.043Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Attribute",
          "value": "attribute",
          "description": "Manage global attributes"
        },
        {
          "name": "Customer",
          "value": "customer",
          "description": "Manage customer general operations"
        },
        {
          "name": "Entitlement",
          "value": "entitlement",
          "description": "Manage entitlement general operations"
        },
        {
          "name": "Feature",
          "value": "feature",
          "description": "Manage global features"
        },
        {
          "name": "Offering",
          "value": "offering",
          "description": "Manage offerings"
        },
        {
          "name": "Plan",
          "value": "plan",
          "description": "Manage plans"
        },
        {
          "name": "Product",
          "value": "product",
          "description": "Manage product general operations"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Global Attribute",
          "value": "get",
          "action": "Get global attribute",
          "description": "This method returns selected global attribute"
        },
        {
          "name": "Get Global Attributes List",
          "value": "list",
          "action": "Get global attributes list",
          "description": "This method returns list of all attributes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attribute"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get a Customer Contact List",
          "value": "listContacts",
          "action": "Get a customer contact list",
          "description": "This method returns a list of customer contacts"
        },
        {
          "name": "Get Contact Credentials",
          "value": "listContactsCredentials",
          "action": "Get contact credentials",
          "description": "Return the credentials for a contact. If contact does not have credentials, Authentication field will be null."
        },
        {
          "name": "Get Customer",
          "value": "get",
          "action": "Get customer",
          "description": "This method returns the selected customer"
        },
        {
          "name": "Get Customer Contact",
          "value": "getContacts",
          "action": "Get customer contact",
          "description": "This method returns selected customer contact details"
        },
        {
          "name": "Get Customer End User Portal URL",
          "value": "listEup",
          "action": "Get customer end user portal url",
          "description": "This method returns customer End User Portal URL"
        },
        {
          "name": "Get Customer List",
          "value": "list",
          "action": "Get customer list",
          "description": "This method returns list of customers"
        },
        {
          "name": "Get Customer Note",
          "value": "getNotes",
          "action": "Get customer note",
          "description": "This method returns customer note"
        },
        {
          "name": "Get Customer Note List",
          "value": "listNotes",
          "action": "Get customer note list",
          "description": "This method returns list of customer notes"
        },
        {
          "name": "Get Customer Zentitle Statistic",
          "value": "listStats",
          "action": "Get customer zentitle statistic",
          "description": "Return zentitle statistic for a given customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Activation State",
          "value": "getActivations",
          "action": "Get activation state",
          "description": "This method returns activation details including information about attributes and available features"
        },
        {
          "name": "Get an Entitlement Group",
          "value": "getGroups",
          "action": "Get an entitlement group",
          "description": "This method returns entitlement group details. The amount of data returned can be adjusted by using query expand parameter configuration."
        },
        {
          "name": "Get Entitlement",
          "value": "get",
          "action": "Get entitlement",
          "description": "This method returns entitlement details"
        },
        {
          "name": "Get Entitlement Group Authorized Contacts",
          "value": "listGroupsAuthorizedContacts",
          "action": "Get entitlement group authorized contacts",
          "description": "This method returns list of contacts (with ABL credentials) authorized for the entitlement group"
        },
        {
          "name": "Get Entitlement Group List",
          "value": "listGroups",
          "action": "Get entitlement group list",
          "description": "This method returns entitlement group list. Amount of data returned can be adjusted by using query expand parameter configuration."
        },
        {
          "name": "Get Entitlement List",
          "value": "list",
          "action": "Get entitlement list",
          "description": "This method returns list of entitlements that can be filtered by following query parameters"
        },
        {
          "name": "Get Entitlement Note",
          "value": "getNotes",
          "action": "Get entitlement note",
          "description": "This method returns entitlement note"
        },
        {
          "name": "Get Entitlement Note List",
          "value": "listNotes",
          "action": "Get entitlement note list",
          "description": "This method returns list of entitlement notes"
        },
        {
          "name": "List of Entitlement Activations",
          "value": "listActivations",
          "action": "List of entitlement activations",
          "description": "This method returns list of entitlement activation that can be filtered by following query parameters"
        },
        {
          "name": "Log of Activations Activity",
          "value": "listActivationsLog",
          "action": "Log of activations activity",
          "description": "This method returns log of activations activity on the entitlement"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entitlement"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Global Feature",
          "value": "get",
          "action": "Get global feature",
          "description": "This method returns selected global feature"
        },
        {
          "name": "Get Global Features List",
          "value": "list",
          "action": "Get global features list",
          "description": "This method returns list of all global features"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feature"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Offering",
          "value": "get",
          "action": "Get offering",
          "description": "This method returns offering details"
        },
        {
          "name": "Get Offering List",
          "value": "list",
          "action": "Get offering list",
          "description": "This method returns list of offering that can be filtered by the following query parameters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "offering"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Plan",
          "value": "get",
          "action": "Get plan",
          "description": "This method returns plan details"
        },
        {
          "name": "Get Plan List",
          "value": "list",
          "action": "Get plan list",
          "description": "This method returns list of plans that can be filtered by following query parameters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get a Product List",
          "value": "list",
          "action": "Get a product list",
          "description": "This method returns a list of products that can be filtered by following query parameters"
        },
        {
          "name": "Get Edition",
          "value": "getEditions",
          "action": "Get edition",
          "description": "This method returns product edition details"
        },
        {
          "name": "Get Edition Attribute",
          "value": "getEditionsAttributes",
          "action": "Get edition attribute",
          "description": "This method returns selected attribute with value defined in edition level (in case of override). If no value is defined in edition level, value defined in higher level is returned."
        },
        {
          "name": "Get Edition Attributes List",
          "value": "listEditionsAttributes",
          "action": "Get edition attributes list",
          "description": "This method returns list of all attributes for selected edition"
        },
        {
          "name": "Get Edition Feature",
          "value": "getEditionsFeatures",
          "action": "Get edition feature",
          "description": "This method returns selected feature with value defined in edition level (in case of override). If no value is defined in edition level, value defined in higher level is returned."
        },
        {
          "name": "Get Edition Feature List",
          "value": "listEditionsFeatures",
          "action": "Get edition feature list",
          "description": "This method returns list of all features for selected edition"
        },
        {
          "name": "Get Edition List",
          "value": "listEditions",
          "action": "Get edition list",
          "description": "This method returns list of editions that can be filtered by following query parameters"
        },
        {
          "name": "Get Product",
          "value": "get",
          "action": "Get product",
          "description": "This method returns product details"
        },
        {
          "name": "Get Product Attribute",
          "value": "getAttributes",
          "action": "Get product attribute",
          "description": "This method returns selected attribute. In case of global attribute, if overridden value exists on product level, it will be returned, otherwise global value will be returned."
        },
        {
          "name": "Get Product Attributes List",
          "value": "listAttributes",
          "action": "Get product attributes list",
          "description": "This method returns list of all attributes for selected product"
        },
        {
          "name": "Get Product Feature",
          "value": "getFeatures",
          "action": "Get product feature",
          "description": "This method returns selected feature. In case of global feature, if overridden value exists on product level, it will be returned, otherwise global value will be returned."
        },
        {
          "name": "Get Product Features List",
          "value": "listFeatures",
          "action": "Get product features list",
          "description": "This method returns list of all features for selected product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Global Attribute",
      "value": "get",
      "action": "Get global attribute",
      "description": "This method returns selected global attribute",
      "resource": "attribute"
    },
    {
      "name": "Get Global Attributes List",
      "value": "list",
      "action": "Get global attributes list",
      "description": "This method returns list of all attributes",
      "resource": "attribute"
    },
    {
      "name": "Get a Customer Contact List",
      "value": "listContacts",
      "action": "Get a customer contact list",
      "description": "This method returns a list of customer contacts",
      "resource": "customer"
    },
    {
      "name": "Get Contact Credentials",
      "value": "listContactsCredentials",
      "action": "Get contact credentials",
      "description": "Return the credentials for a contact. If contact does not have credentials, Authentication field will be null.",
      "resource": "customer"
    },
    {
      "name": "Get Customer",
      "value": "get",
      "action": "Get customer",
      "description": "This method returns the selected customer",
      "resource": "customer"
    },
    {
      "name": "Get Customer Contact",
      "value": "getContacts",
      "action": "Get customer contact",
      "description": "This method returns selected customer contact details",
      "resource": "customer"
    },
    {
      "name": "Get Customer End User Portal URL",
      "value": "listEup",
      "action": "Get customer end user portal url",
      "description": "This method returns customer End User Portal URL",
      "resource": "customer"
    },
    {
      "name": "Get Customer List",
      "value": "list",
      "action": "Get customer list",
      "description": "This method returns list of customers",
      "resource": "customer"
    },
    {
      "name": "Get Customer Note",
      "value": "getNotes",
      "action": "Get customer note",
      "description": "This method returns customer note",
      "resource": "customer"
    },
    {
      "name": "Get Customer Note List",
      "value": "listNotes",
      "action": "Get customer note list",
      "description": "This method returns list of customer notes",
      "resource": "customer"
    },
    {
      "name": "Get Customer Zentitle Statistic",
      "value": "listStats",
      "action": "Get customer zentitle statistic",
      "description": "Return zentitle statistic for a given customer",
      "resource": "customer"
    },
    {
      "name": "Get Activation State",
      "value": "getActivations",
      "action": "Get activation state",
      "description": "This method returns activation details including information about attributes and available features",
      "resource": "entitlement"
    },
    {
      "name": "Get an Entitlement Group",
      "value": "getGroups",
      "action": "Get an entitlement group",
      "description": "This method returns entitlement group details. The amount of data returned can be adjusted by using query expand parameter configuration.",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement",
      "value": "get",
      "action": "Get entitlement",
      "description": "This method returns entitlement details",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement Group Authorized Contacts",
      "value": "listGroupsAuthorizedContacts",
      "action": "Get entitlement group authorized contacts",
      "description": "This method returns list of contacts (with ABL credentials) authorized for the entitlement group",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement Group List",
      "value": "listGroups",
      "action": "Get entitlement group list",
      "description": "This method returns entitlement group list. Amount of data returned can be adjusted by using query expand parameter configuration.",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement List",
      "value": "list",
      "action": "Get entitlement list",
      "description": "This method returns list of entitlements that can be filtered by following query parameters",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement Note",
      "value": "getNotes",
      "action": "Get entitlement note",
      "description": "This method returns entitlement note",
      "resource": "entitlement"
    },
    {
      "name": "Get Entitlement Note List",
      "value": "listNotes",
      "action": "Get entitlement note list",
      "description": "This method returns list of entitlement notes",
      "resource": "entitlement"
    },
    {
      "name": "List of Entitlement Activations",
      "value": "listActivations",
      "action": "List of entitlement activations",
      "description": "This method returns list of entitlement activation that can be filtered by following query parameters",
      "resource": "entitlement"
    },
    {
      "name": "Log of Activations Activity",
      "value": "listActivationsLog",
      "action": "Log of activations activity",
      "description": "This method returns log of activations activity on the entitlement",
      "resource": "entitlement"
    },
    {
      "name": "Get Global Feature",
      "value": "get",
      "action": "Get global feature",
      "description": "This method returns selected global feature",
      "resource": "feature"
    },
    {
      "name": "Get Global Features List",
      "value": "list",
      "action": "Get global features list",
      "description": "This method returns list of all global features",
      "resource": "feature"
    },
    {
      "name": "Get Offering",
      "value": "get",
      "action": "Get offering",
      "description": "This method returns offering details",
      "resource": "offering"
    },
    {
      "name": "Get Offering List",
      "value": "list",
      "action": "Get offering list",
      "description": "This method returns list of offering that can be filtered by the following query parameters",
      "resource": "offering"
    },
    {
      "name": "Get Plan",
      "value": "get",
      "action": "Get plan",
      "description": "This method returns plan details",
      "resource": "plan"
    },
    {
      "name": "Get Plan List",
      "value": "list",
      "action": "Get plan list",
      "description": "This method returns list of plans that can be filtered by following query parameters",
      "resource": "plan"
    },
    {
      "name": "Get a Product List",
      "value": "list",
      "action": "Get a product list",
      "description": "This method returns a list of products that can be filtered by following query parameters",
      "resource": "product"
    },
    {
      "name": "Get Edition",
      "value": "getEditions",
      "action": "Get edition",
      "description": "This method returns product edition details",
      "resource": "product"
    },
    {
      "name": "Get Edition Attribute",
      "value": "getEditionsAttributes",
      "action": "Get edition attribute",
      "description": "This method returns selected attribute with value defined in edition level (in case of override). If no value is defined in edition level, value defined in higher level is returned.",
      "resource": "product"
    },
    {
      "name": "Get Edition Attributes List",
      "value": "listEditionsAttributes",
      "action": "Get edition attributes list",
      "description": "This method returns list of all attributes for selected edition",
      "resource": "product"
    },
    {
      "name": "Get Edition Feature",
      "value": "getEditionsFeatures",
      "action": "Get edition feature",
      "description": "This method returns selected feature with value defined in edition level (in case of override). If no value is defined in edition level, value defined in higher level is returned.",
      "resource": "product"
    },
    {
      "name": "Get Edition Feature List",
      "value": "listEditionsFeatures",
      "action": "Get edition feature list",
      "description": "This method returns list of all features for selected edition",
      "resource": "product"
    },
    {
      "name": "Get Edition List",
      "value": "listEditions",
      "action": "Get edition list",
      "description": "This method returns list of editions that can be filtered by following query parameters",
      "resource": "product"
    },
    {
      "name": "Get Product",
      "value": "get",
      "action": "Get product",
      "description": "This method returns product details",
      "resource": "product"
    },
    {
      "name": "Get Product Attribute",
      "value": "getAttributes",
      "action": "Get product attribute",
      "description": "This method returns selected attribute. In case of global attribute, if overridden value exists on product level, it will be returned, otherwise global value will be returned.",
      "resource": "product"
    },
    {
      "name": "Get Product Attributes List",
      "value": "listAttributes",
      "action": "Get product attributes list",
      "description": "This method returns list of all attributes for selected product",
      "resource": "product"
    },
    {
      "name": "Get Product Feature",
      "value": "getFeatures",
      "action": "Get product feature",
      "description": "This method returns selected feature. In case of global feature, if overridden value exists on product level, it will be returned, otherwise global value will be returned.",
      "resource": "product"
    },
    {
      "name": "Get Product Features List",
      "value": "listFeatures",
      "action": "Get product features list",
      "description": "This method returns list of all features for selected product",
      "resource": "product"
    }
  ]

npm_readme:
  # @nalpeiron/n8n-nodes-nalpeiron

  Automate your license management and customer success workflows with the [Nalpeiron Growth Platform](https://nalpeiron.com). This n8n community node lets you integrate both Zentitle2 (license operations) and Zengain (customer lifecycle management) components with real-time notifications into your automation workflows.

  ![Version](https://img.shields.io/npm/v/@nalpeiron/n8n-nodes-nalpeiron)
  ![Downloads](https://img.shields.io/npm/dm/@nalpeiron/n8n-nodes-nalpeiron)
  ![License](https://img.shields.io/npm/l/@nalpeiron/n8n-nodes-nalpeiron)

  ## What You Can Do

  ### 📊 License Data & Reporting

  - Retrieve license details and status information
  - List and filter licenses by various criteria
  - Track license usage and seat assignments
  - Monitor license expiration dates

  ### 👥 Customer Information

  - Get customer records and contact details
  - List customers with filtering options
  - Access customer-specific license information
  - Handle multi-tenant customer scenarios

  ### 📦 Product & Feature Insights

  - Retrieve product configurations and details
  - List available features and capabilities
  - Access product offerings and packages
  - Query custom attributes and configurations

  ### 🔔 Real-Time Notifications

  Listen for webhook events from both Growth Platform components:

  **Zentitle2 Component Events**:

  - License creation, activation, and expiration
  - Customer lifecycle events
  - Seat management notifications
  - Renewal and maintenance alerts

  **Zengain Component Events**:

  - Customer lifecycle changes (creation and updates) for revenue optimization and proactive customer success

  ## Use Cases

  Perfect for automating:

  **License Management (Zentitle2 Component):**

  - **License Monitoring**: Track license status and expiration dates across your organization
  - **Renewal Alerts**: Set up notifications for upcoming license expirations
  - **Usage Reporting**: Generate reports on license utilization and seat assignments
  - **Compliance Tracking**: Monitor license compliance and usage patterns

  **Customer Success & Revenue Growth (Zengain Component):**

  - **Revenue Optimization**: Identify upsell opportunities and at-risk accounts
  - **Proactive Customer Success**: Automate engagement based on customer lifecycle insights
  - **Sales Intelligence**: Sync customer behavior data to CRM systems for prioritized outreach
  - **Churn Prevention**: Set up automated workflows to address customer health signals

  **Integrated Growth Platform Workflows:**

  - **Data Synchronization**: Keep external systems updated with both license and customer success information from the Growth Platform
  - **Unified Customer View**: Combine Zentitle2 licensing data with Zengain customer success insights for complete customer intelligence

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in n8n
  2. Select **Install**
  3. Enter `@nalpeiron/n8n-nodes-nalpeiron` as the package name
  4. Click **Install**

  ### npm

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

  ## Setup Guide

  ### Step 1: Installation

  Install via Community Nodes (recommended) or npm as shown above.

  ### Step 2: Create API Credentials

  1. Log into your Nalpeiron Growth Platform account
  2. Go to the API credentials section
  3. Create new OAuth2 credentials
  4. Note down your Client ID, Client Secret, and OAuth URL

  ### Step 3: Configure Credentials in n8n

  1. In n8n, go to **Settings** > **Credentials**
  2. Click **Add Credential** and select **Nalpeiron account**
  3. Configure the following fields:
     - **Base URL**: Your Nalpeiron API endpoint (e.g., https://api.nalpeiron.com)
     - **Tenant ID**: Your Nalpeiron tenant identifier
     - **Client ID**: Your OAuth2 Client ID from Nalpeiron admin panel
     - **Client Secret**: Your OAuth2 Client Secret from Nalpeiron admin panel
     - **Access Token URL**: The OAuth2 Token endpoint URL (e.g., https://auth.nalpeiron.com/protocol/openid-connect/token)

  ### Step 4: Test Your Credentials

  The credentials include a built-in test function:

  1. Fill in your credential fields in the n8n UI
  2. Click the **"Test"** button
  3. Get immediate validation of your OAuth2 configuration

  **What Gets Tested:**

  - OAuth2 Token Request validation
  - Access Token format verification
  - Tenant-specific API access
  - Error diagnosis with specific guidance for common issues

  ## Getting Started

  After installation, you'll find four new nodes in your n8n palette:

  **Zentitle2 Nodes** (License Management Component):

  - **📊 Nalpeiron Zentitle2** - Retrieve license data (get licenses, customers, products, usage information)
  - **🔔 Nalpeiron Zentitle2 Trigger** - Listen for real-time events (license expiration, customer updates, renewals)

  **Zengain Nodes** (Customer Success Component):

  - **📊 Nalpeiron Zengain** - Access customer lifecycle data and account insights for revenue optimization
  - **🔔 Nalpeiron Zengain Trigger** - Listen for customer success events to drive proactive engagement

  **Note:** All Nalpeiron nodes are also available as AI tools for enhanced automation and intelligent workflows.

  ### Example Workflows

  **License Renewal Alert (Zentitle2 Component):**

  ```
  Nalpeiron Zentitle2 Trigger (license expires in 7 days) → Get Customer Details → Send Renewal Notice
  ```

  **Customer Success Automation (Zengain Component):**

  ```
  Nalpeiron Zengain Trigger (customer created) → Get Customer Insights → Update CRM with Revenue Opportunities
  ```

  ## Resources

  The node provides access to these Nalpeiron Growth Platform resources

  ## Webhook Events

  The trigger node supports webhook events for real-time automation

  ## Webhook Setup

  ### Basic Setup

  1. Add either the **Nalpeiron Zentitle2 Trigger** or **Nalpeiron Zengain Trigger** node to your workflow
  2. Select the events you want to listen for (supports multiple selection)
  3. Webhooks are automatically registered
  4. The webhook URL is automatically configured

  ### Authentication

  **Note:** RSA signature verification has been removed from this community package to ensure compatibility with n8n Cloud verification requirements. All webhook requests are accepted without signature verification.

  For production deployments requiring webhook authentication, consider implementing verification in your external systems or using n8n self-hosted with custom authentication logic.

  ### Auto-Setup Feature

  The trigger node automatically manage webhooks:

  - **Auto-Create**: Creates webhooks when the trigger activates
  - **Auto-Update**: Updates webhook subscriptions when events change
  - **Auto-Delete**: Removes webhooks when the trigger is deactivated

  ### Webhook Payload Structure

  All webhooks follow this structure:

  ```json
  {
  	"eventId": "event_NsqUHwSXC0S4f4vuNkegSg",
  	"eventDate": "2025-06-06T11:39:22.739326Z",
  	"eventCode": "customer.created",
  	"resourceId": "cust_ILLqMyx3UUy_n5cZqui7NQ",
  	"callAttempt": 1,
  	"payload": {
  		// Event-specific data
  	}
  }
  ```

  ### Accessing Webhook Data in n8n

  | Data          | Access Path                   | Example                  |
  | ------------- | ----------------------------- | ------------------------ |
  | Event Type    | `{{ $json.data.eventCode }}`  | `"customer.created"`     |
  | Resource ID   | `{{ $json.data.resourceId }}` | `"cust_abc123"`          |
  | Event Payload | `{{ $json.data.payload }}`    | Event-specific data      |
  | Event Date    | `{{ $json.data.eventDate }}`  | `"2025-06-06T11:39:22Z"` |

  ## Troubleshooting

  ### Webhook Not Triggering

  1. Check webhook URL is correctly registered in Nalpeiron Growth Platform
  2. Verify selected events match the events being sent
  3. Review n8n execution logs for errors
  4. Test webhook manually using the "Test URL" feature

  ### API Calls Failing

  1. Verify OAuth2 credentials are correct and have proper permissions
  2. Check the base URL points to the correct environment

  ## License

  MIT

  ## Support

  For Nalpeiron Growth Platform API questions, please contact [Nalpeiron Support](https://nalpeiron.com/support).

  ## Links

  - [n8n](https://n8n.io)
  - [Nalpeiron Growth Platform](https://nalpeiron.com)
  - [API Documentation](https://api.nalpeiron.io/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Nalpeiron Growth Platform to automate license management (Zentitle2) and customer lifecycle management (Zengain) workflows.","capabilities":["Retrieve license details and status information","List and filter licenses by criteria","Track license usage and seat assignments","Monitor license expiration dates","Get customer records and contact details","Access customer-specific license information","Retrieve product configurations and details","Query available features and capabilities","Listen for real-time license events (creation, activation, expiration, renewal)","Listen for real-time customer lifecycle events"],"authentication":"OAuth2 (Client ID, Client Secret, Base URL, Tenant ID, Access Token URL)","commonUseCases":["Automated license renewal alerts and expiration tracking","License compliance monitoring and usage reporting","Revenue optimization through customer lifecycle insights","Proactive customer success automation","CRM synchronization with customer and license data"],"limitations":["Read-only access to data (no modification capabilities mentioned)","Requires manual OAuth2 credential setup in n8n","Webhook event selection may require manual configuration"],"relatedNodes":["Nalpeiron Zentitle2 Trigger","Nalpeiron Zengain Trigger","Nalpeiron Zengain","Nalpeiron Zentitle2"]}


