# nodes

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-01-07 20:08:15
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-01-07T20:08:15.985Z
ai_summary_generated_at: 2026-01-08 10:45:32
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"
    },
    {
      "name": "Get Global Attributes List",
      "value": "list",
      "action": "Get global attributes list",
      "description": "This method returns list of all attributes"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    }
  ]

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":"The Nalpeiron Zentitle2 node enables automation of license management and customer success workflows by integrating with the Nalpeiron Growth Platform, allowing retrieval of license data, customer information, product details, and real-time event notifications via webhooks.","capabilities":["Retrieve license details and status","List and filter licenses by criteria","Track license usage and expiration dates","Access customer records and contact details","Get product configurations and feature information","Listen for real-time webhook events (license creation, expiration, renewals, customer lifecycle changes)","Monitor seat assignments and multi-tenant customer scenarios"],"authentication":"OAuth2 required with Client ID, Client Secret, Tenant ID, Base URL, and Access Token URL","commonUseCases":["License expiration alerts and renewal workflows","Customer lifecycle event monitoring for proactive engagement","Revenue optimization through upsell and churn prevention insights","Synchronization of license and customer data to external systems like CRM","Unified customer intelligence by combining licensing and customer success data"],"limitations":[],"relatedNodes":["Nalpeiron Zentitle2 Trigger","Nalpeiron Zengain","Nalpeiron Zengain Trigger"]}


