# nodes

node_type: @watchflow/n8n-nodes-watchflow.watchflow
package_name: @watchflow/n8n-nodes-watchflow
display_name: Watchflow (n8n Monitoring Suite)
description: Heartbeat monitoring for your cron jobs and scheduled tasks.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: henriklippke
author_github_url: https://github.com/watchflow/n8n-nodes-watchflow.git
npm_package_name: @watchflow/n8n-nodes-watchflow
npm_version: 0.7.0
community_fetched_at: 2026-04-16T09:43:36.115Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "heartbeat",
      "options": [
        {
          "name": "Heartbeat",
          "value": "heartbeat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ping",
      "options": [
        {
          "name": "Ping",
          "value": "ping",
          "action": "Mark job as successful",
          "description": "Simple ping to mark job as successful"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start job tracking",
          "description": "Start job tracking for duration measurement"
        },
        {
          "name": "Error",
          "value": "fail",
          "action": "Mark job as failed",
          "description": "Mark job as failed with error message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "heartbeat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Ping",
      "value": "ping",
      "action": "Mark job as successful",
      "description": "Simple ping to mark job as successful",
      "resource": "heartbeat"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start job tracking",
      "description": "Start job tracking for duration measurement",
      "resource": "heartbeat"
    },
    {
      "name": "Error",
      "value": "fail",
      "action": "Mark job as failed",
      "description": "Mark job as failed with error message",
      "resource": "heartbeat"
    }
  ]

npm_readme:
  # @watchflow/n8n-nodes-watchflow

  Watchflow (n8n Monitoring Suite) is an n8n community node for [Watchflow.io](https://www.watchflow.io/). It allows you to send heartbeats from your n8n workflows to monitor their health and execution time.


  ## 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'll need a Watchflow API Key. You can get one from the [Watchflow Dashboard](https://app.watchflow.io).

  ## Resources & Operations

  ### Heartbeat

  Monitor your scheduled tasks and cron jobs.

  #### Operations:
  - **Ping**: Simple heartbeat successful notification. Marks the job as successful.
  - **Start**: Signal the start of a job. Use this at the beginning of a workflow to track execution duration.
  - **Error**: Signal a job failure. Marks the job as failed and allows you to provide an error message.

  #### Parameters:
  - **Monitor Key**: A unique identifier for your monitor (e.g., `daily-backup`).
  - **Monitor Name**: A human-readable name for your monitor.
  - **Interval**: Expected heartbeat interval (e.g., `5m`, `1h`, `24h`).
  - **Additional Data**: Custom metrics or metadata as a JSON object.
  - **Error Message**: Description of why the job failed (only for Error operation).

  📚 **[Learn n8n monitoring best practices](https://www.watchflow.io/use-cases/n8n-monitoring/)**

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node sends heartbeats to Watchflow.io to monitor the health, execution time, and status of scheduled tasks and cron jobs.","capabilities":["Send heartbeat notifications for job monitoring","Mark jobs as successful via Ping operation","Track job execution duration via Start operation","Report job failures with custom error messages via Error operation","Attach custom metrics and metadata as JSON objects","Configure heartbeat intervals (e.g., 5m, 1h, 24h)"],"authentication":"API key required (Watchflow API Key from Dashboard)","commonUseCases":["Monitoring cron job health","Tracking scheduled task execution time","Alerting on workflow failures","Custom metric collection for automated processes"],"limitations":[],"relatedNodes":[]}


node_type: @promptlayer/n8n-nodes-promptlayer-runagent.promptLayerRunAgent
package_name: @promptlayer/n8n-nodes-promptlayer-runagent
display_name: PromptLayer Run Agent
description: Run an Agent from the PromptLayer API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: jpedoeem
author_github_url: https://github.com/MagnivOrg/n8n-node.git
npm_package_name: @promptlayer/n8n-nodes-promptlayer-runagent
npm_version: 0.1.9
community_fetched_at: 2026-04-16T09:43:36.116Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # PromptLayer RunAgent Node for n8n

  This package provides a custom n8n node for running [PromptLayer Agents](https://promptlayer.com/) directly from your n8n workflows. The **PromptLayer RunAgent** node allows you to execute PromptLayer Agents, pass input variables, select agent versions or labels, and retrieve results programmatically.

  ---

  ## Features

  - **Run any PromptLayer Agent** by name from your n8n workflow
  - **Select agent version** by number or label
  - **Pass input variables** as JSON
  - **Attach metadata** to executions
  - **Control output** (return all outputs or just the main one)
  - **Timeout handling** for long-running agents
  - **Credential-based authentication**

  ---

  ## Prerequisites

  - [n8n](https://n8n.io/) installed (Node.js 20+ required)
  - A [PromptLayer](https://promptlayer.com/) account and API key

  ---

  ## Installation

  1. Clone or download this repository into your n8n custom nodes directory.
  2. Install dependencies:
     ```bash
     npm install
     ```
  3. Build the node:
     ```bash
     npm run build
     ```
  4. [Register the custom node with n8n](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/#load-custom-nodes) if needed.

  ---

  ## Configuration

  ### Setting up Credentials

  1. In n8n, go to **Credentials**.
  2. Create new credentials for **PromptLayerRunAgentApi**.
  3. Enter your PromptLayer API key.

  ---

  ## Usage

  1. Add the **PromptLayer RunAgent** node to your workflow.
  2. Configure the following fields:
     - **Agent Name**: Select the name of the agent to run.
     - **Use Agent Label Name**: Toggle to use a label instead of a version number.
     - **Agent Version Number**: (Optional) Specify a version number (if not using label). By default the latest version of the agent is used.
     - **Agent Label Name**: (Optional) Specify a label name (if using label). By default the latest version of the agent is used.
     - **Input Variables**: JSON object of variables required by the agent (e.g., `{ "question": "What is the weather?" }`).
     - **Additional Fields**:
       - **Metadata**: (Optional) JSON object of metadata to attach.
       - **Return All Outputs**: (Optional) Return all outputs from the agent.
       - **Timeout**: (Optional) Maximum wait time in minutes (default: 10).
  3. Connect the node as needed in your workflow.
  4. Run the workflow. The node will execute the agent and return the results.

  ---

  ## Example

  Suppose you have a PromptLayer agent named `weatherAgent` that takes a `location` variable:

  - **Agent Name**: `weatherAgent`
  - **Input Variables**: `{ "location": "London" }`
  - **Return All Outputs**: `false`

  The node will execute the agent and return the weather information for London.

  ---

  ## Troubleshooting

  - Ensure your PromptLayer API key is correct and has access to the agent.
  - Input variables and metadata must be valid JSON.
  - If the agent takes too long, increase the timeout in Additional Fields.

ai_documentation_summary:
  {"purpose":"Executes PromptLayer Agents from within n8n workflows by sending input variables and retrieving results programmatically.","capabilities":["Run agents by name","Select agent versions by number or label","Pass input variables as JSON","Attach metadata to executions","Control output selection (all outputs or main output only)","Handle timeouts for long-running agents"],"authentication":"API key required","commonUseCases":["Integrating PromptLayer agents into automated n8n workflows","Retrieving agent outputs for further processing","Testing agent performance with custom inputs"],"limitations":["Requires manual installation and building of the custom node in n8n"],"relatedNodes":["n8n Credentials node","n8n HTTP Request node"]}


node_type: n8n-nodes-understandtechchat.understandTechChat
package_name: n8n-nodes-understandtechchat
display_name: Understand Tech Chat
description: Chat with a model in UnderstandTech
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: understandtech
author_github_url: https://github.com/LavaxMaster/n8n-nodes-starter.git
npm_package_name: n8n-nodes-understandtechchat
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:36.117Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message a chat",
          "description": "Send a message to the chat model"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send message a chat",
      "description": "Send a message to the chat model",
      "resource": "chat"
    }
  ]

npm_readme:
  <p align="center">
    <img src="https://raw.githubusercontent.com/LavaxMaster/n8n-nodes-starter/master/nodes/UnderstandTechChat/understandtech_logo.svg" width="400"/>
  </p>

  # n8n-nodes-understandtechchat

  Custom n8n integration nodes for **UnderstandTechChat**, enabling seamless interaction with your platform via authenticated API requests. Built using the [n8n community node starter template](https://github.com/n8n-io/n8n-nodes-starter).

  ## 🧠 What is UnderstandTechChat?

  UnderstandTechChat is a powerful platform that connects users to their own customly trained model and allows you to chat with your model. This custom n8n node allows you to directly integrate and automate your UnderstandTechChat workflows within n8n.

  ---

  ## 🚀 Features

  - Send messages and interact with the UnderstandTechChat API
  - Use custom credentials and authentication
  - Easily plug into any n8n workflow
  - Includes support for multiple HTTP verbs and custom actions

  ---

  ## 📦 Installation

  To install this node in your local or self-hosted n8n instance:

  ```bash
  npm install n8n-nodes-understandtechchat
  ```

  If you’re using Docker:

  ```Dockerfile
  RUN npm install n8n-nodes-understandtechchat
  ```

  Then restart your n8n instance.

  ---

  ## 📋 Prerequisites

  You’ll need:

  - [Git](https://git-scm.com/downloads)
  - Node.js (v20 or later) and [pnpm](https://pnpm.io/)
  - [n8n installed](https://docs.n8n.io/)
    
  Install globally:
  ```bash
  npm install -g n8n
  ```

  ---

  ## 🛠 Development Setup

  1. Clone this repo:
     ```bash
     git clone https://github.com/LavaxMaster/n8n-nodes-starter.git
     cd n8n-nodes-starter
     ```

  2. Install dependencies:
     ```bash
     npm install
     ```

  3. Build and lint:
     ```bash
     npm run build
     npm run lint
     ```

  4. Customize your logic inside:
     - `nodes/UnderstandTechChat/UnderstandTechChat.node.ts`
     - `credentials/UnderstandTechApiCredentials.credentials.ts`

  ---

  ## 🧪 Testing

  You can run and test the node locally within n8n using:
  ```bash
  n8n
  ```

  Then, open the UI and test the `UnderstandTechChat` node in your workflow.

  Refer to the [official guide](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for running custom nodes locally.

  ---

  ## 🌍 Publishing to npm

  When you're ready to share:

  1. Update `package.json` fields:
     - `name`
     - `version`
     - `description`
     - `repository`

  2. Build and lint:
     ```bash
     npm run build
     npm run lint
     ```

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

  ---

  ## 📄 License

  [MIT License](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node enables direct integration with the UnderstandTechChat platform, allowing users to send messages and automate interactions with custom-trained AI models within n8n workflows.","capabilities":["Send messages to UnderstandTechChat API","Interact with custom-trained AI models","Support multiple HTTP verbs","Custom credential management","Authentication via API credentials"],"authentication":"API key required via custom credentials","commonUseCases":["Automating customer support with custom AI models","Integrating custom-trained models into existing n8n workflows","Chatbot automation with personalized model training"],"limitations":["Requires Node.js v20 or later for local development","Requires manual installation via npm or Docker (not pre-packaged in n8n marketplace)","Custom node implementation requires development knowledge"],"relatedNodes":["n8n HTTP Request node","n8n Credentials node","n8n Webhook node"]}


node_type: n8n-nodes-nimbasms.nimbaSMS
package_name: n8n-nodes-nimbasms
display_name: Nimba SMS
description: Send SMS, manage campaigns, and track delivery reports using the Nimba SMS API with ease.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: diallo
author_github_url: https://github.com/nimbasms/
npm_package_name: n8n-nodes-nimbasms
npm_version: 1.0.36
community_fetched_at: 2026-04-16T09:43:36.118Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message",
          "description": "Send and manage SMS"
        },
        {
          "name": "Contact",
          "value": "contact",
          "description": "Manage contacts"
        },
        {
          "name": "Group",
          "value": "group",
          "description": "Manage contact groups"
        },
        {
          "name": "Account",
          "value": "account",
          "description": "Account information and billing"
        },
        {
          "name": "Purchase",
          "value": "purchase",
          "description": "View purchase history and invoices"
        },
        {
          "name": "Sender Name",
          "value": "senderName",
          "description": "Manage sender names"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send an SMS",
          "description": "Send a single SMS"
        },
        {
          "name": "Verification OTP",
          "value": "verification",
          "action": "Send OTP verification",
          "description": "Send OTP verification code"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many SMS",
          "description": "Get many SMS history"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a Message",
          "description": "Get a specific message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all contacts",
          "description": "Get all contacts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all groups",
          "description": "Get all groups"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get account balance",
          "description": "Get account balance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all purchases",
          "description": "Get all purchase history"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchase"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send an SMS",
      "description": "Send a single SMS",
      "resource": "message"
    },
    {
      "name": "Verification OTP",
      "value": "verification",
      "action": "Send OTP verification",
      "description": "Send OTP verification code",
      "resource": "message"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many SMS",
      "description": "Get many SMS history",
      "resource": "message"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a Message",
      "description": "Get a specific message",
      "resource": "message"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all contacts",
      "description": "Get all contacts",
      "resource": "contact"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all groups",
      "description": "Get all groups",
      "resource": "group"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get account balance",
      "description": "Get account balance",
      "resource": "account"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all purchases",
      "description": "Get all purchase history",
      "resource": "purchase"
    }
  ]

npm_readme:
  # n8n-nodes-nimbasms

  ![npm version](https://img.shields.io/npm/v/n8n-nodes-nimbasms)
  ![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-nimbasms)
  ![License](https://img.shields.io/badge/license-MIT-green)
  ![n8n Community Node](https://img.shields.io/badge/n8n-community--node-ff6d5a)

  A comprehensive n8n community node that integrates with the Nimba SMS API, enabling you to send SMS messages, manage contacts, create campaigns, and handle billing operations directly from your n8n workflows.

  <p align="center"><img src="examples/automation_example.png" alt="Nimba SMS in n8n"></p>

  ## 🚀 Features

  - ✅ **SMS Operations**: Send individual SMS and retrieve message history
  - ✅ **Contact Management**: Create, update, delete, and organize contacts
  - ✅ **Group Management**: Organize contacts into groups for targeted campaigns
  - ✅ **Account Operations**: Check balance, view SMS packs, and monitor usage
  - ✅ **Purchase Management**: View purchase history and invoices
  - ✅ **Sender Name Management**: Manage custom sender names

  ## 📦 Installation

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

  1. Open your n8n instance
  2. Go to **Settings > Community Nodes**
  3. Click **Install**
  4. Enter `n8n-nodes-nimbasms`
  5. Click **Install**

  ### Option 2: Manual Installation

  ```bash
  # For self-hosted n8n instances
  npm install n8n-nodes-nimbasms

  # For global n8n installation
  npm install -g n8n-nodes-nimbasms
  ```

  ### Option 3: Docker Installation

  Add to your n8n Docker configuration:

  ```dockerfile
  FROM n8nio/n8n:latest
  USER root
  RUN npm install -g n8n-nodes-nimbasms
  USER node
  ```

  ## 🔑 Credentials Setup

  Before using this node, configure your Nimba SMS API credentials:

  1. In n8n, go to **Credentials** and create **Nimba SMS API** credentials
  2. Fill in the required information:
     - **Service ID (SID)**: Your Nimba SMS Service ID
     - **Secret Token**: Your Nimba SMS Secret Token
     - **Base URL**: Default is `https://api.nimbasms.com`

  > 💡 Get your credentials from your [Nimba SMS Dashboard](https://wwww.nimbasms.com/app)

  ## 📱 Supported Operations

  ### SMS Operations
  - **Send**: Send individual SMS messages
  - **Get Many**: Retrieve SMS history with filtering options
  - **Get**: Get details of a specific SMS message

  ### Contact Operations
  - **Create**: Add new contacts with optional group assignment
  - **Update**: Modify contact information and group memberships

  ### Group Operations
  - **Get**: Retrieve group details

  ### Account Operations
  - **Get Balance**: Check your SMS credit balance

  ### Purchase Operations
  - **Get All**: Retrieve purchase history with filtering options
  - **Get**: Get details of a specific purchase by UID

  ### Sender Name Operations
  - **Get**: Check sender name status
  - **Get Many**: List all your sender names

  ## 🎯 Quick Start Examples

  ### Send a Simple SMS

  ```json
  {
    "resource": "sms",
    "operation": "send",
    "senderName": "YourBrand",
    "contact": "+224123456789",
    "message": "Hello from n8n! Your order has been confirmed."
  }
  ```

  ### Get Purchase History

  ```json
  {
    "resource": "purchase",
    "operation": "getAll",
    "returnAll": false,
    "limit": 10,
    "additionalFields": {
      "payment_type": "Orange",
      "start_date": "2024-01-01T00:00:00Z",
      "end_date": "2024-12-31T23:59:59Z"
    }
  }
  ```

  ### Get Specific Purchase Details

  ```json
  {
    "resource": "purchase",
    "operation": "get",
    "purchaseUid": "07cc67f4-45d6-494b-adac-09b5cbc7e2b5"
  }
  ```

  ### Create a Contact with Group Assignment

  ```json
  {
    "resource": "contact",
    "operation": "create",
    "numero": "+224123456789",
    "additionalFields": {
      "name": "John Doe",
      "groupes_id": "1,2,3"
    }
  }
  ```

  ### Launch an SMS Campaign

  ```json
  {
    "resource": "campaign",
    "operation": "create",
    "name": "Welcome Campaign",
    "senderName": "YourBrand",
    "message": "Welcome to our service! Enjoy 20% off your first order.",
    "groupsIds": "1,2"
  }
  ```

  ### Check Account Balance

  ```json
  {
    "resource": "account",
    "operation": "getBalance"
  }
  ```

  ## 🌍 Regional Support

  Optimized for African markets with:
  - Guinea country code (+224) auto-formatting
  - Support for local phone number formats

  ## 🛠️ Compatibility

  - **n8n Version**: 0.190.0 or later
  - **Node.js Version**: 16.x or later
  - **API Version**: Nimba SMS API v1

  ## 📈 Use Cases

  ### E-commerce
  - Order confirmations and shipping notifications
  - Abandoned cart recovery campaigns
  - Customer support and feedback collection

  ### Marketing
  - Promotional campaigns and special offers
  - Event notifications and reminders
  - Customer segmentation and targeting

  ### Business Operations
  - Employee notifications and alerts
  - Appointment reminders
  - System status updates and monitoring

  ### Customer Service
  - Support ticket updates
  - Account verification codes
  - Service outage notifications

  ## 🤝 Support & Resources

  - **Documentation**: [Nimba SMS API Docs](https://developers.nimbasms.com)
  - **Community**: [n8n Community Forum](https://community.n8n.io)
  - **Issues**: [GitHub Issues](https://github.com/nimbasms/n8n-nodes-nimbasms/issues)
  - **Support**: Contact contact@nimbasms.com for API-related questions

  ## 📄 License

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

  ## 🔗 Links

  - [npm Package](https://www.npmjs.com/package/n8n-nodes-nimbasms)
  - [Nimba SMS Website](https://www.nimbasms.com)
  - [n8n Website](https://n8n.io)

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Nimba SMS API to send SMS messages, manage contacts and groups, handle campaigns, and monitor account operations.","capabilities":["Send individual SMS messages","Retrieve SMS message history","Create, update, and delete contacts","Organize contacts into groups","Create and manage SMS campaigns","Check account balance and SMS packs","View purchase history and invoices","Manage custom sender names","Retrieve specific message or purchase details by ID"],"authentication":"API key required (Service ID and Secret Token)","commonUseCases":["E-commerce order confirmations and shipping notifications","Marketing promotional campaigns and special offers","Customer segmentation and targeted messaging","Appointment reminders and system alerts","Support ticket updates and verification codes"],"limitations":["Optimized primarily for African markets with specific country code support","Requires n8n version 0.190.0 or later","Requires Node.js version 16.x or later"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


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

updated_at: 2026-04-16 09:43:36
author_name: superchat-ben
author_github_url: https://github.com/super-chat/
npm_package_name: n8n-nodes-superchat
npm_version: 0.5.0
community_fetched_at: 2026-04-16T09:43:36.119Z
npm_readme:
  # n8n-nodes-superchat
  ![](./superchat.png)

  This is an n8n community node. It lets you integrate **Superchat** into your n8n workflows.

  **Superchat** is a unified messaging platform that enables sending and receiving messages across WhatsApp, Instagram Direct, Facebook Messenger, SMS, email, Live Chat, and more. Our Superchat app in n8n supports managing contacts, conversations, notes, files, channels, labels, and more.

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

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

  ---

  ## Installation

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

  ---

  ## Operations

  This node supports operations on the following six resources:

  ### User
  - **Me** — Retrieve details about the authenticated Superchat user.

  ### Contact
  - **Create** — Create a new contact.
  - **Search** — Search for contacts by email, phone, or Instagram handle.
  - **Update** — Update a contact's information.
  - **Delete** — Delete a contact by its ID.
  - **Get Conversations** — Fetch all conversations associated with a contact.

  ### Message
  - **Send Message** — Send a text or media message to a contact.
  - **Send Mail** — Send an email, with optional attachments, to a contact.
  - **Send WhatsApp Template** — Send a pre-approved WhatsApp template message.

  ### Conversation
  - **Get** — Retrieve a conversation by its ID.
  - **Delete** — Delete a conversation by its ID.
  - **Update Labels** — Update the labels for a conversation.
  - **Update Status** — Update the status of a conversation (e.g., open, done, snoozed).
  - **Update Assignees** — Update the users assigned to a conversation.

  ### Note
  - **Create** — Add a new note to a conversation.
  - **Get** — Retrieve a specific note from a conversation.
  - **Delete** — Delete a specific note from a conversation.

  ### File
  - **Create (upload)** — Upload a binary file to Superchat.
  - **Download** — Download a file by its ID.
  - **Delete** — Delete a file by its ID.

  ---

  ## Credentials

  **Superchat API**

  1. Log into your Superchat Account.
  2. Go to Settings > Explore Integrations > Click the n8n card
  3. Click 'Add' and copy the API key.
  4. Add a n8n action or trigger and enter your Superchat API key in the credentials section.

  ---

  ## Compatibility

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

  ---

  ## Usage

  1. Install n8n-nodes-superchat via the community nodes installer.
  2. Add the Superchat node to your n8n workflow.
  3. Configure credentials using your Superchat API key.
  4. Select a resource (User, Contact, Message, Conversation, Note, or File).
  5. Choose the desired operation.
  6. Fill in required fields (e.g. recipient info, message content).
  7. Execute the workflow to send messages, manage contacts/conversations, and upload/download files.

  ---

  ## Resources

  - [Superchat API Documentation](https://developers.superchat.com/) 
  - [Getting Started Guide](https://developers.superchat.com/docs/getting-started-send-your-first-message)
  - [Superchat Help Centre](https://help.superchat.com)


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

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

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

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

  # n8n-nodes-groner

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

  ---

  ## 🚀 Main Node

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

  ## 📋 Available Resources and Operations

  ### 🔗 Available Resources

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

  ### 📊 Operations by Resource

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

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

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

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

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

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

  ---

  ## 🔧 Prerequisites

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

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

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

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

  ---

  ## 📦 Installation

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

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

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

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

  ---

  ## 🔐 Credentials Configuration

  ### Setting Up Groner API Credentials

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

  ### Credential Details

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

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

  ---

  ## 🎯 How to Use the Groner Node

  ### Basic Workflow Setup

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

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

  ---

  ## 📖 Detailed Operation Guide

  ### 1. Create Deal

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

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

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

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

  ### 2. Search Deals

  Searches for existing deals with advanced filtering and pagination.

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

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

  ### 3. Add Tags

  Adds organizational labels to existing deals.

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

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

  ### 4. Add Note

  Adds notes or occurrences to track deal interactions.

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

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

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

  ### 5. Create Task

  Creates tasks linked to deals with assignment capabilities.

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

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

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

  ### 6. Search Tasks

  Searches for tasks with comprehensive filtering options.

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

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

  ### 7. Edit Contact by Property

  Updates specific properties of existing contacts.

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

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

  ### 8. Edit Deal by Property

  Updates specific properties of existing deals.

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

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

  ### 9. Send WhatsApp Message

  Sends WhatsApp messages through Groner's integrated messaging system.

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

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

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

  ### 10. Move Deal

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

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

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

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

  ### 11. Get Deal Quote

  Retrieves quotes associated with a specific deal.

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

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

  ---

  ## 🔄 Workflow Examples

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

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

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

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

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

  ### Example 2: Complete Follow-up Workflow

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

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

  ---

  ## 🔧 Development Scripts

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

  ---

  ## 📁 Project Structure

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

  ---

  ## ⚠️ Important Notes

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

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

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

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

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

  ---

  ## 🤝 Contributing

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

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

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

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

  ---

  ## 📄 License

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

  ---

  ## 📞 Support

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

  ---

  ## 🌐 Language Versions

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

  ---

  ## 🔄 Version History

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

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

ai_documentation_summary:
  {"purpose":"Integrates n8n with the Groner CRM API to manage leads, deals, contacts, tasks, notes, tags, and send WhatsApp messages.","capabilities":["Create deals/leads","Search deals with advanced filters and pagination","Edit deal properties","Get quotes for deals","Move deals to different stages","Manage contacts (edit contact info)","Create and search tasks","Add notes/occurrences to deals","Manage tags on deals","Send WhatsApp messages"],"authentication":"API Key required (Tenant subdomain and API Key)","commonUseCases":["Automating lead capture and deal creation from web forms","Syncing contact information between external systems and Groner CRM","Automating task assignment and follow-ups","Sending automated WhatsApp notifications to clients","Tracking and managing sales pipelines"],"limitations":["Requires manual installation of custom n8n package (git clone, pnpm build)","Requires specific Node.js version (>=18.10) and pnpm version (>=9.1)","README truncated, so some optional fields and detailed operation parameters may be incomplete in documentation"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.whatsapp","n8n-nodes-base.credential"]}


node_type: n8n-nodes-kargo-entegrator.kargoEntegratorTrigger
package_name: n8n-nodes-kargo-entegrator
display_name: Kargo Entegratör Trigger
description: Triggers when shipment status changes via webhook
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: gurmesoftcom
author_github_url: https://github.com/gurmesoft/
npm_package_name: n8n-nodes-kargo-entegrator
npm_version: 0.1.4
community_fetched_at: 2026-04-16T09:43:36.121Z
npm_readme:
  # n8n-nodes-kargo-entegrator

  This is an n8n community node. It lets you use Kargo Entegratör API in your n8n workflows.

  Kargo Entegratör is a Turkish cargo integration platform that allows you to manage shipments across multiple cargo companies from a single interface.

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

  ## Table of Contents

  - [Quick Start](#quick-start)
  - [Development Setup](#development-setup)
  - [Docker Environment](#docker-environment)
  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Scripts](#scripts)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [Version History](#version-history)
  - [License](#license)

  ## Quick Start

  ### Prerequisites
  - Node.js >= 20.15
  - npm or yarn
  - Docker (optional, for containerized development)

  ### Local Development

  1. **Clone and Install**
     ```bash
     git clone https://github.com/gurmesoft/n8n-nodes-kargo-entegrator.git
     cd n8n-nodes-kargo-entegrator
     npm install
     ```

  2. **Build the Project**
     ```bash
     npm run build
     ```

  3. **Start Development**
     ```bash
     npm run dev
     ```

  ### Docker Development (Recommended)

  1. **Quick Start with Docker**
     ```bash
     # Build and start development environment
     npm run dev:docker
     
     # Access N8N at http://localhost:5678
     # Username: admin
     # Password: admin123
     ```

  2. **View Logs**
     ```bash
     npm run dev:docker:logs
     ```

  3. **Stop Environment**
     ```bash
     npm run dev:docker:stop
     ```

  ## Development Setup

  ### Environment Requirements
  - **Node.js**: >= 20.15
  - **TypeScript**: ^5.8.2
  - **n8n-workflow**: Latest (peer dependency)

  ### Project Structure
  ```
  n8n-nodes-kargo-entegrator/
  ├── credentials/           # API credentials configuration
  ├── nodes/                # Node implementations
  │   └── KargoEntegrator/
  │       ├── *.node.ts     # Node logic
  │       ├── actions/      # Node actions
  │       └── resources/    # Node resources
  ├── dist/                 # Built files (generated)
  ├── docker-compose*.yml   # Docker configurations
  └── package.json          # Project configuration
  ```

  ### Development Workflow

  1. **Make Changes**: Edit TypeScript files in `nodes/` or `credentials/`
  2. **Build**: Run `npm run build` to compile TypeScript
  3. **Test**: Use Docker environment or local N8N instance
  4. **Format**: Run `npm run format` to format code
  5. **Lint**: Run `npm run lint` to check code quality

  ## Docker Environment

  Three Docker configurations are available:

  ### 1. Development Environment (Recommended)
  ```bash
  npm run dev:docker
  # or
  docker-compose -f docker-compose.dev.yml up -d
  ```
  - **Services**: N8N + PostgreSQL + Node development container
  - **Features**: Hot reload, debugging, persistent data
  - **Access**: http://localhost:5678

  ### 2. Simple Environment
  ```bash
  docker-compose -f docker-compose.simple.yml up -d
  ```
  - **Services**: N8N only (SQLite database)
  - **Use Case**: Quick testing
  - **Access**: http://localhost:5678

  ### 3. Production Environment
  ```bash
  docker-compose up -d
  ```
  - **Services**: N8N + PostgreSQL
  - **Use Case**: Production deployment
  - **Access**: http://localhost:5678

  ### Docker Commands
  ```bash
  # Start development environment
  npm run dev:docker

  # View logs
  npm run dev:docker:logs

  # Restart services
  npm run dev:docker:restart

  # Stop environment
  npm run dev:docker:stop

  # Build and restart with live reload
  npm run dev:live
  ```

  ### Access Information
  - **N8N Web Interface**: http://localhost:5678
  - **Username**: admin
  - **Password**: admin123
  - **PostgreSQL**: localhost:5432 (production) / localhost:5433 (development)
    - User: n8n
    - Password: n8n123
    - Database: n8n

  ## Scripts

  | Script | Description |
  |--------|-------------|
  | `npm run build` | Build TypeScript and copy icons |
  | `npm run dev` | Watch TypeScript files for changes |
  | `npm run dev:live` | Development with auto-restart |
  | `npm run dev:docker` | Start Docker development environment |
  | `npm run dev:docker:logs` | View Docker logs |
  | `npm run dev:docker:stop` | Stop Docker environment |
  | `npm run dev:docker:restart` | Restart Docker services |
  | `npm run format` | Format code with Prettier |
  | `npm run lint` | Lint code with ESLint |
  | `npm run lintfix` | Fix linting issues automatically |  

  ## Installation

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

  ### Community Nodes (Recommended)

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

  ### Manual Installation

  ```bash
  npm install n8n-nodes-kargo-entegrator
  ```

  ## Operations

  ### Shipment
  - **Create**: Create a new shipment
  - **Get**: Retrieve shipment details
  - **Create Return**: Create a return shipment

  ### Customer
  - **Update**: Update customer information

  ### Cargo
  - **Get All**: Get all available cargo companies
  - **Get**: Get specific cargo company details

  ## Credentials

  To use this node, you need:

  1. Sign up for an account at [https://app.kargoentegrator.com](https://app.kargoentegrator.com)
  2. Get your API key from the dashboard
  3. Configure the credentials in n8n:
     - **API Key**: Your Kargo Entegratör API key
     - **Base URL**: https://app.kargoentegrator.com/api (default)

  ## Compatibility

  Tested against n8n version 1.0+.

  ## Usage

  ### Creating a Shipment

  1. Select "Shipment" as the resource
  2. Choose "Create" as the operation
  3. Fill in the required fields:
     - Receiver name, phone, and address
     - City and district
     - Cargo company ID
     - Package details (weight, count, description)

  ### Managing Returns

  Use the "Create Return" operation to create return shipments with the same interface as regular shipments.

  ### Getting Cargo Companies

  Use the "Cargo" resource to get information about available cargo companies and their IDs for use in shipment creation.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Kargo Entegratör API Documentation](https://documenter.getpostman.com/view/25047990/2sAY4vg2RR)
  * [Kargo Entegratör Website](https://kargoentegrator.com/)

  ## Version History

  ### 0.1.0
  - Initial release
  - Support for shipment creation, retrieval, and PDF generation
  - Support for return shipment management
  - Cargo company and warehouse information retrieval
  - Webhook trigger for shipment status changes
  - System settings access

  ## Contributing

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

  ## Support

  For support, please contact [destek@kargoentegrator.com](mailto:destek@kargoentegrator.com) or visit our [website](https://kargoentegrator.com/).

  ## License

  [MIT](https://github.com/gurmesoft/n8n-nodes-kargo-entegrator/blob/main/LICENSE.md)


node_type: n8n-nodes-wati.watiTrigger
package_name: n8n-nodes-wati
display_name: Wati
description: Trigger workflows on WhatsApp events via Wati — incoming messages, delivery updates, and more.
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: nick-wati
author_github_url: https://github.com/nick-wati/
npm_package_name: n8n-nodes-wati
npm_version: 0.3.2
community_fetched_at: 2026-04-16T09:43:36.121Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-wati

  This is an [n8n](https://n8n.io/) community node for [Wati](https://www.wati.io/) (WhatsApp Team Inbox). It lets you automate WhatsApp messaging workflows using the Wati API.

  [Wati](https://www.wati.io/) is a WhatsApp Business API solution that enables businesses to communicate with customers at scale through WhatsApp.

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

  1. Go to **Settings → Community Nodes** in your n8n instance.
  2. Click **Install a community node**.
  3. Enter `n8n-nodes-wati` and click **Install**.

  ## Credentials

  You need a Wati account to use this node. To set up credentials:

  1. Log in to your [Wati Dashboard](https://app.wati.io/).
  2. Go to **API Docs** to find your **API Endpoint URL** and **Access Token**.
  3. In n8n, create a new **Wati API** credential and enter these values.

  ## Supported Operations

  ### Wati Node

  #### Message
  - **Send Text Message** — Send a text message to an active WhatsApp conversation (within 24h window)
  - **Send Button Message** — Send a message with interactive buttons
  - **Send List Message** — Send a message with a selectable list
  - **Get Messages** — Retrieve messages for a conversation by conversation ID
  - **Get Media** — Download a media file (image, video, document, audio, etc.) by message ID

  #### Template Message
  - **Send Template Message** — Send a template message (works outside the 24h window)
  - **Get Templates** — Get a list of available message templates

  #### Contact
  - **Get Contacts** — Get a list of contacts
  - **Get Contact Detail** — Get details of a specific contact by phone number
  - **Add Contact** — Add a new contact

  ### Wati Trigger

  - **Webhook Trigger** — Receive incoming messages and status updates via webhook

  ## Resources

  - [Sign up for Wati](https://auth.wati.io/register/?utm_source=n8n&utm_medium=referral&utm_campaign=n8n)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Automates WhatsApp messaging workflows by triggering on incoming events and enabling sending of various message types via the Wati API.","capabilities":["Send text messages (within 24h window)","Send button messages","Send list messages","Send template messages (outside 24h window)","Retrieve conversation messages","Download media files","Get available message templates","Manage contacts (add, retrieve details)","Webhook trigger for incoming messages and status updates"],"authentication":"API key required (Access Token and API Endpoint URL from Wati Dashboard)","commonUseCases":["Automated customer support responses on WhatsApp","Order status notifications via WhatsApp","Two-factor authentication verification messages","Marketing campaigns using interactive buttons or templates","Automated media delivery (images, documents)"],"limitations":["Text messages can only be sent within a 24-hour window of the conversation creation","Template messages are required for sending outside the 24-hour window"],"relatedNodes":["n8n-nodes-whatsapp.whatsappTrigger","n8n-nodes-whatsapp.whatsappSendTextMessage","n8n-nodes-whatsapp.whatsappSendTemplateMessage"]}


node_type: @wizaco/n8n-nodes-wiza.wiza
package_name: @wizaco/n8n-nodes-wiza
display_name: Wiza
description: Interact with Wiza API for contact enrichment
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: wizadev
author_github_url: https://github.com/WizaCo/n8n-nodes-wiza.git
npm_package_name: @wizaco/n8n-nodes-wiza
npm_version: 0.1.1
community_fetched_at: 2026-04-16T09:43:36.122Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "emailFinder",
      "options": [
        {
          "name": "Email Finder",
          "value": "emailFinder",
          "action": "Find verified work and personal email addresses for a contact using their name company information or linked in url",
          "description": "Find verified work and personal email addresses for a contact using their name, company information, or LinkedIn URL"
        },
        {
          "name": "Phone Finder",
          "value": "phoneFinder",
          "action": "Find mobile and direct dial phone numbers for a contact using their name company information or linkedin url",
          "description": "Find mobile and direct dial phone numbers for a contact using their name, company information, or LinkedIn URL"
        },
        {
          "name": "LinkedIn Profile Finder",
          "value": "linkedinFinder",
          "action": "Find contact linkedin profile url and key details such as job title company and location using their name company or email address",
          "description": "Find a contact's LinkedIn profile URL and key details—such as job title, company, and location—using their name, company, or email address"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Email Finder",
      "value": "emailFinder",
      "action": "Find verified work and personal email addresses for a contact using their name company information or linked in url",
      "description": "Find verified work and personal email addresses for a contact using their name, company information, or LinkedIn URL"
    },
    {
      "name": "Phone Finder",
      "value": "phoneFinder",
      "action": "Find mobile and direct dial phone numbers for a contact using their name company information or linkedin url",
      "description": "Find mobile and direct dial phone numbers for a contact using their name, company information, or LinkedIn URL"
    },
    {
      "name": "LinkedIn Profile Finder",
      "value": "linkedinFinder",
      "action": "Find contact linkedin profile url and key details such as job title company and location using their name company or email address",
      "description": "Find a contact's LinkedIn profile URL and key details—such as job title, company, and location—using their name, company, or email address"
    }
  ]

npm_readme:
  # n8n-nodes-wiza

  An n8n community node for integrating with the [Wiza](https://wiza.co) contact enrichment API. Find email addresses, phone numbers, and LinkedIn profiles for your prospects using multiple data sources.

  ![Wiza Logo](https://wiza.co/favicon.png)

  ## Features

  ### 🔍 **Email Finder**
  Find verified work and personal email addresses using:
  - LinkedIn profile URLs
  - Contact details (name + company/domain)
  - Multiple data points for best results

  ### 📞 **Phone Finder**
  Find mobile and direct dial phone numbers using:
  - Email addresses
  - LinkedIn profile URLs  
  - Contact details (name + company/domain)
  - Multiple data points for best results

  ### 💼 **LinkedIn Profile Finder**
  Find LinkedIn profiles and extract key details using:
  - Email addresses
  - LinkedIn URLs (for enhanced profile data)
  - Contact details (name + company/domain)
  - Multiple data points for best results

  ## Installation

  ### Community Nodes (Recommended)

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

  ### Manual Installation

  ```bash
  # In your n8n root directory
  npm install n8n-nodes-wiza
  ```

  ### Docker

  ```bash
  # Using environment variable
  N8N_NODES_INCLUDE=n8n-nodes-wiza

  # Or in docker-compose.yml
  environment:
    N8N_NODES_INCLUDE: "n8n-nodes-wiza"
  ```

  ## Setup

  ### 1. Get Your API Key

  1. Sign up at [wiza.co](https://wiza.co)
  2. Navigate to **Settings > API** 
  3. Generate your API key

  ### 2. Configure Credentials

  1. In n8n, go to **Credentials**
  2. Click **Create New** 
  3. Search for **Wiza API**
  4. Enter your API key
  5. Click **Save**

  ## Usage

  ### Basic Email Finding

  ```json
  {
    "operation": "Email Finder",
    "inputType": "Contact Details", 
    "fullName": "John Doe",
    "company": "Acme Corp"
  }
  ```

  ### Phone Number Lookup

  ```json
  {
    "operation": "Phone Finder",
    "inputType": "Email",
    "email": "john@acme.com"
  }
  ```

  ### LinkedIn Profile Enhancement

  ```json
  {
    "operation": "LinkedIn Profile Finder", 
    "inputType": "All Fields",
    "email": "john@acme.com",
    "fullName": "John Doe",
    "company": "acme.com"
  }
  ```

  ## Input Types

  ### 📧 **Email**
  Provide an email address to find phone numbers or LinkedIn profiles.

  ### 🔗 **LinkedIn URL** 
  Provide a LinkedIn profile URL to find emails, phone numbers, or enhanced profile data.

  ### 👤 **Contact Details**
  Provide name and company/domain to find emails, phone numbers, or LinkedIn profiles.

  ### 🎯 **All Fields** *(Recommended)*
  Provide any combination of email, LinkedIn URL, name, and company for best results. All fields are optional - the more data you provide, the better the results.

  ## Response Data

  ### Email Finder Response
  ```json
  {
    "email": "john@acme.com",
    "email_type": "work", 
    "email_status": "valid",
    "name": "John Doe",
    "company": "Acme Corp",
    "title": "CEO",
    "linkedin_profile_url": "https://linkedin.com/in/johndoe"
  }
  ```

  ### Phone Finder Response  
  ```json
  {
    "phone_number": "+1234567890",
    "phone_status": "found",
    "mobile_phone": "+1234567890", 
    "name": "John Doe",
    "company": "Acme Corp",
    "email": "john@acme.com"
  }
  ```

  ### LinkedIn Profile Finder Response
  ```json
  {
    "linkedin_profile_url": "https://linkedin.com/in/johndoe",
    "name": "John Doe", 
    "title": "CEO",
    "company": "Acme Corp",
    "location": "New York, NY",
    "company_domain": "acme.com"
  }
  ```

  ## Configuration Options

  ### **Timeout**
  - **Default**: 300 seconds (5 minutes)
  - **Description**: Maximum time to wait for enrichment completion
  - **Range**: 30-600 seconds

  ### **Email Type** *(Email Finder only)*
  - **Work**: Professional emails (john@company.com)
  - **Personal**: Personal emails (john.doe@gmail.com) 
  - **Any**: Both work and personal emails

  ## Error Handling

  The node handles various error scenarios:

  - **Invalid API Key**: Check your credentials
  - **Rate Limiting**: Automatic retry with backoff
  - **Timeout**: Enrichment took too long to complete
  - **No Results**: No data found for the provided input
  - **Invalid Input**: Missing required fields or invalid format

  ## Workflow Examples

  ### Lead Enrichment Pipeline
  ```
  Webhook → Wiza Email Finder → Wiza Phone Finder → CRM Update
  ```

  ### LinkedIn Outreach Prep
  ```
  CSV Import → Wiza LinkedIn Finder → Message Personalization → LinkedIn Automation
  ```

  ### Data Validation Flow
  ```
  Database Query → Wiza Email Finder → Email Validation → Clean Database Update
  ```

  ## Support

  - **Documentation**: [wiza.co/api-docs](https://wiza.co/api-docs)
  - **Issues**: [GitHub Issues](https://github.com/WizaCo/n8n-nodes-wiza/issues)
  - **Wiza Support**: hello@wiza.com

  ## License

  [MIT](LICENSE.md)

  ## Contributing

  Contributions are welcome! Please read our [contributing guidelines](CODE_OF_CONDUCT.md) and submit pull requests to the main repository.

  ---

  Made with ❤️ by the Wiza team

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Wiza API to enrich contact data by finding verified email addresses, phone numbers, and LinkedIn profiles for prospects.","capabilities":["Find verified work and personal email addresses from LinkedIn URLs, contact details, or other emails","Discover mobile and direct dial phone numbers using email addresses, LinkedIn URLs, or contact details","Locate and extract LinkedIn profile details including name, title, location, and company domain","Support multiple input types: Email, LinkedIn URL, Contact Details (Name + Company), or All Fields","Configure timeout settings (30-600 seconds) for enrichment operations","Filter email types: Work, Personal, or Any"],"authentication":"API key required via n8n Credentials","commonUseCases":["Lead enrichment pipelines for sales teams","Personalizing LinkedIn outreach messages","Validating and cleaning contact databases","Finding missing contact information for cold outreach"],"limitations":["Results depend on the quality and availability of provided input data","May encounter rate limiting which triggers automatic retries","Enrichment can take up to 5 minutes (timeout setting) to complete","No results may occur if input data is insufficient or unavailable in Wiza's database"],"relatedNodes":["Webhook","CRM Update","CSV Import","Email Validation","LinkedIn Automation"]}


node_type: n8n-nodes-transcript-lol.transcriptLol
package_name: n8n-nodes-transcript-lol
display_name: Transcript LOL
description: Create recordings and get transcripts from Transcript LOL
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: pkpio
author_github_url: https://github.com/transcript-lol/
npm_package_name: n8n-nodes-transcript-lol
npm_version: 0.3.3
community_fetched_at: 2026-04-16T09:43:36.123Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "recording",
      "options": [
        {
          "name": "Recording",
          "value": "recording"
        },
        {
          "name": "Transcript",
          "value": "transcript"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a recording",
          "description": "Create a new recording for transcription"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a recording",
          "description": "Get a recording by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many recordings",
          "description": "Get many recordings from a workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recording"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a transcript",
          "description": "Get transcript for a recording"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many workspaces",
          "description": "Get all workspaces"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a recording",
      "description": "Create a new recording for transcription",
      "resource": "recording"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a recording",
      "description": "Get a recording by ID",
      "resource": "recording"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many recordings",
      "description": "Get many recordings from a workspace",
      "resource": "recording"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a transcript",
      "description": "Get transcript for a recording",
      "resource": "transcript"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many workspaces",
      "description": "Get all workspaces",
      "resource": "workspace"
    }
  ]

npm_readme:
  # n8n-nodes-transcript-lol

  This is an n8n community node for [Transcript.lol](https://transcript.lol) - an AI-powered audio and video transcription service.

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

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

  ## Installation

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

  ## Operations

  ### Transcript.lol Node

  #### Recording Resource
  - **Create** - Create a new recording for transcription
  - **Get** - Get a recording by ID
  - **Get Many** - Get many recordings from a workspace

  #### Transcript Resource
  - **Get** - Get transcript for a recording in various formats (JSON, Plain Text, CSV, Word, SRT, VTT)

  #### Workspace Resource
  - **Get Many** - Get all workspaces accessible to your account

  ### Transcript.lol Trigger Node

  Listen for events from Transcript.lol:

  - **New Transcript** - Triggers when a transcript is completed for a recording
  - **Transcript Failed** - Triggers when a transcript fails to be created
  - **New Insights** - Triggers when new AI insights are generated for a recording
  - **Translation Created** - Triggers when a translation is completed for a recording

  ## Credentials

  This node uses OAuth2 with PKCE (Proof Key for Code Exchange) for secure authentication. No client secret is required — the integration uses a public client ID (`tlol_n8n_client`) and relies on PKCE's cryptographic code challenge/verifier exchange to secure the authorization flow.

  ### Setup

  1. In n8n, create new credentials for "Transcript.lol OAuth2 API"
  2. Click "Connect my account" — n8n will automatically handle the PKCE flow
  3. Sign in to your [Transcript.lol account](https://transcript.lol) and authorize the connection
  4. Once authorized, you can use the node in your workflows

  ### How It Works

  1. n8n generates a random `code_verifier` and derives a `code_challenge` (SHA-256 hash)
  2. The `code_challenge` is sent with the authorization request to Transcript.lol
  3. After you authorize, n8n sends the original `code_verifier` to the token endpoint
  4. Transcript.lol verifies that `SHA256(code_verifier)` matches the stored `code_challenge`
  5. On success, an access token (Bearer token) is issued and used for all API requests

  This approach eliminates the need for a shared client secret, making it safe for the credential configuration to be distributed as part of a community node.

  **Note:** You need to be on the Unlimited Plan to use the n8n integration.

  ## Compatibility

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

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Transcript.lol Documentation](https://transcript.lol/docs)
  - [Transcript.lol API Reference](https://transcript.lol/docs/api)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation for Transcript.lol, an AI-powered audio and video transcription service, allowing users to create recordings, retrieve transcripts, and listen for completion events.","capabilities":["Create new recordings for transcription","Retrieve a single recording by ID","Retrieve multiple recordings from a workspace","Get transcripts in multiple formats (JSON, Plain Text, CSV, Word, SRT, VTT)","List all accessible workspaces","Trigger on new transcript completion","Trigger on transcript failure","Trigger on new AI insights generation","Trigger on translation completion"],"authentication":"OAuth2 with PKCE (Proof Key for Code Exchange)","commonUseCases":["Automated meeting note generation from audio/video files","Workflow triggers for processing completed transcriptions","Batch processing of multiple recordings from a workspace","Integration with translation workflows for multilingual content"],"limitations":["Requires Transcript.lol Unlimited Plan subscription","Requires Node.js v22 or higher","Compatible only with n8n version 1.0.0 and above"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


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

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

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

npm_readme:
  # n8n-nodes-anny

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

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

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

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

  ## Installation

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

  ## Operations

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

  ## Credentials

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Version history

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the anny booking platform to manage bookings, customers, orders, invoices, and resources, while also handling webhooks for automated event responses.","capabilities":["Get and list bookings with filters","Cancel bookings","Check-in and check-out bookings","Create, retrieve, update, and delete customers","Manage orders, invoices, subscriptions, services, and resources","Retrieve availability for resource/service combinations","Execute arbitrary API calls to /api/* endpoints","Subscribe to webhooks for bookings, customers, orders, and invoices"],"authentication":"OAuth2 with preconfigured scopes; requires selecting a region (anny.co, anny.eu, staging, or local) and completing the OAuth flow","commonUseCases":["Automating booking confirmations and reminders","Syncing customer data between systems","Processing order and invoice updates","Monitoring booking status changes via webhooks"],"limitations":["Requires a current n8n release (tested with n8n 1.x)","Uses nodes API v1 via @n8n/node-cli 0.13.0","Generic API Call node required for unsupported endpoints"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest","n8n-nodes-base.oauth2"]}


node_type: @permitio/n8n-nodes-permitio.permit
package_name: @permitio/n8n-nodes-permitio
display_name: Permit
description: Interact with Permit.io authorization service
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: permit-dev-manager
author_github_url: https://github.com/permitio/n8n-nodes-permitio.git
npm_package_name: @permitio/n8n-nodes-permitio
npm_version: 0.2.3
community_fetched_at: 2026-04-16T09:43:36.125Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "check",
      "options": [
        {
          "name": "Check",
          "value": "check",
          "action": "Check permission",
          "description": "Check if user has permission"
        },
        {
          "name": "Get User Permissions",
          "value": "getUserPermissions",
          "action": "Get user permissions",
          "description": "Get all permissions for a user"
        },
        {
          "name": "Get Authorized Users",
          "value": "getAuthorizedUsers",
          "action": "Get authorized users",
          "description": "Get users authorized for an action"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "string",
      "default": "",
      "required": true,
      "description": "Resource to check access to",
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "operation": [
            "check"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Check",
      "value": "check",
      "action": "Check permission",
      "description": "Check if user has permission"
    },
    {
      "name": "Get User Permissions",
      "value": "getUserPermissions",
      "action": "Get user permissions",
      "description": "Get all permissions for a user"
    },
    {
      "name": "Get Authorized Users",
      "value": "getAuthorizedUsers",
      "action": "Get authorized users",
      "description": "Get users authorized for an action"
    }
  ]

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

  # n8n-nodes-permitio

  An n8n community node for integrating with [Permit.io](https://permit.io) authorization service.
  Permit is a fullstack, plug-and-play application-level authorization solution. This node allows you to check permissions, retrieve user permissions, and get authorized users directly within your n8n workflows.

  ![ABAC Expense Approval System](/assets/permit-n8n-workflow.png)

  ## Features

  - **Check Permissions**: Verify if a user has permission to perform a specific action on a resource
  - **Get User Permissions**: Retrieve all permissions for a specific user across tenants and resources
  - **Get Authorized Users**: Find all users authorized to perform a specific action on a resource type

  ## Installation

  **Install via n8n UI:**

  1. In your n8n workflow editor, click the "+" to add a new node
  2. Search for "Permit" in the node search box
  3. Click on the Permit node in the search results
  4. Click "Install node" button in the Node details panel
  5. Wait for installation to complete
  6. The Permit node will now be available in your workflow

  **Package name:** `@permitio/n8n-nodes-permitio`
  ![Installation Guide](./assets/permit-n8n-installation.gif)

  For alternative installation methods, 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 set up Permit.io API credentials in n8n.

  **Prerequisites:**

  - A [Permit.io account](https://app.permit.io)
  - Your Permit.io API key

  **Setting up credentials:**

  1. In n8n, go to the **Overview** tab in the left sidebar
  2. Click on the **Credentials** tab
  3. Click **"Add first credential"** (or **"Create credential"** if you have existing credentials)
  4. Search for **"Permit"** and select **"Permit API"**
  5. Fill in the required fields:
     - **API Key**: Your Permit.io API key (found in Permit.io dashboard under Settings → API Keys)
     - **PDP URL**: `https://cloudpdp.api.permit.io` (default for cloud PDP)

  **For ABAC and ReBAC policies:**

  - **Local PDP**: If running a self-hosted PDP container, you'll need to expose it publicly (e.g., using ngrok) and use that public URL
  - Example: `https://abc123.ngrok.io` instead of `http://localhost:7766`
  - This provides better performance and supports advanced policy types

  **Getting your API key:**

  1. Log into your [Permit.io dashboard](https://app.permit.io)
  2. Go to Settings → API Keys
  3. Copy your API key and paste it into the n8n credential configuration

  ![Credentials Workflow](./assets/credentials-workflow.gif)

  **Note:** Keep your API key secure and never share it publicly.

  ## Operations

  **Check**

  - Check if a user has permission to perform an action on a resource
  - Supports RBAC, ABAC, and ReBAC policies with automatic attribute extraction
  - Returns boolean permission result with detailed debug information

  _Configuration:_

  - **User:** `{{$node['Webhook'].json.body.employee_email}}`
  - **Action:** `submit`
  - **Resource:** `expense`
  - **Enable ABAC:** ✅ (automatically extracts `expense_amount`, `category`, etc.)

  _Response Sample:_

  ```json
  {
  	"allow": true,
  	"decision": "2024-01-15T10:30:00Z",
  	"debug": {
  		"reason": "User john.employee can submit expense within $2000 limit"
  	}
  }
  ```

  **Get User Permissions**

  - Get all permissions for a specific user
  - Filter by resource types
  - Optional ABAC support for dynamic permissions

  _Configuration:_

  - **User:** `john.employee`
  - **Resource Types:** `expense,document`
  - **Enable ABAC:** ✅

  _Response Sample:_

  ```json
  {
  	"permissions": [
  		{
  			"resource": "expense",
  			"action": "submit",
  			"allowed": true
  		}
  	]
  }
  ```

  **Get Authorized Users**

  - Find all users who can perform a specific action on a resource
  - Useful for approval workflows and delegation
  - Returns list of authorized users with their roles and permissions

  _Configuration:_

  - **Action:** `approve`
  - **Resource Type:** `expense`
  - **Resource Attributes:** `{"expense_amount": 1500, "category": "Travel"}`
  - **Enable ABAC:** ✅

  _Response Sample:_

  ```json
  [
  	{
  		"resource": "expense:*",
  		"tenant": "default",
  		"users": {
  			"taofeek2sure@gmail.com": [
  				{
  					"user": "taofeek2sure@gmail.com",
  					"tenant": "default",
  					"resource": "resourceset_all_5fexpenses",
  					"role": "userset_finance_5fteam"
  				}
  			]
  		}
  	}
  ]
  ```

  ## Basic Usage Example

  ![ABAC Expense Example](/assets/abac-expense-example.png)

  This example shows how to build an ABAC-powered expense approval workflow using the Permit node.

  **Scenario:** Employees submit expenses for approval. The system automatically determines if they can submit based on their spending limits, then routes to authorized approvers.

  **Workflow:**

  1. **Webhook** receives expense submission (`employee_email`, `expense_amount`, `category`)
  2. **Check Permission** with ABAC enabled - automatically extracts expense attributes
  3. **IF node** branches on approval/denial
  4. **TRUE path:** Get Authorized Users → Send Email to approver
  5. **FALSE path:** Return 403 error response

  **Result:**

  - Employee submitting $1500 (within $2000 limit) → Email sent to finance approver
  - Employee submitting $2500 (exceeds limit) → Access denied with detailed error

  This demonstrates how the Permit node enables complex authorization workflows with minimal configuration.

  ## Compatibility

  - **Minimum n8n version**: 1.0+
  - **Node.js**: 20.15+ required
  - **Tested with**: n8n 1.111.0

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Permit.io Documentation](https://docs.permit.io/)
  - [Permit.io API Reference](https://api.permit.io/v2/redoc)
  - [Getting Started with Permit.io](https://docs.permit.io/quickstart/)

  **Authorization Models:**

  - [ABAC Guide - Building Your First ABAC Policy](https://docs.permit.io/how-to/build-policies/abac/building-abac-policy/)
  - [ReBAC Guide - What is ReBAC?](https://docs.permit.io/how-to/build-policies/rebac/overview/)
  - [Create a ReBAC Policy](https://docs.permit.io/overview/create-a-rebac-policy/)

  **Infrastructure & Deployment:**

  - [Terraform Provider Guide](https://docs.permit.io/integrations/infra-as-code/terraform-provider/)
  - [Self-Deployed PDP for ABAC/ReBAC](https://docs.permit.io/concepts/pdp/overview/)
  - [Running Local PDP Container](https://docs.permit.io/overview/connecting-your-app/)

  **API Methods:**

  - [Permit.check() - Permission Checking](https://docs.permit.io/how-to/enforce-permissions/check/)
  - [Get User Permissions API](https://docs.permit.io/how-to/enforce-permissions/user-permissions/)
  - [Get Authorized Users API](https://docs.permit.io/how-to/enforce-permissions/authorized-users/)

  ## License

  [MIT](LICENSE.md)

  ## Contributing

  Contributions are welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository.

  ---

  Built with ❤️ for the n8n community

ai_documentation_summary:
  {"purpose":"A community n8n node that integrates with Permit.io to handle authorization checks, retrieve user permissions, and find authorized users for workflow automation.","capabilities":["Check if a user has permission to perform a specific action on a resource","Retrieve all permissions for a specific user across tenants and resources","Find all users authorized to perform a specific action on a resource type","Support for RBAC, ABAC, and ReBAC authorization policies","Automatic attribute extraction for ABAC policies","Detailed debug information in permission check responses"],"authentication":"API Key required (Permit.io API key)","commonUseCases":["Expense approval workflows with spending limits","Role-based access control (RBAC) enforcement","Attribute-based access control (ABAC) for dynamic permissions","Finding authorized approvers for delegation workflows","Access control for internal tools and applications"],"limitations":["Requires a Permit.io account with API credentials","Self-hosted PDP requires public exposure (e.g., ngrok) for cloud integration","Minimum n8n version 1.0+ required","Node.js 20.15+ runtime requirement"],"relatedNodes":["Webhook","IF","Email","Error Trigger"]}


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-04-16 09:43:36
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-04-16T09:43:36.125Z
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",
      "resource": "highlight"
    },
    {
      "name": "Get Many",
      "value": "getManyMeetings",
      "action": "Gets many meetings",
      "description": "Get list of meetings",
      "resource": "meeting"
    },
    {
      "name": "Get Meeting Details",
      "value": "getMeeting",
      "action": "Gets a meeting by ID",
      "description": "Get a meeting by ID",
      "resource": "meeting"
    },
    {
      "name": "Get Meeting Summary",
      "value": "getMeetingSummary",
      "action": "Gets meeting summary by ID",
      "description": "Get meeting summary by ID",
      "resource": "meeting"
    },
    {
      "name": "Upload",
      "value": "uploadRecording",
      "action": "Upload recording",
      "description": "Upload a recording for analysis",
      "resource": "recording"
    },
    {
      "name": "Get Many",
      "value": "getManyTeams",
      "action": "Get many teams",
      "description": "Get list of teams",
      "resource": "team"
    },
    {
      "name": "Get Team Meetings",
      "value": "getTeamMeetings",
      "action": "Gets team meetings",
      "resource": "team"
    },
    {
      "name": "Get Many",
      "value": "getManyTranscripts",
      "action": "Get many transcripts",
      "description": "Get list of transcripts for a meeting",
      "resource": "transcript"
    }
  ]

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: @custom-js/n8n-nodes-pdf-toolkit-v2.pdfToolkit
package_name: @custom-js/n8n-nodes-pdf-toolkit-v2
display_name: CustomJS (PDF & File Toolkit)
description: All-in-one toolkit for PDF, HTML, JSON, and file conversions.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: henriklippke
author_github_url: https://github.com/customjs/n8n-nodes-pdf-toolkit-v2.git
npm_package_name: @custom-js/n8n-nodes-pdf-toolkit-v2
npm_version: 0.9.0
community_fetched_at: 2026-04-16T09:43:36.126Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert",
          "value": "convert"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Web",
          "value": "web"
        },
        {
          "name": "Data",
          "value": "data"
        },
        {
          "name": "HTML Hosting",
          "value": "page"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "pdfToPng",
      "options": [
        {
          "name": "PDF to PNG",
          "value": "pdfToPng",
          "action": "Convert PDF to PNG"
        },
        {
          "name": "PDF to Text",
          "value": "pdfToText",
          "action": "Convert PDF to Text"
        },
        {
          "name": "HTML to DOCX",
          "value": "htmlToDocx",
          "action": "Convert HTML to DOCX"
        },
        {
          "name": "HTML to PDF",
          "value": "htmlToPdf",
          "action": "Convert HTML to PDF"
        },
        {
          "name": "JSON to TOON",
          "value": "jsonToToon",
          "action": "Convert JSON to TOON"
        },
        {
          "name": "TOON to JSON",
          "value": "toonToJson",
          "action": "Convert TOON to JSON"
        },
        {
          "name": "Markdown to HTML",
          "value": "markdownToHtml",
          "action": "Convert Markdown to HTML"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "convert"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "compress",
      "options": [
        {
          "name": "Compress",
          "value": "compress",
          "action": "Compress PDF"
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge PDFs"
        },
        {
          "name": "Extract Pages",
          "value": "extractPages",
          "action": "Extract Pages from PDF"
        },
        {
          "name": "Get Form Fields",
          "value": "getFormFields",
          "action": "Get PDF Form Fields"
        },
        {
          "name": "Fill Form",
          "value": "fillForm",
          "action": "Fill PDF Form"
        },
        {
          "name": "Generate Invoice",
          "value": "generateInvoice",
          "action": "Generate Invoice PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape Website"
        },
        {
          "name": "Screenshot",
          "value": "screenshot",
          "action": "Take Screenshot"
        },
        {
          "name": "SSL Check",
          "value": "sslCheck",
          "action": "Check SSL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "web"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "jsonSelect",
      "options": [
        {
          "name": "JSON Select",
          "value": "jsonSelect",
          "action": "Select JSON Data"
        },
        {
          "name": "Regex",
          "value": "regex",
          "action": "Regex Tool"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "data"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Get HTML Pages",
          "value": "getAll",
          "action": "Get HTML Pages"
        },
        {
          "name": "Host HTML Page",
          "value": "upload",
          "action": "Upload new HTML Page"
        },
        {
          "name": "Update HTML Page",
          "value": "update",
          "action": "Update existing HTML Page"
        },
        {
          "name": "Upsert HTML Page",
          "value": "upsert",
          "action": "Upsert HTML Page"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "PDF to PNG",
      "value": "pdfToPng",
      "action": "Convert PDF to PNG",
      "resource": "convert"
    },
    {
      "name": "PDF to Text",
      "value": "pdfToText",
      "action": "Convert PDF to Text",
      "resource": "convert"
    },
    {
      "name": "HTML to DOCX",
      "value": "htmlToDocx",
      "action": "Convert HTML to DOCX",
      "resource": "convert"
    },
    {
      "name": "HTML to PDF",
      "value": "htmlToPdf",
      "action": "Convert HTML to PDF",
      "resource": "convert"
    },
    {
      "name": "JSON to TOON",
      "value": "jsonToToon",
      "action": "Convert JSON to TOON",
      "resource": "convert"
    },
    {
      "name": "TOON to JSON",
      "value": "toonToJson",
      "action": "Convert TOON to JSON",
      "resource": "convert"
    },
    {
      "name": "Markdown to HTML",
      "value": "markdownToHtml",
      "action": "Convert Markdown to HTML",
      "resource": "convert"
    },
    {
      "name": "Compress",
      "value": "compress",
      "action": "Compress PDF",
      "resource": "pdf"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge PDFs",
      "resource": "pdf"
    },
    {
      "name": "Extract Pages",
      "value": "extractPages",
      "action": "Extract Pages from PDF",
      "resource": "pdf"
    },
    {
      "name": "Get Form Fields",
      "value": "getFormFields",
      "action": "Get PDF Form Fields",
      "resource": "pdf"
    },
    {
      "name": "Fill Form",
      "value": "fillForm",
      "action": "Fill PDF Form",
      "resource": "pdf"
    },
    {
      "name": "Generate Invoice",
      "value": "generateInvoice",
      "action": "Generate Invoice PDF",
      "resource": "pdf"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape Website",
      "resource": "web"
    },
    {
      "name": "Screenshot",
      "value": "screenshot",
      "action": "Take Screenshot",
      "resource": "web"
    },
    {
      "name": "SSL Check",
      "value": "sslCheck",
      "action": "Check SSL",
      "resource": "web"
    },
    {
      "name": "JSON Select",
      "value": "jsonSelect",
      "action": "Select JSON Data",
      "resource": "data"
    },
    {
      "name": "Regex",
      "value": "regex",
      "action": "Regex Tool",
      "resource": "data"
    },
    {
      "name": "Get HTML Pages",
      "value": "getAll",
      "action": "Get HTML Pages",
      "resource": "page"
    },
    {
      "name": "Host HTML Page",
      "value": "upload",
      "action": "Upload new HTML Page",
      "resource": "page"
    },
    {
      "name": "Update HTML Page",
      "value": "update",
      "action": "Update existing HTML Page",
      "resource": "page"
    },
    {
      "name": "Upsert HTML Page",
      "value": "upsert",
      "action": "Upsert HTML Page",
      "resource": "page"
    }
  ]

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

  # @custom-js/n8n-nodes-pdf-toolkit-v2

  This is an n8n community node. It lets interact with official API of [customJS API](https://www.customjs.space/)

  This package contains nodes to help you generate PDF from HTML, merge multiple PDF files, take a screenshot of specific website using URL, convert PDF to PNG, convert PDF to Text and extract pages from PDF.

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

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

  ## Installation

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

  Use the package at [here](https://www.npmjs.com/package/@custom-js/n8n-nodes-pdf-toolkit).

  ## Credentials

  Add your Api Key and store securely


  ## Usage

  ### "HTML to PDF" node

  - Add the HTML to PDF node to your workflow
  - Configure your CustomJS API credentials
  - Input your HTML content
  - Execute the workflow to generate PDF

  ### "Merge PDFs" node

  - Add the Merge PDFs node to your workflow
  - Configure your CustomJS API credentials
  - Input PDF files as an array with the same field name to merge.
  - If total size of files exceeds 6MB, pass it as an array of URL seperated by comma.
  - Execute the workflow to get merged PDF file.

  ### "Website Screenshot" node

  - Add the Website Screenshot node to your workflow
  - Configure your CustomJS API credentials
  - Input your URL of website to take screenshot
  - Execute the workflow to take a screenshot of that website

  ### "Compress PDF" node

  - Add the Compress PDF node to your workflow
  - Configure your CustomJS API credentials
  - Input Binary PDF file for compression to compress
  - If size of the binary file exceeds 6MB, pass it as URL.
  - Execute the workflow to get a compression of PDF file.

  ### "PDF To PNG" node

  - Add the PDF To PNG node to your workflow
  - Configure your CustomJS API credentials
  - Input Binary PDF file for conversion
  - If size of the binary file exceeds 6MB, pass it as URL.
  - Execute the workflow to get converted PNG file.

  ### "PDF To Text" node

  - Add the PDF To Text node to your workflow
  - Configure your CustomJS API credentials
  - Input Binary PDF file for conversion
  - If size of the binary file exceeds 6MB, pass it as URL.
  - Execute the workflow to get converted Text file.

  ### "Extract Pages From PDF" node

  - Add the Extract Pages From PDF node to your workflow
  - Configure your CustomJS API credentials
  - Input Binary PDF file for conversion
  - If size of the binary file exceeds 6MB, pass it as URL.
  - Execute the workflow to get converted Pages from PDF file.

  ### "SSL Checker" node

  - Add the **SSL Checker** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the domain you want to check (e.g., `example.com`).
  - Execute the workflow to get information about the SSL certificate, including the expiration date.

  ### "Scraper" node

  - Add the **Scraper** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the website URL you want to scrape (must start with `https://`).
  - Optionally, define user actions (click, type, wait) to interact with page elements using selectors.
  - Choose the return type:  
    - **Raw HTML**: Get the HTML content of the page.  
    - **Screenshot (PNG)**: Get a screenshot of the page.
  - Enable or disable debug mode to control error handling for missing elements.
  - Execute the workflow to scrape the website and receive the desired output.

  ### "Markdown to HTML" node

  - Add the **Markdown to HTML** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the Markdown content you want to convert to HTML.
  - Execute the workflow to get the converted HTML content.

  ### "HTML to Docx (Word)" node

  - Add the **HTML to Docx (Word)** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the HTML content you want to convert to Docx (Word).
  - Execute the workflow to get the converted Docx (Word) file.


  ### "PDF Form Fill" node

  - Add the **PDF Form Fill** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the PDF file you want to fill out.
  - Define the form fields and their values.
  - Execute the workflow to get the filled-out PDF file.

  ### "Get PDF Form Field Names" node

  - Add the **Get PDF Form Field Names** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input the PDF file you want to get form field names from.
  - Execute the workflow to get the form field names.

  ### "Invoice Generator" node

  - Add the **Invoice Generator** node to your workflow.
  - Configure your CustomJS API credentials.
  - Select a PDF template.
  - Fill in the issuer, payment, recipient, and billing information.
  - Add items to the invoice.
  - Execute the workflow to generate the PDF invoice.

  ### "JSON to TOON" node

  - Add the **JSON to TOON** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input your JSON data.
  - Execute the workflow to convert JSON to TOON format.
  - TOON format can reduce AI tokenization by 40% to 60% when working with language models.

  ### "TOON to JSON" node

  - Add the **TOON to JSON** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input your TOON data.
  - Execute the workflow to convert TOON to JSON format.

  ### Host HTML Page node

  - Add the **Host HTML Page** node to your workflow.
  - Configure your CustomJS API credentials.
  - Input your HTML content.
  - Execute the workflow to host the HTML page.
  - You can then access the hosted page via the provided URL.

ai_documentation_summary:
  {"purpose":"This n8n community node acts as an all-in-one toolkit for PDF manipulation, file conversions, website interactions, and document generation using the CustomJS API.","capabilities":["Convert HTML to PDF","Merge multiple PDF files","Take website screenshots","Convert PDF to PNG","Convert PDF to text","Extract pages from PDF","Compress PDF files","Check SSL certificate status","Scrape websites with optional user actions","Convert Markdown to HTML"],"authentication":"API Key required (CustomJS API credentials)","commonUseCases":["Automated document generation for invoices","Converting web content to PDF or image formats","Extracting text from scanned documents","Automating website scraping and data collection","Filling out digital forms programmatically"],"limitations":["Large files (exceeding 6MB) must be passed as URLs instead of binary files for most operations","Requires valid CustomJS API credentials","Community node status may indicate less official support compared to core n8n nodes"],"relatedNodes":["HTTP Request","Binary File","Code","Webhook"]}


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-04-16 09:43:36
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-04-16T09:43:36.127Z
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: n8n-nodes-realm.realm
package_name: n8n-nodes-realm
display_name: Realm
description: Interact with the Realm API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: anthonybrebion
author_github_url: https://github.com/abrebion/
npm_package_name: n8n-nodes-realm
npm_version: 0.1.3
community_fetched_at: 2026-04-16T09:43:36.128Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        },
        {
          "name": "Assistant",
          "value": "assistant"
        },
        {
          "name": "Connector",
          "value": "connector"
        },
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get chats",
          "routing": {
            "request": {
              "url": "=/chats",
              "method": "GET"
            }
          },
          "description": "Get many chat conversations"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a chat",
          "routing": {
            "request": {
              "url": "=/chats/{{$parameter.chatId}}",
              "method": "GET"
            }
          },
          "description": "Get a single chat conversation"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a chat",
          "routing": {
            "request": {
              "url": "=/chats/{{$parameter.chatId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a chat"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Start a chat",
          "routing": {
            "request": {
              "url": "={{$parameter[\"additionalFields\"]?.streamResponse ? \"/chats-streaming\" : \"/chats\"}}",
              "method": "POST"
            }
          },
          "description": "Start a new chat or continue an existing one"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get assistants",
          "routing": {
            "request": {
              "url": "/assistants",
              "method": "GET"
            }
          },
          "description": "Get assistants"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assistant"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get connectors",
          "routing": {
            "request": {
              "url": "/connectors",
              "method": "GET"
            }
          },
          "description": "Get connectors"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connector"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create or Update",
          "value": "createOrUpdate",
          "action": "Create or update documents",
          "routing": {
            "request": {
              "url": "=/documents/{{$parameter.connectorId}}",
              "method": "POST"
            }
          },
          "description": "Create or update documents for a connector"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "routing": {
            "request": {
              "url": "=/documents/{{$parameter.connectorId}}/{{$parameter.documentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a document"
        },
        {
          "name": "Delete Old Documents",
          "value": "deleteOldDocuments",
          "action": "Delete documents older than a specified timestamp",
          "routing": {
            "request": {
              "qs": {
                "older_than": "={{$parameter.olderThan + \"Z\"}}"
              },
              "url": "=/documents/{{$parameter.connectorId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete documents older than a specified timestamp"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document",
          "routing": {
            "request": {
              "qs": {
                "fields": "={{$parameter.fieldsToInclude}}"
              },
              "url": "=/documents/{{$parameter.connectorId}}/{{$parameter.documentId}}",
              "method": "GET",
              "arrayFormat": "repeat"
            }
          },
          "description": "Get a single document"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get documents",
          "routing": {
            "request": {
              "qs": {
                "fields": "={{$parameter.fieldsToInclude}}"
              },
              "url": "=/documents/{{$parameter.connectorId}}/",
              "method": "GET",
              "arrayFormat": "repeat"
            }
          },
          "description": "Get documents for a connector"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get chats",
      "routing": {
        "request": {
          "url": "=/chats",
          "method": "GET"
        }
      },
      "description": "Get many chat conversations",
      "resource": "chat"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a chat",
      "routing": {
        "request": {
          "url": "=/chats/{{$parameter.chatId}}",
          "method": "GET"
        }
      },
      "description": "Get a single chat conversation",
      "resource": "chat"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a chat",
      "routing": {
        "request": {
          "url": "=/chats/{{$parameter.chatId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a chat",
      "resource": "chat"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Start a chat",
      "routing": {
        "request": {
          "url": "={{$parameter[\"additionalFields\"]?.streamResponse ? \"/chats-streaming\" : \"/chats\"}}",
          "method": "POST"
        }
      },
      "description": "Start a new chat or continue an existing one",
      "resource": "chat"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get assistants",
      "routing": {
        "request": {
          "url": "/assistants",
          "method": "GET"
        }
      },
      "description": "Get assistants",
      "resource": "assistant"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get connectors",
      "routing": {
        "request": {
          "url": "/connectors",
          "method": "GET"
        }
      },
      "description": "Get connectors",
      "resource": "connector"
    },
    {
      "name": "Create or Update",
      "value": "createOrUpdate",
      "action": "Create or update documents",
      "routing": {
        "request": {
          "url": "=/documents/{{$parameter.connectorId}}",
          "method": "POST"
        }
      },
      "description": "Create or update documents for a connector",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "routing": {
        "request": {
          "url": "=/documents/{{$parameter.connectorId}}/{{$parameter.documentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Delete Old Documents",
      "value": "deleteOldDocuments",
      "action": "Delete documents older than a specified timestamp",
      "routing": {
        "request": {
          "qs": {
            "older_than": "={{$parameter.olderThan + \"Z\"}}"
          },
          "url": "=/documents/{{$parameter.connectorId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete documents older than a specified timestamp",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document",
      "routing": {
        "request": {
          "qs": {
            "fields": "={{$parameter.fieldsToInclude}}"
          },
          "url": "=/documents/{{$parameter.connectorId}}/{{$parameter.documentId}}",
          "method": "GET",
          "arrayFormat": "repeat"
        }
      },
      "description": "Get a single document",
      "resource": "document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get documents",
      "routing": {
        "request": {
          "qs": {
            "fields": "={{$parameter.fieldsToInclude}}"
          },
          "url": "=/documents/{{$parameter.connectorId}}/",
          "method": "GET",
          "arrayFormat": "repeat"
        }
      },
      "description": "Get documents for a connector",
      "resource": "document"
    }
  ]

npm_readme:
  # n8n-nodes-realm

  This is an n8n community node. It lets you consume Realm API in your n8n workflows.

  Realm is an AI-powered enterprise search engine that unifies your knowledge bases (Google Drive, Slack, Jira, Confluence, Salesforce, Gong, etc.) and makes them accessible to custom AI assistants.

  With the Realm API, you can programmatically add, edit, and delete documents for custom connectors (non-native knowledge data sources) and interact with Realm assistants.

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

  ## Operations

  This node supports the following resources/operations:

  * Create or continue a chat conversation
  * Get a single chat conversation
  * Get many chat conversations
  * Delete a chat conversation
  * Get all asssistants
  * Get all connectors
  * Create or update documents in a connector
  * Get all documents from a connector
  * Get a specific document from a connector
  * Delete a specific document from a connector
  * Delete documents from a connector older than a specified timestamp

  ## Credentials

  * From the Realm app, create an API key and give it access to assistants.
  * In n8n, create a new Realm credential. Enter your API base url (e.g. https://your-account.withrealm.com/api/external/alpha) and the API key you've just created.

  ## Usage

  In your Workflow, find the Realm node and use as you need. I accept comments and suggestions in Issues repository on GitHub.

  ## Compatibility

  Tested against n8n version 1.117.3+

  ## Resources

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Realm API to manage AI-powered enterprise search, including chat conversations and document operations across various knowledge bases.","capabilities":["Create or continue a chat conversation","Retrieve single, multiple, or specific chat conversations","Delete chat conversations","List all available assistants","List all available connectors","Create or update documents in custom connectors","Retrieve all documents from a connector","Retrieve a specific document from a connector","Delete specific documents from a connector","Delete documents older than a specified timestamp"],"authentication":"API key required","commonUseCases":["Integrating custom data sources into an AI knowledge base","Managing chat history and conversations programmatically","Automating document indexing and retrieval from external systems","Cleaning up old documents from connectors"],"limitations":["Requires manual setup of Realm API key and base URL in n8n credentials","Limited to operations supported by the Realm API (no custom logic beyond API calls)","Community node status may imply less official support or updates"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-github","n8n-nodes-slack","n8n-nodes-gdrive"]}


node_type: n8n-nodes-hedy.hedy
package_name: n8n-nodes-hedy
display_name: Hedy
description: Interact with Hedy API to retrieve meeting intelligence data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  {
  "type": "main"
  }
  ]

updated_at: 2026-04-16 09:43:36
author_name: julian-hedy
author_github_url: https://github.com/HedyAI/
npm_package_name: n8n-nodes-hedy
npm_version: 1.2.1
community_fetched_at: 2026-04-16T09:43:36.129Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "session",
      "options": [
        {
          "name": "Context",
          "value": "context",
          "description": "Session context operations for AI instructions"
        },
        {
          "name": "Highlight",
          "value": "highlight",
          "description": "Meeting highlight operations"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Meeting session operations"
        },
        {
          "name": "Todo",
          "value": "todo",
          "description": "Todo item operations"
        },
        {
          "name": "Topic",
          "value": "topic",
          "description": "Topic operations for organizing sessions"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a session context",
          "description": "Create a new session context"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a session context",
          "description": "Delete a session context"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session context",
          "description": "Get a specific session context by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many session contexts",
          "description": "Get all session contexts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a session context",
          "description": "Update a session context"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "context"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session",
          "description": "Get a specific session by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sessions",
          "description": "Get multiple sessions"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a highlight",
          "description": "Get a specific highlight by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many highlights",
          "description": "Get multiple highlights"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "highlight"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many todos",
          "description": "Get all todos"
        },
        {
          "name": "Get by Session",
          "value": "getBySession",
          "action": "Get todos by session",
          "description": "Get todos for a specific session"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "todo"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a topic",
          "description": "Get a specific topic by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many topics",
          "description": "Get all topics"
        },
        {
          "name": "Get Topic Sessions",
          "value": "getSessions",
          "action": "Get sessions by topic",
          "description": "Get all sessions for a specific topic"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "topic"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a session context",
      "description": "Create a new session context",
      "resource": "context"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a session context",
      "description": "Delete a session context",
      "resource": "context"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session context",
      "description": "Get a specific session context by ID",
      "resource": "context"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many session contexts",
      "description": "Get all session contexts",
      "resource": "context"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a session context",
      "description": "Update a session context",
      "resource": "context"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session",
      "description": "Get a specific session by ID",
      "resource": "session"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sessions",
      "description": "Get multiple sessions",
      "resource": "session"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a highlight",
      "description": "Get a specific highlight by ID",
      "resource": "highlight"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many highlights",
      "description": "Get multiple highlights",
      "resource": "highlight"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many todos",
      "description": "Get all todos",
      "resource": "todo"
    },
    {
      "name": "Get by Session",
      "value": "getBySession",
      "action": "Get todos by session",
      "description": "Get todos for a specific session",
      "resource": "todo"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a topic",
      "description": "Get a specific topic by ID",
      "resource": "topic"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many topics",
      "description": "Get all topics",
      "resource": "topic"
    },
    {
      "name": "Get Topic Sessions",
      "value": "getSessions",
      "action": "Get sessions by topic",
      "description": "Get all sessions for a specific topic",
      "resource": "topic"
    }
  ]

npm_readme:
  # n8n-nodes-hedy

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

  This is an n8n community node that lets you integrate [Hedy](https://hedy.bot) - your AI-powered meeting intelligence assistant - into your n8n workflows.

  Hedy helps you be the brightest person in the room by providing real-time transcription, meeting summaries, action items, and intelligent insights from your meetings.

  [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. Search for `n8n-nodes-hedy`
  3. Click **Install**

  ### Manual Installation

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

  # Install the package
  npm install n8n-nodes-hedy
  ```

  ### Docker Installation

  Add the following to your docker-compose.yml:

  ```yaml
  n8n:
    image: n8nio/n8n
    environment:
      - N8N_CUSTOM_EXTENSIONS=n8n-nodes-hedy
  ```

  ## 🔑 Authentication

  1. Get your API key from [Hedy Dashboard](https://app.hedy.bot):
     - Navigate to Settings → API
     - Click "Generate New Key"
     - Copy the key (starts with `hedy_live_`)

  2. In n8n:
     - Go to Credentials
     - Create new "Hedy" credential
     - Paste your API key
     - Select your **Region** (US or EU) if your account uses EU data residency
     - Click "Save"

  ## 📦 Nodes Included

  ### Hedy Trigger
  Receives real-time webhook notifications when events occur in Hedy:

  - **Session Created** - When a new meeting session starts
  - **Session Ended** - When a meeting session completes
  - **Session Exported** - When a user manually exports a session
  - **Highlight Created** - When a highlight is created during a meeting
  - **Todo Exported** - When a todo item is exported

  ### Hedy
  Performs actions and retrieves data from Hedy:

  - **Sessions**
    - Get Session - Retrieve detailed session information
    - Get Many Sessions - List multiple sessions with pagination
    
  - **Highlights**
    - Get Highlight - Retrieve specific highlight details
    - Get Many Highlights - List multiple highlights
    - Get by Session - Get all highlights for a specific session

  - **Todos**
    - Get Todo - Retrieve a specific todo by ID
    - Get Many Todos - List all todo items
    - Get Todos by Session - Get todos for a specific session

  - **Topics**
    - Create Topic - Create a new topic
    - Get Topic - Retrieve a specific topic
    - Get Many Topics - List all topics
    - Get Topic Sessions - Get sessions for a topic
    - Update Topic - Modify a topic
    - Delete Topic - Remove a topic

  - **Contexts**
    - Create, Get, Get Many, Update, Delete session contexts

  ## 🎯 Example Workflows

  ### 1. Meeting Summary to Slack
  Send meeting summaries to Slack when sessions end:

  ```
  [Hedy Trigger: Session Ended]
      → [Hedy: Get Session Details]
      → [Slack: Send Message]
  ```

  ### 2. Highlight Collection to Notion
  Save important highlights to a Notion database:

  ```
  [Hedy Trigger: Highlight Created]
      → [Hedy: Get Highlight Details]
      → [Notion: Create Database Entry]
  ```

  ### 3. Todo Export to Project Management
  Export todos to your project management tool:

  ```
  [Hedy Trigger: Todo Exported]
      → [Jira/Trello/Asana: Create Task]
  ```

  ### 4. Daily Meeting Report
  Generate daily meeting reports:

  ```
  [Schedule Trigger: Daily at 5 PM]
      → [Hedy: Get Many Sessions (today)]
      → [Transform: Format Report]
      → [Email: Send Report]
  ```

  ## 📊 Data Structures

  ### Session Object
  ```json
  {
    "sessionId": "sess_abc123",
    "title": "Team Standup",
    "startTime": "2024-01-10T10:00:00Z",
    "endTime": "2024-01-10T10:30:00Z",
    "duration": 1800,
    "session_type": "meeting",
    "transcript": "Full transcript...",
    "cleaned_transcript": "AI-cleaned transcript...",
    "cleaned_at": "2024-01-10T11:00:00Z",
    "conversations": [...],
    "meeting_minutes": "Meeting notes...",
    "recap": "Summary...",
    "session_notes": "[{\"insert\":\"Key takeaway\\n\"}]",
    "user_todos": [...],
    "highlights": [...],
    "topic": {...}
  }
  ```

  > **Note:** `cleaned_transcript` and `cleaned_at` are `null` when the transcript has not yet been cleaned. `session_notes` contains rich text in Parchment JSON (Delta) format.

  ### Highlight Object
  ```json
  {
    "highlightId": "high_xyz789",
    "sessionId": "sess_abc123",
    "timestamp": "2024-01-10T10:15:00Z",
    "timeIndex": 900000,
    "title": "Key Decision",
    "rawQuote": "Original quote...",
    "cleanedQuote": "Cleaned quote...",
    "mainIdea": "Core concept...",
    "aiInsight": "Analysis..."
  }
  ```

  > **Note:** The list endpoint (`Get Many`) returns summary fields only (`highlightId`, `sessionId`, `timestamp`, `title`). The detail endpoint (`Get`) returns all fields.

  ### Todo Object
  ```json
  {
    "id": "todo_123",
    "sessionId": "sess_abc123",
    "text": "Follow up with marketing team",
    "dueDate": "2024-01-15",
    "completed": false,
    "topic": {...}
  }
  ```

  ## ⚙️ Configuration

  ### Webhook Limits
  - Maximum of 50 webhooks per Hedy account
  - Webhooks must use HTTPS URLs
  - Each webhook receives a unique signing secret for security

  ### Pagination
  - Default page size: 50 items
  - Maximum page size: 100 items
  - Supports cursor-based pagination for large datasets

  ### Rate Limiting
  The API follows standard rate limiting practices. If you encounter rate limit errors, implement exponential backoff in your workflows.

  ## 🔒 Security

  ### Webhook Signature Verification
  All webhooks include an `X-Hedy-Signature` header for verification:

  1. The signature is an HMAC SHA-256 hash of the request body
  2. Each webhook has a unique signing secret
  3. Signature verification is disabled by default (enable in Options when signing secrets are available)

  ### API Key Security
  - Never share your API key publicly
  - Rotate keys regularly (every 90 days recommended)
  - Use n8n's built-in credential encryption
  - Keys can be revoked instantly from the Hedy dashboard

  ## 🐛 Troubleshooting

  ### Common Issues

  **Webhook Registration Fails**
  - Ensure your n8n instance uses HTTPS
  - Check you haven't exceeded the 50 webhook limit
  - Verify your API key has the necessary permissions

  **No Data Returned**
  - Verify the resource ID exists
  - Check your API key is valid
  - Ensure you have access to the requested resource

  **Signature Verification Fails**
  - Don't modify webhook payloads
  - Ensure signature verification is using the correct secret
  - Check for clock skew between servers

  ## 📚 Resources

  - [Hedy Website](https://hedy.bot)
  - [Hedy API Documentation](https://api.hedy.bot/docs)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Forum](https://community.n8n.io)

  ## 💬 Support

  - **Hedy Support**: support@hedy.bot
  - **API Issues**: api@hedy.bot
  - **n8n Node Issues**: [GitHub Issues](https://github.com/HedyAI/n8n-nodes-hedy/issues)

  ## 🤝 Contributing

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

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

  ## 📄 License

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

  ## 🙏 Acknowledgments

  - Thanks to the n8n team for their excellent workflow automation platform
  - Thanks to the Hedy team for providing comprehensive API documentation
  - Thanks to all contributors and users of this node

  ## 📈 Version History

  See [CHANGELOG.md](CHANGELOG.md) for a list of changes in each version.

  ---

  Made with ❤️ by the Hedy team

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Hedy, an AI-powered meeting intelligence assistant, to retrieve meeting data such as transcripts, summaries, action items, and highlights.","capabilities":["Webhook Trigger for real-time event notifications (Session Created, Session Ended, Highlight Created, Todo Exported)","Retrieve single session details","List multiple sessions with pagination","Retrieve single highlight details","List multiple highlights with pagination","List all todo items","Retrieve todos for a specific session"],"authentication":"API key required (Hedy Dashboard API key)","commonUseCases":["Automated meeting summary delivery to Slack or email","Storing meeting highlights in Notion or other databases","Exporting meeting action items to project management tools (Jira, Trello, Asana)","Generating daily meeting reports"],"limitations":["Maximum of 10 webhooks per Hedy account","Webhooks must use HTTPS URLs","Webhook signature verification is enabled by default and requires correct secret configuration","API follows standard rate limiting practices","Webhook registration fails if n8n instance does not use HTTPS"],"relatedNodes":["Webhook Trigger","Slack","Notion","Jira","Trello"]}


node_type: n8n-nodes-peek-pro.peekPro
package_name: n8n-nodes-peek-pro
display_name: Peek Pro
description: Build workflows with Peek Pro
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: peektravel
author_github_url: https://github.com/peek-travel/
npm_package_name: n8n-nodes-peek-pro
npm_version: 0.2.2
community_fetched_at: 2026-04-16T09:43:36.130Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "booking",
      "options": [
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Timeslot",
          "value": "timeslot"
        },
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Reseller",
          "value": "reseller"
        },
        {
          "name": "Promo Code",
          "value": "promoCode"
        },
        {
          "name": "Daily Note",
          "value": "dailyNote"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get: current account",
      "options": [
        {
          "name": "Get Current",
          "value": "get: current account",
          "action": "Get the current account information",
          "routing": {
            "request": {
              "url": "/accounts/current",
              "method": "GET"
            }
          },
          "description": "Get the current account information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll: users",
      "options": [
        {
          "name": "Get All",
          "value": "getAll: users",
          "action": "Get all users",
          "routing": {
            "request": {
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "Get all users"
        },
        {
          "name": "Get One",
          "value": "get: user",
          "action": "Get the data of a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany: bookings (dates)",
      "options": [
        {
          "name": "Get All for Time Range",
          "value": "getMany: bookings (dates)",
          "action": "Get bookings within time range",
          "routing": {
            "request": {
              "qs": {
                "end": "={{$parameter[\"endTime\"]}}",
                "email": "={{$parameter[\"email\"]}}",
                "start": "={{$parameter[\"startTime\"]}}",
                "searchBy": "={{$parameter[\"searchBy\"]}}",
                "productId": "={{$parameter[\"productId\"]}}",
                "searchString": "={{$parameter[\"searchString\"]}}",
                "includeGuests": "={{$parameter[\"includeGuests\"]}}"
              },
              "url": "/bookings",
              "method": "GET"
            }
          },
          "description": "Get all bookings for a given time range"
        },
        {
          "name": "Get All for Timeslot",
          "value": "getMany: bookings (timeslot)",
          "action": "Get bookings for a timeslot",
          "routing": {
            "request": {
              "qs": {
                "timeslotId": "={{$parameter[\"timeslotId\"]}}",
                "includeGuests": "={{$parameter[\"includeGuests\"]}}"
              },
              "url": "/bookings",
              "method": "GET"
            }
          },
          "description": "Get all bookings for a given timeslot"
        },
        {
          "name": "Get One",
          "value": "get: booking",
          "action": "Get one booking",
          "routing": {
            "request": {
              "qs": {
                "includeGuests": "={{$parameter[\"includeGuests\"]}}"
              },
              "url": "=/bookings/{{$parameter.bookingId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single booking"
        },
        {
          "name": "Add Note",
          "value": "set: booking notes",
          "action": "Append a note to the booking notes",
          "routing": {
            "request": {
              "url": "=/bookings/{{$parameter.bookingId}}/notes",
              "body": {
                "note": "={{$parameter[\"note\"]}}",
                "appendOrOverwrite": "={{$parameter[\"appendOrOverwrite\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Append a note to the booking notes"
        },
        {
          "name": "Update Checkin Status",
          "value": "set: booking checkin",
          "action": "Update the checkin status of a booking",
          "routing": {
            "request": {
              "url": "=/bookings/{{$parameter.bookingId}}/checkin",
              "body": {
                "checkedIn": "={{$parameter[\"checkedIn\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Update the checkin status of a single booking"
        },
        {
          "name": "Cancel Booking",
          "value": "cancel: booking",
          "action": "Cancel a booking",
          "routing": {
            "request": {
              "url": "=/bookings/{{$parameter.bookingId}}/cancel",
              "method": "POST"
            }
          },
          "description": "Cancel a booking"
        },
        {
          "name": "Create Booking",
          "value": "create: booking",
          "action": "Create a new booking",
          "routing": {
            "request": {
              "url": "=/bookings/create",
              "body": {
                "end": "={{$parameter[\"end\"]}}",
                "date": "={{$parameter[\"date\"]}}",
                "email": "={{$parameter[\"email\"]}}",
                "notes": "={{$parameter[\"notes\"]}}",
                "phone": "={{$parameter[\"phone\"]}}",
                "start": "={{$parameter[\"start\"]}}",
                "country": "={{$parameter[\"country\"]}}",
                "product": "={{$parameter[\"product\"]}}",
                "tickets": "={{$parameter[\"tickets\"]}}",
                "optinSms": "={{$parameter[\"optinSms\"]}}",
                "externalId": "={{$parameter[\"externalId\"]}}",
                "postalCode": "={{$parameter[\"postalCode\"]}}",
                "customerName": "={{$parameter[\"customerName\"]}}",
                "optinMarketing": "={{$parameter[\"optinMarketing\"]}}",
                "shouldSendEmails": "={{$parameter[\"shouldSendEmails\"]}}",
                "markBookingAsPaid": "={{$parameter[\"markBookingAsPaid\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a new booking"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany: timeslots",
      "options": [
        {
          "name": "Get All for Date",
          "value": "getMany: timeslots",
          "action": "Get all timeslots on a date",
          "routing": {
            "request": {
              "qs": {
                "date": "={{$parameter[\"date\"]}}",
                "productId": "={{$parameter[\"productId\"]}}",
                "filterBookings": "={{$parameter[\"filterBookings\"]}}"
              },
              "url": "/timeslots",
              "method": "GET"
            }
          },
          "description": "Get all timeslots for a date and product"
        },
        {
          "name": "Get One",
          "value": "get: timeslot",
          "action": "Get a timeslot",
          "routing": {
            "request": {
              "url": "=/timeslots/{{$parameter.timeslotId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single timeslot"
        },
        {
          "name": "Set Availability Status",
          "value": "set: timeslot availability",
          "action": "Set timeslot availability",
          "routing": {
            "request": {
              "url": "=/timeslots/{{$parameter.timeslotId}}",
              "body": {
                "status": "={{$parameter[\"status\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Update the availability of a timeslot"
        },
        {
          "name": "Set Notes",
          "value": "set: timeslot notes",
          "action": "Update the notes of a timeslot",
          "routing": {
            "request": {
              "url": "=/timeslots/{{$parameter.timeslotId}}",
              "body": {
                "note": "={{$parameter[\"note\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Update the notes of a timeslot"
        },
        {
          "name": "Set Guide or Resource",
          "value": "set: timeslot guide",
          "action": "Set a guide to a timeslot",
          "routing": {
            "request": {
              "url": "=/timeslots/guideAssign",
              "body": {
                "guideIds": "={{$parameter[\"guideOrResourceIds\"].map(e => $evaluateExpression(e)).map(s => s.replace(/^=/, \"\")) }}",
                "timeslotIds": "={{$parameter[\"timeslotIds\"].map(e => $evaluateExpression(e)).map(s => s.replace(/^=/, \"\")) }}",
                "assignOrUnassign": "={{$parameter[\"assignOrUnassign\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Set a guide to a timeslot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timeslot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll: products",
      "options": [
        {
          "name": "Get All",
          "value": "getAll: products",
          "action": "Get all products",
          "routing": {
            "request": {
              "url": "/products",
              "method": "GET"
            }
          },
          "description": "Get all products"
        },
        {
          "name": "Get One",
          "value": "get: product",
          "action": "Get the data of a product",
          "routing": {
            "request": {
              "url": "=/products/{{$parameter.productId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll: promoCode",
      "options": [
        {
          "name": "Get All",
          "value": "getAll: promoCode",
          "action": "Get all promo codes",
          "routing": {
            "request": {
              "url": "/promocode",
              "method": "GET"
            }
          },
          "description": "Get all promo codes"
        },
        {
          "name": "Create Promo Code",
          "value": "create: promoCode",
          "action": "Create a new promo code",
          "routing": {
            "request": {
              "url": "=/promocode/create",
              "body": {
                "code": "={{$parameter[\"code\"]}}",
                "name": "={{$parameter[\"name\"]}}",
                "amount": "={{$parameter[\"amount\"]}}",
                "currency": "={{$parameter[\"currency\"]}}",
                "discountType": "={{$parameter[\"discountType\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a new promo code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "promoCode"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get: daily note",
      "options": [
        {
          "name": "Get Today's Daily Note",
          "value": "get: daily note",
          "action": "Get daily note for today",
          "routing": {
            "request": {
              "url": "/dailyNote/today",
              "method": "GET"
            }
          }
        },
        {
          "name": "Update Today's Daily Note",
          "value": "set: daily note",
          "action": "Update daily note for today",
          "routing": {
            "request": {
              "url": "/dailyNote/today",
              "body": {
                "note": "={{$parameter[\"note\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dailyNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll: reseller",
      "options": [
        {
          "name": "Get All",
          "value": "getAll: reseller",
          "action": "Get all resellers",
          "routing": {
            "request": {
              "url": "/reseller",
              "method": "GET"
            }
          },
          "description": "Get all resellers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reseller"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Current",
      "value": "get: current account",
      "action": "Get the current account information",
      "routing": {
        "request": {
          "url": "/accounts/current",
          "method": "GET"
        }
      },
      "description": "Get the current account information",
      "resource": "account"
    },
    {
      "name": "Get All",
      "value": "getAll: users",
      "action": "Get all users",
      "routing": {
        "request": {
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "Get all users",
      "resource": "user"
    },
    {
      "name": "Get One",
      "value": "get: user",
      "action": "Get the data of a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single user",
      "resource": "user"
    },
    {
      "name": "Get All for Time Range",
      "value": "getMany: bookings (dates)",
      "action": "Get bookings within time range",
      "routing": {
        "request": {
          "qs": {
            "end": "={{$parameter[\"endTime\"]}}",
            "email": "={{$parameter[\"email\"]}}",
            "start": "={{$parameter[\"startTime\"]}}",
            "searchBy": "={{$parameter[\"searchBy\"]}}",
            "productId": "={{$parameter[\"productId\"]}}",
            "searchString": "={{$parameter[\"searchString\"]}}",
            "includeGuests": "={{$parameter[\"includeGuests\"]}}"
          },
          "url": "/bookings",
          "method": "GET"
        }
      },
      "description": "Get all bookings for a given time range",
      "resource": "booking"
    },
    {
      "name": "Get All for Timeslot",
      "value": "getMany: bookings (timeslot)",
      "action": "Get bookings for a timeslot",
      "routing": {
        "request": {
          "qs": {
            "timeslotId": "={{$parameter[\"timeslotId\"]}}",
            "includeGuests": "={{$parameter[\"includeGuests\"]}}"
          },
          "url": "/bookings",
          "method": "GET"
        }
      },
      "description": "Get all bookings for a given timeslot",
      "resource": "booking"
    },
    {
      "name": "Get One",
      "value": "get: booking",
      "action": "Get one booking",
      "routing": {
        "request": {
          "qs": {
            "includeGuests": "={{$parameter[\"includeGuests\"]}}"
          },
          "url": "=/bookings/{{$parameter.bookingId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single booking",
      "resource": "booking"
    },
    {
      "name": "Add Note",
      "value": "set: booking notes",
      "action": "Append a note to the booking notes",
      "routing": {
        "request": {
          "url": "=/bookings/{{$parameter.bookingId}}/notes",
          "body": {
            "note": "={{$parameter[\"note\"]}}",
            "appendOrOverwrite": "={{$parameter[\"appendOrOverwrite\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Append a note to the booking notes",
      "resource": "booking"
    },
    {
      "name": "Update Checkin Status",
      "value": "set: booking checkin",
      "action": "Update the checkin status of a booking",
      "routing": {
        "request": {
          "url": "=/bookings/{{$parameter.bookingId}}/checkin",
          "body": {
            "checkedIn": "={{$parameter[\"checkedIn\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Update the checkin status of a single booking",
      "resource": "booking"
    },
    {
      "name": "Cancel Booking",
      "value": "cancel: booking",
      "action": "Cancel a booking",
      "routing": {
        "request": {
          "url": "=/bookings/{{$parameter.bookingId}}/cancel",
          "method": "POST"
        }
      },
      "description": "Cancel a booking",
      "resource": "booking"
    },
    {
      "name": "Create Booking",
      "value": "create: booking",
      "action": "Create a new booking",
      "routing": {
        "request": {
          "url": "=/bookings/create",
          "body": {
            "end": "={{$parameter[\"end\"]}}",
            "date": "={{$parameter[\"date\"]}}",
            "email": "={{$parameter[\"email\"]}}",
            "notes": "={{$parameter[\"notes\"]}}",
            "phone": "={{$parameter[\"phone\"]}}",
            "start": "={{$parameter[\"start\"]}}",
            "country": "={{$parameter[\"country\"]}}",
            "product": "={{$parameter[\"product\"]}}",
            "tickets": "={{$parameter[\"tickets\"]}}",
            "optinSms": "={{$parameter[\"optinSms\"]}}",
            "externalId": "={{$parameter[\"externalId\"]}}",
            "postalCode": "={{$parameter[\"postalCode\"]}}",
            "customerName": "={{$parameter[\"customerName\"]}}",
            "optinMarketing": "={{$parameter[\"optinMarketing\"]}}",
            "shouldSendEmails": "={{$parameter[\"shouldSendEmails\"]}}",
            "markBookingAsPaid": "={{$parameter[\"markBookingAsPaid\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a new booking",
      "resource": "booking"
    },
    {
      "name": "Get All for Date",
      "value": "getMany: timeslots",
      "action": "Get all timeslots on a date",
      "routing": {
        "request": {
          "qs": {
            "date": "={{$parameter[\"date\"]}}",
            "productId": "={{$parameter[\"productId\"]}}",
            "filterBookings": "={{$parameter[\"filterBookings\"]}}"
          },
          "url": "/timeslots",
          "method": "GET"
        }
      },
      "description": "Get all timeslots for a date and product",
      "resource": "timeslot"
    },
    {
      "name": "Get One",
      "value": "get: timeslot",
      "action": "Get a timeslot",
      "routing": {
        "request": {
          "url": "=/timeslots/{{$parameter.timeslotId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single timeslot",
      "resource": "timeslot"
    },
    {
      "name": "Set Availability Status",
      "value": "set: timeslot availability",
      "action": "Set timeslot availability",
      "routing": {
        "request": {
          "url": "=/timeslots/{{$parameter.timeslotId}}",
          "body": {
            "status": "={{$parameter[\"status\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Update the availability of a timeslot",
      "resource": "timeslot"
    },
    {
      "name": "Set Notes",
      "value": "set: timeslot notes",
      "action": "Update the notes of a timeslot",
      "routing": {
        "request": {
          "url": "=/timeslots/{{$parameter.timeslotId}}",
          "body": {
            "note": "={{$parameter[\"note\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Update the notes of a timeslot",
      "resource": "timeslot"
    },
    {
      "name": "Set Guide or Resource",
      "value": "set: timeslot guide",
      "action": "Set a guide to a timeslot",
      "routing": {
        "request": {
          "url": "=/timeslots/guideAssign",
          "body": {
            "guideIds": "={{$parameter[\"guideOrResourceIds\"].map(e => $evaluateExpression(e)).map(s => s.replace(/^=/, \"\")) }}",
            "timeslotIds": "={{$parameter[\"timeslotIds\"].map(e => $evaluateExpression(e)).map(s => s.replace(/^=/, \"\")) }}",
            "assignOrUnassign": "={{$parameter[\"assignOrUnassign\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Set a guide to a timeslot",
      "resource": "timeslot"
    },
    {
      "name": "Get All",
      "value": "getAll: products",
      "action": "Get all products",
      "routing": {
        "request": {
          "url": "/products",
          "method": "GET"
        }
      },
      "description": "Get all products",
      "resource": "product"
    },
    {
      "name": "Get One",
      "value": "get: product",
      "action": "Get the data of a product",
      "routing": {
        "request": {
          "url": "=/products/{{$parameter.productId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single product",
      "resource": "product"
    },
    {
      "name": "Get All",
      "value": "getAll: promoCode",
      "action": "Get all promo codes",
      "routing": {
        "request": {
          "url": "/promocode",
          "method": "GET"
        }
      },
      "description": "Get all promo codes",
      "resource": "promoCode"
    },
    {
      "name": "Create Promo Code",
      "value": "create: promoCode",
      "action": "Create a new promo code",
      "routing": {
        "request": {
          "url": "=/promocode/create",
          "body": {
            "code": "={{$parameter[\"code\"]}}",
            "name": "={{$parameter[\"name\"]}}",
            "amount": "={{$parameter[\"amount\"]}}",
            "currency": "={{$parameter[\"currency\"]}}",
            "discountType": "={{$parameter[\"discountType\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a new promo code",
      "resource": "promoCode"
    },
    {
      "name": "Get Today's Daily Note",
      "value": "get: daily note",
      "action": "Get daily note for today",
      "routing": {
        "request": {
          "url": "/dailyNote/today",
          "method": "GET"
        }
      },
      "resource": "dailyNote"
    },
    {
      "name": "Update Today's Daily Note",
      "value": "set: daily note",
      "action": "Update daily note for today",
      "routing": {
        "request": {
          "url": "/dailyNote/today",
          "body": {
            "note": "={{$parameter[\"note\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "dailyNote"
    },
    {
      "name": "Get All",
      "value": "getAll: reseller",
      "action": "Get all resellers",
      "routing": {
        "request": {
          "url": "/reseller",
          "method": "GET"
        }
      },
      "description": "Get all resellers",
      "resource": "reseller"
    }
  ]

npm_readme:
  # n8n-nodes-peek-pro

  An n8n community node that allows interacting with the Peek Pro booking software.

  ## Installation

  In your n8n instance:

  1. Go to Settings → Community Nodes.
  2. Add the following package: `n8n-nodes-peek-pro`

  ## Credentials

  This node requires an API key.
  Peek Pro customers can obtain their API key from the Peek Pro n8n app.

  To configure it in n8n:

  1. Go to Credentials → New
  2. Select Peek Pro API
  3. Enter your API key
  4. Save

  ## Features

  This package supports:

  - Webhook-style triggers for new or updated bookings
  - Notification triggers for signed waivers
  - Pulling booking information
  - Accessing back-office calendar data
  - Retrieving guest information

  ## Usage

  1. Add a Peek Pro node to your workflow
  2. Select an operation such as booking retrieval or event subscription
  3. Choose or create your Peek Pro API credentials
  4. Configure the required fields
  5. Execute the node to verify everything is working

  ## Requirements

  - Available for all current Peek Pro customers
  - API key is available via the Peek Pro n8n app

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"An n8n community node that enables interaction with Peek Pro booking software for managing bookings, notifications, and guest data.","capabilities":["Webhook-style triggers for new or updated bookings","Notification triggers for signed waivers","Pulling booking information","Accessing back-office calendar data","Retrieving guest information"],"authentication":"API key required (obtained from Peek Pro n8n app)","commonUseCases":["Automated booking notifications","Guest information retrieval","Calendar synchronization","Waiver signing monitoring"],"limitations":[],"relatedNodes":[]}


node_type: @joai/n8n-nodes-joai.joai
package_name: @joai/n8n-nodes-joai
display_name: JoAi
description: Send messages as a JoAi agent
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: michavie
author_github_url: https://github.com/JoAiHQ/n8n-nodes.git
npm_package_name: @joai/n8n-nodes-joai
npm_version: 0.3.2
community_fetched_at: 2026-04-16T09:43:36.131Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessageAsUser",
      "options": [
        {
          "name": "Send Message as User",
          "value": "sendMessageAsUser",
          "action": "Send a message as a user to an agent",
          "description": "Send a message as a user to an agent"
        },
        {
          "name": "Send Message as Agent",
          "value": "sendMessageAsAgent",
          "action": "Send a message as an agent to a room",
          "description": "Send a message as an agent to a room"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": false
    }
  ]

operations:
  [
    {
      "name": "Send Message as User",
      "value": "sendMessageAsUser",
      "action": "Send a message as a user to an agent",
      "description": "Send a message as a user to an agent"
    },
    {
      "name": "Send Message as Agent",
      "value": "sendMessageAsAgent",
      "action": "Send a message as an agent to a room",
      "description": "Send a message as an agent to a room"
    }
  ]

npm_readme:
  # @joai/n8n-nodes-joai

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

  This is an n8n community node that provides integration with JoAi (AI Agent Platform). It allows you to send messages as AI agents and receive real-time webhooks for agent events.

  [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

  Install using npm:
  ```bash
  npm install @joai/n8n-nodes-joai
  ```

  Or via n8n's community nodes interface:
  1. Go to Settings > Community Nodes
  2. Install package: `@joai/n8n-nodes-joai`

  ## Operations

  ### JoAi Node
  - **Send Message**: Send a message as a JoAi agent to a specific room

  ### JoAi Trigger
  - **Webhook Events**: Receive real-time events from JoAi agents
    - Agent Actions
    - Agent Messages
    - User Messages

  ## Credentials

  This node requires JoAi API credentials. You need:

  1. **API Key**: Your JoAi API authentication key
  2. **Base URL**: The base URL for your JoAi API instance (e.g., `https://api.joai.ai`)

  ### Setting up credentials

  1. In n8n, go to **Settings > Credentials**.
  2. Select **Create New**.
  3. Search for **JoAi API** and select it.
  4. Enter your **API Key** and **Base URL**.
  5. Click **Save**.

  ## Compatibility

  - Minimum n8n version: 0.198.0
  - Tested with n8n version: 1.99.1

  ## Usage

  ### Basic Message Sending

  1. Add a **JoAi** node to your workflow
  2. Select **Send Message** operation
  3. Choose your JoAi credentials
  4. Configure the message parameters:
     - **Agent ID**: The UUID of the agent that will send the message
     - **Message**: The content to send
     - **Room** (optional): Room ID to send to
     - **Additional Fields** (optional): Message type and metadata
  5. Execute the workflow

  ### Setting up Webhooks (Automatic)

  1. Add a **JoAi Trigger** node to your workflow
  2. Configure your **JoAi API credentials** (API Key and Base URL)
  3. Enter the **Agent ID** you want to receive webhooks from
  4. Select the **event types** you want to trigger on (Agent Action, Agent Message, User Message)
  5. **Activate the workflow** - webhooks are automatically created in JoAi!
  6. **Test** by triggering an event in JoAi

  The trigger will automatically:
  - ✅ Create webhooks in JoAi when you activate the workflow
  - ✅ Delete webhooks when you deactivate the workflow
  - ✅ Pass all webhook data to the next node in your workflow

  No manual webhook configuration needed!

  ### Example Workflow

  Here's a simple workflow that logs webhook data:

  1. **JoAi Trigger** - Receives webhook from JoAi
  2. **Code Node** - Processes the webhook data:
     ```javascript
     // All webhook data is available in $input.item.json
     const webhookData = $input.item.json;

     return {
       json: {
         event: webhookData.event,
         data: webhookData.data,
         receivedAt: new Date().toISOString()
       }
     };
     ```
  3. **Add other nodes** as needed for your specific use case

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [JoAi API Documentation](https://docs.joai.ai)
  - [GitHub Repository](https://github.com/JoAiHQ/n8n-nodes)

  ## Version history

  ## Support

  If you encounter any issues or have questions:

  1. Check the [GitHub Issues](https://github.com/JoAiHQ/n8n-nodes/issues)
  2. Create a new issue if your problem isn't already reported
  3. Provide as much detail as possible including n8n version, node version, and error messages

  ## Contributing

  Contributions are welcome! Please read our contributing guidelines before submitting pull requests.

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the JoAi AI Agent Platform, allowing users to send messages as agents and receive real-time webhook events for agent actions and messages.","capabilities":["Send messages as a JoAi agent to a specific room","Receive real-time webhook events for Agent Actions","Receive real-time webhook events for Agent Messages","Receive real-time webhook events for User Messages","Automatically create and delete webhooks in JoAi based on workflow activation status"],"authentication":"API Key required (JoAi API Key and Base URL)","commonUseCases":["Automated messaging from AI agents to specific rooms","Real-time monitoring of agent interactions and user messages","Building chatbot workflows with event-driven triggers"],"limitations":["Requires manual installation of the npm package or use of n8n community nodes interface","Minimum n8n version required is 0.198.0","Webhook functionality requires workflow activation to create webhooks in JoAi"],"relatedNodes":["Code Node","Webhook Node","Trigger Node"]}


node_type: n8n-nodes-starfish.campingCare
package_name: n8n-nodes-starfish
display_name: Starfish (CampingCare/HotelCare)
description: Interact with the Starfish API for CampingCare and HotelCare
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: developerscampingcare
author_github_url: https://github.com/CampingCare/n8n-node.git
npm_package_name: n8n-nodes-starfish
npm_version: 2.0.2
community_fetched_at: 2026-04-16T09:43:36.132Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Accommodations API",
          "value": "accommodations"
        },
        {
          "name": "Administrations API",
          "value": "administrations"
        },
        {
          "name": "Availability API",
          "value": "availability"
        },
        {
          "name": "Categories API",
          "value": "categories"
        },
        {
          "name": "Contacts API",
          "value": "contacts"
        },
        {
          "name": "Exchange Rates API",
          "value": "exchangeRates"
        },
        {
          "name": "Invoices API",
          "value": "invoices"
        },
        {
          "name": "Kiosks API",
          "value": "kiosks"
        },
        {
          "name": "Ledgers API",
          "value": "ledgers"
        },
        {
          "name": "License Plates API",
          "value": "licensePlates"
        },
        {
          "name": "Logs API",
          "value": "logs"
        },
        {
          "name": "Price Calculation API",
          "value": "priceCalculation"
        },
        {
          "name": "Products API",
          "value": "products"
        },
        {
          "name": "Rates API",
          "value": "rates"
        },
        {
          "name": "Reservations API",
          "value": "reservations"
        },
        {
          "name": "Tags API",
          "value": "tags"
        },
        {
          "name": "Timezones API",
          "value": "timezones"
        },
        {
          "name": "Users API",
          "value": "users"
        },
        {
          "name": "Widgets API",
          "value": "widgets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccommodations",
      "options": [
        {
          "name": "Places",
          "value": "places",
          "action": "Places",
          "description": "Manage accommodation places"
        },
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage accommodation meta information"
        },
        {
          "name": "Get Accommodations",
          "value": "getAccommodations",
          "action": "Get accommodations",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
                "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "get_services": "={{ $parameter[\"get_services\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "/accommodations",
              "method": "GET"
            }
          },
          "description": "You can get your accommodations with the get accommodations method"
        },
        {
          "name": "Get Accommodation",
          "value": "getAccommodation",
          "action": "Get accommodation",
          "routing": {
            "request": {
              "qs": {
                "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "GET"
            }
          },
          "description": "With this method you can retreive a single accommodation"
        },
        {
          "name": "Add Accommodation",
          "value": "addAccommodation",
          "action": "Add accommodation",
          "routing": {
            "request": {
              "url": "/accommodations",
              "body": {
                "name": "={{ $parameter[\"name\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "With this method you can add a new accommodation"
        },
        {
          "name": "Update Accommodation",
          "value": "updateAccommodation",
          "action": "Update accommodation",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "With this method you can update an existing accommodation"
        },
        {
          "name": "Delete Accommodation",
          "value": "deleteAccommodation",
          "action": "Delete accommodation",
          "routing": {
            "request": {
              "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "With this method you can delete a single accommodation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accommodations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAdministrations",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage administration meta information"
        },
        {
          "name": "Age Tables",
          "value": "ageTables",
          "action": "Age tables",
          "description": "Get age tables for an administration"
        },
        {
          "name": "Get Places",
          "value": "getPlaces",
          "action": "Get places",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}/places",
              "method": "GET"
            }
          },
          "description": "Get places for a specific administration"
        },
        {
          "name": "Get Administrations",
          "value": "getAdministrations",
          "action": "Get administrations",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
                "get_accommodations": "={{ $parameter[\"get_accommodations\"] || undefined }}"
              },
              "url": "/administrations",
              "method": "GET"
            }
          },
          "description": "You can retrieve the administrations of a specific user"
        },
        {
          "name": "Get Administration",
          "value": "getAdministration",
          "action": "Get administration",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
                "get_vat_tables": "={{ $parameter[\"get_vat_tables\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single administration by id"
        },
        {
          "name": "Update Administration",
          "value": "updateAdministration",
          "action": "Update administration",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}"
              },
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an administration by id"
        },
        {
          "name": "Add Administration",
          "value": "addAdministration",
          "action": "Add administration",
          "routing": {
            "request": {
              "url": "/administrations",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "type": "={{ $parameter[\"type\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new administration (full PMS or lite version)"
        },
        {
          "name": "Delete Administration",
          "value": "deleteAdministration",
          "action": "Delete administration",
          "routing": {
            "request": {
              "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an administration by id"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "administrations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStock",
      "options": [
        {
          "name": "Get Stock",
          "value": "getStock",
          "action": "Get stock",
          "routing": {
            "request": {
              "qs": {
                "from": "={{ $parameter[\"from\"] || undefined }}",
                "till": "={{ $parameter[\"till\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
              },
              "url": "/availability/stock",
              "method": "GET"
            }
          },
          "description": "Get availability stock for an accommodation"
        },
        {
          "name": "Get Places",
          "value": "getPlaces",
          "action": "Get places",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "backend": "={{ $parameter[\"backend\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
              },
              "url": "/availability/places",
              "method": "GET"
            }
          },
          "description": "Get available places"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCategories",
      "options": [
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Get categories",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
                "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
                "status[2]": "={{ $parameter[\"status_2\"] || undefined }}"
              },
              "url": "/categories",
              "method": "GET"
            }
          },
          "description": "Get a list of categories from the system"
        },
        {
          "name": "Get Category",
          "value": "getCategory",
          "action": "Get category",
          "routing": {
            "request": {
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single category by ID"
        },
        {
          "name": "Add Category",
          "value": "addCategory",
          "action": "Add category",
          "routing": {
            "request": {
              "url": "/categories",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "description": "={{ $parameter[\"description\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new category to the system"
        },
        {
          "name": "Update Category",
          "value": "updateCategory",
          "action": "Update category",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"update_name\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "description": "={{ $parameter[\"update_description\"] || undefined }}"
              },
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update the category in the system"
        },
        {
          "name": "Delete Category",
          "value": "deleteCategory",
          "action": "Delete category",
          "routing": {
            "request": {
              "url": "=/categories/{{$parameter[\"category_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a category from the system"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "categories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage contact meta information"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
              },
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "Get a list of contacts for this administration"
        },
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get contact",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
              },
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single contact by id"
        },
        {
          "name": "Add Contact",
          "value": "addContact",
          "action": "Add contact",
          "routing": {
            "request": {
              "url": "/contacts",
              "body": {
                "city": "={{ $parameter[\"city\"] || undefined }}",
                "meta": "={{ $parameter[\"extraFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "id_nr": "={{ $parameter[\"id_nr\"] || undefined }}",
                "phone": "={{ $parameter[\"phone\"] || undefined }}",
                "state": "={{ $parameter[\"state\"] || undefined }}",
                "gender": "={{ $parameter[\"gender\"] || undefined }}",
                "address": "={{ $parameter[\"address\"] || undefined }}",
                "company": "={{ $parameter[\"company\"] || undefined }}",
                "country": "={{ $parameter[\"country\"] || undefined }}",
                "id_type": "={{ $parameter[\"id_type\"] || undefined }}",
                "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
                "birthday": "={{ $parameter[\"birthday\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
                "vat_number": "={{ $parameter[\"vat_number\"] || undefined }}",
                "phone_mobile": "={{ $parameter[\"phone_mobile\"] || undefined }}",
                "address_number": "={{ $parameter[\"address_number\"] || undefined }}",
                "country_origin": "={{ $parameter[\"country_origin\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty contact or add parameters to a contact"
        },
        {
          "name": "Update Contact",
          "value": "updateContact",
          "action": "Update contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "body": {
                "city": "={{ $parameter[\"city\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "phone": "={{ $parameter[\"phone\"] || undefined }}",
                "gender": "={{ $parameter[\"gender\"] || undefined }}",
                "address": "={{ $parameter[\"address\"] || undefined }}",
                "company": "={{ $parameter[\"company\"] || undefined }}",
                "country": "={{ $parameter[\"country\"] || undefined }}",
                "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
                "address_number": "={{ $parameter[\"address_number\"] || undefined }}"
              },
              "method": "PUT"
            }
          },
          "description": "Update a contact, only provided parameters will be updated"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete contact",
          "routing": {
            "request": {
              "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a contact from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getExchangeRates",
      "options": [
        {
          "name": "Get Exchange Rates",
          "value": "getExchangeRates",
          "action": "Get exchange rates",
          "routing": {
            "request": {
              "qs": {
                "date": "={{ $parameter[\"date\"] || undefined }}",
                "source_currency": "={{ $parameter[\"source_currency\"] || undefined }}",
                "converted_currency": "={{ $parameter[\"converted_currency\"] || undefined }}"
              },
              "url": "/exchange_rates",
              "method": "GET"
            }
          },
          "description": "Get a list of exchange rates with optional filters"
        },
        {
          "name": "Exchange Value",
          "value": "exchangeValue",
          "action": "Exchange value",
          "routing": {
            "request": {
              "qs": {
                "value": "={{ $parameter[\"value\"] }}",
                "source_currency": "={{ $parameter[\"source_currency\"] }}",
                "converted_currency": "={{ $parameter[\"converted_currency\"] }}"
              },
              "url": "/exchange_rates/exchange_value",
              "method": "GET"
            }
          },
          "description": "Exchange a value from one currency to another"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "exchangeRates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInvoices",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage invoice meta information"
        },
        {
          "name": "Get Invoices",
          "value": "getInvoices",
          "action": "Get invoices",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "invoice_id": "={{ $parameter[\"invoice_id_filter\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
                "create_date[0]": "={{ $parameter[\"create_date_from\"] || undefined }}",
                "create_date[1]": "={{ $parameter[\"create_date_to\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}"
              },
              "url": "/invoices",
              "method": "GET"
            }
          },
          "description": "Get a list of invoices for this administration"
        },
        {
          "name": "Get Invoice",
          "value": "getInvoice",
          "action": "Get invoice",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
                "get_vat_totals": "={{ $parameter[\"get_vat_totals\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_contact_meta": "={{ $parameter[\"get_contact_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "get_reservation_meta": "={{ $parameter[\"get_reservation_meta\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single invoice by id"
        },
        {
          "name": "Add Invoice",
          "value": "addInvoice",
          "action": "Add invoice",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "/invoices",
              "method": "POST"
            }
          },
          "description": "Add a new empty concept email to the administration"
        },
        {
          "name": "Update Invoice",
          "value": "updateInvoice",
          "action": "Update invoice",
          "routing": {
            "request": {
              "qs": {
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a invoice contact"
        },
        {
          "name": "Delete Invoice",
          "value": "deleteInvoice",
          "action": "Delete invoice",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a invoice from the administration"
        },
        {
          "name": "Finalize Invoice",
          "value": "finalizeInvoice",
          "action": "Finalize invoice",
          "routing": {
            "request": {
              "qs": {
                "delay": "={{ $parameter[\"delay\"] || undefined }}"
              },
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/finalize",
              "method": "POST"
            }
          },
          "description": "Invoices are started in status concept a can be changed"
        },
        {
          "name": "Cancel Delayed Finalized Invoice",
          "value": "cancelDelayedFinalizedInvoice",
          "action": "Cancel delayed finalized invoice",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/cancel_finalize",
              "method": "POST"
            }
          },
          "description": "Invoices are started in status concept a can be changed"
        },
        {
          "name": "Create Credit",
          "value": "createCredit",
          "action": "Create credit",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/credit",
              "method": "POST"
            }
          },
          "description": "Create a credit note for an invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getKiosks",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage kiosk meta information"
        },
        {
          "name": "Get Kiosks",
          "value": "getKiosks",
          "action": "Get kiosks",
          "routing": {
            "request": {
              "url": "/kiosks",
              "method": "GET"
            }
          },
          "description": "Get a list of kiosks for this administration"
        },
        {
          "name": "Get Kiosk",
          "value": "getKiosk",
          "action": "Get kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single kiosk by id"
        },
        {
          "name": "Update Kiosk",
          "value": "updateKiosk",
          "action": "Update kiosk",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}"
              },
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a kiosk, only provided parameters will be updated"
        },
        {
          "name": "Add Kiosk",
          "value": "addKiosk",
          "action": "Add kiosk",
          "routing": {
            "request": {
              "url": "/kiosks",
              "body": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "brand": "={{ $parameter[\"brand\"] || undefined }}",
                "api_key_id": "={{ $parameter[\"api_key_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty kiosk or add parameters to a kiosk"
        },
        {
          "name": "Delete Kiosk",
          "value": "deleteKiosk",
          "action": "Delete kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a kiosk from the administration by ID"
        },
        {
          "name": "Install Kiosk",
          "value": "installKiosk",
          "action": "Install kiosk",
          "routing": {
            "request": {
              "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}/install",
              "method": "POST"
            }
          },
          "description": "Installs a kiosk from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "kiosks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLedgers",
      "options": [
        {
          "name": "Get Ledgers",
          "value": "getLedgers",
          "action": "Get ledgers",
          "routing": {
            "request": {
              "url": "/ledgers",
              "method": "GET"
            }
          },
          "description": "Get a list of ledgers for this administration"
        },
        {
          "name": "Get Ledger",
          "value": "getLedger",
          "action": "Get ledger",
          "routing": {
            "request": {
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single ledger by id"
        },
        {
          "name": "Add Ledger",
          "value": "addLedger",
          "action": "Add ledger",
          "routing": {
            "request": {
              "url": "/ledgers",
              "body": {
                "name": "={{ $parameter[\"name\"] }}",
                "type": "={{ $parameter[\"type\"] }}",
                "number": "={{ $parameter[\"number\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new ledger to the administration"
        },
        {
          "name": "Update Ledger",
          "value": "updateLedger",
          "action": "Update ledger",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "number": "={{ $parameter[\"number\"] || undefined }}"
              },
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a ledger, only provided parameters will be updated"
        },
        {
          "name": "Delete Ledger",
          "value": "deleteLedger",
          "action": "Delete ledger",
          "routing": {
            "request": {
              "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a ledger from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ledgers"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLicensePlates",
      "options": [
        {
          "name": "Get License Plates",
          "value": "getLicensePlates",
          "action": "Get license plates",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "force_dates": "={{ $parameter[\"force_dates\"] || undefined }}",
                "license_plate": "={{ $parameter[\"license_plate\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
                "end_date_operator": "={{ $parameter[\"end_date_operator\"] || undefined }}",
                "start_date_operator": "={{ $parameter[\"start_date_operator\"] || undefined }}"
              },
              "url": "/license_plates",
              "method": "GET"
            }
          },
          "description": "Get a list of license plates from the system"
        },
        {
          "name": "Get License Plate",
          "value": "getLicensePlate",
          "action": "Get license plate",
          "routing": {
            "request": {
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single license plate by ID"
        },
        {
          "name": "Check Valid License Plate",
          "value": "checkValidLicensePlate",
          "action": "Check valid license plate",
          "routing": {
            "request": {
              "qs": {
                "plate": "={{ $parameter[\"plate\"] || undefined }}"
              },
              "url": "/license_plates/check_plate",
              "method": "GET"
            }
          },
          "description": "Validate a license plate"
        },
        {
          "name": "Add License Plate",
          "value": "addLicensePlate",
          "action": "Add license plate",
          "routing": {
            "request": {
              "url": "/license_plates",
              "body": {
                "plate": "={{ $parameter[\"plate\"] }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new license plate"
        },
        {
          "name": "Update License Plate",
          "value": "updateLicensePlate",
          "action": "Update license plate",
          "routing": {
            "request": {
              "qs": {
                "plate": "={{ $parameter[\"plate\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
                "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
              },
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing license plate"
        },
        {
          "name": "Delete License Plate",
          "value": "deleteLicensePlate",
          "action": "Delete license plate",
          "routing": {
            "request": {
              "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a license plate by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "licensePlates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLogs",
      "options": [
        {
          "name": "Get Logs",
          "value": "getLogs",
          "action": "Get logs",
          "routing": {
            "request": {
              "url": "/api/logs",
              "method": "GET"
            }
          },
          "description": "Get a list of log entries"
        },
        {
          "name": "Add Log",
          "value": "addLog",
          "action": "Add log",
          "routing": {
            "request": {
              "url": "/logs",
              "body": {
                "type": "={{ $parameter[\"type\"] }}",
                "type_id": "={{ $parameter[\"type_id\"] }}",
                "severity": "={{ $parameter[\"severity\"] }}",
                "description": "={{ $parameter[\"description\"] }}"
              },
              "method": "POST"
            }
          },
          "description": "Add a new log entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "logs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "calculatePrice",
      "options": [
        {
          "name": "Price Calculation",
          "value": "calculatePrice",
          "action": "Calculate price",
          "routing": {
            "request": {
              "qs": {
                "code": "={{ $parameter[\"code\"] || undefined }}",
                "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
                "card_id": "={{ $parameter[\"card_id\"] || undefined }}",
                "persons": "={{ $parameter[\"persons\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "timezone": "={{ $parameter[\"timezone\"] || undefined }}",
                "departure": "={{ $parameter[\"departure\"] || undefined }}",
                "age_tables": "={{ $parameter[\"age_tables\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "get_deposit": "={{ $parameter[\"get_deposit\"] || undefined }}",
                "get_options": "={{ $parameter[\"get_options\"] || undefined }}",
                "timeslot_id": "={{ $parameter[\"timeslot_id\"] || undefined }}",
                "birth_tables": "={{ $parameter[\"birth_tables\"] || undefined }}",
                "history_date": "={{ $parameter[\"history_date\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}",
                "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
                "get_taxes_price": "={{ $parameter[\"get_taxes_price\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
                "get_guests_price": "={{ $parameter[\"get_guests_price\"] || undefined }}",
                "search_alternative": "={{ $parameter[\"search_alternative\"] || undefined }}",
                "get_discounts_price": "={{ $parameter[\"get_discounts_price\"] || undefined }}",
                "get_available_places": "={{ $parameter[\"get_available_places\"] || undefined }}",
                "get_required_options_price": "={{ $parameter[\"get_required_options_price\"] || undefined }}"
              },
              "url": "/price_calculation",
              "method": "GET"
            }
          },
          "description": "With the price calculation API you can calculate a price"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "priceCalculation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProducts",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage product meta information"
        },
        {
          "name": "Get Products",
          "value": "getProducts",
          "action": "Get products",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "deal_id": "={{ $parameter[\"deal_id\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "/products",
              "method": "GET"
            }
          },
          "description": "Get a list of products for this administration"
        },
        {
          "name": "Get Product",
          "value": "getProduct",
          "action": "Get product",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
                "translations": "={{ $parameter[\"translations\"] || undefined }}"
              },
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single product by id"
        },
        {
          "name": "Update Product",
          "value": "updateProduct",
          "action": "Update product",
          "routing": {
            "request": {
              "qs": {
                "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
                "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a product, only provided parameters will be updated"
        },
        {
          "name": "Add Product",
          "value": "addProduct",
          "action": "Add product",
          "routing": {
            "request": {
              "url": "/products",
              "body": {
                "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "category": "={{ $parameter[\"category\"] || undefined }}",
                "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
                "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
                "description": "={{ $parameter[\"description\"] || undefined }}",
                "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty product or add parameters to a product"
        },
        {
          "name": "Delete Product",
          "value": "deleteProduct",
          "action": "Delete product",
          "routing": {
            "request": {
              "url": "=/products/{{$parameter[\"product_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes a product from the administration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "products"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRates",
      "options": [
        {
          "name": "Prices",
          "value": "prices",
          "action": "Prices",
          "description": "HTTP methods for prices of a rate"
        },
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "HTTP methods for meta of a rate"
        },
        {
          "name": "Get Rates",
          "value": "getRates",
          "action": "Get rates",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}"
              },
              "url": "/rates",
              "method": "GET"
            }
          },
          "description": "Get a list of rates"
        },
        {
          "name": "Get Rate",
          "value": "getRate",
          "action": "Get rate",
          "routing": {
            "request": {
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single rate by ID"
        },
        {
          "name": "Update Rate",
          "value": "updateRate",
          "action": "Update rate",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] || undefined }}",
                "closed": "={{ $parameter[\"closed\"] !== undefined && $parameter[\"closed\"] !== \"\" ? $parameter[\"closed\"] : undefined }}",
                "rules[0]": "={{ $parameter[\"rules\"]?.table ? ( Array.isArray($parameter[\"rules\"].table) ? JSON.stringify({ type: $parameter[\"rules\"].table[0].type, amount: String($parameter[\"rules\"].table[0].amount) }) : JSON.stringify({ type: $parameter[\"rules\"].table.type, amount: String($parameter[\"rules\"].table.amount) }) ) : undefined }}",
                "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}",
                "maximum_stay": "={{ $parameter[\"maximum_stay\"] || undefined }}",
                "minimum_stay": "={{ $parameter[\"minimum_stay\"] || undefined }}"
              },
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing rate"
        },
        {
          "name": "Add Rate",
          "value": "addRate",
          "action": "Add rate",
          "routing": {
            "request": {
              "url": "/rates",
              "body": "={{ Object.assign({}, ( $parameter.name ? { name: $parameter.name } : {} ), ( $parameter.status ? { status: $parameter.status } : {} ), ( $parameter.parent_id ? { parent_id: $parameter.parent_id } : {} ), ( $parameter.closed !== undefined && $parameter.closed !== \"\" ? { closed: $parameter.closed } : {} ), ( $parameter.minimum_stay ? { minimum_stay: $parameter.minimum_stay } : {} ), ( $parameter.maximum_stay ? { maximum_stay: $parameter.maximum_stay } : {} ), ($parameter.rules?.table ? { rules: (Array.isArray($parameter.rules.table) ? $parameter.rules.table.map(r => ({ type: r.type, amount: String(r.amount) })) : [{ type: $parameter.rules.table.type, amount: String($parameter.rules.table.amount) }]) } : {}) ) }}",
              "method": "POST"
            }
          },
          "description": "Create a new rate"
        },
        {
          "name": "Delete Rate",
          "value": "deleteRate",
          "action": "Delete rate",
          "routing": {
            "request": {
              "url": "=/rates/{{$parameter[\"rate_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a rate by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getReservations",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage reservation meta information"
        },
        {
          "name": "Get Reservations",
          "value": "getReservations",
          "action": "Get reservations",
          "routing": {
            "request": {
              "qs": {
                "type": "={{ $parameter[\"type\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "status": "={{ $parameter[\"status\"] || undefined }}",
                "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
                "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "group_id": "={{ $parameter[\"group_id\"] || undefined }}",
                "meta_key": "={{ $parameter[\"meta_key\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
                "departure": "={{ $parameter[\"departure\"] || undefined }}",
                "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
                "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
                "meta_value": "={{ $parameter[\"meta_value\"] || undefined }}",
                "create_date": "={{ $parameter[\"create_date\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "last_modified": "={{ $parameter[\"last_modified\"] || undefined }}",
                "meta_operator": "={{ $parameter[\"meta_operator\"] || undefined }}",
                "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
                "arrival_operator": "={{ $parameter[\"arrival_operator\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "departure_operator": "={{ $parameter[\"departure_operator\"] || undefined }}",
                "get_invoice_payment": "={{ $parameter[\"get_invoice_payment\"] || undefined }}",
                "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "last_modified_operator": "={{ $parameter[\"last_modified_operator\"] || undefined }}"
              },
              "url": "/reservations",
              "method": "GET"
            }
          },
          "description": "You have a lot of possibilities to get information about multiple reservations"
        },
        {
          "name": "Get Reservation",
          "value": "getReservation",
          "action": "Get reservation",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
                "get_booker": "={{ $parameter[\"get_booker\"] || undefined }}",
                "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
                "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
                "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
                "get_co_travelers": "={{ $parameter[\"get_co_travelers\"] || undefined }}",
                "get_invoice_meta": "={{ $parameter[\"get_invoice_meta\"] || undefined }}",
                "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
                "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
                "get_invoice_rowsfilter": "={{ $parameter[\"get_invoice_rowsfilter\"] || undefined }}"
              },
              "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
              "method": "GET"
            }
          },
          "description": "You also can get the individual reservation, it is possible to get extra data on the reservation when needed"
        },
        {
          "name": "Create Reservation",
          "value": "createReservation",
          "action": "Create reservation",
          "description": "Create a reservation using different methods"
        },
        {
          "name": "Delete Reservation",
          "value": "deleteReservation",
          "action": "Delete reservation",
          "routing": {
            "request": {
              "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a reservation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reservations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTags",
      "options": [
        {
          "name": "Get Tags",
          "value": "getTags",
          "action": "Get tags",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "search": "={{ $parameter[\"search\"] || undefined }}"
              },
              "url": "/tags",
              "method": "GET"
            }
          },
          "description": "Get a list of tags"
        },
        {
          "name": "Get Tag",
          "value": "getTag",
          "action": "Get tag",
          "routing": {
            "request": {
              "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
              "method": "GET"
            }
          },
          "description": "Get a single tag by ID"
        },
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag",
          "routing": {
            "request": {
              "qs": {
                "name": "={{ $parameter[\"name\"] }}"
              },
              "url": "/tags",
              "method": "POST"
            }
          },
          "description": "Add a new tag"
        },
        {
          "name": "Delete Tag",
          "value": "deleteTag",
          "action": "Delete tag",
          "routing": {
            "request": {
              "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
              "method": "DELETE"
            }
          },
          "description": "Delete a tag by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tags"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTimezones",
      "options": [
        {
          "name": "Get Timezones",
          "value": "getTimezones",
          "action": "Get timezones",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "country_code": "={{ $parameter[\"country_code\"] || undefined }}"
              },
              "url": "/timezones",
              "method": "GET"
            }
          },
          "description": "Get a list of timezones with optional filters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timezones"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUsers",
      "options": [
        {
          "name": "Meta",
          "value": "meta",
          "action": "Meta",
          "description": "Manage user meta information"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "Get users",
          "routing": {
            "request": {
              "qs": {
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
                "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
                "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
              },
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "Get a list of users for this administration"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get user",
          "routing": {
            "request": {
              "qs": {
                "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
                "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
                "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
              },
              "url": "=/users/{{$parameter[\"user_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single user by id"
        },
        {
          "name": "Update User",
          "value": "updateUser",
          "action": "Update user",
          "routing": {
            "request": {
              "qs": {
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
              },
              "url": "=/users/{{$parameter[\"user_id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a user, only provided parameters will be updated"
        },
        {
          "name": "Add User",
          "value": "addUser",
          "action": "Add user",
          "routing": {
            "request": {
              "url": "/users",
              "body": {
                "email": "={{ $parameter[\"email\"] || undefined }}",
                "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
                "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty user or add parameters to a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWidgets",
      "options": [
        {
          "name": "Get Widgets",
          "value": "getWidgets",
          "action": "Get widgets",
          "routing": {
            "request": {
              "qs": {
                "area": "={{ $parameter[\"area\"] || undefined }}",
                "count": "={{ $parameter[\"count\"] || undefined }}",
                "limit": "={{ $parameter[\"limit\"] || undefined }}",
                "order": "={{ $parameter[\"order\"] || undefined }}",
                "offset": "={{ $parameter[\"offset\"] || undefined }}",
                "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
              },
              "url": "/widgets",
              "method": "GET"
            }
          },
          "description": "Get a list of widgets for this administration"
        },
        {
          "name": "Get Widget",
          "value": "getWidget",
          "action": "Get widget",
          "routing": {
            "request": {
              "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single widget by id"
        },
        {
          "name": "Add Widget",
          "value": "addWidget",
          "action": "Add widget",
          "routing": {
            "request": {
              "url": "/widgets",
              "body": {
                "url": "={{ $parameter[\"url\"] || undefined }}",
                "area": "={{ $parameter[\"area\"] || undefined }}",
                "data": "={{ $parameter[\"data\"] || undefined }}",
                "app_id": "={{ $parameter[\"app_id\"] || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Add either a empty widget or add parameters to a widget"
        },
        {
          "name": "Delete Widget",
          "value": "deleteWidget",
          "action": "Delete widget",
          "routing": {
            "request": {
              "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a widget by id"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "widgets"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Places",
      "value": "places",
      "action": "Places",
      "description": "Manage accommodation places",
      "resource": "accommodations"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage accommodation meta information",
      "resource": "accommodations"
    },
    {
      "name": "Get Accommodations",
      "value": "getAccommodations",
      "action": "Get accommodations",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
            "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "get_services": "={{ $parameter[\"get_services\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "/accommodations",
          "method": "GET"
        }
      },
      "description": "You can get your accommodations with the get accommodations method",
      "resource": "accommodations"
    },
    {
      "name": "Get Accommodation",
      "value": "getAccommodation",
      "action": "Get accommodation",
      "routing": {
        "request": {
          "qs": {
            "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "GET"
        }
      },
      "description": "With this method you can retreive a single accommodation",
      "resource": "accommodations"
    },
    {
      "name": "Add Accommodation",
      "value": "addAccommodation",
      "action": "Add accommodation",
      "routing": {
        "request": {
          "url": "/accommodations",
          "body": {
            "name": "={{ $parameter[\"name\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "With this method you can add a new accommodation",
      "resource": "accommodations"
    },
    {
      "name": "Update Accommodation",
      "value": "updateAccommodation",
      "action": "Update accommodation",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "With this method you can update an existing accommodation",
      "resource": "accommodations"
    },
    {
      "name": "Delete Accommodation",
      "value": "deleteAccommodation",
      "action": "Delete accommodation",
      "routing": {
        "request": {
          "url": "=/accommodations/{{$parameter[\"accommodation_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "With this method you can delete a single accommodation",
      "resource": "accommodations"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage administration meta information",
      "resource": "administrations"
    },
    {
      "name": "Age Tables",
      "value": "ageTables",
      "action": "Age tables",
      "description": "Get age tables for an administration",
      "resource": "administrations"
    },
    {
      "name": "Get Places",
      "value": "getPlaces",
      "action": "Get places",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}/places",
          "method": "GET"
        }
      },
      "description": "Get places for a specific administration",
      "resource": "administrations"
    },
    {
      "name": "Get Administrations",
      "value": "getAdministrations",
      "action": "Get administrations",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
            "get_accommodations": "={{ $parameter[\"get_accommodations\"] || undefined }}"
          },
          "url": "/administrations",
          "method": "GET"
        }
      },
      "description": "You can retrieve the administrations of a specific user",
      "resource": "administrations"
    },
    {
      "name": "Get Administration",
      "value": "getAdministration",
      "action": "Get administration",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_media": "={{ $parameter[\"get_media\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "get_age_tables": "={{ $parameter[\"get_age_tables\"] || undefined }}",
            "get_vat_tables": "={{ $parameter[\"get_vat_tables\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single administration by id",
      "resource": "administrations"
    },
    {
      "name": "Update Administration",
      "value": "updateAdministration",
      "action": "Update administration",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}"
          },
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an administration by id",
      "resource": "administrations"
    },
    {
      "name": "Add Administration",
      "value": "addAdministration",
      "action": "Add administration",
      "routing": {
        "request": {
          "url": "/administrations",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "type": "={{ $parameter[\"type\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new administration (full PMS or lite version)",
      "resource": "administrations"
    },
    {
      "name": "Delete Administration",
      "value": "deleteAdministration",
      "action": "Delete administration",
      "routing": {
        "request": {
          "url": "=/administrations/{{$parameter[\"admin_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an administration by id",
      "resource": "administrations"
    },
    {
      "name": "Get Stock",
      "value": "getStock",
      "action": "Get stock",
      "routing": {
        "request": {
          "qs": {
            "from": "={{ $parameter[\"from\"] || undefined }}",
            "till": "={{ $parameter[\"till\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
          },
          "url": "/availability/stock",
          "method": "GET"
        }
      },
      "description": "Get availability stock for an accommodation",
      "resource": "availability"
    },
    {
      "name": "Get Places",
      "value": "getPlaces",
      "action": "Get places",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "backend": "={{ $parameter[\"backend\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}"
          },
          "url": "/availability/places",
          "method": "GET"
        }
      },
      "description": "Get available places",
      "resource": "availability"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Get categories",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "status[0]": "={{ $parameter[\"status_0\"] || undefined }}",
            "status[1]": "={{ $parameter[\"status_1\"] || undefined }}",
            "status[2]": "={{ $parameter[\"status_2\"] || undefined }}"
          },
          "url": "/categories",
          "method": "GET"
        }
      },
      "description": "Get a list of categories from the system",
      "resource": "categories"
    },
    {
      "name": "Get Category",
      "value": "getCategory",
      "action": "Get category",
      "routing": {
        "request": {
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single category by ID",
      "resource": "categories"
    },
    {
      "name": "Add Category",
      "value": "addCategory",
      "action": "Add category",
      "routing": {
        "request": {
          "url": "/categories",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "description": "={{ $parameter[\"description\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new category to the system",
      "resource": "categories"
    },
    {
      "name": "Update Category",
      "value": "updateCategory",
      "action": "Update category",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"update_name\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "description": "={{ $parameter[\"update_description\"] || undefined }}"
          },
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update the category in the system",
      "resource": "categories"
    },
    {
      "name": "Delete Category",
      "value": "deleteCategory",
      "action": "Delete category",
      "routing": {
        "request": {
          "url": "=/categories/{{$parameter[\"category_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a category from the system",
      "resource": "categories"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage contact meta information",
      "resource": "contacts"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
          },
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "Get a list of contacts for this administration",
      "resource": "contacts"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get contact",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "get_reservations": "={{ $parameter[\"get_reservations\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_reservation_payment_terms": "={{ $parameter[\"get_reservation_payment_terms\"] || undefined }}"
          },
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single contact by id",
      "resource": "contacts"
    },
    {
      "name": "Add Contact",
      "value": "addContact",
      "action": "Add contact",
      "routing": {
        "request": {
          "url": "/contacts",
          "body": {
            "city": "={{ $parameter[\"city\"] || undefined }}",
            "meta": "={{ $parameter[\"extraFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "id_nr": "={{ $parameter[\"id_nr\"] || undefined }}",
            "phone": "={{ $parameter[\"phone\"] || undefined }}",
            "state": "={{ $parameter[\"state\"] || undefined }}",
            "gender": "={{ $parameter[\"gender\"] || undefined }}",
            "address": "={{ $parameter[\"address\"] || undefined }}",
            "company": "={{ $parameter[\"company\"] || undefined }}",
            "country": "={{ $parameter[\"country\"] || undefined }}",
            "id_type": "={{ $parameter[\"id_type\"] || undefined }}",
            "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
            "birthday": "={{ $parameter[\"birthday\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
            "vat_number": "={{ $parameter[\"vat_number\"] || undefined }}",
            "phone_mobile": "={{ $parameter[\"phone_mobile\"] || undefined }}",
            "address_number": "={{ $parameter[\"address_number\"] || undefined }}",
            "country_origin": "={{ $parameter[\"country_origin\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty contact or add parameters to a contact",
      "resource": "contacts"
    },
    {
      "name": "Update Contact",
      "value": "updateContact",
      "action": "Update contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "body": {
            "city": "={{ $parameter[\"city\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "phone": "={{ $parameter[\"phone\"] || undefined }}",
            "gender": "={{ $parameter[\"gender\"] || undefined }}",
            "address": "={{ $parameter[\"address\"] || undefined }}",
            "company": "={{ $parameter[\"company\"] || undefined }}",
            "country": "={{ $parameter[\"country\"] || undefined }}",
            "zipcode": "={{ $parameter[\"zipcode\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}",
            "address_number": "={{ $parameter[\"address_number\"] || undefined }}"
          },
          "method": "PUT"
        }
      },
      "description": "Update a contact, only provided parameters will be updated",
      "resource": "contacts"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete contact",
      "routing": {
        "request": {
          "url": "=/contacts/{{$parameter[\"contact_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a contact from the administration by ID",
      "resource": "contacts"
    },
    {
      "name": "Get Exchange Rates",
      "value": "getExchangeRates",
      "action": "Get exchange rates",
      "routing": {
        "request": {
          "qs": {
            "date": "={{ $parameter[\"date\"] || undefined }}",
            "source_currency": "={{ $parameter[\"source_currency\"] || undefined }}",
            "converted_currency": "={{ $parameter[\"converted_currency\"] || undefined }}"
          },
          "url": "/exchange_rates",
          "method": "GET"
        }
      },
      "description": "Get a list of exchange rates with optional filters",
      "resource": "exchangeRates"
    },
    {
      "name": "Exchange Value",
      "value": "exchangeValue",
      "action": "Exchange value",
      "routing": {
        "request": {
          "qs": {
            "value": "={{ $parameter[\"value\"] }}",
            "source_currency": "={{ $parameter[\"source_currency\"] }}",
            "converted_currency": "={{ $parameter[\"converted_currency\"] }}"
          },
          "url": "/exchange_rates/exchange_value",
          "method": "GET"
        }
      },
      "description": "Exchange a value from one currency to another",
      "resource": "exchangeRates"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage invoice meta information",
      "resource": "invoices"
    },
    {
      "name": "Get Invoices",
      "value": "getInvoices",
      "action": "Get invoices",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "invoice_id": "={{ $parameter[\"invoice_id_filter\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
            "create_date[0]": "={{ $parameter[\"create_date_from\"] || undefined }}",
            "create_date[1]": "={{ $parameter[\"create_date_to\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}"
          },
          "url": "/invoices",
          "method": "GET"
        }
      },
      "description": "Get a list of invoices for this administration",
      "resource": "invoices"
    },
    {
      "name": "Get Invoice",
      "value": "getInvoice",
      "action": "Get invoice",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_payments": "={{ $parameter[\"get_payments\"] || undefined }}",
            "get_vat_totals": "={{ $parameter[\"get_vat_totals\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_contact_meta": "={{ $parameter[\"get_contact_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "get_reservation_meta": "={{ $parameter[\"get_reservation_meta\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single invoice by id",
      "resource": "invoices"
    },
    {
      "name": "Add Invoice",
      "value": "addInvoice",
      "action": "Add invoice",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "/invoices",
          "method": "POST"
        }
      },
      "description": "Add a new empty concept email to the administration",
      "resource": "invoices"
    },
    {
      "name": "Update Invoice",
      "value": "updateInvoice",
      "action": "Update invoice",
      "routing": {
        "request": {
          "qs": {
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a invoice contact",
      "resource": "invoices"
    },
    {
      "name": "Delete Invoice",
      "value": "deleteInvoice",
      "action": "Delete invoice",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a invoice from the administration",
      "resource": "invoices"
    },
    {
      "name": "Finalize Invoice",
      "value": "finalizeInvoice",
      "action": "Finalize invoice",
      "routing": {
        "request": {
          "qs": {
            "delay": "={{ $parameter[\"delay\"] || undefined }}"
          },
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/finalize",
          "method": "POST"
        }
      },
      "description": "Invoices are started in status concept a can be changed",
      "resource": "invoices"
    },
    {
      "name": "Cancel Delayed Finalized Invoice",
      "value": "cancelDelayedFinalizedInvoice",
      "action": "Cancel delayed finalized invoice",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/cancel_finalize",
          "method": "POST"
        }
      },
      "description": "Invoices are started in status concept a can be changed",
      "resource": "invoices"
    },
    {
      "name": "Create Credit",
      "value": "createCredit",
      "action": "Create credit",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter[\"invoice_id\"]}}/credit",
          "method": "POST"
        }
      },
      "description": "Create a credit note for an invoice",
      "resource": "invoices"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage kiosk meta information",
      "resource": "kiosks"
    },
    {
      "name": "Get Kiosks",
      "value": "getKiosks",
      "action": "Get kiosks",
      "routing": {
        "request": {
          "url": "/kiosks",
          "method": "GET"
        }
      },
      "description": "Get a list of kiosks for this administration",
      "resource": "kiosks"
    },
    {
      "name": "Get Kiosk",
      "value": "getKiosk",
      "action": "Get kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single kiosk by id",
      "resource": "kiosks"
    },
    {
      "name": "Update Kiosk",
      "value": "updateKiosk",
      "action": "Update kiosk",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}"
          },
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a kiosk, only provided parameters will be updated",
      "resource": "kiosks"
    },
    {
      "name": "Add Kiosk",
      "value": "addKiosk",
      "action": "Add kiosk",
      "routing": {
        "request": {
          "url": "/kiosks",
          "body": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "brand": "={{ $parameter[\"brand\"] || undefined }}",
            "api_key_id": "={{ $parameter[\"api_key_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty kiosk or add parameters to a kiosk",
      "resource": "kiosks"
    },
    {
      "name": "Delete Kiosk",
      "value": "deleteKiosk",
      "action": "Delete kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a kiosk from the administration by ID",
      "resource": "kiosks"
    },
    {
      "name": "Install Kiosk",
      "value": "installKiosk",
      "action": "Install kiosk",
      "routing": {
        "request": {
          "url": "=/kiosks/{{$parameter[\"kiosk_id\"]}}/install",
          "method": "POST"
        }
      },
      "description": "Installs a kiosk from the administration by ID",
      "resource": "kiosks"
    },
    {
      "name": "Get Ledgers",
      "value": "getLedgers",
      "action": "Get ledgers",
      "routing": {
        "request": {
          "url": "/ledgers",
          "method": "GET"
        }
      },
      "description": "Get a list of ledgers for this administration",
      "resource": "ledgers"
    },
    {
      "name": "Get Ledger",
      "value": "getLedger",
      "action": "Get ledger",
      "routing": {
        "request": {
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single ledger by id",
      "resource": "ledgers"
    },
    {
      "name": "Add Ledger",
      "value": "addLedger",
      "action": "Add ledger",
      "routing": {
        "request": {
          "url": "/ledgers",
          "body": {
            "name": "={{ $parameter[\"name\"] }}",
            "type": "={{ $parameter[\"type\"] }}",
            "number": "={{ $parameter[\"number\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new ledger to the administration",
      "resource": "ledgers"
    },
    {
      "name": "Update Ledger",
      "value": "updateLedger",
      "action": "Update ledger",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "number": "={{ $parameter[\"number\"] || undefined }}"
          },
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a ledger, only provided parameters will be updated",
      "resource": "ledgers"
    },
    {
      "name": "Delete Ledger",
      "value": "deleteLedger",
      "action": "Delete ledger",
      "routing": {
        "request": {
          "url": "=/ledgers/{{$parameter[\"ledger_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a ledger from the administration by ID",
      "resource": "ledgers"
    },
    {
      "name": "Get License Plates",
      "value": "getLicensePlates",
      "action": "Get license plates",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "force_dates": "={{ $parameter[\"force_dates\"] || undefined }}",
            "license_plate": "={{ $parameter[\"license_plate\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_reservation": "={{ $parameter[\"get_reservation\"] || undefined }}",
            "end_date_operator": "={{ $parameter[\"end_date_operator\"] || undefined }}",
            "start_date_operator": "={{ $parameter[\"start_date_operator\"] || undefined }}"
          },
          "url": "/license_plates",
          "method": "GET"
        }
      },
      "description": "Get a list of license plates from the system",
      "resource": "licensePlates"
    },
    {
      "name": "Get License Plate",
      "value": "getLicensePlate",
      "action": "Get license plate",
      "routing": {
        "request": {
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single license plate by ID",
      "resource": "licensePlates"
    },
    {
      "name": "Check Valid License Plate",
      "value": "checkValidLicensePlate",
      "action": "Check valid license plate",
      "routing": {
        "request": {
          "qs": {
            "plate": "={{ $parameter[\"plate\"] || undefined }}"
          },
          "url": "/license_plates/check_plate",
          "method": "GET"
        }
      },
      "description": "Validate a license plate",
      "resource": "licensePlates"
    },
    {
      "name": "Add License Plate",
      "value": "addLicensePlate",
      "action": "Add license plate",
      "routing": {
        "request": {
          "url": "/license_plates",
          "body": {
            "plate": "={{ $parameter[\"plate\"] }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new license plate",
      "resource": "licensePlates"
    },
    {
      "name": "Update License Plate",
      "value": "updateLicensePlate",
      "action": "Update license plate",
      "routing": {
        "request": {
          "qs": {
            "plate": "={{ $parameter[\"plate\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "end_date": "={{ $parameter[\"end_date\"] || undefined }}",
            "start_date": "={{ $parameter[\"start_date\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}"
          },
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing license plate",
      "resource": "licensePlates"
    },
    {
      "name": "Delete License Plate",
      "value": "deleteLicensePlate",
      "action": "Delete license plate",
      "routing": {
        "request": {
          "url": "=/license_plates/{{$parameter[\"license_plate_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a license plate by ID",
      "resource": "licensePlates"
    },
    {
      "name": "Get Logs",
      "value": "getLogs",
      "action": "Get logs",
      "routing": {
        "request": {
          "url": "/api/logs",
          "method": "GET"
        }
      },
      "description": "Get a list of log entries",
      "resource": "logs"
    },
    {
      "name": "Add Log",
      "value": "addLog",
      "action": "Add log",
      "routing": {
        "request": {
          "url": "/logs",
          "body": {
            "type": "={{ $parameter[\"type\"] }}",
            "type_id": "={{ $parameter[\"type_id\"] }}",
            "severity": "={{ $parameter[\"severity\"] }}",
            "description": "={{ $parameter[\"description\"] }}"
          },
          "method": "POST"
        }
      },
      "description": "Add a new log entry",
      "resource": "logs"
    },
    {
      "name": "Price Calculation",
      "value": "calculatePrice",
      "action": "Calculate price",
      "routing": {
        "request": {
          "qs": {
            "code": "={{ $parameter[\"code\"] || undefined }}",
            "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
            "card_id": "={{ $parameter[\"card_id\"] || undefined }}",
            "persons": "={{ $parameter[\"persons\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "timezone": "={{ $parameter[\"timezone\"] || undefined }}",
            "departure": "={{ $parameter[\"departure\"] || undefined }}",
            "age_tables": "={{ $parameter[\"age_tables\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "get_deposit": "={{ $parameter[\"get_deposit\"] || undefined }}",
            "get_options": "={{ $parameter[\"get_options\"] || undefined }}",
            "timeslot_id": "={{ $parameter[\"timeslot_id\"] || undefined }}",
            "birth_tables": "={{ $parameter[\"birth_tables\"] || undefined }}",
            "history_date": "={{ $parameter[\"history_date\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}",
            "reservation_id": "={{ $parameter[\"reservation_id\"] || undefined }}",
            "get_taxes_price": "={{ $parameter[\"get_taxes_price\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
            "get_guests_price": "={{ $parameter[\"get_guests_price\"] || undefined }}",
            "search_alternative": "={{ $parameter[\"search_alternative\"] || undefined }}",
            "get_discounts_price": "={{ $parameter[\"get_discounts_price\"] || undefined }}",
            "get_available_places": "={{ $parameter[\"get_available_places\"] || undefined }}",
            "get_required_options_price": "={{ $parameter[\"get_required_options_price\"] || undefined }}"
          },
          "url": "/price_calculation",
          "method": "GET"
        }
      },
      "description": "With the price calculation API you can calculate a price",
      "resource": "priceCalculation"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage product meta information",
      "resource": "products"
    },
    {
      "name": "Get Products",
      "value": "getProducts",
      "action": "Get products",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "deal_id": "={{ $parameter[\"deal_id\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "/products",
          "method": "GET"
        }
      },
      "description": "Get a list of products for this administration",
      "resource": "products"
    },
    {
      "name": "Get Product",
      "value": "getProduct",
      "action": "Get product",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_tags": "={{ $parameter[\"get_tags\"] || undefined }}",
            "translations": "={{ $parameter[\"translations\"] || undefined }}"
          },
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single product by id",
      "resource": "products"
    },
    {
      "name": "Update Product",
      "value": "updateProduct",
      "action": "Update product",
      "routing": {
        "request": {
          "qs": {
            "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
            "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a product, only provided parameters will be updated",
      "resource": "products"
    },
    {
      "name": "Add Product",
      "value": "addProduct",
      "action": "Add product",
      "routing": {
        "request": {
          "url": "/products",
          "body": {
            "meta": "={{ $parameter[\"metaFields\"]?.field?.filter(f => f.value !== \"\" && f.value !== undefined)?.map(f => ({ key: f.key, value: f.value })) || [] }}",
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "category": "={{ $parameter[\"category\"] || undefined }}",
            "percentage": "={{ $parameter[\"percentage\"] || undefined }}",
            "price_incl": "={{ $parameter[\"price_incl\"] || undefined }}",
            "description": "={{ $parameter[\"description\"] || undefined }}",
            "vat_procent": "={{ $parameter[\"vat_procent\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty product or add parameters to a product",
      "resource": "products"
    },
    {
      "name": "Delete Product",
      "value": "deleteProduct",
      "action": "Delete product",
      "routing": {
        "request": {
          "url": "=/products/{{$parameter[\"product_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes a product from the administration by ID",
      "resource": "products"
    },
    {
      "name": "Prices",
      "value": "prices",
      "action": "Prices",
      "description": "HTTP methods for prices of a rate",
      "resource": "rates"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "HTTP methods for meta of a rate",
      "resource": "rates"
    },
    {
      "name": "Get Rates",
      "value": "getRates",
      "action": "Get rates",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}"
          },
          "url": "/rates",
          "method": "GET"
        }
      },
      "description": "Get a list of rates",
      "resource": "rates"
    },
    {
      "name": "Get Rate",
      "value": "getRate",
      "action": "Get rate",
      "routing": {
        "request": {
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single rate by ID",
      "resource": "rates"
    },
    {
      "name": "Update Rate",
      "value": "updateRate",
      "action": "Update rate",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] || undefined }}",
            "closed": "={{ $parameter[\"closed\"] !== undefined && $parameter[\"closed\"] !== \"\" ? $parameter[\"closed\"] : undefined }}",
            "rules[0]": "={{ $parameter[\"rules\"]?.table ? ( Array.isArray($parameter[\"rules\"].table) ? JSON.stringify({ type: $parameter[\"rules\"].table[0].type, amount: String($parameter[\"rules\"].table[0].amount) }) : JSON.stringify({ type: $parameter[\"rules\"].table.type, amount: String($parameter[\"rules\"].table.amount) }) ) : undefined }}",
            "parent_id": "={{ $parameter[\"parent_id\"] || undefined }}",
            "maximum_stay": "={{ $parameter[\"maximum_stay\"] || undefined }}",
            "minimum_stay": "={{ $parameter[\"minimum_stay\"] || undefined }}"
          },
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing rate",
      "resource": "rates"
    },
    {
      "name": "Add Rate",
      "value": "addRate",
      "action": "Add rate",
      "routing": {
        "request": {
          "url": "/rates",
          "body": "={{ Object.assign({}, ( $parameter.name ? { name: $parameter.name } : {} ), ( $parameter.status ? { status: $parameter.status } : {} ), ( $parameter.parent_id ? { parent_id: $parameter.parent_id } : {} ), ( $parameter.closed !== undefined && $parameter.closed !== \"\" ? { closed: $parameter.closed } : {} ), ( $parameter.minimum_stay ? { minimum_stay: $parameter.minimum_stay } : {} ), ( $parameter.maximum_stay ? { maximum_stay: $parameter.maximum_stay } : {} ), ($parameter.rules?.table ? { rules: (Array.isArray($parameter.rules.table) ? $parameter.rules.table.map(r => ({ type: r.type, amount: String(r.amount) })) : [{ type: $parameter.rules.table.type, amount: String($parameter.rules.table.amount) }]) } : {}) ) }}",
          "method": "POST"
        }
      },
      "description": "Create a new rate",
      "resource": "rates"
    },
    {
      "name": "Delete Rate",
      "value": "deleteRate",
      "action": "Delete rate",
      "routing": {
        "request": {
          "url": "=/rates/{{$parameter[\"rate_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a rate by ID",
      "resource": "rates"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage reservation meta information",
      "resource": "reservations"
    },
    {
      "name": "Get Reservations",
      "value": "getReservations",
      "action": "Get reservations",
      "routing": {
        "request": {
          "qs": {
            "type": "={{ $parameter[\"type\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "status": "={{ $parameter[\"status\"] || undefined }}",
            "arrival": "={{ $parameter[\"arrival\"] || undefined }}",
            "admin_id": "={{ $parameter[\"admin_id\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "group_id": "={{ $parameter[\"group_id\"] || undefined }}",
            "meta_key": "={{ $parameter[\"meta_key\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "place_id": "={{ $parameter[\"place_id\"] || undefined }}",
            "departure": "={{ $parameter[\"departure\"] || undefined }}",
            "channel_id": "={{ $parameter[\"channel_id\"] || undefined }}",
            "contact_id": "={{ $parameter[\"contact_id\"] || undefined }}",
            "meta_value": "={{ $parameter[\"meta_value\"] || undefined }}",
            "create_date": "={{ $parameter[\"create_date\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "last_modified": "={{ $parameter[\"last_modified\"] || undefined }}",
            "meta_operator": "={{ $parameter[\"meta_operator\"] || undefined }}",
            "accommodation_id": "={{ $parameter[\"accommodation_id\"] || undefined }}",
            "arrival_operator": "={{ $parameter[\"arrival_operator\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "departure_operator": "={{ $parameter[\"departure_operator\"] || undefined }}",
            "get_invoice_payment": "={{ $parameter[\"get_invoice_payment\"] || undefined }}",
            "create_date_operator": "={{ $parameter[\"create_date_operator\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "last_modified_operator": "={{ $parameter[\"last_modified_operator\"] || undefined }}"
          },
          "url": "/reservations",
          "method": "GET"
        }
      },
      "description": "You have a lot of possibilities to get information about multiple reservations",
      "resource": "reservations"
    },
    {
      "name": "Get Reservation",
      "value": "getReservation",
      "action": "Get reservation",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rows": "={{ $parameter[\"get_rows\"] || undefined }}",
            "get_booker": "={{ $parameter[\"get_booker\"] || undefined }}",
            "get_contact": "={{ $parameter[\"get_contact\"] || undefined }}",
            "get_invoices": "={{ $parameter[\"get_invoices\"] || undefined }}",
            "filter_root_meta": "={{ $parameter[\"filter_root_meta\"] || undefined }}",
            "get_co_travelers": "={{ $parameter[\"get_co_travelers\"] || undefined }}",
            "get_invoice_meta": "={{ $parameter[\"get_invoice_meta\"] || undefined }}",
            "get_payment_terms": "={{ $parameter[\"get_payment_terms\"] || undefined }}",
            "get_invoice_payments": "={{ $parameter[\"get_invoice_payments\"] || undefined }}",
            "get_invoice_rowsfilter": "={{ $parameter[\"get_invoice_rowsfilter\"] || undefined }}"
          },
          "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
          "method": "GET"
        }
      },
      "description": "You also can get the individual reservation, it is possible to get extra data on the reservation when needed",
      "resource": "reservations"
    },
    {
      "name": "Create Reservation",
      "value": "createReservation",
      "action": "Create reservation",
      "description": "Create a reservation using different methods",
      "resource": "reservations"
    },
    {
      "name": "Delete Reservation",
      "value": "deleteReservation",
      "action": "Delete reservation",
      "routing": {
        "request": {
          "url": "=/reservations/{{$parameter[\"reservation_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a reservation by ID",
      "resource": "reservations"
    },
    {
      "name": "Get Tags",
      "value": "getTags",
      "action": "Get tags",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "search": "={{ $parameter[\"search\"] || undefined }}"
          },
          "url": "/tags",
          "method": "GET"
        }
      },
      "description": "Get a list of tags",
      "resource": "tags"
    },
    {
      "name": "Get Tag",
      "value": "getTag",
      "action": "Get tag",
      "routing": {
        "request": {
          "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
          "method": "GET"
        }
      },
      "description": "Get a single tag by ID",
      "resource": "tags"
    },
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag",
      "routing": {
        "request": {
          "qs": {
            "name": "={{ $parameter[\"name\"] }}"
          },
          "url": "/tags",
          "method": "POST"
        }
      },
      "description": "Add a new tag",
      "resource": "tags"
    },
    {
      "name": "Delete Tag",
      "value": "deleteTag",
      "action": "Delete tag",
      "routing": {
        "request": {
          "url": "={{ $parameter[\"resource\"] + \"/\" + $parameter[\"tagId\"] }}",
          "method": "DELETE"
        }
      },
      "description": "Delete a tag by ID",
      "resource": "tags"
    },
    {
      "name": "Get Timezones",
      "value": "getTimezones",
      "action": "Get timezones",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "country_code": "={{ $parameter[\"country_code\"] || undefined }}"
          },
          "url": "/timezones",
          "method": "GET"
        }
      },
      "description": "Get a list of timezones with optional filters",
      "resource": "timezones"
    },
    {
      "name": "Meta",
      "value": "meta",
      "action": "Meta",
      "description": "Manage user meta information",
      "resource": "users"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "Get users",
      "routing": {
        "request": {
          "qs": {
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}",
            "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
            "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
          },
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "Get a list of users for this administration",
      "resource": "users"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get user",
      "routing": {
        "request": {
          "qs": {
            "get_meta": "={{ $parameter[\"get_meta\"] || undefined }}",
            "get_rights": "={{ $parameter[\"get_rights\"] || undefined }}",
            "get_administrations": "={{ $parameter[\"get_administrations\"] || undefined }}"
          },
          "url": "=/users/{{$parameter[\"user_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single user by id",
      "resource": "users"
    },
    {
      "name": "Update User",
      "value": "updateUser",
      "action": "Update user",
      "routing": {
        "request": {
          "qs": {
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
          },
          "url": "=/users/{{$parameter[\"user_id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a user, only provided parameters will be updated",
      "resource": "users"
    },
    {
      "name": "Add User",
      "value": "addUser",
      "action": "Add user",
      "routing": {
        "request": {
          "url": "/users",
          "body": {
            "email": "={{ $parameter[\"email\"] || undefined }}",
            "last_name": "={{ $parameter[\"last_name\"] || undefined }}",
            "first_name": "={{ $parameter[\"first_name\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty user or add parameters to a user",
      "resource": "users"
    },
    {
      "name": "Get Widgets",
      "value": "getWidgets",
      "action": "Get widgets",
      "routing": {
        "request": {
          "qs": {
            "area": "={{ $parameter[\"area\"] || undefined }}",
            "count": "={{ $parameter[\"count\"] || undefined }}",
            "limit": "={{ $parameter[\"limit\"] || undefined }}",
            "order": "={{ $parameter[\"order\"] || undefined }}",
            "offset": "={{ $parameter[\"offset\"] || undefined }}",
            "order_by": "={{ $parameter[\"order_by\"] || undefined }}"
          },
          "url": "/widgets",
          "method": "GET"
        }
      },
      "description": "Get a list of widgets for this administration",
      "resource": "widgets"
    },
    {
      "name": "Get Widget",
      "value": "getWidget",
      "action": "Get widget",
      "routing": {
        "request": {
          "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single widget by id",
      "resource": "widgets"
    },
    {
      "name": "Add Widget",
      "value": "addWidget",
      "action": "Add widget",
      "routing": {
        "request": {
          "url": "/widgets",
          "body": {
            "url": "={{ $parameter[\"url\"] || undefined }}",
            "area": "={{ $parameter[\"area\"] || undefined }}",
            "data": "={{ $parameter[\"data\"] || undefined }}",
            "app_id": "={{ $parameter[\"app_id\"] || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Add either a empty widget or add parameters to a widget",
      "resource": "widgets"
    },
    {
      "name": "Delete Widget",
      "value": "deleteWidget",
      "action": "Delete widget",
      "routing": {
        "request": {
          "url": "=/widgets/{{$parameter[\"widget_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a widget by id",
      "resource": "widgets"
    }
  ]

npm_readme:
  # n8n-nodes-starfish

  This is an n8n community node. It lets you use the Starfish API (CampingCare/HotelCare) in your n8n workflows.

  Starfish is a comprehensive booking and reservation management platform for camping and hotel accommodations, providing APIs for managing contacts, reservations, accommodations, invoices, rates, and more.

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

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Development](#development)
  - [Resources](#resources)
  - [Troubleshooting](#troubleshooting)
  - [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 package provides two nodes:

  ### Starfish (CampingCare/HotelCare) Node

  Regular node for making API calls:

  #### Accommodations API

  - **Get Accommodations** - List accommodations with filtering options
  - **Get Accommodation** - Retrieve a specific accommodation by ID
  - **Add Accommodation** - Create a new accommodation
  - **Update Accommodation** - Modify existing accommodation details
  - **Delete Accommodation** - Remove an accommodation
  - **Places** - Get places, get a single place, and update cleaning status (unknown, clean, wait_for_review, dirty)
  - **Meta Operations** - Manage accommodation metadata (get, update, delete)

  #### Administrations API

  - **Get Administrations** - List all administrations
  - **Get Administration** - Get details of a specific administration
  - **Add Administration** - Create a new administration (full PMS or lite version)
  - **Update Administration** - Modify administration details
  - **Delete Administration** - Remove an administration
  - **Get Places** - List places for a specific administration (filter, search, sort)
  - **Age Tables** - Retrieve and manage age table configurations
  - **Meta Operations** - Manage administration metadata

  #### Availability API

  - **Get Stock** - Check accommodation availability for specific date ranges
  - **Get Places** - Get available places/spots

  #### Categories API

  - **Get Categories** - List all categories
  - **Get Category** - Get a specific category by ID
  - **Add Category** - Create a new category
  - **Update Category** - Modify existing category
  - **Delete Category** - Remove a category

  #### Contacts API

  - **Get Contacts** - List contacts with filtering and pagination
  - **Get Contact** - Retrieve a specific contact by ID
  - **Add Contact** - Create a new contact with metadata support
  - **Update Contact** - Modify existing contact information
  - **Delete Contact** - Remove a contact
  - **Meta Operations** - Manage contact metadata

  #### Exchange Rates API

  - **Get Exchange Rates** - Get currency exchange rates for specific dates
  - **Exchange Value** - Convert amounts between currencies

  #### Invoices API

  - **Get Invoices** - List invoices with filters
  - **Get Invoice** - Get a specific invoice by ID
  - **Add Invoice** - Create a new invoice
  - **Update Invoice** - Modify existing invoice
  - **Delete Invoice** - Remove an invoice
  - **Finalize Invoice** - Finalize an invoice for payment
  - **Cancel Delayed Finalized Invoice** - Cancel a delayed finalization
  - **Create Credit** - Create a credit note for an invoice
  - **Add Rows** - Add line items to an invoice
  - **Meta Operations** - Manage invoice metadata

  #### Kiosks API

  - **Get Kiosks** - List all kiosks
  - **Get Kiosk** - Get a specific kiosk by ID
  - **Add Kiosk** - Create a new kiosk
  - **Update Kiosk** - Modify kiosk details
  - **Delete Kiosk** - Remove a kiosk
  - **Install Kiosk** - Install a kiosk
  - **Meta Operations** - Manage kiosk metadata

  #### Ledgers API

  - **Get Ledgers** - List all ledgers
  - **Get Ledger** - Get a specific ledger by ID
  - **Add Ledger** - Create a new ledger
  - **Update Ledger** - Modify ledger details
  - **Delete Ledger** - Remove a ledger

  #### License Plates API

  - **Get License Plates** - List license plates with filtering
  - **Get License Plate** - Get a specific license plate by ID
  - **Check Valid License Plate** - Validate a license plate
  - **Add License Plate** - Create a new license plate entry
  - **Update License Plate** - Modify existing license plate
  - **Delete License Plate** - Remove a license plate

  #### Logs API

  - **Get Logs** - Retrieve log entries
  - **Add Log** - Create a new log entry for tracking activities related to reservations, contacts, invoices, or accommodations

  #### Price Calculation API

  - **Calculate Price** - Get pricing information before creating a reservation with support for age tables, birthdates, discount codes, and channels

  #### Products API

  - **Get Products** - List all products with filtering options
  - **Get Product** - Get a specific product by ID
  - **Add Product** - Create a new product with multiple meta fields support
  - **Update Product** - Modify existing product details including meta fields
  - **Delete Product** - Remove a product
  - **Meta Operations** - Manage product metadata (get, update, delete)

  #### Rates API

  - **Get Rates** - List all rates
  - **Get Rate** - Get a specific rate by ID
  - **Add Rate** - Create a new rate
  - **Update Rate** - Modify existing rate
  - **Delete Rate** - Remove a rate
  - **Get Prices** - Retrieve prices for a specific rate and date range
  - **Update Prices** - Modify rate prices for specific dates
  - **Meta Operations** - Manage rate metadata

  #### Reservations API

  - **Get Reservations** - List all reservations with filtering
  - **Get Reservation** - Get a specific reservation by ID
  - **Create Reservation** - Create a new reservation (with price calculation or forced data)
  - **Delete Reservation** - Remove a reservation
  - **Meta Operations** - Manage reservation metadata

  #### Tags API

  - **Get Tags** - List all tags
  - **Get Tag** - Get a specific tag by ID
  - **Add Tag** - Create a new tag
  - **Delete Tag** - Remove a tag

  #### Timezones API

  - **Get Timezones** - List all available timezones

  #### Users API

  - **Get Users** - List all users
  - **Get User** - Get a specific user by ID
  - **Add User** - Create a new user
  - **Update User** - Modify user details
  - **Meta Operations** - Manage user metadata

  #### Widgets API

  - **Get Widgets** - List all widgets
  - **Get Widget** - Get a specific widget by ID
  - **Add Widget** - Create a new widget
  - **Update Widget** - Modify widget details
  - **Delete Widget** - Remove a widget

  ### Starfish (CampingCare/HotelCare) Trigger Node

  Webhook trigger node for real-time events:

  - Automatically creates and manages webhooks in Starfish
  - Supports multiple event types (reservations, contacts, invoices, etc.)
  - Receives real-time updates when data changes in Starfish
  - Includes signature validation for security

  ## Credentials

  ### Setting up API Credentials

  1. In n8n, go to **Credentials** > **New**
  2. Search for "Starfish (CampingCare/HotelCare) API"
  3. Enter your API credentials:
     - **API Key**: Your Starfish API key
     - **Webhook Secret** (optional): Value used to validate incoming webhooks; Starfish will echo it in the `X-Webhook-Secret` header and requests without it will be rejected.

  ### Obtaining Your API Key

  1. Log in to your Starfish dashboard (CampingCare or HotelCare)
  2. Navigate to Settings > API Keys
  3. Generate or copy your API key
  4. Paste it into the n8n credentials field

  The API key is used for authentication with all Starfish API endpoints. When provided, the webhook secret secures incoming webhooks.

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Node.js version:** >= 20.15
  - **Tested with:** n8n 1.0.0+

  This node uses the Starfish API v21. Ensure your API key has access to the required endpoints.

  ## Usage

  ### Getting Started

  If you're new to n8n, check out the [Try it out](https://docs.n8n.io/try-it-out/) documentation to get started.

  ### Example 1: Create a Contact

  1. Add the "Starfish (CampingCare/HotelCare)" node
  2. Select **Resource**: Contacts API
  3. Select **Operation**: Add Contact
  4. Fill in required fields:
     - Email (required)
     - First Name
     - Last Name
     - Phone, Address, etc. (optional)

  The API allows creating contacts with minimal information and adding data as needed.

  ### Example 2: Create a Reservation

  1. Add the "Starfish (CampingCare/HotelCare)" node
  2. Select **Resource**: Reservations API
  3. Select **Operation**: Create Reservation
  4. Choose creation method:
     - **Using Price Calculation**: First calculate price, then create reservation
     - **Force with Own Data**: Provide all required data directly

  For the price calculation method:

  1. First use Price Calculation API to get `calculation_id` and `hash`
  2. Then create the reservation using these values

  ### Example 3: Listen for Webhook Events

  1. Add the "Starfish (CampingCare/HotelCare) Trigger" node
  2. Select events to listen for (e.g., "reservation_create", "contact_update")
  3. Activate the workflow
  4. The webhook will be automatically registered with Starfish
  5. When events occur, the workflow will be triggered

  ### Important Notes

  - **Date Format**: Always use YYYY-MM-DD format for dates.
  - **Required Fields**: Some operations have required fields (marked with \*)
  - **Meta Fields**: Many resources support custom metadata via meta operations
  - **Pagination**: Use `count` and `limit` parameters for large datasets
  - **Boolean Parameters**: Use string values "0" or "1" for boolean query parameters (examples: `get_meta`, `get_media`, `count`)
  - **Field Mapping**: When updating resources, only provided parameters will be updated
  - **Cleaning Status**: Accommodation places cleaning uses the `/cleaning` path and statuses `unknown|clean|wait_for_review|dirty`

  ## Development

  - Install dependencies: `pnpm install`
  - Build: `pnpm run build` (cleans `dist`, runs TypeScript, then `gulp build:icons`)
  - Dev watch: `pnpm run dev`
  - Lint: `pnpm run lint` (use `pnpm run lintfix` to auto-fix)
  - Format: `pnpm run format`

  ### Deploy to local n8n container (Windows)

  - Run `win_docker_deploy.bat` from the repo root to build and copy the node into a Dockerized n8n instance. Ensure Docker Desktop is running and your container name matches what the script expects.

  ### Webhook trigger validation

  - The trigger node validates webhook signatures; configure events in the node, activate the workflow, and ensure the public URL is reachable by Starfish.

  ### Resource coverage quick view

  | Resource | Key operations |
  | --- | --- |
  | Accommodations | get, get by id, add/update/delete, meta, places, cleaning status |
  | Administrations | get, get by id, add/update/delete, meta, age tables, places |
  | Reservations | get, get by id, create, delete, meta |
  | Contacts | get, get by id, add/update/delete, meta |
  | Rates | get, get by id, add/update/delete, prices get/update, meta |
  | Invoices | get, get by id, add/update/delete, finalize/cancel, credit, rows, meta |
  | Products | get, get by id, add/update/delete, meta |
  | Others | Kiosks, Ledgers, License Plates, Exchange Rates, Logs, Categories, Tags, Users, Widgets, Timezones |

  ## Resources

  - [Starfish API Documentation](https://support.starfish.care/faq/n8n/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [GitHub Repository](https://github.com/CampingCare/n8n-node)
  - [CampingCare Website](https://www.camping.care)
  - [HotelCare Website](https://www.hotel.care)

  ## Version History

  ### Version 2.0.2 (Current)

  - Added accommodations places coverage (get places, get place, update cleaning status via `/cleaning`)
  - Fixed cleaning status endpoint path for accommodation places
  - Existing coverage retained: Invoices, Rates (pricing and metadata), Kiosks, Ledgers, License Plates, Exchange Rates, Logs, Categories, Tags, Users, and meta operations across major resources
  - Enhanced webhook trigger with signature validation and improved error handling

  ### Version 1.0.6

  - Broader API coverage across accommodations, reservations, contacts, and meta operations
  - Enhanced README documentation

  ### Version 1.0.0

  - Initial release
  - Support for Contacts, Reservations, and Accommodations
  - Webhook trigger support
  - Price calculation features
  - Administrations and Timezones support

  ---

  ## Troubleshooting

  ### Common Issues

  **"Invalid API Key" error**

  - Verify your API key in the Starfish dashboard
  - Check that the key hasn't expired
  - Update the key in n8n credentials if necessary

  **Webhook not receiving events**

  - Ensure the workflow is activated
  - Verify the webhook exists in your Starfish dashboard (Settings > Webhooks)
  - Check that n8n is accessible from the internet (for webhooks to work)
  - Review your firewall and network settings

  **Date format errors**

  - Ensure all dates use YYYY-MM-DD format
  - Check your system timezone settings

  **Meta operations not working**

  - Verify the resource supports meta operations
  - Check that the meta key is valid for the resource type
  - Some meta operations may require specific permissions
  - Ensure your API key has the necessary scopes

  **Rate limiting issues**

  - Implement delays between API calls if needed
  - Check the API documentation for rate limits
  - Consider batching operations where possible

  **Connection timeouts**

  - Check your internet connection
  - Verify the Starfish API endpoint is accessible
  - Try again after a few moments

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch: `git checkout -b feature/my-feature`
  3. Commit your changes: `git commit -am 'Add new feature'`
  4. Push to the branch: `git push origin feature/my-feature`
  5. Submit a pull request

  ## License

  [MIT](LICENSE.md)

  ## Support

  For support:

  - Check the [API Documentation](https://support.starfish.care/faq/n8n/)
  - Open an issue on [GitHub](https://github.com/CampingCare/n8n-node/issues)
  - Contact Starfish support for API-related questions

  ## Credits

  Created by the CampingCare development team.

  Built with the [n8n nodes starter](https://github.com/n8n-io/n8n-nodes-starter).

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Starfish API, a platform for managing camping and hotel bookings, reservations, and related operational data.","capabilities":["CRUD operations for Accommodations (list, get, create, update, delete)","CRUD operations for Administrations (list, get, create, update, delete)","CRUD operations for Categories (list, get, create, update, delete)","CRUD operations for Contacts (list, get, create, update, delete)","CRUD operations for Invoices (list, get, create, update, delete, finalize, cancel, credit)","CRUD operations for Kiosks (list, get, create, update, delete, install)","CRUD operations for Ledgers (list, get, create, update, delete)","CRUD operations for License Plates (list, get, create, update, delete, validate)","CRUD operations for Products (list, get, create, update, delete)","CRUD operations for Rates (list, get, create, update, delete)"],"authentication":"API key required (implied by 'Credentials' section and standard API node behavior, though specific method not detailed in provided text)","commonUseCases":["Automating camping or hotel reservation creation and management","Syncing guest contact information between systems","Managing inventory and availability for accommodations","Processing invoices and generating credit notes","Calculating dynamic pricing based on age or discounts"],"limitations":["Limited to the Starfish API's supported endpoints","Requires a valid Starfish API integration and credentials","Some advanced features may depend on specific Starfish plan permissions (e.g., PMS vs lite version)"],"relatedNodes":["n8n-nodes-starfish.campingCare","n8n-nodes-starfish.hotelCare","n8n-nodes-starfish","n8n-nodes-starfish.campingCare","n8n-nodes-starfish.hotelCare"]}


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

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

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

npm_readme:
  # n8n-nodes-reka

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

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

  ## Operations

  ### Video Clipping

  - Automatically clip a video from a URL

  ### Vision

  - Question and Answer (Q&A) from video

  - Question and Answer (Q&A) from image

  ### Speech

  - soon

  ### Research

  - soon

  ## Credentials

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

  ## Installation

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

  ## Usage

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

  ### Clip

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

  ### Q&A

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

  Example: 

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


  ## Resources

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

  ## 🤝 Contributions

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

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

  ## License

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

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


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

updated_at: 2026-04-16 09:43:36
author_name: sudotong
author_github_url: https://github.com/firefliesai/n8n-nodes-fireflies.git
npm_package_name: @firefliesai/n8n-nodes-fireflies
npm_version: 2.2.0
community_fetched_at: 2026-04-16T09:43:36.135Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcript",
      "options": [
        {
          "name": "AI App",
          "value": "aiApp"
        },
        {
          "name": "AskFred",
          "value": "askfred"
        },
        {
          "name": "Audio",
          "value": "audio"
        },
        {
          "name": "Bite",
          "value": "bite"
        },
        {
          "name": "Channel",
          "value": "channel"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Meeting",
          "value": "meeting"
        },
        {
          "name": "Team Analytics",
          "value": "teamAnalytics"
        },
        {
          "name": "Transcript",
          "value": "transcript"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAIAppOutputs",
      "options": [
        {
          "name": "Get Outputs",
          "value": "getAIAppOutputs",
          "action": "Get outputs of an AI app",
          "description": "Retrieve AI app outputs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiApp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getThreads",
      "options": [
        {
          "name": "Continue Thread",
          "value": "continueThread",
          "action": "Continue an existing ask fred thread",
          "description": "Continue an existing conversation thread with a follow-up question"
        },
        {
          "name": "Create Thread",
          "value": "createThread",
          "action": "Create a new ask fred thread",
          "description": "Create a new conversation thread with a question about meetings"
        },
        {
          "name": "Delete Thread",
          "value": "deleteThread",
          "action": "Delete an ask fred thread",
          "description": "Delete a conversation thread and all its messages"
        },
        {
          "name": "Get Thread",
          "value": "getThread",
          "action": "Get an ask fred thread",
          "description": "Get a specific thread with all its messages"
        },
        {
          "name": "Get Threads",
          "value": "getThreads",
          "action": "Get ask fred threads",
          "description": "Get a list of all conversation threads"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "askfred"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadAudio",
      "options": [
        {
          "name": "Upload",
          "value": "uploadAudio",
          "action": "Upload audio",
          "description": "Upload an audio file for transcription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "audio"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBites",
      "options": [
        {
          "name": "Create",
          "value": "createBite",
          "action": "Create a bite",
          "description": "Create a new bite clip from a transcript"
        },
        {
          "name": "Get",
          "value": "getBite",
          "action": "Get a bite",
          "description": "Get details of a specific bite"
        },
        {
          "name": "Get List",
          "value": "getBites",
          "action": "Get a list of bites",
          "description": "Get a list of bite clips"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bite"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getChannels",
      "options": [
        {
          "name": "Get",
          "value": "getChannel",
          "action": "Get a channel",
          "description": "Get details of a specific channel"
        },
        {
          "name": "Get List",
          "value": "getChannels",
          "action": "Get a list of channels",
          "description": "Get all channels in the workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Get List",
          "value": "getContacts",
          "action": "Get a list of contacts",
          "description": "Get all contacts in the workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getActiveMeetings",
      "options": [
        {
          "name": "Add to Live Meeting",
          "value": "addToLiveMeeting",
          "action": "Add fred to a live meeting",
          "description": "Add the Fireflies bot to an active meeting"
        },
        {
          "name": "Get Active Meetings",
          "value": "getActiveMeetings",
          "action": "Get active meetings",
          "description": "Get a list of currently active meetings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "meeting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTeamAnalytics",
      "options": [
        {
          "name": "Get Team Analytics",
          "value": "getTeamAnalytics",
          "action": "Get team analytics",
          "description": "Get analytics for the entire team. Requires admin privileges."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "teamAnalytics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTranscript",
      "options": [
        {
          "name": "Delete",
          "value": "deleteTranscript",
          "action": "Delete a transcript",
          "description": "Permanently delete a transcript"
        },
        {
          "name": "Get",
          "value": "getTranscript",
          "action": "Get a transcript",
          "description": "Get transcript details"
        },
        {
          "name": "Get Analytics",
          "value": "getTranscriptAnalytics",
          "action": "Get analytics of a transcript",
          "description": "Get analytics for a transcript"
        },
        {
          "name": "Get Audio URL",
          "value": "getTranscriptAudioUrl",
          "action": "Get audio URL of a transcript",
          "description": "Get the audio URL for a transcript"
        },
        {
          "name": "Get List",
          "value": "getTranscriptsList",
          "action": "Get a list of transcripts",
          "description": "Get a list of transcripts with optional filters"
        },
        {
          "name": "Get Summary",
          "value": "getTranscriptSummary",
          "action": "Get a summary of a transcript",
          "description": "Get a summary of a transcript"
        },
        {
          "name": "Get Video URL",
          "value": "getTranscriptVideoUrl",
          "action": "Get video URL of a transcript",
          "description": "Get the video URL for a transcript"
        },
        {
          "name": "Revoke Shared Access",
          "value": "revokeSharedMeetingAccess",
          "action": "Revoke shared meeting access",
          "description": "Revoke shared access to a meeting"
        },
        {
          "name": "Share",
          "value": "shareMeeting",
          "action": "Share a meeting",
          "description": "Share a meeting with other users"
        },
        {
          "name": "Update Channel",
          "value": "updateMeetingChannel",
          "action": "Update meeting channel",
          "description": "Move a meeting to a different channel"
        },
        {
          "name": "Update Privacy",
          "value": "updateMeetingPrivacy",
          "action": "Update meeting privacy",
          "description": "Change the privacy setting of a meeting"
        },
        {
          "name": "Update Title",
          "value": "updateMeetingTitle",
          "action": "Update meeting title",
          "description": "Update the title of a meeting"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrentUser",
      "options": [
        {
          "name": "Get Current",
          "value": "getCurrentUser",
          "action": "Get current user",
          "description": "Get information about the current user"
        },
        {
          "name": "Get Groups",
          "value": "getUserGroups",
          "action": "Get user groups",
          "description": "Get a list of user groups in the workspace"
        },
        {
          "name": "Get List",
          "value": "getUsers",
          "action": "Get a list of users",
          "description": "Get a list of users"
        },
        {
          "name": "Set Role",
          "value": "setUserRole",
          "action": "Set user role",
          "description": "Change the role of a user in the workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Outputs",
      "value": "getAIAppOutputs",
      "action": "Get outputs of an AI app",
      "description": "Retrieve AI app outputs",
      "resource": "aiApp"
    },
    {
      "name": "Continue Thread",
      "value": "continueThread",
      "action": "Continue an existing ask fred thread",
      "description": "Continue an existing conversation thread with a follow-up question",
      "resource": "askfred"
    },
    {
      "name": "Create Thread",
      "value": "createThread",
      "action": "Create a new ask fred thread",
      "description": "Create a new conversation thread with a question about meetings",
      "resource": "askfred"
    },
    {
      "name": "Delete Thread",
      "value": "deleteThread",
      "action": "Delete an ask fred thread",
      "description": "Delete a conversation thread and all its messages",
      "resource": "askfred"
    },
    {
      "name": "Get Thread",
      "value": "getThread",
      "action": "Get an ask fred thread",
      "description": "Get a specific thread with all its messages",
      "resource": "askfred"
    },
    {
      "name": "Get Threads",
      "value": "getThreads",
      "action": "Get ask fred threads",
      "description": "Get a list of all conversation threads",
      "resource": "askfred"
    },
    {
      "name": "Upload",
      "value": "uploadAudio",
      "action": "Upload audio",
      "description": "Upload an audio file for transcription",
      "resource": "audio"
    },
    {
      "name": "Create",
      "value": "createBite",
      "action": "Create a bite",
      "description": "Create a new bite clip from a transcript",
      "resource": "bite"
    },
    {
      "name": "Get",
      "value": "getBite",
      "action": "Get a bite",
      "description": "Get details of a specific bite",
      "resource": "bite"
    },
    {
      "name": "Get List",
      "value": "getBites",
      "action": "Get a list of bites",
      "description": "Get a list of bite clips",
      "resource": "bite"
    },
    {
      "name": "Get",
      "value": "getChannel",
      "action": "Get a channel",
      "description": "Get details of a specific channel",
      "resource": "channel"
    },
    {
      "name": "Get List",
      "value": "getChannels",
      "action": "Get a list of channels",
      "description": "Get all channels in the workspace",
      "resource": "channel"
    },
    {
      "name": "Get List",
      "value": "getContacts",
      "action": "Get a list of contacts",
      "description": "Get all contacts in the workspace",
      "resource": "contact"
    },
    {
      "name": "Add to Live Meeting",
      "value": "addToLiveMeeting",
      "action": "Add fred to a live meeting",
      "description": "Add the Fireflies bot to an active meeting",
      "resource": "meeting"
    },
    {
      "name": "Get Active Meetings",
      "value": "getActiveMeetings",
      "action": "Get active meetings",
      "description": "Get a list of currently active meetings",
      "resource": "meeting"
    },
    {
      "name": "Get Team Analytics",
      "value": "getTeamAnalytics",
      "action": "Get team analytics",
      "description": "Get analytics for the entire team. Requires admin privileges.",
      "resource": "teamAnalytics"
    },
    {
      "name": "Delete",
      "value": "deleteTranscript",
      "action": "Delete a transcript",
      "description": "Permanently delete a transcript",
      "resource": "transcript"
    },
    {
      "name": "Get",
      "value": "getTranscript",
      "action": "Get a transcript",
      "description": "Get transcript details",
      "resource": "transcript"
    },
    {
      "name": "Get Analytics",
      "value": "getTranscriptAnalytics",
      "action": "Get analytics of a transcript",
      "description": "Get analytics for a transcript",
      "resource": "transcript"
    },
    {
      "name": "Get Audio URL",
      "value": "getTranscriptAudioUrl",
      "action": "Get audio URL of a transcript",
      "description": "Get the audio URL for a transcript",
      "resource": "transcript"
    },
    {
      "name": "Get List",
      "value": "getTranscriptsList",
      "action": "Get a list of transcripts",
      "description": "Get a list of transcripts with optional filters",
      "resource": "transcript"
    },
    {
      "name": "Get Summary",
      "value": "getTranscriptSummary",
      "action": "Get a summary of a transcript",
      "description": "Get a summary of a transcript",
      "resource": "transcript"
    },
    {
      "name": "Get Video URL",
      "value": "getTranscriptVideoUrl",
      "action": "Get video URL of a transcript",
      "description": "Get the video URL for a transcript",
      "resource": "transcript"
    },
    {
      "name": "Revoke Shared Access",
      "value": "revokeSharedMeetingAccess",
      "action": "Revoke shared meeting access",
      "description": "Revoke shared access to a meeting",
      "resource": "transcript"
    },
    {
      "name": "Share",
      "value": "shareMeeting",
      "action": "Share a meeting",
      "description": "Share a meeting with other users",
      "resource": "transcript"
    },
    {
      "name": "Update Channel",
      "value": "updateMeetingChannel",
      "action": "Update meeting channel",
      "description": "Move a meeting to a different channel",
      "resource": "transcript"
    },
    {
      "name": "Update Privacy",
      "value": "updateMeetingPrivacy",
      "action": "Update meeting privacy",
      "description": "Change the privacy setting of a meeting",
      "resource": "transcript"
    },
    {
      "name": "Update Title",
      "value": "updateMeetingTitle",
      "action": "Update meeting title",
      "description": "Update the title of a meeting",
      "resource": "transcript"
    },
    {
      "name": "Get Current",
      "value": "getCurrentUser",
      "action": "Get current user",
      "description": "Get information about the current user",
      "resource": "user"
    },
    {
      "name": "Get Groups",
      "value": "getUserGroups",
      "action": "Get user groups",
      "description": "Get a list of user groups in the workspace",
      "resource": "user"
    },
    {
      "name": "Get List",
      "value": "getUsers",
      "action": "Get a list of users",
      "description": "Get a list of users",
      "resource": "user"
    },
    {
      "name": "Set Role",
      "value": "setUserRole",
      "action": "Set user role",
      "description": "Change the role of a user in the workspace",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-fireflies

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

  Fireflies is an AI meeting assistant that automatically records, transcribes, and analyzes your meetings. It integrates with popular video conferencing platforms to help teams capture and search through important meeting content.

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

  [Installation](#installation)  
  [Operations](#operations)
  [Usage](#usage)
  [Credentials](#credentials)  
  [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 **Fireflies** node supports 10 resources and 32 operations via the [Fireflies.ai API](https://docs.fireflies.ai).

  ### AI App

  - **Get AI App Outputs** — retrieve results from AI apps installed in the workspace; optional filters: `appId`, `transcriptId`, `skip`, `limit`

  ### AskFred

  AskFred is Fireflies' AI assistant for querying your meetings in natural language.

  - **Get Threads** — list all AskFred conversation threads; optional filter: `transcriptId`
  - **Get Thread** — get a specific thread with all its messages
  - **Create Thread** — start a new conversation; supports meeting filters (`dateRange`, `participants`, `organizers`, `channels`, `transcriptIds`) and response options (`language`, `format`)
  - **Continue Thread** — add a follow-up question to an existing thread
  - **Delete Thread** — remove a thread and all its messages

  ### Audio

  - **Upload Audio** — upload an audio file for transcription; optional: `webhook`, `customLanguage`, `saveVideo`, `bypass_size_check`, `download_auth` (bearer/basic), `attendees`, `client_reference_id`

  ### Bite

  Bites are short video or audio clips created from a transcript.

  - **Get List** — list bite clips; optional filters: `mine`, `transcriptId`, `myTeam`, `limit`, `skip`
  - **Get** — get a specific bite by ID
  - **Create** — create a bite from a transcript; requires `transcriptId`, `startTime`, `endTime`; optional: `name`, `mediaType`, `privacies`

  ### Channel

  - **Get List** — list all channels in the workspace
  - **Get** — get a specific channel by ID

  ### Contact

  - **Get List** — list all contacts in the workspace

  ### Meeting

  - **Get Active Meetings** — list currently active/live meetings
  - **Add to Live Meeting** — add the Fireflies bot to an active meeting; requires `meetingLink`; optional: `title`, `meetingPassword`, `duration`, `language`

  ### Team Analytics

  - **Get Team Analytics** — get analytics for the entire team; requires admin privileges; optional: `startTime`, `endTime` (ISO date strings)

  ### Transcript

  - **Get** — get the full transcript by ID
  - **Get List** — list transcripts with optional filters: `limit`, `skip`, `title`, `fromDate`, `toDate`, `hostEmail`, `organizerEmail`, `participantEmail`, `userId`, `mine`, `keyword`, `scope`, `organizers`, `participants`, `channelId`
  - **Get Summary** — get the AI-generated summary for a transcript
  - **Get Analytics** — get analytics (sentiment, topics, engagement) for a transcript
  - **Get Audio URL** — get the audio download URL for a transcript
  - **Get Video URL** — get the video download URL for a transcript
  - **Delete** — permanently delete a transcript
  - **Share** — share a meeting with email addresses; optional: `expiresAt`
  - **Revoke Shared Access** — revoke shared access from specified email addresses
  - **Update Title** — update the meeting title
  - **Update Privacy** — change the privacy setting (`link` / `owner` / `participants` / `teammates` / `teammatesandparticipants`)
  - **Update Channel** — move a meeting to a different channel

  ### User

  - **Get Current User** — get the profile of the authenticated user
  - **Get List** — list all users in the workspace
  - **Get Groups** — list user groups; optional filter: `mine`
  - **Set Role** — change a user's role (`admin` / `user`); requires admin privileges

  ---

  ## Usage

  ### Fetching and Chaining Transcripts

  The **Get List** operation under Transcript retrieves a paginated list of meetings based on optional filters:

  - `hostEmail`, `organizerEmail`, `participantEmail`
  - `title`, `userId`, `mine`
  - `fromDate` / `toDate`
  - `keyword`, `scope`
  - `organizers`, `participants` (comma-separated)
  - `channelId`

  This is often the first step in a workflow. Iterate over the returned transcript IDs and pass them into:

  - **Get** — fetch the full transcript content
  - **Get Summary** — retrieve [summary](https://docs.fireflies.ai/schema/summary) and key takeaways
  - **Get Analytics** — access [analytics](https://docs.fireflies.ai/schema/analytics) like sentiment, topic extraction, and more

  These operations chain naturally for reporting, insights, or downstream automation.

  📘 For a full reference of transcript fields and response structure, see the [Fireflies Transcript Schema](https://docs.fireflies.ai/schema/transcript).

  ### Working with Bites

  Bites are short clips cut from a transcript. Use **Create** to clip a specific time range from a meeting by providing `transcriptId`, `startTime`, and `endTime`. You can set a `name`, choose `mediaType` (audio or video), and control visibility with `privacies`.

  Use **Get List** to browse existing bites, optionally filtering to your own clips (`mine`) or your team's (`myTeam`).

  ### Live Meetings

  Use **Get Active Meetings** to see which meetings are currently in progress. Once you have a meeting link, **Add to Live Meeting** sends the Fireflies bot to join and record it. You can pass an optional `title`, `meetingPassword`, expected `duration`, and transcription `language`.

  ### Team Analytics

  **Get Team Analytics** returns workspace-wide analytics and requires admin privileges. Pass `startTime` and `endTime` as ISO date strings to scope the report to a specific period.

  ## Credentials

  To use the Fireflies node, you need to authenticate with your Fireflies API key.

  1. Log in to your [Fireflies.ai](https://fireflies.ai) account
  2. Go to Settings > Developer Settings
  3. Generate or copy your existing API key
  4. Use this API key in your n8n credentials for the Fireflies node

  The node uses API Key authentication to securely connect to the Fireflies.ai API.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Fireflies.ai API documentation](https://docs.fireflies.ai)

  ## Version history

  ### 2.2.0

  - ✨ **New Resources**: Meeting, Channel, Bite, Contact, Team Analytics
  - 🆕 **New Operations**:
    - **Transcript**: `Delete`, `Share`, `Revoke Shared Access`, `Update Title`, `Update Privacy`, `Update Channel`
    - **User**: `Get Groups`, `Set Role`
    - **Meeting**: `Get Active Meetings`, `Add to Live Meeting`
    - **Channel**: `Get`, `Get List`
    - **Bite**: `Get`, `Get List`, `Create`
    - **Contact**: `Get List`
    - **Team Analytics**: `Get Team Analytics` (requires admin privileges)
  - 🔍 **Extended Filters**: `Get Transcripts List` now supports filtering by keyword, scope, organizers, participants, and channel ID
  - 🔧 **Audio Enhancements**: `Upload Audio` now supports `bypass_size_check` and `download_auth` (bearer/basic) for authenticated downloads

  ### 2.1.0

  - ✨ **New Resource**: Added AskFred resource for AI-powered meeting Q&A
  - 🆕 **New Operations**:
    - `Get Threads`: List all AskFred conversation threads
    - `Get Thread`: Retrieve a specific thread with all messages
    - `Create Thread`: Start a new conversation with AskFred
    - `Continue Thread`: Add follow-up questions to existing threads
    - `Delete Thread`: Remove threads and their messages
  - 🔍 **Meeting Filters**: Create Thread supports filtering by date range, participants, organizers, channels, and transcript IDs
  - 🌐 **Response Options**: Configurable response language and format mode (markdown/plaintext)

  ### 2.0.0

  - ✨ **New Operations**: Added `GetTranscriptVideoUrl` and `GetTranscriptAudioUrl` operations for direct media access
  - 🔧 **Enhanced Error Handling**: Comprehensive GraphQL error detection with detailed error codes and correlation IDs
  - 🏗️ **Architecture Improvements**: Implemented generic error handling system for consistent error responses across all operations
  - 📚 **Code Quality**: Refactored codebase for better maintainability and reduced duplication
  - ⚠️ **Breaking Changes**: Removed `audio_url` and `video_url` from `GetTranscript` operation due to GraphQL API's partial data response behavior

  ### 1.0.7

  - Fixed nodeParameter handling for all operations

  ### 1.0.6

  - Removed unsupported field from getAiAppOutput operation

  ### 1.0.5

  - Fixes bug in handling input data

  ### 1.0.4

  - Major refactor to separate code into resources and operations

  ### 1.0.3

  - Bump version due to inconsistent build

  ### 1.0.2

  - Refactored Fireflies Node implementation
  - Replaced axios with http helper
  - Added test for credentials

  ### 1.0.1

  - Fixed bugs in array responses

  ### 1.0.0

  - Added operations Get AI App Outputs, Get Meeting Analytics, Get Meeting Summary, Get Transcript, Get Transcripts List, Get Users, and Upload Audio
  - Initial release of the Fireflies.ai node for n8n

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Fireflies.ai API for recording, transcribing, and analyzing meetings from video conferencing platforms.","capabilities":["Retrieve AI app outputs and transcripts with filtering","Query meetings using AskFred natural language assistant","Upload audio files for transcription","Create and manage bite clips from transcripts","List and manage meeting channels","View and manage workspace contacts","Join and monitor live meetings","Access team-wide analytics (admin only)","Retrieve transcript summaries and detailed analytics","Download audio and video URLs from transcripts"],"authentication":"API Key required","commonUseCases":["Automated meeting summarization and reporting","Extracting action items from meeting transcripts","Creating bite-sized clips from long meetings","Monitoring active meetings in real-time","Generating team analytics and sentiment reports"],"limitations":["Team Analytics and user role management require admin privileges","Some operations like transcript deletion are permanent","Live meeting joining requires a valid meeting link"],"relatedNodes":["HTTP Request","Code","Split In Batches","Wait Until"]}


node_type: n8n-nodes-upcellapi.upcellApi
package_name: n8n-nodes-upcellapi
display_name: upcell API
description: Get data from the upcell API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: justinsweeney
author_github_url: https://github.com/UpCell/n8n-node.git
npm_package_name: n8n-nodes-upcellapi
npm_version: 0.3.0
community_fetched_at: 2026-04-16T09:43:36.136Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "enrichMobile",
      "options": [
        {
          "name": "Enrich Mobile",
          "value": "enrichMobile"
        },
        {
          "name": "Enrich Email",
          "value": "enrichEmail"
        },
        {
          "name": "Enrich Social URL",
          "value": "enrichSocialUrl"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post",
          "action": "Enrich mobile",
          "routing": {
            "request": {
              "url": "/enrich/contact",
              "body": {
                "fields": "={{[\"mobile\"]}}",
                "linkedinUrl": "={{ $parameter.linkedinUrl }}"
              },
              "method": "POST"
            }
          },
          "description": "Enrich contact with mobile phone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "enrichMobile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post",
          "action": "Enrich email",
          "routing": {
            "request": {
              "url": "/enrich/email",
              "body": {
                "last_name": "={{ $parameter.lastName }}",
                "first_name": "={{ $parameter.firstName }}",
                "company_domain": "={{ $parameter.companyDomain }}"
              },
              "method": "POST"
            }
          },
          "description": "Enrich contact with email address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "enrichEmail"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post",
          "action": "Enrich social url",
          "routing": {
            "request": {
              "url": "/enrich/socialurl",
              "body": {
                "email": "={{ $parameter.email }}",
                "title": "={{ $parameter.title }}",
                "last_name": "={{ $parameter.lastName }}",
                "first_name": "={{ $parameter.firstName }}",
                "company_name": "={{ $parameter.companyName }}",
                "mobile_phone": "={{ $parameter.mobilePhone }}",
                "company_domain": "={{ $parameter.companyDomain }}",
                "company_social_url": "={{ $parameter.companySocialUrl }}"
              },
              "method": "POST"
            }
          },
          "description": "Enrich contact with social URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "enrichSocialUrl"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Post",
      "value": "post",
      "action": "Enrich mobile",
      "routing": {
        "request": {
          "url": "/enrich/contact",
          "body": {
            "fields": "={{[\"mobile\"]}}",
            "linkedinUrl": "={{ $parameter.linkedinUrl }}"
          },
          "method": "POST"
        }
      },
      "description": "Enrich contact with mobile phone",
      "resource": "enrichMobile"
    },
    {
      "name": "Post",
      "value": "post",
      "action": "Enrich email",
      "routing": {
        "request": {
          "url": "/enrich/email",
          "body": {
            "last_name": "={{ $parameter.lastName }}",
            "first_name": "={{ $parameter.firstName }}",
            "company_domain": "={{ $parameter.companyDomain }}"
          },
          "method": "POST"
        }
      },
      "description": "Enrich contact with email address",
      "resource": "enrichEmail"
    },
    {
      "name": "Post",
      "value": "post",
      "action": "Enrich social url",
      "routing": {
        "request": {
          "url": "/enrich/socialurl",
          "body": {
            "email": "={{ $parameter.email }}",
            "title": "={{ $parameter.title }}",
            "last_name": "={{ $parameter.lastName }}",
            "first_name": "={{ $parameter.firstName }}",
            "company_name": "={{ $parameter.companyName }}",
            "mobile_phone": "={{ $parameter.mobilePhone }}",
            "company_domain": "={{ $parameter.companyDomain }}",
            "company_social_url": "={{ $parameter.companySocialUrl }}"
          },
          "method": "POST"
        }
      },
      "description": "Enrich contact with social URL",
      "resource": "enrichSocialUrl"
    }
  ]

npm_readme:
  # n8n-nodes-upcellapi

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

  upcell provides B2B contact and sales intelligence 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)  <!-- 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

  * Enrich Contact - enrich a contact with mobile data
  * Enrich Email - enrich a contact with a verified email address
  * Enrich Social URL - enrich a contact with a social url

  ## Credentials

  In order to use the upcell node, you will need to first obtain an upcell API key by contacting [sales@upcell.io](mailto:sales@upcell.io).

  ## Compatibility

  This has been tested against n8n version 1.115.3.

  ## Usage

  To understand more about the APIs available from upcell, visit https://api.upcell.io.

  If you are new to n8n and community nodes, you can [Try it out](https://docs.n8n.io/try-it-out/) to get started.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [upcell API Docs](https://www.upcell.io)

ai_documentation_summary:
  {"purpose":"This n8n community node retrieves B2B contact and sales intelligence data from the upcell API, including mobile data, verified email addresses, and social URLs.","capabilities":["Enrich contact with mobile data","Enrich contact with verified email address","Enrich contact with social URL"],"authentication":"API key required (obtained by contacting sales@upcell.io)","commonUseCases":["Lead enrichment in sales workflows","Contact data validation","Social media link retrieval for prospects"],"limitations":["Community node (not official n8n node)","Requires manual API key acquisition via email contact"],"relatedNodes":["n8n-nodes-upcellapi.upcellApi"]}


