# nodes

node_type: n8n-nodes-digital-ocean.digitalOcean
package_name: n8n-nodes-digital-ocean
display_name: Digital Ocean
description: Digital Ocean
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: joff
author_github_url: https://github.com/joffcom/
npm_package_name: n8n-nodes-digital-ocean
npm_version: 0.4.1
community_fetched_at: 2026-03-25T21:19:40.782Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "account",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Droplet",
          "value": "droplet"
        },
        {
          "name": "Event",
          "value": "event"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get account information",
          "description": "Get account information"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get event information",
          "description": "Get event information"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get information about many events",
          "description": "Get information about many events"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a domain",
          "description": "Create a domain"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get domain information",
          "description": "Get domain information"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get information about many domains",
          "description": "Get information about many domains"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a domain",
          "description": "Delete a domain"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Action",
          "value": "action",
          "action": "Perform an action on a droplet",
          "description": "Perform an action on a droplet"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new droplet",
          "description": "Create a new droplet"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a droplet",
          "description": "Delete a droplet"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get information about a droplet",
          "description": "Get information about a droplet"
        },
        {
          "name": "Get Backups",
          "value": "getBackups",
          "action": "Get all backups for a droplet",
          "description": "Get all backups for a droplet"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get information about all droplets",
          "description": "Get information about many droplets"
        },
        {
          "name": "Get Snapshots",
          "value": "getSnapshots",
          "action": "Get all snapshots for a droplet",
          "description": "Get all snapshots for a droplet"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "droplet"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get account information",
      "description": "Get account information"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get event information",
      "description": "Get event information"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get information about many events",
      "description": "Get information about many events"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a domain",
      "description": "Create a domain"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get domain information",
      "description": "Get domain information"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get information about many domains",
      "description": "Get information about many domains"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a domain",
      "description": "Delete a domain"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Action",
      "value": "action",
      "action": "Perform an action on a droplet",
      "description": "Perform an action on a droplet"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new droplet",
      "description": "Create a new droplet"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a droplet",
      "description": "Delete a droplet"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get information about a droplet",
      "description": "Get information about a droplet"
    },
    {
      "name": "Get Backups",
      "value": "getBackups",
      "action": "Get all backups for a droplet",
      "description": "Get all backups for a droplet"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get information about all droplets",
      "description": "Get information about many droplets"
    },
    {
      "name": "Get Snapshots",
      "value": "getSnapshots",
      "action": "Get all snapshots for a droplet",
      "description": "Get all snapshots for a droplet"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    }
  ]

