# nodes

node_type: n8n-nodes-screenshotbase.screenshotBase
package_name: n8n-nodes-screenshotbase
display_name: ScreenshotBase
description: Capture screenshots via ScreenshotBase API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: everapi-user
author_github_url: https://github.com/everapihq/
npm_package_name: n8n-nodes-screenshotbase
npm_version: 0.1.3
community_fetched_at: 2026-02-19T14:41:52.534Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getScreenshot",
      "options": [
        {
          "name": "Get Screenshot",
          "value": "getScreenshot",
          "action": "Fetch website screenshot",
          "routing": {
            "request": {
              "qs": {
                "url": "={{$parameter[\"url\"]}}"
              },
              "url": "/take",
              "method": "GET"
            }
          },
          "description": "Capture a screenshot from a given URL"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Screenshot",
      "value": "getScreenshot",
      "action": "Fetch website screenshot",
      "routing": {
        "request": {
          "qs": {
            "url": "={{$parameter[\"url\"]}}"
          },
          "url": "/take",
          "method": "GET"
        }
      },
      "description": "Capture a screenshot from a given URL"
    }
  ]

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

  # n8n-nodes-friendgrid

  This repo contains FriendGrid community nodes for [n8n](https://n8n.io), including a [ScreenshotBase](https://screenshotbase.com) node.

  To make your custom node available to the community, you must create it as an npm package, and [submit it to the npm registry](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry).

  If you would like your node to be available on n8n cloud you can also [submit your node for verification](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/).

  ## Prerequisites

  You need the following installed on your development machine:

  * [git](https://git-scm.com/downloads)
  * Node.js and npm. Minimum version Node 20. You can find instructions on how to install both using nvm (Node Version Manager) for Linux, Mac, and WSL [here](https://github.com/nvm-sh/nvm). For Windows users, refer to Microsoft's guide to [Install NodeJS on Windows](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows).
  * Install n8n with:
    ```
    npm install n8n -g
    ```
  * Recommended: follow n8n's guide to [set up your development environment](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/).

  ## Using this starter

  These are the basic steps for working with the starter. For detailed guidance on creating and publishing nodes, refer to the [documentation](https://docs.n8n.io/integrations/creating-nodes/).

  1. [Generate a new repository](https://github.com/n8n-io/n8n-nodes-starter/generate) from this template repository.
  2. Clone your new repo:
     ```
     git clone https://github.com/<your organization>/<your-repo-name>.git
     ```
  3. Run `npm i` to install dependencies.
  4. Open the project in your editor.
  5. Browse the examples in `/nodes` and `/credentials`. Modify the examples, or replace them with your own nodes.
  6. Update the `package.json` to match your details.
  7. Run `npm run lint` to check for errors or `npm run lintfix` to automatically fix errors when possible.
  8. Test your node locally. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for guidance.
  9. Replace this README with documentation for your node. Use the [README_TEMPLATE](README_TEMPLATE.md) to get started. See below for ScreenshotBase usage.
  10. Update the LICENSE file to use your details.
  11. [Publish](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry) your package to npm.

  ## More information

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

  ## ScreenshotBase Node

  Capture website screenshots using the ScreenshotBase API.

  ### Credentials

  - Create credentials of type `ScreenshotBase API` and enter your API key (`https://app.screenshotbase.com/register`)).
  - Base URL defaults to `https://app.screenshotbase.com/v1`.

  ### Operation

  - Get Screenshot
    - URL (required)
    - File Name (optional)
    - Advanced: width, height, format (png/jpeg/webp), fullpage

  ### Notes

  - The node performs a GET to `/take` with your key injected by credentials.
  - Output is the HTTP response. Add a downstream node to persist the image as needed.

  ## License

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

ai_documentation_summary:
  {"purpose":"Capture website screenshots using the ScreenshotBase API. The node requests screenshots from ScreenshotBase and returns the HTTP response containing the image.","capabilities":["Get Screenshot operation (requires URL)","Optional File Name parameter","Advanced options: width, height, format (png | jpeg | webp), fullpage","Performs GET to the /take endpoint with the API key injected from credentials","Outputs raw HTTP response (image data) for downstream processing"],"authentication":"API key required (ScreenshotBase API credentials; base URL defaults to https://app.screenshotbase.com/v1)","commonUseCases":["Generate website thumbnails or social preview images","Automated capture of webpages for archiving","Visual monitoring / regression screenshotting in workflows","Create images for reports or notifications by piping the response to storage or file nodes"],"limitations":["Only provides a single 'Get Screenshot' operation (uses GET /take) — no other ScreenshotBase endpoints exposed","Does not persist images itself — outputs raw HTTP response; you must add downstream nodes to save the file","Advanced options are limited to width, height, format, and fullpage","Requires a valid ScreenshotBase account and API key (service-dependent)"],"relatedNodes":[]}


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

updated_at: 2026-02-19 14:41:52
author_name: andrew_io
author_github_url: https://github.com/parsioio/
npm_package_name: n8n-nodes-parsio
npm_version: 0.1.3
community_fetched_at: 2026-02-19T14:41:52.535Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "importFile",
      "options": [
        {
          "name": "Import Document From File",
          "value": "importFile",
          "action": "Import a binary file into an inbox and extract structured data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a binary file into an inbox and extract structured data"
        },
        {
          "name": "Import Text/HTML Document",
          "value": "importTextHtml",
          "action": "Import a text html document into an inbox and extract structured data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a text/html document into an inbox and extract structured data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Import Document From File",
      "value": "importFile",
      "action": "Import a binary file into an inbox and extract structured data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a binary file into an inbox and extract structured data"
    },
    {
      "name": "Import Text/HTML Document",
      "value": "importTextHtml",
      "action": "Import a text html document into an inbox and extract structured data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        }
      },
      "description": "Import a text/html document into an inbox and extract structured data"
    }
  ]

npm_readme:
  # Parsio n8n Node

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

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

  ## About

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

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

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

  ## Operations

  ### Parsio Actions

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

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

  ### Parsio Trigger

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

  ## Credentials

  ### Parsio API Key

  1. Sign in to your [Parsio account](https://app.parsio.io/account)
  2. Go to your account settings
  3. Copy your **API Key**

  In n8n:

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

  For more information, visit the [Parsio documentation](https://help.parsio.io/).

  ## Usage

  ### Parsio Trigger

  **Quick Start:**

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

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

  **What happens:**

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

  **Example Use Cases:**

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

  ### Import Document From File

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

  **Example workflow:**

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

  ### Import Text/HTML Document

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

  **Example workflow:**

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

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Official n8n node for Parsio that imports files or text/HTML into Parsio to extract structured data using AI/ML, and can automatically trigger workflows when documents are parsed.","capabilities":["Import Document From File — upload binary files (PDFs, images, email attachments) to Parsio for automated extraction","Import Text/HTML Document — submit plain text or HTML content (e.g., email body, web page) for parsing","Parsio Trigger (Document Parsed) — webhook trigger that starts workflows when a document has been parsed and returns extracted structured data","Select target Inbox for imports and triggers","Attach custom filename and additional metadata to imports","Outputs parsed/extracted structured data to downstream nodes","Built-in webhook security for the trigger"],"authentication":"API key required (Parsio API Key credential)","commonUseCases":["Automatically parse invoices, receipts or other documents and send email notifications","Save parsed data to spreadsheets or databases (Google Sheets, Airtable)","Create or update CRM records when documents are processed","Trigger approval or routing workflows based on parsed fields","Parse HTML or text content from websites or email bodies for structured data extraction"],"limitations":[],"relatedNodes":["Google Drive (file source)","Read Binary File / File nodes (provide binary input to Parsio)","Google Sheets","Airtable","Email (send notifications)"]}


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

updated_at: 2026-02-19 14:41:52
author_name: thingsboardiot
author_github_url: https://github.com/thingsboard/thingsboard-n8n-node.git
npm_package_name: @thingsboard/n8n-nodes-thingsboard
npm_version: 1.1.1
community_fetched_at: 2026-02-19T14:41:52.536Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "device",
      "options": [
        {
          "name": "Alarm",
          "value": "alarm"
        },
        {
          "name": "Asset",
          "value": "asset"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Dashboard",
          "value": "dashboard"
        },
        {
          "name": "Device",
          "value": "device"
        },
        {
          "name": "Entity Group",
          "value": "entityGroup"
        },
        {
          "name": "Relation",
          "value": "relation"
        },
        {
          "name": "Telemetry",
          "value": "telemetry"
        }
      ],
      "description": "Select which ThingsBoard resource to work with",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDeviceById",
      "options": [
        {
          "name": "Create",
          "value": "createDevice",
          "action": "Create a device",
          "description": "Create a device"
        },
        {
          "name": "Delete",
          "value": "deleteDevice",
          "action": "Delete a device",
          "description": "Delete a device"
        },
        {
          "name": "Get by ID",
          "value": "getDeviceById",
          "action": "Get a device by ID",
          "description": "Fetch a device based on the provided Device ID"
        },
        {
          "name": "Get by Name",
          "value": "getTenantDevice",
          "action": "Get a device by name",
          "description": "Fetch a device by name"
        },
        {
          "name": "Get Many",
          "value": "getTenantDevices",
          "action": "Get devices",
          "description": "Returns a page of devices"
        },
        {
          "name": "Get Many by Customer",
          "value": "getCustomerDevices",
          "action": "Get customer devices",
          "description": "Returns a page of devices assigned to the customer"
        },
        {
          "name": "Get Many by Entity Group",
          "value": "getDevicesByEntityGroupId",
          "action": "Get entity group devices",
          "description": "Returns a page of devices that belongs to the specified Entity Group ID"
        },
        {
          "name": "Get Many for Current User",
          "value": "getUserDevices",
          "action": "Get user devices",
          "description": "Returns a page of devices accessible to the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAssetById",
      "options": [
        {
          "name": "Create",
          "value": "createAsset",
          "action": "Create an asset",
          "description": "Create an asset"
        },
        {
          "name": "Delete",
          "value": "deleteAsset",
          "action": "Delete an asset",
          "description": "Delete an asset"
        },
        {
          "name": "Get by ID",
          "value": "getAssetById",
          "action": "Get asset by id",
          "description": "Fetch an asset based on the provided Asset ID"
        },
        {
          "name": "Get by Name",
          "value": "getTenantAsset",
          "action": "Get asset by name",
          "description": "Fetch an asset by name"
        },
        {
          "name": "Get Many",
          "value": "getTenantAssets",
          "action": "Get tenant assets",
          "description": "Returns a page of assets"
        },
        {
          "name": "Get Many by Customer",
          "value": "getCustomerAssets",
          "action": "Get customer assets",
          "description": "Returns a page of assets assigned to the customer"
        },
        {
          "name": "Get Many by Entity Group",
          "value": "getAssetsByEntityGroupId",
          "action": "Get assets by entity group",
          "description": "Returns a page of devices that belongs to the specified Entity Group ID"
        },
        {
          "name": "Get Many for Current User",
          "value": "getUserAssets",
          "action": "Get user assets",
          "description": "Returns a page of assets accessible to the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "asset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAlarmById",
      "options": [
        {
          "name": "Get All",
          "value": "getAllAlarms",
          "action": "Get all alarms",
          "description": "Returns a page of alarms that belongs to the current owner"
        },
        {
          "name": "Get by ID",
          "value": "getAlarmById",
          "action": "Get alarm by id",
          "description": "Fetch an alarm based on the provided Alarm ID"
        },
        {
          "name": "Get by originator",
          "value": "getAlarms",
          "action": "Get alarms by originator",
          "description": "Returns a page of alarms for the selected entity"
        },
        {
          "name": "Get Highest Severity",
          "value": "getHighestAlarmSeverity",
          "action": "Get alarm highest severity",
          "description": "Search the alarms by originator and return the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE)"
        },
        {
          "name": "Get Info by ID",
          "value": "getAlarmInfoById",
          "action": "Get alarm info by id",
          "description": "Fetch an alarm Info based on the provided Alarm ID"
        },
        {
          "name": "Get Types",
          "value": "getAlarmTypes",
          "action": "Get alarm types",
          "description": "Returns a set of unique alarm types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "alarm"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCustomerById",
      "options": [
        {
          "name": "Create",
          "value": "createCustomer",
          "action": "Create a customer",
          "description": "Create a customer"
        },
        {
          "name": "Delete",
          "value": "deleteCustomer",
          "action": "Delete a customer",
          "description": "Delete a customer"
        },
        {
          "name": "Get by ID",
          "value": "getCustomerById",
          "action": "Get customer by id",
          "description": "Fetch a customer based on the provided Customer ID"
        },
        {
          "name": "Get by Title",
          "value": "getTenantCustomer",
          "action": "Get customer by title",
          "description": "Fetch a customer by title"
        },
        {
          "name": "Get Many",
          "value": "getCustomers",
          "action": "Get customers",
          "description": "Returns a page of customers"
        },
        {
          "name": "Get Many by Entity Group",
          "value": "getCustomersByEntityGroupId",
          "action": "Get customers by entity group",
          "description": "Returns a list of customers based on the provided Entity ID"
        },
        {
          "name": "Get Many for Current User",
          "value": "getUserCustomers",
          "action": "Get user customers",
          "description": "Returns a page of customers available for the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRelation",
      "options": [
        {
          "name": "By From",
          "value": "findByFrom",
          "action": "Get relation by from",
          "description": "Returns list of relation objects for the specified entity by the \"from\" direction"
        },
        {
          "name": "By From (with Relation Type)",
          "value": "findByFromWithRelationType",
          "action": "Get relation by from with relation type",
          "description": "Returns list of relation objects for the specified entity by the \"from\" direction with relation type"
        },
        {
          "name": "By To",
          "value": "findByTo",
          "action": "Get relation by to",
          "description": "Returns list of relation objects for the specified entity by the \"to\" direction"
        },
        {
          "name": "By to (with Relation Type)",
          "value": "findByToWithRelationType",
          "action": "Get relation by to with relation type",
          "description": "Returns list of relation objects for the specified entity by the \"to\" direction with relation type"
        },
        {
          "name": "Get",
          "value": "getRelation",
          "action": "Get a relation",
          "description": "Fetch a specific relation based on the provided parameters"
        },
        {
          "name": "Info by From",
          "value": "findInfoByFrom",
          "action": "Get relation info by from",
          "description": "Fetch relation information for the specified entity by the \"from\" direction"
        },
        {
          "name": "Info by To",
          "value": "findInfoByTo",
          "action": "Get relation info by to",
          "description": "Fetch relation information for the specified entity by the \"to\" direction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "relation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTimeseries",
      "options": [
        {
          "name": "Attribute Keys",
          "value": "getAttributeKeys",
          "action": "Get attribute keys",
          "description": "Returns a set of unique attribute key names for the selected entity"
        },
        {
          "name": "Attribute Keys (by Scope)",
          "value": "getAttributeKeysByScope",
          "action": "Get attribute keys by scope",
          "description": "Returns a set of unique attribute key names for the selected entity and scope"
        },
        {
          "name": "Attributes",
          "value": "getAttributes",
          "action": "Get attributes",
          "description": "Returns a list of attributes for the selected entity"
        },
        {
          "name": "Delete Device Attributes",
          "value": "deleteDeviceAttributes",
          "action": "Delete device attributes",
          "description": "Delete device attributes by keys"
        },
        {
          "name": "Delete Entity Attributes",
          "value": "deleteEntityAttributes",
          "action": "Delete entity attributes",
          "description": "Delete entity attributes by keys"
        },
        {
          "name": "Delete Entity Timeseries",
          "value": "deleteEntityTimeseries",
          "action": "Delete entity timeseries",
          "description": "Delete entity time series data"
        },
        {
          "name": "Save Device Attributes",
          "value": "saveDeviceAttributes",
          "action": "Save device attributes",
          "description": "Creates or updates device attributes"
        },
        {
          "name": "Save Entity Attributes",
          "value": "saveEntityAttributes",
          "action": "Save entity attributes",
          "description": "Creates or updates entity attributes for any entity type"
        },
        {
          "name": "Save Entity Telemetry",
          "value": "saveEntityTelemetry",
          "action": "Save entity telemetry",
          "description": "Creates or updates entity time series data"
        },
        {
          "name": "Save Entity Telemetry with TTL",
          "value": "saveEntityTelemetryWithTTL",
          "action": "Save entity telemetry with ttl",
          "description": "Creates or updates entity time series data with TTL"
        },
        {
          "name": "Timeseries (Latest)",
          "value": "getLatestTimeseries",
          "action": "Get latest timeseries",
          "description": "Returns the latest timeseries data for the selected entity"
        },
        {
          "name": "Timeseries (Range)",
          "value": "getTimeseries",
          "action": "Get timeseries",
          "description": "Returns timeseries data for the selected entity within a specified range"
        },
        {
          "name": "Timeseries Keys",
          "value": "getTimeseriesKeys",
          "action": "Get timeseries keys",
          "description": "Returns a set of unique timeseries key names for the selected entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "telemetry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getEntityGroupById",
      "options": [
        {
          "name": "Get by ID",
          "value": "getEntityGroupById",
          "action": "Get entity group by id",
          "description": "Fetch an entity group based on the provided Entity Group ID"
        },
        {
          "name": "Get by Owner/Name/Type",
          "value": "getEntityGroupByOwnerAndNameAndType",
          "action": "Get entity group by owner name and type",
          "description": "Fetch an entity group based on the provided owner, name, and type"
        },
        {
          "name": "Get Many by Entity",
          "value": "getEntityGroupsForEntity",
          "action": "Get entity groups for entity",
          "description": "Fetch entity groups associated with the provided entity"
        },
        {
          "name": "Get Many by Owner and Type",
          "value": "getEntityGroupsByOwnerAndType",
          "action": "Get entity groups by owner and type",
          "description": "Fetch entity groups based on the provided owner and type"
        },
        {
          "name": "Get Many by Type",
          "value": "getEntityGroupsByType",
          "action": "Get entity groups by type",
          "description": "Fetch entity groups based on the provided type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entityGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDashboardById",
      "options": [
        {
          "name": "Create",
          "value": "createDashboard",
          "action": "Create a dashboard",
          "description": "Create a dashboard"
        },
        {
          "name": "Delete",
          "value": "deleteDashboard",
          "action": "Delete a dashboard",
          "description": "Delete a dashboard"
        },
        {
          "name": "Get by ID",
          "value": "getDashboardById",
          "action": "Get dashboard by id",
          "description": "Fetch a dashboard based on the provided Dashboard ID"
        },
        {
          "name": "Get Customer Dashboards",
          "value": "getCustomerDashboards",
          "action": "Get customer dashboards",
          "description": "Returns a page of dashboards based on the provided Customer ID"
        },
        {
          "name": "Get Dashboards",
          "value": "getDashboards",
          "action": "Get dashboards",
          "description": "Returns a page of dashboards owned by the tenant of a current user"
        },
        {
          "name": "Get User Dashboards",
          "value": "getUserDashboards",
          "action": "Get user dashboards",
          "description": "Returns a page of dashboards available for the current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dashboard"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "createDevice",
      "action": "Create a device",
      "description": "Create a device"
    },
    {
      "name": "Delete",
      "value": "deleteDevice",
      "action": "Delete a device",
      "description": "Delete a device"
    },
    {
      "name": "Get by ID",
      "value": "getDeviceById",
      "action": "Get a device by ID",
      "description": "Fetch a device based on the provided Device ID"
    },
    {
      "name": "Get by Name",
      "value": "getTenantDevice",
      "action": "Get a device by name",
      "description": "Fetch a device by name"
    },
    {
      "name": "Get Many",
      "value": "getTenantDevices",
      "action": "Get devices",
      "description": "Returns a page of devices"
    },
    {
      "name": "Get Many by Customer",
      "value": "getCustomerDevices",
      "action": "Get customer devices",
      "description": "Returns a page of devices assigned to the customer"
    },
    {
      "name": "Get Many by Entity Group",
      "value": "getDevicesByEntityGroupId",
      "action": "Get entity group devices",
      "description": "Returns a page of devices that belongs to the specified Entity Group ID"
    },
    {
      "name": "Get Many for Current User",
      "value": "getUserDevices",
      "action": "Get user devices",
      "description": "Returns a page of devices accessible to the current user"
    },
    {
      "name": "Create",
      "value": "createAsset",
      "action": "Create an asset",
      "description": "Create an asset"
    },
    {
      "name": "Delete",
      "value": "deleteAsset",
      "action": "Delete an asset",
      "description": "Delete an asset"
    },
    {
      "name": "Get by ID",
      "value": "getAssetById",
      "action": "Get asset by id",
      "description": "Fetch an asset based on the provided Asset ID"
    },
    {
      "name": "Get by Name",
      "value": "getTenantAsset",
      "action": "Get asset by name",
      "description": "Fetch an asset by name"
    },
    {
      "name": "Get Many",
      "value": "getTenantAssets",
      "action": "Get tenant assets",
      "description": "Returns a page of assets"
    },
    {
      "name": "Get Many by Customer",
      "value": "getCustomerAssets",
      "action": "Get customer assets",
      "description": "Returns a page of assets assigned to the customer"
    },
    {
      "name": "Get Many by Entity Group",
      "value": "getAssetsByEntityGroupId",
      "action": "Get assets by entity group",
      "description": "Returns a page of devices that belongs to the specified Entity Group ID"
    },
    {
      "name": "Get Many for Current User",
      "value": "getUserAssets",
      "action": "Get user assets",
      "description": "Returns a page of assets accessible to the current user"
    },
    {
      "name": "Get All",
      "value": "getAllAlarms",
      "action": "Get all alarms",
      "description": "Returns a page of alarms that belongs to the current owner"
    },
    {
      "name": "Get by ID",
      "value": "getAlarmById",
      "action": "Get alarm by id",
      "description": "Fetch an alarm based on the provided Alarm ID"
    },
    {
      "name": "Get by originator",
      "value": "getAlarms",
      "action": "Get alarms by originator",
      "description": "Returns a page of alarms for the selected entity"
    },
    {
      "name": "Get Highest Severity",
      "value": "getHighestAlarmSeverity",
      "action": "Get alarm highest severity",
      "description": "Search the alarms by originator and return the highest AlarmSeverity(CRITICAL, MAJOR, MINOR, WARNING or INDETERMINATE)"
    },
    {
      "name": "Get Info by ID",
      "value": "getAlarmInfoById",
      "action": "Get alarm info by id",
      "description": "Fetch an alarm Info based on the provided Alarm ID"
    },
    {
      "name": "Get Types",
      "value": "getAlarmTypes",
      "action": "Get alarm types",
      "description": "Returns a set of unique alarm types"
    },
    {
      "name": "Create",
      "value": "createCustomer",
      "action": "Create a customer",
      "description": "Create a customer"
    },
    {
      "name": "Delete",
      "value": "deleteCustomer",
      "action": "Delete a customer",
      "description": "Delete a customer"
    },
    {
      "name": "Get by ID",
      "value": "getCustomerById",
      "action": "Get customer by id",
      "description": "Fetch a customer based on the provided Customer ID"
    },
    {
      "name": "Get by Title",
      "value": "getTenantCustomer",
      "action": "Get customer by title",
      "description": "Fetch a customer by title"
    },
    {
      "name": "Get Many",
      "value": "getCustomers",
      "action": "Get customers",
      "description": "Returns a page of customers"
    },
    {
      "name": "Get Many by Entity Group",
      "value": "getCustomersByEntityGroupId",
      "action": "Get customers by entity group",
      "description": "Returns a list of customers based on the provided Entity ID"
    },
    {
      "name": "Get Many for Current User",
      "value": "getUserCustomers",
      "action": "Get user customers",
      "description": "Returns a page of customers available for the current user"
    },
    {
      "name": "By From",
      "value": "findByFrom",
      "action": "Get relation by from",
      "description": "Returns list of relation objects for the specified entity by the \"from\" direction"
    },
    {
      "name": "By From (with Relation Type)",
      "value": "findByFromWithRelationType",
      "action": "Get relation by from with relation type",
      "description": "Returns list of relation objects for the specified entity by the \"from\" direction with relation type"
    },
    {
      "name": "By To",
      "value": "findByTo",
      "action": "Get relation by to",
      "description": "Returns list of relation objects for the specified entity by the \"to\" direction"
    },
    {
      "name": "By to (with Relation Type)",
      "value": "findByToWithRelationType",
      "action": "Get relation by to with relation type",
      "description": "Returns list of relation objects for the specified entity by the \"to\" direction with relation type"
    },
    {
      "name": "Get",
      "value": "getRelation",
      "action": "Get a relation",
      "description": "Fetch a specific relation based on the provided parameters"
    },
    {
      "name": "Info by From",
      "value": "findInfoByFrom",
      "action": "Get relation info by from",
      "description": "Fetch relation information for the specified entity by the \"from\" direction"
    },
    {
      "name": "Info by To",
      "value": "findInfoByTo",
      "action": "Get relation info by to",
      "description": "Fetch relation information for the specified entity by the \"to\" direction"
    },
    {
      "name": "Attribute Keys",
      "value": "getAttributeKeys",
      "action": "Get attribute keys",
      "description": "Returns a set of unique attribute key names for the selected entity"
    },
    {
      "name": "Attribute Keys (by Scope)",
      "value": "getAttributeKeysByScope",
      "action": "Get attribute keys by scope",
      "description": "Returns a set of unique attribute key names for the selected entity and scope"
    },
    {
      "name": "Attributes",
      "value": "getAttributes",
      "action": "Get attributes",
      "description": "Returns a list of attributes for the selected entity"
    },
    {
      "name": "Delete Device Attributes",
      "value": "deleteDeviceAttributes",
      "action": "Delete device attributes",
      "description": "Delete device attributes by keys"
    },
    {
      "name": "Delete Entity Attributes",
      "value": "deleteEntityAttributes",
      "action": "Delete entity attributes",
      "description": "Delete entity attributes by keys"
    },
    {
      "name": "Delete Entity Timeseries",
      "value": "deleteEntityTimeseries",
      "action": "Delete entity timeseries",
      "description": "Delete entity time series data"
    },
    {
      "name": "Save Device Attributes",
      "value": "saveDeviceAttributes",
      "action": "Save device attributes",
      "description": "Creates or updates device attributes"
    },
    {
      "name": "Save Entity Attributes",
      "value": "saveEntityAttributes",
      "action": "Save entity attributes",
      "description": "Creates or updates entity attributes for any entity type"
    },
    {
      "name": "Save Entity Telemetry",
      "value": "saveEntityTelemetry",
      "action": "Save entity telemetry",
      "description": "Creates or updates entity time series data"
    },
    {
      "name": "Save Entity Telemetry with TTL",
      "value": "saveEntityTelemetryWithTTL",
      "action": "Save entity telemetry with ttl",
      "description": "Creates or updates entity time series data with TTL"
    },
    {
      "name": "Timeseries (Latest)",
      "value": "getLatestTimeseries",
      "action": "Get latest timeseries",
      "description": "Returns the latest timeseries data for the selected entity"
    },
    {
      "name": "Timeseries (Range)",
      "value": "getTimeseries",
      "action": "Get timeseries",
      "description": "Returns timeseries data for the selected entity within a specified range"
    },
    {
      "name": "Timeseries Keys",
      "value": "getTimeseriesKeys",
      "action": "Get timeseries keys",
      "description": "Returns a set of unique timeseries key names for the selected entity"
    },
    {
      "name": "Get by ID",
      "value": "getEntityGroupById",
      "action": "Get entity group by id",
      "description": "Fetch an entity group based on the provided Entity Group ID"
    },
    {
      "name": "Get by Owner/Name/Type",
      "value": "getEntityGroupByOwnerAndNameAndType",
      "action": "Get entity group by owner name and type",
      "description": "Fetch an entity group based on the provided owner, name, and type"
    },
    {
      "name": "Get Many by Entity",
      "value": "getEntityGroupsForEntity",
      "action": "Get entity groups for entity",
      "description": "Fetch entity groups associated with the provided entity"
    },
    {
      "name": "Get Many by Owner and Type",
      "value": "getEntityGroupsByOwnerAndType",
      "action": "Get entity groups by owner and type",
      "description": "Fetch entity groups based on the provided owner and type"
    },
    {
      "name": "Get Many by Type",
      "value": "getEntityGroupsByType",
      "action": "Get entity groups by type",
      "description": "Fetch entity groups based on the provided type"
    },
    {
      "name": "Create",
      "value": "createDashboard",
      "action": "Create a dashboard",
      "description": "Create a dashboard"
    },
    {
      "name": "Delete",
      "value": "deleteDashboard",
      "action": "Delete a dashboard",
      "description": "Delete a dashboard"
    },
    {
      "name": "Get by ID",
      "value": "getDashboardById",
      "action": "Get dashboard by id",
      "description": "Fetch a dashboard based on the provided Dashboard ID"
    },
    {
      "name": "Get Customer Dashboards",
      "value": "getCustomerDashboards",
      "action": "Get customer dashboards",
      "description": "Returns a page of dashboards based on the provided Customer ID"
    },
    {
      "name": "Get Dashboards",
      "value": "getDashboards",
      "action": "Get dashboards",
      "description": "Returns a page of dashboards owned by the tenant of a current user"
    },
    {
      "name": "Get User Dashboards",
      "value": "getUserDashboards",
      "action": "Get user dashboards",
      "description": "Returns a page of dashboards available for the current user"
    }
  ]

npm_readme:
  # ThingsBoard n8n Node

  ![Banner image](images/banner.png)

  [n8n](https://n8n.io/) is a workflow automation platform that combines traditional business process automation with AI capabilities.

  The **ThingsBoard n8n Node** provides deep and native integration between n8n and the ThingsBoard IoT Platform, enabling you to manage IoT infrastructure directly from n8n workflows.

  ## ✨ Features

  - **Manage IoT devices, assets, and customers** directly from n8n workflows
  - **Access and manipulate telemetry data** in real-time with attribute and time-series operations
  - **Monitor alarms** and create automated responses based on alarm severity and type
  - **Navigate entity relationships** to understand your IoT infrastructure topology
  - **Build AI-powered IoT automation** using n8n AI Agents with natural language commands
  - **Automate complex IoT workflows** with 61 operations across 8 resources (51 operations for Community Edition)

  ## 📖 Documentation

  For detailed documentation including usage examples, workflow patterns, and API reference, visit:

  **[ThingsBoard n8n Node Documentation](https://thingsboard.io/docs/samples/analytics/n8n-node/)**

  ## 🚀 Quick Start

  ### Installation

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

  ### Configuration

  1. In n8n, add ThingsBoard credentials:
     - **Base URL**: `https://demo.thingsboard.io`, `https://thingsboard.cloud` or your instance URL
     - **Authentication Type**: Choose **API Key** (recommended) or **Username / Password**
     - **API Key**: Your ThingsBoard API key (see [API Key documentation](https://thingsboard.io/docs/user-guide/security/api-keys/))
  2. Add the ThingsBoard node to your workflow
  3. Select a resource (Device, Asset, etc.) and operation


  ## 📦 Installation

  ### GUI Installation

  For self-hosted n8n instances, you can install directly via the web interface:

  1. Open n8n in your browser
  2. Navigate to **Settings** → **Community Nodes**
  3. Click **Install a community node**
  4. Enter package name: `@thingsboard/n8n-nodes-thingsboard`
  5. Click **Install**
  6. Wait for installation to complete
  7. Refresh your browser

  **Note**: This method requires owner/admin permissions and is only available for self-hosted n8n (not n8n Cloud).

  ### n8n Cloud

  The ThingsBoard node requires verification to be available on n8n Cloud. n8n Cloud supports a select group of verified community nodes included in their official catalog.

  **Current Status**: Until the node is verified and included in the Cloud-available catalog, use self-hosted n8n (local or Docker) with any installation method above.

  ## 🔧 Verify Installation

  After installation and restart:

  1. Open n8n in your browser (typically `http://localhost:5678`)
  2. Create a new workflow
  3. Click the **+** button to add a node
  4. Search for **"ThingsBoard"** in the node picker
  5. The **ThingsBoard** node should appear in the search results

  If you don't see the node:
  - Verify the npm installation completed without errors
  - Ensure you restarted n8n after installation (for Method 2)
  - Check n8n logs for any loading errors

  ## 🔑 Setting Up Credentials

  Before using the ThingsBoard node, configure your connection credentials:

  1. In n8n, navigate to **Credentials** → **New Credential**
  2. Search for **"ThingsBoard API"**
  3. Fill in the required fields:

  #### Option A: API Key (recommended)

  | Field | Description | Example |
  |-------|-------------|---------|
  | **Base URL** | ThingsBoard instance URL | `https://demo.thingsboard.io` or `https://thingsboard.cloud` |
  | **Authentication Type** | Select **API Key** | |
  | **API Key** | Your ThingsBoard API key | `your-api-key-here` |

  To create an API key, go to your ThingsBoard instance → **API Keys** and generate a new key. See the [API Key documentation](https://thingsboard.io/docs/user-guide/security/api-keys/) for details.

  #### Option B: Username / Password

  | Field | Description | Example |
  |-------|-------------|---------|
  | **Base URL** | ThingsBoard instance URL | `https://demo.thingsboard.io` or `https://thingsboard.cloud` |
  | **Authentication Type** | Select **Username / Password** | |
  | **Username** | Your ThingsBoard account email | `tenant@thingsboard.org` |
  | **Password** | Your ThingsBoard account password | `tenant` |

  4. Click **Save** to store the credentials

  The credentials are encrypted and stored securely by n8n. You can reuse the same credentials across multiple ThingsBoard nodes in different workflows.

  ## 📋 Supported Operations

  ### Device (8 operations)
  - ✅ Create Device (Params/JSON mode)
  - ✅ Delete Device
  - ✅ Get Device by ID
  - ✅ Get Device by Name
  - ✅ Get Tenant Devices
  - ✅ Get Customer Devices
  - ✅ Get Devices by Entity Group (PE only)
  - ✅ Get User Devices (PE only)

  ### Asset (7 operations)
  - ✅ Create Asset (Params/JSON mode)
  - ✅ Delete Asset
  - ✅ Get Asset by ID
  - ✅ Get Asset by Name
  - ✅ Get Tenant Assets
  - ✅ Get Customer Assets
  - ✅ Get Assets by Entity Group (PE only)
  - ✅ Get User Assets (PE only)

  ### Customer (7 operations)
  - ✅ Create Customer (Params/JSON mode)
  - ✅ Delete Customer
  - ✅ Get Customer by ID
  - ✅ Get Customer by Title
  - ✅ Get Customers
  - ✅ Get Customers by Entity Group (PE only)
  - ✅ Get User Customers (PE only)

  ### Dashboard (5 operations)
  - ✅ Create Dashboard (JSON mode)
  - ✅ Delete Dashboard
  - ✅ Get Dashboard by ID
  - ✅ Get Dashboards
  - ✅ Get Customer Dashboards

  ### Telemetry (14 operations)
  - ✅ Get Attributes
  - ✅ Get Attribute Keys
  - ✅ Get Attribute Keys (by Scope)
  - ✅ Get Latest Timeseries
  - ✅ Get Timeseries (Time Range)
  - ✅ Get Timeseries Keys
  - ✅ Save Entity Attributes
  - ✅ Save Device Attributes
  - ✅ Save Entity Telemetry
  - ✅ Save Entity Telemetry with TTL
  - ✅ Delete Entity Attributes
  - ✅ Delete Device Attributes
  - ✅ Delete Entity Timeseries

  ### Alarm (6 operations)
  - ✅ Get All Alarms
  - ✅ Get Alarm by ID
  - ✅ Get Alarm Info by ID
  - ✅ Get Alarms by Originator
  - ✅ Get Highest Severity Alarm
  - ✅ Get Alarm Types

  ### Relation (7 operations)
  - ✅ Get Relation
  - ✅ Find by From
  - ✅ Find by From with Relation Type
  - ✅ Find by To
  - ✅ Find by To with Relation Type
  - ✅ Find Info by From
  - ✅ Find Info by To

  ### Entity Group (5 operations - PE only)
  - ✅ Get Entity Group by ID
  - ✅ Get Entity Groups by Type
  - ✅ Get Entity Groups by Owner and Type
  - ✅ Get Entity Group by Owner/Name/Type
  - ✅ Get Entity Groups for Entity

  **Total: 61 operations across 8 resources**

  ## 🛠️ Development

  ### Quick Start

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

  # Install dependencies
  npm install

  # Build the project
  npm run build

  # Run in development mode (watch)
  npm run dev
  ```

  ### Testing Locally

  ```bash
  # Link the package
  npm link

  # In your n8n directory
  npm link @thingsboard/n8n-nodes-thingsboard

  # Start n8n
  n8n start
  ```

  ## 💡 Usage Examples

  ### Example 1: 🤖 AI Agent Tool - Conversational IoT Control

  Use the ThingsBoard node as a **tool for AI Agents** to enable intelligent, natural language IoT automation.

  ![AI Agent Use Case](images/ai-agent-usecase.png)

  #### How it works

  1. User sends a chat message: *"What devices do I have and what's their status?"*
  2. AI Agent (powered by Google Gemini or OpenAI GPT-4) has access to ThingsBoard tools
  3. Agent autonomously calls:
     - `Get devices in ThingsBoard` → Retrieves device list
     - `Get timeseries in ThingsBoard` → Fetches latest telemetry
  4. Agent responds in natural language with the actual data

  #### Natural language commands

  - *"Show me the temperature of my living room sensor"*
  - *"Which devices are offline right now?"*
  - *"Update the threshold on device X to 30 degrees"*
  - *"Send me an alert if any temperature exceeds 25°C"*

  The AI agent understands context and calls the appropriate ThingsBoard operations automatically!

  ---

  ### Example 2: 💡 Daily Telemetry Export to AWS S3

  **Real-world scenario**: Every night, export device telemetry to S3, but also enrich it with device metadata from your CRM, convert to Parquet format for Athena, and trigger a Lambda function to update your data warehouse. One workflow, multiple outputs.

  **Why use n8n instead of ThingsBoard's native export**:
  - **Multi-destination** - Send the same data to S3 + Snowflake + email report in one workflow
  - **Data transformation** - Enrich telemetry with business context (customer names, locations from CRM)
  - **Custom formats** - Convert to Parquet, Avro, or CSV with specific schemas for your analytics tools
  - **Conditional logic** - Export only specific devices, filter by customer tier, or aggregate before storage
  - **Integration chains** - After S3 upload → Trigger AWS Lambda → Update tracking database → Send Slack notification

  ![Daily telemetry export](images/telemetry-export.png)
  ![Daily telemetry export result](images/telemetry-export-result.png)

  For a complete step-by-step guide with detailed screenshots, see the [full documentation](https://thingsboard.io/docs/samples/analytics/n8n-node/).

  ## 📚 API Reference

  The ThingsBoard n8n node is built on top of the ThingsBoard REST API. For detailed information about API endpoints, request/response formats, and additional parameters, refer to the [ThingsBoard REST API documentation](https://thingsboard.io/docs/reference/rest-api/).

  ## 🔗 Links

  - **npm Package**: [@thingsboard/n8n-nodes-thingsboard](https://www.npmjs.com/package/@thingsboard/n8n-nodes-thingsboard)
  - **GitHub Repository**: [thingsboard/thingsboard-n8n-node](https://github.com/thingsboard/thingsboard-n8n-node)
  - **n8n Documentation**: [docs.n8n.io](https://docs.n8n.io/)
  - **n8n Community**: [community.n8n.io](https://community.n8n.io/)
  - **ThingsBoard REST API**: [REST API Reference](https://thingsboard.io/docs/reference/rest-api/)

  ## 🫶 Support

  If you encounter issues or have questions about the ThingsBoard n8n node:

  - **GitHub Issues**: [Report bugs or request features](https://github.com/thingsboard/thingsboard-n8n-node/issues)
  - **ThingsBoard Community**: [Get help from the community](https://thingsboard.io/community/)
  - **n8n Community**: [n8n community](https://community.n8n.io/)

  ## 📄 License

  MIT License - see the [LICENSE file](https://github.com/thingsboard/thingsboard-n8n-node/blob/master/LICENSE.md) for details.

  ---

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

ai_documentation_summary:
  {"purpose":"Provides native integration between n8n and the ThingsBoard REST API to manage IoT infrastructure, telemetry, alarms, dashboards and related entities from n8n workflows.","capabilities":["Manage devices: create, delete, get by ID/name, list tenant/customer devices","Manage assets: create, delete, get by ID/name, list tenant/customer assets","Manage customers: create, delete, get by ID/title, list customers","Manage dashboards: create (JSON), delete, get by ID, list dashboards, get customer dashboards","Telemetry & attributes: get attributes and attribute keys, get latest timeseries, query timeseries (time range), get timeseries keys","Write telemetry & attributes: save entity/device attributes, save entity telemetry (with optional TTL)","Delete telemetry & attributes: delete entity attributes, device attributes, and entity timeseries","Alarms: list all alarms, get alarm by ID, get alarm info, list alarms by originator, get highest-severity alarm, get alarm types","Navigate entity relationships and topology","Integration with n8n AI Agents to enable natural-language driven IoT automation"],"authentication":"API Key (recommended) or Username/Password (configured in n8n credentials)","commonUseCases":["Provision and manage IoT devices, assets and customers from workflows","Ingest, query and persist telemetry and attributes (real-time and historical)","Monitor and react to alarms automatically (e.g., trigger remediation workflows based on severity)","Build AI-powered automation for IoT using n8n AI Agents and ThingsBoard data","Generate or update dashboards and retrieve dashboard data for reporting"],"limitations":["Not currently verified for n8n Cloud; requires self-hosted n8n until added to Cloud catalog","Some operations are limited to ThingsBoard Professional Edition (PE) — e.g., 'Get Devices by Entity Group', 'Get User Devices', similar PE-only operations for assets/customers","Community Edition exposes fewer operations (51) compared to full 61-operation surface"],"relatedNodes":["n8n AI Agents"]}


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

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

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

npm_readme:
  # n8n-nodes-deliverect

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


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

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

  ## Installation

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

  ## Operations

  Store API: 

  * get stores
  * get snoozed products
  * set snoozed products

  POSAPI

  * sync products

  Channel API

  * publish menu

  ## Credentials

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

  Bearer token support is WIP.

  ## Compatibility

  Tested with N8N 1.97.1

  ## Usage

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

  ## Resources

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

  ## Version history

  v1.0: Initial version

ai_documentation_summary:
  {"purpose":"Provides n8n access to the Deliverect API so workflows can retrieve store data, manage snoozed products, sync POS products, and publish menus to channels.","capabilities":["Store API: get stores","Store API: get snoozed products","Store API: set snoozed products","POS API: sync products","Channel API: publish menu"],"authentication":"Client credentials keypair (API key & secret) required (request from Deliverect). Bearer token support is WIP.","commonUseCases":["Retrieve list of stores and store metadata for routing or reporting","Get and set snoozed products to control product availability per store","Sync product data from POS systems into Deliverect","Publish or update menus across delivery channels from n8n workflows","Automate product/menu changes and propagate them to Deliverect-integrated channels"],"limitations":["Bearer token support is WIP (limited authentication flows until implemented)","Initial community version (v1.0) implements a limited set of Deliverect endpoints (stores, snoozed products, product sync, publish menu)"],"relatedNodes":[]}


node_type: n8n-nodes-pagbank-connect.pagBank
package_name: n8n-nodes-pagbank-connect
display_name: PagBank
description: Integration with PagBank for payment processing
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: r-martins
author_github_url: https://github.com/r-martins/PagBank-n8n.git
npm_package_name: n8n-nodes-pagbank-connect
npm_version: 2.0.2
community_fetched_at: 2026-02-19T14:41:52.537Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createPaymentLink",
      "options": [
        {
          "name": "Create Payment Link",
          "value": "createPaymentLink",
          "action": "Create payment link",
          "description": "Create a payment link"
        },
        {
          "name": "Create PIX Order",
          "value": "createPixOrder",
          "action": "Create PIX order",
          "description": "Create an order with PIX payment"
        },
        {
          "name": "Get Order Status",
          "value": "getOrderStatus",
          "action": "Get order status",
          "description": "Retrieve the status of an order"
        },
        {
          "name": "Create Credit Card Charge",
          "value": "createCreditCardCharge",
          "action": "Create credit card charge",
          "description": "Create a direct credit card charge"
        },
        {
          "name": "Get Connect Key",
          "value": "validateConnectKey",
          "action": "Get Connect Key",
          "description": "Retrieve Connect Key information"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Payment Link",
      "value": "createPaymentLink",
      "action": "Create payment link",
      "description": "Create a payment link"
    },
    {
      "name": "Create PIX Order",
      "value": "createPixOrder",
      "action": "Create PIX order",
      "description": "Create an order with PIX payment"
    },
    {
      "name": "Get Order Status",
      "value": "getOrderStatus",
      "action": "Get order status",
      "description": "Retrieve the status of an order"
    },
    {
      "name": "Create Credit Card Charge",
      "value": "createCreditCardCharge",
      "action": "Create credit card charge",
      "description": "Create a direct credit card charge"
    },
    {
      "name": "Get Connect Key",
      "value": "validateConnectKey",
      "action": "Get Connect Key",
      "description": "Retrieve Connect Key information"
    }
  ]

npm_readme:
  # n8n-nodes-pagbank-connect

  n8n integration with PagBank Connect for Brazilian payment processing.


  ![NPM Downloads](https://img.shields.io/npm/d18m/n8n-nodes-pagbank-connect?label=downloads%20last%2018%20months)
  ![NPM Version](https://img.shields.io/npm/v/n8n-nodes-pagbank-connect)
  ![NPM License](https://img.shields.io/npm/l/n8n-nodes-pagbank-connect)
  ![NPM Last Update](https://img.shields.io/npm/last-update/n8n-nodes-pagbank-connect)

  ## Features

  - ✅ **PIX** - Instant payments with QR Code
  - ✅ **Credit/Debit Card** - Secure card processing
  - ✅ **Payment Links** - Custom checkout
  - ✅ **Recurring Subscriptions** - Recurring payments (coming soon)
  - ✅ **Webhooks** - Real-time notifications
  - ✅ **Sandbox Environment** - Safe testing
  - ✅ **Official Partner** - [PagBank Integrations](https://pbintegracoes.com/?utm_source=n8n) is an Official PagBank Partner since 2014.
  - ✅ **Reduced fees** - You pay less fees on PagBank when using our integrations

  ## Installation

  ```bash
  npm install n8n-nodes-pagbank-connect
  ```

  ## Configuration

  ### 1. Get Credentials

  Visit [PagBank Connect](https://pbintegracoes.com/connect/autorizar/?utm_source=n8n) to get your Connect Key for free

  If you need a Test Connect Key, [click here](https://pbintegracoes.com/connect/sandbox/?utm_source=n8n).

  ### 2. Configure in n8n

  1. Add your Connect key in PagBank Connect credentials
  2. Click Save and check if the connection was successful.

  ## Available Nodes

  ### PagBank (Main)
  - **Create Payment Link** - Generates checkout links for customers to pay on PagBank
  - **Create PIX Order** - Creates PIX payments
  - **Create Credit Card Charge** - Processes a payment with the provided credit card data
  - **Check order status** - Queries the status of an ORDER with PagBank (must have been generated with this connect key)
  - **Validate Connect Key** - Validates the Connect Key configured in your credentials

  ### PagBank Connect Trigger
  - **Payment Trigger** - Receives notifications. You can filter notifications by payment status, payment methods or denial reason.

  ## Data Format

  ### Monetary Values
  All values are in **cents**:
  - R$ 10.00 = 1000
  - R$ 1.50 = 150

  ### CPF/CNPJ
  - CPF: 11 digits (numbers only)
  - CNPJ: 14 digits (numbers only)

  Required for most operations, except payment link creation.

  ## Environments

  ### Sandbox (Test)
  - The environment will be for testing whenever your Connect Key starts with *CONSANDBOX*. Get yours [here](https://pbintegracoes.com/connect/sandbox/?utm_source=n8n).
  - Automatic approval for values < R$ 100
  - 5 minute delay for values between R$ 100-200
  - Ideal for development and testing
  - See [Test Cards](https://ajuda.pbintegracoes.com/hc/pt-br/articles/22375426666253-Cartões-de-Crédito-para-Testes-PagBank)

  ### Production
  - Real payment processing
  - Requires PagBank approval
  - Use only after complete testing

  ## Webhooks

  ### Configuration
  1. Configure the webhook URL in n8n
  2. Add the generated URL in the *Notification URL* field when creating payments and payment links in other actions
  3. Configure filters by status and payment method
  4. Make sure the URL can be accessed from outside without any blocking.

  ### Common Errors
  - **40002 - Buyer email same as seller
  - **40002 - Invalid CPF/CNPJ
  - **40002 - Invalid phone
  - **UNAUTHORIZED - Invalid Connect Key

  ### Validations
  - CPF/CNPJ are automatically validated
  - Phones are formatted

  ## Support

  - **Official Site**: [pbintegracoes.com/n8n](https://pbintegracoes.com/n8n/?utm_source=n8n&utm_medium=github-readme)
  - **Documentation**: [PagBank Integrations](https://ajuda.pbintegracoes.com/hc/pt-br/categories/40055834503053-n8n)
  - **Issues and Support**: [Open a Ticket](https://ajuda.pbintegracoes.com/hc/pt-br/requests/new)

  ## License

  MIT License - see LICENSE file for details.

  ## Contributing

  1. Fork the [project on github](https://github.com/r-martins/PagBank-n8n)
  2. Create a branch for your feature/bugfix
  3. Commit your changes
  4. Push to your local branch
  5. Open a Pull Request to the `develop` branch


  ## Roadmap
  - More installment options
  - Recurring sales

  Subject to change based on community requests.

ai_documentation_summary:
  {"purpose":"Provides n8n integration with PagBank Connect to create and manage Brazilian payments (PIX, credit/debit card, payment links), receive real-time webhook notifications, and support sandbox testing.","capabilities":["Create Payment Link (generate checkout links)","Create PIX Order (generate PIX payments / QR codes)","Create Credit Card Charge (process card payments)","Check Order Status (query order status for orders created with the same Connect Key)","Validate Connect Key","Payment Trigger (webhook) with filters by payment status, payment method, or denial reason","Sandbox environment for testing (CONSANDBOX keys)","Automatic CPF/CNPJ validation and phone formatting","Webhook configuration and real-time notifications"],"authentication":"API key required (PagBank Connect Key). Sandbox keys start with CONSANDBOX.","commonUseCases":["Generate payment links for customer checkout","Create and process PIX payments (instant QR-code payments)","Process one-time credit card charges","Receive and handle payment notifications via webhook triggers","Check payment/order status from workflows"],"limitations":["Recurring subscriptions listed as 'coming soon' (not yet available)","Production use requires PagBank approval","Monetary values must be provided in cents (e.g., R$10.00 = 1000)","CPF must be 11 digits and CNPJ 14 digits (numbers only); required for most operations","Order status checks only work for orders generated with the same Connect Key"],"relatedNodes":["PagBank (Main)","PagBank Connect Trigger"]}


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-02-19 14:41:52
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-02-19T14:41:52.538Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "booking",
      "options": [
        {
          "name": "Availability",
          "value": "availability"
        },
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Order",
          "value": "order"
        },
        {
          "name": "Plan Subscription",
          "value": "planSubscription"
        },
        {
          "name": "Resource",
          "value": "resource"
        },
        {
          "name": "Service",
          "value": "service"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUpcomingIntervals",
      "options": [
        {
          "name": "Get End Times",
          "value": "getEndTimes",
          "action": "Get end times",
          "description": "Get all interval end dates for a start datetime"
        },
        {
          "name": "Get Start Times",
          "value": "getStartTimes",
          "action": "Get start times",
          "description": "Get all interval start dates for a given date"
        },
        {
          "name": "Get Upcoming Intervals",
          "value": "getUpcomingIntervals",
          "action": "Get upcoming intervals",
          "description": "Get a list of upcoming available intervals"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel booking",
          "description": "Cancel an existing booking"
        },
        {
          "name": "Check In",
          "value": "checkIn",
          "action": "Check in booking",
          "description": "Check in a customer for their booking"
        },
        {
          "name": "Check Out",
          "value": "checkOut",
          "action": "Check out booking",
          "description": "Check out a customer from their booking"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get booking",
          "description": "Get a single booking by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many bookings",
          "description": "Get multiple bookings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create customer",
          "description": "Create a new customer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete customer",
          "description": "Delete an existing customer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get customer",
          "description": "Get a single customer by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many customers",
          "description": "Get multiple customers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update customer",
          "description": "Update an existing customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get order",
          "description": "Get a single order by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many orders",
          "description": "Get multiple orders"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "order"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get invoice",
          "description": "Get a single invoice by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "description": "Get multiple invoices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get service",
          "description": "Get a single service by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many services",
          "description": "Get multiple services"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "service"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get resource",
          "description": "Get a single resource by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many resources",
          "description": "Get multiple resources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get plan subscription",
          "description": "Get a single plan subscription by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many plan subscriptions",
          "description": "Get multiple plan subscriptions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "planSubscription"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

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

npm_readme:
  # n8n-nodes-anny

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

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

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

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

  ## Installation

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

  ## Operations

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

  ## Credentials

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Version history

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

ai_documentation_summary:
  {"purpose":"Provide n8n workflow actions and triggers to interact with the anny booking platform — manage bookings, customers, orders, invoices, services/resources, check availability, and receive webhook events.","capabilities":["Bookings: get, list (with filters), create/manage (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 include options","Availability: get upcoming availability intervals for a resource/service combination","API Call: run arbitrary requests against /api/* with custom method, params, headers, and body","Triggers: webhook-based triggers for bookings, customers, orders, and invoices (create/updated/deleted and booking-specific events like started/ended/checked-in/checked-out/cancelled/deleted)","Automatic creation and cleanup of webhook subscriptions for selected events","Include related data via include field when fetching entities"],"authentication":"OAuth2 (preconfigured scopes; choose region: anny.co, anny.eu, staging, or local; complete OAuth flow)","commonUseCases":["Create and manage booking lifecycle events (create, cancel, check-in/check-out) from workflows","Sync or provision customers between systems (create/update/delete)","Process orders and invoices or trigger billing workflows when orders/invoices are created/updated","Fetch resource/service availability to power scheduling flows","React to real-time events using automatic webhook triggers for bookings, customers, orders, and invoices"],"limitations":[],"relatedNodes":["anny Booking","anny Customers","anny Orders","anny Invoices","anny Resources"]}


node_type: n8n-nodes-yepcode.yepCode
package_name: n8n-nodes-yepcode
display_name: YepCode
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: yepcode
author_github_url: https://github.com/yepcode/
npm_package_name: n8n-nodes-yepcode
npm_version: 1.1.0
community_fetched_at: 2026-02-19T14:41:52.539Z
ai_summary_generated_at: 2026-02-19 16:43:57
description:
  YepCode lets you run full processes or dynamic scripts using Node.js or Python, with support for any NPM or PyPI dependency. All in a secure, sandboxed environment.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "run_process",
      "options": [
        {
          "name": "Run Process",
          "value": "run_process",
          "action": "Run process",
          "description": "Move your complex business logic into yep code processes and trigger them from your workflows using dynamic input parameters it s the most flexible way to connect with your ap is and services using real code with zero dev ops overhead"
        },
        {
          "name": "Run Code",
          "value": "run_code",
          "action": "Run code",
          "description": "A lightweight, flexible way to execute Node.js or Python code on demand — directly from your workflows or AI agents. The run_code tool runs in secure cloud sandboxes with full support for NPM and PyPI dependencies (https://yepcode.io/docs/dependencies), access to secrets, APIs, and databases. Perfect for quick scripts, dynamic logic, or AI-generated code."
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run Process",
      "value": "run_process",
      "action": "Run process",
      "description": "Move your complex business logic into yep code processes and trigger them from your workflows using dynamic input parameters it s the most flexible way to connect with your ap is and services using real code with zero dev ops overhead"
    },
    {
      "name": "Run Code",
      "value": "run_code",
      "action": "Run code",
      "description": "A lightweight, flexible way to execute Node.js or Python code on demand — directly from your workflows or AI agents. The run_code tool runs in secure cloud sandboxes with full support for NPM and PyPI dependencies (https://yepcode.io/docs/dependencies), access to secrets, APIs, and databases. Perfect for quick scripts, dynamic logic, or AI-generated code."
    }
  ]

npm_readme:
  ![YepCode Image](https://cdn.prod.website-files.com/632cd328ed2b485519c3f689/68303b945a8746ed63f24a99_yepcode-cover-dev-tool-ai-solutions.png)

  # n8n-nodes-yepcode

  This is an n8n community node that enables you to use [YepCode](https://yepcode.io) within your n8n workflows.

  Easily execute AI-generated code in a secure, scalable environment with full support for dependencies, secrets, logs, and access to APIs or databases—all on a developer-first platform designed to create any integration or automation without DevOps complexity.

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

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

  ## Installation

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

  ## Operations

  ### 1. Run a YepCode Process

  Execute a specific YepCode process by selecting it from your YepCode workspace. This operation allows you to run pre-built processes with parameter mapping and advanced execution options.

  **Key Features:**
  - **Process Selection**: Choose from your available YepCode processes with searchable dropdown
  - **Parameter Mapping**: Map n8n input data to process parameters using a visual resource mapper
  - **Version Control**: Select specific process versions or use the current version
  - **Execution Modes**: 
    - **Run Once for All Items**: Execute the process once with all input items
    - **Run Once for Each Item**: Execute the process separately for each input item
  - **Synchronous/Asynchronous**: Choose whether to wait for execution completion
  - **n8n Context Integration**: Automatically pass n8n workflow data to your process

  **Advanced Options:**
  - **Version Selection**: Run specific published versions of your process
  - **Synchronous Execution**: Wait for completion and get results immediately
  - **Metadata**: Add execution comments and initiator information
  - **n8n Context**: Include workflow metadata, environment variables, and execution info

  **Example Use Cases:**
  - AI/ML model inference
  - Data transformation processes
  - API integrations with complex logic
  - File processing workflows
  - Database operations

  ### 2. Run Code

  Directly execute custom JavaScript or Python code in YepCode from your n8n workflow. This operation provides maximum flexibility for custom logic execution.

  **Key Features:**
  - **Multi-language Support**: Write code in JavaScript (Node.js) or Python
  - **Auto-dependency Management**: Import any NPM or PyPI package - YepCode installs them automatically
  - **n8n Integration**: Access n8n input items and workflow metadata directly in your code
  - **Execution Modes**:
    - **Run Once for All Items**: Process all input items in a single execution
    - **Run Once for Each Item**: Execute code separately for each input item
  - **Secure Environment**: Code runs in YepCode's isolated, secure environment

  **Advanced Options:**
  - **Language Detection**: Auto-detect code language or specify manually
  - **Code Cleanup**: Option to remove code after execution
  - **Metadata**: Add execution comments and initiator information
  - **n8n Context**: Include workflow data and metadata in your code execution

  **Example Use Cases:**
  - Custom data transformations
  - Complex calculations
  - API aggregations
  - Data validation
  - Custom business logic
  - Integration with external services

  ## Credentials

  Authentication is required to use this node. You'll need your YepCode API token, which you can find in your YepCode workspace under `Settings > API credentials`. For YepCode On-Premise, you may also specify a custom API host.

  1. Sign up for [YepCode Cloud](https://cloud.yepcode.io).
  2. Get your API token from `Settings > API credentials` in your YepCode workspace.
  3. Create your n8n credential using this token.
  4. (Optional) Enter a custom API host if using YepCode On-Premise.

  ## Usage

  ### Setting Up Credentials

  1. In your YepCode workspace, go to `Settings > API credentials`
  2. Copy your API token
  3. In n8n, create a new credential for the YepCode node
  4. Paste your API token
  5. (Optional) Set a custom API host for YepCode On-Premise

  ### Using Run Process Operation

  1. **Add the YepCode node** to your workflow
  2. **Select "Run Process"** as the operation
  3. **Choose your process** from the dropdown (searchable)
  4. **Configure parameters** using the resource mapper to map n8n data to process inputs
  5. **Set execution mode**:
     - **Run Once for All Items**: Process all items together
     - **Run Once for Each Item**: Process each item individually
  6. **Configure advanced options** (optional):
     - Enable/disable n8n context integration
     - Select specific process version
     - Set synchronous/asynchronous execution

  ### Using Run Code Operation

  1. **Add the YepCode node** to your workflow
  2. **Select "Run Code"** as the operation
  3. **Write your code** in the code editor (JavaScript or Python)
  4. **Set execution mode**:
     - **Run Once for All Items**: Process all items together
     - **Run Once for Each Item**: Process each item individually
  5. **Configure advanced options** (optional):
     - Specify language (auto-detected by default)
     - Enable/disable n8n context integration
     - Set code cleanup options

  **Example JavaScript Code:**
  ```javascript
  // Import any npm package - YepCode will install it automatically
  const { DateTime } = require("luxon");

  const { n8n } = yepcode.context.parameters;

  const results = [];
  for (const item of n8n.items) {
    results.push({
      ...item.json,
      processedAt: DateTime.now().toISO(),
      transformed: item.json.data * 2
    });
  }

  // Access n8n metadata
  console.log("Environment:", n8n.metadata);

  return results;
  ```

  **Example Python Code:**
  ```python
  # Import any PyPI package - YepCode will install it automatically
  from datetime import datetime

  # Access n8n context
  n8n = yepcode.context.parameters['n8n']

  results = []
  for item in n8n['items']:
      # Process each item
      processed_item = {
          **item['json'],
          'processed_at': datetime.now().isoformat(),
          'status': 'completed'
      }
      results.append(processed_item)

  # Access n8n metadata
  print("Environment:", n8n['metadata'])
  print("Execution ID:", n8n['metadata']['$execution']['id'])

  return results
  ```

  ### Accessing n8n Context

  Both operations can include n8n context data in your YepCode execution:

  - **Input Items**: All data from previous nodes in your workflow
  - **Workflow Metadata**: Environment variables, execution information, and workflow details
  - **Execution Context**: Current execution ID, resume URLs, and other runtime information

  ### Error Handling

  - **Continue on Fail**: Enable this option to continue workflow execution even if YepCode operations fail
  - **Error Information**: Failed executions return detailed error information in the output
  - **Logs**: Access execution logs through the YepCode dashboard or API

  For more information on using n8n community nodes, see the [n8n documentation](https://docs.n8n.io/integrations/#community-nodes). If you are new to n8n, you can get started with the [Try it out](https://docs.n8n.io/try-it-out/) guide.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [YepCode official docs](https://docs.yepcode.io/)
  * [YepCode Coding Rules](https://yepcode.io/docs/yepcode-coding-rules)

ai_documentation_summary:
  {"purpose":"Run YepCode processes or execute dynamic JavaScript/Python code (with NPM/PyPI dependencies) from n8n workflows in a secure, sandboxed environment for integrations, automations, and custom logic execution.","capabilities":["Run a YepCode Process (select process from workspace, map parameters, choose version)","Execute custom code (JavaScript/Node.js or Python) directly from n8n","Auto-install and manage NPM and PyPI dependencies for code executions","Execution modes: Run once for all items or run once per item","Synchronous or asynchronous execution (optionally wait for completion)","n8n context integration: pass workflow items, metadata, environment variables, and execution info to processes/code","Parameter/resource mapper for mapping n8n data to process inputs","Version control: select specific published process versions or use current","Advanced options: language detection, code cleanup (remove code after execution), execution metadata and initiator comments","Support for secrets, logs, and access to external APIs or databases from the YepCode environment"],"authentication":"API key required (YepCode API token); optional custom API host for On-Premise deployments","commonUseCases":["AI/ML model inference called from workflows","Custom data transformations and complex calculations","API integrations and aggregations with custom logic","File processing workflows","Database operations and data validation"],"limitations":[],"relatedNodes":[]}


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

updated_at: 2026-02-19 14:41:52
author_name: quintenkamphuis
author_github_url: https://github.com/quinten-kamphuis/
npm_package_name: n8n-nodes-reachkit
npm_version: 0.1.2
community_fetched_at: 2026-02-19T14:41:52.539Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Blocklist",
          "value": "blocklist"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Conversation",
          "value": "conversation"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Sequence",
          "value": "sequence"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add to blocklist",
          "routing": {
            "request": {
              "url": "/blocklist",
              "method": "POST"
            }
          },
          "description": "Add an email to the blocklist"
        },
        {
          "name": "Check",
          "value": "check",
          "action": "Check if email is blocked",
          "routing": {
            "request": {
              "url": "/blocklist/check",
              "method": "GET"
            }
          },
          "description": "Check if an email is in the blocklist"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Remove from blocklist",
          "routing": {
            "request": {
              "url": "=/blocklist/{{$parameter.entryId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove an email from the blocklist"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get blocklist entries",
          "routing": {
            "request": {
              "url": "/blocklist",
              "method": "GET"
            }
          },
          "description": "Get many blocklist entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blocklist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a campaign",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific campaign"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get campaigns",
          "routing": {
            "request": {
              "url": "/campaigns",
              "method": "GET"
            }
          },
          "description": "Get many campaigns"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get campaign analytics",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/analytics",
              "method": "GET"
            }
          },
          "description": "Get analytics data for a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a campaign",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a campaign status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversation",
          "routing": {
            "request": {
              "url": "=/unibox/conversations/{{$parameter.conversationId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific conversation"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get conversations",
          "routing": {
            "request": {
              "url": "/unibox/conversations",
              "method": "GET"
            }
          },
          "description": "Get many conversations"
        },
        {
          "name": "Reply",
          "value": "reply",
          "action": "Reply to a conversation",
          "routing": {
            "request": {
              "url": "=/unibox/conversations/{{$parameter.conversationId}}/reply",
              "method": "POST"
            }
          },
          "description": "Send a reply in a conversation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an inbox",
          "routing": {
            "request": {
              "url": "=/inboxes/{{$parameter.inboxId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific inbox"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get inboxes",
          "routing": {
            "request": {
              "url": "/inboxes",
              "method": "GET"
            }
          },
          "description": "Get many inboxes"
        },
        {
          "name": "Get Warmup Stats",
          "value": "getWarmupStats",
          "action": "Get warmup statistics",
          "routing": {
            "request": {
              "url": "=/inboxes/{{$parameter.inboxId}}/warmup/stats",
              "method": "GET"
            }
          },
          "description": "Get warmup statistics for an inbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads",
              "method": "POST"
            }
          },
          "description": "Create a new lead in a campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a lead from a campaign"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get leads",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads",
              "method": "GET"
            }
          },
          "description": "Get many leads from a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get sequences",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/sequences",
              "method": "GET"
            }
          },
          "description": "Get many sequences for a campaign"
        },
        {
          "name": "Update Variant",
          "value": "updateVariant",
          "action": "Update a sequence variant",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/variants/{{$parameter.variantId}}",
              "method": "PATCH"
            }
          },
          "description": "Update the enabled status of a sequence variant"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sequence"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add",
      "value": "add",
      "action": "Add to blocklist",
      "routing": {
        "request": {
          "url": "/blocklist",
          "method": "POST"
        }
      },
      "description": "Add an email to the blocklist"
    },
    {
      "name": "Check",
      "value": "check",
      "action": "Check if email is blocked",
      "routing": {
        "request": {
          "url": "/blocklist/check",
          "method": "GET"
        }
      },
      "description": "Check if an email is in the blocklist"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Remove from blocklist",
      "routing": {
        "request": {
          "url": "=/blocklist/{{$parameter.entryId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove an email from the blocklist"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get blocklist entries",
      "routing": {
        "request": {
          "url": "/blocklist",
          "method": "GET"
        }
      },
      "description": "Get many blocklist entries"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a campaign",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific campaign"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get campaigns",
      "routing": {
        "request": {
          "url": "/campaigns",
          "method": "GET"
        }
      },
      "description": "Get many campaigns"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get campaign analytics",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/analytics",
          "method": "GET"
        }
      },
      "description": "Get analytics data for a campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a campaign",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a campaign status"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversation",
      "routing": {
        "request": {
          "url": "=/unibox/conversations/{{$parameter.conversationId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific conversation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get conversations",
      "routing": {
        "request": {
          "url": "/unibox/conversations",
          "method": "GET"
        }
      },
      "description": "Get many conversations"
    },
    {
      "name": "Reply",
      "value": "reply",
      "action": "Reply to a conversation",
      "routing": {
        "request": {
          "url": "=/unibox/conversations/{{$parameter.conversationId}}/reply",
          "method": "POST"
        }
      },
      "description": "Send a reply in a conversation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an inbox",
      "routing": {
        "request": {
          "url": "=/inboxes/{{$parameter.inboxId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific inbox"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get inboxes",
      "routing": {
        "request": {
          "url": "/inboxes",
          "method": "GET"
        }
      },
      "description": "Get many inboxes"
    },
    {
      "name": "Get Warmup Stats",
      "value": "getWarmupStats",
      "action": "Get warmup statistics",
      "routing": {
        "request": {
          "url": "=/inboxes/{{$parameter.inboxId}}/warmup/stats",
          "method": "GET"
        }
      },
      "description": "Get warmup statistics for an inbox"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads",
          "method": "POST"
        }
      },
      "description": "Create a new lead in a campaign"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a lead from a campaign"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get leads",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads",
          "method": "GET"
        }
      },
      "description": "Get many leads from a campaign"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get sequences",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/sequences",
          "method": "GET"
        }
      },
      "description": "Get many sequences for a campaign"
    },
    {
      "name": "Update Variant",
      "value": "updateVariant",
      "action": "Update a sequence variant",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/variants/{{$parameter.variantId}}",
          "method": "PATCH"
        }
      },
      "description": "Update the enabled status of a sequence variant"
    }
  ]

npm_readme:
  # n8n-nodes-reachkit

  This is an n8n community node that lets you use [Reachkit](https://reachkit.ai) in your n8n workflows.

  Reachkit is a cold email outreach platform that helps you manage campaigns, leads, inboxes, and conversations.

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

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

  ## Installation

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

  ## Operations

  This node supports the following resources and operations:

  ### Blocklist

  - **Add**: Add an email to the blocklist
  - **Check**: Check if an email is in the blocklist
  - **Delete**: Remove an email from the blocklist
  - **Get Many**: Get all blocklist entries with pagination and search

  ### Campaign

  - **Get**: Get details of a specific campaign
  - **Get Many**: List all campaigns with pagination and search
  - **Get Analytics**: Get analytics data for a campaign including daily stats and sequence performance
  - **Update**: Update a campaign status (active/paused)

  ### Conversation

  - **Get**: Get details of a specific conversation with all messages
  - **Get Many**: List all conversations with pagination and filtering by folder
  - **Reply**: Send a reply in a conversation

  ### Inbox

  - **Get**: Get details of a specific inbox
  - **Get Many**: List all inboxes with pagination and search
  - **Get Warmup Stats**: Get warmup statistics for an inbox over the last 7 days

  ### Lead

  - **Create**: Create a new lead in a campaign with custom variables
  - **Delete**: Delete a lead from a campaign
  - **Get**: Get details of a specific lead
  - **Get Many**: List all leads in a campaign with pagination and search

  ### Sequence

  - **Get Many**: List all sequences for a campaign with their variants
  - **Update Variant**: Update the enabled status of a sequence variant

  ## Credentials

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

  ### Getting your API key:

  1. Log in to your Reachkit account
  2. Navigate to **Settings → Integrations**
  3. Click **Add API Key**
  4. Enter a name for the key
  5. Copy the API key (it will only be shown once)

  ### Authentication

  The node uses Bearer token authentication. Simply paste your API key in the credentials configuration.

  **Note**: API access is available exclusively for users on the Professional and Agency plans.

  ## Compatibility

  Tested with n8n version 1.x.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Reachkit n8n Documentation](https://reachkit.ai/help/articles/n8n-integration)
  - [Reachkit API Documentation](https://reachkit.ai/help/articles/api-documentation)
  - [Reachkit Webhooks Documentation](https://reachkit.ai/help/articles/webhooks)

  ## Usage Examples

  ### Create leads from a spreadsheet

  1. Use the **Spreadsheet File** node to read your leads
  2. Connect to **Reachkit** node
  3. Select **Lead** resource and **Create** operation
  4. Map the email, first name, last name fields
  5. Set custom variables for personalization

  ### Get campaign analytics

  1. Use the **Reachkit** node
  2. Select **Campaign** resource and **Get Analytics** operation
  3. Enter the campaign ID
  4. Process the daily stats and sequence performance data

  ### Reply to new conversations

  1. Use the **Reachkit** node with **Conversation** → **Get Many**
  2. Filter by folder (primary/others)
  3. Process unread conversations
  4. Use **Conversation** → **Reply** to send responses

  ### Manage blocklist

  1. Add emails to blocklist from bounced leads
  2. Check if an email is blocked before adding to campaign
  3. Clean up your blocklist periodically

  ## Version History

  ### 0.1.0

  - Initial release
  - Support for all major Reachkit API endpoints
  - Full CRUD operations for leads, campaigns, conversations
  - Blocklist management
  - Inbox and warmup stats
  - Sequence variant management

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Provides actions to interact with the Reachkit API from n8n workflows, enabling management of campaigns, leads, inboxes, conversations, blocklist and sequence variants.","capabilities":["Blocklist: Add email, Check email, Delete email, Get many (pagination & search)","Campaign: Get details, Get many (pagination & search), Get analytics (daily stats & sequence performance), Update status (active/paused)","Conversation: Get details (with messages), Get many (pagination & folder filter), Reply to conversation","Inbox: Get details, Get many (pagination & search), Get warmup stats (last 7 days)","Lead: Create lead in campaign (with custom variables), Get lead, Get many (pagination & search), Delete lead","Sequence: Get many (list sequences & variants), Update variant enabled status"],"authentication":"Bearer token (API key required)","commonUseCases":["Create leads from a spreadsheet and add them to Reachkit campaigns","Fetch campaign analytics (daily stats and sequence performance) for reporting","Monitor conversations and automatically reply to or process unread conversations","Manage blocklist (add bounced addresses, check before adding to campaigns, periodic cleanup)","List and manage inboxes and view warmup statistics"],"limitations":["API access requires Reachkit Professional or Agency plan","Authentication only via API key (Bearer token) — no OAuth option documented","Node tested with n8n version 1.x (compatibility beyond 1.x not specified)"],"relatedNodes":["Spreadsheet File","Webhook"]}


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-02-19 14:41:52
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-02-19T14:41:52.540Z
ai_summary_generated_at: 2026-02-19 16:43:57
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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    },
    {
      "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"
    }
  ]

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":"Provides access to the Starfish (CampingCare / HotelCare) REST API from n8n workflows to manage bookings, accommodations, rates, invoices, contacts, and related PMS data.","capabilities":["Accommodations: list, get by ID, create, update, delete","Accommodation places: list places, get single place, update cleaning status (unknown, clean, wait_for_review, dirty)","Accommodations meta operations: get, update, delete metadata","Administrations: list, get by ID, create (full PMS or lite), update, delete","Administration places listing (filter/search/sort) and age table management","Administration meta operations: get, update, delete metadata","Availability: check stock/availability for date ranges, get available places/spots","Categories: list, get by ID, create, update, delete","Contacts: list (filter/paginate), get by ID, create (with metadata), update, delete","Contacts meta operations: get, update, delete metadata"],"authentication":"API key / token (credential required via n8n credentials - see Credentials section)","commonUseCases":["Automate creation and management of reservations based on availability and calculated prices","Synchronize contacts, accommodations, products and rates between Starfish and other systems","Automate invoicing workflows: create, finalize, cancel, and credit invoices","Check availability and stock for date ranges to power booking flows or availability notifications","Update place cleaning status and kiosk installations as part of property operations automation"],"limitations":[],"relatedNodes":[]}


node_type: @scrapeops/n8n-nodes-scrapeops.ScrapeOps
package_name: @scrapeops/n8n-nodes-scrapeops
display_name: ScrapeOps
description: Interact with ScrapeOps Proxy, Parser and Data APIs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: lucashellison
author_github_url: https://github.com/scrapeops/n8n-community-node.git
npm_package_name: @scrapeops/n8n-nodes-scrapeops
npm_version: 0.2.7
community_fetched_at: 2026-02-19T14:41:52.548Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  # ScrapeOps n8n Community Node

  [![npm version](https://badge.fury.io/js/%40scrapeops%2Fn8n-nodes-scrapeops.svg)](https://badge.fury.io/js/%40scrapeops%2Fn8n-nodes-scrapeops)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  The **[ScrapeOps n8n node](https://n8n.io/integrations/scrapeops/)** is a powerful integration that brings ScrapeOps' web scraping capabilities directly into your n8n workflows. This node allows you to leverage ScrapeOps' proxy aggregation, HTML parsing, and structured data extraction services without writing complex code.

  ![ScrapeOps N8N Node](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/n8n-scrapeops-node-integration.png)

  ## What is ScrapeOps?

  [ScrapeOps](https://scrapeops.io) provides a suite of tools to simplify web scraping operations:

  - **🔀 Proxy API**: Access high-quality proxies through a single endpoint for reliable web scraping
  - **📊 Parser API**: Extract structured data from HTML content of popular websites
  - **💾 Data API**: Retrieve and query data from ScrapeOps datasets

  ## ✨ Key Features

  ### 🔀 Proxy API
  - Smart proxy rotation across multiple providers
  - [JavaScript rendering support](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/headless-browser/) for dynamic sites
  - [Anti-bot bypass capabilities](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/anti-bot-bypass/) (Cloudflare, DataDome, etc.)
  - [Geo-targeting options](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/country-geotargeting/)
  - [Mobile and residential proxy support](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/residential-proxies/)
  - [Session management](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/sticky-sessions/) for multi-step scraping

  ### 📊 Parser API
  - Extract structured data from popular websites without maintaining your own parsers
  - **Supported Sites**: [Amazon](https://scrapeops.io/docs/parser-api/parsers/amazon-product-parser/), [eBay](https://scrapeops.io/docs/parser-api/parsers/ebay-product-parser/), [Walmart](https://scrapeops.io/docs/parser-api/parsers/walmart-product-parser/), [Indeed](https://scrapeops.io/docs/parser-api/parsers/indeed-product-parser/), [Redfin](https://scrapeops.io/docs/parser-api/parsers/redfin-product-parser/)
  - **Page Types**: Product pages, search results, reviews, categories
  - Returns clean, structured JSON data

  ### 💾 Data API
  - Direct access to structured data endpoints
  - **[Amazon Product API](https://scrapeops.io/docs/data-api/amazon-product-api/)**: Get product details by ASIN or URL
  - **[Amazon Search API](https://scrapeops.io/docs/data-api/amazon-product-search-api/)**: Search products and get structured results
  - No HTML scraping required - get data in a single request

  ---

  ## 📦 Installation

  ### Method 1: Install via n8n Cloud UI (Recommended)

  If you're using n8n Cloud, you can easily install the ScrapeOps node directly from the UI:

  1. **Sign in to n8n**, open the editor, and click **+** in the top right to open the Nodes panel

  ![Plus Sign in n8n](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/click_plus_n8n_scrapeops.png)

  2. **Search for "ScrapeOps"** node using the search bar. Look for the version marked by a badge ☑. Then, select **install**.

  ![Type ScrapeOps](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/type_scrapeops-n8n.png)

  3. The ScrapeOps node will be installed and appear in your node palette automatically.

  ### Method 2: Install via n8n Settings (Self-Hosted)

  For self-hosted n8n instances:

  1. Open your n8n instance
  2. Navigate to **Settings** → **Community Nodes**
  3. Click **Install a community node**
  4. Enter the package name: `@scrapeops/n8n-nodes-scrapeops`
  5. Click **Install**
  6. Restart your n8n instance when prompted

  ### Method 3: Manual Installation (Self-Hosted)

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

  # Install the ScrapeOps node
  npm install @scrapeops/n8n-nodes-scrapeops

  # Restart n8n
  n8n start
  ```

  ### Method 4: Docker Installation

  For Docker users, add the node to your `docker-compose.yml`:

  ```yaml
  version: '3.8'
  services:
    n8n:
      image: n8nio/n8n
      environment:
        - N8N_COMMUNITY_NODES_ENABLED=true
        - NODE_FUNCTION_ALLOW_EXTERNAL=n8n-nodes-scrapeops
      volumes:
        - ~/.n8n:/home/node/.n8n
  ```

  Then install the node:

  ```bash
  docker exec -it <container_name> npm install @scrapeops/n8n-nodes-scrapeops
  docker restart <container_name>
  ```

  ---

  ## 🔑 Authentication

  ### Getting Your ScrapeOps API Key

  To use the ScrapeOps node, you'll need a **ScrapeOps API key** which you can get by signing up for a [free account here](https://scrapeops.io/app/register/proxy).

  **Steps to get your API key:**

  1. **Sign up for a free account** at [ScrapeOps](https://scrapeops.io/app/register/proxy)
  2. **Verify your email address** (required to activate your API key)
  3. **Visit your dashboard** at [ScrapeOps Dashboard](https://scrapeops.io/app/dashboard)
  4. **Copy your API key** from the dashboard

  ![Get The API Key](./images/scrapeops-dashboard.png)

  > ⚠️ **Important:** You must confirm your email address to activate your API key. Check your inbox for a verification email from ScrapeOps.

  ### Configure Credentials in n8n

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

  ![Create Credentials](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/create_credential_n8n.png)

  2. Search for **"ScrapeOps API"** and enter your API key.

  ![Enter API Key](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/add_key_save.png)

  3. Save and test the credentials.

  ---

  ## 🎯 Quick Start

  ### Adding the Node to a Workflow

  1. Create a new workflow in n8n.
  2. Click Add to Workflow **"ScrapeOps"** node from the palette.

  ![Add to Workflow](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/add%20to%20workflow%20n8n%20scrapeops.png)

  3. Select an API (Proxy, Parser, or Data) and configure parameters.

  ![Choose API Type](https://scrapeops-assets-2.nyc3.cdn.digitaloceanspaces.com/Docs/n8n/3%20types%20of%20API.png)


  You can monitor your usage in the [ScrapeOps Dashboard](https://scrapeops.io/app/dashboard).

  ---

  ## 📚 API Documentation

  ### 🔀 Proxy API

  Route GET/POST requests through proxies to scrape blocked sites.

  **Basic Parameters:**
  - **URL:** Target URL to scrape (required)
  - **Method:** GET or POST (default: GET)  
  - **Return Type:** Default (raw response) or JSON

  **Advanced Options:**

  | Option | Type | Description | Default | Example Values |
  |--------|------|-------------|---------|----------------|
  | **[Follow Redirects](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/follow-redirects/)** | Boolean | Follow HTTP redirects | true | `true`, `false` |
  | **[Keep Headers](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/custom-headers/)** | Boolean | Use your custom headers | false | `true`, `false` |
  | **[Initial Status Code](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/transparent-status-codes/)** | Boolean | Return initial status code | false | `true`, `false` |
  | **[Final Status Code](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/transparent-status-codes/)** | Boolean | Return final status code | false | `true`, `false` |
  | **[Optimize Request](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/optimize-request/)** | Boolean | Auto-optimize settings | false | `true`, `false` |
  | **[Max Request Cost](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/optimize-request/)** | Number | Max credits to use (with optimize) | 0 | `10`, `50`, `100` |
  | **[Render JavaScript](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/headless-browser/)** | Boolean | Enable headless browser | false | `true`, `false` |
  | **[Wait Time](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/wait-time/)** | Number | Wait before capture (ms) | 0 | `3000`, `5000` |
  | **[Wait For](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/wait-for/)** | String | CSS selector to wait for | - | `.product-title`, `#content` |
  | **[Scroll](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/scroll-page/)** | Number | Scroll pixels before capture | 0 | `1000`, `2000` |
  | **[Screenshot](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/screenshot/)** | Boolean | Return base64 screenshot | false | `true`, `false` |
  | **[Device Type](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/device-type/)** | String | Device emulation | desktop | `desktop`, `mobile` |
  | **[Premium Proxies](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/premium-proxies/)** | String | Premium level | level_1 | `level_1`, `level_2` |
  | **[Residential Proxies](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/residential-proxies/)** | Boolean | Use residential IPs | false | `true`, `false` |
  | **[Mobile Proxies](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/mobile-proxies/)** | Boolean | Use mobile IPs | false | `true`, `false` |
  | **[Session Number](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/sticky-sessions/)** | Number | Sticky session ID | 0 | `12345`, `67890` |
  | **[Country](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/country-geotargeting/)** | String | Geo-targeting country | - | `us`, `gb`, `de`, `fr`, `ca`, `au`, `jp`, `in` |
  | **[Bypass](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/anti-bot-bypass/)** | String | Anti-bot bypass level | - | `cloudflare_level_1`, `cloudflare_level_2`, `cloudflare_level_3`, `datadome`, `perimeterx`, `incapsula`, `generic_level_1` to `generic_level_4` |

  **Example Configuration:**
  ```
  API Type: Proxy API
  URL: https://example.com
  Method: GET
  Render JavaScript: true
  Wait Time: 3000
  Country: us
  ```

  ### 📊 Parser API

  Parse HTML into structured JSON for supported domains.

  **Parameters:**
  - **Domain:** [Amazon](https://scrapeops.io/docs/parser-api/parsers/amazon-product-parser/), [eBay](https://scrapeops.io/docs/parser-api/parsers/ebay-product-parser/), [Walmart](https://scrapeops.io/docs/parser-api/parsers/walmart-product-parser/), [Indeed](https://scrapeops.io/docs/parser-api/parsers/indeed-product-parser/), [Redfin](https://scrapeops.io/docs/parser-api/parsers/redfin-product-parser/)
  - **URL:** Page URL (required)
  - **HTML Content:** Raw HTML to parse (required)

  **Example Configuration:**
  ```
  API Type: Parser API
  Domain: Amazon
  URL: https://www.amazon.com/dp/B08N5WRWNW
  HTML Content: {{ $node["Proxy_API"].json.body }}
  ```

  ### 💾 Data API

  Tap into pre-scraped datasets for commerce, jobs, and real estate without maintaining your own crawlers or parsers.

  **Workflow basics**

  - **Domain**: Choose `Amazon`, `eBay`, `Walmart`, `Indeed`, or `Redfin`.
  - **API Type**: Select the dataset endpoint that matches the data you need (product, search, reviews, etc.).
  - **Input Type**: Decide whether you want to identify the record via ID, query, or URL.
  - **Advanced Options**: Provide localization parameters (`country`, `tld`) when available to scope the dataset to a specific market.

  **1. Amazon Product Data (Using URL)**
  ```text
  Domain: Amazon
  API Type: Product API
  Input Type: URL
  Product URL: https://www.amazon.com/dp/B08N5WRWNW
  ```

  **2. Walmart Search Results (Using Query)**
  ```text
  Domain: Walmart
  API Type: Search API
  Input Type: Query
  Search Query: laptop
  Advanced Options: Country = us
  ```

  **Supported Domains:**
  - **Amazon**: Product, Search
  - **eBay**: Product, Search, Feedback, Category, Store
  - **Walmart**: Product, Search, Review, Shop, Browse, Category
  - **Indeed**: Job Search, Job Detail, Company Search/Reviews/Jobs
  - **Redfin**: Sale/Rent Search, Detail, Building, Agent, State



  ---

  ## 🎯 Common Use Cases

  ### 1. **Price Monitoring**
  - Track product prices across multiple e-commerce sites
  - Set up alerts for price drops
  - Generate competitive pricing reports

  ### 2. **Market Research**
  - Collect product reviews and ratings
  - Monitor competitor inventory
  - Track market trends

  ### 3. **Lead Generation**
  - Extract business information from directories
  - Collect job postings from career sites
  - Find real estate listings

  ### 4. **Content Aggregation**
  - Collect news articles
  - Monitor social media mentions
  - Aggregate product descriptions

  ---

  ## 🛠️ Best Practices

  ### 1. Start Simple
  Begin with basic requests and add complexity:
  ```
  1. Basic GET request
  2. Add JavaScript rendering if needed
  3. Add wait conditions
  4. Enable anti-bot bypass if blocked
  ```

  ### 2. Optimize for Cost
  - Use [`optimize_request: true`](https://scrapeops.io/docs/web-scraping-proxy-api-aggregator/advanced-functionality/optimize-request/) for automatic optimization
  - Set `max_request_cost` to control spending
  - Only enable features you need

  ### 3. Handle Dynamic Content
  For JavaScript-heavy sites:
  ```
  Render JavaScript: true
  Wait Time: 3000
  Wait For: .main-content
  Scroll: 1000
  ```

  ### 4. Session Management
  For multi-step scraping:
  ```
  Session Number: 12345
  // Use same number across requests
  ```

  ---

  ## 🐛 Troubleshooting

  ### Node Not Appearing
  **Problem:** ScrapeOps node doesn't show up after installation

  **Solution:**
  1. Ensure n8n was restarted after installation
  2. Check that community nodes are enabled
  3. Verify the installation with: `npm list @scrapeops/n8n-nodes-scrapeops`

  ### Authentication Failures
  **Problem:** "Invalid API Key" error

  **Solution:**
  1. Verify API key is copied correctly (no extra spaces)
  2. Check if API key is active in ScrapeOps dashboard
  3. Ensure you're using the correct credential in the node

  ### Connection Timeouts
  **Problem:** Requests timing out

  **Solution:**
  1. Check your firewall settings
  2. Verify n8n can make external HTTP requests
  3. Test with a simple URL first (like httpbin.org)

  ---

  ## 📖 Resources

  - **[ScrapeOps Documentation](https://scrapeops.io/docs/intro/)** - Complete API documentation
  - **[ScrapeOps n8n Node Documentation](https://scrapeops.io/docs/n8n/overview)** - Complete ScrapeOps n8n Node documentation
  - **[n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)** - n8n integration guide
  - **[ScrapeOps Dashboard](https://scrapeops.io/app/dashboard)** - Monitor usage and performance
  - **[n8n Community Forum](https://community.n8n.io/)** - Get help from the community

  ---

  ## 🤝 Support

  - **ScrapeOps Support:** support@scrapeops.io
  - **n8n Community Forum:** [community.n8n.io](https://community.n8n.io)
  - **GitHub Issues:** [Report bugs or request features](https://github.com/ScrapeOps/n8n-community-node/issues)

  ---

  ## 📄 License

  [MIT](LICENSE.md)

  ---

  **Ready to automate your web scraping?** Get started with the [ScrapeOps n8n integration](https://n8n.io/integrations/scrapeops/) today!

ai_documentation_summary:
  {"purpose":"Provides n8n workflows with access to ScrapeOps' Proxy, Parser, and Data APIs to perform reliable web scraping, HTML parsing, and structured data retrieval without custom scraping code.","capabilities":["Use ScrapeOps Proxy API for proxy aggregation and smart rotation","JavaScript rendering / headless browser support for dynamic pages","Anti-bot bypass capabilities (Cloudflare, DataDome, etc.)","Geo-targeting and country-based proxy selection","Mobile and residential proxy support","Session management / sticky sessions for multi-step scraping","Parser API: extract structured JSON from HTML for supported sites (Amazon, eBay, Walmart, Indeed, Redfin)","Parser API: parse page types including product pages, search results, reviews, categories","Data API: fetch structured product data (e.g., Amazon Product API by ASIN or URL)","Data API: perform product searches (e.g., Amazon Search API) and query ScrapeOps datasets"],"authentication":"API key required (ScrapeOps API key; account signup and email verification required to activate key)","commonUseCases":["Scrape dynamic, JavaScript-rendered websites reliably using ScrapeOps proxy aggregation","Bypass anti-bot protections when scraping (Cloudflare, DataDome, etc.)","Extract structured product, review or search-result data using built-in parsers (Amazon, eBay, Walmart, Indeed, Redfin)","Retrieve Amazon product details or search results directly via the Data API without HTML scraping","Perform multi-step scraping flows that require session/sticky session management"],"limitations":["Requires a ScrapeOps account and activated API key (email verification required)","Parser functionality is limited to supported sites and page types (only the listed parsers/sites are guaranteed)","No OAuth or alternative auth methods documented—only API key credential"],"relatedNodes":[]}


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

updated_at: 2026-02-19 14:41:52
author_name: ejazahmed
author_github_url: https://github.com/IPGeolocation/
npm_package_name: n8n-nodes-ipgeolocation
npm_version: 1.0.0
community_fetched_at: 2026-02-19T14:41:52.549Z
ai_summary_generated_at: 2026-02-19 16:43:57
description:
  Integrate ipgeolocation.io with n8n to automate IP lookup, geolocation, timezone data, and security checks for powerful workflow enrichment.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getIpInfo",
      "options": [
        {
          "name": "Get Abuse Contact Info",
          "value": "getAbuseInfo",
          "action": "Get abuse info",
          "routing": {
            "request": {
              "url": "/v2/abuse",
              "method": "GET"
            }
          },
          "description": "Retrieves abuse contact and reporting information for an IP address, including organization, network, and abuse email details"
        },
        {
          "name": "Get ASN Info",
          "value": "getAsnInfo",
          "action": "Get asn info",
          "routing": {
            "request": {
              "url": "/v2/asn",
              "method": "GET"
            }
          },
          "description": "Retrieves Autonomous System Number (ASN) details for an IP address or ASN, including organization, country, and network information"
        },
        {
          "name": "Get Astronomy Info",
          "value": "getAstronomy",
          "action": "Get astronomy info",
          "routing": {
            "request": {
              "url": "/v2/astronomy",
              "method": "GET"
            }
          },
          "description": "The Astronomy API provides sun, moon data using IP, latitude, longitude, timezone or Location"
        },
        {
          "name": "Get Astronomy Timeseries Information",
          "value": "getAstronomyTimeseries",
          "action": "Get timezone info",
          "routing": {
            "request": {
              "url": "/v2/astronomy/timeSeries",
              "method": "GET"
            }
          },
          "description": "Look up astronomy details for any location by providing a starting and ending date for the time series"
        },
        {
          "name": "Get Bulk IP Geolocation",
          "value": "getBulkIpGeolocation",
          "action": "Get bulk ip geolocation",
          "routing": {
            "request": {
              "url": "/v2/ipgeo-bulk",
              "method": "POST"
            }
          },
          "description": "Retrieves geolocation information (country, city, coordinates, etc.) for multiple IP addresses at once"
        },
        {
          "name": "Get Bulk IP Security",
          "value": "getBulkIPSecurity",
          "action": "Get bulk ip security",
          "routing": {
            "request": {
              "url": "/v2/security-bulk",
              "method": "POST"
            }
          },
          "description": "Retrieves security information for multiple IP addresses at once, including proxy, VPN, TOR, and threat intelligence details"
        },
        {
          "name": "Get Bulk User Agents Info",
          "value": "getBulkUserAgent",
          "action": "Get bulk user agent info",
          "routing": {
            "request": {
              "url": "/v2/user-agent-bulk",
              "method": "POST"
            }
          },
          "description": "Retrieves detailed client system and browser information for multiple user agents at once(max 50,000), enabling detection of bots, crawlers, and potential attackers"
        },
        {
          "name": "Get IP Geolocation",
          "value": "getIpInfo",
          "action": "Get ip geolocation",
          "routing": {
            "request": {
              "url": "/v2/ipgeo",
              "method": "GET"
            }
          },
          "description": "Retrieves detailed geolocation information (country, city, coordinates, etc.) for a specified IP address"
        },
        {
          "name": "Get IP Security",
          "value": "getIpSecurityInfo",
          "action": "Get ip security info",
          "routing": {
            "request": {
              "url": "/v2/security",
              "method": "GET"
            }
          },
          "description": "Retrieves security information about an IP address, including proxy, VPN, TOR, and threat intelligence details"
        },
        {
          "name": "Get Time Conversion",
          "value": "getTimeConversion",
          "action": "Get timezone info",
          "routing": {
            "request": {
              "url": "/v2/timezone/convert",
              "method": "GET"
            }
          },
          "description": "Calculates precise time differences in hours and minutes between two locations using time zones, coordinates, or cities"
        },
        {
          "name": "Get Timezone Info",
          "value": "getTimezone",
          "action": "Get timezone info",
          "routing": {
            "request": {
              "url": "/v2/timezone",
              "method": "GET"
            }
          },
          "description": "Provides current date, time, UTC offset, and daylight saving info for any timezone, IP address, or geolocation coordinates via timezone API"
        },
        {
          "name": "Get User Agent Info",
          "value": "getUserAgent",
          "action": "Get user agent info",
          "routing": {
            "request": {
              "url": "/v2/user-agent",
              "method": "POST"
            }
          },
          "description": "Provides detailed client system and browser information for detecting bots, crawlers, and potential attackers"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Abuse Contact Info",
      "value": "getAbuseInfo",
      "action": "Get abuse info",
      "routing": {
        "request": {
          "url": "/v2/abuse",
          "method": "GET"
        }
      },
      "description": "Retrieves abuse contact and reporting information for an IP address, including organization, network, and abuse email details"
    },
    {
      "name": "Get ASN Info",
      "value": "getAsnInfo",
      "action": "Get asn info",
      "routing": {
        "request": {
          "url": "/v2/asn",
          "method": "GET"
        }
      },
      "description": "Retrieves Autonomous System Number (ASN) details for an IP address or ASN, including organization, country, and network information"
    },
    {
      "name": "Get Astronomy Info",
      "value": "getAstronomy",
      "action": "Get astronomy info",
      "routing": {
        "request": {
          "url": "/v2/astronomy",
          "method": "GET"
        }
      },
      "description": "The Astronomy API provides sun, moon data using IP, latitude, longitude, timezone or Location"
    },
    {
      "name": "Get Astronomy Timeseries Information",
      "value": "getAstronomyTimeseries",
      "action": "Get timezone info",
      "routing": {
        "request": {
          "url": "/v2/astronomy/timeSeries",
          "method": "GET"
        }
      },
      "description": "Look up astronomy details for any location by providing a starting and ending date for the time series"
    },
    {
      "name": "Get Bulk IP Geolocation",
      "value": "getBulkIpGeolocation",
      "action": "Get bulk ip geolocation",
      "routing": {
        "request": {
          "url": "/v2/ipgeo-bulk",
          "method": "POST"
        }
      },
      "description": "Retrieves geolocation information (country, city, coordinates, etc.) for multiple IP addresses at once"
    },
    {
      "name": "Get Bulk IP Security",
      "value": "getBulkIPSecurity",
      "action": "Get bulk ip security",
      "routing": {
        "request": {
          "url": "/v2/security-bulk",
          "method": "POST"
        }
      },
      "description": "Retrieves security information for multiple IP addresses at once, including proxy, VPN, TOR, and threat intelligence details"
    },
    {
      "name": "Get Bulk User Agents Info",
      "value": "getBulkUserAgent",
      "action": "Get bulk user agent info",
      "routing": {
        "request": {
          "url": "/v2/user-agent-bulk",
          "method": "POST"
        }
      },
      "description": "Retrieves detailed client system and browser information for multiple user agents at once(max 50,000), enabling detection of bots, crawlers, and potential attackers"
    },
    {
      "name": "Get IP Geolocation",
      "value": "getIpInfo",
      "action": "Get ip geolocation",
      "routing": {
        "request": {
          "url": "/v2/ipgeo",
          "method": "GET"
        }
      },
      "description": "Retrieves detailed geolocation information (country, city, coordinates, etc.) for a specified IP address"
    },
    {
      "name": "Get IP Security",
      "value": "getIpSecurityInfo",
      "action": "Get ip security info",
      "routing": {
        "request": {
          "url": "/v2/security",
          "method": "GET"
        }
      },
      "description": "Retrieves security information about an IP address, including proxy, VPN, TOR, and threat intelligence details"
    },
    {
      "name": "Get Time Conversion",
      "value": "getTimeConversion",
      "action": "Get timezone info",
      "routing": {
        "request": {
          "url": "/v2/timezone/convert",
          "method": "GET"
        }
      },
      "description": "Calculates precise time differences in hours and minutes between two locations using time zones, coordinates, or cities"
    },
    {
      "name": "Get Timezone Info",
      "value": "getTimezone",
      "action": "Get timezone info",
      "routing": {
        "request": {
          "url": "/v2/timezone",
          "method": "GET"
        }
      },
      "description": "Provides current date, time, UTC offset, and daylight saving info for any timezone, IP address, or geolocation coordinates via timezone API"
    },
    {
      "name": "Get User Agent Info",
      "value": "getUserAgent",
      "action": "Get user agent info",
      "routing": {
        "request": {
          "url": "/v2/user-agent",
          "method": "POST"
        }
      },
      "description": "Provides detailed client system and browser information for detecting bots, crawlers, and potential attackers"
    }
  ]

npm_readme:
  ## Overview

  The n8n+IPGeolocation integration makes it simple to use the full [**IPGeolocation.io**](https://ipgeolocation.io) APIs inside your n8n automation workflows. You do not need to write code or handle API requests because everything can be automated through clear and simple actions.

  With this integration, you can quickly get helpful information about any IP address. This includes location details, network ownership, security risk information, user agent data, time zone details, and even basic astronomy information. You can use this data to improve your workflows, personalize user experiences, and make your automations more secure.

  It allows you to automate retrieval of:

  - Geolocation information for any IP address
  - Threat intelligence and security risk details
  - Network ownership and ASN information
  - Time zone data and time conversion tools
  - Astronomy information such as sunrise and sunset
  - User agent details including browser, operating system, and device type

  ---
  ## API Key & Connection Setup

  To use IPGeolocation.io with **n8n**, you need a valid **API Key**. Follow these steps carefully:

  ### Create or log in to your IPGeolocation.io account

  - Go to [**IPGeolocation.io**](https://ipgeolocation.io/).
  - If you don’t have an account, click [**Sign Up**](https://app.ipgeolocation.io/signup) and complete the registration.
  - If you already have an account, click [**Sign in**](https://app.ipgeolocation.io/login) and enter your credentials.

  ### Obtain your API Key

  - After logging in, go to your [**dashboard**](https://app.ipgeolocation.io/dashboard).
  - Copy your **API Key** — you’ll need it to connect Make with IPGeolocation.io.

  ### Open Make and create a scenario

  - Go to [n8n](https://n8n.io/) and log in or sign up.
  - Click + from your sidebar and create a new workflow from scratch.
  - You will see a canvas where you can add nodes.

  ### Add an IPGeolocation node

  - Click the **+** button to add a node.
  - Search for **IPGeolocation** in the nodes search bar.

  ### Set up the connection

  - Paste the **API Key** you copied earlier into the required field.
  - Click **Save** to authenticate the connection.

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/setup-connection.png)

  ### Test the connection

  - n8n will attempt to connect using your API Key.
  - If successful, the module will show a green checkmark and confirmation.

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/successful-connection.png)

  - If there’s an error, double-check your API Key and make sure it’s active and valid for the plan you’re using.

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/error-connecting.png)

  ### Use your connection

  - Once connected, this API Key is available for **all IPGeolocation modules** in your n8n workflows.
  - You can now use it to perform actions like **Get IP Geolocation**, **Parse User Agent**, or **Bulk IP Geolocation**, depending on your API plan.

  ---

  ## Actions Availability across our Plans

  We offer **four API plans**: **Developer**, **Standard**, **Security**, and **Advanced**.

  The availability of actions depends on the plan you are subscribed to. The following table provides a detailed overview of which actions are included in each plan, helping you quickly identify the plan that suits your needs.

  | **Action** | **Developer** | **Standard** | **Security** | **Advance** |
  | --- | --- | --- | --- | --- |
  | **Get IP Geolocation** | ✔ | ✔ | ✖ | ✔ |
  | **Get Bulk IP Geolocation** | ✖ | ✔ | ✖ | ✔ |
  | **Get IP Security** | ✖ | ✖ | ✔ | ✖ |
  | **Get Bulk IP Security** | ✖ | ✖ | ✔ | ✖ |
  | **Get ASN Info** | ✖ | ✖ | ✖ | ✔ |
  | **Get Abuse Contact Info** | ✖ | ✖ | ✖ | ✔ |
  | **Get Astronomy Info** | ✔ | ✔ | ✔ | ✔ |
  | **Get Astronomy Timeseries Information** | ✔ | ✔ | ✔ | ✔ |
  | **Get Timezone Info** | ✔ | ✔ | ✔ | ✔ |
  | **Get Time Conversion** | ✔ | ✔ | ✔ | ✔ |
  | **Get User Agent Info** | ✖ | ✔ | ✔ | ✔ |
  | **Get Bulk User Agents Info** | ✖ | ✔ | ✔ | ✔ |

  If you attempt to use **Security-related actions** (for example, **IP Security Lookup**) with an API key from the **Standard plan**, the request will **fail** because these actions are **exclusive to the Security plan**. The API will return an **error message** indicating unauthorized access.

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/unauthorized-operation.png)

  For full pricing details and to choose your plan, see the [pricing page](https://ipgeolocation.io/pricing.html).

  ---

  ## Modules

  Below is a structured reference of all modules in this integration.

  ### **Geolocation**

  **1. Get IP Geolocation**

  Retrieves full geolocation data of a single IPv4/IPv6.

  - **Input:** IP Address
  - **Outputs:** country_name, city, latitude, longitude and [many more](https://ipgeolocation.io/ip-location-api.html#2-location-json-object-reference)

  **2. Get Bulk IP Geolocation**

  Retrieves geolocation for up to 50,000 IPs per request.

  - **Input:** Array of IPs
  - **Outputs:** Collection of geolocation objects

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/ip-geolocation.png)

  ### **Security**

  **3. IP Security Lookup**

  Security insights such as proxy, VPN, TOR, threat score, cloud and proxy providers.

  - **Input:** IP Address
  - **Outputs:** security.is_proxy, security.is_vpn, security.threat_score, security.is_cloud_provider and [more](https://ipgeolocation.io/ip-security-api.html#2-security-json-object-reference)

  **4. Bulk IP Security Lookup**

  Security assessment for multiple IPs.

  - **Input:** Array of IPs
  - **Outputs:** Collection of [security data](https://ipgeolocation.io/ip-security-api.html#2-security-json-object-reference)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/ip-security.png)

  ### **Network Intelligence**

  **5. Lookup ASN**

  Provides a simple way to retrieve accurate information about an Autonomous System Number (ASN) and its associated IPv4 and IPv6 address ranges.

  - **Input:** IP or ASN number
  - **Outputs:** asn.as_number, asn.organization and [more](https://ipgeolocation.io/asn-api.html#reference-to-asn-api-response)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/asn.png)

  **6. Lookup Abuse Contact Information**

  Includes details such as the role, handle, organization name, kind (e.g., group or individual), and postal address. This information helps identify the entity responsible for handling abuse reports.

  - **Input:** IP Address
  - **Outputs:** abuse.emails, abuse.handle and [more](https://ipgeolocation.io/ip-abuse-contact-api.html#reference-to-abuse-contact-api-response)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/abuse.png)

  ### **Time Services**

  Free **Timezone API** and **Time conversion API** provides date and time related information such as current time, date in various formats, week, month, year, time in unix timestamp, UTC/GMT offset and day light saving time from timezone name, any IPv4 or IPv6 address or geolocation coordinates, IATA code, ICAO code, or UN/LOCODE.

  **7. Get Timezone Info**

  It can be consumed with the following input variations:

  - For a Time Zone Name
  - For any Address (preferrably, city address)
  - For Location Coordinates (latitude & longitude)
  - For any IP address
  - For any IATA code
  - For any ICAO code
  - For any UN/LO Code
  - **Outputs:** time_zone.name, time_zone.current_time, time_zone.date_time_wti and [more](https://ipgeolocation.io/timezone-api.html#reference-to-time-zone-api-response)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/timezone.png)

  **8. Time Conversion**

  Converts a time from one of following options

  - Convert Time using Time Zone Names
  - Convert Time using Location
  - Convert Time using Coordinates
  - Convert Time using IATA codes
  - Convert Time using ICAO codes
  - Convert Time using UN/LOCODEs

  **Output:** Converted [date/time](https://ipgeolocation.io/timezone-api.html#reference-to-time-conversion-api-response)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/time-conversion.png)

  ### **Astronomy**

  Provides timings for sunrise, sunset, moonrise, moonset, sun azimuth, moon azimuth, sun altitude, moon altitude, sun distance from the earth and moon distance from the earth.

  **9. Get Astronomy Details**

  - **Outputs:** astronomy.sunrise, astronomy.sunset, astronomy.moon_phase and [many more.](https://ipgeolocation.io/astronomy-api.html#reference-to-astronomy-api-response)

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/astronomy.png)

  **10. Astronomy Time Series Lookup**

  - **Outputs:** Daily astronomy data for a defined date range.

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/astronomy-timeseries.png)

  ### **User-Agent Parsing**

  Provides detailed client system information, allowing for the detection of bots, crawlers, and potential attackers.

  **11. Parse User Agent String**

  - **Input:** User agent string
  - **Outputs:** provides name, device and operating sysem [information](https://ipgeolocation.io/user-agent-api.html#reference-to-user-agent-api-response).

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/user-agent.png)

  1. **Parse Bulk User Agent Strings**
  - **Input:** Array of User agent strings
  - **Outputs:** Collection of parsed user agent objects

  ![](https://static.ipgeolocation.io/web-assets/images/integrations/n8n/bulk-user-agent.png)

  ---

  ## Use Cases

  Some of the use cases are provided as following.

  ### **E‑commerce Fraud & Network Vetting**

  **Modules:** IP Security Lookup, Lookup Abuse, Lookup ASN

  **Scenario:** Validate order IPs before processing.

  - Trigger: Shopify/WooCommerce detects new order.
  - Step 1: Security Lookup: Check proxy/VPN.
  - Step 2: ASN Lookup:  Find ISP & organization.
  - Filter: Only proceed if *not* proxy AND not cloud provider.
  - If high-risk: Tag the order “Fraud Review”

  ---

  ### **Personalized Content & Time‑Aware Scheduling**

  **Modules:** Get IP Geolocation, Get Timezone Info, Time Conversion

  **Scenario:** Send newsletter at **10 AM local time**.

  - Step 1: Geolocation: Get currency + country.
  - Step 2: Timezone Info: Get exact timezone.
  - Step 3: Time Conversion: Convert 10 AM UTC to local.
  - Step 4: Email tool: Send at converted time.

  ---

  ### **Bulk Data Enrichment & Reporting**

  **Modules:** Bulk Geolocation, Bulk Security Lookup, Array Aggregator, Iterator

  **Scenario:** Enrich 5,000+ IPs with location + threat scoring.

  - Fetch rows from Google Sheets.
  - Aggregate IPs into an array.
  - Bulk lookup for location and security.
  - Iterate results.
  - Update rows with new fields: city, country_name, threat_score.

  ---

  ### **Astronomy‑Based IoT Scheduling**

  **Modules:** Astronomy Details, Astronomy Time Series

  **Scenario:** Automate IoT actions based on sunrise, sunset, moon phase.

  - Daily schedule at midnight.
  - Astronomy Details: Get sunrise & moon phase.
  - Save results in Data Store/Airtable.
  - IoT app triggers actions after sunrise.

ai_documentation_summary:
  {"purpose":"Integrate IPGeolocation.io into n8n workflows to automate IP lookups, geolocation, timezone, astronomy, user-agent parsing and security/threat intelligence for workflow enrichment and decisioning.","capabilities":["Get IP Geolocation (single IPv4/IPv6) — returns country, city, lat/long and full geolocation object","Get Bulk IP Geolocation — geolocation for up to 50,000 IPs per request","IP Security Lookup — proxy/VPN/TOR detection, threat_score, cloud/provider flags and other security fields","Bulk IP Security Lookup — security assessment for multiple IPs","Lookup ASN — retrieve ASN details and associated IPv4/IPv6 ranges","Get Abuse Contact Info — retrieve abuse/contact information for IP/ASN","Get Astronomy Info — sunrise, sunset and related astronomy data","Get Astronomy Timeseries Information — timeseries astronomy data","Get Timezone Info — timezone metadata for IP/location","Get Time Conversion — convert times across timezones"],"authentication":"API key required","commonUseCases":["Enrich incoming IP addresses with geolocation and ASN info for personalization or routing","Perform security checks (proxy/VPN/TOR/threat scoring) to block or flag risky requests","Bulk-process IP lists for analytics or compliance using bulk geolocation/security endpoints","Parse user-agent strings to detect browser, OS and device for adaptive content or logging","Convert times and fetch timezone/astronomy data for scheduling, alerts and display"],"limitations":["Feature availability is plan-dependent — certain actions (e.g., security endpoints, bulk endpoints, ASN/abuse info) are only available on specific paid plans","Using actions not included in your API plan will fail with unauthorized errors","Bulk geolocation supports up to 50,000 IPs per request (subject to plan limits)"],"relatedNodes":[]}


node_type: @infobip/n8n-nodes-infobip-api.infobipApi
package_name: @infobip/n8n-nodes-infobip-api
display_name: InfobipApi
description: Interact with Infobip SMS API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: infobip.mobile
author_github_url: https://github.com/infobip/n8n-nodes-infobip-api.git
npm_package_name: @infobip/n8n-nodes-infobip-api
npm_version: 0.2.1
community_fetched_at: 2026-02-19T14:41:52.550Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendSms",
      "options": [
        {
          "name": "Send an SMS",
          "value": "sendSms",
          "action": "Send an SMS"
        },
        {
          "name": "View SMS Delivery Report",
          "value": "smsDeliveryReport",
          "action": "View sms delivery report"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send an SMS",
      "value": "sendSms",
      "action": "Send an SMS"
    },
    {
      "name": "View SMS Delivery Report",
      "value": "smsDeliveryReport",
      "action": "View sms delivery report"
    }
  ]

npm_readme:
  # n8n-nodes-infobip-api

  **⚠️ Beta Version**: This node is currently in beta. Features and APIs may change.

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

  Infobip is a global cloud communications platform that enables businesses to send SMS messages, make voice calls, and engage with customers through various messaging channels.

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

  You can install this node using:

  ```bash
  npm install @infobip/n8n-nodes-infobip-api
  ```

  ## Operations

  * **Send SMS**: Send SMS messages to recipients via the Infobip SMS API
  * **View SMS Delivery Report**: Retrieve delivery reports for previously sent SMS messages

  ## Credentials

  To use this node, you need an Infobip account and API credentials:

  1. Sign up for an [Infobip account](https://www.infobip.com/)
  2. Obtain your API key from the Infobip Developer Hub
  3. In n8n, create new Infobip API credentials with:
     - **API Key**: Your Infobip API key
     - **Domain**: Your Infobip API domain (defaults to `https://api.infobip.com/`)

  ## Compatibility

  This node requires:
  - n8n version 1.0 or later
  - Node.js version 20 or higher

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Infobip SMS API documentation](https://www.infobip.com/docs/api/channels/sms)
  * [Infobip API authentication](https://www.infobip.com/docs/api#authentication)

ai_documentation_summary:
  {"purpose":"Provide n8n workflow access to Infobip's SMS API so workflows can send SMS messages and retrieve delivery reports.","capabilities":["Send SMS messages to one or multiple recipients via the Infobip SMS API","Retrieve SMS delivery reports for previously sent messages"],"authentication":"API key required (Infobip API key). Requires also specifying the Infobip API domain (defaults to https://api.infobip.com/).","commonUseCases":["Send transactional or marketing SMS from workflows","Send alerts/notifications or two-factor authentication codes","Track SMS delivery status and handle delivery reports in workflows"],"limitations":["Beta: node is in beta; features and APIs may change","Focused on SMS only — does not provide multi-channel (voice, chat apps) operations within this node","Only two operations documented (send SMS, view delivery report); other Infobip APIs may not be exposed","Requires n8n v1.0+ and Node.js v20+","Requires an Infobip account and API key to operate"],"relatedNodes":[]}


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

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

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

npm_readme:
  # n8n-nodes-hookdeck

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

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

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

  ## Installation

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

  ## Operations

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

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

ai_documentation_summary:
  {"purpose":"Provides n8n workflow actions to interact with the Hookdeck API, allowing retrieval and management of attempts, events, issues, and requests within Hookdeck.","capabilities":["Get Attempt","Get Event","Mute Event","Retry Event","Dismiss Issue","Get Issue","Update Issue","Get Request"],"authentication":"Not specified in README (credentials must be configured in n8n; Hookdeck typically uses API keys/tokens)","commonUseCases":["Fetch details of a specific webhook attempt for debugging","Retrieve or mute events to reduce noise in workflows","Retry failed event deliveries programmatically","Manage issues: retrieve, update, or dismiss reported issues","Fetch request details for logging or conditional workflow branches"],"limitations":["README does not specify authentication setup or examples","Only read/manage operations listed (no create/delete resources)","No details on rate limits, pagination, or error handling provided","No usage examples or sample payloads in the README","Initial release (0.1.0) — functionality may be limited"],"relatedNodes":[]}


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

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

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

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

  # n8n-nodes-predict-leads

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

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

  ## Installation

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

  ## Operations

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

  ## Credentials

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

  https://predictleads.com/sign_in

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

  https://predictleads.com/dashboard

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

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

  ## Compatibility

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

  ## Usage

  Add PredictLeads node to a workflow.

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

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

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

  ## API Resources / Search Engines

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

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

  ## Related Resources

  PredictLeads's complete API documentation is available here:

  https://docs.predictleads.com/

  ## License

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

ai_documentation_summary:
  {"purpose":"Provides access to PredictLeads company intelligence inside n8n workflows, letting you query company profiles, technologies, jobs, news, financing and related data.","capabilities":["Retrieve a company's data","Search/retrieve companies by size and location","Retrieve a company's job openings","Retrieve a single job opening","Retrieve job openings by O*NET codes and location","Retrieve technologies used by a specific company","Retrieve companies using a specific technology","Retrieve all tracked technologies","Retrieve a single technology","Retrieve a company's news events"],"authentication":"PredictLeads API key and token required (create PredictLeads credentials in n8n)","commonUseCases":["Enrich leads and CRM records with company profiles and technographic data","Market research and segmentation by company size, location or technology","Monitor company news and financing events for alerts or workflows","Recruiting and talent sourcing using company job openings and O*NET searches","Investment screening and portfolio discovery using connections and financing data"],"limitations":["Supports only the most popular PredictLeads endpoints — not the full API surface","If an endpoint is missing you must request it from PredictLeads or use the generic HTTP Request node as a workaround","Requires n8n minimum version 1.84.0 (verified with 1.119.1)"],"relatedNodes":["HTTP Request"]}


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

updated_at: 2026-02-19 14:41:52
author_name: andreas-ullrich-elunic
author_github_url: https://github.com/starhunter-gmbh/n8n-nodes-graphql.git
npm_package_name: @starhunter/n8n-nodes-graphql
npm_version: 0.2.2
community_fetched_at: 2026-02-19T14:41:52.552Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Candidate",
          "value": "candidate"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Employee",
          "value": "employee"
        },
        {
          "name": "Person",
          "value": "person"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Candidate",
          "value": "projectCandidate"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBirthdays",
      "options": [
        {
          "name": "Get Birthdays",
          "value": "getBirthdays",
          "action": "Get persons with birthdays on a date",
          "description": "Get all persons with birthdays on a specific date"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get a person by ID",
          "description": "Retrieve a single person by their ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search persons",
          "description": "Search for persons by name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search candidates",
          "description": "Search for candidates by ID, name, or birth date"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "candidate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Current User",
          "value": "getCurrent",
          "action": "Get current authenticated user",
          "description": "Get the employee record for the authenticated user"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search employees",
          "description": "Search for employees by ID or name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Log Email",
          "value": "log",
          "action": "Log an email activity",
          "description": "Log an email activity in Starhunter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add to Project",
          "value": "add",
          "action": "Add candidate to project",
          "description": "Add a candidate to a project with optional status"
        },
        {
          "name": "Get By Status Change Date",
          "value": "getByStatusChangeDate",
          "action": "Get candidates by status change date",
          "description": "Get project candidates whose status changed X days ago"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update presentation status",
          "description": "Update the status of a presentation with optional comment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectCandidate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task in Starhunter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search projects",
          "description": "Search for projects by status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Birthdays",
      "value": "getBirthdays",
      "action": "Get persons with birthdays on a date",
      "description": "Get all persons with birthdays on a specific date"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get a person by ID",
      "description": "Retrieve a single person by their ID"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search persons",
      "description": "Search for persons by name"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search candidates",
      "description": "Search for candidates by ID, name, or birth date"
    },
    {
      "name": "Get Current User",
      "value": "getCurrent",
      "action": "Get current authenticated user",
      "description": "Get the employee record for the authenticated user"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search employees",
      "description": "Search for employees by ID or name"
    },
    {
      "name": "Log Email",
      "value": "log",
      "action": "Log an email activity",
      "description": "Log an email activity in Starhunter"
    },
    {
      "name": "Add to Project",
      "value": "add",
      "action": "Add candidate to project",
      "description": "Add a candidate to a project with optional status"
    },
    {
      "name": "Get By Status Change Date",
      "value": "getByStatusChangeDate",
      "action": "Get candidates by status change date",
      "description": "Get project candidates whose status changed X days ago"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update presentation status",
      "description": "Update the status of a presentation with optional comment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task in Starhunter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search projects",
      "description": "Search for projects by status"
    }
  ]

npm_readme:
  # @starhunter/n8n-nodes-graphql

  This is an n8n community node that integrates with [Starhunter](https://starhunter.com) in your n8n workflows.

  Starhunter is a customer relationship management (CRM) system designed for recruiting and talent management. This node allows you to automate interactions with persons, candidates, employees, emails, project candidates, and tasks in Starhunter.

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

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

  ## Installation

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

  ## Operations

  ### Person

  - **Get Birthdays**: Retrieve persons whose birthday falls on a specific date (today or a custom date in MM-DD format)
  - **Get by ID**: Retrieve a single person by their ID
  - **Search**: Search for persons by name (partial match supported)

  ### Candidate

  - **Search**: Search for candidates by ID, name, or birth date

  ### Employee

  - **Get Current**: Get the employee record for the currently authenticated user
  - **Search**: Search for employees by ID or name

  ### Email

  - **Log**: Log an email activity in Starhunter (records sender, recipient, subject, and body)

  ### Project Candidate

  - **Get by Status Change Date**: Retrieve project candidates whose status changed a specified number of days ago

  ### Task

  - **Create**: Create a new task with optional deadline, assignee, and target entity

  ## Credentials

  To use this node, you need to authenticate with your Starhunter instance using an API access token.

  ### Prerequisites

  1. Access to a Starhunter instance
  2. A valid API access token from your Starhunter account settings

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials** and click **Add Credential**
  2. Search for **Starhunter API**
  3. Enter the following:
     - **Base URL**: The base URL of your Starhunter instance (e.g., `https://your-company.starhunter.software`).
     - **Access Token**: Your Starhunter API access token
  4. Click **Save** to test the connection

  For API documentation, refer to your instance's built-in docs at `https://<your-instance>.starhunter.software/Api/docs`.

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **n8n Nodes API version**: 1
  - **AI Tool compatible**: Yes (can be used as a tool in n8n AI workflows)

  Tested with n8n version 1.x.

  ## Usage

  ### Example: Birthday notifications

  Create a workflow that runs daily to fetch persons with birthdays today and send notification emails or Slack messages to your team.

  1. Add a **Schedule Trigger** node set to run daily
  2. Add the **Starhunter** node with:
     - Resource: Person
     - Operation: Get Birthdays
     - Use Today: enabled
  3. Connect to an **Email** or **Slack** node to send notifications

  ### Example: Log emails to CRM

  Automatically log emails sent through your workflow back to Starhunter for tracking purposes.

  1. After sending an email in your workflow, add the **Starhunter** node
  2. Configure with:
     - Resource: Email
     - Operation: Log
     - Map the from, to, subject, and body fields from your email node

  ### Example: Track candidate status changes

  Monitor candidates who changed status a specific number of days ago for follow-up actions.

  1. Add a **Schedule Trigger** node
  2. Add the **Starhunter** node with:
     - Resource: Project Candidate
     - Operation: Get by Status Change Date
     - Status: Your target status (e.g., "Ident")
     - Days Ago: Number of days to look back

  ## Resources

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

  ## Version history

  ### 0.1.1

  - Initial public release
  - Added publishConfig for npm public access

  ### 0.1.0

  - Initial release with support for:
    - Person operations (Get Birthdays, Get by ID, Search)
    - Candidate operations (Search)
    - Employee operations (Get Current, Search)
    - Email operations (Log)
    - Project Candidate operations (Get by Status Change Date)
    - Task operations (Create)

ai_documentation_summary:
  {"purpose":"Provides an n8n node to automate interactions with a Starhunter CRM instance—manage and query persons, candidates, employees, emails, project candidates, and tasks within workflows.","capabilities":["Person: Get Birthdays (today or custom MM-DD), Get by ID, Search by name (partial match)","Candidate: Search by ID, name, or birth date","Employee: Get Current (authenticated user), Search by ID or name","Email: Log email activity (sender, recipient, subject, body)","Project Candidate: Get by Status Change Date (retrieve items whose status changed N days ago)","Task: Create task with optional deadline, assignee, and target entity","Can be used as an AI Tool within n8n AI workflows"],"authentication":"API access token required (configure Starhunter API credential in n8n with Base URL and Access Token)","commonUseCases":["Send daily birthday notifications by fetching persons with birthdays and notifying team (email/Slack)","Automatically log outgoing emails from workflows back into Starhunter for tracking","Monitor project candidates who changed status N days ago for follow-up actions","Create tasks in Starhunter from workflow events (with deadlines and assignees)","Search and enrich workflows with person/candidate/employee records"],"limitations":["Requires access to a Starhunter instance and a valid API access token","Minimum n8n version 1.0.0 (tested on n8n 1.x)","Supports only the listed resources/operations (Person, Candidate, Employee, Email, Project Candidate, Task); other Starhunter endpoints are not described in the README"],"relatedNodes":["Schedule Trigger","Email","Slack","Credentials: Starhunter API"]}


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

updated_at: 2026-02-19 14:41:52
author_name: sysmonitor
author_github_url: https://github.com/CaspioInnovations/n8n-node-caspioofficial.git
npm_package_name: n8n-nodes-caspioofficial
npm_version: 1.0.4
community_fetched_at: 2026-02-19T14:41:52.553Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "record",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Data Import/Export Task",
          "value": "task"
        },
        {
          "name": "Directory",
          "value": "directory"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Record",
          "value": "record"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create record",
          "description": "Create a new record in a table"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete records",
          "description": "Delete a record from a table"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many records",
          "description": "Returns records from a table or a view"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update records",
          "description": "Update a record in a table"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "record"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listFiles",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete file",
          "description": "Delete a file from Files area"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download file",
          "description": "Download a file from Files area"
        },
        {
          "name": "Get File Properties",
          "value": "listFiles",
          "action": "Get file properties",
          "description": "Returns file properties from Fiels area"
        },
        {
          "name": "Get Folder Properties",
          "value": "listFolders",
          "action": "Get folder properties",
          "description": "Returns folder properties from Files area"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload file",
          "description": "Upload a file to Files area"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete attachments",
          "description": "Delete files from an attachment field"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download attachments",
          "description": "Download files from an attachment field"
        },
        {
          "name": "Get Properties",
          "value": "list",
          "action": "Get attachment properties",
          "description": "Returns file properties stored in an attachment field"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload attachment",
          "description": "Upload a file to an attachment field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many data import export tasks",
          "description": "Returns the list of data import/export tasks"
        },
        {
          "name": "Run",
          "value": "run",
          "action": "Run data import export task",
          "description": "Run a chosen data import export task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUsers",
      "options": [
        {
          "name": "Activate User",
          "value": "activateUser",
          "action": "Activate user",
          "description": "Activate a user in a directory"
        },
        {
          "name": "Create User",
          "value": "createUser",
          "action": "Create user",
          "description": "Create a new user in a directory"
        },
        {
          "name": "Delete User",
          "value": "deleteUsers",
          "action": "Delete users",
          "description": "Delete users from a directory"
        },
        {
          "name": "Get Many Directories",
          "value": "list",
          "action": "Get many directories",
          "description": "Returns the list of directories"
        },
        {
          "name": "Get Many Users",
          "value": "getUsers",
          "action": "Get many users",
          "description": "Returns the list of users in a directory"
        },
        {
          "name": "Update User",
          "value": "updateUsers",
          "action": "Update users",
          "description": "Update a user in a directory"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "directory"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create record",
      "description": "Create a new record in a table"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete records",
      "description": "Delete a record from a table"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many records",
      "description": "Returns records from a table or a view"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update records",
      "description": "Update a record in a table"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete file",
      "description": "Delete a file from Files area"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download file",
      "description": "Download a file from Files area"
    },
    {
      "name": "Get File Properties",
      "value": "listFiles",
      "action": "Get file properties",
      "description": "Returns file properties from Fiels area"
    },
    {
      "name": "Get Folder Properties",
      "value": "listFolders",
      "action": "Get folder properties",
      "description": "Returns folder properties from Files area"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload file",
      "description": "Upload a file to Files area"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete attachments",
      "description": "Delete files from an attachment field"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download attachments",
      "description": "Download files from an attachment field"
    },
    {
      "name": "Get Properties",
      "value": "list",
      "action": "Get attachment properties",
      "description": "Returns file properties stored in an attachment field"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload attachment",
      "description": "Upload a file to an attachment field"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many data import export tasks",
      "description": "Returns the list of data import/export tasks"
    },
    {
      "name": "Run",
      "value": "run",
      "action": "Run data import export task",
      "description": "Run a chosen data import export task"
    },
    {
      "name": "Activate User",
      "value": "activateUser",
      "action": "Activate user",
      "description": "Activate a user in a directory"
    },
    {
      "name": "Create User",
      "value": "createUser",
      "action": "Create user",
      "description": "Create a new user in a directory"
    },
    {
      "name": "Delete User",
      "value": "deleteUsers",
      "action": "Delete users",
      "description": "Delete users from a directory"
    },
    {
      "name": "Get Many Directories",
      "value": "list",
      "action": "Get many directories",
      "description": "Returns the list of directories"
    },
    {
      "name": "Get Many Users",
      "value": "getUsers",
      "action": "Get many users",
      "description": "Returns the list of users in a directory"
    },
    {
      "name": "Update User",
      "value": "updateUsers",
      "action": "Update users",
      "description": "Update a user in a directory"
    }
  ]

npm_readme:
  # n8n-nodes-caspioofficial

  This is an n8n community node for integrating with [Caspio](https://www.caspio.com/). Caspio is a low-code platform that helps you create custom business applications fast, combining database management, application building, and workflow automation in a single platform.

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

  ## Installation

  ### Community Nodes (n8n Cloud)

  For verified community nodes on n8n Cloud:

  1. Open your n8n workflow editor
  2. Select the **+** button or press **Tab** to open the nodes panel
  3. Search for "Caspio" and select it
  4. Select **Install** to add the node

  ### Self-Hosted

  For self-hosted n8n instances:

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter the npm package name: `n8n-nodes-caspioofficial`
  4. Agree to the risks of installing community nodes
  5. Select **Install**

  Note: Only the instance owner can install community nodes. Admin accounts can uninstall nodes if needed.

  ## Documentation

  This node provides comprehensive integration with Caspio's REST API:

  - **[Credentials Setup](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-credentials)** - Configure OAuth2 authentication with your Caspio account
  - **[Action Node Operations](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-actions)** - Work with tables, views, directories, files, attachments, and tasks
  - **[Trigger Node Setup](https://howto.caspio.com/integrate-your-apps/integration-with-n8n/n8n-integration-triggers)** - Set up webhooks for real-time event notifications

  ## Compatibility

  This node uses Caspio REST API v3.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Caspio REST API documentation](https://howto.caspio.com/web-services-api/rest-api/)
  - [Caspio homepage](https://www.caspio.com/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Provides n8n integration with the Caspio REST API so workflows can manage Caspio data and resources and respond to Caspio events.","capabilities":["Manage tables (create, read, update, delete records)","Work with views","Manage directories","Upload and manage files","Handle attachments","Manage tasks","Trigger workflows via webhooks for real-time event notifications","Access Caspio REST API v3 endpoints (comprehensive coverage)"],"authentication":"OAuth2 (Caspio OAuth2 credentials required)","commonUseCases":["Sync Caspio tables with other systems","Automate creation or updates of records in Caspio from external events","Start workflows on Caspio events using webhooks (real-time notifications)","Upload and manage files/attachments in Caspio from automated processes","Operate and query Caspio views and directories as part of integrations"],"limitations":[],"relatedNodes":["Caspio Action node (operations: tables, views, directories, files, attachments, tasks)","Caspio Trigger node (webhook-based real-time events)","Caspio OAuth2 credentials"]}


node_type: n8n-nodes-solapi.solapi
package_name: n8n-nodes-solapi
display_name: Solapi
description: Send messages with Solapi
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: nurigo
author_github_url: https://github.com/solapi/
npm_package_name: n8n-nodes-solapi
npm_version: 0.2.8
community_fetched_at: 2026-02-19T14:41:52.554Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Send Kakao AlimTalk",
          "value": "sendKakaoATA",
          "action": "Send kakao alim talk a message",
          "description": "Send Kakao AlimTalk (template-based)"
        },
        {
          "name": "Send Kakao FriendTalk",
          "value": "sendKakaoCTA",
          "action": "Send kakao friend talk a message"
        },
        {
          "name": "Send Text Message",
          "value": "sendText",
          "action": "Send text message a message",
          "description": "Send SMS/LMS/MMS via Solapi"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Kakao AlimTalk",
      "value": "sendKakaoATA",
      "action": "Send kakao alim talk a message",
      "description": "Send Kakao AlimTalk (template-based)"
    },
    {
      "name": "Send Kakao FriendTalk",
      "value": "sendKakaoCTA",
      "action": "Send kakao friend talk a message"
    },
    {
      "name": "Send Text Message",
      "value": "sendText",
      "action": "Send text message a message",
      "description": "Send SMS/LMS/MMS via Solapi"
    }
  ]

npm_readme:
  # Solapi for n8n (Community Node)

  솔라피(Solapi) 메시지/카카오/커머스 웹훅을 n8n에서 쉽게 사용하기 위한 커뮤니티 노드입니다.

  ## 설치

  - n8n Community Nodes에서 설치
    - n8n UI → Settings → Community Nodes → Install → `n8n-nodes-solapi` 입력
  - 또는 수동 설치
    - 프로젝트에 패키지 설치 후 n8n 재기동

  ## 인증 설정 (OAuth2)
  1) n8n → Credentials → New → `Solapi OAuth2 API` 선택
  2) Solapi 콘솔에서 발급받은 Client ID/Secret 입력
  3) Scope 기본값 유지(권장):
  ```
  message:write message:read senderid:read storage:write storage:read webhook:read webhook:write kakao:write kakao:read users:read contacts:read contacts:write commerce:read commerce:write
  ```
  4) Save & Connect로 로그인 → 연결 성공 확인

  ## 인증 설정 (API Key)
  1) n8n → Credentials → New → `Solapi API Key` 선택
  2) Solapi 콘솔에서 발급받은 API Key / API Secret 입력
  3) 노드의 `Authentication`에서 `API Key (HMAC-SHA256)` 선택
  4) 사용 시 각 요청에는 문서에 따라 HMAC-SHA256 시그니처가 자동으로 포함됩니다. 상세: [Solapi API Key 인증 방식](https://developers.solapi.com/references/authentication/api-key)

  ## 사용 가능한 노드/오퍼레이션
  리소스 `Message`에서 아래 오퍼레이션을 제공합니다.

  - Send Text Message
    - SMS/LMS/MMS 발송
    - 필수: To, From, Text
    - 선택: Subject(LMS), Image ID(MMS), Country Code(기본 82)
    - 동적 옵션: From(발신번호), Image ID(MMS 스토리지)

  - Send Kakao AlimTalk (ATA)
    - 템플릿 기반 알림톡 발송
    - 필수: To, Kakao Channel, Kakao Template
    - 선택: Template Variables(JSON), From(문자 대체발신), Country Code
    - 동적 옵션: Kakao Channel, Kakao Template

  - Send Kakao FriendTalk (CTA)
    - 카카오 친구톡 발송(채널 친구 대상)
    - 필수: To, Kakao Channel, Text
    - 선택: AD Flag, CTA Image ID, Buttons(JSON Array), From(문자 대체발신), Country Code
    - 동적 옵션: Kakao Channel, Kakao Image

  - On Message Report (Single)
    - 단건 메시지 결과 웹훅 트리거(SINGLE-REPORT)
    - 워크플로우 활성화 시 Solapi Outgoing Webhook 자동 등록/해지

  - On Group Report
    - 메시지 그룹 결과 웹훅 트리거(GROUP-REPORT)
    - 워크플로우 활성화 시 Solapi Outgoing Webhook 자동 등록/해지

  - On Commerce Action
    - 커머스 액션 트리거(결제완료 등)
    - 필수: Commerce Hook (Solapi 콘솔에서 미리 생성)
    - 워크플로우 활성화 시 선택한 Hook에 웹훅 연결/해지

  ## 필드 설명 요약
  - To: 콤마/줄바꿈으로 여러 번호 입력 가능. 국가코드는 Country Code로 설정(기본 82)
  - From: Solapi에 등록된 발신번호만 사용 가능(동적 옵션)
  - Image ID: Solapi Storage에 업로드된 파일의 fileId(동적 옵션)
  - Kakao Channel: Solapi에 등록된 PFID(동적 옵션)
  - Kakao Template: 선택한 채널에서 발송 가능한 템플릿(동적 옵션)
  - Template Variables(JSON): 템플릿 변수 맵. 예) `{ "name": "홍길동" }`
  - Buttons(JSON Array): 친구톡 버튼 배열. 예)
  ```
  [
    { "buttonName": "홈", "buttonType": "WL", "linkMo": "https://example.com" }
  ]
  ```

  ## 권한(Scopes)
  - 기본 제공 스코프로 대부분의 기능 동작
  - 최소 필요 스코프 예시
    - 메시지 발송: `message:write`
    - 발신번호 조회: `senderid:read`
    - 스토리지 조회: `storage:read`
    - 카카오: `kakao:read kakao:write`
    - 웹훅: `webhook:read webhook:write`
    - 커머스: `commerce:read commerce:write`

  ## 트러블슈팅
  - 401/403 인증 오류
    - 크리덴셜 연결 상태 확인 및 재인증
    - Solapi 앱의 Redirect URI에 n8n 크리덴셜 리다이렉트 URL 등록 여부 확인
  - 템플릿/채널 목록 비어있음
    - Solapi 콘솔에서 채널/PFID 및 템플릿 등록 상태 확인
    - 해당 채널에 발송 가능한 템플릿인지 확인
  - 문자 대체발신 미동작
    - `From(문자 대체발신)`을 비워두면 대체발송 비활성화됨. 등록된 발신번호 선택 필요
  - 웹훅 미수신
    - 워크플로우 활성화 상태 확인
    - 방화벽/외부 접근 가능한 n8n 호스트인지 확인
    - Solapi 콘솔의 Outgoing Webhook 목록에 등록 여부 확인

  ## 라이선스
  MIT

ai_documentation_summary:
  {"purpose":"Send and receive Solapi messages (SMS/LMS/MMS), Kakao AlimTalk/FriendTalk, and handle Solapi commerce/webhook events from n8n workflows.","capabilities":["Send Text Message (SMS/LMS/MMS) with support for Subject (LMS), Image ID (MMS), Country Code, multiple recipients","Send Kakao AlimTalk (ATA) using templates with JSON template variables","Send Kakao FriendTalk (CTA) with text, AD flag, CTA image, buttons (JSON array), and alternative sender","Trigger workflows on Single Message Report (SINGLE-REPORT) and Group Report (GROUP-REPORT) webhooks","Trigger workflows on Commerce Action hooks (e.g., payment completion) and connect/disconnect selected Commerce Hook","Automatic registration/unregistration of Solapi Outgoing Webhooks when trigger workflows are activated/deactivated","Dynamic option lists for From (sender IDs), Image ID (Storage fileId), Kakao Channel (PFID), and Kakao Templates","API Key (HMAC-SHA256) requests include automatic signature generation per Solapi docs"],"authentication":"Supports OAuth2 (Solapi OAuth2 API credential with scopes such as message:write, kakao:write, webhook:write) and API Key (HMAC-SHA256) credential","commonUseCases":["Send transactional or marketing SMS/MMS to one or multiple recipients","Send template-based Kakao AlimTalk notifications (order, OTP, alerts) with template variables","Send Kakao FriendTalk messages with buttons and images to channel friends","Trigger n8n workflows when delivery/report events occur for single messages or message groups","Trigger workflows on commerce events (payment completion, order status) via Solapi commerce hooks"],"limitations":["Must use sender numbers, Kakao channels (PFID), templates and storage files that are pre-registered in the Solapi console; node does not create these resources","Webhooks require n8n host to be externally reachable (firewall/NGROK-like forwarding needed for local instances)","OAuth2 requires correct Redirect URI configured in Solapi app and appropriate scopes; incorrect config can cause 401/403","Alternative SMS fallback only works if a registered sender is selected; leaving From empty disables fallback","No mention of message rate limits, batching controls, or rich media composition beyond provided fields"],"relatedNodes":["Credentials: Solapi OAuth2 API","Credentials: Solapi API Key (HMAC-SHA256)"]}


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

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

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

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

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

  ## Installation

  ### In n8n Desktop/Cloud

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

  ### Manual Installation

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

  ## Configuration

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

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

  ## Features

  ### Model Operations

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

  ### Workflow Operations

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

  ## Usage Examples

  ### Generate an Image with Flux

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

  ### Run a Custom Workflow

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

  ### Monitor Model Performance

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

  ## Supported Models

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

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

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

  ## Async Execution

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

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

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

  ## Links

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

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Access fal.ai models and workflows from n8n to generate and manage AI content (images, video, audio, TTS/STT, and run fal.ai workflows).","capabilities":["Generate Media (images, videos, audio) using any fal.ai model","Get Model Info (retrieve available parameters and schema for a model)","Get Analytics (model performance: latency, success rates, error counts)","Get Pricing for models","Get Usage (usage statistics — requires Admin API Key)","List Requests for a specific endpoint/model","Delete Request Payloads (requires Admin API Key)","Run Workflow (execute fal.ai workflows with dynamic parameters)","List Workflows","Get Workflow Details (workflow schema and metadata)"],"authentication":"API key required (add fal.ai API credential in n8n). Some operations (Get Usage, Delete Request Payloads) require an Admin API Key.","commonUseCases":["Generate images from prompts (e.g., using fal-ai/flux/dev)","Produce videos or long-running media generations with queued/asynchronous handling","Run custom fal.ai workflows with dynamic inputs inside n8n","Convert text to speech or transcribe audio (TTS/STT integrations)","Monitor model performance and usage (analytics and pricing)"],"limitations":["Certain operations (Get Usage, Delete Request Payloads) require an Admin API Key separate from a regular API key","Long-running generations rely on fal.ai's queue system; default polling and max wait time apply (default poll interval 5s, default max wait 10 minutes) — may need to disable waiting and poll later for very long tasks"],"relatedNodes":[]}