node_type: n8n-nodes-tubelab.tubeLab
package_name: n8n-nodes-tubelab
display_name: TubeLab
description: Get trending YouTube channels and outlier videos data for any niche.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: antoniojps
author_github_url: https://github.com/antoniojps/
npm_package_name: n8n-nodes-tubelab
npm_version: 0.4.7
community_fetched_at: 2026-01-07T20:08:15.986Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Channel",
          "value": "channel"
        },
        {
          "name": "Video",
          "value": "video"
        },
        {
          "name": "Scan",
          "value": "scan"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchOutliers",
      "options": [
        {
          "name": "Search Channels",
          "value": "searchChannels",
          "action": "Search for channels",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "hits"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/search/channels",
              "method": "GET"
            }
          },
          "description": "Search for channels directly from the YouTube Niche Finder with AI enhanced data and 30+ filters. Updated in real-time, 24/7."
        },
        {
          "name": "Search Similar Channels",
          "value": "searchChannelsRelated",
          "action": "Search for similar channels",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "hits"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/search/channels/related",
              "method": "GET"
            }
          },
          "description": "Search for YouTube channels with related content to another channel"
        },
        {
          "name": "Search Outliers",
          "value": "searchOutliers",
          "action": "Search for outliers",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "hits"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/search/outliers",
              "method": "GET"
            }
          },
          "description": "Search for videos directly from the TubeLab Outliers library with AI enhanced data and 30+ filters. Updated in real-time, 24/7."
        },
        {
          "name": "Search Similar Outliers",
          "value": "searchOutliersRelated",
          "action": "Search for similar outliers",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "hits"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/search/outliers/related",
              "method": "GET"
            }
          },
          "description": "Search for YouTube outliers with related content to another outlier(s)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postScan",
      "options": [
        {
          "name": "Start a Scan",
          "value": "postScan",
          "action": "Start a scan",
          "routing": {
            "request": {
              "url": "/v1/scan",
              "method": "POST"
            }
          },
          "description": "Start a TubeLab scan to search for fresh outliers and channels on any given topic"
        },
        {
          "name": "Get Scan",
          "value": "getScan",
          "action": "Get a scan",
          "routing": {
            "request": {
              "url": "=/v1/scan/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get the status of a scan and used inputs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getVideoTranscript",
      "options": [
        {
          "name": "Details",
          "value": "getVideoDetails",
          "action": "Get details",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/video/{{$parameter[\"videoId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch the details of a video"
        },
        {
          "name": "Transcript",
          "value": "getVideoTranscript",
          "action": "Get transcript",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/video/transcript/{{$parameter[\"videoId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetches the transcript of a video including timestamps"
        },
        {
          "name": "Comments",
          "value": "getVideoComments",
          "action": "Get comments",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/video/comments/{{$parameter[\"videoId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch the first 100 comments of a video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getChannelVideos",
      "options": [
        {
          "name": "Get Videos",
          "value": "getChannelVideos",
          "action": "Get videos",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "item"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/channel/videos/{{$parameter[\"channelId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch the videos of a channel and relevant metrics"
        },
        {
          "name": "Get Shorts",
          "value": "getChannelShorts",
          "action": "Get shorts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "item"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/channel/shorts/{{$parameter[\"channelId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetches the shorts of a channel and relevant metrics"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channel"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search Channels",
      "value": "searchChannels",
      "action": "Search for channels",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "hits"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/search/channels",
          "method": "GET"
        }
      },
      "description": "Search for channels directly from the YouTube Niche Finder with AI enhanced data and 30+ filters. Updated in real-time, 24/7."
    },
    {
      "name": "Search Similar Channels",
      "value": "searchChannelsRelated",
      "action": "Search for similar channels",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "hits"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/search/channels/related",
          "method": "GET"
        }
      },
      "description": "Search for YouTube channels with related content to another channel"
    },
    {
      "name": "Search Outliers",
      "value": "searchOutliers",
      "action": "Search for outliers",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "hits"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/search/outliers",
          "method": "GET"
        }
      },
      "description": "Search for videos directly from the TubeLab Outliers library with AI enhanced data and 30+ filters. Updated in real-time, 24/7."
    },
    {
      "name": "Search Similar Outliers",
      "value": "searchOutliersRelated",
      "action": "Search for similar outliers",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "hits"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/search/outliers/related",
          "method": "GET"
        }
      },
      "description": "Search for YouTube outliers with related content to another outlier(s)"
    },
    {
      "name": "Start a Scan",
      "value": "postScan",
      "action": "Start a scan",
      "routing": {
        "request": {
          "url": "/v1/scan",
          "method": "POST"
        }
      },
      "description": "Start a TubeLab scan to search for fresh outliers and channels on any given topic"
    },
    {
      "name": "Get Scan",
      "value": "getScan",
      "action": "Get a scan",
      "routing": {
        "request": {
          "url": "=/v1/scan/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get the status of a scan and used inputs"
    },
    {
      "name": "Details",
      "value": "getVideoDetails",
      "action": "Get details",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/video/{{$parameter[\"videoId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch the details of a video"
    },
    {
      "name": "Transcript",
      "value": "getVideoTranscript",
      "action": "Get transcript",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/video/transcript/{{$parameter[\"videoId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetches the transcript of a video including timestamps"
    },
    {
      "name": "Comments",
      "value": "getVideoComments",
      "action": "Get comments",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/video/comments/{{$parameter[\"videoId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch the first 100 comments of a video"
    },
    {
      "name": "Get Videos",
      "value": "getChannelVideos",
      "action": "Get videos",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "item"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/channel/videos/{{$parameter[\"channelId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch the videos of a channel and relevant metrics"
    },
    {
      "name": "Get Shorts",
      "value": "getChannelShorts",
      "action": "Get shorts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "item"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/channel/shorts/{{$parameter[\"channelId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetches the shorts of a channel and relevant metrics"
    }
  ]

npm_readme:
  # n8n-nodes-tubelab

  This is an n8n community node. It lets you get enhanced YouTube data - including 400K+ trending channels, 4M+ outliers and scan niches in real-time with [TubeLab](https://tubelab.ai).

  [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-tubelab` in **Enter npm package name**.
  4. Agree to the risks of using community nodes: select **I understand the risks of installing unverified code from a public source.**
  5. Select **Install**.

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

  ## Operations

  It supports these TubeLab operations:

  - **Search Outliers**: Search for videos directly from the TubeLab Outliers library with AI enhanced data and 30+ filters. Updated in real-time, 24/7.
  - **Search Similar Outliers**: Search for YouTube outliers with related content to another outlier(s)
  - **Search Channels**: Search for channels directly from the YouTube Niche Finder with AI enhanced data and 30+ filters. Updated in real-time, 24/7.
  - **Search Similar Channels**: Search for YouTube channels with related content to another channel
  - **Get Channel Videos**: Fetch the videos of a channel and relevant metrics (max 100 videos)
  - **Get Channel Shorts**: Fetch the shorts of a channel and relevant metrics (max 100 shorts)
  - **Get Video Details**: Fetch the details of a video
  - **Get Video Transcript**: Fetch the transcript & timestamps of a video
  - **Get Video Comments**: Fetch the first 100 comments of a video
  - **Start a Scan**: Start a TubeLab scan to search for fresh outliers and channels on any given topic
  - **Get a Scan**: Get the status of a scan and used inputs

  ## Credentials

  To use this node, you will need to authenticate with [TubeLab's API](https://tubelab.net/docs/api).

  1. Sign up for a [TubeLab](https://tubelab.net/) account
  2. Go to the [Developers Dashboard](https://tubelab.net/developers) and create an API key
  3. Create new credential in n8n
     - Use TubeLab's node
     - Under Credential to connect with, click Create New Credential
     - Paste API Key

  ## Compatibility

  This node was developed & tested with the `1.112.5` version.

  ## Usage

  Please refer to [TubeLab's Automation documentation](https://tubelab.net/docs/api/automation) with example templates on how to use this node.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [TubeLab's API Documentation](https://tubelab.net/docs/api)
  - [Sign up for a TubeLab API key](https://tubelab.net)
  - Contact support if you have any issues: [https://tubelab.net/support](https://tubelab.net/support)

  ## Version history

  - 0.4.7 - Remove deprecated `requestWithAuthentication` in favor of `httpRequestWithAuthentication`
  - 0.4.5 - Fix `/channel/videos` endpoint
  - 0.4.3 - Fix query params as expressions compiling
  - 0.4.0 - Add operations `Get Channel Videos`, `Get Channel Shorts`, `Get Video Details`, `Get Video Transcript`, `Get Video Comments`
  - 0.3.3 - Fix Start Scan `findBy` input
  - 0.3.2 - Add "publishedAtFrom" to Outliers Filters
  - 0.3.0 - Fix Webhooks Trigger
  - 0.2.0 - Fix API base URL
  - 0.1.1 - Fix package.json metadata details
  - 0.1.0 - Initial release

  ## Contribution Guidelines

  Refer to the [official documentation](https://docs.n8n.io/integrations/creating-nodes/build/n8n-node/#new).

  Requirements:

  - Node JS
  - Install `n8n-node`: `npm install --global @n8n/node-cli`
  - Run `npm run dev`

ai_documentation_summary:
  {"purpose":"The TubeLab node retrieves real-time YouTube data, including trending channels, outlier videos, and niche-specific content, using AI-enhanced filtering and search capabilities.","capabilities":["Search for videos and channels with 30+ filters","Search for similar outliers or channels based on content","Fetch videos and shorts with relevant metrics","Retrieve video details, transcripts, and comments","Start and monitor scans for fresh content in specific niches"],"authentication":"API key required via TubeLab's Developers Dashboard","commonUseCases":["Identifying trending YouTube niches and content trends","Finding high-performing outlier videos for content inspiration","Discovering channels similar to a given channel","Automating content discovery workflows for marketing or content creation","Monitoring real-time changes in video performance and channel activity"],"limitations":["Maximum of 100 videos or shorts per channel request","No support for pagination beyond the initial 100 results","Limited to data available through TubeLab's API (may not include all YouTube data)"],"relatedNodes":["YouTube-related nodes","Content discovery and analytics nodes","Automation and workflow trigger nodes"]}


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

updated_at: 2026-01-07 20:08:15
author_name: jtempels
author_github_url: https://github.com/octavehq/octave-n8n.git
npm_package_name: n8n-nodes-octavehq
npm_version: 1.5.0
community_fetched_at: 2026-01-07T20:08:15.987Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Async",
          "value": "async"
        },
        {
          "name": "Competitor",
          "value": "competitor"
        },
        {
          "name": "Experiment",
          "value": "experiment"
        },
        {
          "name": "Persona",
          "value": "persona"
        },
        {
          "name": "Playbook",
          "value": "playbook"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Proof Point",
          "value": "proofPoint"
        },
        {
          "name": "Reference",
          "value": "reference"
        },
        {
          "name": "Segment",
          "value": "segment"
        },
        {
          "name": "Use Case",
          "value": "useCase"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Build Workspace",
          "value": "buildWorkspace",
          "action": "Build workspace",
          "description": "Generate and build a Workspace"
        },
        {
          "name": "Call Prep",
          "value": "callPrep",
          "action": "Generate call prep",
          "description": "Generate call prep content including discovery questions, call scripts, and objection handling"
        },
        {
          "name": "Enrich Company",
          "value": "enrichCompany",
          "action": "Enrich a company",
          "description": "Enrich a company"
        },
        {
          "name": "Enrich Person",
          "value": "enrichPerson",
          "action": "Enrich a person",
          "description": "Enrich a Person"
        },
        {
          "name": "Generate Content",
          "value": "generateContent",
          "action": "Generate content",
          "description": "Generate content for a person"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List agents",
          "description": "List all agents"
        },
        {
          "name": "Qualify Company",
          "value": "qualifyCompany",
          "action": "Qualify a company",
          "description": "Determine if a company is qualified for a given Product and/or Segment"
        },
        {
          "name": "Qualify Person",
          "value": "qualifyPerson",
          "action": "Qualify a person",
          "description": "Determine if a person is qualified for a given Product, Persona, and/or Segment"
        },
        {
          "name": "Run Prospector",
          "value": "runProspector",
          "action": "Run a prospector agent",
          "description": "Find relevant people at a company or lookalike companies"
        },
        {
          "name": "Run Sequence",
          "value": "runSequence",
          "action": "Run a sequence agent",
          "description": "Generate Emails for a person"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Playbooks",
          "value": "list",
          "action": "List playbooks"
        },
        {
          "name": "Get Playbook",
          "value": "get",
          "action": "Get a playbook by OID"
        },
        {
          "name": "Create Playbook",
          "value": "create",
          "action": "Create a new playbook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "playbook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "description": "Create a new product"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate products",
          "description": "Generate products from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "description": "Get a specific product by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List products",
          "description": "List products in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "description": "Update an existing product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a persona",
          "description": "Create a new persona"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate personas",
          "description": "Generate personas from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a persona",
          "description": "Get a specific persona by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List personas",
          "description": "List personas in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a persona",
          "description": "Update an existing persona"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "persona"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a proof point",
          "description": "Create a new proof point"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate proof points",
          "description": "Generate proof points from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a proof point",
          "description": "Get a proof point by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List proof points",
          "description": "List proof points with optional filtering and pagination"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a proof point",
          "description": "Update an existing proof point"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "proofPoint"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a reference",
          "description": "Create a new reference"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate references",
          "description": "Generate references from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a reference",
          "description": "Get a specific reference by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List references",
          "description": "List references in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a reference",
          "description": "Update an existing reference"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reference"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a use case",
          "description": "Create a new use case"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate use cases",
          "description": "Generate use cases from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a use case",
          "description": "Get a specific use case by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List use cases",
          "description": "List use cases in the workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a use case",
          "description": "Update an existing use case"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "useCase"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runAgent",
      "options": [
        {
          "name": "Run Agent",
          "value": "runAgent",
          "action": "Run an agent asynchronously",
          "description": "Triggers an agent to run in the background"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "async"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a competitor",
          "description": "Create a new competitor"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate competitors",
          "description": "Generate competitors from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a competitor",
          "description": "Get a competitor by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List competitors",
          "description": "List competitors with optional filtering"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a competitor",
          "description": "Update an existing competitor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "competitor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a segment",
          "description": "Create a new segment"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate segments",
          "description": "Generate segments from source materials using AI"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a segment",
          "description": "Get a segment by OId"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List segments",
          "description": "List segments with optional filtering"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a segment",
          "description": "Update an existing segment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "segment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an experiment",
          "description": "Create a new agent experiment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "experiment"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Build Workspace",
      "value": "buildWorkspace",
      "action": "Build workspace",
      "description": "Generate and build a Workspace"
    },
    {
      "name": "Call Prep",
      "value": "callPrep",
      "action": "Generate call prep",
      "description": "Generate call prep content including discovery questions, call scripts, and objection handling"
    },
    {
      "name": "Enrich Company",
      "value": "enrichCompany",
      "action": "Enrich a company",
      "description": "Enrich a company"
    },
    {
      "name": "Enrich Person",
      "value": "enrichPerson",
      "action": "Enrich a person",
      "description": "Enrich a Person"
    },
    {
      "name": "Generate Content",
      "value": "generateContent",
      "action": "Generate content",
      "description": "Generate content for a person"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List agents",
      "description": "List all agents"
    },
    {
      "name": "Qualify Company",
      "value": "qualifyCompany",
      "action": "Qualify a company",
      "description": "Determine if a company is qualified for a given Product and/or Segment"
    },
    {
      "name": "Qualify Person",
      "value": "qualifyPerson",
      "action": "Qualify a person",
      "description": "Determine if a person is qualified for a given Product, Persona, and/or Segment"
    },
    {
      "name": "Run Prospector",
      "value": "runProspector",
      "action": "Run a prospector agent",
      "description": "Find relevant people at a company or lookalike companies"
    },
    {
      "name": "Run Sequence",
      "value": "runSequence",
      "action": "Run a sequence agent",
      "description": "Generate Emails for a person"
    },
    {
      "name": "List Playbooks",
      "value": "list",
      "action": "List playbooks"
    },
    {
      "name": "Get Playbook",
      "value": "get",
      "action": "Get a playbook by OID"
    },
    {
      "name": "Create Playbook",
      "value": "create",
      "action": "Create a new playbook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "description": "Create a new product"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate products",
      "description": "Generate products from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "description": "Get a specific product by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List products",
      "description": "List products in the workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "description": "Update an existing product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a persona",
      "description": "Create a new persona"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate personas",
      "description": "Generate personas from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a persona",
      "description": "Get a specific persona by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List personas",
      "description": "List personas in the workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a persona",
      "description": "Update an existing persona"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a proof point",
      "description": "Create a new proof point"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate proof points",
      "description": "Generate proof points from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a proof point",
      "description": "Get a proof point by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List proof points",
      "description": "List proof points with optional filtering and pagination"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a proof point",
      "description": "Update an existing proof point"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a reference",
      "description": "Create a new reference"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate references",
      "description": "Generate references from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a reference",
      "description": "Get a specific reference by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List references",
      "description": "List references in the workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a reference",
      "description": "Update an existing reference"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a use case",
      "description": "Create a new use case"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate use cases",
      "description": "Generate use cases from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a use case",
      "description": "Get a specific use case by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List use cases",
      "description": "List use cases in the workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a use case",
      "description": "Update an existing use case"
    },
    {
      "name": "Run Agent",
      "value": "runAgent",
      "action": "Run an agent asynchronously",
      "description": "Triggers an agent to run in the background"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a competitor",
      "description": "Create a new competitor"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate competitors",
      "description": "Generate competitors from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a competitor",
      "description": "Get a competitor by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List competitors",
      "description": "List competitors with optional filtering"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a competitor",
      "description": "Update an existing competitor"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a segment",
      "description": "Create a new segment"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate segments",
      "description": "Generate segments from source materials using AI"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a segment",
      "description": "Get a segment by OId"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List segments",
      "description": "List segments with optional filtering"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a segment",
      "description": "Update an existing segment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an experiment",
      "description": "Create a new agent experiment"
    }
  ]

npm_readme:
  # n8n-nodes-octavehq

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

  Octave is the AI-powered messaging brain for B2B go-to-market teams, helping you articulate your product's value, synthesize customer interaction data, and deploy consistent, effective messaging across all your execution channels. In a world of rapid product innovation, Octave ensures your go-to-market strategy is always on message and impactful.

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

  [Installation](#installation)
  [Operations](#operations)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation

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

  ## Operations

  The Octave node supports the following operations, categorized by resource:

  ### Response Format

  All agent operations now return responses that include both the data and API metadata:

  ```json
  {
    "data": {
      // Actual response data from the operation
    },
    "_metadata": {
      "requestId": "unique-request-identifier",
      "timestamp": "2021-01-01T00:00:00.000Z",
      "usage": 0,
      "message": "Additional information about the request"
    }
  }
  ```

  The `_metadata` field provides valuable information for tracking, debugging, and monitoring API usage.

  **Resource: Agent**
  *   **List Agents**: List all agents
      *   Corresponds to `GET /api/v2/agents/list`
  *   **Build Workspace**: Generate and build a Workspace
      *   Corresponds to `POST /api/v2/agents/workspace/build`
  *   **Call Prep**: Generate call prep content including discovery questions, call scripts, and objection handling
      *   Corresponds to `POST /api/v2/agents/call-prep/run`
  *   **Enrich Company**: Enrich a company
      *   Corresponds to `POST /api/v2/agents/enrich-company/run`
  *   **Enrich Person**: Enrich a Person
      *   Corresponds to `POST /api/v2/agents/enrich-person/run`
  *   **Generate Content**: Generate content for a person
      *   Corresponds to `POST /api/v2/agents/generate-content/run`
  *   **Run Sequence**: Generate Emails for a person
      *   Corresponds to `POST /api/v2/agents/sequence/run`
  *   **Run Prospector**: Find relevant people at a company or lookalike companies
      *   Corresponds to `POST /api/v2/agents/prospector/run`
  *   **Qualify Company**: Determine if a company is qualified for a given Product and/or Segment
      *   Corresponds to `POST /api/v2/agents/qualify-company/run`
  *   **Qualify Person**: Determine if a person is qualified for a given Product, Persona, and/or Segment
      *   Corresponds to `POST /api/v2/agents/qualify-person/run`

  **Resource: Async**
  *   **Run Agent Asynchronously**: Triggers an agent to run in the background.
      *   Corresponds to `POST /api/v2/async/agent/run`

  **Resource: Competitor**
  *   **List Competitors**: Retrieves a list of competitors with optional filtering.
      *   Corresponds to `GET /api/v2/competitor/list`
  *   **Get Competitor**: Retrieves a specific competitor by its OId.
      *   Corresponds to `GET /api/v2/competitor/get`
  *   **Create Competitor**: Creates a new competitor.
      *   Corresponds to `POST /api/v2/competitor/create`
  *   **Update Competitor**: Updates an existing competitor.
      *   Corresponds to `PUT /api/v2/competitor/update`
  *   **Generate Competitors**: Generate competitors from source materials using AI.
      *   Corresponds to `POST /api/v2/competitor/generate`

  **Resource: Experiment**
  *   **Create Experiment**: Creates a new agent experiment for A/B testing different agents.
      *   Corresponds to `POST /api/v2/agents/experiment/create`

  **Resource: Persona**
  *   **List Personas**: Retrieves a list of personas.
      *   Corresponds to `GET /api/v2/persona/list`
  *   **Get Persona**: Retrieves a specific persona by its OId.
      *   Corresponds to `GET /api/v2/persona/get`
  *   **Create Persona**: Creates a new persona.
      *   Corresponds to `POST /api/v2/persona/create`
  *   **Update Persona**: Updates an existing persona.
      *   Corresponds to `PUT /api/v2/persona/update`
  *   **Generate Personas**: Generate personas from source materials using AI.
      *   Corresponds to `POST /api/v2/persona/generate`

  **Resource: Playbook**
  *   **List Playbooks**: Retrieves a list of playbooks.
      *   Corresponds to `GET /api/v2/playbook/list`
  *   **Get Playbook**: Retrieves a specific playbook by its OId.
      *   Corresponds to `GET /api/v2/playbook/get`
  *   **Create Playbook**: Creates a new playbook.
      *   Corresponds to `POST /api/v2/playbook/create`
  *   **Update Playbook**: Updates an existing playbook.
      *   Corresponds to `PUT /api/v2/playbook/update`

  **Resource: Product**
  *   **List Products**: Retrieves a list of products.
      *   Corresponds to `GET /api/v2/product/list`
  *   **Get Product**: Retrieves a specific product by its OId.
      *   Corresponds to `GET /api/v2/product/get`
  *   **Create Product**: Creates a new product.
      *   Corresponds to `POST /api/v2/product/create`
  *   **Update Product**: Updates an existing product.
      *   Corresponds to `PUT /api/v2/product/update`
  *   **Generate Products**: Generate products from source materials using AI.
      *   Corresponds to `POST /api/v2/product/generate`

  **Resource: Proof Point**
  *   **List Proof Points**: Retrieves a list of proof points with optional filtering.
      *   Corresponds to `GET /api/v2/proof-point/list`
  *   **Get Proof Point**: Retrieves a specific proof point by its OId.
      *   Corresponds to `GET /api/v2/proof-point/get`
  *   **Create Proof Point**: Creates a new proof point.
      *   Corresponds to `POST /api/v2/proof-point/create`
  *   **Update Proof Point**: Updates an existing proof point.
      *   Corresponds to `PUT /api/v2/proof-point/update`
  *   **Generate Proof Points**: Generate proof points from source materials using AI.
      *   Corresponds to `POST /api/v2/proof-point/generate`

  **Resource: Reference**
  *   **List References**: Retrieves a list of references.
      *   Corresponds to `GET /api/v2/reference/list`
  *   **Get Reference**: Retrieves a specific reference by its OId.
      *   Corresponds to `GET /api/v2/reference/get`
  *   **Create Reference**: Creates a new reference.
      *   Corresponds to `POST /api/v2/reference/create`
  *   **Update Reference**: Updates an existing reference.
      *   Corresponds to `PUT /api/v2/reference/update`
  *   **Generate References**: Generate references from source materials using AI.
      *   Corresponds to `POST /api/v2/reference/generate`

  **Resource: Segment**
  *   **List Segments**: Retrieves a list of segments with optional filtering.
      *   Corresponds to `GET /api/v2/segment/list`
  *   **Get Segment**: Retrieves a specific segment by its OId.
      *   Corresponds to `GET /api/v2/segment/get`
  *   **Create Segment**: Creates a new segment.
      *   Corresponds to `POST /api/v2/segment/create`
  *   **Update Segment**: Updates an existing segment.
      *   Corresponds to `PUT /api/v2/segment/update`
  *   **Generate Segments**: Generate segments from source materials using AI.
      *   Corresponds to `POST /api/v2/segment/generate`

  **Resource: Use Case**
  *   **List Use Cases**: Retrieves a list of use cases.
      *   Corresponds to `GET /api/v2/use-case/list`
  *   **Get Use Case**: Retrieves a specific use case by its OId.
      *   Corresponds to `GET /api/v2/use-case/get`
  *   **Create Use Case**: Creates a new use case.
      *   Corresponds to `POST /api/v2/use-case/create`
  *   **Update Use Case**: Updates an existing use case.
      *   Corresponds to `PUT /api/v2/use-case/update`
  *   **Generate Use Cases**: Generate use cases from source materials using AI.
      *   Corresponds to `POST /api/v2/use-case/generate`

  ## Credentials

  Get your API key from the Octave settings page. We recommend naming the credentials with the Workspace that the API key is associated with.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Library Overview](https://youtu.be/UyU1tDuRE58)
  * [Playbooks Overview](https://youtu.be/SINDvLIfRa8)
  * [Agents Overview](https://www.youtube.com/watch?v=oExCRibGjAU)
  * [Octave + Clay Overview](https://www.youtube.com/watch?v=JjYLBddEn7A)


  ## Version history
  * 0.1.1 - Octave <> N8N. Let the games begin!
  * 1.0.1 - Add `x-request-source` header to indicate request came from n8n
  * 1.0.2 - Add Credentials test + make Octave node usable by AI
  * 1.1.0 - Added Competitor, Segment, and Experiment resources; Added Call Prep agent; Removed Personalize Template agent; Improved modular architecture
  * 1.1.1 - Uses IHttpRequestOptions instead of deprecated IRequestOptions
  * 1.1.2 - Uses httpRequestWithAuthentication instead of httpRequest to be more secure and maintainable
  * 1.2.0 - Removed List API Keys endpoint
  * 1.2.1 - Rebuild to remove deprecated API files from build
  * 1.3.0 - Major expansion: Added full CRUD support (create, update, generate) for all resources; Added new Proof Point resource; Enhanced UX with native collection inputs for generate operations; Improved agent field ordering with LinkedIn Profile prioritization; Enhanced runtime context handling for sequences
  * 1.3.1 - Fixed UI issue in generate operations where "Add Source" button was not displaying Type and Value fields properly
  * 1.3.2 - Update Playbook types
  * 1.4.0 - Enhanced response format: All agent operations now include API metadata (`_metadata`) alongside data, providing request IDs, timestamps, usage information, and additional context for better tracking and debugging
  * 1.5.0 - Added `generate` route to references. Updated documentation.

ai_documentation_summary:
  {"purpose":"The Octave node enables integration with the Octave V2 API to automate AI-powered go-to-market tasks such as generating messaging, enriching company and person data, qualifying prospects, and managing product, persona, and competitor information within n8n workflows.","capabilities":["List agents and workspaces","Generate call prep content including scripts and discovery questions","Enrich company and person data","Generate content and emails for individuals","Run prospecting and qualification workflows for companies and people","Manage products, personas, playbooks, and proof points","Create, update, and generate competitors, personas, products, and proof points using AI","Run agent operations asynchronously"],"authentication":"API key required","commonUseCases":["Automating sales messaging with AI-generated call scripts and discovery questions","Enriching customer data for targeted outreach","Qualifying leads by product and persona","Generating competitor and product insights from source materials","Creating and managing go-to-market playbooks and content sequences"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-http-request"]}


node_type: n8n-nodes-veed.veed
package_name: n8n-nodes-veed
display_name: VEED AI Video API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: dmytrobaltak
author_github_url: https://github.com/veedstudio/
npm_package_name: n8n-nodes-veed
npm_version: 1.2.4
community_fetched_at: 2026-01-07T20:08:15.987Z
ai_summary_generated_at: 2026-01-08 10:45:32
description:
  Generate AI talking videos from an image and audio file using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and ai avatars directly in your n8n workflows.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "fabric",
      "options": [
        {
          "name": "Fabric",
          "value": "fabric",
          "description": "Generate talking head videos"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Generate Video",
          "value": "generateVideo",
          "action": "Generate a video using fabric model",
          "description": "Generate a talking head video from image and audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fabric"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Video",
      "value": "generateVideo",
      "action": "Generate a video using fabric model",
      "description": "Generate a talking head video from image and audio"
    }
  ]

npm_readme:
  # n8n-nodes-veed

  Generate AI talking videos from images and audio using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and AI avatars directly in your n8n workflows.

  ## Features

  - **Fabric Video Generation**: Create AI-powered talking head videos from images and audio
  - Powered by [fal.ai](https://fal.ai)
  - Support for multiple model versions (Standard & Fast)
  - Real-time progress tracking via streaming status updates
  - Configurable timeouts

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in n8n
  2. Search for `veed`
  3. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-veed
  ```

  ## Prerequisites

  - A fal.ai account ([sign up](https://fal.ai))
  - A fal.ai personal API key ([get your key](https://fal.ai/dashboard/keys))
  - n8n version 0.200.0 or higher
  - Node.js 22 or higher

  ## Setup

  1. In n8n, create a new **Fal.ai API** credential
  2. Paste your personal API key
  3. Add the **VEED AI Video API** node to your workflow

  ## Usage

  ### Fabric Video Generation

  Generate realistic talking head videos from a still image and audio file.

  #### Parameters

  **Image URL** (required)

  - Portrait image URL for the talking head
  - Best results: Front-facing photos, clear facial features
  - Supported formats: JPG, PNG, WebP

  **Audio URL** (required)

  - Speech audio URL for lip sync
  - Supported formats: MP3, WAV, M4A, AAC

  **Model Version**

  - **Fabric 1.0**: Lower price
  - **Fabric 1.0 Fast**: Faster generation, higher price

  **Resolution**

  - `480p`: Faster generation
  - `720p`: Higher quality

  **Aspect Ratio**

  - `16:9`: Landscape (YouTube, presentations)
  - `9:16`: Portrait (TikTok, Instagram Stories, Reels)
  - `1:1`: Square (Instagram Feed, LinkedIn)

  #### Options (Advanced)

  **Timeout** (default: 10 minutes)

  - Maximum time to wait for generation
  - Recommended: 10+ minutes for longer videos, 15+ for 720p
  - Range: 1-60 minutes
  - Note: The node uses fal.ai's streaming API for real-time status updates

  ## 🎬 Showcase Workflows

  > **Note:** These workflow examples are available in the repository for local development/testing only. They are not included in the published npm package.

  Ready-to-use workflow templates demonstrating the Veed Fabric node in complete pipelines:

  ### 1. **Simple Text-to-Video** (Beginner-Friendly)

  A minimal workflow to test the Veed Fabric node with pre-made assets.

  **What it does:**

  - Uses demo image and audio URLs
  - Generates a talking head video using Fabric Fast model
  - Shows generation progress and results
  - Formats output with video URL and generation time

  **Import:** `dev-workflow-examples/simple-text-to-video.json`

  ---

  ### 2. **Complete Text-to-Video Ad Generator** (Advanced)

  Full automated pipeline from text prompt to social media post.

  **What it does:**

  ```
  Text Prompt ("animated bear advertising sunglasses")
      ↓
  🤖 OpenAI GPT-4o-mini → Generates ad script + character description
      ↓
  🎨 OpenAI DALL-E 3 → Creates character image
      ↓
  🎙️ StreamElements TTS → Converts script to voice (FREE)
      ↓
  🎬 Veed Fabric → Generates talking head video
      ↓
  🐦 Twitter/X → Posts video with caption
  ```

  **Import:** `dev-workflow-examples/text-to-video-showcase.json`

  **Services used:**

  - 💰 **OpenAI GPT-4o-mini** ($5 free trial, ~$0.01/video) - Script generation
  - 💰 **OpenAI DALL-E 3** ($5 free trial, ~$0.04/image) - Image generation
  - ✅ **StreamElements TTS** (FREE, no API key needed) - Text-to-speech
  - 💰 **fal.ai** (Pay-per-use, ~$0.08-0.20/second) - Video generation
  - ✅ **Twitter/X API** (FREE tier) - Social posting

  ---

  ### 💡 Quick Start with Showcase Workflows

  > **Prerequisites:** These workflows are only available when running the node in development mode. See [Development](#development) section below for setup instructions.

  1. **Import a workflow:**

     ```
     n8n (localhost:5678) → Workflows → Import from File → Select JSON from dev-workflow-examples/
     ```

  2. **Set up credentials:**
     - **Simple workflow:** Only fal.ai API key required
     - **Advanced workflow:** OpenAI API key, Twitter OAuth2 credentials, fal.ai API key

  3. **Customize:**
     - **Simple:** Replace imageUrl and audioUrl in "📝 Set Demo Image & Audio" node
     - **Advanced:** Change adPrompt in "📝 Set Ad Concept" node
     - Adjust video settings (resolution, aspect ratio)

  4. **Execute and wait:**
     - Click "Test Workflow" button
     - Watch progress in execution logs

  5. **Use your video:**
     - Get video URL from output
     - Download and use in your content
     - Automatically posted to Twitter (advanced workflow)

  ## Performance

  - **Generation time**: Depending on audio length and video resolution
  - **Progress updates**: Real-time progress shown in execution logs
  - **Timeout handling**: Configurable timeout with clear error messages

  ## Troubleshooting

  Having issues? See the [Troubleshooting Guide](docs/TROUBLESHOOTING.md) for detailed solutions to common problems:

  - Authentication errors
  - Generation timeouts
  - Invalid URL errors
  - Rate limits
  - Network issues
  - And more...

  ## Compatibility

  - **n8n**: 0.200.0+
  - **Node.js**: 22+
  - **Supported platforms**: Linux, macOS, Windows

  ## Resources

  - [Veed Fabric Model on fal.ai](https://fal.ai/models/veed/fabric-1.0)
  - [Fabric Playground](https://fal.ai/models/veed/fabric-1.0/playground)
  - [fal.ai Documentation](https://docs.fal.ai)
  - [Report Issues](https://github.com/veedstudio/n8n-nodes-veed/issues)
  - [n8n Community Forum](https://community.n8n.io)

  ## Development

  ### Build

  ```bash
  pnpm build
  ```

  ### Test

  ```bash
  pnpm test          # Run all tests
  pnpm test:watch    # Watch mode
  pnpm test:coverage # Coverage report
  ```

  ### Local Development

  ```bash
  pnpm dev  # Starts n8n with your node at localhost:5678
  ```

  For detailed testing instructions, see [docs/TESTING.md](docs/TESTING.md)

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Run `pnpm lint:fix`
  6. Submit a pull request

  ### n8n Community Node Restrictions

  When contributing, be aware of n8n's community node restrictions:

  - **❌ No `setTimeout` or `setInterval`**: These global timers are not allowed.
  - **✅ Required properties**: All nodes must have `usableAsTool` property
  - **✅ Credentials**: Must have `icon` and `test` properties

  ## License

  MIT

  ## Support

  For issues and questions:

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

  ---

ai_documentation_summary:
  {"purpose":"Generates AI-powered talking head videos from images and audio files using the Veed Fabric API, enabling automation of realistic talking videos, animation videos, and AI avatars directly within n8n workflows.","capabilities":["Generate talking head videos from a portrait image and speech audio","Support for multiple model versions: Fabric 1.0 (standard) and Fabric 1.0 Fast (faster generation)","Configurable video resolution (480p, 720p)","Configurable aspect ratio (16:9, 9:16, 1:1)","Real-time progress tracking via streaming status updates","Configurable timeout (1–60 minutes, default 10 minutes)"],"authentication":"API key required from fal.ai (personal API key obtained from https://fal.ai/dashboard/keys)","commonUseCases":["Creating social media content (e.g., TikTok, Instagram Reels, YouTube videos)","Automated ad generation with text-to-video pipelines","Dynamic video creation from scripts and character designs","Integrating AI avatars into marketing or educational content"],"limitations":["Requires a fal.ai account and API key","Generation time depends on audio length and resolution; longer videos may exceed timeout limits","No built-in text-to-image or text-to-speech functionality; requires external nodes for those steps","Real-time progress updates are available but not full video preview","Limited to supported audio and image formats (MP3, WAV, M4A, AAC; JPG, PNG, WebP)"],"relatedNodes":["OpenAI GPT-4o-mini","OpenAI DALL-E 3","StreamElements TTS","Twitter/X API","Fal.ai API"]}


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

updated_at: 2026-01-07 20:08:15
author_name: saber_kurama
author_github_url: https://github.com/Saber-Kurama/
npm_package_name: n8n-nodes-ada
npm_version: 0.1.2
community_fetched_at: 2026-01-07T20:08:15.988Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "data-analysis",
      "options": [
        {
          "name": "Data Analysis",
          "value": "data-analysis"
        },
        {
          "name": "Data Interpretation",
          "value": "data-interpretation"
        },
        {
          "name": "Data Visualization",
          "value": "data-visualization"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "jsonDataAnalysis",
      "options": [
        {
          "name": "JSON Data Analysis",
          "value": "jsonDataAnalysis",
          "action": "Analyze JSON data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/platform_api/PythonDataAnalysis",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "data-analysis"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "interpretJsonData",
      "options": [
        {
          "name": "Interpret JSON Data",
          "value": "interpretJsonData",
          "action": "Interpret JSON data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/platform_api/DataInterpretation",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "data-interpretation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "visualizeJsonData",
      "options": [
        {
          "name": "Visualize JSON Data",
          "value": "visualizeJsonData",
          "action": "Visualize JSON data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/platform_api/EchartsVisualization",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "data-visualization"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "JSON Data Analysis",
      "value": "jsonDataAnalysis",
      "action": "Analyze JSON data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/platform_api/PythonDataAnalysis",
          "method": "POST"
        }
      }
    },
    {
      "name": "Interpret JSON Data",
      "value": "interpretJsonData",
      "action": "Interpret JSON data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/platform_api/DataInterpretation",
          "method": "POST"
        }
      }
    },
    {
      "name": "Visualize JSON Data",
      "value": "visualizeJsonData",
      "action": "Visualize JSON data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/platform_api/EchartsVisualization",
          "method": "POST"
        }
      }
    }
  ]

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

  # n8n-nodes-ada

  This repo contains AdaApi's community node for n8n.

  ## Installation

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

  ## Credentials

  ### Apply for an API Key
  You can easily create and manage your API Key in the [ADA official website](https://ada.im/home?ada_data_=&utm_source=n8n&utm_medium=landingpage&utm_infeluncer=landingpage&utm_campain=landingpage&utm_content=landingpage) - API. To begin with, You need to register for an ADA account.

  Once on the homepage, click the bottom left corner to access the API management dashboard.

  ![apply_apikey_1.png](https://d1551jsgrpwivo.cloudfront.net/apply_apikey_1.png)

  Here, you can create new APIs and set the credit consumption limit for each API. A single account can create up to 10 APIs.

  ![apply_apikey_2.png](https://d1551jsgrpwivo.cloudfront.net/apply_apikey_2.png)

  After successful creation, you can copy the API Key to set credentials. You can also view the credit consumption of each API and manage your APIs.

  ![apply_apikey_3.png](https://d1551jsgrpwivo.cloudfront.net/apply_apikey_3.png)

  #### **Credit Rules:**

  - Calling a single tool consumes 20 credits.
  - You will get 500 free credits per month for ADA Free account,  with each batch of credits valid for three months.
  - When credits run out, you can purchase more or upgrade your account on the ADA Billing page. Each batch of purchased credits is valid for three months. Expiration dates and billing details are available on the [ADA website-Billing](https://ada.im/udsl/#/system/billing).
  ![apply_apikey_4.png](https://d1551jsgrpwivo.cloudfront.net/apply_apikey_4.png)

  ## Usage

  Add Ada to a workflow.


  ![Add Ada to Workflow](https://d1551jsgrpwivo.cloudfront.net/ada-workflow1.png)

  Configure a basic query and hit "Execute step" to try a search.

  ![Add AdaApi](https://d1551jsgrpwivo.cloudfront.net/ada-workflow2.png)

  ![Test  AdaApi](https://d1551jsgrpwivo.cloudfront.net/ada-workflow2.png)


  ## License

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

ai_documentation_summary:
  {"purpose":"The Ada node allows users to interact with the Ada API to perform searches and queries using AI-powered tools, enabling integration of Ada's AI capabilities within n8n workflows.","capabilities":["Perform AI-powered searches using Ada's tools","Configure and execute API queries in n8n workflows","Manage API credentials and credit consumption"],"authentication":"API key required","commonUseCases":["Searching for information using Ada's AI tools","Automating data retrieval from Ada's platform in workflows","Integrating Ada's AI features with other n8n tools for decision-making or content generation"],"limitations":["Credit-based usage: each tool call consumes 20 credits; free users get 500 credits per month (valid for 3 months)","No built-in support for real-time or streaming responses","Limited to actions defined by Ada's available tools and API endpoints"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.function","n8n-nodes-base.set","n8n-nodes-base.filter"]}


node_type: n8n-nodes-google-search-console.googleSearchConsole
package_name: n8n-nodes-google-search-console
display_name: Google Search Console
description: Connect to Google Search Console API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: mrazari
author_github_url: https://github.com/mrazari/
npm_package_name: n8n-nodes-google-search-console
npm_version: 1.0.40
community_fetched_at: 2026-01-07T20:08:15.991Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "site",
      "options": [
        {
          "name": "Site",
          "value": "site"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSites",
      "options": [
        {
          "name": "Get Sites",
          "value": "getSites",
          "action": "List verified sites"
        },
        {
          "name": "Get Page Insights",
          "value": "getPageInsights",
          "action": "Query search analytics"
        },
        {
          "name": "Inspect URL",
          "value": "inspectUrl",
          "action": "Url inspection index status"
        },
        {
          "name": "Compare Page Insights",
          "value": "comparePageInsights",
          "action": "Compare search analytics between two date ranges"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "site"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Sites",
      "value": "getSites",
      "action": "List verified sites"
    },
    {
      "name": "Get Page Insights",
      "value": "getPageInsights",
      "action": "Query search analytics"
    },
    {
      "name": "Inspect URL",
      "value": "inspectUrl",
      "action": "Url inspection index status"
    },
    {
      "name": "Compare Page Insights",
      "value": "comparePageInsights",
      "action": "Compare search analytics between two date ranges"
    }
  ]

npm_readme:
  # Google Search Console - n8n Custom Node

  This custom node for n8n allows you to connect to the official Google Search Console API and retrieve information about registered sites and their page performance.

  ## Features

  🔹 Fetch a list of sites registered under your Google Search Console account

  🔹 Retrieve performance insights for specific pages within a defined date range (clicks, impressions, CTR, and position)

  ## Operations

  ### 1. Get Sites

  Retrieves the list of sites registered in your Google Search Console account.

  ### 2. Get Page Insights

  Analyzes page performance based on the following parameters:

  * **Site URL**: Exact URL or domain property
  * **Start/End Date**: Define the time period
  * **Search Type**: Web / Image / Video / News
  * **Row Limit**: Number of rows to return
  * **Dimensions**: Choose from Page, Query, Country, or Device

  ## Requirements

  You must configure the following credentials to use this node:

  * **GoogleSearchConsoleOAuth2Api**

  Make sure to set up the credential using OAuth2 with the appropriate scopes for Google Search Console access.

  ## Notes

  * The `Site URL` must match the format of the property in your GSC account:

    * For domain property: `sc-domain:example.com`
    * For URL-prefix property: `https://www.example.com/`

  * An incorrect format or unregistered site will result in an "Invalid URL" error.

  ## Node Icon

  This node uses a simplified version of the official Google Search Console icon.

  ## Author

  Developed by [mrazari](https://mrazari.com), member of the [n8nir.ir](https://n8nir.ir) community — specializing in custom n8n nodes with TypeScript and official API integrations.

  ---

  Feel free to reach out for improvements, suggestions, or new feature requests.

ai_documentation_summary:
  {"purpose":"The Google Search Console node connects to the Google Search Console API to retrieve site registrations and page performance data, such as clicks, impressions, CTR, and position over defined date ranges.","capabilities":["Fetch a list of sites registered in the Google Search Console account","Retrieve performance insights for specific pages with customizable date ranges","Filter insights by search type (Web, Image, Video, News)","Specify dimensions such as Page, Query, Country, or Device","Limit the number of returned rows"],"authentication":"OAuth2 token required via 'GoogleSearchConsoleOAuth2Api' credential with appropriate scopes","commonUseCases":["Monitor website performance metrics over time","Analyze click-through rates and search position for specific pages","Identify high-performing or underperforming URLs","Track traffic trends by device or region"],"limitations":["Site URL must match exact format: 'sc-domain:example.com' for domain properties or 'https://www.example.com/' for URL-prefix properties","Invalid URL format or unregistered sites will result in 'Invalid URL' error","No support for real-time data or advanced filtering beyond defined parameters"],"relatedNodes":["Google Analytics","Google Ads","Webhooks","HTTP Request"]}


node_type: n8n-nodes-mfr.mfr
package_name: n8n-nodes-mfr
display_name: mfr - Field Service Management
description: Field service management app for scheduling technicians.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: apps_makeitfuture
author_github_url: https://github.com/anemesMakeitfuture/mfr-field-service-management.git
npm_package_name: n8n-nodes-mfr
npm_version: 0.1.13
community_fetched_at: 2026-01-07T20:08:15.992Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "company",
      "options": [
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Appointment",
          "value": "appointment"
        },
        {
          "name": "Item Type",
          "value": "itemType"
        },
        {
          "name": "Service Object",
          "value": "serviceObject"
        },
        {
          "name": "Service Request",
          "value": "serviceRequest"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a company",
          "description": "Get a company"
        },
        {
          "name": "Get Many",
          "value": "listCompanies",
          "action": "List companies",
          "description": "List Companies"
        },
        {
          "name": "Create One",
          "value": "createCompany",
          "action": "Create a company",
          "description": "Create a Company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listContacts",
      "options": [
        {
          "name": "Get Many",
          "value": "listContacts",
          "action": "List contacts",
          "description": "List Contacts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createAppointment",
      "options": [
        {
          "name": "Create One",
          "value": "createAppointment",
          "action": "Create an appointment",
          "description": "Create an Appointment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createItemType",
      "options": [
        {
          "name": "Create One",
          "value": "createItemType",
          "action": "Create an item type",
          "description": "Create an Item Type"
        },
        {
          "name": "Get One",
          "value": "getItemType",
          "action": "Get an item type",
          "description": "Get an Item Type"
        },
        {
          "name": "Get Many",
          "value": "listItemTypes",
          "action": "List item types",
          "description": "List Item Types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "itemType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createServiceObject",
      "options": [
        {
          "name": "Create One",
          "value": "createServiceObject",
          "action": "Create a service object",
          "description": "Create a Service Object"
        },
        {
          "name": "Get One Service Object",
          "value": "getServiceObject",
          "action": "Get a service object by id",
          "description": "Get a Service Object by ID"
        },
        {
          "name": "Get Many Service Objects",
          "value": "listServiceObjects",
          "action": "Get all service objects",
          "description": "Get all Service Objects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "serviceObject"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createServiceRequest",
      "options": [
        {
          "name": "Create One",
          "value": "createServiceRequest",
          "action": "Create a service request",
          "description": "Create a Service Request"
        },
        {
          "name": "Get One",
          "value": "getServiceRequest",
          "action": "Get a service request by id",
          "description": "Get a Service Request by ID"
        },
        {
          "name": "Delete One",
          "value": "deleteServiceRequest",
          "action": "Delete a service request",
          "description": "Delete a Service Request"
        },
        {
          "name": "Add Tags to Service Request",
          "value": "addTagsToServiceRequest",
          "action": "Add a tag to a service request",
          "description": "Add a tag to a service request"
        },
        {
          "name": "Remove Tag From Service Request",
          "value": "removeTagFromServiceRequest",
          "action": "Remove a tag from service request",
          "description": "Remove a tag from service request"
        },
        {
          "name": "Get Many Service Requests",
          "value": "listServiceRequests",
          "action": "Get a list of all service requests",
          "description": "Get a list of all service requests, with Service Objects and Products, Steps, Reports, Appointments and Items expanded"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "serviceRequest"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadDocument",
      "options": [
        {
          "name": "Upload One",
          "value": "uploadDocument",
          "action": "Upload document",
          "description": "Upload Document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "Get Many Users",
          "value": "listUsers",
          "action": "Get all users",
          "description": "Get all Users"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateReportFromReportDefinition",
      "options": [
        {
          "name": "Generate Report",
          "value": "generateReportFromReportDefinition",
          "action": "Generate report from report definition",
          "description": "Generate Report from Report Definition"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a company",
      "description": "Get a company"
    },
    {
      "name": "Get Many",
      "value": "listCompanies",
      "action": "List companies",
      "description": "List Companies"
    },
    {
      "name": "Create One",
      "value": "createCompany",
      "action": "Create a company",
      "description": "Create a Company"
    },
    {
      "name": "Get Many",
      "value": "listContacts",
      "action": "List contacts",
      "description": "List Contacts"
    },
    {
      "name": "Create One",
      "value": "createAppointment",
      "action": "Create an appointment",
      "description": "Create an Appointment"
    },
    {
      "name": "Create One",
      "value": "createItemType",
      "action": "Create an item type",
      "description": "Create an Item Type"
    },
    {
      "name": "Get One",
      "value": "getItemType",
      "action": "Get an item type",
      "description": "Get an Item Type"
    },
    {
      "name": "Get Many",
      "value": "listItemTypes",
      "action": "List item types",
      "description": "List Item Types"
    },
    {
      "name": "Create One",
      "value": "createServiceObject",
      "action": "Create a service object",
      "description": "Create a Service Object"
    },
    {
      "name": "Get One Service Object",
      "value": "getServiceObject",
      "action": "Get a service object by id",
      "description": "Get a Service Object by ID"
    },
    {
      "name": "Get Many Service Objects",
      "value": "listServiceObjects",
      "action": "Get all service objects",
      "description": "Get all Service Objects"
    },
    {
      "name": "Create One",
      "value": "createServiceRequest",
      "action": "Create a service request",
      "description": "Create a Service Request"
    },
    {
      "name": "Get One",
      "value": "getServiceRequest",
      "action": "Get a service request by id",
      "description": "Get a Service Request by ID"
    },
    {
      "name": "Delete One",
      "value": "deleteServiceRequest",
      "action": "Delete a service request",
      "description": "Delete a Service Request"
    },
    {
      "name": "Add Tags to Service Request",
      "value": "addTagsToServiceRequest",
      "action": "Add a tag to a service request",
      "description": "Add a tag to a service request"
    },
    {
      "name": "Remove Tag From Service Request",
      "value": "removeTagFromServiceRequest",
      "action": "Remove a tag from service request",
      "description": "Remove a tag from service request"
    },
    {
      "name": "Get Many Service Requests",
      "value": "listServiceRequests",
      "action": "Get a list of all service requests",
      "description": "Get a list of all service requests, with Service Objects and Products, Steps, Reports, Appointments and Items expanded"
    },
    {
      "name": "Upload One",
      "value": "uploadDocument",
      "action": "Upload document",
      "description": "Upload Document"
    },
    {
      "name": "Get Many Users",
      "value": "listUsers",
      "action": "Get all users",
      "description": "Get all Users"
    },
    {
      "name": "Generate Report",
      "value": "generateReportFromReportDefinition",
      "action": "Generate report from report definition",
      "description": "Generate Report from Report Definition"
    }
  ]

npm_readme:
  # n8n-nodes-mfr

  This is an n8n community node. It lets you use mfr – Field Service Management in your n8n workflows.

  mfr – Field Service Management is a cloud platform for creating, scheduling and tracking service requests, assets, appointments, technicians, reports and related documents.


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

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

  ## Installation

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

  ## Operations


  - Get a Company
  - Create a Company
  - List Companies
  - Create a Service Request
  - Get a Service Request
  - List Service Requests
  - Delete a Service Request
  - Generate Report
  - Add Tags to Service Request
  - Remove Tag from Service Request
  - Upload Document
  - Appointment
  - Create an Appointment
  - Create an Item Type
  - Get an Item Type
  - List Item Types
  - Create a Service Object
  - Get a Service Object
  - List Service Objects
  - List Users
  - Watch Events Trigger – subscribe to real‑time change events from mfr

  ## Credentials

  The basic auth method is used for the requests.

  ## Compatibility

  1.98.0

  ## Usage

  Add the mfr Field Service node to your workflow and choose a Resource and Operation from the dropdown. Map the required fields using n8n data‑pinning or expressions.

  Example ideas:

  Create a Service Request when a support ticket is opened

  Trigger: Zendesk, Freshdesk, etc.

  Node: Create a Company (if customer doesn’t exist)

  Node: Create a Service Request

  Node: Slack / Email → notify dispatcher.

  Generate a PDF report nightly for completed service requests

  Trigger: Cron (daily 02:00)

  Node: List Service Requests (filter status = completed, updatedYesterday)

  Loop: Generate Report → store in S3 / email to customer.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [mfr API Documentation and Auth](https://documenter.getpostman.com/view/3999268/TVYCAzpK#intro)

ai_documentation_summary:
  {"purpose":"The mfr node enables integration with the Field Service Management (mfr) platform to manage service requests, appointments, companies, assets, and reports within n8n workflows.","capabilities":["Get a Company","Create a Company","List Companies","Create a Service Request","Get a Service Request","List Service Requests","Delete a Service Request","Generate Report","Add Tags to Service Request","Remove Tag from Service Request"],"authentication":"Basic authentication is required","commonUseCases":["Create a service request when a support ticket is opened (e.g., from Zendesk or Freshdesk)","Automatically create a company if a customer doesn't exist","Generate PDF reports nightly for completed service requests and store them in S3 or email customers","Track real-time changes using event triggers (e.g., service request updates)"],"limitations":[],"relatedNodes":["Zendesk","Freshdesk","Slack","Email","S3"]}


node_type: n8n-nodes-botnoi-voice.botnoitts
package_name: n8n-nodes-botnoi-voice
display_name: Botnoi Voice
description: Generate speech using Botnoi Voice API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: phoovadet.noobdev
author_github_url: https://github.com/HakusaiTH/n8n-BotnoiVoice.git
npm_package_name: n8n-nodes-botnoi-voice
npm_version: 2.0.6
community_fetched_at: 2026-01-07T20:08:15.992Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "voice",
      "options": [
        {
          "name": "Voice",
          "value": "voice"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate voice",
          "description": "Generate voice from text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate voice",
      "description": "Generate voice from text"
    }
  ]

npm_readme:
  # 🔊 n8n-BotnoiVoice

  Plug-in to connect [Botnoi Voice API](https://voice.botnoi.ai/api-login) to [n8n](https://n8n.io/) — allowing easy use of **Thai Text-to-Speech (TTS)** and **Subtitle Generation (Gensub)** directly inside your n8n workflows.

  ---

  ## 📌 Requirements before starting

  ### 1. Install basic tools

  - [Git](https://git-scm.com/downloads)
  - Node.js version **20+**
  - Recommended via [nvm](https://github.com/nvm-sh/nvm) (Linux, Mac, WSL)
  - For Windows, see [Microsoft Docs](https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows)
  - Install n8n globally:

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

  ---

  ## 🚀 How to use the plugin

  ### ✅ Install from npm (recommended)

  1. Create a custom n8n extensions folder:

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

  2. Install the plugin:

  ```bash
  npm i n8n-nodes-botnoi-voice
  ```

  3. Start n8n:

  ```bash
  n8n start
  ```

  > 💡 Once installed, search in n8n for **Botnoi Voice** or **Botnoi Gensub** nodes.

  ---

  ### 🛠️ Install locally (if cloning repo)

  1. Clone and install dependencies:

  ```bash
  git clone https://github.com/phoovadetnoobdev/n8n-nodes-botnoi-voice
  cd n8n-nodes-botnoi-voice
  npm install
  ```

  2. Build and link the plugin:

  ```bash
  npm run build
  npm link
  ```

  3. Link to your n8n instance:

  ```bash
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom
  npm init -y
  npm link n8n-nodes-botnoi-voice
  ```

  4. Start n8n:

  ```bash
  n8n start
  ```

  ---

  ## 🔐 Get API Key from Botnoi Voice

  1. Visit [https://voice.botnoi.ai/api-login](https://voice.botnoi.ai/api-login)
  2. Login or sign up for a free account
  3. Click **Generate API Key**
  4. Copy the key for use in n8n

  <p align="center">
    <img src="https://github.com/user-attachments/assets/53cae275-c947-49ac-aa5f-49c224914da9" width="640" alt="Generate API Key"/>
  </p>

  ---

  ## ⚙️ Add API Key in n8n

  1. Open **Credentials** tab in n8n
  2. Create a new credential → Select **Botnoi Voice**
  3. Paste your API key and test connection

  <p align="center">
    <img src="https://github.com/user-attachments/assets/7ddb26c4-2241-420f-8212-5096e1e052c5" width="640"/>
  </p>
  <p align="center">
    <img src="https://github.com/user-attachments/assets/2d5a905a-7f46-4447-a5fe-aa682a318621" width="640"/>
  </p>

  > ✅ If the key is correct, it will show “Connection tested successfully”.

  ---

  ## 🗣️ Botnoi Voice (TTS)

  Convert any text into natural-sounding speech in Thai, English, Japanese, Vietnamese, and more.

  ### 🧾 Usage Steps

  #### 1️⃣ Enter text to convert

  <p align="center">
    <img src="https://github.com/user-attachments/assets/a20ee802-7ecb-4005-bc18-7ffe18e2ac92" width="640"/>
  </p>

  * Add a `Botnoi Voice` node
  * Enter text manually or use expression (e.g. `{{ $json.output }}`)

  #### 2️⃣ Choose a speaker

  <p align="center">
    <img src="https://github.com/user-attachments/assets/1628e724-a7c6-4f76-a203-dad037eca3a4" width="640"/>
  </p>

  * Over 300 voices available (Eva, Bo, Max, Alisa, etc.)

  #### 3️⃣ Select language

  <p align="center">
    <img src="https://github.com/user-attachments/assets/8fb5380f-f4b2-48cf-89f6-03d77e8679d4" width="640"/>
  </p>

  * Supports multiple languages — choose `Thai`, `English`, `Japanese`, etc.

  #### 4️⃣ Generate audio

  <p align="center">
    <img src="https://github.com/user-attachments/assets/06ecb4b4-cd85-45a2-b99e-6db17f63f443" width="640"/>
  </p>

  * Click **Execute Step** → Output shows `audio_url` for playback or download.

  ---

  ## 🎧 Botnoi Gensub (Subtitle Generator)

  Generate subtitles (SRT / JSON) automatically from any **audio URL** via [Botnoi Voice API](https://voice.botnoi.ai/api-login).

  Ideal for creating Thai transcripts, podcast captions, or speech analytics.

  ### 🧩 Overview

  * Supports **URL input only**
  * Generates **SRT or JSON** subtitles
  * Adjustable silence and duration segmentation
  * Perfect with free hosting (e.g., [EdgeOne Pages](https://pages.edgeone.ai/drop))

  ---

  ### 🧱 Example: Generate Subtitles from an Audio URL

  #### ✅ Step 1 — Upload audio

  Use [EdgeOne Pages Drop](https://pages.edgeone.ai/drop) to host your file:

  1. Go to [https://pages.edgeone.ai/drop](https://pages.edgeone.ai/drop)
  2. Enter a temporary domain name
  3. Upload your `.mp3` or `.wav`
  4. Copy the URL (e.g.)

     ```
     https://forward-cyan-xo4dfpu9q6.edgeone.app/Recording.mp3
     ```

  <p align="center">
    <img alt="Image" src="https://github.com/user-attachments/assets/02666ee6-50c8-40fc-a1c8-f0d4908559f0" width="640"/>
  </p>

  ---

  #### ✅ Step 2 — Configure Botnoi Gensub Node

  | Field                          | Example                                                     | Description                              |
  | ------------------------------ | ----------------------------------------------------------- | ---------------------------------------- |
  | **Credential to connect with** | Botnoi account                                              | Use your `botnoiApi` credential          |
  | **Audio URL**                  | `https://forward-cyan-xo4dfpu9q6.edgeone.app/Recording.mp3` | Publicly accessible file URL             |
  | **Max Duration (Seconds)**     | `10`                                                        | Max duration per subtitle segment        |
  | **Max Silence (Seconds)**      | `0.3`                                                       | Silence threshold before splitting lines |
  | **Return SRT**                 | `Yes`                                                       | Choose “Yes” to get SRT subtitle text    |
  | **Timeout (Ms)**               | `60000`                                                     | Request timeout (default 60s)            |

  <p align="center">
   	<img alt="Image" src="https://github.com/user-attachments/assets/4c46f6c1-594d-48dc-83df-b23db3abb38c" width="640"/>
  </p>

  ---

  #### ✅ Step 3 — Execute and check result

  ```json
  {
    "message": "Transcribe successfully",
    "data": {
      "text": "1\n00:00:00,390 --> 00:00:02,220\nสวัสดีตอนเช้า\n",
      "current_point": 509,
      "current_monthly_point": 0,
      "used_points": 15
    }
  }
  ```

  **Result (SRT format):**

  ```
  1
  00:00:00,390 --> 00:00:02,220
  สวัสดีตอนเช้า
  ```

  <p align="center">
    <img alt="Image" src="https://github.com/user-attachments/assets/f992c796-8185-482d-80f5-188fd6599706" width="640"/>
  </p>

  ---

  ## ⚙️ Tips

  * Both nodes share the same credential `botnoiApi`
  * Ensure your audio URL is **publicly accessible** (no login needed)
  * Supported file formats: `.mp3`, `.wav`, `.m4a`
  * Recommended audio length ≤ 60 seconds for best transcription quality

  ---

  ## 📚 References

  * [Botnoi Voice API Docs](https://www.botnoigroup.com/botnoivoice/doc/api-user-guide)
  * [EdgeOne Pages Drop](https://pages.edgeone.ai/drop) — free quick hosting
  * [n8n Node Developer Docs](https://docs.n8n.io/integrations/creating-nodes/)

  ---

  ## 🧑‍💻 Maintainer

  Developed by **Phoovadet Noobdev**

  ---

  ## 📝 License

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

ai_documentation_summary:
  {"purpose":"The Botnoi Voice node enables text-to-speech (TTS) and subtitle generation (Gensub) using the Botnoi Voice API, allowing users to convert text into natural-sounding speech in multiple languages (including Thai) and generate SRT or JSON subtitles from audio URLs within n8n workflows.","capabilities":["Generate speech from text in multiple languages (Thai, English, Japanese, Vietnamese, etc.)","Select from over 300 different voice options (e.g., Eva, Bo, Max, Alisa)","Generate subtitles (SRT or JSON) from public audio URLs","Customize subtitle segmentation using max duration and silence thresholds","Support for both manual text input and dynamic expressions (e.g., {{ $json.output }})"],"authentication":"API key required — obtain from https://voice.botnoi.ai/api-login and configure in n8n credentials","commonUseCases":["Creating Thai audio content from text for apps or videos","Generating subtitles for podcasts or recorded audio using public URLs","Automating speech generation in multilingual workflows","Integrating with free hosting services like EdgeOne Pages for audio processing"],"limitations":["Botnoi Gensub only accepts public audio URLs (cannot process private or unhosted files)","No support for local file uploads or direct file input","Subtitle generation has configurable limits (max duration, silence threshold) that may affect accuracy","No built-in support for voice emotion, pitch, or speed adjustments"],"relatedNodes":["Text to Speech (TTS)","Subtitle Generation","Audio Processing","Webhooks"]}


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

updated_at: 2026-01-07 20:08:15
author_name: payfunnels
author_github_url: https://github.com/Payfunnels/
npm_package_name: n8n-nodes-payfunnels
npm_version: 0.2.0
community_fetched_at: 2026-01-07T20:08:15.993Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "payment",
      "options": [
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Subscription",
          "value": "subscription"
        },
        {
          "name": "One Time Setup Fee",
          "value": "oneTimeSetupFees"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List payments",
          "description": "List payments"
        },
        {
          "name": "Refund",
          "value": "refund",
          "action": "Refund payment",
          "description": "Refund a payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List subscriptions",
          "description": "List subscriptions"
        },
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel subscription",
          "description": "Cancel a subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subscription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List one time setup fees",
          "description": "Retrieves a list of one time setup fees based on filters like page and limit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "oneTimeSetupFees"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "List payments",
      "description": "List payments"
    },
    {
      "name": "Refund",
      "value": "refund",
      "action": "Refund payment",
      "description": "Refund a payment"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List subscriptions",
      "description": "List subscriptions"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel subscription",
      "description": "Cancel a subscription"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List one time setup fees",
      "description": "Retrieves a list of one time setup fees based on filters like page and limit"
    }
  ]

npm_readme:
  # n8n-nodes-payfunnels

  This is the official n8n community node for [PayFunnels](https://www.payfunnels.com/).

  PayFunnels—an all-in-one online payment solution and platform. Collect payments, manage subscriptions, and engage customers seamlessly.

  By using this node, you will be able to integrate Payfunnels events 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)
  [Resources](#resources)  

  ## Installation

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

  ## Operations

  ### Payment Link
  - Payment Link Created
  - Payment Link Updated
  - Payment Link Deleted

  ### Payment
  - Payment Success
  - Payment Failed
  - First Recurring Payment
  - Refund Payment
  - List Payments

  ### Subscription
  - List Subscriptions
  - Cancel Subscription


  ## Credentials

  You can obtain the credentials from your Payfunnels dashboard. Go to `Billings -> Integrations -> n8n`.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Payfunnels API documentation](https://api.payfunnels.com/api/docs)

ai_documentation_summary:
  {"purpose":"The Payfunnels node enables integration with the PayFunnels platform to capture and automate actions related to payments, payment links, and subscriptions within n8n workflows.","capabilities":["Create a payment link","Update a payment link","Delete a payment link","Track payment success","Track payment failure","Detect first recurring payment","Process a refund","List all payments","List all subscriptions","Cancel a subscription"],"authentication":"API key required (obtained from PayFunnels dashboard under Billings -> Integrations -> n8n)","commonUseCases":["Automate payment confirmation workflows","Trigger notifications on payment success or failure","Manage subscription lifecycle (e.g., cancelation or renewal)","Monitor recurring payments for billing automation"],"limitations":[],"relatedNodes":["Payment processing nodes","Subscription management nodes","Event-driven automation nodes"]}


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-01-07 20:08:15
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-01-07T20:08:15.994Z
ai_summary_generated_at: 2026-01-08 10:45:32
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"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search companies",
      "description": "Search companies"
    },
    {
      "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"
    }
  ]

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":"The Kylas node enables integration with the Kylas CRM platform, allowing users to manage leads, companies, and user data through operations like creating, retrieving, updating, and filtering records with support for custom fields and advanced filtering.","capabilities":["Retrieve user information by ID","Retrieve all companies with advanced filtering (field-based and JSON rule-based) and pagination","Create, retrieve, update, and search leads","Support for dynamic custom fields with type validation (TEXT_FIELD, NUMBER, DATE, EMAIL, PHONE, URL, etc.)","Real-time loading and validation of custom fields from Kylas instance","Error handling and field validation before submission"],"authentication":"API key required; the node uses API key authentication via the `api-key` header, which must be generated in the Kylas CRM account settings and entered in the n8n credentials configuration","commonUseCases":["Creating new leads with custom fields","Searching and filtering leads by criteria such as email, status, or source","Retrieving and filtering company data using complex JSON rules","Updating lead information in real time","Managing contact and pipeline data within sales workflows"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-database"]}


node_type: n8n-nodes-atriomail-email.atriomail
package_name: n8n-nodes-atriomail-email
display_name: Atriomail
description: Manage email domains, mailboxes, forwarders, and catch-all configurations with Atriomail
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: atriomail
author_github_url: https://github.com/Atriomail/n8n-atriomail.git
npm_package_name: n8n-nodes-atriomail-email
npm_version: 0.2.1
community_fetched_at: 2026-01-07T20:08:15.994Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "domain",
      "options": [
        {
          "name": "Catch-All",
          "value": "catchAll"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Forwarder",
          "value": "forwarder"
        },
        {
          "name": "Mailbox",
          "value": "mailbox"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a domain",
          "description": "Create a new domain"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a domain",
          "description": "Delete a domain"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a domain",
          "description": "Get a domain by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many domains",
          "description": "Get many domains"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a domain",
          "description": "Update a domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a mailbox",
          "description": "Create a new mailbox"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a mailbox",
          "description": "Delete a mailbox"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a mailbox",
          "description": "Get a mailbox by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many mailboxes",
          "description": "Get many mailboxes"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a mailbox",
          "description": "Update a mailbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mailbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a forwarder",
          "description": "Create a new forwarder"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a forwarder",
          "description": "Delete a forwarder"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a forwarder",
          "description": "Get a forwarder by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many forwarders",
          "description": "Get many forwarders"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a forwarder",
          "description": "Update a forwarder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "forwarder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a catch all",
          "description": "Create a new catch-all configuration"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a catch all",
          "description": "Delete a catch-all configuration"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a catch all",
          "description": "Get a catch-all configuration by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many catch alls",
          "description": "Get many catch-all configurations"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a catch all",
          "description": "Update a catch-all configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "catchAll"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a domain",
      "description": "Create a new domain"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a domain",
      "description": "Delete a domain"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a domain",
      "description": "Get a domain by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many domains",
      "description": "Get many domains"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a domain",
      "description": "Update a domain"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a mailbox",
      "description": "Create a new mailbox"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a mailbox",
      "description": "Delete a mailbox"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a mailbox",
      "description": "Get a mailbox by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many mailboxes",
      "description": "Get many mailboxes"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a mailbox",
      "description": "Update a mailbox"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a forwarder",
      "description": "Create a new forwarder"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a forwarder",
      "description": "Delete a forwarder"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a forwarder",
      "description": "Get a forwarder by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many forwarders",
      "description": "Get many forwarders"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a forwarder",
      "description": "Update a forwarder"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a catch all",
      "description": "Create a new catch-all configuration"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a catch all",
      "description": "Delete a catch-all configuration"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a catch all",
      "description": "Get a catch-all configuration by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many catch alls",
      "description": "Get many catch-all configurations"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a catch all",
      "description": "Update a catch-all configuration"
    }
  ]

npm_readme:
  # n8n-nodes-atriomail

  This is an n8n community node for [Atriomail](https://system.atriomail.com) - an Email System Management API for managing domains, mailboxes, forwarders, and catch-all configurations.

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

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

  ## Installation

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

  ## Operations

  ### Domain
  - **Create** - Create a new email domain
  - **Delete** - Delete an existing domain
  - **Get** - Retrieve a specific domain by ID
  - **Get Many** - List all domains
  - **Update** - Update domain settings (active status, description)

  ### Mailbox
  - **Create** - Create a new mailbox with email address and password
  - **Delete** - Delete an existing mailbox
  - **Get** - Retrieve a specific mailbox by ID
  - **Get Many** - List all mailboxes
  - **Update** - Update mailbox settings (name, password, quota, active status)

  ### Forwarder
  - **Create** - Create a new email forwarder
  - **Delete** - Delete an existing forwarder
  - **Get** - Retrieve a specific forwarder by ID
  - **Get Many** - List all forwarders
  - **Update** - Update forwarder settings (forward-to addresses, active status)

  ### Catch-All
  - **Create** - Create a new catch-all configuration for a domain
  - **Delete** - Delete an existing catch-all configuration
  - **Get** - Retrieve a specific catch-all by ID
  - **Get Many** - List all catch-all configurations
  - **Update** - Update catch-all settings (forward-to addresses, active status)

  ## Credentials

  To use this node, you need to configure the Atriomail API credentials:

  1. **API URL**: Your Atriomail instance URL (default: `https://system.atriomail.com`)
  2. **API Token**: Your API token generated from the Atriomail dashboard

  ### Getting your API Token

  1. Log in to your Atriomail dashboard
  2. Navigate to your account settings
  3. Generate a new API token
  4. Copy the token and use it in the n8n credentials

  ## Compatibility

  - Tested with n8n version 1.0.0 and above
  - Requires Node.js 18.10 or higher

  ## Usage

  ### Create a Domain

  1. Add the Atriomail node to your workflow
  2. Select **Domain** as the resource
  3. Select **Create** as the operation
  4. Enter the domain name (e.g., `example.com`)
  5. Optionally set the domain as active and add a description

  ### Create a Mailbox

  1. Select **Mailbox** as the resource
  2. Select **Create** as the operation
  3. Choose the domain from the dropdown (domains are loaded dynamically)
  4. Enter the local part (e.g., `john` for `john@example.com`)
  5. Set a password for the mailbox
  6. Optionally set display name and quota

  ### Create a Forwarder

  1. Select **Forwarder** as the resource
  2. Select **Create** as the operation
  3. Choose the domain from the dropdown
  4. Enter the local part (e.g., `sales` for `sales@example.com`)
  5. Enter comma-separated email addresses to forward to

  ### Create a Catch-All

  1. Select **Catch-All** as the resource
  2. Select **Create** as the operation
  3. Choose the domain from the dropdown
  4. Enter comma-separated email addresses to receive catch-all emails

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Atriomail API Documentation](https://system.atriomail.com/api/documentation)

  ## License

  [MIT](LICENSE)

  ## More Information

  [Atriomail](https://atriomail.com)

ai_documentation_summary:
  {"purpose":"The Atriomail node allows users to manage email domains, mailboxes, forwarders, and catch-all configurations through the Atriomail API, enabling automation of email system administration tasks in n8n workflows.","capabilities":["Create, delete, retrieve, and update email domains","Create, delete, retrieve, and update mailboxes with email addresses, passwords, and quotas","Create, delete, retrieve, and update email forwarders","Create, delete, retrieve, and update catch-all configurations for domains"],"authentication":"API token required; obtained from the Atriomail dashboard under account settings","commonUseCases":["Automating the setup of new email domains for businesses","Creating and managing user mailboxes with custom passwords and quotas","Configuring email forwarding rules for departments or teams","Setting up catch-all email rules to capture unhandled emails"],"limitations":[],"relatedNodes":["n8n nodes for email delivery","n8n nodes for user management","n8n nodes for API integration"]}


node_type: @2chat/n8n-nodes-twochat.twoChat
package_name: @2chat/n8n-nodes-twochat
display_name: 2Chat
description: Sends data to 2Chat
category: Community
development_style: declarative
version: 0.2.1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: 2chat_integrations
author_github_url: https://github.com/2ChatCo/2chat-n8n.git
npm_package_name: @2chat/n8n-nodes-twochat
npm_version: 0.2.1
community_fetched_at: 2026-01-07T20:08:15.995Z
ai_summary_generated_at: 2026-01-08 10:45:32
npm_readme:
  # n8n-nodes-twochat

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

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

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

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

  ## Installation

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

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

  ## Operations

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

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

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

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

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

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

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

  ## Credentials

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

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

  ## Compatibility

  - Requires n8n version 1.0.0 or later

  ## Resources

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

ai_documentation_summary:
  {"purpose":"The 2Chat node enables integration with the 2Chat WhatsApp API to send messages, manage phone numbers, and listen for WhatsApp and phone call events in n8n workflows.","capabilities":["Send text messages to individual contacts","Send messages with media attachments (images, documents)","Send messages with location pins","Send messages to WhatsApp groups","Check if a phone number is registered on WhatsApp","Retrieve phone number details (region, carrier, timezone, business profile)","Listen for new messages (sent or received)","Listen for message edits and reactions","Listen for WhatsApp call events (made, received, completed)","Listen for group events (message received, participant join/leave/removal, reactions)"],"authentication":"API key required. Users must create a 2Chat account, connect a WhatsApp channel, and obtain an API key from the developers section to authenticate.","commonUseCases":["Automating customer support via WhatsApp messages","Monitoring incoming customer messages in real-time","Triggering workflows when a user joins or leaves a WhatsApp group","Sending promotional content or updates to customers","Verifying phone numbers before outreach"],"limitations":[],"relatedNodes":["WhatsApp integration nodes","Message trigger nodes","Contact management nodes","Event-driven workflow nodes"]}


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

updated_at: 2026-01-07 20:08:15
author_name: deliverect-stefaang
author_github_url: https://github.com/Deliverect/
npm_package_name: n8n-nodes-deliverect
npm_version: 0.1.5
community_fetched_at: 2026-01-07T20:08:15.995Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "storeAPI",
      "options": [
        {
          "name": "Channel API",
          "value": "channelAPI"
        },
        {
          "name": "KDS API",
          "value": "kdsAPI"
        },
        {
          "name": "POS API",
          "value": "posAPI"
        },
        {
          "name": "REST API",
          "value": "restAPI"
        },
        {
          "name": "Store API",
          "value": "storeAPI"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStores",
      "options": [
        {
          "name": "Get Out-Of-Stock Products",
          "value": "getOutOfStock",
          "action": "Get out of stock products",
          "routing": {
            "request": {
              "url": "=/channelDisabledProducts?where={\"location\":\"{{$parameter.location}}\"}",
              "method": "GET"
            }
          },
          "description": "Get out-of-stock products for a location"
        },
        {
          "name": "Get Products for Account",
          "value": "getProductsForAccount",
          "action": "Get products for account",
          "routing": {
            "request": {
              "qs": {
                "where": "={{ JSON.stringify($parameter.locationId ? { account: $parameter.account, location: $parameter.locationId } : { account: $parameter.account }) }}"
              },
              "url": "=/products",
              "method": "GET"
            },
            "operations": {}
          },
          "description": "Retrieve products for an entire account or a single location"
        },
        {
          "name": "Get Store Holidays",
          "value": "getStoreHolidays",
          "action": "Get store holidays",
          "routing": {
            "request": {
              "url": "=/location/{{$parameter.location}}/holidays",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Store Opening Hours",
          "value": "getStoreOpeningHours",
          "action": "Get store opening hours",
          "routing": {
            "request": {
              "url": "=/account/{{$parameter.account}}/openingHours",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Stores",
          "value": "getStores",
          "action": "Get stores",
          "routing": {
            "request": {
              "url": "=/locations?where={\"account\":\"{{$parameter.account}}\"}",
              "method": "GET"
            }
          },
          "description": "Get stores for an account"
        },
        {
          "name": "Set Out-Of-Stock Products",
          "value": "setOutOfStock",
          "action": "Set out of stock products",
          "routing": {
            "request": {
              "url": "/products/snoozeByPlus",
              "body": {
                "plus": "={{ (() => {\n\tconst payload = $parameter.products;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Product PLUs payload: ${message}`);\n\t\t}\n\t}\n\tif (!Array.isArray(result)) {\n\treturn (() => {\n\t\tthrow new Error('Product PLUs payload must be an array');\n\t})();\n}\nreturn result;\n})() }}",
                "account": "={{$parameter.account}}",
                "location": "={{$parameter.location}}",
                "snoozeEnd": "={{$parameter.snoozeEnd}}",
                "snoozeStart": "={{$parameter.snoozeStart}}"
              },
              "method": "POST"
            }
          },
          "description": "Set out-of-stock products for a location"
        },
        {
          "name": "Set Store Holidays",
          "value": "setStoreHolidays",
          "action": "Set store holidays",
          "routing": {
            "request": {
              "url": "=/locations/holidays",
              "body": "={{ (() => {\n\tconst payload = $parameter.holidays;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Holidays payload: ${message}`);\n\t\t}\n\t}\n\treturn result;\n})() }}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Set Store Opening Hours",
          "value": "setStoreOpeningHours",
          "action": "Set store opening hours",
          "routing": {
            "request": {
              "url": "=/locations/openingHours",
              "body": "={{ (() => {\n\tconst payload = $parameter.openingHours;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Opening Hours payload: ${message}`);\n\t\t}\n\t}\n\treturn result;\n})() }}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Set Store Status",
          "value": "setStoreStatus",
          "action": "Set store status",
          "routing": {
            "request": {
              "url": "=/updateStoreStatus/{{$parameter.location}}",
              "body": {
                "isActive": "={{$parameter.isActive}}",
                "prepTime": "={{$parameter.prepTime !== null && $parameter.prepTime !== undefined ? $parameter.prepTime : undefined}}",
                "disableAt": "={{$parameter.disableAt !== \"\" && $parameter.disableAt !== undefined ? $parameter.disableAt : undefined}}",
                "channelLinks": "={{ (() => {\n\tconst payload = $parameter.channelLinks;\n\tif (payload === undefined || payload === null || (typeof payload === 'string' && payload.trim() === '')) {\n\t\treturn undefined;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Channel Links payload: ${message}`);\n\t\t}\n\t}\n\tif (!Array.isArray(result)) {\n\treturn undefined;\n}\nreturn result.length ? result : undefined;\n})() }}"
              },
              "method": "POST"
            }
          },
          "description": "Set store status for a location"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "storeAPI"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createOrder",
      "options": [
        {
          "name": "Create Order",
          "value": "createOrder",
          "action": "Create order",
          "routing": {
            "request": {
              "url": "=/deliverect/order/{{$parameter.channelLink}}",
              "method": "POST"
            }
          },
          "description": "Create an order to a store"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channelAPI"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "productSync",
      "options": [
        {
          "name": "Request Product Sync",
          "value": "productSync",
          "action": "Request product sync",
          "routing": {
            "request": {
              "url": "=/v2/locations/{{$parameter.location}}/syncProducts",
              "method": "POST"
            }
          },
          "description": "Trigger Deliverect to sync products for a POS on a specific location"
        },
        {
          "name": "Get All Allergens",
          "value": "getAllAllergens",
          "action": "Get all allergens",
          "routing": {
            "request": {
              "url": "/allAllergens",
              "method": "GET"
            }
          },
          "description": "Retrieve all allergens from POSAPI"
        },
        {
          "name": "Get Product Categories",
          "value": "getProductCategories",
          "action": "Get product categories",
          "routing": {
            "request": {
              "qs": {
                "where": "={{ JSON.stringify({ account: $parameter.account }) }}"
              },
              "url": "/productCategories",
              "method": "GET"
            }
          },
          "description": "Retrieve product categories for a specific account from POSAPI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "posAPI"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Out-Of-Stock Products",
      "value": "getOutOfStock",
      "action": "Get out of stock products",
      "routing": {
        "request": {
          "url": "=/channelDisabledProducts?where={\"location\":\"{{$parameter.location}}\"}",
          "method": "GET"
        }
      },
      "description": "Get out-of-stock products for a location"
    },
    {
      "name": "Get Products for Account",
      "value": "getProductsForAccount",
      "action": "Get products for account",
      "routing": {
        "request": {
          "qs": {
            "where": "={{ JSON.stringify($parameter.locationId ? { account: $parameter.account, location: $parameter.locationId } : { account: $parameter.account }) }}"
          },
          "url": "=/products",
          "method": "GET"
        },
        "operations": {}
      },
      "description": "Retrieve products for an entire account or a single location"
    },
    {
      "name": "Get Store Holidays",
      "value": "getStoreHolidays",
      "action": "Get store holidays",
      "routing": {
        "request": {
          "url": "=/location/{{$parameter.location}}/holidays",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Store Opening Hours",
      "value": "getStoreOpeningHours",
      "action": "Get store opening hours",
      "routing": {
        "request": {
          "url": "=/account/{{$parameter.account}}/openingHours",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Stores",
      "value": "getStores",
      "action": "Get stores",
      "routing": {
        "request": {
          "url": "=/locations?where={\"account\":\"{{$parameter.account}}\"}",
          "method": "GET"
        }
      },
      "description": "Get stores for an account"
    },
    {
      "name": "Set Out-Of-Stock Products",
      "value": "setOutOfStock",
      "action": "Set out of stock products",
      "routing": {
        "request": {
          "url": "/products/snoozeByPlus",
          "body": {
            "plus": "={{ (() => {\n\tconst payload = $parameter.products;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Product PLUs payload: ${message}`);\n\t\t}\n\t}\n\tif (!Array.isArray(result)) {\n\treturn (() => {\n\t\tthrow new Error('Product PLUs payload must be an array');\n\t})();\n}\nreturn result;\n})() }}",
            "account": "={{$parameter.account}}",
            "location": "={{$parameter.location}}",
            "snoozeEnd": "={{$parameter.snoozeEnd}}",
            "snoozeStart": "={{$parameter.snoozeStart}}"
          },
          "method": "POST"
        }
      },
      "description": "Set out-of-stock products for a location"
    },
    {
      "name": "Set Store Holidays",
      "value": "setStoreHolidays",
      "action": "Set store holidays",
      "routing": {
        "request": {
          "url": "=/locations/holidays",
          "body": "={{ (() => {\n\tconst payload = $parameter.holidays;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Holidays payload: ${message}`);\n\t\t}\n\t}\n\treturn result;\n})() }}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Set Store Opening Hours",
      "value": "setStoreOpeningHours",
      "action": "Set store opening hours",
      "routing": {
        "request": {
          "url": "=/locations/openingHours",
          "body": "={{ (() => {\n\tconst payload = $parameter.openingHours;\n\tif (payload === undefined || payload === null) {\n\t\treturn payload;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Opening Hours payload: ${message}`);\n\t\t}\n\t}\n\treturn result;\n})() }}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Set Store Status",
      "value": "setStoreStatus",
      "action": "Set store status",
      "routing": {
        "request": {
          "url": "=/updateStoreStatus/{{$parameter.location}}",
          "body": {
            "isActive": "={{$parameter.isActive}}",
            "prepTime": "={{$parameter.prepTime !== null && $parameter.prepTime !== undefined ? $parameter.prepTime : undefined}}",
            "disableAt": "={{$parameter.disableAt !== \"\" && $parameter.disableAt !== undefined ? $parameter.disableAt : undefined}}",
            "channelLinks": "={{ (() => {\n\tconst payload = $parameter.channelLinks;\n\tif (payload === undefined || payload === null || (typeof payload === 'string' && payload.trim() === '')) {\n\t\treturn undefined;\n\t}\n\tlet result = payload;\n\tif (typeof result === 'string') {\n\t\ttry {\n\t\t\tresult = JSON.parse(result);\n\t\t} catch (error) {\n\t\t\tconst message = error && error.message ? error.message : error;\n\t\t\tthrow new Error(`Invalid JSON provided for Channel Links payload: ${message}`);\n\t\t}\n\t}\n\tif (!Array.isArray(result)) {\n\treturn undefined;\n}\nreturn result.length ? result : undefined;\n})() }}"
          },
          "method": "POST"
        }
      },
      "description": "Set store status for a location"
    },
    {
      "name": "Create Order",
      "value": "createOrder",
      "action": "Create order",
      "routing": {
        "request": {
          "url": "=/deliverect/order/{{$parameter.channelLink}}",
          "method": "POST"
        }
      },
      "description": "Create an order to a store"
    },
    {
      "name": "Request Product Sync",
      "value": "productSync",
      "action": "Request product sync",
      "routing": {
        "request": {
          "url": "=/v2/locations/{{$parameter.location}}/syncProducts",
          "method": "POST"
        }
      },
      "description": "Trigger Deliverect to sync products for a POS on a specific location"
    },
    {
      "name": "Get All Allergens",
      "value": "getAllAllergens",
      "action": "Get all allergens",
      "routing": {
        "request": {
          "url": "/allAllergens",
          "method": "GET"
        }
      },
      "description": "Retrieve all allergens from POSAPI"
    },
    {
      "name": "Get Product Categories",
      "value": "getProductCategories",
      "action": "Get product categories",
      "routing": {
        "request": {
          "qs": {
            "where": "={{ JSON.stringify({ account: $parameter.account }) }}"
          },
          "url": "/productCategories",
          "method": "GET"
        }
      },
      "description": "Retrieve product categories for a specific account from POSAPI"
    }
  ]

npm_readme:
  # n8n-nodes-deliverect

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


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

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

  ## Installation

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

  ## Operations

  Store API: 

  * get stores
  * get snoozed products
  * set snoozed products

  POSAPI

  * sync products

  Channel API

  * publish menu

  ## Credentials

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

  Bearer token support is WIP.

  ## Compatibility

  Tested with N8N 1.97.1

  ## Usage

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

  ## Resources

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

  ## Version history

  v1.0: Initial version

ai_documentation_summary:
  {"purpose":"The Deliverect node allows users to integrate with the Deliverect API to manage stores, snooze products, sync products via POS API, and publish menus through the Channel API within n8n workflows.","capabilities":["Get stores","Get snoozed products","Set snoozed products","Sync products via POS API","Publish menu via Channel API"],"authentication":"API key (client credentials keypair) required; Bearer token support is currently in development (WIP)","commonUseCases":["Syncing product inventory between POS and Deliverect","Managing product snoozing for specific items","Publishing updated menus to delivery channels","Retrieving store information for workflow automation"],"limitations":["Bearer token authentication is not yet fully supported (WIP)","Limited to specific Deliverect API endpoints as defined in the README"],"relatedNodes":["POS Integration Nodes","Menu Management Nodes","Inventory Sync Nodes"]}


node_type: @itechnotion/n8n-nodes-inboxplus.inboxPlus
package_name: @itechnotion/n8n-nodes-inboxplus
display_name: InboxPlus
description: Interact with InboxPlus API - send emails and manage sequences
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:15
author_name: itechnotion
author_github_url: https://github.com/itechnotion/n8n-nodes-inboxplus.git
npm_package_name: @itechnotion/n8n-nodes-inboxplus
npm_version: 1.1.1
community_fetched_at: 2026-01-07T20:08:15.996Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "hidden",
      "default": "email",
      "options": [
        {
          "name": "Email",
          "value": "email"
        }
      ],
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "prepareEmail",
      "options": [
        {
          "name": "Prepare Email",
          "value": "prepareEmail",
          "action": "Prepare an email",
          "description": "Load template and generate tracking for Gmail"
        },
        {
          "name": "Start Sequence",
          "value": "startSequence",
          "action": "Start a sequence",
          "description": "Record sent email and start automated follow-up sequence"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Prepare Email",
      "value": "prepareEmail",
      "action": "Prepare an email",
      "description": "Load template and generate tracking for Gmail"
    },
    {
      "name": "Start Sequence",
      "value": "startSequence",
      "action": "Start a sequence",
      "description": "Record sent email and start automated follow-up sequence"
    }
  ]

npm_readme:
  # n8n-nodes-inboxplus

  InboxPlus integration for n8n - Send emails with templates and automate follow-up sequences.

  ## Features

  - ✅ Load email templates from InboxPlus
  - ✅ Generate tracking pixels for email analytics
  - ✅ Send emails via Gmail with InboxPlus templates
  - ✅ Start automated follow-up sequences
  - ✅ Track email opens and replies
  - ✅ Automatic follow-up management

  ## Installation

  ```bash
  cd n8n-nodes-inboxplus
  pnpm install
  pnpm build
  pnpm link --global
  ```

  Then restart your n8n instance or link in your n8n custom nodes directory.

  ## Credentials

  You need an InboxPlus API key (JWT token) from your InboxPlus account.

  1. Go to InboxPlus Profile → Manage API → Generate API
  2. Copy your API key
  3. In n8n: Credentials → Add → InboxPlus API
  4. Paste your API key

  ## Operations

  ### 1. Prepare Email

  Loads an InboxPlus template and generates tracking.

  **Parameters:**
  - Recipient Email
  - Template (dropdown - loads from your InboxPlus account)

  **Output:**
  ```json
  {
    "recipientEmail": "contact@example.com",
    "subject": "Email Subject",
    "body": "<div>Email content</div>",
    "gmailBodyHtml": "<div>Email content</div><br><img tracking />",
    "trackingId": "uuid"
  }
  ```

  ### 2. Start Sequence

  Records the sent email in InboxPlus and starts automated follow-up sequence.

  **Parameters:**
  - Sender Email
  - Recipient Email
  - Subject (from Prepare Email)
  - Thread ID (from Gmail)
  - Message ID (from Gmail)
  - Tracking ID (from Prepare Email)
  - Sequence (dropdown - loads from your InboxPlus account)

  **Output:**
  ```json
  {
    "success": true,
    "sequenceId": "uuid",
    "recipientEmail": "contact@example.com",
    "apiResponse": { "code": 200, "success": 1 }
  }
  ```

  ## Workflow Example

  ```
  [Trigger]
      ↓
  [InboxPlus: Prepare Email]
    - Recipient: contact@example.com
    - Template: "Welcome Email"
      ↓
  [Gmail: Send Message]
    - To: {{ $json.recipientEmail }}
    - Subject: {{ $json.subject }}
    - Body HTML: {{ $json.gmailBodyHtml }}
      ↓
  [InboxPlus: Start Sequence]
    - Sender: you@example.com
    - Recipient: {{ $("InboxPlus").item.json.recipientEmail }}
    - Subject: {{ $("InboxPlus").item.json.subject }}
    - Thread ID: {{ $("Gmail").item.json.threadId }}
    - Message ID: {{ $("Gmail").item.json.id }}
    - Tracking ID: {{ $("InboxPlus").item.json.trackingId }}
    - Sequence: "Onboarding Sequence"
  ```

  ## How It Works

  1. **Prepare Email** - Fetches template from InboxPlus and generates tracking pixel
  2. **Gmail** - Sends the email (Day 0) with template content and tracking
  3. **Start Sequence** - Records email in InboxPlus and starts automated follow-ups

  InboxPlus then:
  - Monitors the email thread for replies
  - Sends Day 1, Day 2, etc. follow-ups automatically
  - Stops sequence if recipient replies
  - Tracks opens and clicks

  ## Field Mapping

  ### From Prepare Email to Gmail:
  - `recipientEmail` → Gmail "To"
  - `subject` → Gmail "Subject"
  - `gmailBodyHtml` → Gmail "Body HTML"

  ### From Prepare Email to Start Sequence:
  - `recipientEmail` → "Recipient Email"
  - `subject` → "Subject"
  - `trackingId` → "Tracking ID"

  ### From Gmail to Start Sequence:
  - `threadId` → "Thread ID"
  - `id` → "Message ID"

  ## Important Notes

  - **Gmail is required** - InboxPlus works WITH Gmail, not as a replacement
  - **Day 0 sent by Gmail** - The first email is sent via Gmail node
  - **Follow-ups by InboxPlus** - Automated follow-ups are sent by InboxPlus
  - **Tracking included** - Tracking pixel is automatically added to emails
  - **Reply detection** - InboxPlus monitors for replies and stops sequences

  ## API Endpoints Used

  - `POST /user-emails/n8n/get-email-templates` - Load templates
  - `POST /user-emails/n8n/get-sequences` - Load sequences
  - `POST /user-emails/n8n/tracking-id` - Generate tracking
  - `POST /user-emails/n8n` - Record email and start sequence

  ## Troubleshooting

  ### Templates not loading
  - Check API key is correct
  - Verify templates exist in InboxPlus dashboard

  ### Sequence not starting
  - Ensure all fields are mapped correctly
  - Check API response in node output
  - Verify sequence exists and is active

  ### Follow-ups not sending
  - Wait for the configured delay (e.g., 24 hours for Day 1)
  - Check sequence is active in InboxPlus dashboard
  - Verify Gmail is connected in InboxPlus settings

  ## Version

  Current version: 1.1.2

  ## Author

  Avkash Kakdiya
  - Email: avkash@itechnotion.com
  - Github: https://github.com/itechnotion

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"The InboxPlus node enables n8n users to send emails using InboxPlus templates and automate follow-up sequences, with full tracking and reply detection, by integrating with Gmail for sending the initial email and managing automated follow-ups.","capabilities":["Load email templates from InboxPlus","Generate tracking pixels for email analytics","Send emails via Gmail using InboxPlus templates","Start automated follow-up sequences","Track email opens and replies","Manage automatic follow-ups based on recipient activity"],"authentication":"API key (JWT token) required from InboxPlus account","commonUseCases":["Sending welcome emails with automated follow-ups","Onboarding sequences for new customers","Re-engagement campaigns with open and reply tracking","Automated customer support follow-ups"],"limitations":["Requires Gmail to be used for sending the initial email (not a standalone email sender)","Follow-up emails are managed by InboxPlus and not directly controlled in n8n","No direct access to raw email content or metadata beyond what is passed via Gmail and sequence tracking"],"relatedNodes":["Gmail","Email Template Nodes","Automation Sequence Nodes"]}


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

updated_at: 2026-01-07 20:08:15
author_name: remyabyssale
author_github_url: https://github.com/getabyssale/
npm_package_name: n8n-nodes-abyssale
npm_version: 1.0.2
community_fetched_at: 2026-01-07T20:08:15.998Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "banner",
      "options": [
        {
          "name": "Banner",
          "value": "banner"
        },
        {
          "name": "Design",
          "value": "design"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateSingle",
      "options": [
        {
          "name": "Export Banners",
          "value": "exportBanners",
          "action": "Export banners",
          "description": "Export one or multiple previously generated visuals in .zip format"
        },
        {
          "name": "Generate HTML5 Banner Ads",
          "value": "generateHTML5BannerAds",
          "action": "Generate html5 banner ads",
          "description": "Generate HTML5 banner ads from an animated design"
        },
        {
          "name": "Generate Multi-Format Animated GIFs",
          "value": "generateMultiFormatGIFs",
          "action": "Generate multi format animated gifs",
          "description": "Generate multiple animated GIFs at once from a design created in Abyssale"
        },
        {
          "name": "Generate Multi-Format Images",
          "value": "generateMultiFormatImages",
          "action": "Generate multiple images",
          "description": "Generate a multiple images (JPEG, PNG, PDF,..) from a design"
        },
        {
          "name": "Generate Multi-Format PDFs for Printing",
          "value": "generateMultiFormatPDFs",
          "action": "Generate multi format pdfs for printing",
          "description": "Generate multiple printable PDFs at once from a design created in Abyssale"
        },
        {
          "name": "Generate Multi-Format Videos",
          "value": "generateMultiFormatVideos",
          "action": "Generate multi format videos",
          "description": "Generate multiple videos at once from an animated design created in Abyssale"
        },
        {
          "name": "Generate Single Image",
          "value": "generateSingle",
          "action": "Generate a single image",
          "description": "Generate a single image (JPEG, PNG, PDF) from a design"
        },
        {
          "name": "Get Banner",
          "value": "getBanner",
          "action": "Get banner",
          "description": "Retrieves the details about a previously generated banner"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "banner"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDesign",
      "options": [
        {
          "name": "Get a Design",
          "value": "getDesign",
          "action": "Get a design",
          "description": "Retrieves the details about a design you created on Abyssale"
        },
        {
          "name": "Get a Design Format",
          "value": "getDesignFormat",
          "action": "Get a design format",
          "description": "Retrieves the details about a format added to a design you created on Abyssale"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "design"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Export Banners",
      "value": "exportBanners",
      "action": "Export banners",
      "description": "Export one or multiple previously generated visuals in .zip format"
    },
    {
      "name": "Generate HTML5 Banner Ads",
      "value": "generateHTML5BannerAds",
      "action": "Generate html5 banner ads",
      "description": "Generate HTML5 banner ads from an animated design"
    },
    {
      "name": "Generate Multi-Format Animated GIFs",
      "value": "generateMultiFormatGIFs",
      "action": "Generate multi format animated gifs",
      "description": "Generate multiple animated GIFs at once from a design created in Abyssale"
    },
    {
      "name": "Generate Multi-Format Images",
      "value": "generateMultiFormatImages",
      "action": "Generate multiple images",
      "description": "Generate a multiple images (JPEG, PNG, PDF,..) from a design"
    },
    {
      "name": "Generate Multi-Format PDFs for Printing",
      "value": "generateMultiFormatPDFs",
      "action": "Generate multi format pdfs for printing",
      "description": "Generate multiple printable PDFs at once from a design created in Abyssale"
    },
    {
      "name": "Generate Multi-Format Videos",
      "value": "generateMultiFormatVideos",
      "action": "Generate multi format videos",
      "description": "Generate multiple videos at once from an animated design created in Abyssale"
    },
    {
      "name": "Generate Single Image",
      "value": "generateSingle",
      "action": "Generate a single image",
      "description": "Generate a single image (JPEG, PNG, PDF) from a design"
    },
    {
      "name": "Get Banner",
      "value": "getBanner",
      "action": "Get banner",
      "description": "Retrieves the details about a previously generated banner"
    },
    {
      "name": "Get a Design",
      "value": "getDesign",
      "action": "Get a design",
      "description": "Retrieves the details about a design you created on Abyssale"
    },
    {
      "name": "Get a Design Format",
      "value": "getDesignFormat",
      "action": "Get a design format",
      "description": "Retrieves the details about a format added to a design you created on Abyssale"
    }
  ]

npm_readme:
  # n8n-nodes-abyssale

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

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

  [Abyssale](https://www.abyssale.com/) helps you generate creative content at scale.

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

  ## Installation

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

  ## Operations

  - Banner
    - Export banners
    - Generate html5 banner ads
    - Generate multi format animated gifs
    - Generate multiple images
    - Generate multiple format pds for printing
    - Generate multiple format videos
    - Generate a single image
    - Get banner
    - Watch banner creation
    - Watch banner batch creation
    - Watch banners export
  - Design
    - Get a design
    - Get a design format
    - Watch design status changes

  ## Credentials

  You can use abyssale access token to use this node.

  ### Access token

  1. Follow this [tutorial](https://help.abyssale.com/en/articles/329008-how-to-create-your-abyssale-api-key) to generate your api key.
  2. Copy the token.

  ## Compatibility

  Compatible with n8n@1.117.3 or later

  ## Usage

  ### Generate marketing visuals with n8n
  Transform your n8n workflows with automated visual generation. 
  Pull data from any source and turn it into engaging visuals for every channel - from social posts to email campaigns.

  #### Basic image generation
  1. Add an **Abyssale** node to your workflow.
  2. Select the **Generate a single image** operation from the node's dropdown menu.
  3. Add your Abyssale API credential.
  4. Choose a static design. The design must be created in the Abyssale app beforehand and will be used as the base for your generated images.
  5. Select your desired format you want to use.
  6. Configure the design elements you want to customize. Map input data to specific elements like text, images, or colors to personalize each generated visual.
  7. Execute the node by clicking **Execute step**.
  8. Abyssale will automatically generate an image with your specified element modifications applied.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"The Abyssale n8n node enables integration with the Abyssale API to generate creative marketing visuals such as images, banners, videos, and designs automatically within n8n workflows.","capabilities":["Generate a single image","Generate multiple images","Generate HTML5 banner ads","Generate multi-format animated GIFs","Generate multiple format PDFs for printing","Generate multiple format videos","Export banners","Get a design","Get a design format","Watch banner creation"],"authentication":"API access token required","commonUseCases":["Automated generation of social media posts","Creating personalized email campaign visuals","Batch production of marketing banners and ads","Dynamic content generation based on input data"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhooks","n8n-nodes-database"]}


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

updated_at: 2026-01-07 20:08:15
author_name: bcharleson
author_github_url: https://github.com/r-Howitzer/
npm_package_name: n8n-nodes-heyreach
npm_version: 1.0.5
community_fetched_at: 2026-01-07T20:08:15.998Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "LinkedIn Account",
          "value": "linkedInAccount"
        },
        {
          "name": "List",
          "value": "list"
        },
        {
          "name": "My Network",
          "value": "myNetwork"
        },
        {
          "name": "Stat",
          "value": "stats"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Add Leads",
          "value": "addLeads",
          "action": "Add leads to campaign",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/AddLeadsToCampaign",
              "body": {
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "accountLeadPairs": "={{$parameter[\"accountLeadPairs\"].pair.map(pair => ({\n                                    linkedInAccountId: parseInt(pair.linkedInAccountId),\n                                    lead: {\n                                        ...pair.lead.details,\n                                        customUserFields: pair.lead.details.customUserFields?.field || []\n                                    }\n                                }))}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Retrieve a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/GetById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Leads",
          "value": "getLeads",
          "action": "Retrieve leads from campaign",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetLeadsFromCampaign",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "timeTo": "={{$parameter[\"additionalFields\"][\"timeTo\"]}}",
                "timeFrom": "={{$parameter[\"additionalFields\"][\"timeFrom\"]}}",
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "timeFilter": "={{$parameter[\"additionalFields\"][\"timeFilter\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Retrieve all campaigns",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "statuses": "={{$parameter[\"additionalFields\"][\"statuses\"]}}",
                "accountIds": "={{$parameter[\"additionalFields\"][\"accountIds\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many For Lead",
          "value": "getCampaignsForLead",
          "action": "Retrieve campaigns for a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetCampaignsForLead",
              "body": {
                "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Pause",
          "value": "pause",
          "action": "Pause a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/Pause",
              "body": {},
              "method": "POST"
            }
          }
        },
        {
          "name": "Resume",
          "value": "resume",
          "action": "Resume a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/Resume",
              "body": {},
              "method": "POST"
            }
          }
        },
        {
          "name": "Stop Lead",
          "value": "stopLeadInCampaign",
          "action": "Stop a lead in campaign",
          "routing": {
            "request": {
              "url": "/campaign/StopLeadInCampaign",
              "body": {
                "leadUrl": "={{$parameter[\"leadUrl\"]}}",
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "leadMemberId": "={{$parameter[\"leadMemberId\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOverallStats",
      "options": [
        {
          "name": "Get Overall",
          "value": "getOverallStats",
          "action": "Retrieve overall statistics",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/stats/GetOverallStats",
              "body": {
                "endDate": "={{$parameter[\"additionalFields\"][\"endDate\"]}}",
                "startDate": "={{$parameter[\"additionalFields\"][\"startDate\"]}}",
                "accountIds": "={{$parameter[\"accountIds\"]}}",
                "campaignIds": "={{$parameter[\"campaignIds\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stats"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createWebhook",
      "options": [
        {
          "name": "Create",
          "value": "createWebhook",
          "action": "Create a new webhook",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/webhooks/CreateWebhook",
              "body": {
                "eventType": "={{$parameter[\"eventType\"]}}",
                "webhookUrl": "={{$parameter[\"webhookUrl\"]}}",
                "campaignIds": "={{ $parameter[\"campaignIds\"] ?? [] }}",
                "webhookName": "={{$parameter[\"webhookName\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "deleteWebhook",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/DeleteWebhook",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "getWebhookById",
          "action": "Retrieve a single webhook",
          "routing": {
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/GetWebhookById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAllWebhooks",
          "action": "Retrieve all webhooks",
          "routing": {
            "request": {
              "url": "/webhooks/GetAllWebhooks",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Update",
          "value": "updateWebhook",
          "action": "Update an existing webhook",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/UpdateWebhook",
              "body": {
                "isActive": "={{$parameter[\"additionalFields\"][\"isActive\"]}}",
                "eventType": "={{$parameter[\"additionalFields\"][\"eventType\"]}}",
                "webhookUrl": "={{$parameter[\"additionalFields\"][\"webhookUrl\"]}}",
                "campaignIds": "={{ ($parameter[\"additionalFields\"]?.[\"eventType\"] === \"EVERY_MESSAGE_REPLY_RECEIVED\" || $parameter[\"additionalFields\"]?.[\"eventType\"] === \"LEAD_TAG_UPDATED\") ? [] : $parameter[\"additionalFields\"]?.[\"campaignIds\"] ?? null }}",
                "webhookName": "={{$parameter[\"additionalFields\"][\"webhookName\"]}}"
              },
              "method": "PATCH"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMyNetworkForSender",
      "options": [
        {
          "name": "Get",
          "value": "getMyNetworkForSender",
          "action": "Retrieve list of network connections for a sender account",
          "routing": {
            "request": {
              "url": "/MyNetwork/GetMyNetworkForSender",
              "body": {
                "pageSize": "={{$parameter[\"pageSize\"]}}",
                "senderId": "={{$parameter[\"senderId\"]}}",
                "pageNumber": "={{$parameter[\"pageNumber\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "myNetwork"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getListById",
      "options": [
        {
          "name": "Add Leads",
          "value": "addLeadsToList",
          "action": "Add leads to a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/AddLeadsToList",
              "body": {
                "leads": "={{$parameter[\"wrapperLeads\"][\"leads\"].map(lead => ({\n                                ...lead,\n                                customUserFields: lead.customUserFields?.field || []\n                            }))}}",
                "listId": "={{$parameter[\"listId\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Create Empty",
          "value": "createEmptyList",
          "action": "Create an empty list",
          "routing": {
            "request": {
              "url": "/list/CreateEmptyList",
              "body": {
                "name": "={{$parameter[\"listName\"]}}",
                "type": "={{$parameter[\"listType\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete Leads (By LinkedIn ID)",
          "value": "deleteLeadsFromList",
          "action": "Delete leads from a list by LinkedIn ID",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/DeleteLeadsFromList",
              "body": {
                "listId": "={{$parameter[\"listId\"]}}",
                "leadMemberIds": "={{$parameter[\"leadMemberIds\"]}}"
              },
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Delete Leads (By Profile URL)",
          "value": "deleteLeadsFromListByProfileUrl",
          "action": "Delete leads from a list by LinkedIn profile URL",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/DeleteLeadsFromListByProfileUrl",
              "body": {
                "listId": "={{$parameter[\"listId\"]}}",
                "profileUrls": "={{$parameter[\"leadProfileUrls\"]}}"
              },
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "getListById",
          "action": "Retrieve a list",
          "routing": {
            "request": {
              "qs": {
                "listId": "={{$parameter[\"listId\"]}}"
              },
              "url": "/list/GetById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Companies",
          "value": "getCompaniesFromList",
          "action": "Retrieve companies from a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetCompaniesFromList",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "listId": "={{$parameter[\"listId\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Leads",
          "value": "getLeadsFromList",
          "action": "Retrieve leads from a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetLeadsFromList",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "listId": "={{$parameter[\"listId\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "createdTo": "={{$parameter[\"additionalFields\"][\"createdTo\"]}}",
                "createdFrom": "={{$parameter[\"additionalFields\"][\"createdFrom\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Lists",
          "value": "getListsForLead",
          "action": "Retrieve lists associated with a specific lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetListsForLead",
              "body": {
                "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
                "profileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAllLists",
          "action": "Retrieve all lists",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "listType": "={{$parameter[\"additionalFields\"][\"listType\"]}}",
                "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "list"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getConversationsV2",
      "options": [
        {
          "name": "Get Many",
          "value": "getConversationsV2",
          "action": "Retrieve all LinkedIn conversations",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/inbox/GetConversations",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "filters": {
                  "seen": "={{$parameter[\"additionalFields\"][\"seen\"]}}",
                  "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}",
                  "searchString": "={{$parameter[\"additionalFields\"][\"searchString\"]}}",
                  "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                  "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}",
                  "linkedInAccountIds": "={{$parameter[\"additionalFields\"][\"linkedInAccountIds\"]}}"
                }
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Chatroom",
          "value": "getChatroom",
          "action": "Retrieve a specific LinkedIn conversation and messages",
          "routing": {
            "request": {
              "url": "=/inbox/GetChatroom/{{$parameter[\"accountId\"]}}/{{$parameter[\"conversationId\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message to a LinkedIn conversation",
          "routing": {
            "request": {
              "url": "/inbox/SendMessage",
              "body": {
                "message": "={{$parameter[\"message\"]}}",
                "subject": "={{$parameter[\"subject\"]}}",
                "conversationId": "={{$parameter[\"conversationId\"]}}",
                "linkedInAccountId": "={{$parameter[\"linkedInAccountId\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllLinkedInAccounts",
      "options": [
        {
          "name": "Get Many",
          "value": "getAllLinkedInAccounts",
          "action": "Retrieve a list of LinkedIn accounts",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/li_account/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "getLinkedInAccountById",
          "action": "Retrieve a LinkedIn account",
          "routing": {
            "request": {
              "qs": {
                "accountId": "={{$parameter[\"accountId\"]}}"
              },
              "url": "/li_account/GetById",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedInAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLead",
      "options": [
        {
          "name": "Get",
          "value": "getLead",
          "action": "Retrieve the details of a specific lead",
          "routing": {
            "request": {
              "url": "/lead/GetLead",
              "body": {
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Tags",
          "value": "addTagsToLead",
          "action": "Add tags to a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/lead/AddTags",
              "body": {
                "tags": "={{$parameter[\"tags\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
                "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Tags",
          "value": "getTagsForLead",
          "action": "Retrieve all tags for a lead",
          "routing": {
            "request": {
              "url": "/lead/GetTags",
              "body": {
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Replace Tags",
          "value": "replaceTags",
          "action": "Replace all existing tags for a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/lead/ReplaceTags",
              "body": {
                "tags": "={{$parameter[\"tags\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
                "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Leads",
      "value": "addLeads",
      "action": "Add leads to campaign",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/AddLeadsToCampaign",
          "body": {
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "accountLeadPairs": "={{$parameter[\"accountLeadPairs\"].pair.map(pair => ({\n                                    linkedInAccountId: parseInt(pair.linkedInAccountId),\n                                    lead: {\n                                        ...pair.lead.details,\n                                        customUserFields: pair.lead.details.customUserFields?.field || []\n                                    }\n                                }))}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Retrieve a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/GetById",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Leads",
      "value": "getLeads",
      "action": "Retrieve leads from campaign",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetLeadsFromCampaign",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "timeTo": "={{$parameter[\"additionalFields\"][\"timeTo\"]}}",
            "timeFrom": "={{$parameter[\"additionalFields\"][\"timeFrom\"]}}",
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "timeFilter": "={{$parameter[\"additionalFields\"][\"timeFilter\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Retrieve all campaigns",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "statuses": "={{$parameter[\"additionalFields\"][\"statuses\"]}}",
            "accountIds": "={{$parameter[\"additionalFields\"][\"accountIds\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Many For Lead",
      "value": "getCampaignsForLead",
      "action": "Retrieve campaigns for a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetCampaignsForLead",
          "body": {
            "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Pause",
      "value": "pause",
      "action": "Pause a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/Pause",
          "body": {},
          "method": "POST"
        }
      }
    },
    {
      "name": "Resume",
      "value": "resume",
      "action": "Resume a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/Resume",
          "body": {},
          "method": "POST"
        }
      }
    },
    {
      "name": "Stop Lead",
      "value": "stopLeadInCampaign",
      "action": "Stop a lead in campaign",
      "routing": {
        "request": {
          "url": "/campaign/StopLeadInCampaign",
          "body": {
            "leadUrl": "={{$parameter[\"leadUrl\"]}}",
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "leadMemberId": "={{$parameter[\"leadMemberId\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Overall",
      "value": "getOverallStats",
      "action": "Retrieve overall statistics",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/stats/GetOverallStats",
          "body": {
            "endDate": "={{$parameter[\"additionalFields\"][\"endDate\"]}}",
            "startDate": "={{$parameter[\"additionalFields\"][\"startDate\"]}}",
            "accountIds": "={{$parameter[\"accountIds\"]}}",
            "campaignIds": "={{$parameter[\"campaignIds\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Create",
      "value": "createWebhook",
      "action": "Create a new webhook",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/webhooks/CreateWebhook",
          "body": {
            "eventType": "={{$parameter[\"eventType\"]}}",
            "webhookUrl": "={{$parameter[\"webhookUrl\"]}}",
            "campaignIds": "={{ $parameter[\"campaignIds\"] ?? [] }}",
            "webhookName": "={{$parameter[\"webhookName\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Delete",
      "value": "deleteWebhook",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/DeleteWebhook",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Get",
      "value": "getWebhookById",
      "action": "Retrieve a single webhook",
      "routing": {
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/GetWebhookById",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAllWebhooks",
      "action": "Retrieve all webhooks",
      "routing": {
        "request": {
          "url": "/webhooks/GetAllWebhooks",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Update",
      "value": "updateWebhook",
      "action": "Update an existing webhook",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/UpdateWebhook",
          "body": {
            "isActive": "={{$parameter[\"additionalFields\"][\"isActive\"]}}",
            "eventType": "={{$parameter[\"additionalFields\"][\"eventType\"]}}",
            "webhookUrl": "={{$parameter[\"additionalFields\"][\"webhookUrl\"]}}",
            "campaignIds": "={{ ($parameter[\"additionalFields\"]?.[\"eventType\"] === \"EVERY_MESSAGE_REPLY_RECEIVED\" || $parameter[\"additionalFields\"]?.[\"eventType\"] === \"LEAD_TAG_UPDATED\") ? [] : $parameter[\"additionalFields\"]?.[\"campaignIds\"] ?? null }}",
            "webhookName": "={{$parameter[\"additionalFields\"][\"webhookName\"]}}"
          },
          "method": "PATCH"
        }
      }
    },
    {
      "name": "Get",
      "value": "getMyNetworkForSender",
      "action": "Retrieve list of network connections for a sender account",
      "routing": {
        "request": {
          "url": "/MyNetwork/GetMyNetworkForSender",
          "body": {
            "pageSize": "={{$parameter[\"pageSize\"]}}",
            "senderId": "={{$parameter[\"senderId\"]}}",
            "pageNumber": "={{$parameter[\"pageNumber\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Add Leads",
      "value": "addLeadsToList",
      "action": "Add leads to a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/AddLeadsToList",
          "body": {
            "leads": "={{$parameter[\"wrapperLeads\"][\"leads\"].map(lead => ({\n                                ...lead,\n                                customUserFields: lead.customUserFields?.field || []\n                            }))}}",
            "listId": "={{$parameter[\"listId\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Create Empty",
      "value": "createEmptyList",
      "action": "Create an empty list",
      "routing": {
        "request": {
          "url": "/list/CreateEmptyList",
          "body": {
            "name": "={{$parameter[\"listName\"]}}",
            "type": "={{$parameter[\"listType\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Delete Leads (By LinkedIn ID)",
      "value": "deleteLeadsFromList",
      "action": "Delete leads from a list by LinkedIn ID",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/DeleteLeadsFromList",
          "body": {
            "listId": "={{$parameter[\"listId\"]}}",
            "leadMemberIds": "={{$parameter[\"leadMemberIds\"]}}"
          },
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Delete Leads (By Profile URL)",
      "value": "deleteLeadsFromListByProfileUrl",
      "action": "Delete leads from a list by LinkedIn profile URL",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/DeleteLeadsFromListByProfileUrl",
          "body": {
            "listId": "={{$parameter[\"listId\"]}}",
            "profileUrls": "={{$parameter[\"leadProfileUrls\"]}}"
          },
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Get",
      "value": "getListById",
      "action": "Retrieve a list",
      "routing": {
        "request": {
          "qs": {
            "listId": "={{$parameter[\"listId\"]}}"
          },
          "url": "/list/GetById",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Companies",
      "value": "getCompaniesFromList",
      "action": "Retrieve companies from a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetCompaniesFromList",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "listId": "={{$parameter[\"listId\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Leads",
      "value": "getLeadsFromList",
      "action": "Retrieve leads from a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetLeadsFromList",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "listId": "={{$parameter[\"listId\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "createdTo": "={{$parameter[\"additionalFields\"][\"createdTo\"]}}",
            "createdFrom": "={{$parameter[\"additionalFields\"][\"createdFrom\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Lists",
      "value": "getListsForLead",
      "action": "Retrieve lists associated with a specific lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetListsForLead",
          "body": {
            "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
            "profileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAllLists",
      "action": "Retrieve all lists",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "listType": "={{$parameter[\"additionalFields\"][\"listType\"]}}",
            "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getConversationsV2",
      "action": "Retrieve all LinkedIn conversations",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/inbox/GetConversations",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "filters": {
              "seen": "={{$parameter[\"additionalFields\"][\"seen\"]}}",
              "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}",
              "searchString": "={{$parameter[\"additionalFields\"][\"searchString\"]}}",
              "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
              "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}",
              "linkedInAccountIds": "={{$parameter[\"additionalFields\"][\"linkedInAccountIds\"]}}"
            }
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Chatroom",
      "value": "getChatroom",
      "action": "Retrieve a specific LinkedIn conversation and messages",
      "routing": {
        "request": {
          "url": "=/inbox/GetChatroom/{{$parameter[\"accountId\"]}}/{{$parameter[\"conversationId\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message to a LinkedIn conversation",
      "routing": {
        "request": {
          "url": "/inbox/SendMessage",
          "body": {
            "message": "={{$parameter[\"message\"]}}",
            "subject": "={{$parameter[\"subject\"]}}",
            "conversationId": "={{$parameter[\"conversationId\"]}}",
            "linkedInAccountId": "={{$parameter[\"linkedInAccountId\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAllLinkedInAccounts",
      "action": "Retrieve a list of LinkedIn accounts",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/li_account/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get",
      "value": "getLinkedInAccountById",
      "action": "Retrieve a LinkedIn account",
      "routing": {
        "request": {
          "qs": {
            "accountId": "={{$parameter[\"accountId\"]}}"
          },
          "url": "/li_account/GetById",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get",
      "value": "getLead",
      "action": "Retrieve the details of a specific lead",
      "routing": {
        "request": {
          "url": "/lead/GetLead",
          "body": {
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Add Tags",
      "value": "addTagsToLead",
      "action": "Add tags to a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/lead/AddTags",
          "body": {
            "tags": "={{$parameter[\"tags\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
            "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Get Tags",
      "value": "getTagsForLead",
      "action": "Retrieve all tags for a lead",
      "routing": {
        "request": {
          "url": "/lead/GetTags",
          "body": {
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      }
    },
    {
      "name": "Replace Tags",
      "value": "replaceTags",
      "action": "Replace all existing tags for a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/lead/ReplaceTags",
          "body": {
            "tags": "={{$parameter[\"tags\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
            "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
          },
          "method": "POST"
        }
      }
    }
  ]

npm_readme:
  #  n8n-nodes-heyreach
  This is a **HeyReach** Community Node for n8n, enabling seamless integration with **HeyReach** in your workflows.  
  **HeyReach** is a powerful LinkedIn automation platform designed to help you scale and optimize your outreach campaigns.  
  This project make it easy to manage LinkedIn campaigns and automate your outreach directly from your workflows.

  [License](#license)  
  [Installation](#installation)  
  [Available Operations](#available-operations)  
  [Credentials](#credentials)  
  [Resources](#resources)  
  [Folder Structure](#folder-structure)

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

  ## Installation
  ### Community Nodes (Recommended)
  1. Navigate to **n8n** and sign in.
  2. Go to Settings > Community Nodes
  3. Click Install
  4. Enter `n8n-nodes-heyreach` and click Download
  5. Restart your n8n instance
  6. The HeyReach node will appear in your node palette
  --- 

  ### Local Setup 
  1. Clone the repository.
  2. Run `npm install` to install dependencies.
  3. Before running locally make sure `baseURL` which can be found in `HeyReach.node.ts` is set to dev or staging endpoints.
  4. Run `npm run build` each time you have change or the for the very first time.
  5. Reference the official [n8n documentation](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for running and testing custom nodes locally

  ## Credentials
  Steps to obtain **API KEY** needed for authentication.
  1. Go to **[HeyReach app](https://app.heyreach.io/)** and sign in.
  2. Navigate to the **Integrations** section.
  3. Find the **n8n** card and click **Connect Now**.
  4. Click **New API Key** to generate an API key.
  5. **Copy** the generated API key.
  6. In **n8n**, create a new **HeyReach connection**.
  7. **Paste** the API key into the connection settings and save it.  

  ✅ That’s it — your HeyReach account is now connected to n8n! 🎉

  ## Available Operations

  ### 🔧 Campaign Management

  - **Retrieve all campaigns** – Get a list of all campaigns.
  - **Retrieve a campaign** – Get details of a specific campaign.
  - **Resume a campaign** – Resume a paused campaign.
  - **Pause a campaign** – Pause an active campaign.
  - **Stop a lead in campaign** – Stop a specific lead within a campaign.
  - **Add leads to campaign** – Add one or multiple leads to a campaign.
  - **Retrieve leads from campaign** – Get leads from a campaign.
  - **Retrieve campaigns for a lead** – Find all campaigns that a specific lead belongs to.
  ---

  ### 💬 Inbox

  - **Retrieve all LinkedIn conversations** - Get a list of all LinkedIn conversations.
  - **Retrieve a specific LinkedIn conversation and messages** - Retrieve details of a particular LinkedIn conversation along with all associated messages.
  - **Send a message to a LinkedIn conversation** - Send a new message to a specific LinkedIn conversation.
  ---

  ### 🧑‍💼 Lead

  - **Retrieve the details of a specific lead** - Get detailed information about a specific lead.
  - **Add tags to a lead** - Add one or more tags to a lead to help categorize or filter.
  - **Retrieve all tags for a lead** - Retrieve all tags associated with a specific lead.
  - **Replace all existing tags for a lead** - Replace the current tags on a lead with a new set of tags.
  ---

  ### 🔗 LinkedIn Account Actions

  - **Retrieve a list of LinkedIn accounts** - Get all LinkedIn accounts connected to the system.
  - **Retrieve a LinkedIn account** - Get details of a specific LinkedIn account.
  ---

  ### 📋 List Actions

  - **Retrieve a list** - Get a specific list of leads.
  - **Retrieve all lists** - Get all available lead lists.
  - **Retrieve leads from a list** - Get all leads within a specific list.
  - **Delete leads from a list by LinkedIn ID** - Remove one or more leads from a list using their LinkedIn IDs.
  - **Delete leads from a list by LinkedIn profile URL** - Remove leads from a list using their LinkedIn profile URLs.
  - **Retrieve companies from a list** - Get all associated companies from a specific list.
  - **Add leads to a list** - Add one or more leads to a given list.
  - **Retrieve lists associated with a specific lead** - Get all lists that include a specific lead.
  - **Create an empty list** - Create a new list with no leads.
  ---

  ### 🌐 My Network Actions

  - **Retrieve list of network connections for a sender account** - Get all network connections associated with a given sender LinkedIn account.

  ---

  ### 📊 Stats Actions

  - **Retrieve overall statistics** - Get general statistics across the system, such as lead or campaign performance.

  ---

  ### 🪝 Webhook Actions

  - **Retrieve all webhooks** - Get a list of all configured webhooks.
  - **Retrieve a single webhook** - Get the details of a specific webhook.

  ## Resources

    [HeyReach API documentation](https://documenter.getpostman.com/view/23808049/2sA2xb5F75#61f5ef5d-5f31-4da9-b6af-ef0a6f128146)    

  ## Folder Structure

  - `nodes/HeyReach/operations/` – Contains folders based on the available features.  
    - Each feature has its own folder.
    - `operations` files specify the category of the endpoints and request params for each API call.
    - `fields` files describe the fields required for each request.
  - The starting point for the integration is `HeyReach.node.ts`.  
    - Any new operations should be registered in this file.

ai_documentation_summary:
  {"purpose":"The HeyReach API node enables seamless integration with HeyReach, a LinkedIn automation platform, allowing users to manage outreach campaigns, interact with LinkedIn conversations, manage leads and lists, and perform analytics—all directly within n8n workflows.","capabilities":["Retrieve all campaigns and specific campaign details","Pause, resume, or stop campaigns and leads","Add or retrieve leads in campaigns and lists","Send messages to LinkedIn conversations","Manage lead tags and retrieve lead details","Retrieve and manage LinkedIn accounts and network connections","Create, modify, and delete lead lists","Access system-wide statistics and webhooks","Retrieve conversations and associated messages"],"authentication":"API key required","commonUseCases":["Automating LinkedIn outreach campaigns with scheduled resume/pause actions","Adding qualified leads to campaigns or lists based on criteria","Sending personalized messages to prospects via LinkedIn conversations","Tagging and organizing leads for better segmentation","Monitoring campaign performance with real-time stats"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-crm"]}


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

updated_at: 2026-01-07 20:08:15
author_name: telli-com
author_github_url: https://github.com/telli-ai/n8n-telli.git
npm_package_name: n8n-nodes-telli
npm_version: 1.1.0
community_fetched_at: 2026-01-07T20:08:15.999Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "add-telli-contact",
      "options": [
        {
          "name": "Add Contact",
          "value": "add-telli-contact",
          "action": "Add a new contact to telli",
          "description": "Add a new contact to telli"
        },
        {
          "name": "Delete Contact",
          "value": "delete-telli-contact",
          "action": "Delete a contact from telli",
          "description": "Permanently delete a contact from telli"
        },
        {
          "name": "Get Contact By External ID",
          "value": "get-contact-by-external-id",
          "action": "Get contact by external ID",
          "description": "Retrieve detailed contact information using external contact ID"
        },
        {
          "name": "Remove From Auto Dialer",
          "value": "remove-from-auto-dialer",
          "action": "Remove a contact from auto dialer",
          "description": "Remove a contact from the auto dialer queue"
        },
        {
          "name": "Schedule Call",
          "value": "schedule-telli-call",
          "action": "Schedule a call with telli",
          "description": "Schedule a call with telli"
        },
        {
          "name": "Update Contact",
          "value": "update-telli-contact",
          "action": "Update a contact in telli",
          "description": "Update an existing contact in telli"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Contact",
      "value": "add-telli-contact",
      "action": "Add a new contact to telli",
      "description": "Add a new contact to telli"
    },
    {
      "name": "Delete Contact",
      "value": "delete-telli-contact",
      "action": "Delete a contact from telli",
      "description": "Permanently delete a contact from telli"
    },
    {
      "name": "Get Contact By External ID",
      "value": "get-contact-by-external-id",
      "action": "Get contact by external ID",
      "description": "Retrieve detailed contact information using external contact ID"
    },
    {
      "name": "Remove From Auto Dialer",
      "value": "remove-from-auto-dialer",
      "action": "Remove a contact from auto dialer",
      "description": "Remove a contact from the auto dialer queue"
    },
    {
      "name": "Schedule Call",
      "value": "schedule-telli-call",
      "action": "Schedule a call with telli",
      "description": "Schedule a call with telli"
    },
    {
      "name": "Update Contact",
      "value": "update-telli-contact",
      "action": "Update a contact in telli",
      "description": "Update an existing contact in telli"
    }
  ]

npm_readme:
  # n8n-nodes-telli

  This is an n8n community node. It lets you use telli AI phone call platform in your n8n workflows.

  telli is an AI phone calling platform that lets you automate phone call operations and perform custom tasks.

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

  - [Installation](#installation)  
  - [Actions](#actions)  
  - [Credentials](#credentials)  
  - [Compatibility](#compatibility)  
  - [Usage](#usage)  
  - [Resources](#resources)  
  - [Development](#development)  

  ## Repository Structure

  - `credentials/`: Contains credential definitions
    - `TelliApi.credentials.ts`: Defines the API key authentication for telli API

  - `nodes/`: Contains the actual node implementations
    - `Telli/`: The telli node folder
      - `Telli.node.ts`: Main implementation of the telli node with operations for adding contacts and scheduling calls
      - `telli.svg`: Icon for the node in n8n

  <!-- Adding a node would mean creating a new folder in the nodes/ directory, and adding a new file with the node implementation. -->

  - `dist/`: Generated folder containing compiled JavaScript code (created after running `npm run build`)

  - `package.json`: Defines package dependencies and n8n node registration information

  ## Installation

  ### Option 1: Install from npm

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

  ```bash
  npm install n8n-nodes-telli
  ```

  ### Option 2: Manual installation

  1. Clone this repository to your local machine
  2. Install dependencies: `npm install`
  3. Build the code: `npm run build`
  4. Create a custom directory in your n8n installation: `mkdir -p ~/.n8n/custom`
  5. Create a package.json file in the custom directory:
  ```json
  {
    "name": "n8n-custom-nodes",
    "version": "0.1.0",
    "private": true,
    "dependencies": {
      "n8n-nodes-telli": "file:///path/to/cloned/n8n-nodes-telli"
    }
  }
  ```
  6. Install the dependency: `cd ~/.n8n/custom && npm install`
  7. Restart n8n

  ## Actions

  The telli node provides the following operations:

  ### Add Contact
  - Add a new contact to telli with first name, last name, email, phone number, and optional attributes
  - See more info [here](https://docs.telli.com/endpoint/add-contact)

  ### Update Contact
  - Update an existing contact in telli. Only provided fields will be updated, others remain unchanged
  - Supports updating first name, last name, phone number, email, external contact ID, external URL, salutation, timezone, and contact details
  - See more info [here](https://docs.telli.com/endpoint/update-contact)

  ### Delete Contact
  - Permanently delete a contact and any PII data associated with it from the system
  - This action cannot be undone. If you want to stop calling a contact, use the `v1/remove-from-auto-dialer` endpoint instead
  - See more info [here](https://docs.telli.com/endpoint/delete-contact)

  ### Remove from Auto Dialer
  - Remove a contact from the auto dialer queue
  - This stops the contact from receiving automated calls without deleting their data
  - See more info [here](https://docs.telli.com/endpoint/remove-from-auto-dialer)

  ### Schedule Call
  - Schedule an AI phone call with a telli contact, with customizable message and questions
  - See more info [here](https://docs.telli.com/endpoint/schedule-call)

  ## Credentials

  To use the telli nodes, you need to authenticate with the telli API:

  1. Sign up for an account at [telli.com](https://telli.com/)
  2. Navigate to your account settings
  3. Create an API key with the necessary permissions
  4. Use this API key in the telli API credentials in n8n

  ## Compatibility

  This node has been tested with n8n version 0.171.0 and higher.

  ## Usage

  ### Add Contact Example

  1. Add the telli node to your workflow
  2. Select the "Add Contact" operation
  3. Fill in the required fields (First Name, Last Name, Phone Number, External Contact ID)
  4. Optionally add Email, Salutation, etc.
  5. Connect the node to a trigger or another node

  ### Update Contact Example

  1. Add the telli node to your workflow
  2. Select the "Update Contact" operation
  3. Enter the Contact ID (obtained from a previous Add Contact operation or from telli dashboard)
  4. Fill in only the fields you want to update (leave others empty to keep existing values)
  5. Connect the node to a trigger or another node

  ### Delete Contact Example

  1. Add the telli node to your workflow
  2. Select the "Delete Contact" operation
  3. Enter the Contact ID (obtained from a previous Add Contact operation or from telli dashboard)
  4. Connect the node to a trigger or another node
  5. **Warning**: This action permanently deletes the contact and cannot be undone

  ### Remove from Auto Dialer Example

  1. Add the telli node to your workflow
  2. Select the "Remove from Auto Dialer" operation
  3. Enter the Contact ID (obtained from a previous Add Contact operation or from telli dashboard)
  4. Connect the node to a trigger or another node
  5. This will stop the contact from receiving automated calls without deleting their data

  ### Schedule Call Example

  1. Add the telli node to your workflow  
  2. Select the "Schedule Call" operation
  3. Enter the Contact ID (obtained from a previous Add Contact operation or from telli dashboard)
  4. Configure call details including message and questions
  5. Connect to a trigger or other nodes to start the workflow

  ## Resources

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

  ## Development

  ### Making Changes and Rebuilding Locally

  Refer to the n8n docs on how to run nodes locally: [docs](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/)

  1. Make your changes to the code (e.g., in `nodes/Telli/Telli.node.ts`)

  2. Build the project:
  ```bash
  npm run build
  ```

  3. Copy the built files to your n8n custom directory:
  ```bash
  cp -r dist/* ~/.n8n/custom/n8n-nodes-telli/ # or wherever your custom directory is
  ```

  4. Restart n8n to see your changes:
  ```bash
  # First kill the current n8n process (Ctrl+C), then run:
  n8n start
  ```

  ### Development Workflow Tips

  - Use `npm run dev` to continuously build the code as you make changes
  - Check for linting errors with `npm run lint`
  - Format code with `npm run format`

  ### Troubleshooting

  If you don't see your changes after rebuilding and restarting n8n:

  1. Check if there are any errors in the n8n logs
  2. Verify that the files were correctly copied to the custom directory
  3. Make sure n8n was properly restarted
  4. Clear your browser cache or open n8n in an incognito window

ai_documentation_summary:
  {"purpose":"The telli node enables integration with the telli AI phone calling platform, allowing users to manage contacts and schedule AI-powered phone calls within n8n workflows.","capabilities":["Add a new contact with first name, last name, email, phone number, and optional attributes","Update existing contact fields (e.g., name, phone, email, salutation) while preserving unchanged fields","Permanently delete a contact and associated PII data","Remove a contact from the auto-dialer queue without deleting data","Schedule an AI phone call with custom message and questions"],"authentication":"API key required; obtain it from the telli dashboard and configure it in the n8n credentials section","commonUseCases":["Automating outbound AI phone calls for lead follow-ups","Managing contact databases with dynamic updates and deletions","Stopping automated calls for specific contacts without data loss","Integrating contact management with CRM or marketing workflows"],"limitations":["Deleting a contact is permanent and irreversible","The 'Remove from Auto Dialer' action only stops calls, does not delete data","No support for call recording or call analytics in this node"],"relatedNodes":["n8n-nodes-base.trigger","n8n-nodes-base.function","n8n-nodes-base.set","n8n-nodes-base.httpRequest"]}


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

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

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

npm_readme:
  # Simplesat's n8n node

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

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

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

  ## Installation

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

  ## Operations

  ### Surveys

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

  ### Questions

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

  ### Responses

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

  ### Answers

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

  ### Customers

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

  ### Team Members

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

  ## Credentials

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

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

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

  ## Usage

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

  ## Resources

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

ai_documentation_summary:
  {"purpose":"The Simplesat n8n node connects to the Simplesat API to manage surveys, responses, answers, customers, and team members within n8n workflows.","capabilities":["List surveys with pagination","Send surveys via email with optional team member and ticket details","List questions filtered by survey ID and metric type (NPS, CSAT, 5-Star, CES, Custom)","Retrieve a specific response by ID","Search responses with date ranges, filters, and pagination","Retrieve a specific answer by ID","Search answers with date ranges, filters, and pagination","List customers with date filtering and subscription status","Retrieve a specific customer by ID","Create or update customers"],"authentication":"API key required; the node uses the `X-Simplesat-Token` header for authentication","commonUseCases":["Automate survey distribution to customers via email","Track customer feedback responses over time","Monitor NPS, CSAT, or CES metrics with filtered question data","Manage customer and team member records in workflows","Search and retrieve specific responses or answers based on date or criteria"],"limitations":[],"relatedNodes":["n8n API nodes","Email nodes","Database nodes"]}


node_type: n8n-nodes-hubbi.hubbi
package_name: n8n-nodes-hubbi
display_name: Hubbi
description: Get data from the Hubbi services
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: hubbi.parts
author_github_url: https://github.com/Hubbiparts/
npm_package_name: n8n-nodes-hubbi
npm_version: 1.0.1
community_fetched_at: 2026-01-07T20:08:16.003Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "part",
      "options": [
        {
          "name": "Stock",
          "value": "stock",
          "description": "Operations related to your stock"
        },
        {
          "name": "Autopart",
          "value": "part",
          "description": "Operations related to autoparts"
        },
        {
          "name": "Vehicle",
          "value": "vehicle",
          "description": "Operations related to vehicles"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "part",
      "options": [
        {
          "name": "Autopart",
          "value": "part",
          "description": "Operations related to autoparts"
        },
        {
          "name": "Vehicle",
          "value": "vehicle",
          "description": "Operations related to vehicles"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "userType": [
            "buyer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listParts",
      "options": [
        {
          "name": "Create Autopart in Stock",
          "value": "createPart",
          "action": "Create autopart in stock",
          "routing": {
            "request": {
              "url": "=erps/parts/",
              "body": [
                {
                  "code": "={{$parameter.code}}",
                  "name": "={{$parameter.name}}",
                  "price": "={{$parameter.price}}",
                  "stock": "={{$parameter.stock}}",
                  "erp_id": "={{$parameter.erpId}}"
                }
              ],
              "method": "POST"
            }
          },
          "description": "Create a new autopart",
          "displayOptions": {
            "show": {
              "userType": [
                "dealer"
              ]
            }
          }
        },
        {
          "name": "Delete Stock",
          "value": "deletePart",
          "action": "Delete autopart",
          "routing": {
            "request": {
              "url": "=erps/parts/{{$parameter.id}}/",
              "method": "DELETE"
            }
          },
          "description": "Delete an autopart by ID",
          "displayOptions": {
            "show": {
              "userType": [
                "dealer"
              ]
            }
          }
        },
        {
          "name": "Get Autopart in Stock",
          "value": "getPart",
          "action": "Get autopart",
          "routing": {
            "request": {
              "url": "=erps/parts/{{$parameter.id}}/",
              "method": "GET"
            }
          },
          "description": "Get a specific autopart by ID",
          "displayOptions": {
            "show": {
              "userType": [
                "dealer"
              ]
            }
          }
        },
        {
          "name": "List Stock",
          "value": "listParts",
          "action": "List autoparts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "=erps/parts/",
              "method": "GET"
            }
          },
          "description": "List all available autoparts",
          "displayOptions": {
            "show": {
              "userType": [
                "dealer"
              ]
            }
          }
        },
        {
          "name": "Update Stock",
          "value": "updatePart",
          "action": "Update autopart",
          "routing": {
            "request": {
              "url": "=erps/parts/{{$parameter.id}}/",
              "body": {
                "code": "={{$parameter.code}}",
                "name": "={{$parameter.name}}",
                "price": "={{$parameter.price}}",
                "stock": "={{$parameter.stock}}",
                "erp_id": "={{$parameter.erpId}}"
              },
              "method": "PATCH"
            }
          },
          "description": "Update an existing autopart by ID",
          "displayOptions": {
            "show": {
              "userType": [
                "dealer"
              ]
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stock"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchPart",
      "options": [
        {
          "name": "Search Autopart",
          "value": "searchPart",
          "action": "Search for autoparts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "sku": "={{$parameter[\"partNumber\"]}}",
                "limit": 96,
                "stock": "={{$parameter[\"inStock\"] ? \"true\" : \"false\"}}",
                "offset": 0,
                "search": "={{$parameter[\"partName\"]}}",
                "barcode": "={{$parameter[\"barcode\"]}}",
                "state_uf": "={{Array.isArray($parameter[\"uf\"]) ? $parameter[\"uf\"].join(\",\") : $parameter[\"uf\"]}}",
                "positions": "={{Array.isArray($parameter[\"position\"]) ? $parameter[\"position\"].join(\",\") : $parameter[\"position\"]}}",
                "application": "={{$parameter[\"vehicle\"]}}"
              },
              "url": "/catalog/filter/",
              "method": "GET"
            }
          },
          "description": "Retrieve details of a part"
        },
        {
          "name": "Part Specifications",
          "value": "partSpecs",
          "action": "Get part specifications",
          "routing": {
            "request": {
              "qs": {
                "nome_fabricante": "={{$parameter[\"brandName\"]}}",
                "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
              },
              "url": "/public/api/v1/catalog/part/technical-specs",
              "method": "GET"
            }
          },
          "description": "Retrieve specifications of a part"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "part"
          ],
          "userType": [
            "buyer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchPart",
      "options": [
        {
          "name": "Search Autopart",
          "value": "searchPart",
          "action": "Search for autoparts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "sku": "={{$parameter[\"partNumber\"]}}",
                "limit": 96,
                "stock": "={{$parameter[\"inStock\"] ? \"true\" : \"false\"}}",
                "offset": 0,
                "search": "={{$parameter[\"partName\"]}}",
                "barcode": "={{$parameter[\"barcode\"]}}",
                "state_uf": "={{Array.isArray($parameter[\"uf\"]) ? $parameter[\"uf\"].join(\",\") : $parameter[\"uf\"]}}",
                "positions": "={{Array.isArray($parameter[\"position\"]) ? $parameter[\"position\"].join(\",\") : $parameter[\"position\"]}}",
                "application": "={{$parameter[\"vehicle\"]}}"
              },
              "url": "/catalog/filter/",
              "method": "GET"
            }
          },
          "description": "Retrieve details of a part"
        },
        {
          "name": "Part Specifications",
          "value": "partSpecs",
          "action": "Get part specifications",
          "routing": {
            "request": {
              "qs": {
                "nome_fabricante": "={{$parameter[\"brandName\"]}}",
                "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
              },
              "url": "/public/api/v1/catalog/part/technical-specs",
              "method": "GET"
            }
          },
          "description": "Retrieve specifications of a part"
        },
        {
          "name": "Part Quotation",
          "value": "partQuotation",
          "action": "Get part quotation",
          "routing": {
            "request": {
              "qs": {
                "nome_fabricante": "={{$parameter[\"brandName\"]}}",
                "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
              },
              "url": "/public/api/v1/catalog/part/quotation",
              "method": "GET"
            }
          },
          "description": "Retrieve quotation details for a part"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "part"
          ],
          "userType": [
            "dealer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "vehicleByPlate",
      "options": [
        {
          "name": "Get Vehicle by Plate",
          "value": "vehicleByPlate",
          "action": "Get vehicle by license plate",
          "routing": {
            "request": {
              "qs": {
                "plate": "={{$parameter[\"plate\"]}}"
              },
              "url": "/platesearch/vehicle-info/",
              "method": "GET"
            }
          },
          "description": "Retrieve vehicle description by plate number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vehicle"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Autopart in Stock",
      "value": "createPart",
      "action": "Create autopart in stock",
      "routing": {
        "request": {
          "url": "=erps/parts/",
          "body": [
            {
              "code": "={{$parameter.code}}",
              "name": "={{$parameter.name}}",
              "price": "={{$parameter.price}}",
              "stock": "={{$parameter.stock}}",
              "erp_id": "={{$parameter.erpId}}"
            }
          ],
          "method": "POST"
        }
      },
      "description": "Create a new autopart",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      }
    },
    {
      "name": "Delete Stock",
      "value": "deletePart",
      "action": "Delete autopart",
      "routing": {
        "request": {
          "url": "=erps/parts/{{$parameter.id}}/",
          "method": "DELETE"
        }
      },
      "description": "Delete an autopart by ID",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      }
    },
    {
      "name": "Get Autopart in Stock",
      "value": "getPart",
      "action": "Get autopart",
      "routing": {
        "request": {
          "url": "=erps/parts/{{$parameter.id}}/",
          "method": "GET"
        }
      },
      "description": "Get a specific autopart by ID",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      }
    },
    {
      "name": "List Stock",
      "value": "listParts",
      "action": "List autoparts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "=erps/parts/",
          "method": "GET"
        }
      },
      "description": "List all available autoparts",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      }
    },
    {
      "name": "Update Stock",
      "value": "updatePart",
      "action": "Update autopart",
      "routing": {
        "request": {
          "url": "=erps/parts/{{$parameter.id}}/",
          "body": {
            "code": "={{$parameter.code}}",
            "name": "={{$parameter.name}}",
            "price": "={{$parameter.price}}",
            "stock": "={{$parameter.stock}}",
            "erp_id": "={{$parameter.erpId}}"
          },
          "method": "PATCH"
        }
      },
      "description": "Update an existing autopart by ID",
      "displayOptions": {
        "show": {
          "userType": [
            "dealer"
          ]
        }
      }
    },
    {
      "name": "Search Autopart",
      "value": "searchPart",
      "action": "Search for autoparts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "sku": "={{$parameter[\"partNumber\"]}}",
            "limit": 96,
            "stock": "={{$parameter[\"inStock\"] ? \"true\" : \"false\"}}",
            "offset": 0,
            "search": "={{$parameter[\"partName\"]}}",
            "barcode": "={{$parameter[\"barcode\"]}}",
            "state_uf": "={{Array.isArray($parameter[\"uf\"]) ? $parameter[\"uf\"].join(\",\") : $parameter[\"uf\"]}}",
            "positions": "={{Array.isArray($parameter[\"position\"]) ? $parameter[\"position\"].join(\",\") : $parameter[\"position\"]}}",
            "application": "={{$parameter[\"vehicle\"]}}"
          },
          "url": "/catalog/filter/",
          "method": "GET"
        }
      },
      "description": "Retrieve details of a part"
    },
    {
      "name": "Part Specifications",
      "value": "partSpecs",
      "action": "Get part specifications",
      "routing": {
        "request": {
          "qs": {
            "nome_fabricante": "={{$parameter[\"brandName\"]}}",
            "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
          },
          "url": "/public/api/v1/catalog/part/technical-specs",
          "method": "GET"
        }
      },
      "description": "Retrieve specifications of a part"
    },
    {
      "name": "Search Autopart",
      "value": "searchPart",
      "action": "Search for autoparts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "sku": "={{$parameter[\"partNumber\"]}}",
            "limit": 96,
            "stock": "={{$parameter[\"inStock\"] ? \"true\" : \"false\"}}",
            "offset": 0,
            "search": "={{$parameter[\"partName\"]}}",
            "barcode": "={{$parameter[\"barcode\"]}}",
            "state_uf": "={{Array.isArray($parameter[\"uf\"]) ? $parameter[\"uf\"].join(\",\") : $parameter[\"uf\"]}}",
            "positions": "={{Array.isArray($parameter[\"position\"]) ? $parameter[\"position\"].join(\",\") : $parameter[\"position\"]}}",
            "application": "={{$parameter[\"vehicle\"]}}"
          },
          "url": "/catalog/filter/",
          "method": "GET"
        }
      },
      "description": "Retrieve details of a part"
    },
    {
      "name": "Part Specifications",
      "value": "partSpecs",
      "action": "Get part specifications",
      "routing": {
        "request": {
          "qs": {
            "nome_fabricante": "={{$parameter[\"brandName\"]}}",
            "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
          },
          "url": "/public/api/v1/catalog/part/technical-specs",
          "method": "GET"
        }
      },
      "description": "Retrieve specifications of a part"
    },
    {
      "name": "Part Quotation",
      "value": "partQuotation",
      "action": "Get part quotation",
      "routing": {
        "request": {
          "qs": {
            "nome_fabricante": "={{$parameter[\"brandName\"]}}",
            "codigo_fabricante": "={{$parameter[\"partNumber\"]}}"
          },
          "url": "/public/api/v1/catalog/part/quotation",
          "method": "GET"
        }
      },
      "description": "Retrieve quotation details for a part"
    },
    {
      "name": "Get Vehicle by Plate",
      "value": "vehicleByPlate",
      "action": "Get vehicle by license plate",
      "routing": {
        "request": {
          "qs": {
            "plate": "={{$parameter[\"plate\"]}}"
          },
          "url": "/platesearch/vehicle-info/",
          "method": "GET"
        }
      },
      "description": "Retrieve vehicle description by plate number"
    }
  ]

npm_readme:
  # n8n-nodes-hubbi

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

  Hubbi is a B2B marketplace platform that connects corporate consumers with auto parts suppliers. Using BigData technologies, it enables an agile and assertive quotation, purchase and sale process.

  [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

  - Vehicle Operations: get detailed information about a vehicle by it's license plate.
  - Stock Operations: List, create, update and delete your stock at Hubbi.
  - Part Operations: Get detailed technical speficiation for an autopart, search for parts in Hubbi's catalog and see the lowest quotation for auto parts.

  ## Credentials

  To use this node, you need to have a Hubbi account and valid API keys.

  1. **Create a Hubbi Account:**  
     Sign up at [Hubbi](https://hubbi.app) if you don't already have an account.

  2. **Generate API Keys:**  
     After logging in, navigate to your account settings to generate your API keys.

  3. **Configure Credentials in n8n:**  
     In n8n, add a new set of credentials for the Hubbi node and enter your API keys.

  These credentials will allow the node to authenticate and interact with Hubbi services securely.

  ## Compatibility

  This node is compatible with n8n version 1.93.0 and onwards.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Hubbi](https://hubbi.app)

ai_documentation_summary:
  {"purpose":"The Hubbi node allows users to integrate Hubbi's B2B auto parts marketplace services into n8n workflows, enabling operations such as retrieving vehicle details, managing stock, and querying auto part specifications and quotations.","capabilities":["Retrieve vehicle information by license plate","List, create, update, and delete stock items","Get technical specifications of auto parts","Search for parts in Hubbi's catalog","Fetch the lowest quotation for auto parts"],"authentication":"API key required (must have a Hubbi account and generate API keys via account settings)","commonUseCases":["Automating vehicle part lookup based on license plate","Managing inventory of auto parts in a supply chain workflow","Fetching real-time part quotations for procurement processes"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-http"]}


node_type: n8n-nodes-jetapi.jetapi
package_name: n8n-nodes-jetapi
display_name: JetAPI
description: Integrate with JetAPI for Telegram and WhatsApp messaging
category: Community
development_style: declarative
version: 6
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: jetapi
author_github_url: https://github.com/jetapi/
npm_package_name: n8n-nodes-jetapi
npm_version: 1.3.0
community_fetched_at: 2026-01-07T20:08:16.004Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Send Text Message",
          "value": "sendText",
          "action": "Send a text message"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Text Message",
      "value": "sendText",
      "action": "Send a text message"
    }
  ]

npm_readme:
  # n8n-nodes-jetapi
  This is an n8n community node for [JetAPI](https://jetapi.io/login?referral=n8n&subs_slug=jtp_individ&subs_type=temp) - send messages via Telegram and WhatsApp.

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

  ## 🎉 Get 10 Days Free Trial!

  [Sign up for JetAPI](https://jetapi.io/login?referral=n8n&subs_slug=jtp_individ&subs_type=temp) and get **10 days free trial** to test all messaging features.

  ## Usage

  Get your API credentials from [JetAPI Dashboard](https://jetapi.io/login?referral=n8n&subs_slug=jtp_individ&subs_type=temp) (10 days free!)
  Create JetAPI credentials in n8n with your Bearer Token
  Add JetAPI node to your workflow
  Configure the message parameters

  ## Features

  WhatsApp messaging - Send messages via phone number
  Telegram messaging - Send via phone number, username, user ID or group ID

  License
  MIT

ai_documentation_summary:
  {"purpose":"The JetAPI node enables integration with JetAPI to send messages via Telegram and WhatsApp using phone numbers, usernames, user IDs, or group IDs.","capabilities":["Send messages via WhatsApp using a phone number","Send messages via Telegram using phone number, username, user ID, or group ID"],"authentication":"API key (Bearer Token) required from JetAPI Dashboard","commonUseCases":["Sending automated notifications via Telegram or WhatsApp","Customer support messaging through WhatsApp or Telegram","Event reminders or alerts delivered via messaging platforms"],"limitations":[],"relatedNodes":["n8n-nodes-base.telegram","n8n-nodes-base.whatsapp"]}


node_type: n8n-nodes-groner.groner
package_name: n8n-nodes-groner
display_name: Groner
description: Integrate with Groner CRM to manage deals, contacts, tasks, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: ronaldoasevedo
author_github_url: https://github.com/gronerbr/
npm_package_name: n8n-nodes-groner
npm_version: 0.1.35
community_fetched_at: 2026-01-07T20:08:16.004Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Deal",
          "value": "deal"
        },
        {
          "name": "Note",
          "value": "note"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "WhatsApp",
          "value": "whatsapp"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new deal",
          "description": "Create a new deal in Groner"
        },
        {
          "name": "Edit by Property",
          "value": "editByProperty",
          "action": "Edit deal by property",
          "description": "Edit deal by specific property"
        },
        {
          "name": "Get Quote",
          "value": "getQuote",
          "action": "Get deal quote",
          "description": "Get quote information for a deal"
        },
        {
          "name": "Move",
          "value": "move",
          "action": "Move a deal",
          "description": "Move a deal to a different stage"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search for deals",
          "description": "Search deals with filters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "editByProperty",
      "options": [
        {
          "name": "Edit by Property",
          "value": "editByProperty",
          "action": "Edit contact by property",
          "description": "Edit contact by specific property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search tasks",
          "description": "Search for tasks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a note",
          "description": "Add a note to a deal"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "note"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add tags",
          "description": "Add tags to a deal"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send whats app message",
          "description": "Send a WhatsApp message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whatsapp"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new deal",
      "description": "Create a new deal in Groner"
    },
    {
      "name": "Edit by Property",
      "value": "editByProperty",
      "action": "Edit deal by property",
      "description": "Edit deal by specific property"
    },
    {
      "name": "Get Quote",
      "value": "getQuote",
      "action": "Get deal quote",
      "description": "Get quote information for a deal"
    },
    {
      "name": "Move",
      "value": "move",
      "action": "Move a deal",
      "description": "Move a deal to a different stage"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search for deals",
      "description": "Search deals with filters"
    },
    {
      "name": "Edit by Property",
      "value": "editByProperty",
      "action": "Edit contact by property",
      "description": "Edit contact by specific property"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search tasks",
      "description": "Search for tasks"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a note",
      "description": "Add a note to a deal"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add tags",
      "description": "Add tags to a deal"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send whats app message",
      "description": "Send a WhatsApp message"
    }
  ]

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

  # n8n-nodes-groner

  This repository contains custom nodes for integrating n8n with the Groner API (Solar CRM). The Groner node provides comprehensive functionality to manage leads, projects, tasks, and communications within the Groner CRM system.

  ---

  ## 🚀 Main Node

  - **Groner**: Primary node for integration with the Groner API, covering all major CRM operations including lead management, project tracking, task creation, and WhatsApp messaging.

  ## 📋 Available Resources and Operations

  ### 🔗 Available Resources

  | Resource | Description |
  |----------|-------------|
  | **Contact** | Contact/lead management |
  | **Deal** | Deal/project management |
  | **Note** | Note/occurrence addition |
  | **Tag** | Tag management |
  | **Task** | Task creation and search |
  | **WhatsApp** | WhatsApp message sending |

  ### 📊 Operations by Resource

  #### **Deal (Deal/Project)**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Create** | Creates a new deal (lead/project) in Groner | POST |
  | **Search** | Searches deals with advanced filters and pagination | GET |
  | **Edit by Property** | Edits specific properties of a deal | PUT |
  | **Get Quote** | Gets quotes for a specific deal | GET |
  | **Move** | Moves a deal to a different stage | POST |

  #### **Contact (Contact)**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Edit** | Edits contact information | PUT |
  | **Edit by Property** | Edits specific properties of a contact | PUT |

  #### **Task (Task)**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Create** | Creates a new task | POST |
  | **Search** | Searches tasks with filters | GET |

  #### **Note (Note)**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Add** | Adds a note/occurrence to a deal | POST |

  #### **Tag (Tag)**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Add** | Adds tags to a deal | POST |

  #### **WhatsApp**
  | Operation | Description | HTTP Method |
  |-----------|-------------|-------------|
  | **Send** | Sends WhatsApp message | POST |

  ---

  ## 🔧 Prerequisites

  Before installing and using this package, ensure you have the following installed on your development machine:

  ### Required Software
  - **[Git](https://git-scm.com/downloads)** - Version control system
  - **[Node.js](https://nodejs.org/)** - Version 18.10 or higher
  - **[pnpm](https://pnpm.io/)** - Package manager (Version 9.1 or higher)

  ### n8n Installation
  Install n8n globally using pnpm:
  ```bash
  pnpm install n8n -g
  ```

  ### System Requirements
  - **Node.js**: >=18.10
  - **pnpm**: >=9.1
  - **n8n-workflow**: Compatible version

  ---

  ## 📦 Installation

  ### 1. Clone the Repository
  ```bash
  git clone https://github.com/gronerbr/n8n-nodes-groner.git
  cd n8n-nodes-groner
  ```

  ### 2. Install Dependencies
  ```bash
  pnpm install
  ```

  ### 3. Build the Project
  ```bash
  pnpm build
  ```
  This command will:
  - Compile TypeScript files
  - Copy custom icons to the distribution folder
  - Prepare the package for use

  ### 4. Development Mode (Optional)
  For development with automatic recompilation:
  ```bash
  pnpm dev
  ```

  ---

  ## 🔐 Credentials Configuration

  ### Setting Up Groner API Credentials

  1. **Access n8n Credentials**: In your n8n instance, navigate to Settings → Credentials
  2. **Add New Credential**: Click "Add Credential" and select **Groner API**
  3. **Configure Credentials**:
     - **Tenant**: Your Groner subdomain (e.g., `mycompany`)
     - **API Key**: Your Groner API authentication key

  ### Credential Details

  | Field | Type | Required | Description | Example |
  |-------|------|----------|-------------|---------|
  | **Tenant** | String | Yes | Your Groner subdomain identifier | `mycompany` |
  | **API Key** | Password | Yes | Your Groner API authentication token | `groner_api_key_123...` |

  ### API Endpoint Structure
  The node automatically constructs API endpoints using your tenant:
  ```
  https://{tenant}.api.groner.app/api/{endpoint}
  ```

  ---

  ## 🎯 How to Use the Groner Node

  ### Basic Workflow Setup

  1. **Add the Node**: Drag and drop the **Groner** node into your n8n workflow
  2. **Select Resource**: Choose the desired resource (Deal, Contact, Task, etc.)
  3. **Select Operation**: Choose the desired operation from the "Operation" dropdown
  4. **Configure Parameters**: Fill in required and optional fields based on the selected operation
  5. **Execute**: Run the workflow to process the operation

  ### Output Format
  - **Success**: Returns API response data as JSON
  - **Search Operations**: Each returned item becomes an individual n8n item
  - **Error Handling**: Errors are displayed in the node execution panel

  ---

  ## 📖 Detailed Operation Guide

  ### 1. Create Deal

  Creates a new lead or project in Groner with comprehensive tracking capabilities.

  #### Required Fields
  - **Name** (`nome`): Full name of the contact
  - **Email** (`email`): Contact email address
  - **Phone** (`telefone`): Contact phone number
  - **Origin Name or ID** (`codOrigem`): Lead origin (loadOptions)

  #### Optional Fields
  - **Account Value** (`valorConta`): Estimated project value
  - **City** (`cidade`): Contact's city
  - **Document** (`documento`): CPF or CNPJ number
  - **Person Type** (`tipoPessoa`): PF (Individual) or PJ (Company)
  - **State** (`uf`): Brazilian state abbreviation
  - **Responsible Name or ID** (`responsavelId`): Responsible salesperson (loadOptions)
  - **Responsible Email** (`emailResponsavel`): Salesperson email
  - **Note** (`nota`): Initial notes about the lead
  - **Campaign** (`campanha`): Marketing campaign identifier
  - **Advertisement** (`anuncio`): Ad campaign reference
  - **Ad Set** (`conjuntoAnuncios`): Ad group identifier
  - **Lead Tracking Code** (`codigoLeadTracking`): Tracking code for analytics
  - **Trade Name** (`nomeFantasia`): Company trade name (for PJ)
  - **Segment** (`segmento`): Business segment classification
  - **Deal Type Name or ID** (`tipoProjetoId`): Type of solar project (loadOptions)
  - **URL** (`url`): Custom endpoint URL (optional)

  #### Example Usage
  ```json
  {
    "nome": "John Doe",
    "email": "john.doe@example.com",
    "telefone": "+5511999999999",
    "codOrigem": "1",
    "cidade": "São Paulo",
    "documento": "123.456.789-00",
    "tipoPessoa": "F",
    "valorConta": 25000,
    "nota": "Interested in residential solar installation"
  }
  ```

  ### 2. Search Deals

  Searches for existing deals with advanced filtering and pagination.

  #### Filter Parameters
  - **Page Size** (`pageSize`): Items per page (default: 20)
  - **Search** (`query`): Text search across deal data
  - **Criterio** (`criterio`): Search criteria
  - **Filters**:
    - **Deal Type ID** (`dealTypeId`): Filter by project type (loadOptions)
    - **Stage ID** (`stageId`): Filter by sales pipeline stage (loadOptions)
    - **Status ID** (`statusId`): Filter by status (loadOptions)
    - **Responsible Seller ID** (`responsibleSellerId`): Filter by responsible seller (loadOptions)
    - **Responsible Technician ID** (`responsibleTechnicianId`): Filter by responsible technician (loadOptions)
    - **Pre Seller ID** (`preSellerId`): Filter by pre-seller (loadOptions)
  - **Additional Fields**:
    - **Lead ID** (`leadId`): Filter by specific lead
    - **Stores IDs** (`storesIds`): Filter by store locations (multiOptions)
    - **Tags IDs** (`tagsIds`): Filter by specific tags (multiOptions)
    - **Origins IDs** (`originsIds`): Filter by origins (multiOptions)
    - **Status History IDs** (`statusHistoryIds`, `nStatusHistoryIds`): Filter by status history (multiOptions)
    - **Order By** (`orderBy`): Sort criteria
    - **Initial Qualification** (`initialQualification`): Initial qualification (0-10)
    - **Final Qualification** (`finalQualification`): Final qualification (0-10)
    - **Indicator** (`indicator`): Performance indicator
    - **Contact Owner ID** (`contactOwnerId`): Filter by contact owner
    - **Campaign** (`campaign`): Filter by campaign
    - **Advertisement** (`advertisement`): Filter by advertisement
    - **Ad Set** (`adSet`): Filter by ad set
  - **Location**:
    - **City** (`city`): Filter by city
    - **State** (`state`): Filter by state
  - **Financial**:
    - **Initial Power** (`initialPower`): Initial power in kW
    - **Final Power** (`finalPower`): Final power in kW
    - **Initial Value** (`initialValue`): Initial project value
    - **Final Value** (`finalValue`): Final project value
    - **Initial Consumption** (`initialConsumption`): Initial consumption in kWh
    - **Final Consumption** (`finalConsumption`): Final consumption in kWh
  - **Dates**:
    - **Start Date** (`startDate`): Start date
    - **End Date** (`endDate`): End date
    - **Initial Closing Forecast Date** (`initialClosingForecastDate`): Initial closing forecast date
    - **Final Closing Forecast Date** (`finalClosingForecastDate`): Final closing forecast date
    - **Initial Proposal Date** (`initialProposalDate`): Initial proposal date
    - **Final Proposal Date** (`finalProposalDate`): Final proposal date
    - **Initial Sale Date** (`initialSaleDate`): Initial sale date
    - **Final Sale Date** (`finalSaleDate`): Final sale date
    - **Initial Loss Date** (`initialLossDate`): Initial loss date
    - **Final Loss Date** (`finalLossDate`): Final loss date

  #### Example Usage
  ```json
  {
    "pageSize": 50,
    "query": "solar installation",
    "filters": {
      "stageId": "1",
      "statusId": "2"
    },
    "financial": {
      "initialValue": 10000,
      "finalValue": 50000
    }
  }
  ```

  ### 3. Add Tags

  Adds organizational labels to existing deals.

  #### Required Fields
  - **Deal ID** (`dealId`): Deal ID
  - **Tag IDs** (`tagIds`): Array of tag IDs

  #### Example Usage
  ```json
  {
    "dealId": "12345",
    "tagIds": ["1", "2", "3"]
  }
  ```

  ### 4. Add Note

  Adds notes or occurrences to track deal interactions.

  #### Required Fields
  - **Deal ID** (`dealId`): Deal ID
  - **Occurrence** (`ocorrencia`): Note content

  #### Optional Fields
  - **Mentions** (`marcacoes`): Optional user mentions

  #### Example Usage
  ```json
  {
    "dealId": "12345",
    "ocorrencia": "Customer requested quote for 10kW system",
    "marcacoes": "@sales_team"
  }
  ```

  ### 5. Create Task

  Creates tasks linked to deals with assignment capabilities.

  #### Required Fields
  - **Title** (`titulo`): Task title
  - **Type ID** (`tipoId`): Task type identifier (loadOptions)
  - **Status ID** (`statusId`): Task status (loadOptions)
  - **Project ID** (`projetoId`): Associated deal ID
  - **Users IDs** (`usuariosIds`): Assigned user IDs (multiOptions)

  #### Optional Fields
  - **Description** (`descricao`): Task description
  - **Start Date** (`dataInicial`): Task start date (YYYY-MM-DD)
  - **Delivery Date** (`dataEntrega`): Task delivery date (YYYY-MM-DD)

  #### Example Usage
  ```json
  {
    "titulo": "Follow up call",
    "descricao": "Call customer to discuss proposal",
    "tipoId": "1",
    "statusId": "1",
    "projetoId": 12345,
    "usuariosIds": ["user1", "user2"],
    "dataInicial": "2024-01-15",
    "dataEntrega": "2024-01-20"
  }
  ```

  ### 6. Search Tasks

  Searches for tasks with comprehensive filtering options.

  #### Filter Parameters
  - **Page Size** (`pageSize`): Items per page (default: 20)
  - **Search** (`query`): Text search
  - **Additional Fields**:
    - **Lead ID** (`leadId`): Filter by associated lead
    - **Project ID** (`projetoId`): Filter by associated project
    - **Type ID** (`tipoId`): Filter by task type (loadOptions)
    - **Status ID** (`statusId`): Filter by task status (loadOptions)
    - **User ID** (`usuarioId`): Filter by assigned user (loadOptions)
    - **Stores IDs** (`lojasIds`): Filter by store locations (multiOptions)
    - **Order By** (`ordenarPor`): Sort criteria
    - **Start Date** (`dataInicial`): Filter by start date (YYYY-MM-DD)
    - **End Date** (`dataFinal`): Filter by end date (YYYY-MM-DD)
    - **Page Number** (`pageNumber`): Page number

  #### Example Usage
  ```json
  {
    "projetoId": 12345,
    "statusId": "1",
    "pageSize": 20,
    "ordenarPor": "dataCriacao"
  }
  ```

  ### 7. Edit Contact by Property

  Updates specific properties of existing contacts.

  #### Required Fields
  - **Contact ID** (`contactId`): Contact/Lead ID (number)
  - **Property** (`propriedade`): Property name to update (loadOptions)
  - **Value** (`valor`): New property value

  #### Example Usage
  ```json
  {
    "contactId": 12345,
    "propriedade": "email",
    "valor": "new.email@example.com"
  }
  ```

  ### 8. Edit Deal by Property

  Updates specific properties of existing deals.

  #### Required Fields
  - **Deal ID** (`dealId`): Deal ID (number)
  - **Property** (`propriedade`): Property name to update (loadOptions)
  - **Value** (`valor`): New property value

  #### Example Usage
  ```json
  {
    "dealId": 12345,
    "propriedade": "valorConta",
    "valor": "30000"
  }
  ```

  ### 9. Send WhatsApp Message

  Sends WhatsApp messages through Groner's integrated messaging system.

  #### Required Fields
  - **Message** (`mensagem`): Message content

  #### Optional Fields
  - **Lead ID** (`leadId`): Target lead ID (number)
  - **Phone** (`celular`): Direct phone number
  - **Image URL** (`urlImagem`): Image attachment URL
  - **Audio URL** (`urlAudio`): Audio attachment URL
  - **Video URL** (`urlVideo`): Video attachment URL
  - **Document URL** (`urlDocumento`): Document attachment URL
  - **Send to Pre-Seller** (`preVendedor`): Whether to send to Pre-Seller (boolean)
  - **Send to Seller** (`vendedor`): Whether to send to Seller (boolean)
  - **Send to Technician** (`tecnico`): Whether to send to Technician (boolean)
  - **Send to Lead** (`lead`): Whether to send to Lead (boolean)

  #### Example Usage
  ```json
  {
    "leadId": 12345,
    "mensagem": "Hello! Here's your solar installation quote.",
    "urlImagem": "https://example.com/quote.pdf",
    "vendedor": true
  }
  ```

  ### 10. Move Deal

  Changes the status/stage of a deal in the sales pipeline.

  #### Required Fields
  - **Deal ID** (`dealId`): Deal ID
  - **Status ID** (`statusId`): New status identifier (loadOptions)

  #### Optional Fields
  - **Validate Status Available** (`validaStatusDisponivel`): Whether to validate if the status is available (boolean)

  #### Example Usage
  ```json
  {
    "dealId": "12345",
    "statusId": "2",
    "validaStatusDisponivel": true
  }
  ```

  ### 11. Get Deal Quote

  Retrieves quotes associated with a specific deal.

  #### Required Fields
  - **Project ID** (`projetoId`): Deal/Project ID

  #### Example Usage
  ```json
  {
    "projetoId": "12345"
  }
  ```

  ---

  ## 🔄 Workflow Examples

  ### Example 1: Process Deals with Content.List

  This example shows how to use Content.List to process multiple deals:

  ```
  [Groner: Search Deals] → [Content.List] → [Groner: Edit Deal] → [Result]
  ```

  **Content.List Configuration:**
  ```
  Input Data: {{ $json.data }}
  Output Field Name: deal
  ```

  **Edit Deal Configuration:**
  ```
  Resource: Deal
  Operation: Edit by Property
  Deal ID: {{ $json.deal.id }}
  Property: valorConta
  Value: {{ $json.deal.valorConta * 1.1 }}
  ```

  ### Example 2: Complete Follow-up Workflow

  ```
  [Groner: Search Deals] → [IF] → [Groner: Add Note] → [Groner: Send WhatsApp]
  ```

  **IF Condition:**
  ```
  {{ $json.status === "Em Negociação" }}
  ```

  ---

  ## 🔧 Development Scripts

  | Script | Description |
  |--------|-------------|
  | `pnpm build` | Compiles TypeScript and copies icons |
  | `pnpm dev` | Runs TypeScript compiler in watch mode |
  | `pnpm lint` | Checks for linting issues |
  | `pnpm lintfix` | Automatically fixes linting issues |
  | `pnpm format` | Formats code using Prettier |
  | `pnpm prepublishOnly` | Builds and lints before publishing |

  ---

  ## 📁 Project Structure

  ```
  n8n-nodes-groner/
  ├── credentials/
  │   └── GronerApi.credentials.ts    # API authentication
  ├── nodes/
  │   └── Groner/
  │       ├── loadOptions/            # Dynamic options
  │       │   ├── getStatuses.ts      # Status options
  │       │   ├── getOrigins.ts       # Origin options
  │       │   ├── getResponsibles.ts  # Responsible user options
  │       │   ├── getDealTypes.ts     # Deal type options
  │       │   ├── getTags.ts          # Tag options
  │       │   ├── getStores.ts        # Store options
  │       │   ├── getEtapas.ts        # Stage options
  │       │   ├── getTaskTypes.ts     # Task type options
  │       │   ├── getTaskStatuses.ts  # Task status options
  │       │   ├── getContactProperties.ts # Contact property options
  │       │   └── getDealProperties.ts    # Deal property options
  │       ├── Groner.node.ts          # Main node file
  │       └── logogroner.svg          # Custom icon
  ├── package.json                    # Project configuration
  ├── tsconfig.json                   # TypeScript configuration
  └── gulpfile.js                     # Build configuration
  ```

  ---

  ## ⚠️ Important Notes

  ### API Response Handling
  - **Search Operations**: Each item returned by the API becomes an individual n8n item for easy processing
  - **Error Handling**: API errors are displayed in the node execution panel with detailed error messages
  - **Authentication**: Uses Bearer token authentication with your API key

  ### Load Options
  The node provides dynamic loading of options for various fields:
  - **Statuses**: Available deal statuses
  - **Origins**: Lead origin sources
  - **Responsibles**: Available users/responsible persons
  - **Deal Types**: Types of projects/deals
  - **Tags**: Available tags/labels
  - **Stores**: Store locations
  - **Etapas**: Sales pipeline stages
  - **Task Types**: Types of tasks
  - **Task Statuses**: Task status options
  - **Contact Properties**: Available contact properties
  - **Deal Properties**: Available deal properties

  ### Custom Icon
  - The node displays the Groner logo if the `logogroner.svg` file is present in the node directory
  - The icon is automatically copied during the build process

  ### Data Validation
  - Empty fields are automatically removed from API requests
  - Required fields are validated before sending requests
  - Date formats should follow YYYY-MM-DD standard
  - Arrays are automatically converted to comma-separated strings for API compatibility

  ### Rate Limiting
  - Be aware of Groner API rate limits
  - Implement appropriate delays between requests in high-volume workflows

  ---

  ## 🤝 Contributing

  We welcome contributions! Here's how you can help:

  ### Reporting Issues
  - Use the GitHub issue tracker
  - Provide detailed error messages and steps to reproduce
  - Include your n8n version and node configuration

  ### Submitting Pull Requests
  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run `pnpm lint` and `pnpm build`
  5. Submit a pull request with detailed description

  ### Development Guidelines
  - Follow TypeScript best practices
  - Maintain consistent code formatting
  - Add appropriate error handling
  - Include field validation where necessary

  ---

  ## 📄 License

  This project is licensed under the [MIT License](LICENSE.md).

  ---

  ## 📞 Support

  For support and questions:
  - **Email**: contato@gronercrm.com.br
  - **GitHub Issues**: [Create an issue](https://github.com/gronerbr/n8n-nodes-groner/issues)
  - **Documentation**: This README and inline code comments

  ---

  ## 🌐 Language Versions

  - **[English Version](README.md)** (Current)
  - **[Portuguese Version](README_PT.md)**

  ---

  ## 🔄 Version History

  - **v0.1.18**: Current version with comprehensive CRM operations and updated field structure
  - **v0.1.17**: Added WhatsApp messaging capabilities
  - **v0.1.16**: Enhanced search and filtering options
  - **v0.1.15**: Improved error handling and validation
  - **v0.1.14**: Initial release with basic operations

  For detailed changelog, see the [GitHub releases](https://github.com/gronerbr/n8n-nodes-groner/releases).

ai_documentation_summary:
  {"purpose":"The Groner node enables integration between n8n and the Groner CRM (Solar CRM) to manage contacts, deals, tasks, notes, tags, and WhatsApp messaging, allowing automation of CRM operations through workflows.","capabilities":["Create and edit deals (projects)","Search deals with filters and pagination","Create and manage contacts","Create and search tasks","Add notes and tags to deals","Send WhatsApp messages"],"authentication":"API key required with tenant subdomain (e.g., 'mycompany') and API key credentials configured in n8n settings","commonUseCases":["Automating lead creation from forms or emails","Tracking sales pipelines with deal staging and movement","Scheduling tasks and follow-ups","Adding notes and tags to deals for better organization","Sending automated WhatsApp messages to contacts"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-http-request"]}


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

updated_at: 2026-01-07 20:08:16
author_name: petem
author_github_url: https://github.com/docusealco/n8n-nodes-docuseal.git
npm_package_name: @docuseal/n8n-nodes-docuseal
npm_version: 1.0.2
community_fetched_at: 2026-01-07T20:08:16.009Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createSubmission",
      "options": [
        {
          "name": "Create Submission",
          "value": "createSubmission",
          "action": "Create submission",
          "description": "Create a signature request from template"
        },
        {
          "name": "Create Submission From DOCX",
          "value": "createSubmissionFromDocx",
          "action": "Create submission from DOCX",
          "description": "Create a signature request from DOCX file with dynamic variables"
        },
        {
          "name": "Create Submission From HTML",
          "value": "createSubmissionFromHtml",
          "action": "Create submission from HTML",
          "description": "Create a signature request from HTML content"
        },
        {
          "name": "Create Submission From PDF",
          "value": "createSubmissionFromPdf",
          "action": "Create submission from PDF",
          "description": "Create a signature request from PDF document"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

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

npm_readme:
  # n8n-nodes-docuseal

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

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

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

  ## Table of Contents

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

  ## Installation

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

  ### Community Nodes (Recommended)

  For n8n cloud or instances with UI access:

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

  ### npm Installation

  To install manually in your n8n root directory:

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

  ### Docker Installation

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

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

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

  ## Operations

  This package includes two nodes:

  ### DocuSeal Node

  The main node for creating and managing signature requests.

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

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

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

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

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

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

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

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

  ### DocuSeal Trigger Node

  Webhook-based trigger for DocuSeal events.

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

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

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

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

  ## Credentials

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

  ### Getting Your API Key

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

  ### Setting Up Credentials in n8n

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

  ### Authentication Methods

  This node supports two authentication methods:

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

  ## Compatibility

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

  ## Usage Examples

  ### Example 1: Automated Contract Signing

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

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

  ### Example 2: Onboarding Automation

  Automatically send onboarding documents to new employees:

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

  ### Example 3: Document Archive Workflow

  Archive completed documents automatically:

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

  ### Example 4: Multi-Party Signing

  Send documents requiring multiple signatures in sequence:

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

  ## Advanced Features

  ### Pre-filling Form Fields

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

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

  ### Custom Email Notifications

  Customize the email sent to signers:

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

  ### Metadata and External IDs

  Track your documents by adding:

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

  ### Expiration Dates

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

  ## Troubleshooting

  ### 🧩 Common Issues

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

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

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

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

  ### Getting Help

  If you encounter issues:

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

  ## Resources

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

  ## Support

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

  ## License

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

ai_documentation_summary:
  {"purpose":"The DocuSeal node enables integration with the DocuSeal document signing platform, allowing users to create and manage electronic signature requests from templates, DOCX, HTML, or PDF files, and trigger workflows when signatures are completed.","capabilities":["Create signature requests from existing templates","Create signature requests from DOCX or PDF files with dynamic content","Generate signature requests from HTML content with custom headers/footers and page size options","Support for multiple signers with defined roles and signing order (sequential or random)","Pre-fill form fields with dynamic variables","Set expiration dates and customize email notifications","Merge multiple documents or PDFs","Flatten or preserve PDF form fields","Trigger workflows on signing completion (single signer or all signers)","Support for both Access Token and OAuth2 authentication"],"authentication":"API key (Access Token) required; OAuth2 is also supported for more secure integrations","commonUseCases":["Automated contract signing based on CRM events","Onboarding new employees with document signing workflows","Archiving completed signed documents to cloud storage","Multi-party document signing with sequential or random signing order"],"limitations":[],"relatedNodes":["CRM triggers","Email nodes","HTTP Request nodes","Google Drive nodes","Webhook triggers"]}


node_type: n8n-nodes-get-transcribe.getTranscribe
package_name: n8n-nodes-get-transcribe
display_name: GetTranscribe
description: Interact with GetTranscribe API to transcribe videos from social media platforms
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: danielevz
author_github_url: https://github.com/get-transcribe/
npm_package_name: n8n-nodes-get-transcribe
npm_version: 0.1.4
community_fetched_at: 2026-01-07T20:08:16.011Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcription",
      "options": [
        {
          "name": "Transcription",
          "value": "transcription"
        },
        {
          "name": "Folder",
          "value": "folder"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a transcription",
          "description": "Create a new transcription from a video URL"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a transcription",
          "description": "Get a transcription by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List transcriptions",
          "description": "List all transcriptions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a folder",
          "description": "Create a new folder"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List folders",
          "description": "List all folders"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a folder",
          "description": "Update a folder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get user info",
          "description": "Get user information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a transcription",
      "description": "Create a new transcription from a video URL"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a transcription",
      "description": "Get a transcription by ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List transcriptions",
      "description": "List all transcriptions"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a folder",
      "description": "Create a new folder"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List folders",
      "description": "List all folders"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a folder",
      "description": "Update a folder"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get user info",
      "description": "Get user information"
    }
  ]

npm_readme:
  # n8n-nodes-get-transcribe

  This is an n8n node for integrating with the GetTranscribe API, which allows you to transcribe videos from social media platforms like Instagram, TikTok, YouTube, and more.

  ## Features

  ### Transcriptions
  - **Create**: Create a new transcription from a video URL
  - **Get**: Get a specific transcription by ID
  - **List**: List all transcriptions with optional filters

  ### Folders
  - **Create**: Create new folders to organize transcriptions
  - **List**: List all folders
  - **Update**: Update properties of existing folders

  ### User
  - **Get**: Get user information and account statistics

  ## Installation

  ### Installation on n8n Cloud

  1. Go to **Settings** > **Community Nodes**
  2. Search for `n8n-nodes-get-transcribe`
  3. Click **Install**

  ### Installation on self-hosted n8n

  1. Go to your n8n installation root directory
  2. Run: `npm install n8n-nodes-get-transcribe`
  3. Restart n8n

  ## Configuration

  ### Credentials

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

  1. In n8n, go to **Credentials** and create new credentials of type **GetTranscribe API**
  2. Enter your **API Key** from GetTranscribe
     - You can find your API Key in your GetTranscribe account settings
     - The API Key should have the format: `gt_...`

  ### Credential test URL

  The node will automatically verify your credentials by making a request to `/users/me` on the GetTranscribe API.

  ## Usage

  ### Create a Transcription

  1. Add the **GetTranscribe** node to your workflow
  2. Select **Transcription** as resource
  3. Select **Create** as operation
  4. Enter the URL of the video you want to transcribe
  5. Optionally, select a folder ID to organize the transcription

  Supported URL examples:
  - Instagram: `https://www.instagram.com/p/ABC123/`
  - TikTok: `https://www.tiktok.com/@user/video/123456789`
  - YouTube: `https://www.youtube.com/watch?v=ABC123`

  ### List Transcriptions

  1. Select **Transcription** as resource
  2. Select **List** as operation
  3. Configure optional filters:
     - **Limit**: Maximum number of results
     - **Skip**: Number of results to skip (for pagination)
     - **Folder ID**: Filter by specific folder
     - **Platform**: Filter by platform (Instagram, TikTok, YouTube)

  ### Folder Management

  #### Create Folder
  1. Select **Folder** as resource
  2. Select **Create** as operation
  3. Enter the folder name
  4. Optionally, specify a parent folder ID to create subfolders

  #### List Folders
  1. Select **Folder** as resource
  2. Select **List** as operation
  3. Configure the result limit

  ### User Information

  1. Select **User** as resource
  2. Select **Get** as operation
  3. Enter your user ID (you can use your own ID)

  ## API Response

  ### Transcription

  ```json
  {
    "id": 4032,
    "user_id": 2,
    "transcription": "Transcribed text from the video...",
    "platform": "instagram",
    "url": "https://www.instagram.com/p/DM1P8q1MzaG/",
    "thumbnail_url": "https://...",
    "download_video_url": "https://...",
    "download_audio_url": "https://...",
    "duration": "0:30",
    "duration_seconds": 30.159864,
    "word_count": 91,
    "char_count": 515,
    "folder_id": null,
    "transcription_analysis": null,
    "original_transcription": "Original text...",
    "transcription_segments": [...],
    "transcription_words": [...],
    "created_at": "2025-08-07T17:43:15.822Z",
    "updated_at": "2025-08-07T17:43:15.822Z"
  }
  ```

  ## Workflow Examples

  ### Automatic Transcription from Webhook

  1. **Webhook Trigger** - Receives video URLs
  2. **GetTranscribe Node** - Transcribes the video
  3. **Set Node** - Processes the transcribed text
  4. **HTTP Request** - Sends the transcription to another service

  ### Batch Processing

  1. **Schedule Trigger** - Runs periodically
  2. **GetTranscribe Node** - Lists pending transcriptions
  3. **If Node** - Checks if there are new transcriptions
  4. **Loop** - Processes each transcription

  ## Support

  - **Documentation**: [https://www.gettranscribe.ai/n8n-transcription-instagram-tiktok-automation](https://www.gettranscribe.ai/n8n-transcription-instagram-tiktok-automation)
  - **Support**: [support@gettranscribe.ai](mailto:daniel@gettranscribe.ai)
  - **GitHub**: [https://github.com/get-transcribe/n8n-nodes-get-transcribe](https://github.com/get-transcribe/n8n-nodes-get-transcribe)

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

  ## Contributors

  Thanks to all the people who have contributed to this project:

  - [danielevz](https://github.com/emeagenciadigital) - Contributor

  ## License

  MIT

  ## Changelog

  ### v0.1.1
  - Updated GitHub repository URLs in package.json

  ### v0.1.0
  - Initial release
  - Support for transcriptions (create, get, list)
  - Support for folders (create, list, update)
  - Support for user information
  - API Key authentication

ai_documentation_summary:
  {"purpose":"The GetTranscribe node integrates with the GetTranscribe API to transcribe videos from social media platforms like Instagram, TikTok, and YouTube, enabling users to extract text from video content and organize it using folders or user-specific data.","capabilities":["Create a new transcription from a video URL","Retrieve a specific transcription by ID","List all transcriptions with optional filters (limit, skip, folder ID, platform)","Create and manage folders to organize transcriptions","Update folder properties","Retrieve user information and account statistics"],"authentication":"API key required (format: gt_...)","commonUseCases":["Automatically transcribe videos from social media platforms via webhooks","Batch process multiple videos using scheduled workflows","Organize transcriptions by platform or folder for better data management","Extract and send transcribed text to other services via HTTP requests"],"limitations":[],"relatedNodes":["Webhook","Set","HTTP Request","Loop","If Node"]}


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

updated_at: 2026-01-07 20:08:16
author_name: mjfk
author_github_url: https://github.com/moorcheh-ai/
npm_package_name: n8n-nodes-moorcheh
npm_version: 0.1.2
community_fetched_at: 2026-01-07T20:08:16.012Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "namespace",
      "options": [
        {
          "name": "Answer",
          "value": "answer"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Namespace",
          "value": "namespace"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Vector",
          "value": "vector"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new namespace",
          "description": "Create a new namespace"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all namespaces",
          "description": "List all namespaces"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a namespace",
          "description": "Delete a namespace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "namespace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload documents to a namespace",
          "description": "Upload documents to a namespace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get documents from a namespace",
          "description": "Get documents from a namespace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete documents from a namespace",
          "description": "Delete documents from a namespace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload vectors to a namespace",
          "description": "Upload vectors to a namespace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete vectors from a namespace",
          "description": "Delete vectors from a namespace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vector"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search across namespaces",
          "description": "Search across namespaces"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate AI answer based on namespace content",
          "description": "Generate AI answer based on namespace content"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "answer"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new namespace",
      "description": "Create a new namespace"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all namespaces",
      "description": "List all namespaces"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a namespace",
      "description": "Delete a namespace"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload documents to a namespace",
      "description": "Upload documents to a namespace"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get documents from a namespace",
      "description": "Get documents from a namespace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete documents from a namespace",
      "description": "Delete documents from a namespace"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload vectors to a namespace",
      "description": "Upload vectors to a namespace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete vectors from a namespace",
      "description": "Delete vectors from a namespace"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search across namespaces",
      "description": "Search across namespaces"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate AI answer based on namespace content",
      "description": "Generate AI answer based on namespace content"
    }
  ]

npm_readme:
  # n8n-nodes-moorcheh

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

  This is an [n8n](https://n8n.io/) Official node interfacing with [Moorcheh](https://moorcheh.ai).

  Moorcheh is a powerful vector store and AI platform that enables semantic search, document storage, and AI-powered question answering across your 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)  
  [Compatibility](#compatibility)  
  [Usage](#usage)  
  [Resources](#resources)  

  ## Installation

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

  ## Operations

  ### Namespace Operations
  - **[Create](https://console.moorcheh.ai/docs/create-namespace/api-call)**: Create a new namespace for storing documents or vectors
  - **[List](https://console.moorcheh.ai/docs/list-namespaces/api-call)**: List all available namespaces
  - **[Delete](https://console.moorcheh.ai/docs/delete-namespace/api-call)**: Delete a namespace and all its contents

  ### Document Operations
  - **[Upload](https://console.moorcheh.ai/docs/upload-text-data/api-call)**: Upload documents to a namespace for semantic search
  - **[Get](https://console.moorcheh.ai/docs/get-documents/api-call)**: Retrieve specific documents by their IDs
  - **[Delete](https://console.moorcheh.ai/docs/delete-data/api-call)**: Delete documents from a namespace

  ### Vector Operations
  - **[Upload](https://console.moorcheh.ai/docs/upload-vector-data/api-call)**: Upload vector embeddings to a namespace
  - **[Delete](https://console.moorcheh.ai/docs/delete-data/api-call)**: Delete vectors from a namespace

  ### Search Operations
  - **[Search](https://console.moorcheh.ai/docs/search/api-call)**: Perform semantic search across namespaces using text queries or vector embeddings

  ### Answer Operations
  - **[Generate](https://console.moorcheh.ai/docs/gen-ai-answer/api-call)**: Generate AI-powered answers based on namespace content using various LLM models

  ## Credentials

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

  1. Sign up for a Moorcheh account at [console.moorcheh.ai](https://console.moorcheh.ai)
  2. Navigate to your API settings
  3. Generate an API key
  4. Use the API key in the Moorcheh credentials in n8n

  ## Compatibility

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

  ## Usage

  ### Creating a Namespace
  1. Select the "Namespace" resource
  2. Choose "Create" operation
  3. Enter a namespace name
  4. Select the type (Text or Vector)
  5. For vector namespaces, specify the vector dimension

  ### Uploading Documents
  1. Select the "Document" resource
  2. Choose "Upload" operation
  3. Enter the namespace name
  4. Add documents with ID, text content, and optional metadata

  ### Searching Content
  1. Select the "Search" resource
  2. Choose "Search" operation
  3. Enter your query (text or comma-separated vector values)
  4. Specify target namespaces
  5. Set top_k and threshold parameters

  ### Generating AI Answers
  1. Select the "Answer" resource
  2. Choose "Generate" operation
  3. Enter the namespace name
  4. Provide your question
  5. Select an AI model and configure parameters

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Moorcheh API Documentation](https://console.moorcheh.ai/docs)
  * [Moorcheh Console](https://console.moorcheh.ai)

ai_documentation_summary:
  {"purpose":"The Moorcheh node enables n8n users to interact with the Moorcheh Vector Store API for managing namespaces, uploading and retrieving documents and vectors, performing semantic searches, and generating AI-powered answers based on stored data.","capabilities":["Create, list, and delete namespaces (text or vector type)","Upload and retrieve documents with metadata","Upload and delete vector embeddings","Perform semantic search using text queries or vector inputs","Generate AI-powered answers using supported LLM models"],"authentication":"API key required","commonUseCases":["Storing and searching unstructured documents with semantic relevance","Building AI-powered question-answering systems using stored data","Managing vector embeddings for machine learning applications","Automating document ingestion and retrieval workflows"],"limitations":[],"relatedNodes":["n8n-nodes-base","n8n-nodes-webhook","n8n-nodes-ai"]}


node_type: n8n-nodes-anny.anny
package_name: n8n-nodes-anny
display_name: Anny
description: Interact with the anny booking platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: lucianholt
author_github_url: https://github.com/anny-co/anny-n8n.git
npm_package_name: n8n-nodes-anny
npm_version: 1.1.2
community_fetched_at: 2026-01-07T20:08:16.013Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "booking",
      "options": [
        {
          "name": "Availability",
          "value": "availability"
        },
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Order",
          "value": "order"
        },
        {
          "name": "Plan Subscription",
          "value": "planSubscription"
        },
        {
          "name": "Resource",
          "value": "resource"
        },
        {
          "name": "Service",
          "value": "service"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUpcomingIntervals",
      "options": [
        {
          "name": "Get End Times",
          "value": "getEndTimes",
          "action": "Get end times",
          "description": "Get all interval end dates for a start datetime"
        },
        {
          "name": "Get Start Times",
          "value": "getStartTimes",
          "action": "Get start times",
          "description": "Get all interval start dates for a given date"
        },
        {
          "name": "Get Upcoming Intervals",
          "value": "getUpcomingIntervals",
          "action": "Get upcoming intervals",
          "description": "Get a list of upcoming available intervals"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel booking",
          "description": "Cancel an existing booking"
        },
        {
          "name": "Check In",
          "value": "checkIn",
          "action": "Check in booking",
          "description": "Check in a customer for their booking"
        },
        {
          "name": "Check Out",
          "value": "checkOut",
          "action": "Check out booking",
          "description": "Check out a customer from their booking"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get booking",
          "description": "Get a single booking by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many bookings",
          "description": "Get multiple bookings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create customer",
          "description": "Create a new customer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete customer",
          "description": "Delete an existing customer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get customer",
          "description": "Get a single customer by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many customers",
          "description": "Get multiple customers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update customer",
          "description": "Update an existing customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get order",
          "description": "Get a single order by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many orders",
          "description": "Get multiple orders"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "order"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get invoice",
          "description": "Get a single invoice by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "description": "Get multiple invoices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get service",
          "description": "Get a single service by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many services",
          "description": "Get multiple services"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "service"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get resource",
          "description": "Get a single resource by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many resources",
          "description": "Get multiple resources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get plan subscription",
          "description": "Get a single plan subscription by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many plan subscriptions",
          "description": "Get multiple plan subscriptions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "planSubscription"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get End Times",
      "value": "getEndTimes",
      "action": "Get end times",
      "description": "Get all interval end dates for a start datetime"
    },
    {
      "name": "Get Start Times",
      "value": "getStartTimes",
      "action": "Get start times",
      "description": "Get all interval start dates for a given date"
    },
    {
      "name": "Get Upcoming Intervals",
      "value": "getUpcomingIntervals",
      "action": "Get upcoming intervals",
      "description": "Get a list of upcoming available intervals"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel booking",
      "description": "Cancel an existing booking"
    },
    {
      "name": "Check In",
      "value": "checkIn",
      "action": "Check in booking",
      "description": "Check in a customer for their booking"
    },
    {
      "name": "Check Out",
      "value": "checkOut",
      "action": "Check out booking",
      "description": "Check out a customer from their booking"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get booking",
      "description": "Get a single booking by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many bookings",
      "description": "Get multiple bookings"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create customer",
      "description": "Create a new customer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete customer",
      "description": "Delete an existing customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get customer",
      "description": "Get a single customer by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many customers",
      "description": "Get multiple customers"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update customer",
      "description": "Update an existing customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get order",
      "description": "Get a single order by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many orders",
      "description": "Get multiple orders"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get invoice",
      "description": "Get a single invoice by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "description": "Get multiple invoices"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get service",
      "description": "Get a single service by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many services",
      "description": "Get multiple services"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get resource",
      "description": "Get a single resource by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many resources",
      "description": "Get multiple resources"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get plan subscription",
      "description": "Get a single plan subscription by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many plan subscriptions",
      "description": "Get multiple plan subscriptions"
    }
  ]

npm_readme:
  # n8n-nodes-anny

  This is an n8n community node for the [anny](https://anny.co) booking platform. It lets you manage bookings, customers, orders, invoices, resources, and services, plus react to anny webhooks inside n8n.

  anny offers scheduling, payments, and resource management for online booking flows.

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

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

  ## Installation

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

  ## Operations

  - Bookings: get, list (with filters), cancel, check-in, check-out
  - Customers: create, get, list (with filters), update, delete
  - Orders, invoices, plan subscriptions, services, resources: get and list with filters and includes
  - Availability: get upcoming intervals for a resource/service combination
  - API Call: run arbitrary requests against `/api/*` with custom method, params, headers, and body
  - Triggers: webhooks for bookings (created/started/ended/updated/checked-in/checked-out/cancelled/deleted), customers (created/updated/deleted), orders (created/updated/deleted), invoices (created/updated/deleted)

  ## Credentials

  - Uses OAuth2 with preconfigured scopes; only pick your region (anny.co, anny.eu, staging, or local) and complete the OAuth flow.
  - The credential tests by fetching your user profile from the selected region.

  ## Compatibility

  - Built with nodes API v1 via `@n8n/node-cli` 0.13.0 (`n8n-workflow` 1.113.0).
  - Tested locally with n8n 1.x; use a current n8n release for best results.

  ## Usage

  - Add the **anny OAuth2 API** credential first; choose the right region and finish the OAuth consent.
  - Use **anny Booking** to create or manage bookings; include related data via the `include` field when needed.
  - Use the trigger nodes to subscribe to anny webhooks automatically; they create and clean up webhook subscriptions for the selected events.
  - For unsupported endpoints, use **anny API Call** to hit any `/api/v1/*` path with custom parameters.

  ## Resources

  - [anny API documentation](https://docs.anny.co)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## Version history

  - 0.1.0: Initial release of the anny node pack (bookings, customers, orders, invoices, plan subscriptions, resources, services, triggers, and generic API call).

ai_documentation_summary:
  {"purpose":"The Anny node enables integration with the anny booking platform to manage bookings, customers, orders, invoices, resources, and services, and to react to webhooks in n8n workflows.","capabilities":["Manage bookings (create, list, cancel, check-in, check-out)","Manage customers (create, get, list, update, delete)","Retrieve and list orders, invoices, plan subscriptions, services, and resources with filters and includes","Check availability of resources and services","Send arbitrary API requests to /api/* endpoints with custom methods, headers, and body","React to anny webhooks for bookings, customers, orders, and invoices (created, updated, deleted, checked-in, checked-out, cancelled, etc.)"],"authentication":"OAuth2 with preconfigured scopes; users must select a region (anny.co, anny.eu, staging, or local) and complete the OAuth consent flow. The credential test fetches the user profile from the selected region.","commonUseCases":["Automating booking creation and management","Syncing customer data across systems","Triggering workflows on booking or customer events via webhooks","Managing invoices and order statuses","Checking resource availability before scheduling"],"limitations":[],"relatedNodes":["Webhook triggers","API call nodes","Customer management nodes","Booking management nodes"]}


node_type: @seclore/n8n-nodes-seclore.secloreProtect
package_name: @seclore/n8n-nodes-seclore
display_name: Seclore
description: Protect files using Seclore DRM
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: seclore_admin
author_github_url: https://github.com/seclore-tech/n8n-nodes-seclore.git
npm_package_name: @seclore/n8n-nodes-seclore
npm_version: 1.0.8
community_fetched_at: 2026-01-07T20:08:16.013Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "drmProtection",
      "options": [
        {
          "name": "DRM Protection",
          "value": "drmProtection",
          "description": "DRM file protection operations"
        },
        {
          "name": "DRM Unprotection",
          "value": "drmUnprotection",
          "description": "DRM file unprotection operations"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "protectWithHotFolder",
      "options": [
        {
          "name": "Protect Using Policy",
          "value": "protectWithHotFolder",
          "action": "Protect file using policy",
          "description": "Protect a file using HotFolder ID configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "drmProtection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "unprotect",
      "options": [
        {
          "name": "Unprotect",
          "value": "unprotect",
          "action": "Unprotect file",
          "description": "Unprotect a protected file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "drmUnprotection"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Protect Using Policy",
      "value": "protectWithHotFolder",
      "action": "Protect file using policy",
      "description": "Protect a file using HotFolder ID configuration"
    },
    {
      "name": "Unprotect",
      "value": "unprotect",
      "action": "Unprotect file",
      "description": "Unprotect a protected file"
    }
  ]

npm_readme:
  # n8n-nodes-seclore

  This is an n8n community node. It lets you use Seclore DRM Server in your n8n workflows.

  [Seclore](https://www.seclore.com) is a leading data-centric security platform that provides enterprise-grade Digital Rights Management (DRM) capabilities to protect sensitive files and documents throughout their lifecycle.

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

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

  ## Installation

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

  Use `n8n-nodes-seclore` as the package name.

  ## Operations

  This node supports the following operations with Seclore DRM Server:

  ### DRM Protection
  #### Protect using Policy
  - **Description**: Protects files using Seclore's HotFolder ID configuration and policy-based protection
  - **Required Parameters**:
    - **HotFolder ID**: The ID of the HotFolder configuration to use for protection
    - **Input Binary Property**: Name of the binary property containing the file to protect (default: 'data')
  - **Output**: Protected file with DRM protection applied according to the specified policy


  ### DRM Unprotection
  #### Unprotect
  - **Description**: Removes DRM protection from Seclore-protected files
  - **Required Parameters**:
    - **Input Binary Property**: Name of the binary property containing the protected file (default: 'data')
  - **Output**: Unprotected original file content


  ## Credentials

  To use this node, you need to authenticate with your Seclore DRM Server. The following credentials are required:

  ### Prerequisites
  - Access to a Seclore DRM Server instance
  - Valid tenant credentials (Tenant ID and Tenant Secret)
  - Appropriate permissions for file protection/unprotection operations

  ### Authentication Setup
  1. **Base URL**: The base URL of your Seclore DRM Server (e.g., `https://api.seclore.com`)
  2. **Tenant ID**: Your unique Seclore tenant identifier
  3. **Tenant Secret**: Your tenant's secret key for API authentication

  ### Configuration Steps
  1. In n8n, go to **Credentials** → **Create New**
  2. Search for "Seclore API" and select it
  3. Fill in your Seclore DRM Server details:
     - **Base URL**: Enter your Seclore DRM Server base URL
     - **Tenant ID**: Provide your unique tenant identifier
     - **Tenant Secret**: Enter your tenant's secret key (will be masked for security)
  4. Test the connection to ensure credentials are valid (tests against `/seclore/drm/1.0/auth/login` endpoint)
  5. Save the credentials for use in your workflows

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with n8n versions**: 1.0.0+
  - **Node.js version**: 18.x or higher
  - **Seclore API version**: Compatible with Seclore DRM API v1.0

  ## Usage

  ### Basic Workflow Examples

  #### Protecting Files with Policy
  1. Use a trigger node to receive files (HTTP Request, File Trigger, etc.)
  2. Add the **Seclore** node to your workflow
  3. Configure the node:
     - **Resource**: Select "DRM Protection"
     - **Operation**: Select "Protect using Policy"
     - **HotFolder ID**: Enter your HotFolder configuration ID
     - **Input Binary Property**: Specify the binary property name (default: 'data')
  4. Configure your Seclore API credentials
  5. The node will return the protected file with DRM encryption applied according to your policy

  #### Unprotecting Files
  1. Receive protected Seclore files in your workflow
  2. Add the **Seclore** node to your workflow
  3. Configure the node:
     - **Resource**: Select "DRM Unprotection"
     - **Operation**: Select "Unprotect"
     - **Input Binary Property**: Specify the binary property containing the protected file (default: 'data')
  4. Configure your Seclore API credentials
  5. The node will return the original unprotected file content

  ### Important Notes
  - Ensure your Seclore DRM Server is accessible from your n8n instance
  - File operations may take time depending on file size and server performance
  - Always handle errors appropriately in your workflows
  - Protected files can only be unprotected by authorized users with proper credentials
  - HotFolder ID must be configured in your Seclore Policy Server before using protection operations
  - The node supports binary data processing for both input and output files

  ### Error Handling
  The node includes comprehensive error handling and logging:
  - Connection failures to Seclore server
  - Authentication errors
  - File processing errors
  - Automatic cleanup of temporary files

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Seclore Official Documentation](https://docs.seclore.com/)
  * [Seclore Support](https://support.seclore.com/)

  ## License

  Refer the [LICENSE.md](LICENSE.md) file for details.

  ## Support

  For issues related to this n8n node:
  - Create an issue in this repository
  - Contact: support@seclore.com

  For Seclore platform support:
  - Visit [Seclore Support Portal](https://support.seclore.com/)
  - Check [Seclore Documentation](https://docs.seclore.com/)

ai_documentation_summary:
  {"purpose":"The Seclore n8n node enables workflow automation for protecting and unprotecting files using Seclore's Digital Rights Management (DRM) service, allowing secure file handling with policy-based encryption and decryption.","capabilities":["Protect files using a specified HotFolder ID and policy-based DRM protection","Remove DRM protection from Seclore-protected files","Process binary file data for both input and output operations"],"authentication":"API key required via Tenant ID and Tenant Secret; authentication is performed against the Seclore DRM Server using the base URL and credentials","commonUseCases":["Securing sensitive documents with policy-based DRM protection in data-sharing workflows","Automating the unprotection of files for authorized users in compliance or access workflows","Integrating with file triggers or HTTP requests to protect or unprotect files dynamically"],"limitations":["HotFolder ID must be pre-configured in the Seclore Policy Server","File operations may be slow for large files due to server processing time","Only authorized users with proper credentials can unprotect files","No support for custom policies or advanced DRM features beyond those defined in HotFolder configurations"],"relatedNodes":["File Trigger","HTTP Request","Set","Function"]}


node_type: n8n-nodes-upload-post.uploadPost
package_name: n8n-nodes-upload-post
display_name: Upload Post
description: Upload content to social media via Upload-Post API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-01-07 20:08:16
author_name: upload-post
author_github_url: https://github.com/Upload-Post/
npm_package_name: n8n-nodes-upload-post
npm_version: 0.1.33
community_fetched_at: 2026-01-07T20:08:16.014Z
ai_summary_generated_at: 2026-01-08 10:45:32
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "uploads",
      "options": [
        {
          "name": "Upload",
          "value": "uploads"
        },
        {
          "name": "Status & History",
          "value": "monitoring"
        },
        {
          "name": "User",
          "value": "users"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadPhotos",
      "options": [
        {
          "name": "Upload Photo(s)",
          "value": "uploadPhotos",
          "action": "Upload photos",
          "description": "Upload one or more photos (Supports: TikTok, Instagram, LinkedIn, Facebook, X, Threads)"
        },
        {
          "name": "Upload Text",
          "value": "uploadText",
          "action": "Upload a text post",
          "description": "Upload a text-based post (Supports: X, LinkedIn, Facebook, Threads)"
        },
        {
          "name": "Upload Video",
          "value": "uploadVideo",
          "action": "Upload a video",
          "description": "Upload a single video (Supports: TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "uploads"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Cancel Scheduled Post",
          "value": "cancelScheduled",
          "action": "Cancel scheduled post",
          "description": "Cancel a scheduled post by its job ID"
        },
        {
          "name": "Edit Scheduled Post",
          "value": "editScheduled",
          "action": "Edit scheduled post",
          "description": "Edit schedule details (like date/time) by job ID"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get analytics",
          "description": "Retrieve aggregated analytics for uploads"
        },
        {
          "name": "Get Upload History",
          "value": "getHistory",
          "action": "Get upload history",
          "description": "List past uploads with optional filters"
        },
        {
          "name": "Get Upload Status",
          "value": "getStatus",
          "action": "Get upload status",
          "description": "Check the status of an upload using the request_id"
        },
        {
          "name": "List Scheduled Posts",
          "value": "listScheduled",
          "action": "List scheduled posts",
          "description": "List your scheduled (future) posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monitoring"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "Create User",
          "value": "createUser",
          "action": "Create user",
          "description": "Create a new Upload-Post user (profile name)"
        },
        {
          "name": "Delete User",
          "value": "deleteUser",
          "action": "Delete user",
          "description": "Delete an existing Upload-Post user by profile name"
        },
        {
          "name": "Generate JWT (for Platform Integration)",
          "value": "generateJwt",
          "action": "Generate jwt for platform integration",
          "description": "Generate a connection URL (JWT) for a profile. Only needed when integrating Upload-Post into your own platform."
        },
        {
          "name": "List Users",
          "value": "listUsers",
          "action": "List users",
          "description": "List Upload-Post users (profiles)"
        },
        {
          "name": "Validate JWT (for Platform Integration)",
          "value": "validateJwt",
          "action": "Validate jwt for platform integration",
          "description": "Validate a connection token from your backend. Only needed for custom platform integration."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Upload Photo(s)",
      "value": "uploadPhotos",
      "action": "Upload photos",
      "description": "Upload one or more photos (Supports: TikTok, Instagram, LinkedIn, Facebook, X, Threads)"
    },
    {
      "name": "Upload Text",
      "value": "uploadText",
      "action": "Upload a text post",
      "description": "Upload a text-based post (Supports: X, LinkedIn, Facebook, Threads)"
    },
    {
      "name": "Upload Video",
      "value": "uploadVideo",
      "action": "Upload a video",
      "description": "Upload a single video (Supports: TikTok, Instagram, LinkedIn, YouTube, Facebook, X, Threads)"
    },
    {
      "name": "Cancel Scheduled Post",
      "value": "cancelScheduled",
      "action": "Cancel scheduled post",
      "description": "Cancel a scheduled post by its job ID"
    },
    {
      "name": "Edit Scheduled Post",
      "value": "editScheduled",
      "action": "Edit scheduled post",
      "description": "Edit schedule details (like date/time) by job ID"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get analytics",
      "description": "Retrieve aggregated analytics for uploads"
    },
    {
      "name": "Get Upload History",
      "value": "getHistory",
      "action": "Get upload history",
      "description": "List past uploads with optional filters"
    },
    {
      "name": "Get Upload Status",
      "value": "getStatus",
      "action": "Get upload status",
      "description": "Check the status of an upload using the request_id"
    },
    {
      "name": "List Scheduled Posts",
      "value": "listScheduled",
      "action": "List scheduled posts",
      "description": "List your scheduled (future) posts"
    },
    {
      "name": "Create User",
      "value": "createUser",
      "action": "Create user",
      "description": "Create a new Upload-Post user (profile name)"
    },
    {
      "name": "Delete User",
      "value": "deleteUser",
      "action": "Delete user",
      "description": "Delete an existing Upload-Post user by profile name"
    },
    {
      "name": "Generate JWT (for Platform Integration)",
      "value": "generateJwt",
      "action": "Generate jwt for platform integration",
      "description": "Generate a connection URL (JWT) for a profile. Only needed when integrating Upload-Post into your own platform."
    },
    {
      "name": "List Users",
      "value": "listUsers",
      "action": "List users",
      "description": "List Upload-Post users (profiles)"
    },
    {
      "name": "Validate JWT (for Platform Integration)",
      "value": "validateJwt",
      "action": "Validate jwt for platform integration",
      "description": "Validate a connection token from your backend. Only needed for custom platform integration."
    }
  ]

npm_readme:
  # n8n-nodes-upload-post

  This is an n8n community node package for [Upload Post](https://www.upload-post.com/). It allows you to automate uploading photos, videos, and text posts to various social media platforms supported by the Upload Post API.

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

  ## Installation

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

  1.  Go to **Settings > Community Nodes**.
  2.  Select **Install**.
  3.  Enter `n8n-nodes-upload-post` in **Enter npm package name**.
  4.  Agree to the [risks of using community nodes](https://docs.n8n.io/integrations/community-nodes/risks/).
  5.  Select **Install**.

  After installing the node, you can use it in your n8n workflows.

  ## Credentials

  To use this node, you need to configure the Upload Post API credentials:

  1.  Create an API key from your [Upload Post dashboard](https://www.upload-post.com/).
  2.  In n8n, go to **Credentials > New**.
  3.  Search for **Upload Post API** and select it.
  4.  Enter a **Credential Name**.
  5.  Paste your Upload Post API key into the **API Key** field.
  6.  Select **Save**.

  ## Operations

  The node provides the following operations grouped for clarity:

  ### Upload Actions
  - **Upload Photo(s)**: Upload one or more photos to supported platforms.
    - Supports file uploads and photo URLs (comma-separated list).
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content, Description (optional), Photos (Files or URLs), Scheduled Date (optional).
    - Title/Description overrides per platform: `instagram_title`, `facebook_title`, `tiktok_title`, `linkedin_title`, `x_title`, `youtube_title`, `pinterest_title`, `threads_title`.
    - Platform-specific parameters available for: Facebook, Instagram, LinkedIn, Pinterest, TikTok, X (Twitter).
    - **Pinterest**: Requires Board selection via dynamic selector.
    - **Instagram**: Media Type (Image/Stories), TikTok: Auto-add music, disable comments, brand content toggles.
    - **Facebook**: Page selection via dynamic selector.
    - **LinkedIn**: Visibility settings (Photos only), Page selection via dynamic selector.
    - **X (Twitter)**: Tagged user IDs, reply settings, geo place ID.

  - **Upload Video**: Upload a single video to supported platforms.
    - Supports file uploads and video URLs.
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content, Description (optional), Video (File or URL), Scheduled Date (optional).
    - Title/Description overrides per platform: `instagram_title`, `facebook_title`, `tiktok_title`, `linkedin_title`, `x_title`, `youtube_title`, `pinterest_title`.
    - Platform-specific parameters available for: Facebook, Instagram, LinkedIn, Pinterest, Threads, TikTok, X (Twitter), YouTube.
    - **YouTube**: Custom thumbnail (URL/binary), tags, category, privacy, embeddable, license, public stats, made for kids, synthetic media declaration, geo-restrictions, paid product placement, recording date, default language/audio language.
    - **Facebook**: Page selection, video state (Published/Draft), media type (Reels/Stories).
    - **Instagram**: Media type (Reels/Stories), share to feed, collaborators, cover URL, audio name, user tags, location ID, thumb offset.
    - **TikTok**: Privacy level, disable duet/stitch/comments, cover timestamp, brand content toggles, AI-generated content flag, post mode.
    - **LinkedIn**: Visibility settings, Page selection, video description.
    - **Pinterest**: Board selection, cover image options (URL/base64/keyframe).
    - **X (Twitter)**: Tagged user IDs, reply settings, nullcast, place ID, long text handling.

  - **Upload Text**: Upload a text-based post to supported platforms.
    - Common parameters: User Identifier, Platform Names or IDs, Title / Main Content (used as post content), Scheduled Date (optional).
    - Platform-specific parameters available for: Facebook, LinkedIn, Reddit, Threads, X (Twitter).
    - **Facebook**: Page selection, link URL for preview.
    - **LinkedIn**: Page selection ("Me" for personal profile).
    - **X (Twitter)**: Reply settings, poll options (2-4 options, 5-10080 min duration), post URL, quote tweet ID, geo place ID, super followers exclusivity, community ID, sharing options, direct message deep link, card URI, long text handling.
    - **Threads**: Long text as single post option.
    - **Reddit**: Subreddit selection, flair ID.

  ### Status & History Actions
  - **Get Upload Status**: Check the status/result of an async upload by `request_id`.
    - Parameters: Request ID.
  - **Get Upload History**: List past uploads.
    - Parameters: Page (default 1), Limit (default 20). Limit can be 20, 50, or 100.
  - **Get Analytics**: Retrieve aggregated analytics for uploads.
    - Optional filters: From Date, To Date, User Filter, Platforms.

  ### Scheduled Posts
  - **List Scheduled Posts**: Lists future scheduled jobs.
  - **Cancel Scheduled Post**: Cancels a scheduled job by its Job ID.
  - **Edit Scheduled Post**: Updates a scheduled job (e.g., new scheduled date/time).
    - Tip: You can schedule any Upload action by providing the `Scheduled Date` during upload.

  ### Platform Selectors (Dynamic)
  - **Facebook Pages**: Dynamic picker for Facebook pages, or enter ID via expression. Required for all Facebook operations.
  - **LinkedIn Pages**: Dynamic picker for organization pages with "Me (Personal Profile)" option, or enter ID via expression.
  - **Pinterest Boards**: Dynamic picker for Pinterest boards, or enter ID via expression. Required for all Pinterest operations.

  ### User Actions (incl. JWT for custom platform integration)
  - ⚠️ **JWT endpoints are only needed if you integrate Upload-Post into your own platform** and want end-users to link their social accounts via your UI.
  - **List Users**: Retrieve Upload-Post profiles created under your API key.
  - **Create User**: Create a new user profile.
    - Parameters: New User Identifier (username).
  - **Delete User**: Delete an existing user profile.
    - Parameters: Username to delete.
  - **Generate JWT (for platform integration)**: Generate a connection URL (JWT) for a given profile so the user can link social accounts.
    - Parameters: User Identifier, optional redirect URL, logo image URL, redirect button text, platform restrictions.
  - **Validate JWT (for platform integration)**: Validate a connection token from your backend.
    - Parameters: JWT token (password field).

  Refer to the [Upload Post API Documentation](https://docs.upload-post.com) for detailed information on parameters and platform requirements.

  ### Waiting for asynchronous uploads

  Some uploads are processed asynchronously and the API returns immediately with a `request_id`. This happens when:
  - You enable "Upload Asynchronously" in the node, or
  - The upload takes longer than ~59 seconds and the API switches to async mode automatically.

  You have two ways to handle this in n8n:

  1) Best-effort polling inside the node
  - In Upload operations (Photos/Video/Text), enable "Wait for Completion".
  - Configure "Poll Interval (Seconds)" (default 10) and "Timeout (Seconds)".
  - The node sleeps between checks (using n8n's `sleep`) and calls `GET /api/uploadposts/status?request_id=...` until success/failure or timeout.
  - Note: This does not guarantee completion in hosted environments with strict execution limits.

  2) Workflow-level polling (recommended for reliability)
  - Use the Upload operation, read `request_id` from its output.
  - Add a Wait node (e.g., 10s), then call "Get Upload Status" passing the `request_id`.
  - Loop with an IF node until the status is final (success/failed) or a max attempts limit is reached.

  ### Platform-Specific Options

  #### Facebook
  - **Page Selection**: Dynamic picker for Facebook pages (required for all operations).
  - **Media Type (Video)**: Reels or Stories.
  - **Video State**: Published or Draft.
  - **Link (Text)**: URL for link preview in text posts.

  #### LinkedIn
  - **Page Selection**: Dynamic picker for organization pages ("Me" option for personal profiles).
  - **Visibility (Photos/Video)**: Public, Connections, Logged In, Container (video only).
  - **Video Description**: User commentary for video posts.

  #### Instagram
  - **Media Type**: Image (feed photos), Stories, Reels (video).
  - **Video Options**: Share to feed, collaborators (comma-separated usernames), cover URL, audio name, user tags (comma-separated), location ID, thumb offset.
  - **Photo Cover Index**: Which photo to use as cover (0-based index).

  #### TikTok
  - **Photo Options**: Auto-add music, disable comments, photo cover index, brand content toggles (paid partnerships/third-party brands vs own business).
  - **Video Options**: Privacy level (Public/Mutual Friends/Followers/Self), disable duet/stitch/comments, cover timestamp (ms), brand content toggles, AI-generated content flag, post mode (Direct Post/Media Upload).
  - **Brand Content**: Separate toggles for paid partnerships and own business promotion.

  #### YouTube
  - **Video Metadata**: Tags (comma-separated), category ID, privacy status (public/unlisted/private), embeddable, license, public stats viewable.
  - **Compliance**: Made for kids declaration, self-declared made for kids (COPPA), contains synthetic media (AI transparency), has paid product placement (FTC).
  - **Geo-Restrictions**: Allowed/blocked countries (ISO 3166-1 alpha-2 codes, mutually exclusive).
  - **Language Settings**: Default language (title/description), default audio language.
  - **Recording Date**: ISO 8601 timestamp.
  - **Thumbnail**: Custom thumbnail via URL or binary file.

  #### X (Twitter)
  - **Common Options**: Tagged user IDs (comma-separated), reply settings (everyone/following/mentioned/verified/subscribers), geo place ID, long text as single post.
  - **Video/Photo Options**: Nullcast (promoted-only posts), place ID.
  - **Text Options**: Poll options (2-4 options, 25 chars max each, 5-10080 min duration), poll reply settings, post URL, quote tweet ID, card URI, direct message deep link.
  - **Community Features**: Community ID, share with followers.
  - **Super Followers**: Exclusive content for super followers.
  - **Validation**: Poll options mutually exclusive with card URI, quote tweet ID, and direct message deep link.

  #### Threads
  - **Text Options**: Long text as single post (otherwise creates thread if >500 chars).
  - **Video Options**: Description override support.

  #### Pinterest
  - **Board Selection**: Dynamic picker for Pinterest boards (required).
  - **Link**: Optional link attachment.
  - **Video Cover**: URL, base64 data with content type, or keyframe timestamp.

  #### Reddit
  - **Text Options**: Subreddit (without r/), flair ID for post categorization.

  ### Validation Rules & Restrictions

  #### X (Twitter) Poll Validation
  - **Options Count**: Must contain 2-4 non-empty options.
  - **Option Length**: Each option cannot exceed 25 characters.
  - **Duration**: Must be between 5 and 10080 minutes (5 minutes to 7 days).
  - **Mutually Exclusive**: Poll options cannot be used with Card URI, Quote Tweet ID, or Direct Message Deep Link.

  #### Platform-Specific Requirements
  - **Facebook**: Page selection is required for all operations.
  - **Pinterest**: Board selection is required for all operations.
  - **LinkedIn Photos**: Only supports PUBLIC visibility (API limitation).
  - **YouTube**: Allowed/blocked countries are mutually exclusive.
  - **Instagram Video**: Media type automatically defaults to REELS if invalid, IMAGE for photos.
  - **TikTok Photos**: Media type automatically defaults to IMAGE if invalid.

  #### File Handling
  - **Photos**: Comma-separated list supporting both file paths and URLs.
  - **Videos**: Single file path or URL.
  - **YouTube Thumbnails**: Supports both URL and binary file uploads.
  - **Pinterest Covers**: Multiple options (URL, base64 data with content type, or keyframe timestamp).

  #### Scheduling
  - **Date Format**: Automatic conversion to ISO 8601 with UTC timezone if not provided.
  - **Asynchronous Processing**: Automatic fallback to async mode if upload exceeds 59 seconds.

  ### Title & Description Overrides
  - **`Title / Main Content`**: Generic title used across platforms.
  - **Platform Title Overrides**: `[platform]_title` (e.g., `x_title`, `pinterest_title`, `threads_title`).
    - Available for: instagram, facebook, tiktok, linkedin, x, youtube, pinterest, threads
  - **`Description (Optional)`**: Generic description used for LinkedIn, Facebook, YouTube, Pinterest, TikTok when supported.
  - **Platform Description Overrides**: `[platform]_description` (e.g., `youtube_description`, `linkedin_description`).
    - Available for: facebook, tiktok, linkedin, youtube, pinterest

  **⚠️ Runtime Validations**: The node performs automatic validations at runtime including poll constraints, mutually exclusive field checks, and platform-specific requirements. Invalid configurations will throw descriptive error messages.

  Related docs:
  - Profiles & JWT reference (context): [User Profiles API](https://docs.upload-post.com/api/user-profiles#create-user-profile)

  ## Resources

  *   [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  *   [Upload Post Website](https://www.upload-post.com/)
  *   [Upload Post API Documentation](https://docs.upload-post.com)

  ## Compatibility

  Tested with n8n version 1.x.
  Requires Node.js version 20.15 or later.

  ## Development

  If you want to contribute to this node or run it locally for development:

  1.  Clone this repository: `git clone https://github.com/Upload-Post/n8n-nodes-upload-post` (replace `your-github-username`)
  2.  Install dependencies: `npm i`
  3.  Build the node: `npm run build`
  4.  Link the package to your n8n instance for testing. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/).

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"The Upload Post node automates the uploading of photos, videos, and text-based posts to various social media platforms via the Upload Post API, supporting scheduled posts and real-time status and analytics tracking.","capabilities":["Upload photos to supported platforms with per-platform title/description overrides","Upload videos with platform-specific settings (e.g., YouTube tags, TikTok privacy, Instagram Reels)","Upload text posts with platform-specific features (e.g., polls on X, Reddit subreddits)","Check upload status using request ID","Retrieve upload history with pagination","Access aggregated analytics with date and user filters","Schedule posts with customizable dates and times","Cancel or edit scheduled posts","Use dynamic platform selectors (Facebook Pages, LinkedIn Pages, Pinterest Boards)"],"authentication":"API key required (obtained from the Upload Post dashboard)","commonUseCases":["Automating social media content posting across Instagram, Facebook, TikTok, LinkedIn, Pinterest, YouTube, and X (Twitter)","Scheduling posts for future publication","Managing content with platform-specific settings (e.g., tags, visibility, audio, cover images)","Monitoring upload status and performance analytics","Batch uploading multiple photos or videos with consistent metadata"],"limitations":["No support for all social media features (e.g., advanced comment moderation, live streaming)","Platform-specific parameters may require manual configuration via dynamic fields","Limited to supported platforms via Upload Post API (not all social networks are available)","No built-in image/video processing or resizing capabilities"],"relatedNodes":["Social Media Nodes","Scheduled Actions","Content Management Nodes","Analytics Nodes"]}