npm_readme:
  # n8n-nodes-digital-ocean

  This is an n8n community node for connecting to Digital Oceans API to manage your droplets.

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

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

  ## Installation

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

  ## Operations
  - Account
  	- Get
  - Domain
  	- Create
  	- Get
  	- Get Many
  	- Delete
  - Droplet
  	- Get
  	- Get Many
  	- Create
  	- Delete
  - Event 
  	- Get
  	- Get Many

  ## Credentials

  This node supports both OAuth2 and Access Key.

  [OAuth 2](https://docs.digitalocean.com/reference/api/oauth/)
  [Access Key](https://docs.digitalocean.com/reference/api/create-personal-access-token/)

  ## Compatibility

  This node will work with any version of n8n after `1.62.1`

  ## Usage

  ### Authentication
  1. Create new credentials in n8n and select "Digital Ocean API"
  2. Choose either OAuth2 or Access Key authentication:
     - For OAuth2: Click the "Connect" button and authorize n8n
     - For Access Key: Generate a [personal access token](https://cloud.digitalocean.com/account/api/tokens) and paste it in

  ### Working with Droplets
  - To get information about a specific droplet:
    1. Add the Digital Ocean node
    2. Select "Droplet" as Resource
    3. Choose "Get" as Operation
    4. Enter the Droplet ID

  - To create a new droplet:
    1. Add the Digital Ocean node
    2. Select "Droplet" as Resource
    3. Choose "Create" as Operation
    4. Configure required fields:
       - Name
       - Region
       - Size
       - Image

  ### Managing Domains
  - To create a new domain:
    1. Add the Digital Ocean node
    2. Select "Domain" as Resource
    3. Choose "Create" as Operation
    4. Enter the domain name
    5. Optionally configure IP address

  ### Monitoring Events
  - To track operations on your account:
    1. Add the Digital Ocean node
    2. Select "Event" as Resource
    3. Choose "Get Many" as Operation
    4. Optionally filter by event type

  ## Resources

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

  ## Version history

  **0.4.1** \
  Fix descriptions

  **0.4.0** \
  Add support for AI tools
  Update documentation

  **0.3.0** \
  Prevent node from loading n8n again

  **0.2.0** \
  Add support for Application images  
  Add support for Actions as Events  
  Add support for Domains  
  Add support for Droplet actions  
  Add option to get Droplet Snapshots and Backups  

  **0.1.0** \
  Initial Release

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the DigitalOcean API for managing cloud infrastructure resources like droplets, domains, and events.","capabilities":["Get account information","Create, retrieve, and delete domains","Create, retrieve, and delete droplets","Retrieve account events and activity logs","Manage droplet snapshots and backups","Support for AI tools integration"],"authentication":"OAuth2 or Access Key (Personal Access Token)","commonUseCases":["Automated server provisioning and management","Cloud infrastructure monitoring and event tracking","Domain registration and management workflows","Automated droplet lifecycle management"],"limitations":["Community node (not official n8n node)","Requires n8n version 1.62.1 or higher"],"relatedNodes":["DigitalOcean API","Cloud provider nodes","Server management nodes"]}


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-03-25 21:19:40
author_name: jetapi
author_github_url: https://github.com/jetapi/
npm_package_name: n8n-nodes-jetapi
npm_version: 1.3.1
community_fetched_at: 2026-03-25T21:19:40.783Z
ai_summary_generated_at: 2026-03-25 22:51:43
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":"A community n8n node that enables sending messages via Telegram and WhatsApp using JetAPI.","capabilities":["Send WhatsApp messages via phone number","Send Telegram messages via phone number","Send Telegram messages via username","Send Telegram messages via user ID","Send Telegram messages via group ID"],"authentication":"API key required (Bearer Token)","commonUseCases":["Automated customer support notifications","Marketing campaigns via WhatsApp","Community updates via Telegram","Two-factor authentication codes delivery"],"limitations":["Requires external API key from JetAPI dashboard","Free tier includes 10-day trial period","No built-in support for media attachments mentioned in README"],"relatedNodes":["n8n-nodes-whatsapp","n8n-nodes-telegram"]}


node_type: @solution25/n8n-nodes-shopware.shopware
package_name: @solution25/n8n-nodes-shopware
display_name: Shopware
description: Read, update, write and delete data from Shopware
category: Community
development_style: declarative
version: 1.4.5
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: fatjon-gashi1
author_github_url: https://github.com/solution25com/n8n-nodes-shopware.git
npm_package_name: @solution25/n8n-nodes-shopware
npm_version: 1.4.5
community_fetched_at: 2026-03-25T21:19:40.852Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # @solution25/n8n-nodes-shopware

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

  Shopware 6 is a modern, open-source, headless e-commerce platform designed for flexibility and scalability. With this node, you can connect your Shopware store to other services and automate tasks such as product management, order processing, and customer handling.

  [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

  This node currently supports the following resources and operations:

  | Resource | Get | Get Many | Create | Update | Delete |
  |----------|-----|----------|--------|--------|--------|
  | Product  |  ✓  |     ✓    |    ✓   |    ✓   |    ✓   |
  | Customer |  ✓  |     ✓    |    ✓   |    ✓   |    ✓   |
  | Order    |  ✓  |     ✓    |    ✓   |    ✓   |    ✓   |

  ## Credentials

  Authentication is handled via a [Shopware Integration](https://docs.shopware.com/en/shopware-6-en/settings/system/integrationen), which you can create in the Shopware admin panel.
  Required fields:

  * Domain (your Shopware 6 store URL)

  * Client ID

  * Client Secret

  Once configured, the node uses these credentials to authenticate against the Shopware Admin API.

  ## Compatibility

  n8n version: tested with the latest n8n release (keep n8n updated for best compatibility).

  Shopware version: compatible with Shopware 6.6.x and 6.7.x

  ## Usage

  Here are a few examples of what you can do with this node:

  * Automatically create a new customer in Shopware when a signup happens in another system.

  * Sync products between Shopware and an external inventory tool.

  * Fetch new orders and send notifications to Slack, email, or other channels.

  For general n8n usage, see the [Try it out guide](https://docs.n8n.io/try-it-out/).

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Shopware 6 Admin API reference](https://shopware.stoplight.io/docs/admin-api/twpxvnspkg3yu-quick-start-guide)
  * [Shopware documentation](https://docs.shopware.com)
  * [Shopware official site](https://www.shopware.com)

  ## Version history

  | Version         | Description                                                              |
  | --------------- | ------------------------------------------------------------------------ |
  | **0.1.0-alpha** | Pre-release with basic product, customer, and order support.             |
  | **1.0.0**       | Initial release with full product resource support.                      |
  | **1.1.0**       | Added full support for customer resource.                                |
  | **1.2.0**       | Added full support for order resource.                                   |
  | **1.2.1**       | Fixed order creation using node-created customers.                       |
  | **1.3.0**       | Added advanced filtering for all resources.                              |
  | **1.3.1**       | Added base unit testing for all resources.                               |
  | **1.4.0**       | Added full support for categories resource.                              |
  | **1.4.1**       | Removed deprecated transport method, options and types.                  |
  | **1.4.2**       | Fixed missing credentials in package definition and resolved icon paths. |
  | **1.4.3**       | Added credentials explicitly to the base versioned node.                 |
  | **1.4.4**       | Added line-items, currency, deliveries and transactions data to order. Changed node icon format to SVG.|
  | **1.4.5**       | Removed debug statements from code.                                        |
  | **2.0.0**       | Large refactor, validation fixes, correct tax calculations and rounding, significant optimizations, media upload for products, more associations for resources, better error handling and surfacing, line item pricing fix, order delivery versioning fix, complete fields for addresses, filters fix.                                        |

ai_documentation_summary:
  {"purpose":"This n8n community node enables full CRUD operations (Create, Read, Update, Delete) on Shopware 6 resources including Products, Customers, Orders, and Categories.","capabilities":["Create new products","Update existing products","Delete products","Retrieve single or multiple products","Create new customers","Update existing customers","Delete customers","Retrieve single or multiple customers","Create new orders","Update existing orders"],"authentication":"Shopware Integration credentials (Domain, Client ID, Client Secret)","commonUseCases":["Automatically create customers in Shopware when signups occur in other systems","Sync products between Shopware and external inventory tools","Fetch new orders and trigger notifications to Slack, email, or other channels","Automate order processing workflows"],"limitations":["Requires a Shopware 6.6.x or 6.7.x installation","Requires manual setup of Shopware Integration credentials in the Shopware admin panel","Community node (not official n8n node)"],"relatedNodes":["Shopware API","Shopware Integration","Shopware Admin API"]}


node_type: @droidrun/n8n-nodes-droidrun.mobilerun
package_name: @droidrun/n8n-nodes-droidrun
display_name: Mobilerun
description: Access the Mobilerun Cloud Api
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: lukas-droidrun
author_github_url: https://github.com/droidrun/n8n-nodes-droidrun.git
npm_package_name: @droidrun/n8n-nodes-droidrun
npm_version: 1.0.7
community_fetched_at: 2026-03-25T21:19:40.853Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "inspectTask",
      "options": [
        {
          "name": "Appstore",
          "value": "apps"
        },
        {
          "name": "Device",
          "value": "device"
        },
        {
          "name": "Device Credential",
          "value": "credential"
        },
        {
          "name": "Inspect Task",
          "value": "inspectTask"
        },
        {
          "name": "Manage Task",
          "value": "manageTask"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listTasks",
      "options": [
        {
          "name": "Get Task",
          "value": "getTask",
          "action": "Get task",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId }}",
              "method": "GET"
            }
          },
          "description": "Get a task"
        },
        {
          "name": "Get Task Gif",
          "value": "getTaskGif",
          "action": "Get task gif",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/gif\" }}",
              "method": "GET"
            }
          },
          "description": "Get a screenshot of a task"
        },
        {
          "name": "Get Task Screenshot",
          "value": "getTaskScreenshot",
          "action": "Get task screenshot",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/screenshots/\" +  $parameter.index }}",
              "method": "GET"
            }
          },
          "description": "Get a screenshot of a task"
        },
        {
          "name": "Get Task Screenshots",
          "value": "getTaskScreenshots",
          "action": "Get task screenshots",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/screenshots\" }}",
              "method": "GET"
            }
          },
          "description": "Get a list of screenshots of a task"
        },
        {
          "name": "Get Task Trajectory",
          "value": "getTaskTrajectory",
          "action": "Get task trajectory",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/trajectory\" }}",
              "method": "GET"
            }
          },
          "description": "Get the trajectory of a task"
        },
        {
          "name": "Get Task UI State",
          "value": "getTaskUIState",
          "action": "Get task UI state",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/ui_states/\" + $parameter.index }}",
              "method": "GET"
            }
          },
          "description": "Get a specific UI state of a task"
        },
        {
          "name": "Get Task UI States",
          "value": "getTaskUIStates",
          "action": "Get task UI states",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/ui_states\" }}",
              "method": "GET"
            }
          },
          "description": "Get UI states of a task"
        },
        {
          "name": "List Tasks",
          "value": "listTasks",
          "action": "List tasks",
          "routing": {
            "request": {
              "url": "/tasks/",
              "method": "GET"
            }
          },
          "description": "List all tasks you’ve created so far"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inspectTask"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runTask",
      "options": [
        {
          "name": "Stop Task",
          "value": "stopTask",
          "action": "Stop task",
          "routing": {
            "request": {
              "url": "={{ \"/tasks/\" + $parameter.taskId + \"/cancel\" }}",
              "method": "POST"
            }
          },
          "description": "Stops a task"
        },
        {
          "name": "Run Task",
          "value": "runTask",
          "action": "Run task",
          "routing": {
            "request": {
              "url": "/tasks/",
              "body": {
                "apps": "={{ $parameter.apps }}",
                "task": "={{ $parameter.task }}",
                "files": "={{ $parameter.files }}",
                "vision": "={{ $parameter.vision }}",
                "deviceId": "={{ $parameter.deviceId }}",
                "llmModel": "={{ $parameter.llmModel }}",
                "maxSteps": "={{ $parameter.maxSteps }}",
                "displayId": "={{ $parameter.deviceSelectionMode === \"manual\" ? $parameter.deviceIdManual : $parameter.deviceId }}",
                "reasoning": "={{ $parameter.reasoning }}",
                "vpnCountry": "={{ $parameter.vpnCountry === \"none\" ? undefined : $parameter.vpnCountry }}",
                "credentials": "={{ $parameter.credentials }}",
                "temperature": "={{ $parameter.temperature }}",
                "outputSchema": "={{ $parameter.outputSchema ? JSON.parse($parameter.outputSchema) : undefined }}",
                "executionTimeout": "={{ $parameter.executionTimeout }}"
              },
              "method": "POST"
            }
          },
          "description": "Run a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "manageTask"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listApps",
      "options": [
        {
          "name": "List Apps",
          "value": "listApps",
          "action": "List apps",
          "routing": {
            "request": {
              "url": "/apps",
              "method": "GET"
            }
          },
          "description": "Retrieves a paginated list of apps with filtering and search capabilities"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "apps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listCredentials",
      "options": [
        {
          "name": "Add New Field",
          "value": "addCredentialField",
          "action": "Add field to specific credential",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields\"  }}",
              "body": {
                "value": "={{ $parameter.credentialValue }}",
                "fieldType": "={{ $parameter.credentialType }}"
              },
              "method": "PATCH"
            }
          },
          "description": "Add a new field to an existing credential"
        },
        {
          "name": "Create Credential Field",
          "value": "createCredentialField",
          "action": "Create credential field",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName }}",
              "body": {
                "fields": {
                  "value": "={{ $parameter.credentialValue }}",
                  "fieldsType": "={{ $parameter.credentialType }}"
                },
                "credentialName": "={{ $parameter.credentialName }}"
              },
              "method": "POST"
            }
          },
          "description": "Create a credential with fields for a package"
        },
        {
          "name": "Delete Specific Credential",
          "value": "deleteSpecificCredential",
          "action": "Delete specific credential",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName }}",
              "method": "DELETE"
            }
          },
          "description": "Delete a credential and all its fields"
        },
        {
          "name": "Delete Specific Credential Field",
          "value": "deleteSpecificCredentialField",
          "action": "Delete specific credential field",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields/\" + $parameter.credentialType  }}",
              "method": "DELETE"
            }
          },
          "description": "Delete a field from a credential"
        },
        {
          "name": "Get Specific Credential",
          "value": "getSpecificCredential",
          "action": "Get specific credential",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName}}",
              "method": "GET"
            }
          },
          "description": "Get a specific credential with its fields"
        },
        {
          "name": "Initialize Package",
          "value": "initializePackage",
          "action": "Initialize package",
          "routing": {
            "request": {
              "url": "/credentials",
              "body": {
                "packageName": "={{ $parameter.packageName }}"
              },
              "method": "POST"
            }
          },
          "description": "Initialize a new package/app"
        },
        {
          "name": "List Credentials",
          "value": "listCredentials",
          "action": "List credentials",
          "routing": {
            "request": {
              "url": "/credentials",
              "method": "GET"
            }
          },
          "description": "List all credentials for the authenticated user"
        },
        {
          "name": "List Package Credentials",
          "value": "listPackageCredentials",
          "action": "List package credentials",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName }}",
              "method": "GET"
            }
          },
          "description": "List credentials for a specific package"
        },
        {
          "name": "Update Specific Credential Field",
          "value": "updateSpecificCredentialField",
          "action": "Update specific credential field",
          "routing": {
            "request": {
              "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields/\" + $parameter.credentialType  }}",
              "body": {
                "value": "={{ $parameter.credentialValue }}"
              },
              "method": "PATCH"
            }
          },
          "description": "Update the value of a credential field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credential"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDevices",
      "options": [
        {
          "name": "Delete Device",
          "value": "deleteDevice",
          "action": "Delete device",
          "routing": {
            "request": {
              "url": "/devices/{{$parameter.deviceId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a specific device"
        },
        {
          "name": "Get Device",
          "value": "getDevice",
          "action": "Get device details",
          "routing": {
            "request": {
              "url": "/devices/{{$parameter.deviceId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific device"
        },
        {
          "name": "Get Device Tasks",
          "value": "getDeviceTasks",
          "action": "Get device tasks",
          "routing": {
            "request": {
              "url": "/devices/{{$parameter.deviceId}}/tasks",
              "method": "GET"
            }
          },
          "description": "Get tasks for a specific device"
        },
        {
          "name": "List Devices",
          "value": "listDevices",
          "action": "List devices",
          "routing": {
            "request": {
              "url": "/devices",
              "method": "GET"
            }
          },
          "description": "Retrieves a paginated list of devices with filtering and search capabilities"
        },
        {
          "name": "Provision Device",
          "value": "provisionDevice",
          "action": "Provision a new device",
          "routing": {
            "request": {
              "url": "/devices",
              "method": "POST"
            }
          },
          "description": "Provision a new device"
        },
        {
          "name": "Wait for Device",
          "value": "waitForDevice",
          "action": "Wait for device",
          "routing": {
            "request": {
              "url": "/devices/{{$parameter.deviceId}}/wait",
              "method": "GET"
            }
          },
          "description": "Wait for a device to be ready"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Task",
      "value": "getTask",
      "action": "Get task",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId }}",
          "method": "GET"
        }
      },
      "description": "Get a task"
    },
    {
      "name": "Get Task Gif",
      "value": "getTaskGif",
      "action": "Get task gif",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/gif\" }}",
          "method": "GET"
        }
      },
      "description": "Get a screenshot of a task"
    },
    {
      "name": "Get Task Screenshot",
      "value": "getTaskScreenshot",
      "action": "Get task screenshot",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/screenshots/\" +  $parameter.index }}",
          "method": "GET"
        }
      },
      "description": "Get a screenshot of a task"
    },
    {
      "name": "Get Task Screenshots",
      "value": "getTaskScreenshots",
      "action": "Get task screenshots",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/screenshots\" }}",
          "method": "GET"
        }
      },
      "description": "Get a list of screenshots of a task"
    },
    {
      "name": "Get Task Trajectory",
      "value": "getTaskTrajectory",
      "action": "Get task trajectory",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/trajectory\" }}",
          "method": "GET"
        }
      },
      "description": "Get the trajectory of a task"
    },
    {
      "name": "Get Task UI State",
      "value": "getTaskUIState",
      "action": "Get task UI state",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/ui_states/\" + $parameter.index }}",
          "method": "GET"
        }
      },
      "description": "Get a specific UI state of a task"
    },
    {
      "name": "Get Task UI States",
      "value": "getTaskUIStates",
      "action": "Get task UI states",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/ui_states\" }}",
          "method": "GET"
        }
      },
      "description": "Get UI states of a task"
    },
    {
      "name": "List Tasks",
      "value": "listTasks",
      "action": "List tasks",
      "routing": {
        "request": {
          "url": "/tasks/",
          "method": "GET"
        }
      },
      "description": "List all tasks you’ve created so far"
    },
    {
      "name": "Stop Task",
      "value": "stopTask",
      "action": "Stop task",
      "routing": {
        "request": {
          "url": "={{ \"/tasks/\" + $parameter.taskId + \"/cancel\" }}",
          "method": "POST"
        }
      },
      "description": "Stops a task"
    },
    {
      "name": "Run Task",
      "value": "runTask",
      "action": "Run task",
      "routing": {
        "request": {
          "url": "/tasks/",
          "body": {
            "apps": "={{ $parameter.apps }}",
            "task": "={{ $parameter.task }}",
            "files": "={{ $parameter.files }}",
            "vision": "={{ $parameter.vision }}",
            "deviceId": "={{ $parameter.deviceId }}",
            "llmModel": "={{ $parameter.llmModel }}",
            "maxSteps": "={{ $parameter.maxSteps }}",
            "displayId": "={{ $parameter.deviceSelectionMode === \"manual\" ? $parameter.deviceIdManual : $parameter.deviceId }}",
            "reasoning": "={{ $parameter.reasoning }}",
            "vpnCountry": "={{ $parameter.vpnCountry === \"none\" ? undefined : $parameter.vpnCountry }}",
            "credentials": "={{ $parameter.credentials }}",
            "temperature": "={{ $parameter.temperature }}",
            "outputSchema": "={{ $parameter.outputSchema ? JSON.parse($parameter.outputSchema) : undefined }}",
            "executionTimeout": "={{ $parameter.executionTimeout }}"
          },
          "method": "POST"
        }
      },
      "description": "Run a task"
    },
    {
      "name": "List Apps",
      "value": "listApps",
      "action": "List apps",
      "routing": {
        "request": {
          "url": "/apps",
          "method": "GET"
        }
      },
      "description": "Retrieves a paginated list of apps with filtering and search capabilities"
    },
    {
      "name": "Add New Field",
      "value": "addCredentialField",
      "action": "Add field to specific credential",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields\"  }}",
          "body": {
            "value": "={{ $parameter.credentialValue }}",
            "fieldType": "={{ $parameter.credentialType }}"
          },
          "method": "PATCH"
        }
      },
      "description": "Add a new field to an existing credential"
    },
    {
      "name": "Create Credential Field",
      "value": "createCredentialField",
      "action": "Create credential field",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName }}",
          "body": {
            "fields": {
              "value": "={{ $parameter.credentialValue }}",
              "fieldsType": "={{ $parameter.credentialType }}"
            },
            "credentialName": "={{ $parameter.credentialName }}"
          },
          "method": "POST"
        }
      },
      "description": "Create a credential with fields for a package"
    },
    {
      "name": "Delete Specific Credential",
      "value": "deleteSpecificCredential",
      "action": "Delete specific credential",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName }}",
          "method": "DELETE"
        }
      },
      "description": "Delete a credential and all its fields"
    },
    {
      "name": "Delete Specific Credential Field",
      "value": "deleteSpecificCredentialField",
      "action": "Delete specific credential field",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields/\" + $parameter.credentialType  }}",
          "method": "DELETE"
        }
      },
      "description": "Delete a field from a credential"
    },
    {
      "name": "Get Specific Credential",
      "value": "getSpecificCredential",
      "action": "Get specific credential",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName}}",
          "method": "GET"
        }
      },
      "description": "Get a specific credential with its fields"
    },
    {
      "name": "Initialize Package",
      "value": "initializePackage",
      "action": "Initialize package",
      "routing": {
        "request": {
          "url": "/credentials",
          "body": {
            "packageName": "={{ $parameter.packageName }}"
          },
          "method": "POST"
        }
      },
      "description": "Initialize a new package/app"
    },
    {
      "name": "List Credentials",
      "value": "listCredentials",
      "action": "List credentials",
      "routing": {
        "request": {
          "url": "/credentials",
          "method": "GET"
        }
      },
      "description": "List all credentials for the authenticated user"
    },
    {
      "name": "List Package Credentials",
      "value": "listPackageCredentials",
      "action": "List package credentials",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName }}",
          "method": "GET"
        }
      },
      "description": "List credentials for a specific package"
    },
    {
      "name": "Update Specific Credential Field",
      "value": "updateSpecificCredentialField",
      "action": "Update specific credential field",
      "routing": {
        "request": {
          "url": "={{ \"/credentials/packages/\" + $parameter.packageName + \"/credentials/\" + $parameter.credentialName + \"/fields/\" + $parameter.credentialType  }}",
          "body": {
            "value": "={{ $parameter.credentialValue }}"
          },
          "method": "PATCH"
        }
      },
      "description": "Update the value of a credential field"
    },
    {
      "name": "Delete Device",
      "value": "deleteDevice",
      "action": "Delete device",
      "routing": {
        "request": {
          "url": "/devices/{{$parameter.deviceId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a specific device"
    },
    {
      "name": "Get Device",
      "value": "getDevice",
      "action": "Get device details",
      "routing": {
        "request": {
          "url": "/devices/{{$parameter.deviceId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific device"
    },
    {
      "name": "Get Device Tasks",
      "value": "getDeviceTasks",
      "action": "Get device tasks",
      "routing": {
        "request": {
          "url": "/devices/{{$parameter.deviceId}}/tasks",
          "method": "GET"
        }
      },
      "description": "Get tasks for a specific device"
    },
    {
      "name": "List Devices",
      "value": "listDevices",
      "action": "List devices",
      "routing": {
        "request": {
          "url": "/devices",
          "method": "GET"
        }
      },
      "description": "Retrieves a paginated list of devices with filtering and search capabilities"
    },
    {
      "name": "Provision Device",
      "value": "provisionDevice",
      "action": "Provision a new device",
      "routing": {
        "request": {
          "url": "/devices",
          "method": "POST"
        }
      },
      "description": "Provision a new device"
    },
    {
      "name": "Wait for Device",
      "value": "waitForDevice",
      "action": "Wait for device",
      "routing": {
        "request": {
          "url": "/devices/{{$parameter.deviceId}}/wait",
          "method": "GET"
        }
      },
      "description": "Wait for a device to be ready"
    }
  ]

npm_readme:
  # n8n-nodes-droidrun

  This is an n8n community node that lets you use Droidrun AI in your n8n workflows to automate tasks on Android devices via the Droidrun Cloud API.

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

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

  ## Installation

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

  ## Operations

  This node exposes the following resources and operations:

  - Inspect Task
    - Get Task
    - Get Task Gif
    - Get Task Screenshot
    - Get Task Screenshots
    - Get Task Status
    - List Tasks

  - Manage Task
    - Run Task
      - Supports LLM model selection (fetched from LiteLLM endpoint)
      - Optional device selection (fetched from API or manual entry)
      - Apps selection (fetched from API for dropdown)
      - Structured output support via JSON schema
      - Optional file attachments
    - Stop Task

  ## Credentials

  This node requires a Droidrun API Token.

  - Create a Droidrun account and obtain an API key from your dashboard.
  - In n8n, create new credentials of type `Droidrun API` and paste your token.
  - The token will be sent as `Authorization: Bearer <token>` to the Droidrun API.

  Reference: `https://docs.mobilerun.ai/api-reference/`

  ## Compatibility

  - Built for the n8n Nodes API v1.
  - Developed with Node.js >= 20.15.

  ## Usage

  1. Add the `Droidrun` node to your workflow.
  2. Select the `Resource` (Inspect Task or Manage Task) and choose an `Operation`.
  3. Provide required parameters (for example, `Task ID` for inspect operations or `Task` and model settings for `Run Task`).
  4. Execute the workflow.

  ## Resources

  - n8n community nodes docs: `https://docs.n8n.io/integrations/#community-nodes`
  - Droidrun API reference: `https://docs.mobilerun.ai/api-reference/`
  - Droidrun website: `https://droidrun.ai/`

  ## Version history

  - 1.0.3: Initial public release of the Droidrun Tasks node

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of tasks on Android devices via the Droidrun Cloud API, allowing users to run, inspect, and manage AI tasks within their workflows.","capabilities":["Inspect tasks (Get Task, Get Task Gif, Get Task Screenshot, Get Task Screenshots, Get Task Status, List Tasks)","Run tasks with LLM model selection from LiteLLM endpoint","Run tasks with optional device selection","Run tasks with apps selection from API","Run tasks with structured output support via JSON schema","Run tasks with optional file attachments","Stop tasks"],"authentication":"API key required (Droidrun API Token sent as Authorization: Bearer <token>)","commonUseCases":["Automating Android device testing in CI/CD pipelines","Running AI models on remote Android devices","Capturing screenshots and GIFs for task verification","Executing mobile app workflows with specific models and devices"],"limitations":["Requires a Droidrun account and API token","Model selection is limited to those available via the LiteLLM endpoint","Device and app selection depends on API availability or manual entry","Requires Node.js >= 20.15"],"relatedNodes":["LiteLLM","Generic HTTP Request","JSON Schema"]}


node_type: n8n-nodes-joggai.joggAiNode
package_name: n8n-nodes-joggai
display_name: JoggAI
description: Interact with the JoggAI API to create and manage AI videos
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: joggai
author_github_url: https://github.com/joggaiteam/
npm_package_name: n8n-nodes-joggai
npm_version: 1.0.10
community_fetched_at: 2026-03-25T21:19:40.854Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "video",
      "options": [
        {
          "name": "Video",
          "value": "video"
        },
        {
          "name": "Avatar",
          "value": "avatar"
        },
        {
          "name": "Voice",
          "value": "voice"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "AI Script",
          "value": "aiScript"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Music",
          "value": "music"
        },
        {
          "name": "Visual Style",
          "value": "visualStyle"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create from Avatar",
          "value": "createFromAvatar",
          "action": "Create a video from an avatar and a script",
          "description": "Creates a new video using an avatar and a script"
        },
        {
          "name": "Create from Product",
          "value": "createFromProduct",
          "action": "Create a video from a product",
          "description": "Creates a new video by summarizing a product like a product details page"
        },
        {
          "name": "Create from Template",
          "value": "createFromTemplate",
          "action": "Create a video from a template",
          "description": "Creates a new video from a pre-defined template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a generated video",
          "description": "Retrieves information about a generated video"
        },
        {
          "name": "Generate Preview",
          "value": "generatePreview",
          "action": "Generate a video preview from a product",
          "description": "Generates a video preview from a product without creating the final video"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLibraryAvatars",
      "options": [
        {
          "name": "Get Library Avatars",
          "value": "getLibraryAvatars",
          "action": "Get Library Avatars",
          "description": "Retrieves a list of public available avatars"
        },
        {
          "name": "Get Instant Avatars",
          "value": "getInstantAvatars",
          "action": "Get Instant Avatars",
          "description": "Retrieves a list of your clone avatars"
        },
        {
          "name": "Get Photo Avatars",
          "value": "getPhotoAvatars",
          "action": "Get Photo Avatars",
          "description": "Retrieves a list of your photo avatars"
        },
        {
          "name": "Generate AI Photo",
          "value": "generateAiPhoto",
          "action": "Generate AI Photo",
          "description": "Generates four new AI photos based on a description"
        },
        {
          "name": "Check Photo Generation Status",
          "value": "checkPhotoStatus",
          "action": "Check Photo Generation Status",
          "description": "Checks the generation status of the AI photo"
        },
        {
          "name": "Create Photo Avatar",
          "value": "createPhotoAvatar",
          "action": "Create Photo Avatar",
          "description": "Create a photo avatar based on the specified description"
        },
        {
          "name": "Check Photo Avatar Generation Status",
          "value": "checkPhotoAvatarStatus",
          "action": "Check Photo Avatar Generation Status",
          "description": "Checks the generation status of an avatar task"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "avatar"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLibraryVoices",
      "options": [
        {
          "name": "Get Library Voices",
          "value": "getLibraryVoices",
          "action": "Get a list of Library voices",
          "description": "Retrieves a list of all public available voices"
        },
        {
          "name": "Get My Voices",
          "value": "getMyVoices",
          "action": "Get my voices",
          "description": "Retrieves a list of your custom voices"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMyTemplates",
      "options": [
        {
          "name": "Get Library Templates",
          "value": "getLibraryTemplates",
          "action": "Get template list from library",
          "description": "Retrieves a list of all public templates voices"
        },
        {
          "name": "Get My Templates",
          "value": "getMyTemplates",
          "action": "Get my templates",
          "description": "Retrieves a list of your custom templates"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadProduct",
      "options": [
        {
          "name": "Upload product",
          "value": "uploadProduct",
          "action": "Upload a product for video creation",
          "description": "Uploads and processes a product to be used for video creation"
        },
        {
          "name": "Update product",
          "value": "updateProduct",
          "action": "Update a product",
          "description": "Update the information of a product"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate an AI script",
          "description": "Generates a script from a product or description using AI"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiScript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a file",
          "description": "Uploads a file for use in video generation"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get music",
          "description": "Retrieves a list of available background music"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "music"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get visual styles",
          "description": "Retrieves a list of available visual styles for use in video generation"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "visualStyle"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "webhook:list",
      "options": [
        {
          "name": "List of Webhook Endpoints",
          "value": "webhook:list",
          "action": "List of Webhook Endpoints",
          "description": "Get a list of configured webhook endpoints"
        },
        {
          "name": "Add a Webhook Endpoint",
          "value": "webhook:add",
          "action": "Add a Webhook Endpoint",
          "description": "Add a new webhook endpoint configuration"
        },
        {
          "name": "Update a Webhook Endpoint",
          "value": "webhook:update",
          "action": "Update a Webhook Endpoint",
          "description": "Update an existing webhook endpoint configuration"
        },
        {
          "name": "Delete a Webhook Endpoint",
          "value": "webhook:delete",
          "action": "Delete a Webhook Endpoint",
          "description": "Delete an existing webhook endpoint"
        },
        {
          "name": "List of Available Webhook Events",
          "value": "webhook:events",
          "action": "List of Available Webhook Events",
          "description": "Get a list of available webhook events"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create from Avatar",
      "value": "createFromAvatar",
      "action": "Create a video from an avatar and a script",
      "description": "Creates a new video using an avatar and a script"
    },
    {
      "name": "Create from Product",
      "value": "createFromProduct",
      "action": "Create a video from a product",
      "description": "Creates a new video by summarizing a product like a product details page"
    },
    {
      "name": "Create from Template",
      "value": "createFromTemplate",
      "action": "Create a video from a template",
      "description": "Creates a new video from a pre-defined template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a generated video",
      "description": "Retrieves information about a generated video"
    },
    {
      "name": "Generate Preview",
      "value": "generatePreview",
      "action": "Generate a video preview from a product",
      "description": "Generates a video preview from a product without creating the final video"
    },
    {
      "name": "Get Library Avatars",
      "value": "getLibraryAvatars",
      "action": "Get Library Avatars",
      "description": "Retrieves a list of public available avatars"
    },
    {
      "name": "Get Instant Avatars",
      "value": "getInstantAvatars",
      "action": "Get Instant Avatars",
      "description": "Retrieves a list of your clone avatars"
    },
    {
      "name": "Get Photo Avatars",
      "value": "getPhotoAvatars",
      "action": "Get Photo Avatars",
      "description": "Retrieves a list of your photo avatars"
    },
    {
      "name": "Generate AI Photo",
      "value": "generateAiPhoto",
      "action": "Generate AI Photo",
      "description": "Generates four new AI photos based on a description"
    },
    {
      "name": "Check Photo Generation Status",
      "value": "checkPhotoStatus",
      "action": "Check Photo Generation Status",
      "description": "Checks the generation status of the AI photo"
    },
    {
      "name": "Create Photo Avatar",
      "value": "createPhotoAvatar",
      "action": "Create Photo Avatar",
      "description": "Create a photo avatar based on the specified description"
    },
    {
      "name": "Check Photo Avatar Generation Status",
      "value": "checkPhotoAvatarStatus",
      "action": "Check Photo Avatar Generation Status",
      "description": "Checks the generation status of an avatar task"
    },
    {
      "name": "Get Library Voices",
      "value": "getLibraryVoices",
      "action": "Get a list of Library voices",
      "description": "Retrieves a list of all public available voices"
    },
    {
      "name": "Get My Voices",
      "value": "getMyVoices",
      "action": "Get my voices",
      "description": "Retrieves a list of your custom voices"
    },
    {
      "name": "Get Library Templates",
      "value": "getLibraryTemplates",
      "action": "Get template list from library",
      "description": "Retrieves a list of all public templates voices"
    },
    {
      "name": "Get My Templates",
      "value": "getMyTemplates",
      "action": "Get my templates",
      "description": "Retrieves a list of your custom templates"
    },
    {
      "name": "Upload product",
      "value": "uploadProduct",
      "action": "Upload a product for video creation",
      "description": "Uploads and processes a product to be used for video creation"
    },
    {
      "name": "Update product",
      "value": "updateProduct",
      "action": "Update a product",
      "description": "Update the information of a product"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate an AI script",
      "description": "Generates a script from a product or description using AI"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a file",
      "description": "Uploads a file for use in video generation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get music",
      "description": "Retrieves a list of available background music"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get visual styles",
      "description": "Retrieves a list of available visual styles for use in video generation"
    },
    {
      "name": "List of Webhook Endpoints",
      "value": "webhook:list",
      "action": "List of Webhook Endpoints",
      "description": "Get a list of configured webhook endpoints"
    },
    {
      "name": "Add a Webhook Endpoint",
      "value": "webhook:add",
      "action": "Add a Webhook Endpoint",
      "description": "Add a new webhook endpoint configuration"
    },
    {
      "name": "Update a Webhook Endpoint",
      "value": "webhook:update",
      "action": "Update a Webhook Endpoint",
      "description": "Update an existing webhook endpoint configuration"
    },
    {
      "name": "Delete a Webhook Endpoint",
      "value": "webhook:delete",
      "action": "Delete a Webhook Endpoint",
      "description": "Delete an existing webhook endpoint"
    },
    {
      "name": "List of Available Webhook Events",
      "value": "webhook:events",
      "action": "List of Available Webhook Events",
      "description": "Get a list of available webhook events"
    }
  ]

npm_readme:
  # n8n-nodes-joggai

  Automate the creation of digital human and marketing videos in your n8n workflows via API.

  ---

  JoggAI transforms the days-long manual process of video creation into an automated task that takes just a few minutes. Whether you're batch-producing personalized marketing videos or automatically converting blog posts into videos, you can do it all effortlessly within n8n.

  ## ✨ Features

  - ✅ **Create Video from Digital Human:** Generate talking head videos using Avatars you've created in your JoggAI dashboard or free ones from the public library.
  - ✅ **Create Video from Template:** Dynamically populate content into preset templates from your JoggAI dashboard to generate videos.
  - ✅ **URL to Video:** Instantly convert any product link into a marketing video.
  - ✅ **Create Digital Human:** Supports various digital human likenesses and voice cloning.
  - ✅ **Check Video Status:** Asynchronously fetch video generation progress, suitable for long rendering tasks.

  ## Prerequisites

  Before using this node, please ensure you have:

  - A running n8n instance.
  - A JoggAI account. If you don't have one, you can [register for free here](https://app.jogg.ai/register).

  ## 🚀 Quick Start

  1.  **Install the Node in n8n:**
      - Go to `Settings > Community Nodes`.
      - Click `Install` and search for `n8n-nodes-jogg-ai`.

  2.  **Configure JoggAI Credentials:**
      - In the `Credentials` section of n8n, click `Add Credential`.
      - Search for and select `JoggAI API`.
      - Go to your [JoggAI API settings page](https://app.jogg.ai/home) to copy your API Key and paste it.
        ![Find your JoggAI API Key](https://res.jogg.ai/upload/sam/2025-07-11/292683374000458e91c7a55c4a3915b5.png)

  ## 💡 Example: Automatically Generate Videos from Google Sheets Content

  This workflow automatically creates an Talking avatar video using data from n8n Form.
  ![N8N Form to JoggAI Workflow Example](https://res.jogg.ai/upload/sam/2025-07-11/3be2a12eb38a468594af1e9dd474a917.png)

  1.  Use the `N8N Form Trigger` node to monitor for new rows.
  2.  Connect the `JoggAI` node.
  3.  In the "Text Script" field of the JoggAI node, use an expression to reference column data from the N8N Form, for example: `{{ $json.script }} welcome to joggAI`.
  4.  Execute the workflow, and the video will be created automatically.

  > Want to use this template directly? [Click here to copy the workflow in one click](https://gist.githubusercontent.com/joggaiteam/ab4065803111fd860584deb3dd245689/raw/ef28aa8d6c85bd2213c7c9a177b0c8c3d9e953b0/joggai-example.json).

  ## 🔗 Resources

  - ⚙️ **Full JoggAI API Documentation:** [docs.jogg.ai](https://docs.jogg.ai/api-reference/QuickStart/GettingStarted)

  ## 💬 Support & Feedback

  - For any bugs or feature requests, please raise them in [GitHub Issues](https://github.com/joggaiteam/n8n-nodes-joggai/issues).
  - If you have questions about usage, feel free to ask and @mention us on the [n8n Community Forum](https://community.n8n.io/).

ai_documentation_summary:
  {"purpose":"Automates the creation of digital human and marketing videos within n8n workflows by interacting with the JoggAI API.","capabilities":["Create talking head videos from digital human avatars (custom or public library)","Generate videos by populating preset templates with dynamic content","Convert product URLs into marketing videos","Create and manage digital human likenesses with voice cloning","Check asynchronous video generation status and progress","Batch-produce personalized marketing videos"],"authentication":"API Key required (configured via n8n Credentials section)","commonUseCases":["Automatically generating personalized marketing videos from form submissions or database records","Converting blog posts or text content into video format","Batch processing product links to create promotional videos","Integrating with Google Sheets or other data sources to trigger video creation"],"limitations":["Requires a separate JoggAI account with an API key","Video generation is asynchronous and requires status checking for long tasks","Depends on external JoggAI API availability and rate limits"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-github","n8n-nodes-google-sheets","n8n-nodes-form"]}


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

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

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

npm_readme:
  # n8n-nodes-docugenerate

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

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

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

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

  ## Installation

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

  ## Operations

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

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

  ## Credentials

  You need a DocuGenerate API Key to use this node.

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

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

  ## Compatibility

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

  ## Usage

  ### Generating Documents

  The most common workflow is generating documents from templates:

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

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

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

  ### Template Data Structure

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

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

  ## Resources

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

  ## Version History

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

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


node_type: n8n-nodes-addtowallet.addToWallet
package_name: n8n-nodes-addtowallet
display_name: Add To Wallet
description: Create digital wallet passes via AddToWallet API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: addtowallet-npm
author_github_url: https://github.com/AddToWalletCo/addtowallet-node.git
npm_package_name: n8n-nodes-addtowallet
npm_version: 1.1.8
community_fetched_at: 2026-03-25T21:19:40.855Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "pass",
      "options": [
        {
          "name": "Pass",
          "value": "pass"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a pass",
          "description": "Create a new wallet pass"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pass"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a pass",
      "description": "Create a new wallet pass"
    }
  ]

npm_readme:
  # n8n-nodes-add-to-wallet

  This is an n8n community node. It lets you use _app/service name_ in your n8n workflows.

  _App/service name_ is _one or two sentences describing the service this node integrates with_.

  [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

  _List the operations supported by your node._

  ## Credentials

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

  ## Compatibility

  _State the minimum n8n version, as well as which versions you test against. You can also include any known version incompatibility issues._

  ## Usage

  _This is an optional section. Use it to help users with any difficult or confusing aspects of the node._

  _By the time users are looking for community nodes, they probably already know n8n basics. But if you expect new users, you can link to the [Try it out](https://docs.n8n.io/try-it-out/) documentation to help them get started._

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * _Link to app/service documentation._

  ## Version history

  _This is another optional section. If your node has multiple versions, include a short description of available versions and what changed, as well as any compatibility impact._

ai_documentation_summary:
  {"purpose":"Creates digital wallet passes by integrating with the AddToWallet API within n8n workflows.","capabilities":["Create digital wallet passes","Integrate with AddToWallet API"],"authentication":"Not specified in README","commonUseCases":["Automating digital wallet pass creation","Integrating wallet services into n8n workflows"],"limitations":["Authentication method not documented","No specific compatibility information provided"],"relatedNodes":[]}


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

updated_at: 2026-03-25 21:19:40
author_name: meetgeek
author_github_url: https://github.com/meetgeekai/meetgeekai-n8n-node.git
npm_package_name: n8n-nodes-meetgeek
npm_version: 0.1.6
community_fetched_at: 2026-03-25T21:19:40.856Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "meeting",
      "options": [
        {
          "name": "Meeting",
          "value": "meeting"
        },
        {
          "name": "Recording",
          "value": "recording"
        },
        {
          "name": "Highlight",
          "value": "highlight"
        },
        {
          "name": "Team",
          "value": "team"
        },
        {
          "name": "Transcript",
          "value": "transcript"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyHighlights",
      "options": [
        {
          "name": "Get Many",
          "value": "getManyHighlights",
          "action": "Get many highlights",
          "description": "Get list of highlights for a meeting"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "highlight"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyMeetings",
      "options": [
        {
          "name": "Get Many",
          "value": "getManyMeetings",
          "action": "Gets many meetings",
          "description": "Get list of meetings"
        },
        {
          "name": "Get Meeting Details",
          "value": "getMeeting",
          "action": "Gets a meeting by ID",
          "description": "Get a meeting by ID"
        },
        {
          "name": "Get Meeting Summary",
          "value": "getMeetingSummary",
          "action": "Gets meeting summary by ID",
          "description": "Get meeting summary by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "meeting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadRecording",
      "options": [
        {
          "name": "Upload",
          "value": "uploadRecording",
          "action": "Upload recording",
          "description": "Upload a recording for analysis"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recording"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyTeams",
      "options": [
        {
          "name": "Get Many",
          "value": "getManyTeams",
          "action": "Get many teams",
          "description": "Get list of teams"
        },
        {
          "name": "Get Team Meetings",
          "value": "getTeamMeetings",
          "action": "Gets team meetings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "team"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyTranscripts",
      "options": [
        {
          "name": "Get Many",
          "value": "getManyTranscripts",
          "action": "Get many transcripts",
          "description": "Get list of transcripts for a meeting"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getManyHighlights",
      "action": "Get many highlights",
      "description": "Get list of highlights for a meeting"
    },
    {
      "name": "Get Many",
      "value": "getManyMeetings",
      "action": "Gets many meetings",
      "description": "Get list of meetings"
    },
    {
      "name": "Get Meeting Details",
      "value": "getMeeting",
      "action": "Gets a meeting by ID",
      "description": "Get a meeting by ID"
    },
    {
      "name": "Get Meeting Summary",
      "value": "getMeetingSummary",
      "action": "Gets meeting summary by ID",
      "description": "Get meeting summary by ID"
    },
    {
      "name": "Upload",
      "value": "uploadRecording",
      "action": "Upload recording",
      "description": "Upload a recording for analysis"
    },
    {
      "name": "Get Many",
      "value": "getManyTeams",
      "action": "Get many teams",
      "description": "Get list of teams"
    },
    {
      "name": "Get Team Meetings",
      "value": "getTeamMeetings",
      "action": "Gets team meetings"
    },
    {
      "name": "Get Many",
      "value": "getManyTranscripts",
      "action": "Get many transcripts",
      "description": "Get list of transcripts for a meeting"
    }
  ]

npm_readme:
  # n8n-nodes-meetgeek

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

  MeetGeek is an AI-powered meeting assistant that automatically records, transcribes, and summarizes your meetings.

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

  ## Installation

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

  ## Operations

  ### Meeting
  - **Get Details**: Retrieve detailed information about a specific meeting

  ### Recording  
  - **Upload**: Upload a recording file for analysis and transcription

  ### Highlight
  - **Get**: Retrieve highlights from a specific meeting
  - **Listen for New**: Webhook trigger that fires when a new highlight is created

  ## Credentials

  This node uses the MeetGeek API credentials. You'll need to:

  1. Go to your MeetGeek settings
  2. Navigate to the Integration Tab
  3. Copy your API token from Public API
  4. Create new credentials in n8n using this token

  ## Compatibility

  Tested with n8n version 0.220.0 and above.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [MeetGeek API Documentation](https://docs.meetgeek.ai)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the MeetGeek API to manage AI-powered meeting recordings, transcriptions, and summaries within n8n workflows.","capabilities":["Retrieve detailed information about a specific meeting","Upload recording files for analysis and transcription","Retrieve highlights from a specific meeting","Trigger workflow via webhook when a new highlight is created"],"authentication":"API token required (obtained from MeetGeek settings Integration Tab)","commonUseCases":["Automate meeting transcription workflows","Extract meeting highlights into structured data","Process meeting recordings with AI summarization"],"limitations":["Community node (not official n8n node)","Requires separate MeetGeek account and API token"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest"]}


node_type: n8n-nodes-onenote.onenote
package_name: n8n-nodes-onenote
display_name: OneNote
description: Work with the Microsoft OneNote (Microsoft Graph) API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: weilchen
author_github_url: https://github.com/Elliotes/
npm_package_name: n8n-nodes-onenote
npm_version: 0.2.1
community_fetched_at: 2026-03-25T21:19:40.856Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "page",
      "options": [
        {
          "name": "Page",
          "value": "page"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a page",
          "description": "Get a page"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many pages",
          "description": "Get many pages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a page",
      "description": "Get a page"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many pages",
      "description": "Get many pages"
    }
  ]

npm_readme:
  # n8n-nodes-onenote

  This package provides nodes for **n8n** that enable full integration with **Microsoft OneNote** through the **Microsoft Graph API**.  
  It allows automation, integration, and orchestration of note-related operations directly within n8n workflows.

  ---

  ## About the Author

  This community node was created and shared by **Liam Chen** for the n8n community.  
  It was designed to simplify the complexity of using Microsoft Graph OneNote APIs by providing a clean and easy-to-use interface.

  ---

  ## Table of Contents

  - [Features](#features)
  - [Available Resources](#available-resources)
  - [Authentication Methods](#authentication-methods)
  - [Setting up the Application in Microsoft Entra ID (Azure AD)](#setting-up-the-application-in-microsoft-entra-id-azure-ad)
  - [Using the Node](#using-the-node)
  - [Limitations and Troubleshooting](#limitations-and-troubleshooting)
  - [Additional Resources](#additional-resources)
  - [License](#license)

  ---

  ## Features

  This package provides a simple **OneNote** node with flexible authentication and OneNote functionality.

  ### OneNote Node

  Comprehensive node supporting two authentication methods:

  1. **OAuth2 Authentication** – Secure connection through Microsoft Entra ID (formerly Azure AD).  
  2. **Bearer Token Authentication** – Direct token-based integration for advanced users.

  #### Available Features

  - Notebook, Section, and Page listing  
  - Page creation with plain text or HTML  
  - Retrieve page metadata and content  
  - Dynamic dropdowns for Notebook → Section → Page (list search with pagination)  
  - Optional support for multiple scopes (e.g., `/me`, `/users/{id}`, `/sites/{id}`)

  ---

  ## Available Resources

  ### Notebook Resources
  - **List Notebooks** – Retrieves all available notebooks for the authenticated user  
  - **Get Notebook Details** – Retrieves information about a specific notebook  

  ### Section Resources
  - **List Sections** – Retrieves all sections within a notebook  
  - **Get Section Details** – Retrieves metadata for a specific section  

  ### Page Resources
  - **List Pages** – Lists all pages within a section  
  - **Get Page** – Retrieves a specific page by ID  
  - **Create Page** – Creates a new page under the selected section  
  - **Get Page Content** – Retrieves the full HTML content of a page  

  ---

  ## Authentication Methods

  The OneNote node supports two authentication types:

  ### 1. OAuth2 Authentication

  **Use case:**  
  Recommended for most scenarios — enables secure, refreshable access via Microsoft Entra ID.

  **Credential type:**  
  `OneNote OAuth2 API`

  **Token management:**  
  Automatically refreshed when tokens expire.

  ### 2. Bearer Token Authentication

  **Use case:**  
  For advanced integrations or quick API testing.

  **Credential type:**  
  `OneNote API`

  **Token management:**  
  Manual — you must refresh the token periodically.

  ### Selecting Authentication Method

  1. In the node configuration, choose **Authentication** (OAuth2 or Bearer Token).  
  2. The appropriate credential type will automatically appear.  
  3. Fill in the corresponding credential fields.

  ---

  ## Setting up the Application in Microsoft Entra ID (Azure AD)

  To use OAuth2 authentication, you must register your application in **Microsoft Entra ID (Azure AD)**.

  ### 1. Register a New Application

  1. Go to the [Azure Portal](https://portal.azure.com).  
  2. Navigate to **Microsoft Entra ID → App registrations → New registration**.  
  3. Enter a name, e.g., `n8n OneNote Integration`.  
  4. Under **Supported account types**, choose your desired access scope (e.g., single organization).  
  5. Under **Redirect URI**, select **Web** and enter:  
     - For cloud-hosted n8n:  
       `https://your-n8n-domain/rest/oauth2-credential/callback`  
     - For local development:  
       `http://localhost:5678/rest/oauth2-credential/callback`  
  6. Click **Register**.

  ### 2. Configure API Permissions

  1. In your app’s menu, select **API Permissions → Add a permission → Microsoft Graph**.  
  2. Select **Delegated permissions**, then add:
     - `Notes.Read` or `Notes.ReadWrite` (required)
     - `offline_access`, `openid`, `profile` (recommended for OAuth2)
     - If you plan to access other users’ notebooks: `Sites.Read.All`, `Users.Read.All`
  3. Click **Add permissions**, and request **Admin consent** if necessary.

  ### 3. Create a Client Secret

  1. Go to **Certificates & secrets → New client secret**.  
  2. Add a description and choose an expiration period.  
  3. Click **Add**, and **copy the secret value immediately** (you cannot see it again).

  ### 4. Gather Required Values

  You’ll need the following for n8n configuration:

  - **Client ID** – Found under **Overview → Application (client) ID**  
  - **Client Secret** – The value you just copied  
  - **Tenant ID** – Found under **Overview → Directory (tenant) ID**

  ---

  #### For Bearer Token Authentication:
  - **Credential type:** OneNote API  
  - **Access Token:** Paste your Microsoft Graph access token manually.  
  - Select **Resource** (Notebook, Section, Page) and **Operation**.  
  - Configure operation-specific parameters (Notebook ID, Section ID, etc.).  
  - Execute the node and verify the output.

  ---

  ## Limitations and Troubleshooting

  ### Microsoft Graph OneNote API Limitations

  - **Rate limits:** Standard Graph API rate limits apply. Reduce frequency or use pagination for large queries.  
  - **Permissions:** Ensure your app has `Notes.ReadWrite` and admin consent if required.  
  - **HTML format requirements:** For `Create Page`, your content must include valid HTML (`<html><head>...</head><body>...</body></html>`).  
  - **Access scope:** To access shared notebooks or other users’ data, proper delegated permissions and consent are required.  
  - **Bearer Token expiry:** Tokens expire unless obtained via OAuth2 refresh flow.

  ---

  ## Additional Resources

  - [Microsoft Graph – OneNote API Overview](https://learn.microsoft.com/graph/onenote-concept-overview)  
  - [Microsoft Graph Explorer](https://developer.microsoft.com/graph/graph-explorer)  
  - [Microsoft Graph Permissions Reference](https://learn.microsoft.com/graph/permissions-reference)  
  - [n8n Custom Node Development Guide](https://docs.n8n.io/integrations/creating-nodes/)  

  ---

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n node enables full integration with Microsoft OneNote via the Microsoft Graph API, allowing automation of note-related operations such as listing, creating, and retrieving pages, sections, and notebooks.","capabilities":["List notebooks, sections, and pages","Get details for specific notebooks, sections, and pages","Create new pages with plain text or HTML content","Retrieve page content and metadata","Dynamic dropdowns for Notebook → Section → Page selection with pagination","Support for multiple scopes (e.g., /me, /users/{id}, /sites/{id})","OAuth2 authentication via Microsoft Entra ID","Bearer token authentication for advanced use cases"],"authentication":"OAuth2 (via Microsoft Entra ID) or Bearer Token","commonUseCases":["Automating note-taking workflows in n8n","Syncing notes between systems and OneNote","Creating structured documentation pages","Integrating OneNote with other Microsoft 365 services","Centralizing note management across multiple notebooks"],"limitations":["Subject to Microsoft Graph API rate limits","Requires valid HTML format for page creation","Bearer tokens require manual refresh","Access to shared notebooks requires proper permissions and admin consent","Limited support for advanced OneNote features not exposed via Graph API"],"relatedNodes":["Microsoft Graph","Microsoft 365","Office 365","Azure AD"]}


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

updated_at: 2026-03-25 21:19:40
author_name: gr33ndev
author_github_url: https://github.com/Gr33ndev/
npm_package_name: n8n-nodes-teamupcalendar
npm_version: 0.4.2
community_fetched_at: 2026-03-25T21:19:40.857Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "event",
      "options": [
        {
          "name": "Event",
          "value": "event",
          "description": "Work with calendar events"
        },
        {
          "name": "Subcalendar",
          "value": "subcalendar",
          "description": "Work with subcalendars"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an event",
          "description": "Create a new event"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an event",
          "description": "Delete an event"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "description": "Retrieve a single event by ID"
        },
        {
          "name": "Get Auxiliary Info",
          "value": "getAuxiliaryInfo",
          "action": "Get auxiliary event info",
          "description": "Get an event's history, comments, and signups"
        },
        {
          "name": "Get Changed Events",
          "value": "getChanged",
          "action": "Get changed events",
          "description": "Get events that changed since a timestamp"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many events",
          "description": "Retrieve multiple events"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search events",
          "description": "Search events by keyword"
        },
        {
          "name": "Undo",
          "value": "undo",
          "action": "Undo an event action",
          "description": "Undo the last action on an event"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an event",
          "description": "Update an existing event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an subcalendar",
          "description": "Create a new subcalendar"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a subcalendar",
          "description": "Delete a subcalendar"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a subcalendar",
          "description": "Retrieve a single subcalendar by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many subcalendars",
          "description": "Retrieve all subcalendars"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a subcalendar",
          "description": "Update an existing subcalendar"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subcalendar"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an event",
      "description": "Create a new event"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an event",
      "description": "Delete an event"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an event",
      "description": "Retrieve a single event by ID"
    },
    {
      "name": "Get Auxiliary Info",
      "value": "getAuxiliaryInfo",
      "action": "Get auxiliary event info",
      "description": "Get an event's history, comments, and signups"
    },
    {
      "name": "Get Changed Events",
      "value": "getChanged",
      "action": "Get changed events",
      "description": "Get events that changed since a timestamp"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many events",
      "description": "Retrieve multiple events"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search events",
      "description": "Search events by keyword"
    },
    {
      "name": "Undo",
      "value": "undo",
      "action": "Undo an event action",
      "description": "Undo the last action on an event"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an event",
      "description": "Update an existing event"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an subcalendar",
      "description": "Create a new subcalendar"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a subcalendar",
      "description": "Delete a subcalendar"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a subcalendar",
      "description": "Retrieve a single subcalendar by ID"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many subcalendars",
      "description": "Retrieve all subcalendars"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a subcalendar",
      "description": "Update an existing subcalendar"
    }
  ]

npm_readme:
  # n8n-nodes-teamupcalendar

  This is a n8n community node. It lets you use [Teamup Calendar](https://teamup.com) in your n8n workflows.

  Teamup Calendar is a collaborative calendar platform that allows teams to share calendars, manage events, and coordinate
  schedules. It offers powerful features like subcalendars and flexible access controls.

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

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

  ## Installation

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

  ## Operations

  ### Event Operations

  - **Create**: Create a new calendar event with title, dates, subcalendar assignment, and optional fields like location,
    notes, and attendees
  - **Delete**: Remove events from the calendar
  - **Get**: Retrieve details of a specific event by its ID
  - **Get Auxiliary Info**: Fetch additional information related to an event
  - **Get Changed Events**: Retrieve events that have changed since a specified timestamp (max 30 days ago)
  - **Get Many**: Retrieve multiple events with filtering options by date range, subcalendar, and result limits
  - **Search events**: Find events based on keywords in titles or notes
  - **Undo**: Undo an event action
  - **Update**: Modify existing events including changing dates, titles, subcalendars, and other properties

  ### Subcalendar Operations

  - **Create**: Add a new subcalendar to the Teamup calendar
  - **Delete**: Remove a subcalendar from the Teamup calendar
  - **Get**: Retrieve details of a specific subcalendar by its ID
  - **Get Many**: Fetch all available subcalendars for the connected Teamup calendar
  - **Update**: Change properties of an existing subcalendar such as name and color

  ## Credentials

  To use this node, you need:

  1. **Teamup Calendar Account**: Sign up at [Teamup Calendar](https://teamup.com/register) and get your API key from
     there
  2. **Calendar Key**: The unique identifier for your Teamup calendar (found in your share calendar URL, Settings >
     Sharing > Create Link)

  ### Setting up credentials:

  1. Create a Teamup calendar or use an existing one
  2. Share your calendar via Settings > Sharing > Create Link
  3. Note your calendar key from that sharing URL (e.g., `https://teamup.com/ks1234567890` → key is `ks1234567890`)
  4. In n8n, create new "Teamup API" credentials with your calendar key and API token

  ## Compatibility

  - **Minimum n8n version**: 1.117.3
  - **Tested with**: n8n version 1.117.3 & 1.123.5

  ## Usage

  ### Basic Event Creation

  1. Select "Event" as resource and "Create" as operation
  2. Choose the target subcalendar
  3. Set event title, start date/time, and end date/time
  4. Optionally add location, notes, attendees, or mark as all-day event

  ### Filtering Events

  When using "Get Many" for events:

  - **Start Date**: Events starting on or after this date (defaults to today)
  - **End Date**: Events starting before this date (defaults to today's end of the day)
  - **Subcalendar**: Filter by specific subcalendar (optional)
  - **Limit**: Maximum number of events to return (default: 50, max: 1000)

  ### Date/Time Handling

  - All dates are automatically formatted for the Teamup API
  - Supports both date-only and full datetime values
  - Timezone handling follows your n8n instance settings

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Teamup Calendar API Documentation](https://apidocs.teamup.com/)
  * [Teamup Calendar Help Center](https://support.teamup.com/)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables interaction with the Teamup Calendar API to manage collaborative calendar events and subcalendars.","capabilities":["Create calendar events with title, dates, subcalendar, location, notes, and attendees","Delete calendar events","Retrieve event details by ID","Fetch auxiliary information for events","Retrieve changed events since a specified timestamp","Retrieve multiple events with filtering by date range, subcalendar, and limits","Search events by keywords in titles or notes","Undo event actions","Update existing event properties","Create subcalendars"],"authentication":"API key required (Teamup API token and Calendar Key)","commonUseCases":["Automating meeting scheduling within a team","Syncing calendar events from other sources to Teamup","Retrieving and filtering team availability","Managing subcalendars for different teams or projects"],"limitations":["Event change retrieval is limited to events changed within the last 30 days","Event retrieval limit is capped at 1000 events per request","Requires a Teamup Calendar account and API token"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.set","n8n-nodes-base.splitInBatches"]}


node_type: n8n-nodes-extruct.extruct
package_name: n8n-nodes-extruct
display_name: Extruct AI
description: Add companies to Extruct tables and run enrichment
category: Community
development_style: declarative
version: 3
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: zodackwand
author_github_url: https://github.com/extruct-ai/
npm_package_name: n8n-nodes-extruct
npm_version: 2.1.0
community_fetched_at: 2026-03-25T21:19:40.857Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-extruct

  ![Extruct AI Banner](icons/banner.png)

  **n8n community node for Extruct AI**

  This node lets you enrich and fetch company data from Extruct AI, right inside your n8n workflows.
  Define your own table structure, add any custom columns, and get exactly the data you need.

  ### Instant preview

  Suppose you want to enrich a company by website and get its funding, team size, recent news headline, patent count, and head of HR LinkedIn profile.


  ```json
  {
    "company_name": {
      "value": {
        "answer": "Stripe",
        "source": [
          "https://en.wikipedia.org/wiki/Stripe,_Inc."
        ],
        "explanation": "Full company name as listed on the Stripe Wikipedia page."
      }
    },
    "company_website": {
      "value": {
        "answer": "https://stripe.com/",
        "source": [
          "https://en.wikipedia.org/wiki/Stripe,_Inc.",
          "https://stripe.com"
        ],
        "explanation": "Canonical homepage confirmed on Wikipedia and the stripe.com domain."
      }
    },
    "recent_news_headline": {
      "value": {
        "answer": "Stripe’s first employee, the founder of fintech Increase, sort of bought a bank",
        "source": [
          "https://techcrunch.com/2025/07/03/stripes-first-employee-the-founder-of-fintech-increase-sort-of-bought-a-bank"
        ],
        "explanation": "Headline from a TechCrunch article published July 3, 2025, as the latest news about Stripe."
      }
    },
    "team_size": {
      "value": {
        "answer": "8550",
        "source": [
          "https://techcrunch.com/2025/01/21/stripe-is-laying-off-300-people-but-says-it-still-plans-to-hire-in-2025"
        ],
        "explanation": "About 8,550 employees after a January 2025 layoff of 300 people, per TechCrunch."
      }
    },
    "patent_count": {
      "value": {
        "answer": "247",
        "source": [
          "https://insights.greyb.com/stripe-patents"
        ],
        "explanation": "Total of 247 patents held globally by Stripe, according to GreyB Insights."
      }
    },
    "funding_amount": {
      "value": {
        "answer": "$9.81B",
        "source": [
          "https://tracxn.com/d/companies/stripe/__uahG_IGnVgsUsOG-f8otYHLkOkliWg7YFhJ5ZkNIkpI/funding-and-investors",
          "https://www.crunchbase.com/organization/stripe/company_financials"
        ],
        "explanation": "Raised $9.81 B over 24 rounds, including a $6.87 B round in March 2023, per Tracxn and Crunchbase."
      }
    },
    "head_of_hr_linkedin": {
      "value": {
        "answer": "https://www.linkedin.com/in/maiaj",
        "source": [
          "https://www.comparably.com/companies/stripe/maia-josebachvili",
          "https://www.linkedin.com/in/maiaj"
        ],
        "explanation": "Confirmed as Head of People at Stripe via Comparably and LinkedIn."
      }
    }
  }
  ```



  ## What is Extruct AI?

  **Extruct AI** is a data enrichment platform that lets you create custom tables with any columns you want, and then enrich them with company data from the web and public sources.  

  - **Any info you want:** Define your own columns — get emails, social links, funding, tech stack, or anything else.
  - **No limits:** Works for any company, in any country, any industry.
  - **Built for automation:** Integrate with CRMs, lead gen, analytics, and more.



  ## Features

  - Add a company to your Extruct table and trigger enrichment
  - Poll for enrichment completion automatically
  - Instantly fetch the enriched row with all your custom columns
  - Use in any n8n workflow



  ## Installation

  Follow the [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/) for installing custom nodes.



  ## Usage

  1. **Create an Extruct table:**
     - You can start from a template table or create your own from scratch at [Extruct AI](https://extruct.ai).
     - Add any custom columns you need — you have full control over the table structure and fields.
  2. **Get your Table ID:**
     - After creating the table, copy its Table ID from the Extruct dashboard, or simply grab it from the table page URL.
  3. **Use in n8n:**
     - In the Extruct node, paste your Table ID.
     - Enter the company name or website you want to enrich:
       - You can type it manually in the node field,
       - Or pass it dynamically from a Form Trigger,
       - Or from any other node in your workflow — just connect it to the Extruct node.
     - Run the workflow — the node will add the company, trigger enrichment, and return the enriched data for your custom columns.

  ## Quick Demo

  ![n8n node demo](https://github.com/zodackwand/extruct_screenshots/blob/main/demo.gif?raw=true)


  ## Operations

  ### Enrich Company Info

  - **Input:**  
    - Table ID (your Extruct table)
    - Company Input (website or name)
  - **Output:**  
    - Returns a fully enriched row with all your custom columns as clean JSON, ready to use in your n8n workflow.

  **How it works:**  
  1. Adds a company to your Extruct table  
  2. Triggers enrichment  
  3. Waits for completion  
  4. Returns the enriched row (with all your custom fields)



  ## Output
  The node returns clean JSON with all enriched fields for the company, matching your custom table columns.



  ## Extruct Table Templates
  Use these ready-to-go table templates for your n8n workflows:

  - [Sales and Business Development](https://app.extruct.ai/tables/shared/jlcBdFwKXrC8uw21)  
    *Track leads, enrich company profiles, and automate sales research.*

  - [Complete Startup Overview](https://app.extruct.ai/tables/shared/gQlqQK4pQgPDmk81)  
    *Get a 360° view of startups with funding, team, and product data.*

  - [Social Enrichment](https://app.extruct.ai/tables/shared/VfGemEC1BujAIJx8)  
    *Enrich companies with social profiles, Twitter, LinkedIn, and more.*

  Open a template, get the Table ID, and use it in your node.



  ## Credentials

  - **Extruct API Token**  
    - Sign up at [extruct.ai](https://extruct.ai)
    - Get your API token from the dashboard
    - Add it as a credential in n8n



  ## Resources

  - [Extruct AI website](https://extruct.ai)
  - [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Extruct AI API Docs](https://www.extruct.ai/docs/extruct-ai/product)



  ## Compatibility

  - **n8n:** Tested with n8n v1.100.0

ai_documentation_summary:
  {"purpose":"This n8n community node enriches company data by adding companies to a custom Extruct AI table, triggering automated enrichment, and returning structured JSON with custom columns like funding, team size, and social profiles.","capabilities":["Add companies to custom Extruct AI tables","Trigger automated data enrichment","Poll for enrichment completion status","Return enriched data as clean JSON","Support custom table structures with any columns","Fetch company data from multiple web sources","Integrate with n8n workflows via dynamic inputs"],"authentication":"Extruct API Token (requires manual entry in n8n credentials)","commonUseCases":["Sales lead enrichment","Startup research and analysis","CRM data population","Competitor intelligence gathering","Automated social profile extraction"],"limitations":["Requires manual setup of Extruct AI account and API token","Enrichment results depend on data availability in Extruct's sources","Custom table structure must be defined in Extruct AI dashboard before use","May require waiting for enrichment completion before data is returned"],"relatedNodes":["n8n HTTP Request","n8n Code","n8n Form Trigger","n8n Webhook"]}


node_type: n8n-nodes-sendzen.sendZen
package_name: n8n-nodes-sendzen
display_name: SendZen for WhatsApp API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: sendzen-io
author_github_url: https://github.com/sendzen-io/
npm_package_name: n8n-nodes-sendzen
npm_version: 1.0.8
community_fetched_at: 2026-03-25T21:19:40.858Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Build WhatsApp chatbots & automations: send messages, media, and notifications via the WhatsApp Cloud API.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendSessionMessage",
      "options": [
        {
          "hint": "Use this option to reply to a user within an active conversation without using a template.",
          "name": "Send Session Message",
          "value": "sendSessionMessage",
          "action": "Send session message",
          "description": "Send a free-form message within an active 24-hour WhatsApp conversation window"
        },
        {
          "hint": "Use this option when replying outside the 24-hour session window or when a template is required by WhatsApp.",
          "name": "Send Template Message",
          "value": "sendTemplateMessage",
          "action": "Send template message",
          "description": "Send a pre-approved WhatsApp template message to a recipient"
        },
        {
          "hint": "Use this option to mark the incoming message as read.",
          "name": "Mark as Read",
          "value": "markAsRead",
          "action": "Mark as read",
          "description": "Mark the incoming message as read."
        },
        {
          "hint": "Use this option to show a typing indicator while the workflow continues.",
          "name": "Show Typing Indicator",
          "value": "showTyping",
          "action": "Show typing indicator",
          "description": "Display a typing indicator while the workflow continues."
        }
      ],
      "required": true,
      "description": "Choose how you want to interact with the recipient using SendZen.",
      "displayName": "Operation",
      "disabledOptions": {
        "show": {
          "resource": [
            "sendMessage"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "hint": "Use this option to reply to a user within an active conversation without using a template.",
      "name": "Send Session Message",
      "value": "sendSessionMessage",
      "action": "Send session message",
      "description": "Send a free-form message within an active 24-hour WhatsApp conversation window"
    },
    {
      "hint": "Use this option when replying outside the 24-hour session window or when a template is required by WhatsApp.",
      "name": "Send Template Message",
      "value": "sendTemplateMessage",
      "action": "Send template message",
      "description": "Send a pre-approved WhatsApp template message to a recipient"
    },
    {
      "hint": "Use this option to mark the incoming message as read.",
      "name": "Mark as Read",
      "value": "markAsRead",
      "action": "Mark as read",
      "description": "Mark the incoming message as read."
    },
    {
      "hint": "Use this option to show a typing indicator while the workflow continues.",
      "name": "Show Typing Indicator",
      "value": "showTyping",
      "action": "Show typing indicator",
      "description": "Display a typing indicator while the workflow continues."
    }
  ]

npm_readme:
  [![npm version](https://img.shields.io/npm/v/n8n-nodes-sendzen.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-sendzen)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE.md)
  [![n8n](https://img.shields.io/badge/n8n-community-orange?style=flat-square)](https://n8n.io)

  # n8n-nodes-sendzen

  This is an n8n community node for integrating **SendZen** with your workflows.

  SendZen provides an API on top of the **official WhatsApp Cloud API**, so you can send messages (session + templates) and receive inbound WhatsApp messages via webhooks.

  - Website: https://www.sendzen.io
  - Docs: https://sendzen.io/docs

  ---

  ## Table of Contents

  - [Overview](#overview)
  - [Installation](#installation)
  - [Authentication](#authentication)
  - [Features](#features)
  - [How to Use the SendZen Action Node](#how-to-use-the-sendzen-action-node)
  - [How to Use the SendZen Trigger Node](#how-to-use-the-sendzen-trigger-node)
  - [Common Use Cases](#common-use-cases)
  - [Best Practices](#best-practices)
  - [Troubleshooting](#troubleshooting)
  - [Compatibility](#compatibility)
  - [Resources](#resources)
  - [Running Locally](#running-locally)
  - [Contributing](#contributing)
  - [Support](#support)
  - [License](#license)

  ---

  ## Overview

  SendZen helps developers and software platforms use WhatsApp reliably without dealing with all the Meta Cloud API complexity directly.

  With this n8n node, you can:

  - Send **session messages** (within 24-hour customer care window)
  - Send **template messages** (for business-initiated conversations)
  - Mark messages as read
  - Show typing indicator
  - Receive inbound messages via **webhook trigger**

  ---

  ## Screenshots

  ### Send Session Message

  ![SendZen Send Session Message Node in n8n](https://raw.githubusercontent.com/sendzen-io/n8n-nodes-sendzen/main/assets/Session_Message.png)

  ### Send Template Message

  ![SendZen Send Template Message Node in n8n](https://raw.githubusercontent.com/sendzen-io/n8n-nodes-sendzen/main/assets/Template_Message.png)

  ---

  ## Installation

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

  ---

  ## Authentication

  To use this node, you need a **SendZen API Key**.

  1. Sign up at https://www.sendzen.io
  2. Go to your dashboard and generate an API key (Dashboard → API Keys)
  3. Connect your WhatsApp Business Account (WABA) inside SendZen (required to send messages)

  > Note: Keep your API key secure and never commit it to code or share it publicly.

  ---

  ## Data & Security Notes

  - This node sends message content, recipient phone numbers, template names, and template variables to SendZen to deliver WhatsApp messages.
  - Store your SendZen API key only in **n8n Credentials**.
  - For inbound messages, enable **webhook signature verification** (recommended) to prevent spoofed requests.

  ---

  ## Features

  ### SendZen Action Node

  - **Send Session Message**
    - Send free-form text messages within the active 24-hour window
    - Supports URL previews and E.164 validation
  - **Send Template Message**
    - Send pre-approved templates to start conversations
    - Dynamic template + variable mapping (body, header, buttons)
    - Supports media headers (image, video, document, audio)
    - Supports CTA and quick reply buttons
  - **Mark as Read**
    - Mark inbound messages as read (useful for UX and analytics)
    - Auto-detects message identifiers when connected from the trigger
  - **Show Typing Indicator**
    - Show “Typing…” to make automations feel more natural

  ### SendZen Trigger Node

  - Receive inbound WhatsApp messages in real time via webhook
  - Outputs full message payload (text, media, location, contacts)
  - Simple webhook setup: copy URL from node → paste in SendZen dashboard

  ---

  ## How to Use the SendZen Action Node

  ### Prerequisites

  - A SendZen account
  - A connected WhatsApp Business Account (WABA) in SendZen
  - Access to n8n

  ### Setup Process

  1. **Create your SendZen API key**
     - Open SendZen dashboard
     - Go to **API Keys**
     - Copy the key and store it securely

  2. **Connect your WABA**
     - Complete the WABA connection flow in SendZen
     - Ensure at least one phone number is connected and active

  ### Integration Steps (n8n)

  1. Create a new workflow in n8n
  2. Add any trigger (Webhook, Schedule, CRM trigger, etc.)
  3. Add **SendZen** node
  4. In SendZen node:
     - Select **Credentials** → **Create New**
     - Choose **SendZen API**
     - Paste your API key
     - Save
  5. Choose an operation and fill required fields
  6. Click **Test Step**
  7. Save and activate your workflow

  ---

  ## How to Use the SendZen Trigger Node

  ### Prerequisites

  - A SendZen account
  - A connected WABA phone number
  - Access to n8n

  ### Webhook signature verification (HMAC-SHA256) — recommended

  SendZen signs every webhook payload using **HMAC-SHA256** and includes the signature in the `X-Hub-Signature-256` header in this format:

  - `X-Hub-Signature-256: sha256=<hex>`

  To enable signature verification in n8n:

  1. In the **SendZen dashboard** webhook settings, set a **Secret Key** (recommended).
  2. In n8n, create credentials:
     - Credentials type: **SendZen Webhook API**
     - Set **Secret Key** to the same value you configured in SendZen.
  3. In the **SendZen Trigger** node, select those **SendZen Webhook API** credentials.

  If credentials are set, the trigger will return **401** for missing/invalid signatures.

  Important: signature verification requires hashing the **raw request body**. Avoid any middleware/proxies that reformat/pretty-print the JSON payload. If you run n8n behind Cloudflare / nginx / API gateway, ensure it does not modify request body (no pretty-print, no re-encoding)

  ### Setup Process

  1. **Get your webhook URL from n8n**
     - Add **SendZen Trigger** node in your workflow
     - At the top of the node, find **Webhook URLs**
     - Copy the **Production URL**

  Tip: Use the **Test URL** while testing in the editor. After activating the workflow, set the **Production URL** in SendZen for live traffic.

  2. **Add webhook URL in SendZen**
     - Open SendZen dashboard webhook settings
     - Paste the Production URL
     - Save changes

  3. **Test and activate**
     - In n8n, click **Test Step**
     - Send a WhatsApp message to your connected number to verify the trigger fires
     - Save workflow and toggle **Active**

  ---

  ## Common Use Cases

  - **Lead capture + instant reply**: Trigger on inbound message, capture details, respond with next steps
  - **Order updates**: Trigger on order status change, send template message
  - **Appointment reminders**: Scheduled trigger, send template reminders
  - **Support automation**: Trigger on inbound support message, route based on keywords, reply
  - **Payment reminders**: Trigger from billing system, send WhatsApp template


    ### Example 1: New lead → WhatsApp template

    Trigger: CRM/New form submission → Send Template Message → Log result.

    ### Example 2: Inbound WhatsApp → Auto-reply + CRM

    SendZen Trigger → IF keyword contains "pricing" → Send Session Message → Create lead in CRM.

  ---

  ## Best Practices

  - Use **template messages** to start conversations (business-initiated).
  - Use **session messages** only within the active 24-hour window.
  - Keep API keys only inside **n8n Credentials**.
  - For production workflows, log failures and add retries (for example using IF + Wait + Retry patterns).
  - When using templates, prefer mapping variables explicitly so workflows remain readable.

  ---

  ## Troubleshooting

  - **401 / auth error**: Re-check API key and credential selected in the node
  - **No WABA accounts listed**: Confirm WABA is connected inside SendZen
  - **Trigger not firing**:
    - Ensure webhook URL is saved in SendZen
    - Confirm the URL is publicly reachable
    - Confirm workflow is active in n8n
  - **Template missing**: Ensure template exists and is approved in your WhatsApp Business Manager

  ---

  ## Compatibility

  - **n8n**: 1.0.0+ (tested on 1.89.2+)
  - **Node.js**: >= 18.10

  ---

  ## Resources

  - SendZen Documentation: https://sendzen.io/docs
  - WhatsApp Cloud API Reference: https://developers.facebook.com/docs/whatsapp
  - n8n Community Nodes: https://docs.n8n.io/integrations/community-nodes/

  ---

  ## Version history

  ### 1.0.1

  - **Robustness:** Added comprehensive Jest test suite for Triggers, Actions, and Template Builders.
  - **Optimization:** Reduced package size by excluding development files.

  ### 1.0.0

  - Initial release
  - Support for Session Messages, Templates, Mark as Read, Typing Indicators.
  - Webhook Trigger support.
  - Auto-discovery for WABA Accounts and Templates.

  ---

  ## Running Locally

  If you want to contribute or modify this node:

  1.  **Clone:** `git clone https://github.com/sendzen-io/n8n-nodes-sendzen.git`
  2.  **Install:** `pnpm install`
  3.  **Build:** `pnpm build`
  4.  **Test:** `pnpm test` (Runs the Jest test suite)
  5.  **Link:** Follow the [n8n custom node guide](https://docs.n8n.io/integrations/community-nodes/create/) to link `dist` to your local n8n instance.

  ---

  ## Contributing

  We welcome contributions! Please follow these steps:

  1.  Fork the repository.
  2.  Create a feature branch.
  3.  **Run Tests:** Ensure `pnpm test` passes.
  4.  Submit a Pull Request.

  ## Support

  - Email: [milan@sendzen.io](mailto:milan@sendzen.io)
  - Issues: use GitHub Issues in this repository

  ---

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with SendZen to send and receive WhatsApp messages via the WhatsApp Cloud API, enabling chatbot automation and customer care workflows.","capabilities":["Send session messages (free-form text within 24-hour window)","Send template messages with dynamic variables and media headers","Mark inbound messages as read","Show typing indicator for natural automation feel","Receive inbound WhatsApp messages via webhook trigger","Support URL previews and E.164 phone number validation","Support CTA and quick reply buttons in templates"],"authentication":"API key required (SendZen API Key stored in n8n Credentials)","commonUseCases":["Automated customer support responses","Order confirmation and shipping notifications","Appointment reminders and scheduling","Marketing campaigns and promotional messages","Two-factor authentication (2FA) codes"],"limitations":["Session messages are limited to the 24-hour customer care window","Template messages require pre-approval from WhatsApp","Webhook signature verification requires raw request body without middleware modification","Requires a connected WhatsApp Business Account (WABA) in SendZen","Inbound message handling requires webhook setup on SendZen dashboard"],"relatedNodes":["n8n-nodes-whatsapp","n8n-nodes-webhook","n8n-nodes-credentials"]}


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

updated_at: 2026-03-25 21:19:40
author_name: lonare
author_github_url: https://github.com/harshalone/
npm_package_name: n8n-nodes-eranol
npm_version: 0.2.3
community_fetched_at: 2026-03-25T21:19:40.859Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "video",
      "options": [
        {
          "name": "Audio",
          "value": "audio"
        },
        {
          "name": "Compose",
          "value": "compose"
        },
        {
          "name": "Convert",
          "value": "convert"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Notify",
          "value": "notify"
        },
        {
          "name": "Video",
          "value": "video"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "trim",
      "options": [
        {
          "name": "Add Intro",
          "value": "addIntro",
          "action": "Add intro to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/add-intro",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Prepend an intro clip to a video"
        },
        {
          "name": "Add Outro",
          "value": "addOutro",
          "action": "Add outro to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/add-outro",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Append an outro clip to a video"
        },
        {
          "name": "Caption",
          "value": "caption",
          "action": "Add captions to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/caption",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Generate captions from audio using speech recognition"
        },
        {
          "name": "Extract Audio",
          "value": "extractAudio",
          "action": "Extract audio from video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/extract/audio",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Extract the audio track as a WAV file"
        },
        {
          "name": "Extract Images",
          "value": "extractImages",
          "action": "Extract images from video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/extract/images",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Extract frames as PNG images"
        },
        {
          "name": "Generate GIF",
          "value": "generateGif",
          "action": "Generate GIF from video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/extract/gif",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Create a GIF from a video segment (max 60s)"
        },
        {
          "name": "Overlay",
          "value": "overlay",
          "action": "Add overlays to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/overlay",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Add text or image overlays to a video"
        },
        {
          "name": "Progress Bar",
          "value": "progressBar",
          "action": "Add progress bar to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/progress-bar",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Add an animated progress indicator to a video"
        },
        {
          "name": "Reframe",
          "value": "reframe",
          "action": "Reframe video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/reframe",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Change the aspect ratio with colored padding"
        },
        {
          "name": "Thumbnail",
          "value": "thumbnail",
          "action": "Create video thumbnail",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/thumbnail",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Extract a frame with optional text overlay"
        },
        {
          "name": "Trim",
          "value": "trim",
          "action": "Trim video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/trim",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Cut a video segment using lossless stream copy"
        },
        {
          "name": "Watermark",
          "value": "watermark",
          "action": "Add watermark to video",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/watermark",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Overlay a logo or watermark on a video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "denoise",
      "options": [
        {
          "name": "Denoise",
          "value": "denoise",
          "action": "Denoise audio",
          "routing": {
            "request": {
              "url": "/ffmpeg/audio/denoise",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Remove background noise from audio"
        },
        {
          "name": "Highlights",
          "value": "highlights",
          "action": "Extract audio highlights",
          "routing": {
            "request": {
              "url": "/ffmpeg/audio/highlights",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Extract the loudest segments based on RMS energy"
        },
        {
          "name": "Remove Silence",
          "value": "removeSilence",
          "action": "Remove silence from audio",
          "routing": {
            "request": {
              "url": "/ffmpeg/audio/remove-silence",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Detect and eliminate quiet gaps in audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "audio"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "videoToMp4",
      "options": [
        {
          "name": "Audio to MP3",
          "value": "audioToMp3",
          "action": "Convert audio to MP3",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/audio/to/mp3",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert an audio file to MP3 format"
        },
        {
          "name": "Audio to WAV",
          "value": "audioToWav",
          "action": "Convert audio to WAV",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/audio/to/wav",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert an audio file to WAV format"
        },
        {
          "name": "Image to JPG",
          "value": "imageToJpg",
          "action": "Convert image to JPG",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/image/to/jpg",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert an image file to JPG format"
        },
        {
          "name": "Image to WebP",
          "value": "imageToWebp",
          "action": "Convert image to web p",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/image/to/webp",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert an image file to WebP format"
        },
        {
          "name": "Video to MP4",
          "value": "videoToMp4",
          "action": "Convert video to MP4",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/video/to/mp4",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert a video file to MP4 format"
        },
        {
          "name": "Video to WebM",
          "value": "videoToWebm",
          "action": "Convert video to web m",
          "routing": {
            "request": {
              "url": "/ffmpeg/convert/video/to/webm",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Convert a video file to WebM format (VP9 + Opus)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "convert"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "merge",
      "options": [
        {
          "name": "Concat",
          "value": "concat",
          "action": "Concatenate videos",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/concat",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Merge video clips in order into a single video"
        },
        {
          "name": "Compose Video",
          "value": "composeVideo",
          "action": "Compose video with overlays",
          "routing": {
            "request": {
              "url": "/ffmpeg/video/compose",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Overlay video or image segments onto a main video at specific time ranges"
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge images and audio into video",
          "routing": {
            "request": {
              "url": "/ffmpeg/merge",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Combine image slides with audio into a video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "compose"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateImage",
      "options": [
        {
          "name": "Generate Image",
          "value": "generateImage",
          "action": "Generate image with AI",
          "routing": {
            "request": {
              "url": "/image",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Generate an image using AI from a text prompt"
        },
        {
          "name": "Get Image Status",
          "value": "imageStatus",
          "action": "Get image generation status",
          "routing": {
            "request": {
              "url": "=/image/status/{{$parameter.jobId}}",
              "method": "GET"
            }
          },
          "description": "Check the status of an image generation job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendEmail",
      "options": [
        {
          "name": "Send Email",
          "value": "sendEmail",
          "action": "Send email notification",
          "routing": {
            "request": {
              "url": "/notifications/email",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              }
            }
          },
          "description": "Send an HTML email notification"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "notify"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Delete",
          "value": "deleteJob",
          "action": "Delete a job",
          "routing": {
            "request": {
              "url": "=/ffmpeg/jobs/{{$parameter.jobId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a job and its associated output file"
        },
        {
          "name": "Get Result",
          "value": "getResult",
          "action": "Get job result",
          "routing": {
            "request": {
              "url": "=/ffmpeg/result/{{$parameter.jobId}}",
              "method": "GET"
            }
          },
          "description": "Get the result of a completed job"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get job status",
          "routing": {
            "request": {
              "url": "=/ffmpeg/status/{{$parameter.jobId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve current job status, progress, and completion data"
        },
        {
          "name": "Verify API Key",
          "value": "verify",
          "action": "Verify API key",
          "routing": {
            "request": {
              "url": "/verify",
              "method": "GET"
            }
          },
          "description": "Check that the API key is valid and retrieve account details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Intro",
      "value": "addIntro",
      "action": "Add intro to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/add-intro",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Prepend an intro clip to a video"
    },
    {
      "name": "Add Outro",
      "value": "addOutro",
      "action": "Add outro to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/add-outro",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Append an outro clip to a video"
    },
    {
      "name": "Caption",
      "value": "caption",
      "action": "Add captions to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/caption",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Generate captions from audio using speech recognition"
    },
    {
      "name": "Extract Audio",
      "value": "extractAudio",
      "action": "Extract audio from video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/extract/audio",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Extract the audio track as a WAV file"
    },
    {
      "name": "Extract Images",
      "value": "extractImages",
      "action": "Extract images from video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/extract/images",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Extract frames as PNG images"
    },
    {
      "name": "Generate GIF",
      "value": "generateGif",
      "action": "Generate GIF from video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/extract/gif",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Create a GIF from a video segment (max 60s)"
    },
    {
      "name": "Overlay",
      "value": "overlay",
      "action": "Add overlays to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/overlay",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Add text or image overlays to a video"
    },
    {
      "name": "Progress Bar",
      "value": "progressBar",
      "action": "Add progress bar to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/progress-bar",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Add an animated progress indicator to a video"
    },
    {
      "name": "Reframe",
      "value": "reframe",
      "action": "Reframe video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/reframe",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Change the aspect ratio with colored padding"
    },
    {
      "name": "Thumbnail",
      "value": "thumbnail",
      "action": "Create video thumbnail",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/thumbnail",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Extract a frame with optional text overlay"
    },
    {
      "name": "Trim",
      "value": "trim",
      "action": "Trim video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/trim",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Cut a video segment using lossless stream copy"
    },
    {
      "name": "Watermark",
      "value": "watermark",
      "action": "Add watermark to video",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/watermark",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Overlay a logo or watermark on a video"
    },
    {
      "name": "Denoise",
      "value": "denoise",
      "action": "Denoise audio",
      "routing": {
        "request": {
          "url": "/ffmpeg/audio/denoise",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Remove background noise from audio"
    },
    {
      "name": "Highlights",
      "value": "highlights",
      "action": "Extract audio highlights",
      "routing": {
        "request": {
          "url": "/ffmpeg/audio/highlights",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Extract the loudest segments based on RMS energy"
    },
    {
      "name": "Remove Silence",
      "value": "removeSilence",
      "action": "Remove silence from audio",
      "routing": {
        "request": {
          "url": "/ffmpeg/audio/remove-silence",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Detect and eliminate quiet gaps in audio"
    },
    {
      "name": "Audio to MP3",
      "value": "audioToMp3",
      "action": "Convert audio to MP3",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/audio/to/mp3",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert an audio file to MP3 format"
    },
    {
      "name": "Audio to WAV",
      "value": "audioToWav",
      "action": "Convert audio to WAV",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/audio/to/wav",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert an audio file to WAV format"
    },
    {
      "name": "Image to JPG",
      "value": "imageToJpg",
      "action": "Convert image to JPG",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/image/to/jpg",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert an image file to JPG format"
    },
    {
      "name": "Image to WebP",
      "value": "imageToWebp",
      "action": "Convert image to web p",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/image/to/webp",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert an image file to WebP format"
    },
    {
      "name": "Video to MP4",
      "value": "videoToMp4",
      "action": "Convert video to MP4",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/video/to/mp4",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert a video file to MP4 format"
    },
    {
      "name": "Video to WebM",
      "value": "videoToWebm",
      "action": "Convert video to web m",
      "routing": {
        "request": {
          "url": "/ffmpeg/convert/video/to/webm",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Convert a video file to WebM format (VP9 + Opus)"
    },
    {
      "name": "Concat",
      "value": "concat",
      "action": "Concatenate videos",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/concat",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Merge video clips in order into a single video"
    },
    {
      "name": "Compose Video",
      "value": "composeVideo",
      "action": "Compose video with overlays",
      "routing": {
        "request": {
          "url": "/ffmpeg/video/compose",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Overlay video or image segments onto a main video at specific time ranges"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge images and audio into video",
      "routing": {
        "request": {
          "url": "/ffmpeg/merge",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Combine image slides with audio into a video"
    },
    {
      "name": "Generate Image",
      "value": "generateImage",
      "action": "Generate image with AI",
      "routing": {
        "request": {
          "url": "/image",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Generate an image using AI from a text prompt"
    },
    {
      "name": "Get Image Status",
      "value": "imageStatus",
      "action": "Get image generation status",
      "routing": {
        "request": {
          "url": "=/image/status/{{$parameter.jobId}}",
          "method": "GET"
        }
      },
      "description": "Check the status of an image generation job"
    },
    {
      "name": "Send Email",
      "value": "sendEmail",
      "action": "Send email notification",
      "routing": {
        "request": {
          "url": "/notifications/email",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          }
        }
      },
      "description": "Send an HTML email notification"
    },
    {
      "name": "Delete",
      "value": "deleteJob",
      "action": "Delete a job",
      "routing": {
        "request": {
          "url": "=/ffmpeg/jobs/{{$parameter.jobId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a job and its associated output file"
    },
    {
      "name": "Get Result",
      "value": "getResult",
      "action": "Get job result",
      "routing": {
        "request": {
          "url": "=/ffmpeg/result/{{$parameter.jobId}}",
          "method": "GET"
        }
      },
      "description": "Get the result of a completed job"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get job status",
      "routing": {
        "request": {
          "url": "=/ffmpeg/status/{{$parameter.jobId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve current job status, progress, and completion data"
    },
    {
      "name": "Verify API Key",
      "value": "verify",
      "action": "Verify API key",
      "routing": {
        "request": {
          "url": "/verify",
          "method": "GET"
        }
      },
      "description": "Check that the API key is valid and retrieve account details"
    }
  ]

npm_readme:
  # n8n-nodes-eranol

  This is an n8n community node that lets you professionaly process media using the [Eranol FFmpeg API](https://www.eranol.com). Eranol provides a powerful, cloud-based FFmpeg engine for video, audio, and image processing.

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

  ## Features

  - **Video Processing**: Trim, watermark, caption, overlay, progressBar, reframe, thumbnail, generate GIF, and more.
  - **Audio Processing**: Denoise, highlights, remove silence, and conversion.
  - **Composition**: Merge multiple images into videos with transitions and background audio.
  - **Conversion**: Batch convert between common video (MP4, WebM), audio (MP3, WAV), and image (JPG, WebP) formats.
  - **Job Management**: Long-running media tasks managed via a robust job system.

  ## Installation

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

  ```bash
  npm install n8n-nodes-eranol
  ```

  ## Credentials

  You'll need an API Key from your [Eranol Dashboard](https://www.eranol.com/dashboard).

  1. Go to **Credentials** in n8n.
  2. Select **Eranol API**.
  3. Paste your **API Key**.

  ## Resources & Operations

  ### Video
  - **Add Intro/Outro**: Seamlessly stitch intro or outro videos.
  - **Caption**: Add text overlays or closed captions.
  - **Extract Audio/Images**: Pull assets from your video files.
  - **Generate GIF**: Convert video segments into high-quality GIFs.
  - **Overlay**: Layer images or videos over your footage.
  - **Progress Bar**: Add custom progress bars to your videos.
  - **Reframe**: Automatically adjust video aspect ratios.
  - **Thumbnail**: Generate preview images at specific timestamps.
  - **Trim**: Precise cut operations.
  - **Watermark**: Brand your content with logo overlays.

  ### Audio
  - **Denoise**: Remove background noise from recordings.
  - **Highlights**: Automatically extract key moments from audio.
  - **Remove Silence**: Tighten up recordings by removing dead air.

  ### Compose
  - **Merge**: Combine images into a slideshow video with transitions.

  ### Convert
  - **Video**: MP4, WebM.
  - **Audio**: MP3, WAV.
  - **Image**: JPG, WebP.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community node that enables workflow automation for media processing tasks using the Eranol FFmpeg API, supporting video, audio, and image manipulation.","capabilities":["Video trimming and watermarking","Video captioning and overlay","Video reframing and thumbnail generation","GIF generation from video segments","Progress bar addition to videos","Audio denoising and silence removal","Audio highlight extraction","Image-to-video composition with transitions","Batch format conversion (MP4, WebM, MP3, WAV, JPG, WebP)","Job management for long-running tasks"],"authentication":"API Key required","commonUseCases":["Automated video editing for social media content","Batch conversion of media files for different platforms","Automated thumbnail generation for video libraries","Audio cleanup for podcast or interview recordings","Creating GIFs from video clips"],"limitations":["Community node (not official n8n node)","Requires external API key from Eranol dashboard"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-sendzen.sendZenTrigger
package_name: n8n-nodes-sendzen
display_name: SendZen Trigger
description: Trigger when a WhatsApp incoming message is received via SendZen Services
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: sendzen-io
author_github_url: https://github.com/sendzen-io/
npm_package_name: n8n-nodes-sendzen
npm_version: 1.0.8
community_fetched_at: 2026-03-25T21:19:40.859Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  [![npm version](https://img.shields.io/npm/v/n8n-nodes-sendzen.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-sendzen)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE.md)
  [![n8n](https://img.shields.io/badge/n8n-community-orange?style=flat-square)](https://n8n.io)

  # n8n-nodes-sendzen

  This is an n8n community node for integrating **SendZen** with your workflows.

  SendZen provides an API on top of the **official WhatsApp Cloud API**, so you can send messages (session + templates) and receive inbound WhatsApp messages via webhooks.

  - Website: https://www.sendzen.io
  - Docs: https://sendzen.io/docs

  ---

  ## Table of Contents

  - [Overview](#overview)
  - [Installation](#installation)
  - [Authentication](#authentication)
  - [Features](#features)
  - [How to Use the SendZen Action Node](#how-to-use-the-sendzen-action-node)
  - [How to Use the SendZen Trigger Node](#how-to-use-the-sendzen-trigger-node)
  - [Common Use Cases](#common-use-cases)
  - [Best Practices](#best-practices)
  - [Troubleshooting](#troubleshooting)
  - [Compatibility](#compatibility)
  - [Resources](#resources)
  - [Running Locally](#running-locally)
  - [Contributing](#contributing)
  - [Support](#support)
  - [License](#license)

  ---

  ## Overview

  SendZen helps developers and software platforms use WhatsApp reliably without dealing with all the Meta Cloud API complexity directly.

  With this n8n node, you can:

  - Send **session messages** (within 24-hour customer care window)
  - Send **template messages** (for business-initiated conversations)
  - Mark messages as read
  - Show typing indicator
  - Receive inbound messages via **webhook trigger**

  ---

  ## Screenshots

  ### Send Session Message

  ![SendZen Send Session Message Node in n8n](https://raw.githubusercontent.com/sendzen-io/n8n-nodes-sendzen/main/assets/Session_Message.png)

  ### Send Template Message

  ![SendZen Send Template Message Node in n8n](https://raw.githubusercontent.com/sendzen-io/n8n-nodes-sendzen/main/assets/Template_Message.png)

  ---

  ## Installation

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

  ---

  ## Authentication

  To use this node, you need a **SendZen API Key**.

  1. Sign up at https://www.sendzen.io
  2. Go to your dashboard and generate an API key (Dashboard → API Keys)
  3. Connect your WhatsApp Business Account (WABA) inside SendZen (required to send messages)

  > Note: Keep your API key secure and never commit it to code or share it publicly.

  ---

  ## Data & Security Notes

  - This node sends message content, recipient phone numbers, template names, and template variables to SendZen to deliver WhatsApp messages.
  - Store your SendZen API key only in **n8n Credentials**.
  - For inbound messages, enable **webhook signature verification** (recommended) to prevent spoofed requests.

  ---

  ## Features

  ### SendZen Action Node

  - **Send Session Message**
    - Send free-form text messages within the active 24-hour window
    - Supports URL previews and E.164 validation
  - **Send Template Message**
    - Send pre-approved templates to start conversations
    - Dynamic template + variable mapping (body, header, buttons)
    - Supports media headers (image, video, document, audio)
    - Supports CTA and quick reply buttons
  - **Mark as Read**
    - Mark inbound messages as read (useful for UX and analytics)
    - Auto-detects message identifiers when connected from the trigger
  - **Show Typing Indicator**
    - Show “Typing…” to make automations feel more natural

  ### SendZen Trigger Node

  - Receive inbound WhatsApp messages in real time via webhook
  - Outputs full message payload (text, media, location, contacts)
  - Simple webhook setup: copy URL from node → paste in SendZen dashboard

  ---

  ## How to Use the SendZen Action Node

  ### Prerequisites

  - A SendZen account
  - A connected WhatsApp Business Account (WABA) in SendZen
  - Access to n8n

  ### Setup Process

  1. **Create your SendZen API key**
     - Open SendZen dashboard
     - Go to **API Keys**
     - Copy the key and store it securely

  2. **Connect your WABA**
     - Complete the WABA connection flow in SendZen
     - Ensure at least one phone number is connected and active

  ### Integration Steps (n8n)

  1. Create a new workflow in n8n
  2. Add any trigger (Webhook, Schedule, CRM trigger, etc.)
  3. Add **SendZen** node
  4. In SendZen node:
     - Select **Credentials** → **Create New**
     - Choose **SendZen API**
     - Paste your API key
     - Save
  5. Choose an operation and fill required fields
  6. Click **Test Step**
  7. Save and activate your workflow

  ---

  ## How to Use the SendZen Trigger Node

  ### Prerequisites

  - A SendZen account
  - A connected WABA phone number
  - Access to n8n

  ### Webhook signature verification (HMAC-SHA256) — recommended

  SendZen signs every webhook payload using **HMAC-SHA256** and includes the signature in the `X-Hub-Signature-256` header in this format:

  - `X-Hub-Signature-256: sha256=<hex>`

  To enable signature verification in n8n:

  1. In the **SendZen dashboard** webhook settings, set a **Secret Key** (recommended).
  2. In n8n, create credentials:
     - Credentials type: **SendZen Webhook API**
     - Set **Secret Key** to the same value you configured in SendZen.
  3. In the **SendZen Trigger** node, select those **SendZen Webhook API** credentials.

  If credentials are set, the trigger will return **401** for missing/invalid signatures.

  Important: signature verification requires hashing the **raw request body**. Avoid any middleware/proxies that reformat/pretty-print the JSON payload. If you run n8n behind Cloudflare / nginx / API gateway, ensure it does not modify request body (no pretty-print, no re-encoding)

  ### Setup Process

  1. **Get your webhook URL from n8n**
     - Add **SendZen Trigger** node in your workflow
     - At the top of the node, find **Webhook URLs**
     - Copy the **Production URL**

  Tip: Use the **Test URL** while testing in the editor. After activating the workflow, set the **Production URL** in SendZen for live traffic.

  2. **Add webhook URL in SendZen**
     - Open SendZen dashboard webhook settings
     - Paste the Production URL
     - Save changes

  3. **Test and activate**
     - In n8n, click **Test Step**
     - Send a WhatsApp message to your connected number to verify the trigger fires
     - Save workflow and toggle **Active**

  ---

  ## Common Use Cases

  - **Lead capture + instant reply**: Trigger on inbound message, capture details, respond with next steps
  - **Order updates**: Trigger on order status change, send template message
  - **Appointment reminders**: Scheduled trigger, send template reminders
  - **Support automation**: Trigger on inbound support message, route based on keywords, reply
  - **Payment reminders**: Trigger from billing system, send WhatsApp template


    ### Example 1: New lead → WhatsApp template

    Trigger: CRM/New form submission → Send Template Message → Log result.

    ### Example 2: Inbound WhatsApp → Auto-reply + CRM

    SendZen Trigger → IF keyword contains "pricing" → Send Session Message → Create lead in CRM.

  ---

  ## Best Practices

  - Use **template messages** to start conversations (business-initiated).
  - Use **session messages** only within the active 24-hour window.
  - Keep API keys only inside **n8n Credentials**.
  - For production workflows, log failures and add retries (for example using IF + Wait + Retry patterns).
  - When using templates, prefer mapping variables explicitly so workflows remain readable.

  ---

  ## Troubleshooting

  - **401 / auth error**: Re-check API key and credential selected in the node
  - **No WABA accounts listed**: Confirm WABA is connected inside SendZen
  - **Trigger not firing**:
    - Ensure webhook URL is saved in SendZen
    - Confirm the URL is publicly reachable
    - Confirm workflow is active in n8n
  - **Template missing**: Ensure template exists and is approved in your WhatsApp Business Manager

  ---

  ## Compatibility

  - **n8n**: 1.0.0+ (tested on 1.89.2+)
  - **Node.js**: >= 18.10

  ---

  ## Resources

  - SendZen Documentation: https://sendzen.io/docs
  - WhatsApp Cloud API Reference: https://developers.facebook.com/docs/whatsapp
  - n8n Community Nodes: https://docs.n8n.io/integrations/community-nodes/

  ---

  ## Version history

  ### 1.0.1

  - **Robustness:** Added comprehensive Jest test suite for Triggers, Actions, and Template Builders.
  - **Optimization:** Reduced package size by excluding development files.

  ### 1.0.0

  - Initial release
  - Support for Session Messages, Templates, Mark as Read, Typing Indicators.
  - Webhook Trigger support.
  - Auto-discovery for WABA Accounts and Templates.

  ---

  ## Running Locally

  If you want to contribute or modify this node:

  1.  **Clone:** `git clone https://github.com/sendzen-io/n8n-nodes-sendzen.git`
  2.  **Install:** `pnpm install`
  3.  **Build:** `pnpm build`
  4.  **Test:** `pnpm test` (Runs the Jest test suite)
  5.  **Link:** Follow the [n8n custom node guide](https://docs.n8n.io/integrations/community-nodes/create/) to link `dist` to your local n8n instance.

  ---

  ## Contributing

  We welcome contributions! Please follow these steps:

  1.  Fork the repository.
  2.  Create a feature branch.
  3.  **Run Tests:** Ensure `pnpm test` passes.
  4.  Submit a Pull Request.

  ## Support

  - Email: [milan@sendzen.io](mailto:milan@sendzen.io)
  - Issues: use GitHub Issues in this repository

  ---

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node triggers workflows when an incoming WhatsApp message is received via SendZen Services, enabling real-time automation for customer interactions.","capabilities":["Receive inbound WhatsApp messages via webhook trigger","Output full message payload including text, media, location, and contacts","Support webhook signature verification (HMAC-SHA256) to prevent spoofed requests","Supports dynamic template variable mapping","Supports media headers (image, video, document, audio)","Supports CTA and quick reply buttons","Supports URL previews and E.164 validation"],"authentication":"API Key required (SendZen API Key stored in n8n Credentials)","commonUseCases":["Automated customer support responses","Order status notifications","Appointment reminders","Two-factor authentication (2FA) verification","Lead qualification workflows"],"limitations":["Session messages are limited to a 24-hour customer care window","Template messages require pre-approval in the WhatsApp Business API","Signature verification requires raw request body without modification by middleware/proxies","Does not support direct Meta Cloud API integration; relies on SendZen abstraction layer"],"relatedNodes":["Webhook Trigger","SendZen Action Node","n8n-nodes-sendzen.SendZenTemplateMessage","n8n-nodes-sendzen.SendZenSessionMessage"]}


node_type: n8n-nodes-contentdrips.contentdrips
package_name: n8n-nodes-contentdrips
display_name: Contentdrips
description: Create carousels and static graphics using the Contentdrips API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: contentdrips
author_github_url: https://github.com/CONTENTDRIPS/
npm_package_name: n8n-nodes-contentdrips
npm_version: 1.3.2
community_fetched_at: 2026-03-25T21:19:40.860Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "graphic",
      "options": [
        {
          "name": "Graphic",
          "value": "graphic",
          "description": "Generate static graphics"
        },
        {
          "name": "Carousel",
          "value": "carousel",
          "description": "Generate carousel content"
        },
        {
          "name": "Job",
          "value": "job",
          "description": "Check job status and retrieve results"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateGraphic",
      "options": [
        {
          "name": "Generate",
          "value": "generateGraphic",
          "action": "Start creating a graphic and get a job ID to check later",
          "description": "Start creating a graphic and get a job ID to check later"
        },
        {
          "name": "1-Click Generate",
          "value": "generateGraphicSync",
          "action": "Create a graphic in one step - we handle everything automatically",
          "description": "Create a graphic in one step - we handle everything automatically"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "graphic"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateCarousel",
      "options": [
        {
          "name": "Generate",
          "value": "generateCarousel",
          "action": "Start creating a carousel and get a job ID to check later",
          "description": "Start creating a carousel and get a job ID to check later"
        },
        {
          "name": "1-Click Generate",
          "value": "generateCarouselSync",
          "action": "Create a carousel in one step - we handle everything automatically",
          "description": "Create a carousel in one step - we handle everything automatically"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "carousel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkJobStatus",
      "options": [
        {
          "name": "Check Status",
          "value": "checkJobStatus",
          "action": "Check the status of a processing job",
          "description": "Check the status of a processing job"
        },
        {
          "name": "Get Result",
          "value": "getJobResult",
          "action": "Get the result of a completed job",
          "description": "Get the result of a completed job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate",
      "value": "generateGraphic",
      "action": "Start creating a graphic and get a job ID to check later",
      "description": "Start creating a graphic and get a job ID to check later"
    },
    {
      "name": "1-Click Generate",
      "value": "generateGraphicSync",
      "action": "Create a graphic in one step - we handle everything automatically",
      "description": "Create a graphic in one step - we handle everything automatically"
    },
    {
      "name": "Generate",
      "value": "generateCarousel",
      "action": "Start creating a carousel and get a job ID to check later",
      "description": "Start creating a carousel and get a job ID to check later"
    },
    {
      "name": "1-Click Generate",
      "value": "generateCarouselSync",
      "action": "Create a carousel in one step - we handle everything automatically",
      "description": "Create a carousel in one step - we handle everything automatically"
    },
    {
      "name": "Check Status",
      "value": "checkJobStatus",
      "action": "Check the status of a processing job",
      "description": "Check the status of a processing job"
    },
    {
      "name": "Get Result",
      "value": "getJobResult",
      "action": "Get the result of a completed job",
      "description": "Get the result of a completed job"
    }
  ]

npm_readme:
  # n8n-nodes-contentdrips

  An n8n community node for the [Contentdrips API](https://app.contentdrips.com) that enables you to create carousels and static graphics for social media content automation.

  ## Features

  - **Generate Static Graphics**: Create PNG or PDF graphics from templates
  - **Generate Carousels**: Create multi-slide carousels with intro, content slides, and ending slides
  - **Template-based**: Use your existing Contentdrips templates
  - **Content Updates**: Update text and images using labeled elements
  - **Branding Support**: Apply consistent branding (name, handle, bio, website, avatar)
  - **Job Management**: Check status and retrieve results from asynchronous jobs

  ## Installation

  ### n8n Cloud

  For n8n Cloud users:

  1. Go to **Settings > Community Nodes** in your n8n Cloud instance
  2. Click **Install a community node**  
  3. Enter `n8n-nodes-contentdrips`
  4. Click **Install**

  The node will be automatically installed and available in your workflow editor.

  ### Self-hosted n8n

  For self-hosted installations, you have several options:

  #### Option 1: Community Nodes UI (Easiest)
  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Click **Install a community node**
  3. Enter `n8n-nodes-contentdrips`
  4. Click **Install**

  #### Option 2: Docker Compose

  Add the following to your `docker-compose.yml` environment variables:
  ```yaml
  environment:
    - NODE_FUNCTION_ALLOW_EXTERNAL=*
  ```

  Then modify your Dockerfile or create a custom image:
  ```dockerfile
  FROM n8nio/n8n:latest
  USER root
  RUN npm install -g n8n-nodes-contentdrips
  USER node
  ```

  #### Option 3: Manual Installation

  ```bash
  # Navigate to your n8n installation directory
  cd ~/.n8n

  # Install the node
  npm install n8n-nodes-contentdrips

  # Restart n8n
  ```

  ## Prerequisites

  1. **Contentdrips Account**: Sign up at [Contentdrips](https://app.contentdrips.com)
  2. **API Token**: Generate your API token from [API Management](https://app.contentdrips.com/api-management)
  3. **Templates**: Create and configure templates in Contentdrips editor

  ## Configuration

  ### Credentials Setup

  1. In n8n, go to **Credentials** 
  2. Click **+ Add Credential**
  3. Search for **Contentdrips API**
  4. Enter your API token from Contentdrips

  ### Template Preparation

  1. Create templates in Contentdrips editor
  2. Add labels to text boxes and images you want to update:
     - Right-click on element → "Add Label" → Enter label name
  3. Note your template ID from the URL or template settings

  ## Operations

  ### Generate Graphic

  Create static graphics (PNG/PDF) from templates:

  ```json
  {
    "operation": "generateGraphic",
    "templateId": "126130",
    "output": "png",
    "branding": {
      "name": "Jane Doe",
      "handle": "@janedoe",
      "bio": "Content Creator",
      "website_url": "https://janedoe.com",
      "avatar_image_url": "https://example.com/avatar.jpg"
    },
    "contentUpdates": [
      {
        "type": "textbox",
        "label": "title_1", 
        "value": "New Post Title"
      }
    ]
  }
  ```

  ### Generate Carousel

  Create multi-slide carousels:

  ```json
  {
    "operation": "generateCarousel",
    "templateId": "126130",
    "output": "pdf",
    "carousel": {
      "intro_slide": {
        "heading": "Start Here",
        "description": "Tips that work",
        "image": "https://example.com/intro.jpg"
      },
      "slides": [
        {
          "heading": "Tip 1",
          "description": "Post daily content",
          "image": "https://example.com/slide1.jpg"
        }
      ],
      "ending_slide": {
        "heading": "Follow for more", 
        "description": "New tips weekly",
        "image": "https://example.com/end.jpg"
      }
    }
  }
  ```

  ### Check Job Status

  Monitor background job processing:

  ```json
  {
    "operation": "checkJobStatus",
    "jobId": "15bf4a39-876a-4780-aaa9-4be6fe2c61b4"
  }
  ```

  ### Get Job Result

  Retrieve completed job results:

  ```json
  {
    "operation": "getJobResult", 
    "jobId": "15bf4a39-876a-4780-aaa9-4be6fe2c61b4"
  }
  ```

  ## Example Workflows

  ### Blog to Carousel Automation

  1. **RSS Trigger** → Get new blog posts
  2. **Code Node** → Extract title, summary, and key points
  3. **Contentdrips Node** → Generate carousel with:
     - Intro slide: Blog title and summary
     - Content slides: Key points
     - Ending slide: Call-to-action

  ### Social Media Graphics

  1. **Schedule Trigger** → Daily at 9 AM
  2. **Google Sheets** → Get daily quote and image
  3. **Contentdrips Node** → Generate quote graphic
  4. **Social Media Node** → Post to platforms

  ## API Response Examples

  ### Successful Job Creation
  ```json
  {
    "job_id": "15bf4a39-876a-4780-aaa9-4be6fe2c61b4",
    "status": "queued",
    "message": "Job has been queued for processing",
    "estimated_time": "2-5 minutes"
  }
  ```

  ### Completed Job Result
  ```json
  {
    "date": "2025-06-02T16:31:18.633Z",
    "type": "carousel", 
    "export_url": "https://contentdrips2.s3.amazonaws.com/server/104017/uploads/carousel-output.pdf"
  }
  ```

  ## Troubleshooting

  ### Common Issues

  1. **Authentication Error**: Verify your API token in credentials
  2. **Template Not Found**: Check template ID exists and is accessible
  3. **Label Not Found**: Ensure labels are properly set in template editor
  4. **Job Timeout**: Large carousels may take longer to process

  ### Error Handling

  The node supports n8n's **Continue on Fail** option. When enabled, errors are returned as data instead of stopping the workflow.

  ## Support

  - **Documentation**: [Contentdrips API Docs](https://app.contentdrips.com/api-management)
  - **GitHub Issues**: Report bugs and feature requests
  - **Community Forum**: Get help from other users

  ## License

  MIT License - see [LICENSE.md](LICENSE.md) for details.

  ## Contributing

  Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.

ai_documentation_summary:
  {"purpose":"A community n8n node that creates social media carousels and static graphics (PNG/PDF) using the Contentdrips API, supporting template-based design with labeled content updates and job status management.","capabilities":["Generate static PNG graphics","Generate static PDF graphics","Generate multi-slide carousels with intro, content, and ending slides","Apply branding (name, handle, bio, website, avatar)","Update text and images using labeled template elements","Check status of asynchronous jobs","Retrieve completed job results with export URLs"],"authentication":"API key required (Contentdrips API token)","commonUseCases":["Automating social media post creation from RSS feeds","Generating daily quote graphics from scheduled data","Creating carousel content from blog posts or key points","Batch producing branded social media assets"],"limitations":["Requires pre-configured templates in Contentdrips editor","Labels must be manually added to template elements","Large carousels may experience job timeouts due to processing time","Template ID must be known and accessible"],"relatedNodes":["n8n-nodes-base.code","n8n-nodes-base.rss","n8n-nodes-base.schedule","n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest"]}


node_type: n8n-nodes-pdfmonkey.pdfMonkey
package_name: n8n-nodes-pdfmonkey
display_name: PDFMonkey
description: Generate PDFs using PDFMonkey API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: tiny-monkey
author_github_url: https://github.com/pdfmonkey/
npm_package_name: n8n-nodes-pdfmonkey
npm_version: 0.4.0
community_fetched_at: 2026-03-25T21:19:40.860Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "generateDocument",
      "options": [
        {
          "name": "Generate Document",
          "value": "generateDocument",
          "action": "Create a new PDF using a template",
          "description": "Create a new PDF using a template"
        },
        {
          "name": "Get Document",
          "value": "getDocument",
          "action": "Get document details and status",
          "description": "Get document details and status"
        },
        {
          "name": "Download File",
          "value": "downloadFile",
          "action": "Download a generated PDF or image",
          "description": "Download a generated PDF or Image"
        },
        {
          "name": "Delete Document",
          "value": "deleteDocument",
          "action": "Delete an existing PDF document",
          "description": "Delete an existing PDF document"
        }
      ],
      "description": "Choose what you want to do with PDFMonkey",
      "displayName": "Actions",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Document",
      "value": "generateDocument",
      "action": "Create a new PDF using a template",
      "description": "Create a new PDF using a template"
    },
    {
      "name": "Get Document",
      "value": "getDocument",
      "action": "Get document details and status",
      "description": "Get document details and status"
    },
    {
      "name": "Download File",
      "value": "downloadFile",
      "action": "Download a generated PDF or image",
      "description": "Download a generated PDF or Image"
    },
    {
      "name": "Delete Document",
      "value": "deleteDocument",
      "action": "Delete an existing PDF document",
      "description": "Delete an existing PDF document"
    }
  ]

npm_readme:
  ![PDFMonkey for n8n](./images/n8n-nodes-pdfmonkey.webp)

  # n8n-nodes-pdfmonkey

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

  [PDFMonkey](https://www.pdfmonkey.io/) is a service that allows you to generate PDFs from HTML templates with dynamic 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

  ### PDFMonkey Node

  The PDFMonkey node provides the following operations:

  - **Generate Document**: Create a new PDF document using a template and dynamic data
    - Supports custom metadata and filename customization
    - Optional auto-polling for document completion (controlled by "Wait For Completion" option)
    - Uses a simple 2-second interval between status checks when polling
    - Downloads the PDF automatically if generation is successful and auto-polling is enabled
  - **Get Document**: Get document details and check its generation status
  - **Download File**: Download a generated PDF or image document and save it as a binary file
  - **Delete Document**: Delete a previously generated PDF document from PDFMonkey

  ### PDFMonkey Trigger Node

  The PDFMonkey Trigger node listens for webhooks from PDFMonkey and processes them:

  - **Webhook Receiver**: Triggers when PDFMonkey sends a webhook notification
  - **Automatic File Download**: Automatically downloads the PDF or image when the document generation is successful
  - **Intelligent Filename Handling**: Extracts the filename from metadata
  - **Complete Response Data**: Returns all document properties from the PDFMonkey API in the JSON output

  ## Credentials

  To use the PDFMonkey nodes, you need to have a PDFMonkey account and API key.

  1. Sign up for PDFMonkey at [https://www.pdfmonkey.io/](https://www.pdfmonkey.io/)
  2. In your PDFMonkey dashboard, navigate to the API section
  3. Copy your API key
  4. In n8n, create new credentials of type 'PDFMonkey API' and paste your API key

  ## Compatibility

  This node has been tested with n8n version 1.0.0 and later.

  ## Usage

  ### Flexible Payload Input

  The Generate Document operation supports two methods for providing template data:

  1. **JSON Format**:

     - Enter your entire payload as a JSON object
     - Ideal for complex data structures or when copying from another source
     - Example:
       ```json
       {
       	"invoiceNumber": "INV-2023-001",
       	"customerName": "Acme Inc.",
       	"items": [
       		{ "name": "Widget", "quantity": 5, "price": 10.99 },
       		{ "name": "Gadget", "quantity": 2, "price": 24.99 }
       	],
       	"total": 104.93
       }
       ```

  2. **Key-Value Pairs**:
     - Add fields individually with key-value pairs
     - More visual and easier to manage for simple templates
     - Supports complex data structures:
       - JSON objects/arrays: Values starting with `{` or `[` are automatically parsed as JSON
       - Arrays from other nodes: The node automatically handles n8n's special array format `[Array: [...]]`
       - Direct objects: When passing data from other nodes that return objects, they are used directly

  ### Enhanced Object Handling

  The node intelligently processes different value types in key-value pairs:

  - **Direct Objects**: Objects passed directly from other nodes are preserved intact
  - **JSON Strings**: Strings that look like JSON (starting with `{` or `[`) are parsed automatically
  - **Special Array Format**: The n8n array format `[Array: [...]]` is detected and parsed
  - **Regular Values**: Simple strings, numbers, and booleans are handled appropriately

  This makes it easy to pass complex data from other nodes to PDFMonkey without manual conversion.

  #### Example: Processing Arrays from n8n

  When you map data from other nodes (like Function or HTTP Request nodes), arrays often come in this special format:

  ```
  [Array: [{"name":"Mouse","quantity":3,"price":88.92},{"name":"Headphones","quantity":5,"price":14.99},{"name":"Keyboard","quantity":3,"price":48.28}]]
  ```

  The PDFMonkey node will automatically detect this format, extract the array content, and properly parse it as a JSON array. This is especially useful for templating tables or lists in your PDFs where you need to pass complex structured data.

  ### Generate Document with Auto-Polling

  The Generate Document operation includes a "Wait For Completion" option that controls whether the node waits for the document to finish generating before continuing the workflow:

  1. When **enabled** (default):

     - The node checks the document status every 2 seconds until it reaches a final state (success or failure)
     - If successful, it automatically downloads the PDF or image and returns it as a binary file
     - Simple, straightforward polling mechanism with minimal overhead
     - Progress is logged with status updates during polling

  2. When **disabled**:
     - The node returns immediately after creating the document
     - The response includes the document ID and initial pending status
     - You can later use the Get Document or Download File operations to check status and retrieve the document

  This feature is especially useful for smaller documents that generate quickly, providing a simpler workflow without needing separate Get Document and Download File steps. For larger documents that take longer to generate, you may want to disable this option and use a separate Get Document or Download File operation later.

  ### Custom Filenames

  You can set a custom filename for your generated PDF or image using the dedicated `Custom Filename` field in the Generate Document operation

  If the field is left empty, the node will use the default generated filename.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [PDFMonkey API Documentation](https://docs.pdfmonkey.io/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables the creation of PDF documents from HTML templates using dynamic data via the PDFMonkey API, supporting both manual generation and webhook-triggered workflows.","capabilities":["Generate PDF documents from HTML templates with dynamic data","Download generated PDFs or images as binary files","Check document generation status and retrieve details","Delete previously generated documents","Receive webhook notifications for document generation events","Support auto-polling for document completion status","Handle complex data structures including JSON objects and arrays","Customize output filenames"],"authentication":"API key required","commonUseCases":["Automated invoice generation from order data","Creating personalized marketing materials from customer databases","Generating reports from database queries or API responses","Automated document creation triggered by form submissions or webhooks"],"limitations":["Requires a paid PDFMonkey account with API access","Auto-polling uses a fixed 2-second interval between status checks","No built-in support for custom HTML templates beyond PDFMonkey's template system","Limited to PDF and image formats only"],"relatedNodes":["HTTP Request","Function","Webhook","Binary File","Wait Until"]}


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.4.1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: 2chat_integrations
author_github_url: https://github.com/2ChatCo/2chat-n8n.git
npm_package_name: @2chat/n8n-nodes-twochat
npm_version: 0.4.1
community_fetched_at: 2026-03-25T21:19:40.861Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-twochat

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

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

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

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

  ## Installation

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

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

  ## Operations

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

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

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

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

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

  ## Triggers

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

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

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

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

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

  ## Credentials

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

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

  ## Compatibility

  - Requires n8n version 1.0.0 or later

  ## Resources

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the 2Chat WhatsApp API to send messages, manage phone numbers, handle WABA resources, and listen to various WhatsApp and call events within automated workflows.","capabilities":["Send text messages to individual contacts","Send media attachments (images, documents) to contacts","Send location pins","Send messages to WhatsApp groups","Check if a phone number is registered on WhatsApp","Get detailed phone number information (region, carrier, timezone)","Check if a number is a business account","Retrieve business profile information","Send WABA template messages","Listen for new message events (sent/received/edited)"],"authentication":"API key required (2Chat API key obtained from 2Chat.co developers section)","commonUseCases":["Automated customer support via WhatsApp","E-commerce order notifications and updates","Marketing campaigns and promotional messages","Lead verification and phone number validation","Automated group management and announcements"],"limitations":["Requires a paid 2Chat account and API key","Requires n8n version 1.0.0 or later","Community node status may imply limited official support compared to official nodes"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Function Item"]}


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

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

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

npm_readme:
  # n8n-nodes-murf

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

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

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

  ## Installation

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

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

  ## Operations

  The Murf AI node provides the following operations:

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

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

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

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

  ## Node Structure

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

  ## Credentials

  The node requires API credentials from Murf AI:

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

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Development

  To develop the node:

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

  ## License

  [MIT](LICENSE.md)

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


node_type: n8n-nodes-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-03-25 21:19:40
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-03-25T21:19:40.862Z
ai_summary_generated_at: 2026-03-25 22:51:43
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":"This n8n community node enables interaction with the Octave V2 API to automate B2B go-to-market messaging, including agent management, content generation, and prospecting.","capabilities":["List and manage agents","Build and manage workspaces","Generate call prep content","Enrich company and person data","Generate marketing content","Run email sequences","Prospect and find relevant leads","Qualify companies and individuals","Manage competitors (list, get, create, update, generate)","Manage personas (list, get, create, update, generate)"],"authentication":"API key required","commonUseCases":["Automating B2B sales outreach and prospecting","Generating personalized call scripts and objection handling","Enriching lead data for sales teams","Creating and managing marketing playbooks","A/B testing different messaging agents"],"limitations":["Community node (may have slower updates or support compared to official nodes)","Requires Octave V2 API access and valid API credentials","Response includes metadata wrapper that may require parsing"],"relatedNodes":["n8n-nodes-octavehq.octave","HTTP Request","JSON Response"]}


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

updated_at: 2026-03-25 21:19:40
author_name: joff
author_github_url: https://github.com/joffcom/
npm_package_name: n8n-nodes-hookdeck
npm_version: 1.0.1
community_fetched_at: 2026-03-25T21:19:40.863Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "attempts",
      "options": [
        {
          "name": "Attempts",
          "value": "attempts"
        },
        {
          "name": "Events",
          "value": "events"
        },
        {
          "name": "Issues",
          "value": "issues"
        },
        {
          "name": "Requests",
          "value": "requests"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an attempt",
          "routing": {
            "request": {
              "url": "={{\"/attempts/\" + $parameter.attemptId }}",
              "method": "GET"
            }
          },
          "description": "Get an attempt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attempts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId }}",
              "method": "GET"
            }
          },
          "description": "Get an event"
        },
        {
          "name": "Mute",
          "value": "mute",
          "action": "Mute an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/mute\" }}",
              "method": "PUT"
            }
          },
          "description": "Mute an event"
        },
        {
          "name": "Retry",
          "value": "retry",
          "action": "Retry an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/retry\" }}",
              "method": "POST"
            }
          },
          "description": "Retry an event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Dismiss",
          "value": "dismiss",
          "action": "Dismiss an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "DELETE"
            }
          },
          "description": "Dismiss an issue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "GET"
            }
          },
          "description": "Get an issue"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "PUT"
            }
          },
          "description": "Update an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "issues"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a request",
          "routing": {
            "request": {
              "url": "={{\"/requests/\" + $parameter.requestId }}",
              "method": "GET"
            }
          },
          "description": "Get a request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "requests"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an attempt",
      "routing": {
        "request": {
          "url": "={{\"/attempts/\" + $parameter.attemptId }}",
          "method": "GET"
        }
      },
      "description": "Get an attempt"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId }}",
          "method": "GET"
        }
      },
      "description": "Get an event"
    },
    {
      "name": "Mute",
      "value": "mute",
      "action": "Mute an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId + \"/mute\" }}",
          "method": "PUT"
        }
      },
      "description": "Mute an event"
    },
    {
      "name": "Retry",
      "value": "retry",
      "action": "Retry an event",
      "routing": {
        "request": {
          "url": "={{\"/events/\" + $parameter.eventId + \"/retry\" }}",
          "method": "POST"
        }
      },
      "description": "Retry an event"
    },
    {
      "name": "Dismiss",
      "value": "dismiss",
      "action": "Dismiss an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "DELETE"
        }
      },
      "description": "Dismiss an issue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "GET"
        }
      },
      "description": "Get an issue"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an issue",
      "routing": {
        "request": {
          "url": "={{\"/issues/\" + $parameter.issueId }}",
          "method": "PUT"
        }
      },
      "description": "Update an issue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a request",
      "routing": {
        "request": {
          "url": "={{\"/requests/\" + $parameter.requestId }}",
          "method": "GET"
        }
      },
      "description": "Get a request"
    }
  ]

npm_readme:
  # n8n-nodes-hookdeck

  This is an n8n community node. It lets you use the hookdeck api in your n8n workflows.

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

  [Installation](#installation)  
  [Operations](#operations)  
  [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

  - Attempts
  	- Get
  - Events
  	- Get
  	- Mute
  	- Retry
  - Issues
  	- Dismiss
  	- Get
  	- Update
  - Requests
  	- Get

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Hookdeck API to manage webhooks, events, issues, and requests within automated workflows.","capabilities":["Get webhook attempts","Get webhook events","Mute webhook events","Retry webhook events","Dismiss issues","Get issues","Update issues","Get webhook requests"],"authentication":"API key required (standard for Hookdeck integration)","commonUseCases":["Automating webhook event management in n8n","Handling webhook retry logic","Managing issue tracking via webhooks","Monitoring webhook attempts and requests"],"limitations":["Community node (not official n8n node)","Requires external Hookdeck API access"],"relatedNodes":["HTTP Request","Webhook","Generic Code"]}


node_type: @fal-ai/n8n-nodes-fal.falAi
package_name: @fal-ai/n8n-nodes-fal
display_name: fal.ai
description: Generate AI content using fal.ai models and workflows
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: fal_ai
author_github_url: https://github.com/fal-ai-community/n8n-nodes-fal.git
npm_package_name: @fal-ai/n8n-nodes-fal
npm_version: 1.0.1
community_fetched_at: 2026-03-25T21:19:40.863Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "model",
      "options": [
        {
          "name": "Model",
          "value": "model"
        },
        {
          "name": "Workflow",
          "value": "workflow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate Media",
          "value": "generate",
          "action": "Generate media using AI model",
          "description": "Generate images, videos, audio or other media"
        },
        {
          "name": "Get Model Info",
          "value": "getParameters",
          "action": "Get model parameters and info",
          "description": "Get available parameters and info for a model"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get model analytics",
          "description": "Get performance analytics (latency, success rates)"
        },
        {
          "name": "Get Pricing",
          "value": "getPricing",
          "action": "Get model pricing",
          "description": "Get pricing information for models"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get usage statistics",
          "description": "Get usage statistics (requires Admin API Key)"
        },
        {
          "name": "List Requests",
          "value": "listRequests",
          "action": "List requests by endpoint",
          "description": "List requests for a specific endpoint/model"
        },
        {
          "name": "Delete Request Payloads",
          "value": "deletePayloads",
          "action": "Delete request payloads",
          "description": "Delete request payloads (requires Admin API Key)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "model"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runWorkflow",
      "options": [
        {
          "name": "Run Workflow",
          "value": "runWorkflow",
          "action": "Run a workflow",
          "description": "Execute a fal.ai workflow"
        },
        {
          "name": "List Workflows",
          "value": "listWorkflows",
          "action": "List workflows",
          "description": "List all your fal.ai workflows"
        },
        {
          "name": "Get Workflow Details",
          "value": "getWorkflow",
          "action": "Get workflow details",
          "description": "Get details and schema of a specific workflow"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflow"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Media",
      "value": "generate",
      "action": "Generate media using AI model",
      "description": "Generate images, videos, audio or other media"
    },
    {
      "name": "Get Model Info",
      "value": "getParameters",
      "action": "Get model parameters and info",
      "description": "Get available parameters and info for a model"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get model analytics",
      "description": "Get performance analytics (latency, success rates)"
    },
    {
      "name": "Get Pricing",
      "value": "getPricing",
      "action": "Get model pricing",
      "description": "Get pricing information for models"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get usage statistics",
      "description": "Get usage statistics (requires Admin API Key)"
    },
    {
      "name": "List Requests",
      "value": "listRequests",
      "action": "List requests by endpoint",
      "description": "List requests for a specific endpoint/model"
    },
    {
      "name": "Delete Request Payloads",
      "value": "deletePayloads",
      "action": "Delete request payloads",
      "description": "Delete request payloads (requires Admin API Key)"
    },
    {
      "name": "Run Workflow",
      "value": "runWorkflow",
      "action": "Run a workflow",
      "description": "Execute a fal.ai workflow"
    },
    {
      "name": "List Workflows",
      "value": "listWorkflows",
      "action": "List workflows",
      "description": "List all your fal.ai workflows"
    },
    {
      "name": "Get Workflow Details",
      "value": "getWorkflow",
      "action": "Get workflow details",
      "description": "Get details and schema of a specific workflow"
    }
  ]

npm_readme:
  # @fal-ai/n8n-nodes-fal

  n8n community node for [fal.ai](https://fal.ai) - access hundreds of AI models for image generation, video generation, text-to-speech, and more.

  ## Installation

  ### In n8n Desktop/Cloud

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

  ### Manual Installation

  ```bash
  cd ~/.n8n/nodes
  npm install @fal-ai/n8n-nodes-fal
  ```

  ## Configuration

  1. Get your API key from [fal.ai Dashboard](https://fal.ai/dashboard/keys)
  2. In n8n, go to **Credentials** > **Add Credential** > **fal.ai API**
  3. Enter your API key

  > **Note:** Some operations (Get Usage, Delete Payloads) require an **Admin API Key**.

  ## Features

  ### Model Operations

  | Operation | Description |
  |-----------|-------------|
  | **Generate Media** | Generate images, videos, audio using any fal.ai model |
  | **Get Model Info** | Get available parameters and schema for a model |
  | **Get Analytics** | Get performance metrics (latency, success rates, error counts) |
  | **Get Pricing** | Get pricing information for models |
  | **Get Usage** | Get usage statistics (requires Admin API Key) |
  | **List Requests** | List requests for a specific endpoint/model |
  | **Delete Request Payloads** | Delete request payloads (requires Admin API Key) |

  ### Workflow Operations

  | Operation | Description |
  |-----------|-------------|
  | **Run Workflow** | Execute a fal.ai workflow with dynamic parameters |
  | **List Workflows** | List all your fal.ai workflows |
  | **Get Workflow Details** | Get details and schema of a specific workflow |

  ## Usage Examples

  ### Generate an Image with Flux

  1. Add **fal.ai** node to your workflow
  2. Select **Model** resource and **Generate Media** operation
  3. Search and select `fal-ai/flux/dev` model
  4. Add parameter: `prompt` = "A beautiful sunset over mountains"
  5. Execute the node

  ### Run a Custom Workflow

  1. Add **fal.ai** node to your workflow
  2. Select **Workflow** resource and **Run Workflow** operation
  3. Select your workflow from the dropdown
  4. Add workflow-specific parameters
  5. Execute the node

  ### Monitor Model Performance

  1. Add **fal.ai** node to your workflow
  2. Select **Model** resource and **Get Analytics** operation
  3. Select a model (e.g., `fal-ai/flux/dev`)
  4. Choose time range and metrics
  5. Execute to get performance data

  ## Supported Models

  This node supports all models available on fal.ai, including:

  - **Image Generation**: Flux, Stable Diffusion, SDXL, etc.
  - **Video Generation**: Kling, Runway, etc.
  - **Text-to-Speech**: Various TTS models
  - **Speech-to-Text**: Whisper and other STT models
  - **Image Editing**: Inpainting, upscaling, style transfer
  - **And many more...**

  Browse all models at [fal.ai/models](https://fal.ai/models)

  ## Async Execution

  For long-running generations (videos, complex images), the node uses fal.ai's queue system:

  - **Wait for Completion**: Enable to wait for the result (default)
  - **Poll Interval**: How often to check status (default: 5 seconds)
  - **Max Wait Time**: Maximum wait time (default: 10 minutes)

  Disable "Wait for Completion" to get the request ID immediately and check status later.

  ## Links

  - [fal.ai Documentation](https://fal.ai/docs)
  - [fal.ai Models](https://fal.ai/models)
  - [fal.ai Dashboard](https://fal.ai/dashboard)
  - [GitHub Repository](https://github.com/fal-ai-community/n8n-nodes-fal)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community n8n node that enables users to generate AI content (images, videos, audio) and manage workflows using fal.ai models.","capabilities":["Generate images using various AI models (Flux, Stable Diffusion, SDXL)","Generate videos using models like Kling and Runway","Text-to-speech generation","Speech-to-text processing","Image editing (inpainting, upscaling, style transfer)","Retrieve model information and schemas","Get analytics and performance metrics","Check pricing information","View usage statistics","List and delete request payloads"],"authentication":"API key required (fal.ai Dashboard keys)","commonUseCases":["Generate promotional images or artwork for marketing materials","Create video content for social media or presentations","Convert text to speech for audio content","Edit existing images (upscaling, inpainting)","Monitor AI model performance and usage costs"],"limitations":["Some operations (Get Usage, Delete Payloads) require an Admin API Key","Async execution may have a maximum wait time of 10 minutes","Long-running tasks require queue system handling with polling"],"relatedNodes":["n8n HTTP Request node","n8n Code node","n8n Credential node"]}


node_type: @allscreenshots/n8n-nodes-allscreenshots.allscreenshots
package_name: @allscreenshots/n8n-nodes-allscreenshots
display_name: Allscreenshots
description: Capture and manage website screenshots with Allscreenshots API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: panilya
author_github_url: https://github.com/allscreenshots/n8n-nodes-allscreenshots.git
npm_package_name: @allscreenshots/n8n-nodes-allscreenshots
npm_version: 1.0.3
community_fetched_at: 2026-03-25T21:19:40.864Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "screenshot",
      "options": [
        {
          "name": "Screenshot",
          "value": "screenshot",
          "description": "Capture screenshots of webpages"
        },
        {
          "name": "Async Job",
          "value": "asyncJob",
          "description": "Manage asynchronous screenshot jobs"
        },
        {
          "name": "Bulk Screenshot",
          "value": "bulk",
          "description": "Capture multiple screenshots at once (up to 100 URLs)"
        },
        {
          "name": "Compose",
          "value": "compose",
          "description": "Combine multiple screenshots into one image"
        },
        {
          "name": "Usage",
          "value": "usage",
          "description": "Check API usage and quota"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "capture",
      "options": [
        {
          "name": "Capture",
          "value": "capture",
          "action": "Capture a screenshot",
          "description": "Take a screenshot of a webpage (synchronous)"
        },
        {
          "name": "Capture Async",
          "value": "captureAsync",
          "action": "Start async screenshot capture",
          "description": "Start an async screenshot capture job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "screenshot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get job status",
          "description": "Get the status of an async screenshot job"
        },
        {
          "name": "Get Result",
          "value": "getResult",
          "action": "Get job result",
          "description": "Download the result of a completed job"
        },
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel a job",
          "description": "Cancel a pending or running job"
        },
        {
          "name": "List All",
          "value": "list",
          "action": "List all jobs",
          "description": "List all screenshot jobs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "asyncJob"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create bulk screenshot job",
          "description": "Create a bulk screenshot job (up to 100 URLs)"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get bulk job status",
          "description": "Get the status of a bulk job"
        },
        {
          "name": "List All",
          "value": "list",
          "action": "List bulk jobs",
          "description": "List all bulk jobs"
        },
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel bulk job",
          "description": "Cancel a bulk job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bulk"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create composed screenshot",
          "description": "Compose multiple screenshots into a single image"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get compose job status",
          "description": "Get the status of a compose job"
        },
        {
          "name": "List Jobs",
          "value": "list",
          "action": "List compose jobs",
          "description": "List all compose jobs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "compose"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getQuota",
      "options": [
        {
          "name": "Get Full Stats",
          "value": "getStats",
          "action": "Get usage statistics",
          "description": "Get complete usage statistics including history"
        },
        {
          "name": "Get Quota",
          "value": "getQuota",
          "action": "Get quota status",
          "description": "Get current quota status (screenshots and bandwidth)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "usage"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Capture",
      "value": "capture",
      "action": "Capture a screenshot",
      "description": "Take a screenshot of a webpage (synchronous)"
    },
    {
      "name": "Capture Async",
      "value": "captureAsync",
      "action": "Start async screenshot capture",
      "description": "Start an async screenshot capture job"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get job status",
      "description": "Get the status of an async screenshot job"
    },
    {
      "name": "Get Result",
      "value": "getResult",
      "action": "Get job result",
      "description": "Download the result of a completed job"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel a job",
      "description": "Cancel a pending or running job"
    },
    {
      "name": "List All",
      "value": "list",
      "action": "List all jobs",
      "description": "List all screenshot jobs"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create bulk screenshot job",
      "description": "Create a bulk screenshot job (up to 100 URLs)"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get bulk job status",
      "description": "Get the status of a bulk job"
    },
    {
      "name": "List All",
      "value": "list",
      "action": "List bulk jobs",
      "description": "List all bulk jobs"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel bulk job",
      "description": "Cancel a bulk job"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create composed screenshot",
      "description": "Compose multiple screenshots into a single image"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get compose job status",
      "description": "Get the status of a compose job"
    },
    {
      "name": "List Jobs",
      "value": "list",
      "action": "List compose jobs",
      "description": "List all compose jobs"
    },
    {
      "name": "Get Full Stats",
      "value": "getStats",
      "action": "Get usage statistics",
      "description": "Get complete usage statistics including history"
    },
    {
      "name": "Get Quota",
      "value": "getQuota",
      "action": "Get quota status",
      "description": "Get current quota status (screenshots and bandwidth)"
    }
  ]

npm_readme:
  # n8n-nodes-allscreenshots

  This is an n8n community node for [Allscreenshots](https://allscreenshots.com) - a powerful API for capturing and managing website screenshots at scale.

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

  ## Installation

  ### Community Nodes (Recommended)

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

  ### Manual Installation

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

  ## Authentication

  1. Sign up at [allscreenshots.com](https://allscreenshots.com)
  2. Go to **Dashboard > API Keys**
  3. Create a new API key
  4. In n8n, go to **Settings > Credentials > Add Credential**
  5. Search for "Allscreenshots API"
  6. Enter your API key

  ## Nodes

  This package includes two nodes:

  ### Allscreenshots

  The main node for capturing and managing screenshots.

  #### Resources

  | Resource | Description |
  |----------|-------------|
  | **Screenshot** | Capture screenshots synchronously or asynchronously |
  | **Async Job** | Manage async screenshot jobs (status, result, cancel) |
  | **Bulk Screenshot** | Capture up to 100 URLs in a single operation |
  | **Compose** | Combine multiple screenshots into one image |
  | **Usage** | Check API usage and quota status |

  ### Allscreenshots Trigger

  Webhook trigger node for receiving notifications when screenshots are captured.

  #### Supported Events

  - Screenshot Completed
  - Screenshot Failed
  - Bulk Job Completed
  - Compose Completed

  ## Operations

  ### Screenshot

  | Operation | Description |
  |-----------|-------------|
  | **Capture** | Take a screenshot synchronously (returns image) |
  | **Capture Async** | Start an async capture job (returns job ID) |

  **Key Options:**
  - Device presets (iPhone, Galaxy, iPad, MacBook, Desktop sizes)
  - Custom viewport (width, height, scale)
  - Output format (PNG, JPEG, WebP, PDF)
  - Full page capture
  - Element selector
  - Wait options (delay, selector, network idle)
  - Page modifications (dark mode, custom CSS, hide elements)
  - Ad & cookie banner blocking

  ### Async Job

  | Operation | Description |
  |-----------|-------------|
  | **Get Status** | Check job completion status |
  | **Get Result** | Download the screenshot |
  | **Cancel** | Cancel a pending job |
  | **List All** | List all jobs with optional filters |

  ### Bulk Screenshot

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Start a bulk job (up to 100 URLs) |
  | **Get Status** | Check bulk job progress |
  | **List All** | List all bulk jobs |
  | **Cancel** | Cancel a bulk job |

  ### Compose

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Compose multiple screenshots into one |
  | **Get Status** | Check compose job status |
  | **List Jobs** | List all compose jobs |

  **Layout Options:**
  - Auto (intelligent layout selection)
  - Grid
  - Masonry (Pinterest-style)
  - Mondrian (artistic layout)

  ### Usage

  | Operation | Description |
  |-----------|-------------|
  | **Get Full Stats** | Complete usage statistics with history |
  | **Get Quota** | Current quota status |

  ## Usage Examples

  ### Basic Screenshot

  1. Add an **Allscreenshots** node
  2. Select Resource: **Screenshot**
  3. Select Operation: **Capture**
  4. Enter the URL to capture
  5. Configure options as needed
  6. Execute

  ### Bulk Screenshots with Notifications

  1. Add a **Trigger** node (Manual, Schedule, etc.)
  2. Add an **Allscreenshots** node
     - Resource: **Bulk Screenshot**
     - Operation: **Create**
     - Enter URLs (one per line)
  3. Add an **Allscreenshots Trigger** node
     - Event: **Bulk Job Completed**
  4. Connect to your notification service (Slack, Email, etc.)

  ### Compare Multiple Device Views

  1. Add an **Allscreenshots** node
     - Resource: **Compose**
     - Operation: **Create**
     - Enter the same URL multiple times
     - Layout: **Grid**
  2. Configure different device presets for each

  ## Device Presets

  The node includes presets for common devices:

  **Mobile:**
  - iPhone 12, 12 Pro, 13, 14, 14 Pro, 15, 15 Pro, 15 Pro Max
  - Samsung Galaxy S21, S23
  - Google Pixel 5, 6

  **Tablet:**
  - iPad, iPad Pro 11", iPad Pro 12.9", iPad Air
  - Samsung Galaxy Tab

  **Desktop:**
  - MacBook Air, MacBook Pro 14", MacBook Pro 16"
  - Desktop 1920x1080 (Full HD)
  - Desktop 2560x1440 (2K)
  - Desktop 3840x2160 (4K)

  ## Development

  For local development, testing, and publishing instructions, see [CONTRIBUTING.md](CONTRIBUTING.md).

  ## Resources

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

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Captures and manages website screenshots at scale using the Allscreenshots API, supporting synchronous/asynchronous captures, bulk operations, and image composition.","capabilities":["Capture screenshots synchronously","Start asynchronous screenshot jobs","Capture up to 100 URLs in a single bulk operation","Combine multiple screenshots into one image using various layouts (Auto, Grid, Masonry, Mondrian)","Check job status and download results","Cancel pending jobs","List all jobs with optional filters","Check API usage and quota status","Support device presets (iPhone, Galaxy, iPad, MacBook, Desktop)","Custom viewport settings (width, height, scale)"],"authentication":"API key required","commonUseCases":["Website screenshot monitoring","Product page visual inventory","Bulk screenshot generation for marketing","Cross-device comparison workflows","Screenshot composition for galleries"],"limitations":["Bulk operations limited to 100 URLs per job","Async jobs require separate trigger node for completion events","No mention of rate limiting beyond quota checks"],"relatedNodes":["Allscreenshots Trigger","Manual Trigger","Schedule Trigger","Slack Webhook","Email Webhook"]}


node_type: n8n-nodes-formaloo.formalooTrigger
package_name: n8n-nodes-formaloo
display_name: Formaloo Trigger
description: Trigger workflow on Formaloo form submissions and updates
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: formaloohq
author_github_url: https://github.com/formaloo/
npm_package_name: n8n-nodes-formaloo
npm_version: 1.6.0
community_fetched_at: 2026-03-25T21:19:40.865Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-formaloo

  This package provides n8n nodes for integrating with [Formaloo](https://formaloo.com), a form builder platform.

  ## Nodes

  ### Formaloo Trigger
  - **Node Name**: `Formaloo Trigger`
  - **Type**: Trigger
  - **Description**: Triggers workflows when forms are submitted or updated in Formaloo
  - **Events Supported**:
    - Form Submit
    - Row Update
    - Payment Completed
    - All Events

  ### Formaloo Action
  - **Node Name**: `Formaloo`
  - **Type**: Action
  - **Description**: Submit data to Formaloo forms with advanced field type handling
  - **Operations**:
    - Submit Form: Submit data to a specific Formaloo form with automatic field type conversion

  ## Credentials

  The nodes require Formaloo API credentials with the following fields:
  - **Secret API**: Your Formaloo secret API key (used for JWT authentication)
  - **API Key**: Your Formaloo API key (used for API requests)

  These credentials are used to:
  1. Generate JWT tokens for authentication
  2. Make API requests to Formaloo endpoints
  3. Create and manage webhooks

  ### Prerequisites
  - A Formaloo account with API access
  - Your Formaloo Secret API key
  - Your Formaloo API key

  ## Compatibility

  - **Minimum n8n version**: 0.1.0
  - **Tested with n8n version**: 1.17.0+
  - **Node.js version**: 20.15 or higher

  ## Installation

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

  Alternatively, you can install manually:

  1. Install the package:
     ```bash
     npm install n8n-nodes-formaloo
     ```

  2. Add the nodes to your n8n instance by copying the `dist` folder to your n8n custom nodes directory.

  ## Usage

  ### Setting up the Trigger Node

  1. Add a "Formaloo Trigger" node to your workflow
  2. Configure your Formaloo API credentials
  3. Select the form you want to monitor
  4. Choose the event type (form submit, row update, etc.)
  5. The node will create a webhook in Formaloo and trigger your workflow when events occur

  ### Setting up the Action Node

  1. Add a "Formaloo" node to your workflow
  2. Configure your Formaloo API credentials
  3. Select the form you want to submit to
  4. Add form fields with their IDs and values
  5. The node automatically handles field type conversion for complex fields

  For new users, check out the [Try it out](https://docs.n8n.io/try-it-out/) documentation to get started with n8n.

  ## Field Types

  ### Unsupported Field Types
  The following field types are currently **not supported** and will be filtered out from the field selection:
  - `matrix` - Matrix fields
  - `table` - Table fields
  - `lookup` - Lookup fields
  - `user` - User fields
  - `profile` - Profile fields
  - `linked_rows` - Linked rows fields
  - `repeating_section` - Repeating section fields

  ### Multiple Choice Fields
  For **Multiple Select** fields, use comma-separated values to select multiple options:

  **Example:**
  ```
  Field Value: "Option 1, Option 2, Option 3"
  ```

  **Note:** Make sure to use the exact option titles as they appear in your Formaloo form.

  ### City/Country Fields
  For **City** and **Country** fields, the node automatically searches and maps your input to the correct Formaloo option:

  **Example:**
  ```
  Field Value: "New York" or "United States"
  ```

  The node will automatically find the matching city/country and submit the correct slug.

  ## API Endpoints

  The nodes use the following Formaloo API endpoints:
  - **Forms List**: `GET https://api.formaloo.me/v3.0/forms/`
  - **Form Details**: `GET https://api.formaloo.me/v3.0/forms/{formSlug}/`
  - **Webhooks**: `POST/GET/DELETE https://api.formaloo.me/v3.0/forms/{formSlug}/webhooks/`
  - **Form Submit**: `POST https://api.formaloo.me/v3.0/form-displays/slug/{formSlug}/submit/`
  - **Field Options**: `GET https://api.formaloo.me/v3.0/fields/{fieldSlug}/`
  - **City/Country Search**: `GET https://api.formaloo.me/v4/fields/{fieldSlug}/choices/?search={searchValue}`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Formaloo API Documentation](https://docs.formaloo.com/)
  * [Formaloo Website](https://formaloo.com)

  ## Development

  ### Local Development

  1. Clone the repository and install dependencies:
     ```bash
     git clone https://github.com/formaloo/n8n-nodes-formaloo.git
     cd n8n-nodes-formaloo
     npm install
     ```

  2. Build and test locally:
     ```bash
     npm run build
     npm run start
     ```

     This will build the package and start n8n with your custom node loaded at http://localhost:5678

     **Alternative (manual):**
     ```bash
     npm run build
     N8N_CUSTOM_EXTENSIONS=$(pwd) npx n8n start
     ```

     **Windows:**
     ```cmd
     set N8N_CUSTOM_EXTENSIONS=%CD% & npx n8n start
     ```

  3. After making changes, rebuild and restart n8n:
     ```bash
     npm run build
     ```

  ### Available Scripts

  - `npm run build` - Build TypeScript to JavaScript
  - `npm run dev` - Watch mode (auto-rebuild on changes)
  - `npm run start` - Build and start n8n for testing
  - `npm run lint` - Check code quality
  - `npm run lintfix` - Auto-fix linting issues
  - `npm run format` - Format code with Prettier

  ## Publishing

  ### Publishing to npm

  1. Update version in `package.json`

  2. Build and test:
     ```bash
     npm run build
     npm run lint
     npm run start  # Test manually
     ```

  3. Publish:
     ```bash
     npm publish --access public
     ```

     The `prepublishOnly` script will automatically build and lint before publishing.

  4. Create and push git tag:
     ```bash
     git tag -a v1.5.0 -m "Release version 1.5.0"
     git push origin main
     git push origin v1.5.0
     ```

  ## Version History

  ### 1.5.0
  - Current version
  - ResourceLocator with search functionality for form selection
  - Improved form loading performance
  - Enhanced error handling with `pairedItem` support
  - Migrated to `httpRequestWithAuthentication`
  - Backward compatibility with deprecated functions

  ### Previous Versions
  - See git tags and GitHub releases for detailed version history

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when Formaloo forms are submitted or updated, and submits data to Formaloo forms with automatic field type conversion.","capabilities":["Trigger workflow on form submission","Trigger workflow on row updates","Trigger workflow on payment completion","Submit form data to Formaloo","Automatic field type conversion for complex fields","City/Country auto-mapping","Multiple select field support with comma-separated values","Webhook creation and management","ResourceLocator search for form selection"],"authentication":"API Key required (Secret API key for JWT authentication, API Key for API requests)","commonUseCases":["Automated email notifications on form submission","Data synchronization between Formaloo and other systems","Payment processing workflows","Form data validation and processing","Lead capture automation"],"limitations":["Matrix fields are not supported","Table fields are not supported","Lookup fields are not supported","User fields are not supported","Profile fields are not supported"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.webhook","n8n-nodes-base.formula"]}


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

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

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

npm_readme:
  # n8n-nodes-algolia

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

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

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

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

  ## Installation

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

  ## Credentials

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

  ### Prerequisites

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

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

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

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

  ## Operations

  This node supports the following operations:

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

  ### Advanced

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

  ### Api Keys

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

  ### Clusters

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

  ### Dictionaries

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

  ### Indices

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

  ### Records

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

  ### Rules

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

  ### Search

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

  ### Synonyms

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

  ### Vaults

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

  ## Usage examples

  ### Batch insert into an Algolia Index

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

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

  <div align="center">

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

  </div>

  **Step-by-step guide:**

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

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

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

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

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

  4. Activate the workflow to begin automated batch indexing.

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

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

  ### Scheduled Cleanup of Deprecated Synonyms

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

  <div align="center">

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

  </div>

  **Step-by-step guide:**

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

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

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

  ## Compatibility

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

  ## Resources

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

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


node_type: @allscreenshots/n8n-nodes-allscreenshots.allscreenshotsTrigger
package_name: @allscreenshots/n8n-nodes-allscreenshots
display_name: Allscreenshots Trigger
description: Receive webhook notifications from Allscreenshots when screenshots are captured
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: panilya
author_github_url: https://github.com/allscreenshots/n8n-nodes-allscreenshots.git
npm_package_name: @allscreenshots/n8n-nodes-allscreenshots
npm_version: 1.0.3
community_fetched_at: 2026-03-25T21:19:40.867Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-allscreenshots

  This is an n8n community node for [Allscreenshots](https://allscreenshots.com) - a powerful API for capturing and managing website screenshots at scale.

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

  ## Installation

  ### Community Nodes (Recommended)

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

  ### Manual Installation

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

  ## Authentication

  1. Sign up at [allscreenshots.com](https://allscreenshots.com)
  2. Go to **Dashboard > API Keys**
  3. Create a new API key
  4. In n8n, go to **Settings > Credentials > Add Credential**
  5. Search for "Allscreenshots API"
  6. Enter your API key

  ## Nodes

  This package includes two nodes:

  ### Allscreenshots

  The main node for capturing and managing screenshots.

  #### Resources

  | Resource | Description |
  |----------|-------------|
  | **Screenshot** | Capture screenshots synchronously or asynchronously |
  | **Async Job** | Manage async screenshot jobs (status, result, cancel) |
  | **Bulk Screenshot** | Capture up to 100 URLs in a single operation |
  | **Compose** | Combine multiple screenshots into one image |
  | **Usage** | Check API usage and quota status |

  ### Allscreenshots Trigger

  Webhook trigger node for receiving notifications when screenshots are captured.

  #### Supported Events

  - Screenshot Completed
  - Screenshot Failed
  - Bulk Job Completed
  - Compose Completed

  ## Operations

  ### Screenshot

  | Operation | Description |
  |-----------|-------------|
  | **Capture** | Take a screenshot synchronously (returns image) |
  | **Capture Async** | Start an async capture job (returns job ID) |

  **Key Options:**
  - Device presets (iPhone, Galaxy, iPad, MacBook, Desktop sizes)
  - Custom viewport (width, height, scale)
  - Output format (PNG, JPEG, WebP, PDF)
  - Full page capture
  - Element selector
  - Wait options (delay, selector, network idle)
  - Page modifications (dark mode, custom CSS, hide elements)
  - Ad & cookie banner blocking

  ### Async Job

  | Operation | Description |
  |-----------|-------------|
  | **Get Status** | Check job completion status |
  | **Get Result** | Download the screenshot |
  | **Cancel** | Cancel a pending job |
  | **List All** | List all jobs with optional filters |

  ### Bulk Screenshot

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Start a bulk job (up to 100 URLs) |
  | **Get Status** | Check bulk job progress |
  | **List All** | List all bulk jobs |
  | **Cancel** | Cancel a bulk job |

  ### Compose

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Compose multiple screenshots into one |
  | **Get Status** | Check compose job status |
  | **List Jobs** | List all compose jobs |

  **Layout Options:**
  - Auto (intelligent layout selection)
  - Grid
  - Masonry (Pinterest-style)
  - Mondrian (artistic layout)

  ### Usage

  | Operation | Description |
  |-----------|-------------|
  | **Get Full Stats** | Complete usage statistics with history |
  | **Get Quota** | Current quota status |

  ## Usage Examples

  ### Basic Screenshot

  1. Add an **Allscreenshots** node
  2. Select Resource: **Screenshot**
  3. Select Operation: **Capture**
  4. Enter the URL to capture
  5. Configure options as needed
  6. Execute

  ### Bulk Screenshots with Notifications

  1. Add a **Trigger** node (Manual, Schedule, etc.)
  2. Add an **Allscreenshots** node
     - Resource: **Bulk Screenshot**
     - Operation: **Create**
     - Enter URLs (one per line)
  3. Add an **Allscreenshots Trigger** node
     - Event: **Bulk Job Completed**
  4. Connect to your notification service (Slack, Email, etc.)

  ### Compare Multiple Device Views

  1. Add an **Allscreenshots** node
     - Resource: **Compose**
     - Operation: **Create**
     - Enter the same URL multiple times
     - Layout: **Grid**
  2. Configure different device presets for each

  ## Device Presets

  The node includes presets for common devices:

  **Mobile:**
  - iPhone 12, 12 Pro, 13, 14, 14 Pro, 15, 15 Pro, 15 Pro Max
  - Samsung Galaxy S21, S23
  - Google Pixel 5, 6

  **Tablet:**
  - iPad, iPad Pro 11", iPad Pro 12.9", iPad Air
  - Samsung Galaxy Tab

  **Desktop:**
  - MacBook Air, MacBook Pro 14", MacBook Pro 16"
  - Desktop 1920x1080 (Full HD)
  - Desktop 2560x1440 (2K)
  - Desktop 3840x2160 (4K)

  ## Development

  For local development, testing, and publishing instructions, see [CONTRIBUTING.md](CONTRIBUTING.md).

  ## Resources

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

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Allscreenshots Trigger node receives webhook notifications from Allscreenshots when specific screenshot-related events occur, enabling automated workflows based on capture status.","capabilities":["Receives webhook notifications for Screenshot Completed events","Receives webhook notifications for Screenshot Failed events","Receives webhook notifications for Bulk Job Completed events","Receives webhook notifications for Compose Completed events","Triggers downstream actions when screenshot jobs finish or fail"],"authentication":"API key required (configured via n8n Credentials with 'Allscreenshots API' type)","commonUseCases":["Automated notification when a website screenshot is successfully captured","Alerting on failed screenshot captures for error monitoring","Triggering Slack/Email notifications upon bulk screenshot job completion","Automated social media posting when compose jobs finish"],"limitations":["Only supports webhook-based triggering; no direct screenshot capture functionality","Limited to predefined event types (Completed, Failed, Bulk Job, Compose)"],"relatedNodes":["Allscreenshots","Manual Trigger","Schedule Trigger","Slack","Email"]}


node_type: n8n-nodes-triggercmd.triggercmd
package_name: n8n-nodes-triggercmd
display_name: TriggerCMD
description: Run a command on a computer.
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: rvandermey
author_github_url: https://github.com/rvmey/
npm_package_name: n8n-nodes-triggercmd
npm_version: 1.0.2
community_fetched_at: 2026-03-25T21:19:40.867Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-triggercmd

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

  TRIGGERcmd is a cloud service that allows you to run commands on your computers via the Internet.  You install the TRIGGERcmd agent on your Windows, Mac, or Linux computer, configure commands to run, then run them.

  [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

  Run a command on a computer.

  ## Credentials

  Create an account at triggercmd.com and copy a token from the Instructions page.

  ## Compatibility

  Tested on n8n version 1.106.3

  ## Usage

  If the command you'll run on your computer via TRIGGERcmd has parameters enabled, you can use n8n node input data as command parameters.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Executes commands on remote computers (Windows, Mac, or Linux) via the TRIGGERcmd cloud service within n8n workflows.","capabilities":["Run system commands on remote machines","Support dynamic command parameters from n8n node inputs","Cross-platform support (Windows, Mac, Linux)"],"authentication":"API token required (obtained from triggercmd.com account)","commonUseCases":["Automated system maintenance tasks","Remote file operations","Process management on remote servers"],"limitations":["Requires TRIGGERcmd agent installation on target machines","Requires separate TRIGGERcmd account and token setup","Limited to commands supported by the TRIGGERcmd service"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-weavely.weavelyTrigger
package_name: n8n-nodes-weavely
display_name: Weavely Trigger
description: Starts the workflow when a form submission is received from Weavely
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: weavely
author_github_url: https://github.com/weavely/
npm_package_name: n8n-nodes-weavely
npm_version: 0.1.1
community_fetched_at: 2026-03-25T21:19:40.868Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Weavely Trigger for n8n

  An n8n community node that enables workflow automation based on Weavely form submissions. Automatically process form responses and build powerful automations with your Weavely forms.

  ## Installation

  Install this node directly from n8n by following the [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/).

  ## Configuration

  ### Prerequisites
  You'll need a Weavely Personal Token to authenticate the integration. Generate one from [https://forms.weavely.ai/settings?tab=personal-tokens](https://forms.weavely.ai/settings?tab=personal-tokens).

  ### Setup Steps

  1. Add the **Weavely Trigger** node to your workflow
  2. Set up authentication:
     - Click "Create New Credential"
     - Enter your Weavely Personal Token
     - Test the connection
  3. Choose your team from the dropdown
  4. Select which form should trigger the workflow
  5. Activate your workflow

  When someone submits the selected form, your workflow will automatically run with the submission data.

  ## Output Data

  The trigger provides clean, structured data for each submission:

  - **Form metadata**: Form ID, response ID, submission timestamp
  - **Field answers**: Each answer includes both the value and human-readable field label
  - **Type information**: Understand what type of data each field contains

  All field IDs are automatically mapped to their corresponding question labels for easier workflow building.

  ## Developers

  For instructions on testing this node on a local n8n instance for development purposes, see [https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/)

  ## License

  [MIT](https://github.com/weavely-ai/n8n-nodes-weavely-ai/blob/main/LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node automatically triggers a workflow when a form submission is received from Weavely, enabling seamless automation of form responses.","capabilities":["Monitors Weavely form submissions","Extracts form metadata (Form ID, response ID, submission timestamp)","Retrieves field answers with values and human-readable labels","Provides type information for each field","Maps field IDs to question labels automatically"],"authentication":"Personal Token (API Key)","commonUseCases":["Automate responses to customer feedback forms","Integrate form data into CRM systems","Trigger email notifications on form submission","Process survey data into spreadsheets or databases"],"limitations":["Community node (requires manual installation)","Requires valid Weavely Personal Token","Limited to Weavely form submissions only"],"relatedNodes":["Weavely Webhook","Weavely Form Builder","n8n HTTP Request","n8n Set"]}


node_type: @cometapi-dev/n8n-nodes-cometapi.cometApi
package_name: @cometapi-dev/n8n-nodes-cometapi
display_name: CometAPI
description: Interact with CometAPI large language models
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: tensornull
author_github_url: https://github.com/cometapi-dev/n8n-nodes-cometapi.git
npm_package_name: @cometapi-dev/n8n-nodes-cometapi
npm_version: 0.1.5
community_fetched_at: 2026-03-25T21:19:40.869Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-cometapi

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

  CometAPI is a powerful AI language model service that provides OpenAI-compatible API endpoints for various large language models, enabling developers to integrate advanced AI capabilities into their applications.

  [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

  The CometAPI node supports chat completions using various AI language models:

  ### Chat Completions
  - **Model Selection**: Choose from available models (default: gpt-4o-mini)
  - **Message Management**: Support for multi-turn conversations with user, assistant, and system roles
  - **Advanced Parameters**:
    - **Temperature**: Control randomness (0-2, default: 0.7)
    - **Max Tokens**: Set maximum response length (up to 32,768 tokens)
    - **Top P**: Control diversity via nucleus sampling (0-1, default: 1)
    - **Frequency Penalty**: Reduce repetition (-2 to 2, default: 0)
    - **Presence Penalty**: Encourage new topics (-2 to 2, default: 0)
    - **Stream**: Enable streaming responses (default: false)

  ## Credentials

  To use this node, you need to authenticate with CometAPI:

  1. Sign up for a CometAPI account at [CometAPI Console](https://api.cometapi.com/console/token)
  2. Generate an API key from your console dashboard
  3. In n8n, create new CometAPI credentials and enter your API key

  ### Authentication Method
  - **API Key**: Bearer token authentication using your CometAPI key

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Node.js version**: 20.15 or higher
  - **Tested with**: Latest stable versions of n8n

  This node is compatible with all n8n deployment methods including:
  - Self-hosted n8n instances
  - n8n Cloud
  - Docker deployments

  ## Usage

  ### Basic Chat Completion

  1. Add the CometAPI node to your workflow
  2. Configure your CometAPI credentials
  3. Set up your messages:
     - **System message**: Define the AI's behavior (optional)
     - **User message**: Your prompt or question
  4. Choose your preferred model (e.g., gpt-4o-mini)
  5. Execute the workflow

  ### Example Use Cases

  - **Content Generation**: Create articles, summaries, or creative content
  - **Data Analysis**: Analyze and interpret data with AI assistance
  - **Customer Support**: Build intelligent chatbots and support systems
  - **Code Review**: Get AI feedback on code quality and suggestions
  - **Translation**: Translate text between different languages

  ### Advanced Configuration

  For more control over the AI responses, you can adjust:
  - **Temperature**: Lower values (0.1-0.3) for more focused responses, higher values (0.7-1.0) for more creative outputs
  - **Max Tokens**: Limit response length to control costs and response time
  - **Frequency/Presence Penalty**: Fine-tune repetition and topic diversity

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [CometAPI Documentation](https://api.cometapi.com/doc)
  * [CometAPI Console](https://api.cometapi.com/console/token)

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with CometAPI's large language models by providing OpenAI-compatible API endpoints for chat completions.","capabilities":["Chat completions with model selection","Multi-turn conversation support (user, assistant, system roles)","Temperature control for response randomness","Max token limit configuration","Top P nucleus sampling for diversity","Frequency and presence penalty adjustments","Streaming response support","System prompt configuration"],"authentication":"API Key (Bearer token)","commonUseCases":["Content generation (articles, summaries, creative writing)","Data analysis and interpretation","Customer support chatbots","Code review and suggestions","Text translation"],"limitations":[],"relatedNodes":["OpenAI node","Anthropic node","Generic AI node","Chatbot node"]}


node_type: @emvion/n8n-nodes-venabo.emvionVenabo
package_name: @emvion/n8n-nodes-venabo
display_name: Emvion Venabo
description: Interact with the emvion venabo API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: frerichs
author_github_url: https://github.com/emvion-group/n8n-nodes-venabo.git
npm_package_name: @emvion/n8n-nodes-venabo
npm_version: 0.2.0
community_fetched_at: 2026-03-25T21:19:40.869Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "department",
      "options": [
        {
          "name": "Address",
          "value": "address"
        },
        {
          "name": "Department",
          "value": "department"
        },
        {
          "name": "Employee",
          "value": "employee"
        },
        {
          "name": "Object",
          "value": "object"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Ticket",
          "value": "ticket"
        },
        {
          "name": "Ticket Entry",
          "value": "ticket_entries"
        },
        {
          "name": "Time Entry",
          "value": "time_entry"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an address",
          "routing": {
            "request": {
              "url": "/addresses",
              "method": "POST"
            }
          },
          "description": "Create a new address"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an address",
          "routing": {
            "request": {
              "url": "=/addresses/{{$parameter.addressId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an address"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an address",
          "routing": {
            "request": {
              "url": "=/addresses/{{$parameter.addressId}}",
              "method": "GET"
            }
          },
          "description": "Get a single address"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many addresses",
          "routing": {
            "request": {
              "url": "/addresses",
              "method": "GET"
            }
          },
          "description": "Get many addresses"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an address",
          "routing": {
            "request": {
              "url": "=/addresses/{{$parameter.addressId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "address"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a department",
          "routing": {
            "request": {
              "url": "/departments",
              "method": "POST"
            }
          },
          "description": "Create a new department"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a department",
          "routing": {
            "request": {
              "url": "=/departments/{{$parameter.departmentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a department"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a department",
          "routing": {
            "request": {
              "url": "=/departments/{{$parameter.departmentId}}",
              "method": "GET"
            }
          },
          "description": "Get a single department"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many departments",
          "routing": {
            "request": {
              "url": "/departments",
              "method": "GET"
            }
          },
          "description": "Get many departments"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a department",
          "routing": {
            "request": {
              "url": "=/departments/{{$parameter.departmentId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing department"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "department"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an employee",
          "routing": {
            "request": {
              "url": "/employees",
              "method": "POST"
            }
          },
          "description": "Create a new employee"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an employee",
          "routing": {
            "request": {
              "url": "=/employees/{{$parameter.employeeId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an employee"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an employee",
          "routing": {
            "request": {
              "url": "=/employees/{{$parameter.employeeId}}",
              "method": "GET"
            }
          },
          "description": "Get a single employee"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many employees",
          "routing": {
            "request": {
              "url": "/employees",
              "method": "GET"
            }
          },
          "description": "Get many employees"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an employee",
          "routing": {
            "request": {
              "url": "=/employees/{{$parameter.employeeId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing employee"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an object",
          "routing": {
            "request": {
              "url": "/objects",
              "method": "POST"
            }
          },
          "description": "Create a new object"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an object",
          "routing": {
            "request": {
              "url": "=/objects/{{$parameter.objectId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an object"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an object",
          "routing": {
            "request": {
              "url": "=/objects/{{$parameter.objectId}}",
              "method": "GET"
            }
          },
          "description": "Get a single object"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many objects",
          "routing": {
            "request": {
              "url": "/objects",
              "method": "GET"
            }
          },
          "description": "Get many objects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an object",
          "routing": {
            "request": {
              "url": "=/objects/{{$parameter.objectId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing object"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "object"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "routing": {
            "request": {
              "url": "/projects",
              "method": "POST"
            }
          },
          "description": "Create a new project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.projectId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a project"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.projectId}}",
              "method": "GET"
            }
          },
          "description": "Get a single project"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many projects",
          "routing": {
            "request": {
              "url": "/projects",
              "method": "GET"
            }
          },
          "description": "Get many projects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.projectId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a ticket",
          "routing": {
            "request": {
              "url": "/tickets",
              "method": "POST"
            }
          },
          "description": "Create a new ticket"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a ticket",
          "routing": {
            "request": {
              "url": "=/tickets/{{$parameter.ticketId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a ticket"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a ticket",
          "routing": {
            "request": {
              "url": "=/tickets/{{$parameter.ticketId}}",
              "method": "GET"
            }
          },
          "description": "Get a single ticket"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tickets",
          "routing": {
            "request": {
              "url": "/tickets",
              "method": "GET"
            }
          },
          "description": "Get many tickets"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a ticket",
          "routing": {
            "request": {
              "url": "=/tickets/{{$parameter.ticketId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing ticket"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a ticket entry",
          "routing": {
            "request": {
              "url": "=/ticket_entries/{{$parameter.ticketEntryId}}",
              "method": "GET"
            }
          },
          "description": "Get a single ticket entry"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many ticket entries",
          "routing": {
            "request": {
              "url": "/ticket_entries",
              "method": "GET"
            }
          },
          "description": "Get many ticket entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket_entries"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a time entry",
          "routing": {
            "request": {
              "url": "/time_entry",
              "method": "POST"
            }
          },
          "description": "Create a new time entry"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a time entry",
          "routing": {
            "request": {
              "url": "=/time_entry/{{$parameter.timeEntryId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a time entry"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a time entry",
          "routing": {
            "request": {
              "url": "=/time_entry/{{$parameter.timeEntryId}}",
              "method": "GET"
            }
          },
          "description": "Get a single time entry"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many time entries",
          "routing": {
            "request": {
              "url": "/time_entry",
              "method": "GET"
            }
          },
          "description": "Get many time entries"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a time entry",
          "routing": {
            "request": {
              "url": "=/time_entry/{{$parameter.timeEntryId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing time entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "time_entry"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an address",
      "routing": {
        "request": {
          "url": "/addresses",
          "method": "POST"
        }
      },
      "description": "Create a new address"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an address",
      "routing": {
        "request": {
          "url": "=/addresses/{{$parameter.addressId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an address"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an address",
      "routing": {
        "request": {
          "url": "=/addresses/{{$parameter.addressId}}",
          "method": "GET"
        }
      },
      "description": "Get a single address"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many addresses",
      "routing": {
        "request": {
          "url": "/addresses",
          "method": "GET"
        }
      },
      "description": "Get many addresses"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an address",
      "routing": {
        "request": {
          "url": "=/addresses/{{$parameter.addressId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing address"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a department",
      "routing": {
        "request": {
          "url": "/departments",
          "method": "POST"
        }
      },
      "description": "Create a new department"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a department",
      "routing": {
        "request": {
          "url": "=/departments/{{$parameter.departmentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a department"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a department",
      "routing": {
        "request": {
          "url": "=/departments/{{$parameter.departmentId}}",
          "method": "GET"
        }
      },
      "description": "Get a single department"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many departments",
      "routing": {
        "request": {
          "url": "/departments",
          "method": "GET"
        }
      },
      "description": "Get many departments"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a department",
      "routing": {
        "request": {
          "url": "=/departments/{{$parameter.departmentId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing department"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an employee",
      "routing": {
        "request": {
          "url": "/employees",
          "method": "POST"
        }
      },
      "description": "Create a new employee"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an employee",
      "routing": {
        "request": {
          "url": "=/employees/{{$parameter.employeeId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an employee"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an employee",
      "routing": {
        "request": {
          "url": "=/employees/{{$parameter.employeeId}}",
          "method": "GET"
        }
      },
      "description": "Get a single employee"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many employees",
      "routing": {
        "request": {
          "url": "/employees",
          "method": "GET"
        }
      },
      "description": "Get many employees"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an employee",
      "routing": {
        "request": {
          "url": "=/employees/{{$parameter.employeeId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing employee"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an object",
      "routing": {
        "request": {
          "url": "/objects",
          "method": "POST"
        }
      },
      "description": "Create a new object"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an object",
      "routing": {
        "request": {
          "url": "=/objects/{{$parameter.objectId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an object"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an object",
      "routing": {
        "request": {
          "url": "=/objects/{{$parameter.objectId}}",
          "method": "GET"
        }
      },
      "description": "Get a single object"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many objects",
      "routing": {
        "request": {
          "url": "/objects",
          "method": "GET"
        }
      },
      "description": "Get many objects"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an object",
      "routing": {
        "request": {
          "url": "=/objects/{{$parameter.objectId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing object"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "routing": {
        "request": {
          "url": "/projects",
          "method": "POST"
        }
      },
      "description": "Create a new project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.projectId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.projectId}}",
          "method": "GET"
        }
      },
      "description": "Get a single project"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many projects",
      "routing": {
        "request": {
          "url": "/projects",
          "method": "GET"
        }
      },
      "description": "Get many projects"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.projectId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a ticket",
      "routing": {
        "request": {
          "url": "/tickets",
          "method": "POST"
        }
      },
      "description": "Create a new ticket"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a ticket",
      "routing": {
        "request": {
          "url": "=/tickets/{{$parameter.ticketId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a ticket"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a ticket",
      "routing": {
        "request": {
          "url": "=/tickets/{{$parameter.ticketId}}",
          "method": "GET"
        }
      },
      "description": "Get a single ticket"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tickets",
      "routing": {
        "request": {
          "url": "/tickets",
          "method": "GET"
        }
      },
      "description": "Get many tickets"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a ticket",
      "routing": {
        "request": {
          "url": "=/tickets/{{$parameter.ticketId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing ticket"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a ticket entry",
      "routing": {
        "request": {
          "url": "=/ticket_entries/{{$parameter.ticketEntryId}}",
          "method": "GET"
        }
      },
      "description": "Get a single ticket entry"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many ticket entries",
      "routing": {
        "request": {
          "url": "/ticket_entries",
          "method": "GET"
        }
      },
      "description": "Get many ticket entries"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a time entry",
      "routing": {
        "request": {
          "url": "/time_entry",
          "method": "POST"
        }
      },
      "description": "Create a new time entry"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a time entry",
      "routing": {
        "request": {
          "url": "=/time_entry/{{$parameter.timeEntryId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a time entry"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a time entry",
      "routing": {
        "request": {
          "url": "=/time_entry/{{$parameter.timeEntryId}}",
          "method": "GET"
        }
      },
      "description": "Get a single time entry"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many time entries",
      "routing": {
        "request": {
          "url": "/time_entry",
          "method": "GET"
        }
      },
      "description": "Get many time entries"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a time entry",
      "routing": {
        "request": {
          "url": "=/time_entry/{{$parameter.timeEntryId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing time entry"
    }
  ]

npm_readme:
  # @emvion/n8n-nodes-venabo

  n8n Community Node for integration with **venabo.Zeit** and **venabo.Service** - a software for time tracking and service management.

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

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

  ## Installation

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

  ```bash
  npm install @emvion/n8n-nodes-venabo
  ```

  ## Operations

  This node supports the following resources and operations:

  | Resource         | Description             |
  |------------------|-------------------------|
  | **Address**      | Manage addresses        |
  | **Department**   | Manage departments      |
  | **Employee**     | Manage employees        |
  | **Object**       | Manage objects          |
  | **Project**      | Manage projects         |
  | **Ticket**       | Manage tickets          |
  | **Ticket Entry** | Manage ticket entries   |
  | **Time Entry**   | Manage time entries     |

  Each resource supports the following operations:

  - **Create** - Create a new entry
  - **Get** - Retrieve a single entry
  - **Get Many** - Retrieve multiple entries
  - **Update** - Update an entry
  - **Delete** - Delete an entry

  ## Credentials

  To use this node, you need the following credentials:

  | Field       | Description                                                               |
  |-------------|---------------------------------------------------------------------------|
  | **API URL** | The base URL of your venabo instance (e.g. `https://domain.venabo.cloud`) |
  | **API Key** | The API key for authentication                                            |

  ### Creating an API Key

  1. Log in to your venabo instance
  2. Navigate to users
  3. Create a new API user with appropriate permissions
  4. Copy the key and paste it into n8n

  ## Compatibility

  - Tested with n8n version 2.4.0
  - Requires n8n version 2.4.0 or higher

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [venabo Website](https://www.venabo.de/)
  - [emvion Business Software GmbH](https://www.emvion.de/)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community n8n node that enables automation workflows to interact with the emvion venabo API for time tracking and service management.","capabilities":["Create new entries for addresses, departments, employees, objects, projects, tickets, ticket entries, and time entries","Retrieve single or multiple entries for all supported resources","Update existing entries across all resources","Delete entries from all supported resources","Manage organizational data including addresses, departments, employees, objects, projects, and tickets"],"authentication":"API Key required (along with API URL)","commonUseCases":["Automating time entry creation and tracking","Managing project and employee records","Handling ticket workflows and updates","Synchronizing organizational data between venabo and other systems"],"limitations":["Requires n8n version 2.4.0 or higher","Requires manual creation of API users with appropriate permissions in the venabo instance"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Code Node"]}


