# nodes

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

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

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

npm_readme:
  # n8n-nodes-teamupcalendar

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

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

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

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

  ## Installation

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

  ## Operations

  ### Event Operations

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

  ### Subcalendar Operations

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

  ## Credentials

  To use this node, you need:

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

  ### Setting up credentials:

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

  ## Compatibility

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

  ## Usage

  ### Basic Event Creation

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

  ### Filtering Events

  When using "Get Many" for events:

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

  ### Date/Time Handling

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

  ## Resources

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

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


node_type: n8n-nodes-aiscraper.aiScraper
package_name: n8n-nodes-aiscraper
display_name: AI Scraper
description: Scrape any Website with just a URL and Data Description using Parsera API (10K+ downloads)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: raznem
author_github_url: https://github.com/parsera-labs/n8n-parsera.git
npm_package_name: n8n-nodes-aiscraper
npm_version: 0.3.1
community_fetched_at: 2026-04-16T09:43:36.167Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "url-extractor",
      "options": [
        {
          "name": "Extractor",
          "value": "url-extractor"
        },
        {
          "name": "Scraping Agent",
          "value": "scraping-agent"
        },
        {
          "name": "Reusable Scraper",
          "value": "reusable-scrapers"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeUrl",
      "options": [
        {
          "name": "Extract URL",
          "value": "scrapeUrl",
          "action": "Extract from URL",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/extract",
              "body": {
                "url": "={{$parameter[\"url\"]}}",
                "mode": "={{$parameter[\"mode\"]}}",
                "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Provide URL and Data Description"
        },
        {
          "name": "Parse HTML",
          "value": "parseHtml",
          "action": "Parse HTML",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/parse",
              "body": {
                "mode": "={{$parameter[\"mode\"]}}",
                "content": "={{$parameter[\"content\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Provide HTML content and Data Description"
        },
        {
          "name": "Extract Markdown",
          "value": "extractMarkdown",
          "action": "Extract markdown from URL",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/extract_markdown",
              "body": {
                "url": "={{$parameter[\"url\"]}}",
                "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Convert a URL to clean markdown text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "url-extractor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "agentExtract",
      "options": [
        {
          "name": "Interact and Extract",
          "value": "agentExtract",
          "action": "Navigate interact and extract any data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/agent/extract",
              "body": {
                "url": "={{$parameter[\"url\"]}}"
              },
              "method": "POST"
            }
          },
          "description": "Use AI agent to navigate, interact with and extract data from a webpage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scraping-agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runScraper",
      "options": [
        {
          "name": "Run Configured Scraper",
          "value": "runScraper",
          "action": "Run scraper configured on parsera org",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/scrapers/run_async",
              "body": {
                "url": "={{$parameter[\"url\"] || undefined}}",
                "name": "={{$parameter[\"existingScraperName\"]}}",
                "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
              },
              "method": "POST",
              "baseURL": "https://api.parsera.org/v1"
            }
          },
          "description": "Run a scraper configured on parsera.org"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reusable-scrapers"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Extract URL",
      "value": "scrapeUrl",
      "action": "Extract from URL",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/extract",
          "body": {
            "url": "={{$parameter[\"url\"]}}",
            "mode": "={{$parameter[\"mode\"]}}",
            "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Provide URL and Data Description",
      "resource": "url-extractor"
    },
    {
      "name": "Parse HTML",
      "value": "parseHtml",
      "action": "Parse HTML",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/parse",
          "body": {
            "mode": "={{$parameter[\"mode\"]}}",
            "content": "={{$parameter[\"content\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Provide HTML content and Data Description",
      "resource": "url-extractor"
    },
    {
      "name": "Extract Markdown",
      "value": "extractMarkdown",
      "action": "Extract markdown from URL",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/extract_markdown",
          "body": {
            "url": "={{$parameter[\"url\"]}}",
            "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Convert a URL to clean markdown text",
      "resource": "url-extractor"
    },
    {
      "name": "Interact and Extract",
      "value": "agentExtract",
      "action": "Navigate interact and extract any data",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/agent/extract",
          "body": {
            "url": "={{$parameter[\"url\"]}}"
          },
          "method": "POST"
        }
      },
      "description": "Use AI agent to navigate, interact with and extract data from a webpage",
      "resource": "scraping-agent"
    },
    {
      "name": "Run Configured Scraper",
      "value": "runScraper",
      "action": "Run scraper configured on parsera org",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/scrapers/run_async",
          "body": {
            "url": "={{$parameter[\"url\"] || undefined}}",
            "name": "={{$parameter[\"existingScraperName\"]}}",
            "proxy_country": "={{$parameter[\"proxyCountry\"]}}"
          },
          "method": "POST",
          "baseURL": "https://api.parsera.org/v1"
        }
      },
      "description": "Run a scraper configured on parsera.org",
      "resource": "reusable-scrapers"
    }
  ]

npm_readme:
  # n8n-nodes-aiscraper

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

  ## Quickstart
  [![Quickstart Video](https://img.youtube.com/vi/VUzKFRuqvGM/0.jpg)](https://www.youtube.com/watch?v=VUzKFRuqvGM)

  Parsera AI Scraper is a service that uses AI to extract structured data from web pages, either by providing a URL or raw HTML content. It simplifies web scraping by allowing users to define data fields through natural language descriptions or by using pre-configured scraping agents.

  [https://parsera.org](https://parsera.org)

  [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

  The Parsera AI Scraper node supports the following operations:

  *   **Extractor:**
      *   **Extract URL:** Provide a URL, and Parsera will fetch the content and extract structured data based on your defined columns. Supports proxy usage and sending cookies.
      *   **Parse HTML:** Provide raw HTML content, and Parsera will parse it to extract structured data based on your defined columns.
      *   **Extract Markdown:** Convert a URL to clean markdown text. Supports proxy usage.
  *   **Scraping Agent:**
      *   **Interact and Extract:** Use an AI agent that can navigate, interact with, and extract data from a webpage. Provide a URL and a prompt describing what data to extract. Optionally define an output schema to structure the results.
  *   **Reusable Scraper:**
      *   **Run Configured Scraper:** Run a scraper that has been pre-configured on the [Parsera platform](https://parsera.org). Select from your existing scrapers, optionally override the URL, and use proxy/cookies. **Note:** Scrapers must be created separately via the Parsera application or API before they can be used here.

  ## Credentials

  To use this node, you need to create AI Scraper credentials within n8n. This requires an API Key from Parsera.

  1.  Sign up for an account at [https://parsera.org](https://parsera.org).
  2.  Once logged in, navigate to your API settings to find your API Key.
  3.  In n8n, create new credentials of type "AI Scraper API".
  4.  Enter the API Key obtained from Parsera into the API Key field in the n8n credential configuration.

  ## Compatibility

  *   **Minimum n8n Version:** While the node might work with earlier versions, it has been developed and tested primarily on **n8n version 1.19.3**.

  ## Usage

  This node allows you to extract structured data from websites.

  **Key Parameters:**

  *   **Resource:** Choose between "Extractor" (for direct URL/HTML/markdown extraction), "Scraping Agent" (for AI-driven navigation and extraction), or "Reusable Scraper" (for running pre-configured scrapers).
  *   **Operation:** Select the specific action based on the chosen resource.
  *   **URL/Content:** Provide the target URL or raw HTML content, depending on the operation.
  *   **Prompt:** Provide context and general instructions to the scraper (Extractor), or describe what data to extract (Scraping Agent).
  *   **Columns Input Mode (for Extractor and Scraping Agent):**
      *   **Fields:** Define columns using a user-friendly interface with separate fields for Name, Type, and Column Prompt. This is the default and recommended for most UI-based configurations.
      *   **JSON:** Define columns as a single JSON object. This mode is powerful for programmatic use, AI tool integration, or complex schemas. The expected format is `{"your_field_name": {"description": "What to extract", "type": "string"}}`.
  *   **Columns:** Depending on the selected input mode, you will either fill out individual fields or provide a JSON object.
      *   **Name:** The key for the extracted data in the output (e.g., `productName`, `price`).
      *   **Type:** The expected data type (`any`, `string`, `integer`, `number`, `bool`, `list`).
      *   **Column Prompt:** A natural language instruction telling the AI what data to look for (e.g., "The main title of the product page").
  *   **Mode (for Extractor):**
      *   **Standard:** Balanced approach for speed and accuracy.
      *   **Precision:** Extract data hidden inside HTML structures with higher accuracy.
  *   **Proxy Country:** Optionally route your request through a proxy in a specific country to access geo-restricted content.
  *   **Cookies:** Optionally provide cookies as a JSON array to be sent with the request (e.g., for authenticated sessions). Format: `[{"name": "cookieName", "value": "cookieValue", "domain": ".example.com"}]`.
  *   **Scraper Name (for Reusable Scraper):** Select a pre-configured scraper from your Parsera account. Must be created beforehand via the Parsera application or API.

  The output of the node will be a list of items containing the extracted data.

  For more detailed examples and advanced usage, refer to the [Parsera API documentation](https://docs.parsera.org/api/getting-started/).
  If you are new to n8n, you might find the [Try it out](https://docs.n8n.io/try-it-out/) documentation helpful to get started with the platform.

  ## Resources

  *   [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  *   [Parsera Website](https://parsera.org)
  *   [Parsera API Documentation](https://docs.parsera.org/api/getting-started/)

  ## Version history

  *   **0.3.0** — Added Extract Markdown operation, Scraping Agent (Interact and Extract) resource, renamed old scraping agents to Reusable Scrapers, restructured resources, URL validation, polished operation names.
  *   **0.2.1** — Unified API, simplified scraper interface.
  *   **0.2.0** — Added templates, load available agents from API, rearranged actions.
  *   **0.1.6** — Documentation updates and naming tweaks.
  *   **0.1.5** — Fixed broken extractor URL, refactored to separate files.

ai_documentation_summary:
  {"purpose":"This n8n community node enables automated web scraping by extracting structured data from websites using the Parsera AI Scraper API, supporting both direct URL/HTML parsing and pre-configured scraping agents.","capabilities":["Extract data from a URL using AI-based parsing","Parse raw HTML content to extract structured data","Utilize pre-configured scraping agents from the Parsera platform","Define extraction attributes via natural language descriptions or JSON schema","Support proxy usage for geo-restricted content access","Send custom cookies for authenticated sessions","Configure extraction mode (Standard or Precision) for speed vs. accuracy trade-offs"],"authentication":"API Key required (Parsera API Key)","commonUseCases":["Automated data collection from e-commerce product pages","Competitor price monitoring","Extracting structured data from dynamic web applications","Parsing HTML content from internal or external sources"],"limitations":["Requires separate creation of scraping agents via Parsera platform before use","Minimum tested n8n version is 1.19.3","Community node status may indicate less official support compared to official nodes"],"relatedNodes":["HTTP Request","Code","JSON"]}


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

updated_at: 2026-04-16 09:43:36
author_name: devs_hostinger
author_github_url: https://github.com/hostinger/api-n8n-node.git
npm_package_name: n8n-nodes-hostinger-api
npm_version: 1.0.21
community_fetched_at: 2026-04-16T09:43:36.168Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "vps",
      "options": [
        {
          "name": "Billing",
          "value": "billing"
        },
        {
          "name": "DNS",
          "value": "dns"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Domain Forwarding",
          "value": "domainForwarding"
        },
        {
          "name": "Domain WHOIS",
          "value": "whois"
        },
        {
          "name": "Reach",
          "value": "reach"
        },
        {
          "name": "VPS",
          "value": "vps"
        },
        {
          "name": "VPS Actions",
          "value": "vpsActions"
        },
        {
          "name": "VPS Backups",
          "value": "vpsBackups"
        },
        {
          "name": "VPS Data Centers",
          "value": "vpsDataCenters"
        },
        {
          "name": "VPS Docker Manager",
          "value": "vpsDocker"
        },
        {
          "name": "VPS Firewall",
          "value": "vpsFirewall"
        },
        {
          "name": "VPS Malware Scanner",
          "value": "vpsMonarx"
        },
        {
          "name": "VPS Post Install Scripts",
          "value": "vpsScripts"
        },
        {
          "name": "VPS PTR",
          "value": "vpsPTR"
        },
        {
          "name": "VPS Public Keys",
          "value": "vpsPublicKeys"
        },
        {
          "name": "VPS Snapshots",
          "value": "vpsSnapshots"
        },
        {
          "name": "VPS Templates",
          "value": "vpsTemplates"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAction",
      "options": [
        {
          "name": "Get Action",
          "value": "getAction",
          "action": "Get VPS action"
        },
        {
          "name": "List Actions",
          "value": "listActions",
          "action": "List VPS actions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsActions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listProjects",
      "options": [
        {
          "name": "Create Project",
          "value": "createProject",
          "action": "Create Docker project"
        },
        {
          "name": "Delete Project",
          "value": "deleteProject",
          "action": "Delete Docker project"
        },
        {
          "name": "Get Project Logs",
          "value": "getLogs",
          "action": "Get Docker project logs"
        },
        {
          "name": "List Containers",
          "value": "listContainers",
          "action": "List Docker containers"
        },
        {
          "name": "List Contents",
          "value": "listContents",
          "action": "List Docker containers content"
        },
        {
          "name": "List Projects",
          "value": "listProjects",
          "action": "List Docker projects"
        },
        {
          "name": "Restart Project",
          "value": "restartProject",
          "action": "Restart Docker project"
        },
        {
          "name": "Start Project",
          "value": "startProject",
          "action": "Start Docker project"
        },
        {
          "name": "Stop Project",
          "value": "stopProject",
          "action": "Stop Docker project"
        },
        {
          "name": "Update Project",
          "value": "updateProject",
          "action": "Update Docker project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsDocker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listBackups",
      "options": [
        {
          "name": "Delete Backup",
          "value": "deleteBackup",
          "action": "Delete VPS backup"
        },
        {
          "name": "List Backups",
          "value": "listBackups",
          "action": "List VPS backups"
        },
        {
          "name": "Restore Backup",
          "value": "restoreBackup",
          "action": "Restore VPS backup"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsBackups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDataCenters",
      "options": [
        {
          "name": "List Data Centers",
          "value": "listDataCenters",
          "action": "List VPS data centers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsDataCenters"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createPTR",
      "options": [
        {
          "name": "Create PTR",
          "value": "createPTR",
          "action": "Create PTR record"
        },
        {
          "name": "Delete PTR",
          "value": "deletePTR",
          "action": "Delete PTR record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsPTR"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "activateFirewall",
      "options": [
        {
          "name": "Firewall Activate",
          "value": "activateFirewall",
          "action": "Activate VPS firewall"
        },
        {
          "name": "Firewall Create",
          "value": "createFirewall",
          "action": "Create VPS firewall"
        },
        {
          "name": "Firewall Deactivate",
          "value": "deactivateFirewall",
          "action": "Deactivate VPS firewall"
        },
        {
          "name": "Firewall Delete",
          "value": "deleteFirewall",
          "action": "Delete VPS firewall"
        },
        {
          "name": "Firewall Get",
          "value": "getFirewall",
          "action": "Get VPS firewall"
        },
        {
          "name": "Firewall List",
          "value": "listFirewalls",
          "action": "List VPS firewalls"
        },
        {
          "name": "Firewall Rule Create",
          "value": "createFirewallRule",
          "action": "Create VPS firewall rule"
        },
        {
          "name": "Firewall Rule Delete",
          "value": "deleteFirewallRule",
          "action": "Delete VPS firewall rule"
        },
        {
          "name": "Firewall Rule Update",
          "value": "updateFirewallRule",
          "action": "Update VPS firewall rule"
        },
        {
          "name": "Firewall Sync",
          "value": "syncFirewall",
          "action": "Sync VPS firewall"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsFirewall"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMonarx",
      "options": [
        {
          "name": "Get Monarx",
          "value": "getMonarx",
          "action": "Get VPS malware scanner status"
        },
        {
          "name": "Add Monarx",
          "value": "addMonarx",
          "action": "Add VPS malware scanner"
        },
        {
          "name": "Remove Monarx",
          "value": "removeMonarx",
          "action": "Remove VPS malware scanner"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsMonarx"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTemplate",
      "options": [
        {
          "name": "Get Template",
          "value": "getTemplate",
          "action": "Get VPS template"
        },
        {
          "name": "List Templates",
          "value": "listTemplates",
          "action": "List VPS templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsTemplates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPostInstallScript",
      "options": [
        {
          "name": "Post Install Script Create",
          "value": "createPostInstallScript",
          "action": "Create VPS post install script"
        },
        {
          "name": "Post Install Script Delete",
          "value": "deletePostInstallScript",
          "action": "Delete VPS post install script"
        },
        {
          "name": "Post Install Script Get",
          "value": "getPostInstallScript",
          "action": "Get VPS post install script"
        },
        {
          "name": "Post Install Script List",
          "value": "listPostInstallScripts",
          "action": "List VPS post install scripts"
        },
        {
          "name": "Post Install Script Update",
          "value": "updatePostInstallScript",
          "action": "Update VPS post install script"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsScripts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "attachPublicKey",
      "options": [
        {
          "name": "Attach Public Key",
          "value": "attachPublicKey",
          "action": "Attach VPS public key"
        },
        {
          "name": "Delete Public Key",
          "value": "deletePublicKey",
          "action": "Delete VPS public key"
        },
        {
          "name": "List Public Keys",
          "value": "listPublicKeys",
          "action": "List VPS public keys"
        },
        {
          "name": "Create Public Key",
          "value": "createPublicKey",
          "action": "Create VPS public key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsPublicKeys"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSnapshot",
      "options": [
        {
          "name": "Get Snapshot",
          "value": "getSnapshot",
          "action": "Get VPS snapshot"
        },
        {
          "name": "Create Snapshot",
          "value": "createSnapshot",
          "action": "Create VPS snapshot"
        },
        {
          "name": "Delete Snapshot",
          "value": "deleteSnapshot",
          "action": "Delete VPS snapshot"
        },
        {
          "name": "Restore Snapshot",
          "value": "restoreSnapshot",
          "action": "Restore VPS snapshot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vpsSnapshots"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getVm",
      "options": [
        {
          "name": "Get Metrics",
          "value": "getVmMetrics",
          "action": "Get VPS metrics"
        },
        {
          "name": "Get Public Keys",
          "value": "getVmPublicKeys",
          "action": "Get VPS public keys"
        },
        {
          "name": "Get VPS",
          "value": "getVm",
          "action": "Get VPS"
        },
        {
          "name": "Hostname Reset",
          "value": "resetHostname",
          "action": "Reset VPS hostname"
        },
        {
          "name": "Hostname Update",
          "value": "updateHostname",
          "action": "Update VPS hostname"
        },
        {
          "name": "List VPS",
          "value": "listVms",
          "action": "List VPS"
        },
        {
          "name": "Purchase New VPS",
          "value": "purchaseVm",
          "action": "Purchase new VPS"
        },
        {
          "name": "Recreate",
          "value": "recreateVm",
          "action": "Recreate VPS"
        },
        {
          "name": "Restart",
          "value": "restartVm",
          "action": "Restart VPS"
        },
        {
          "name": "Setup",
          "value": "setupVm",
          "action": "Setup VPS"
        },
        {
          "name": "Start",
          "value": "startVm",
          "action": "Start VPS"
        },
        {
          "name": "Start Recovery",
          "value": "createRecovery",
          "action": "Start VPS recovery mode"
        },
        {
          "name": "Stop",
          "value": "stopVm",
          "action": "Stop VPS"
        },
        {
          "name": "Stop Recovery",
          "value": "deleteRecovery",
          "action": "Stop VPS recovery mode"
        },
        {
          "name": "Update Nameservers",
          "value": "updateNameservers",
          "action": "Update VPS nameservers"
        },
        {
          "name": "Update Panel Password",
          "value": "updatePanelPassword",
          "action": "Update VPS control panel password"
        },
        {
          "name": "Update Root Password",
          "value": "updateRootPassword",
          "action": "Update VPS root password"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDnsSnapshots",
      "options": [
        {
          "name": "DNS Snapshot Get",
          "value": "getDnsSnapshot",
          "action": "Get DNS snapshot"
        },
        {
          "name": "DNS Snapshot List",
          "value": "listDnsSnapshots",
          "action": "List DNS snapshots"
        },
        {
          "name": "DNS Snapshot Restore",
          "value": "restoreDnsSnapshot",
          "action": "Restore DNS snapshot"
        },
        {
          "name": "DNS Zone Delete",
          "value": "deleteDnsZone",
          "action": "Delete DNS zone"
        },
        {
          "name": "DNS Zone Get",
          "value": "getDnsZone",
          "action": "Get DNS zone"
        },
        {
          "name": "DNS Zone Reset",
          "value": "resetDnsZone",
          "action": "Reset DNS zone"
        },
        {
          "name": "DNS Zone Update",
          "value": "updateDnsZone",
          "action": "Update DNS zone"
        },
        {
          "name": "DNS Zone Validate",
          "value": "validateDnsZone",
          "action": "Validate DNS zone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dns"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDomains",
      "options": [
        {
          "name": "Check Domain Availability",
          "value": "checkDomainAvailability",
          "action": "Check domain availability"
        },
        {
          "name": "Disable Domain Lock",
          "value": "disableDomainLock",
          "action": "Disable domain lock"
        },
        {
          "name": "Disable Privacy Protection",
          "value": "disablePrivacyProtection",
          "action": "Disable domain privacy protection"
        },
        {
          "name": "Enable Domain Lock",
          "value": "enableDomainLock",
          "action": "Enable domain lock"
        },
        {
          "name": "Enable Privacy Protection",
          "value": "enablePrivacyProtection",
          "action": "Enable domain privacy protection"
        },
        {
          "name": "Get Domain",
          "value": "getDomain",
          "action": "Get a domain"
        },
        {
          "name": "List Domains",
          "value": "listDomains",
          "action": "List domains"
        },
        {
          "name": "Purchase Domain",
          "value": "purchaseDomain",
          "action": "Purchase domain"
        },
        {
          "name": "Update Nameservers",
          "value": "updateDomainNameservers",
          "action": "Update domain nameservers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listWhoisProfiles",
      "options": [
        {
          "name": "Create WHOIS Profile",
          "value": "createWhoisProfile",
          "action": "Create WHOIS profile"
        },
        {
          "name": "Delete WHOIS Profile",
          "value": "deleteWhoisProfile",
          "action": "Delete WHOIS profile"
        },
        {
          "name": "Get WHOIS Profile",
          "value": "getWhoisProfile",
          "action": "Get WHOIS profile"
        },
        {
          "name": "Get WHOIS Profile Usage",
          "value": "getWhoisProfileUsage",
          "action": "Get WHOIS profile usage"
        },
        {
          "name": "List WHOIS Profiles",
          "value": "listWhoisProfiles",
          "action": "List WHOIS profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whois"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getForwardingData",
      "options": [
        {
          "name": "Get Forwarding Data",
          "value": "getForwardingData",
          "action": "Get domain forwarding"
        },
        {
          "name": "Delete Forwarding Data",
          "value": "deleteForwardingData",
          "action": "Delete domain forwarding"
        },
        {
          "name": "Create Forwarding Data",
          "value": "createForwardingData",
          "action": "Create domain forwarding"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domainForwarding"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCatalogList",
      "options": [
        {
          "name": "Cancel Subscription",
          "value": "deleteSubscription",
          "action": "Cancel subscription"
        },
        {
          "name": "Delete Payment Method",
          "value": "deletePaymentMethod",
          "action": "Delete payment method"
        },
        {
          "name": "Get Catalog Item List",
          "value": "getCatalogList",
          "action": "Get catalog item list"
        },
        {
          "name": "Get Payment Method List",
          "value": "getPaymentList",
          "action": "Get payment method list"
        },
        {
          "name": "Get Subscription List",
          "value": "getSubscriptionList",
          "action": "Get subscription list"
        },
        {
          "name": "Set Default Payment Method",
          "value": "setPaymentMethod",
          "action": "Set default payment method"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "billing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listContacts",
      "options": [
        {
          "name": "Create Contact",
          "value": "createContact",
          "action": "Create Reach contact"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete Reach contact"
        },
        {
          "name": "Get Segment",
          "value": "getSegment",
          "action": "Get Reach segment"
        },
        {
          "name": "Get Segment Contacts",
          "value": "getSegmentContacts",
          "action": "Get Reach segment contacts"
        },
        {
          "name": "List Contacts",
          "value": "listContacts",
          "action": "List Reach contacts"
        },
        {
          "name": "List Segments",
          "value": "listSegments",
          "action": "List Reach segments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reach"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Action",
      "value": "getAction",
      "action": "Get VPS action",
      "resource": "vpsActions"
    },
    {
      "name": "List Actions",
      "value": "listActions",
      "action": "List VPS actions",
      "resource": "vpsActions"
    },
    {
      "name": "Create Project",
      "value": "createProject",
      "action": "Create Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Delete Project",
      "value": "deleteProject",
      "action": "Delete Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Get Project Logs",
      "value": "getLogs",
      "action": "Get Docker project logs",
      "resource": "vpsDocker"
    },
    {
      "name": "List Containers",
      "value": "listContainers",
      "action": "List Docker containers",
      "resource": "vpsDocker"
    },
    {
      "name": "List Contents",
      "value": "listContents",
      "action": "List Docker containers content",
      "resource": "vpsDocker"
    },
    {
      "name": "List Projects",
      "value": "listProjects",
      "action": "List Docker projects",
      "resource": "vpsDocker"
    },
    {
      "name": "Restart Project",
      "value": "restartProject",
      "action": "Restart Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Start Project",
      "value": "startProject",
      "action": "Start Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Stop Project",
      "value": "stopProject",
      "action": "Stop Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Update Project",
      "value": "updateProject",
      "action": "Update Docker project",
      "resource": "vpsDocker"
    },
    {
      "name": "Delete Backup",
      "value": "deleteBackup",
      "action": "Delete VPS backup",
      "resource": "vpsBackups"
    },
    {
      "name": "List Backups",
      "value": "listBackups",
      "action": "List VPS backups",
      "resource": "vpsBackups"
    },
    {
      "name": "Restore Backup",
      "value": "restoreBackup",
      "action": "Restore VPS backup",
      "resource": "vpsBackups"
    },
    {
      "name": "List Data Centers",
      "value": "listDataCenters",
      "action": "List VPS data centers",
      "resource": "vpsDataCenters"
    },
    {
      "name": "Create PTR",
      "value": "createPTR",
      "action": "Create PTR record",
      "resource": "vpsPTR"
    },
    {
      "name": "Delete PTR",
      "value": "deletePTR",
      "action": "Delete PTR record",
      "resource": "vpsPTR"
    },
    {
      "name": "Firewall Activate",
      "value": "activateFirewall",
      "action": "Activate VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Create",
      "value": "createFirewall",
      "action": "Create VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Deactivate",
      "value": "deactivateFirewall",
      "action": "Deactivate VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Delete",
      "value": "deleteFirewall",
      "action": "Delete VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Get",
      "value": "getFirewall",
      "action": "Get VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall List",
      "value": "listFirewalls",
      "action": "List VPS firewalls",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Rule Create",
      "value": "createFirewallRule",
      "action": "Create VPS firewall rule",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Rule Delete",
      "value": "deleteFirewallRule",
      "action": "Delete VPS firewall rule",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Rule Update",
      "value": "updateFirewallRule",
      "action": "Update VPS firewall rule",
      "resource": "vpsFirewall"
    },
    {
      "name": "Firewall Sync",
      "value": "syncFirewall",
      "action": "Sync VPS firewall",
      "resource": "vpsFirewall"
    },
    {
      "name": "Get Monarx",
      "value": "getMonarx",
      "action": "Get VPS malware scanner status",
      "resource": "vpsMonarx"
    },
    {
      "name": "Add Monarx",
      "value": "addMonarx",
      "action": "Add VPS malware scanner",
      "resource": "vpsMonarx"
    },
    {
      "name": "Remove Monarx",
      "value": "removeMonarx",
      "action": "Remove VPS malware scanner",
      "resource": "vpsMonarx"
    },
    {
      "name": "Get Template",
      "value": "getTemplate",
      "action": "Get VPS template",
      "resource": "vpsTemplates"
    },
    {
      "name": "List Templates",
      "value": "listTemplates",
      "action": "List VPS templates",
      "resource": "vpsTemplates"
    },
    {
      "name": "Post Install Script Create",
      "value": "createPostInstallScript",
      "action": "Create VPS post install script",
      "resource": "vpsScripts"
    },
    {
      "name": "Post Install Script Delete",
      "value": "deletePostInstallScript",
      "action": "Delete VPS post install script",
      "resource": "vpsScripts"
    },
    {
      "name": "Post Install Script Get",
      "value": "getPostInstallScript",
      "action": "Get VPS post install script",
      "resource": "vpsScripts"
    },
    {
      "name": "Post Install Script List",
      "value": "listPostInstallScripts",
      "action": "List VPS post install scripts",
      "resource": "vpsScripts"
    },
    {
      "name": "Post Install Script Update",
      "value": "updatePostInstallScript",
      "action": "Update VPS post install script",
      "resource": "vpsScripts"
    },
    {
      "name": "Attach Public Key",
      "value": "attachPublicKey",
      "action": "Attach VPS public key",
      "resource": "vpsPublicKeys"
    },
    {
      "name": "Delete Public Key",
      "value": "deletePublicKey",
      "action": "Delete VPS public key",
      "resource": "vpsPublicKeys"
    },
    {
      "name": "List Public Keys",
      "value": "listPublicKeys",
      "action": "List VPS public keys",
      "resource": "vpsPublicKeys"
    },
    {
      "name": "Create Public Key",
      "value": "createPublicKey",
      "action": "Create VPS public key",
      "resource": "vpsPublicKeys"
    },
    {
      "name": "Get Snapshot",
      "value": "getSnapshot",
      "action": "Get VPS snapshot",
      "resource": "vpsSnapshots"
    },
    {
      "name": "Create Snapshot",
      "value": "createSnapshot",
      "action": "Create VPS snapshot",
      "resource": "vpsSnapshots"
    },
    {
      "name": "Delete Snapshot",
      "value": "deleteSnapshot",
      "action": "Delete VPS snapshot",
      "resource": "vpsSnapshots"
    },
    {
      "name": "Restore Snapshot",
      "value": "restoreSnapshot",
      "action": "Restore VPS snapshot",
      "resource": "vpsSnapshots"
    },
    {
      "name": "Get Metrics",
      "value": "getVmMetrics",
      "action": "Get VPS metrics",
      "resource": "vps"
    },
    {
      "name": "Get Public Keys",
      "value": "getVmPublicKeys",
      "action": "Get VPS public keys",
      "resource": "vps"
    },
    {
      "name": "Get VPS",
      "value": "getVm",
      "action": "Get VPS",
      "resource": "vps"
    },
    {
      "name": "Hostname Reset",
      "value": "resetHostname",
      "action": "Reset VPS hostname",
      "resource": "vps"
    },
    {
      "name": "Hostname Update",
      "value": "updateHostname",
      "action": "Update VPS hostname",
      "resource": "vps"
    },
    {
      "name": "List VPS",
      "value": "listVms",
      "action": "List VPS",
      "resource": "vps"
    },
    {
      "name": "Purchase New VPS",
      "value": "purchaseVm",
      "action": "Purchase new VPS",
      "resource": "vps"
    },
    {
      "name": "Recreate",
      "value": "recreateVm",
      "action": "Recreate VPS",
      "resource": "vps"
    },
    {
      "name": "Restart",
      "value": "restartVm",
      "action": "Restart VPS",
      "resource": "vps"
    },
    {
      "name": "Setup",
      "value": "setupVm",
      "action": "Setup VPS",
      "resource": "vps"
    },
    {
      "name": "Start",
      "value": "startVm",
      "action": "Start VPS",
      "resource": "vps"
    },
    {
      "name": "Start Recovery",
      "value": "createRecovery",
      "action": "Start VPS recovery mode",
      "resource": "vps"
    },
    {
      "name": "Stop",
      "value": "stopVm",
      "action": "Stop VPS",
      "resource": "vps"
    },
    {
      "name": "Stop Recovery",
      "value": "deleteRecovery",
      "action": "Stop VPS recovery mode",
      "resource": "vps"
    },
    {
      "name": "Update Nameservers",
      "value": "updateNameservers",
      "action": "Update VPS nameservers",
      "resource": "vps"
    },
    {
      "name": "Update Panel Password",
      "value": "updatePanelPassword",
      "action": "Update VPS control panel password",
      "resource": "vps"
    },
    {
      "name": "Update Root Password",
      "value": "updateRootPassword",
      "action": "Update VPS root password",
      "resource": "vps"
    },
    {
      "name": "DNS Snapshot Get",
      "value": "getDnsSnapshot",
      "action": "Get DNS snapshot",
      "resource": "dns"
    },
    {
      "name": "DNS Snapshot List",
      "value": "listDnsSnapshots",
      "action": "List DNS snapshots",
      "resource": "dns"
    },
    {
      "name": "DNS Snapshot Restore",
      "value": "restoreDnsSnapshot",
      "action": "Restore DNS snapshot",
      "resource": "dns"
    },
    {
      "name": "DNS Zone Delete",
      "value": "deleteDnsZone",
      "action": "Delete DNS zone",
      "resource": "dns"
    },
    {
      "name": "DNS Zone Get",
      "value": "getDnsZone",
      "action": "Get DNS zone",
      "resource": "dns"
    },
    {
      "name": "DNS Zone Reset",
      "value": "resetDnsZone",
      "action": "Reset DNS zone",
      "resource": "dns"
    },
    {
      "name": "DNS Zone Update",
      "value": "updateDnsZone",
      "action": "Update DNS zone",
      "resource": "dns"
    },
    {
      "name": "DNS Zone Validate",
      "value": "validateDnsZone",
      "action": "Validate DNS zone",
      "resource": "dns"
    },
    {
      "name": "Check Domain Availability",
      "value": "checkDomainAvailability",
      "action": "Check domain availability",
      "resource": "domain"
    },
    {
      "name": "Disable Domain Lock",
      "value": "disableDomainLock",
      "action": "Disable domain lock",
      "resource": "domain"
    },
    {
      "name": "Disable Privacy Protection",
      "value": "disablePrivacyProtection",
      "action": "Disable domain privacy protection",
      "resource": "domain"
    },
    {
      "name": "Enable Domain Lock",
      "value": "enableDomainLock",
      "action": "Enable domain lock",
      "resource": "domain"
    },
    {
      "name": "Enable Privacy Protection",
      "value": "enablePrivacyProtection",
      "action": "Enable domain privacy protection",
      "resource": "domain"
    },
    {
      "name": "Get Domain",
      "value": "getDomain",
      "action": "Get a domain",
      "resource": "domain"
    },
    {
      "name": "List Domains",
      "value": "listDomains",
      "action": "List domains",
      "resource": "domain"
    },
    {
      "name": "Purchase Domain",
      "value": "purchaseDomain",
      "action": "Purchase domain",
      "resource": "domain"
    },
    {
      "name": "Update Nameservers",
      "value": "updateDomainNameservers",
      "action": "Update domain nameservers",
      "resource": "domain"
    },
    {
      "name": "Create WHOIS Profile",
      "value": "createWhoisProfile",
      "action": "Create WHOIS profile",
      "resource": "whois"
    },
    {
      "name": "Delete WHOIS Profile",
      "value": "deleteWhoisProfile",
      "action": "Delete WHOIS profile",
      "resource": "whois"
    },
    {
      "name": "Get WHOIS Profile",
      "value": "getWhoisProfile",
      "action": "Get WHOIS profile",
      "resource": "whois"
    },
    {
      "name": "Get WHOIS Profile Usage",
      "value": "getWhoisProfileUsage",
      "action": "Get WHOIS profile usage",
      "resource": "whois"
    },
    {
      "name": "List WHOIS Profiles",
      "value": "listWhoisProfiles",
      "action": "List WHOIS profiles",
      "resource": "whois"
    },
    {
      "name": "Get Forwarding Data",
      "value": "getForwardingData",
      "action": "Get domain forwarding",
      "resource": "domainForwarding"
    },
    {
      "name": "Delete Forwarding Data",
      "value": "deleteForwardingData",
      "action": "Delete domain forwarding",
      "resource": "domainForwarding"
    },
    {
      "name": "Create Forwarding Data",
      "value": "createForwardingData",
      "action": "Create domain forwarding",
      "resource": "domainForwarding"
    },
    {
      "name": "Cancel Subscription",
      "value": "deleteSubscription",
      "action": "Cancel subscription",
      "resource": "billing"
    },
    {
      "name": "Delete Payment Method",
      "value": "deletePaymentMethod",
      "action": "Delete payment method",
      "resource": "billing"
    },
    {
      "name": "Get Catalog Item List",
      "value": "getCatalogList",
      "action": "Get catalog item list",
      "resource": "billing"
    },
    {
      "name": "Get Payment Method List",
      "value": "getPaymentList",
      "action": "Get payment method list",
      "resource": "billing"
    },
    {
      "name": "Get Subscription List",
      "value": "getSubscriptionList",
      "action": "Get subscription list",
      "resource": "billing"
    },
    {
      "name": "Set Default Payment Method",
      "value": "setPaymentMethod",
      "action": "Set default payment method",
      "resource": "billing"
    },
    {
      "name": "Create Contact",
      "value": "createContact",
      "action": "Create Reach contact",
      "resource": "reach"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete Reach contact",
      "resource": "reach"
    },
    {
      "name": "Get Segment",
      "value": "getSegment",
      "action": "Get Reach segment",
      "resource": "reach"
    },
    {
      "name": "Get Segment Contacts",
      "value": "getSegmentContacts",
      "action": "Get Reach segment contacts",
      "resource": "reach"
    },
    {
      "name": "List Contacts",
      "value": "listContacts",
      "action": "List Reach contacts",
      "resource": "reach"
    },
    {
      "name": "List Segments",
      "value": "listSegments",
      "action": "List Reach segments",
      "resource": "reach"
    }
  ]

npm_readme:
  # n8n-nodes-hostinger-api

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

  Hostinger API allows you to manage your virtual private servers, domains, billing, email marketing, and more. Automate provisioning, monitor resources, and perform various administrative actions programmatically.

  [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

  The Hostinger API node supports the following operations:

  - **Server Management**
  	- List VPS instances
  	- Start/Stop/Restart/Purchase a VPS
  	- Reinstall operating system
  	- Reset root password
  	- Manage SSH keys and post-install scripts

  - **Domain Management**
  	- List domains and check availability
  	- Purchase and manage domains
  	- Configure privacy protection and domain lock
  	- Manage DNS zones and records
  	- Domain forwarding and WHOIS profiles

  - **Monitoring**
  	- Fetch VPS resource usage (CPU, RAM, Disk)
  	- Get server status and uptime
  	- View action history

  - **Networking**
  	- Manage IP addresses and PTR records
  	- Configure firewall rules
  	- Enable/disable backups and snapshots
  	- Malware scanner integration

  - **Provisioning**
  	- Create new VPS instance
  	- Delete VPS instance
  	- Manage data centers and templates

  - **Billing**
  	- View catalog and pricing
  	- Manage payment methods and subscriptions

  - **Email Marketing (Reach)**
  	- List and manage email contacts
  	- Create new contacts with custom fields
  	- Delete contacts by UUID
  	- Manage contact groups
  	- Filter contacts by subscription status

  ## Credentials

  To use this node, you will need to authenticate with the Hostinger API.

  1. **Sign up** for a Hostinger account and obtain a VPS.
  2. **Obtain API Access**:
  	- Hostinger provides API tokens via your account dashboard or API settings (refer to official API docs).
  3. **Set up credentials in n8n**:
  	- Go to **Settings > Credentials** in n8n.
  	- Add a new set of credentials for **Hostinger API** using:
  		- **API Key**

  ## Compatibility

  No known version incompatibilities at this time.

  ## Usage

  1. **Add the Hostinger API node** to your workflow.
  2. **Select the desired operation** (e.g., Start VPS, Create Contact, Check Domain).
  3. **Provide required parameters**, such as VPS ID, contact details, domain name, etc.
  4. **Execute the workflow** and automate your Hostinger management tasks.

  For more complex workflows, combine this node with standard n8n nodes such as HTTP Request, Function, and Set.

  Helpful link for beginners: [Try it out](https://docs.n8n.io/try-it-out/)

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Hostinger API documentation](https://developers.hostinger.com/)
  * [Hostinger VPS Overview](https://www.hostinger.com/vps-hosting)

  ## Version history

  - **v1.0.18**:
    - Fixed release workflow (clean working directory check, full git history fetch)
    - Synced package.json version with npm registry

  - **v1.0.17**:
    - Fixed release workflow configuration
    - Added GITHUB_TOKEN for automated GitHub releases

  - **v1.0.15**:
    - Added segment actions for Email Marketing (Reach)
      - List Segments operation
      - Get Segment operation
      - Get Segment Contacts operation
    - Removed contact groups functionality (replaced with segments)

  - **v1.0.14**:
    - Added fields for Domain Purchase, Check Domain Availability and Update Domain Nameservers operations
    - Refactored scripts for building, linting, and releasing using n8n-node CLI
    - Added strict mode in n8n configuration
    - Updated devDependencies to use latest versions and added release-it for version management
    - Simplified tsconfig.json include paths

  - **v1.0.12**:
    - Refactored the node to use Resources and Operations

  - **v1.0.11**:
    - Updated dependencies

  - **v1.0.10**:
    - Updated dependencies

  - **v1.0.9**:
    - Updated dependencies

  - **v1.0.8**:
    - Added VPS Docker Manager endpoints

  - **v1.0.7**:
    - Added n8n credentials test

  - **v1.0.6**:
    - Updated dependencies

  - **v1.0.5**:
    - Added Email Marketing (Reach) endpoints

  - **v1.0.4**:
    - Added Purchase VM Method
    - Added Billing methods
    - Added Domain Portfolio methods
    - Added Domain WHOIS methods
    - Added Domain Forwarding methods

  - **v1.0.3**:
    - No significant changes

  - **v1.0.2**:
    - Fixed inputs on category selection

  - **v1.0.1**:
    - Added `User-Agent` header

  - **v1.0.0**:
    - Initial release
    - Supports full suite of VPS operations including server management, monitoring, and networking.

ai_documentation_summary:
  {"purpose":"A community n8n node that enables automation of Hostinger API operations including VPS management, domain handling, billing, and email marketing.","capabilities":["List, start, stop, restart, and purchase VPS instances","Manage SSH keys, post-install scripts, and reset root passwords","Reinstall operating systems and manage data centers/templates","List, purchase, configure, and manage domains and DNS records","Monitor VPS resource usage (CPU, RAM, Disk) and server status","Manage IP addresses, PTR records, and firewall rules","Enable/disable backups, snapshots, and use malware scanner","View billing catalog, pricing, and manage payment methods","List, create, delete, and filter email marketing contacts","Manage email contact groups and segments"],"authentication":"API Key","commonUseCases":["Automate VPS provisioning and lifecycle management","Monitor server health and resource usage","Automate domain registration and DNS configuration","Manage email marketing campaigns and contact lists"],"limitations":["Contact groups functionality has been replaced with segments","Requires a Hostinger account and API token access"],"relatedNodes":["HTTP Request","Function","Set"]}


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

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

  # n8n-nodes-sendzen

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

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

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

  ---

  ## Table of Contents

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

  ---

  ## Overview

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

  With this n8n node, you can:

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

  ---

  ## Screenshots

  ### Send Session Message

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

  ### Send Template Message

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

  ---

  ## Installation

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

  ---

  ## Authentication

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

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

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

  ---

  ## Data & Security Notes

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

  ---

  ## Features

  ### SendZen Action Node

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

  ### SendZen Trigger Node

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

  ---

  ## How to Use the SendZen Action Node

  ### Prerequisites

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

  ### Setup Process

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

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

  ### Integration Steps (n8n)

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

  ---

  ## How to Use the SendZen Trigger Node

  ### Prerequisites

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

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

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

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

  To enable signature verification in n8n:

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

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

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

  ### Setup Process

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

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

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

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

  ---

  ## Common Use Cases

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


    ### Example 1: New lead → WhatsApp template

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

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

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

  ---

  ## Best Practices

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

  ---

  ## Troubleshooting

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

  ---

  ## Compatibility

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

  ---

  ## Resources

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

  ---

  ## Version history

  ### 1.0.1

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

  ### 1.0.0

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

  ---

  ## Running Locally

  If you want to contribute or modify this node:

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

  ---

  ## Contributing

  We welcome contributions! Please follow these steps:

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

  ## Support

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

  ---

  ## License

  [MIT](LICENSE.md)

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


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

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

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

npm_readme:
  # n8n-nodes-contentdrips

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

  ## Features

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

  ## Installation

  ### n8n Cloud

  For n8n Cloud users:

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

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

  ### Self-hosted n8n

  For self-hosted installations, you have several options:

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

  #### Option 2: Docker Compose

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

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

  #### Option 3: Manual Installation

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

  # Install the node
  npm install n8n-nodes-contentdrips

  # Restart n8n
  ```

  ## Prerequisites

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

  ## Configuration

  ### Credentials Setup

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

  ### Template Preparation

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

  ## Operations

  ### Generate Graphic

  Create static graphics (PNG/PDF) from templates:

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

  ### Generate Carousel

  Create multi-slide carousels:

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

  ### Check Job Status

  Monitor background job processing:

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

  ### Get Job Result

  Retrieve completed job results:

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

  ## Example Workflows

  ### Blog to Carousel Automation

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

  ### Social Media Graphics

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

  ## API Response Examples

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

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

  ## Troubleshooting

  ### Common Issues

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

  ### Error Handling

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

  ## Support

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

  ## License

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

  ## Contributing

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

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


node_type: n8n-nodes-salesrobot.salesrobot
package_name: n8n-nodes-salesrobot
display_name: Salesrobot
description: Interact with Salesrobot API for LinkedIn automation and outreach
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: coderman400
author_github_url: https://github.com/coderman400/
npm_package_name: n8n-nodes-salesrobot
npm_version: 0.3.0
community_fetched_at: 2026-04-16T09:43:36.170Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "AI Personalization",
          "value": "aiPersonalization"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "LinkedIn",
          "value": "linkedin"
        },
        {
          "name": "Setting",
          "value": "settings"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Add Prospect",
          "value": "addProspect",
          "action": "Add a single prospect to campaign",
          "routing": {
            "request": {
              "url": "/add-from-csv",
              "method": "POST"
            }
          },
          "description": "Add a single prospect to a campaign using their LinkedIn profile"
        },
        {
          "name": "Add Sequence Steps",
          "value": "addSequence",
          "action": "Add sequence steps to campaign",
          "routing": {
            "request": {
              "url": "/sequence/save/from-steps",
              "method": "POST"
            }
          },
          "description": "Add multiple sequence steps to a campaign"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a campaign",
          "routing": {
            "send": {
              "type": "body",
              "value": "={{$parameter.linkedinAccountUuid}}",
              "property": "linkedinAccountUuid"
            },
            "request": {
              "url": "/campaign",
              "method": "POST"
            }
          },
          "description": "Create a new campaign"
        },
        {
          "name": "Delete Prospects",
          "value": "deleteProspects",
          "action": "Delete prospects from campaign",
          "routing": {
            "request": {
              "url": "/campaign/deleteMultiple",
              "method": "POST"
            }
          },
          "description": "Delete multiple prospects from a campaign"
        },
        {
          "name": "Get Prospect Status",
          "value": "getProspectStatus",
          "action": "Get prospect execution details",
          "routing": {
            "request": {
              "url": "/campaign/prospects/execution-details",
              "method": "GET"
            }
          },
          "description": "Get execution details and status for a specific prospect"
        },
        {
          "name": "Get Prospects",
          "value": "getProspects",
          "action": "Get campaign prospects",
          "routing": {
            "request": {
              "url": "/campaign/prospects",
              "method": "GET"
            }
          },
          "description": "Get list of prospects in a campaign"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get campaign statistics",
          "routing": {
            "request": {
              "url": "/campaignTimeWiseStats",
              "method": "GET"
            }
          },
          "description": "Get time-wise statistics for a campaign"
        },
        {
          "name": "Import From CSV",
          "value": "importFromCsv",
          "action": "Import prospects from CSV data",
          "routing": {
            "request": {
              "url": "/add-from-csv",
              "method": "POST"
            }
          },
          "description": "Import multiple prospects into campaign from CSV-like data structure"
        },
        {
          "name": "Import Prospects",
          "value": "importProspects",
          "action": "Import prospects from sales navigator",
          "routing": {
            "request": {
              "url": "/add-from-lisalesnav-search",
              "method": "POST"
            }
          },
          "description": "Import prospects into campaign from LinkedIn Sales Navigator search"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List campaigns",
          "routing": {
            "request": {
              "url": "/campaigns",
              "method": "GET"
            }
          },
          "description": "Get a list of all campaigns"
        },
        {
          "name": "Pause/Resume",
          "value": "pauseResume",
          "action": "Pause or resume campaign",
          "routing": {
            "request": {
              "url": "/campaign/pause",
              "method": "POST"
            }
          },
          "description": "Pause or resume a campaign"
        },
        {
          "name": "Pause/Resume Prospect",
          "value": "pauseResumeProspect",
          "action": "Pause or resume prospect",
          "routing": {
            "request": {
              "url": "/campaign/pauseForProspect",
              "method": "POST"
            }
          },
          "description": "Pause or resume a specific prospect in a campaign"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start campaign",
          "routing": {
            "request": {
              "url": "/start",
              "method": "POST"
            }
          },
          "description": "Start a campaign"
        },
        {
          "name": "Update Configuration",
          "value": "updateConfiguration",
          "action": "Update campaign configuration",
          "routing": {
            "request": {
              "url": "/campaign/settings/update",
              "method": "POST"
            }
          },
          "description": "Update campaign settings and configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAiVariables",
      "options": [
        {
          "name": "Create AI Variable",
          "value": "createAiVariable",
          "action": "Create an AI variable",
          "routing": {
            "request": {
              "url": "/sequence/add_new_ai_variable",
              "method": "POST"
            }
          },
          "description": "Create or update an AI variable for use in campaign sequences"
        },
        {
          "name": "Create Smart Comment Variable",
          "value": "createSmartCommentVariable",
          "action": "Create a smart comment variable",
          "routing": {
            "request": {
              "url": "/sequence/add_new_smart_comment_variable",
              "method": "POST"
            }
          },
          "description": "Create or update a smart comment variable for post engagement sequences"
        },
        {
          "name": "Create Video Avatar",
          "value": "createVideoAvatar",
          "action": "Create video avatar",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/create-video-avatar",
              "method": "POST"
            }
          },
          "description": "Create a video avatar for AI video personalization"
        },
        {
          "name": "Create Voice Clone",
          "value": "createVoiceClone",
          "action": "Create voice clone",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/create-voice-clone",
              "method": "POST"
            }
          },
          "description": "Create a voice clone for AI voice personalization"
        },
        {
          "name": "Delete Voice Clone",
          "value": "deleteVoiceClone",
          "action": "Delete voice clone",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/delete-voice-clone",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing voice clone"
        },
        {
          "name": "Generate Sample Video",
          "value": "generateSampleVideo",
          "action": "Generate sample video",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/generate-video-sample",
              "method": "POST"
            }
          },
          "description": "Generate a sample video with AI video personalization"
        },
        {
          "name": "Generate Test Voice Message",
          "value": "generateTestVoiceMessage",
          "action": "Generate test voice message",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/generate-test-voice-message",
              "method": "POST"
            }
          },
          "description": "Generate a test voice message to preview voice clone"
        },
        {
          "name": "Get AI Variables",
          "value": "getAiVariables",
          "action": "Get AI variables",
          "routing": {
            "request": {
              "url": "/sequence/ai_variable",
              "method": "GET"
            }
          },
          "description": "Get list of AI variables for use in sequences"
        },
        {
          "name": "Get Smart Comment Variables",
          "value": "getSmartCommentVariables",
          "action": "Get smart comment variables",
          "routing": {
            "request": {
              "url": "/sequence/smart_comment_variable",
              "method": "GET"
            }
          },
          "description": "Get list of smart comment variables for post engagement"
        },
        {
          "name": "Get Video Avatar",
          "value": "getVideoAvatar",
          "action": "Get video avatar",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/get-video-avatar",
              "method": "GET"
            }
          },
          "description": "Get video avatar for AI video personalization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiPersonalization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccounts",
      "options": [
        {
          "name": "Get Accounts",
          "value": "getAccounts",
          "action": "Get LinkedIn accounts",
          "routing": {
            "request": {
              "url": "/linkedinAccounts",
              "method": "GET"
            }
          },
          "description": "Get all connected LinkedIn accounts"
        },
        {
          "name": "Sync Inbox",
          "value": "syncInbox",
          "action": "Sync LinkedIn inbox",
          "routing": {
            "request": {
              "url": "/syncedMessages",
              "method": "POST"
            }
          },
          "description": "Synchronize LinkedIn inbox messages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "updateQuota",
      "options": [
        {
          "name": "Automatic Warmup",
          "value": "automaticWarmup",
          "action": "Configure automatic warmup",
          "routing": {
            "request": {
              "url": "/settings/automaticWarmUp",
              "method": "POST"
            }
          },
          "description": "Configure automatic connection acceptance and suggested connections"
        },
        {
          "name": "Copy Blacklist From Account",
          "value": "copyBlacklist",
          "action": "Copy blacklist from another account",
          "routing": {
            "request": {
              "url": "/blacklist/copy_from_account",
              "method": "POST"
            }
          },
          "description": "Copy blacklist settings from another LinkedIn account"
        },
        {
          "name": "Delete Pending Invites",
          "value": "deletePendingInvites",
          "action": "Delete pending invites",
          "routing": {
            "request": {
              "url": "/settings/pendingInvite",
              "method": "POST"
            }
          },
          "description": "Delete old pending connection invites"
        },
        {
          "name": "Update Blacklist",
          "value": "updateBlacklist",
          "action": "Update blacklist settings",
          "routing": {
            "request": {
              "url": "/blacklist/update",
              "method": "POST"
            }
          },
          "description": "Update blacklisted companies and profile URLs"
        },
        {
          "name": "Update Quota",
          "value": "updateQuota",
          "action": "Update quota settings",
          "routing": {
            "request": {
              "url": "/settings/quota",
              "method": "POST"
            }
          },
          "description": "Update daily quota and warm up settings for LinkedIn account"
        },
        {
          "name": "Update Schedule",
          "value": "updateSchedule",
          "action": "Update schedule settings",
          "routing": {
            "request": {
              "url": "/schedule",
              "method": "POST"
            }
          },
          "description": "Update schedule settings including working hours and days"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "settings"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Prospect",
      "value": "addProspect",
      "action": "Add a single prospect to campaign",
      "routing": {
        "request": {
          "url": "/add-from-csv",
          "method": "POST"
        }
      },
      "description": "Add a single prospect to a campaign using their LinkedIn profile",
      "resource": "campaign"
    },
    {
      "name": "Add Sequence Steps",
      "value": "addSequence",
      "action": "Add sequence steps to campaign",
      "routing": {
        "request": {
          "url": "/sequence/save/from-steps",
          "method": "POST"
        }
      },
      "description": "Add multiple sequence steps to a campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a campaign",
      "routing": {
        "send": {
          "type": "body",
          "value": "={{$parameter.linkedinAccountUuid}}",
          "property": "linkedinAccountUuid"
        },
        "request": {
          "url": "/campaign",
          "method": "POST"
        }
      },
      "description": "Create a new campaign",
      "resource": "campaign"
    },
    {
      "name": "Delete Prospects",
      "value": "deleteProspects",
      "action": "Delete prospects from campaign",
      "routing": {
        "request": {
          "url": "/campaign/deleteMultiple",
          "method": "POST"
        }
      },
      "description": "Delete multiple prospects from a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Prospect Status",
      "value": "getProspectStatus",
      "action": "Get prospect execution details",
      "routing": {
        "request": {
          "url": "/campaign/prospects/execution-details",
          "method": "GET"
        }
      },
      "description": "Get execution details and status for a specific prospect",
      "resource": "campaign"
    },
    {
      "name": "Get Prospects",
      "value": "getProspects",
      "action": "Get campaign prospects",
      "routing": {
        "request": {
          "url": "/campaign/prospects",
          "method": "GET"
        }
      },
      "description": "Get list of prospects in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get campaign statistics",
      "routing": {
        "request": {
          "url": "/campaignTimeWiseStats",
          "method": "GET"
        }
      },
      "description": "Get time-wise statistics for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Import From CSV",
      "value": "importFromCsv",
      "action": "Import prospects from CSV data",
      "routing": {
        "request": {
          "url": "/add-from-csv",
          "method": "POST"
        }
      },
      "description": "Import multiple prospects into campaign from CSV-like data structure",
      "resource": "campaign"
    },
    {
      "name": "Import Prospects",
      "value": "importProspects",
      "action": "Import prospects from sales navigator",
      "routing": {
        "request": {
          "url": "/add-from-lisalesnav-search",
          "method": "POST"
        }
      },
      "description": "Import prospects into campaign from LinkedIn Sales Navigator search",
      "resource": "campaign"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List campaigns",
      "routing": {
        "request": {
          "url": "/campaigns",
          "method": "GET"
        }
      },
      "description": "Get a list of all campaigns",
      "resource": "campaign"
    },
    {
      "name": "Pause/Resume",
      "value": "pauseResume",
      "action": "Pause or resume campaign",
      "routing": {
        "request": {
          "url": "/campaign/pause",
          "method": "POST"
        }
      },
      "description": "Pause or resume a campaign",
      "resource": "campaign"
    },
    {
      "name": "Pause/Resume Prospect",
      "value": "pauseResumeProspect",
      "action": "Pause or resume prospect",
      "routing": {
        "request": {
          "url": "/campaign/pauseForProspect",
          "method": "POST"
        }
      },
      "description": "Pause or resume a specific prospect in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start campaign",
      "routing": {
        "request": {
          "url": "/start",
          "method": "POST"
        }
      },
      "description": "Start a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update Configuration",
      "value": "updateConfiguration",
      "action": "Update campaign configuration",
      "routing": {
        "request": {
          "url": "/campaign/settings/update",
          "method": "POST"
        }
      },
      "description": "Update campaign settings and configuration",
      "resource": "campaign"
    },
    {
      "name": "Create AI Variable",
      "value": "createAiVariable",
      "action": "Create an AI variable",
      "routing": {
        "request": {
          "url": "/sequence/add_new_ai_variable",
          "method": "POST"
        }
      },
      "description": "Create or update an AI variable for use in campaign sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Smart Comment Variable",
      "value": "createSmartCommentVariable",
      "action": "Create a smart comment variable",
      "routing": {
        "request": {
          "url": "/sequence/add_new_smart_comment_variable",
          "method": "POST"
        }
      },
      "description": "Create or update a smart comment variable for post engagement sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Video Avatar",
      "value": "createVideoAvatar",
      "action": "Create video avatar",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/create-video-avatar",
          "method": "POST"
        }
      },
      "description": "Create a video avatar for AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Voice Clone",
      "value": "createVoiceClone",
      "action": "Create voice clone",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/create-voice-clone",
          "method": "POST"
        }
      },
      "description": "Create a voice clone for AI voice personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Delete Voice Clone",
      "value": "deleteVoiceClone",
      "action": "Delete voice clone",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/delete-voice-clone",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing voice clone",
      "resource": "aiPersonalization"
    },
    {
      "name": "Generate Sample Video",
      "value": "generateSampleVideo",
      "action": "Generate sample video",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/generate-video-sample",
          "method": "POST"
        }
      },
      "description": "Generate a sample video with AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Generate Test Voice Message",
      "value": "generateTestVoiceMessage",
      "action": "Generate test voice message",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/generate-test-voice-message",
          "method": "POST"
        }
      },
      "description": "Generate a test voice message to preview voice clone",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get AI Variables",
      "value": "getAiVariables",
      "action": "Get AI variables",
      "routing": {
        "request": {
          "url": "/sequence/ai_variable",
          "method": "GET"
        }
      },
      "description": "Get list of AI variables for use in sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Smart Comment Variables",
      "value": "getSmartCommentVariables",
      "action": "Get smart comment variables",
      "routing": {
        "request": {
          "url": "/sequence/smart_comment_variable",
          "method": "GET"
        }
      },
      "description": "Get list of smart comment variables for post engagement",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Video Avatar",
      "value": "getVideoAvatar",
      "action": "Get video avatar",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/get-video-avatar",
          "method": "GET"
        }
      },
      "description": "Get video avatar for AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Accounts",
      "value": "getAccounts",
      "action": "Get LinkedIn accounts",
      "routing": {
        "request": {
          "url": "/linkedinAccounts",
          "method": "GET"
        }
      },
      "description": "Get all connected LinkedIn accounts",
      "resource": "linkedin"
    },
    {
      "name": "Sync Inbox",
      "value": "syncInbox",
      "action": "Sync LinkedIn inbox",
      "routing": {
        "request": {
          "url": "/syncedMessages",
          "method": "POST"
        }
      },
      "description": "Synchronize LinkedIn inbox messages",
      "resource": "linkedin"
    },
    {
      "name": "Automatic Warmup",
      "value": "automaticWarmup",
      "action": "Configure automatic warmup",
      "routing": {
        "request": {
          "url": "/settings/automaticWarmUp",
          "method": "POST"
        }
      },
      "description": "Configure automatic connection acceptance and suggested connections",
      "resource": "settings"
    },
    {
      "name": "Copy Blacklist From Account",
      "value": "copyBlacklist",
      "action": "Copy blacklist from another account",
      "routing": {
        "request": {
          "url": "/blacklist/copy_from_account",
          "method": "POST"
        }
      },
      "description": "Copy blacklist settings from another LinkedIn account",
      "resource": "settings"
    },
    {
      "name": "Delete Pending Invites",
      "value": "deletePendingInvites",
      "action": "Delete pending invites",
      "routing": {
        "request": {
          "url": "/settings/pendingInvite",
          "method": "POST"
        }
      },
      "description": "Delete old pending connection invites",
      "resource": "settings"
    },
    {
      "name": "Update Blacklist",
      "value": "updateBlacklist",
      "action": "Update blacklist settings",
      "routing": {
        "request": {
          "url": "/blacklist/update",
          "method": "POST"
        }
      },
      "description": "Update blacklisted companies and profile URLs",
      "resource": "settings"
    },
    {
      "name": "Update Quota",
      "value": "updateQuota",
      "action": "Update quota settings",
      "routing": {
        "request": {
          "url": "/settings/quota",
          "method": "POST"
        }
      },
      "description": "Update daily quota and warm up settings for LinkedIn account",
      "resource": "settings"
    },
    {
      "name": "Update Schedule",
      "value": "updateSchedule",
      "action": "Update schedule settings",
      "routing": {
        "request": {
          "url": "/schedule",
          "method": "POST"
        }
      },
      "description": "Update schedule settings including working hours and days",
      "resource": "settings"
    }
  ]

npm_readme:
  # n8n-nodes-salesrobot

  An n8n community node for integrating with SalesRobot API - a LinkedIn automation and outreach platform that helps you automate LinkedIn campaigns, manage prospects, and streamline your sales process.

  ## Features

  - **Campaign Management**: Create, list, start, pause, and manage LinkedIn campaigns
  - **Prospect Management**: Import prospects from CSV, Sales Navigator, and other sources
  - **AI Personalization**: Create AI variables, voice clones, and video avatars for personalized outreach
  - **LinkedIn Integration**: Sync inbox, manage accounts, and automate LinkedIn activities
  - **Settings Management**: Configure quotas, schedules, blacklists, and warmup settings
  - **Sequence Automation**: Add and manage sequence steps for automated outreach

  ## Installation

  ### In n8n

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

  ### Manual Installation

  ```bash
  npm install n8n-nodes-salesrobot
  ```

  ## Authentication

  ### Getting Your API Key

  1. Log in to your SalesRobot account
  2. Navigate to **Settings** → **Admin Settings** → **API Key**
  3. Generate your API key

  ### Setting Up Credentials in n8n

  1. In your n8n workflow, add a **Salesrobot** node
  2. Click on **Credentials** → **Create New Credential**
  3. Select **Salesrobot API**
  4. Enter your API key in the **API Key** field
  5. Click **Save**

  The API key will be sent as the `Authorization` header in all requests.

  ## Resources and Operations

  ### Campaign

  Manage LinkedIn campaigns and prospects:

  - **Create**: Create a new campaign
  - **List**: Get a list of all campaigns (with filtering options)
  - **Import Prospects**: Import prospects from LinkedIn Search
  - **Import From CSV**: Import multiple prospects from CSV data
  - **Add Sequence Steps**: Add sequence steps to a campaign
  - **Update Configuration**: Update campaign settings and configuration
  - **Start**: Start a campaign
  - **Pause/Resume**: Pause or resume a campaign
  - **Get Prospects**: Get list of prospects in a campaign
  - **Delete Prospects**: Delete multiple prospects from a campaign
  - **Get Prospect Status**: Get execution details for a specific prospect
  - **Pause/Resume Prospect**: Pause or resume a specific prospect
  - **Get Stats**: Get time-wise statistics for a campaign

  ### AI Personalization

  Create personalized content for your outreach:

  - **Create AI Variable**: Create or update an AI variable for use in campaign sequences
  - **Get AI Variables**: Get list of AI variables for use in sequences
  - **Create Smart Comment Variable**: Create a smart comment variable for post engagement sequences
  - **Get Smart Comment Variables**: Get list of smart comment variables
  - **Create Voice Clone**: Create a voice clone for AI voice personalization
  - **Delete Voice Clone**: Delete an existing voice clone
  - **Generate Test Voice Message**: Generate a test voice message to preview voice clone
  - **Get Video Avatar**: Get video avatar for AI video personalization
  - **Create Video Avatar**: Create a video avatar for AI video personalization
  - **Generate Sample Video**: Generate a sample video with AI video personalization

  ### LinkedIn

  Manage LinkedIn accounts and messages:

  - **Get Accounts**: Get all connected LinkedIn accounts
  - **Sync Inbox**: Synchronize LinkedIn inbox messages

  ### Settings

  Configure account settings and quotas:

  - **Update Quota**: Update daily quota and warm up settings for LinkedIn account
  - **Update Schedule**: Update schedule settings including working hours and days
  - **Delete Pending Invites**: Delete old pending connection invites
  - **Update Blacklist**: Update blacklisted companies and profile URLs
  - **Copy Blacklist From Account**: Copy blacklist settings from another LinkedIn account
  - **Automatic Warmup**: Configure automatic connection acceptance and suggested connections

  ## Example Workflows

  ### 1. Create and Start a Campaign

  ```
  1. Salesrobot Node (Campaign → Create)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign Name: "Q4 Outreach Campaign"
     - Campaign Type: Advanced
     - Campaign Family: LinkedIn

  2. Salesrobot Node (Campaign → Import Prospects)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - Search URL: [LinkedIn Sales Navigator search URL]
     - Search Type: Sales Navigator
     - Connection Levels: 2nd, 3rd

  3. Salesrobot Node (Campaign → Add Sequence Steps)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - Sequence Steps: [JSON array with sequence steps]

  4. Salesrobot Node (Campaign → Start)
     - Campaign UUID: {{ $json.campaignUuid }}
  ```

  ### 2. Import Prospects from CSV

  ```
  1. Read Binary File Node (to read CSV file)

  2. Salesrobot Node (Campaign → Import From CSV)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - CSV Data: {{ $binary.data }}
  ```

  ### 3. Create AI Variable and Use in Campaign

  ```
  1. Salesrobot Node (AI Personalization → Create AI Variable)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Variable Name: "companyResearch"
     - Variable Description: "Research about the company"

  2. Salesrobot Node (Campaign → Add Sequence Steps)
     - Campaign UUID: {{ $json.campaignUuid }}
     - Sequence Steps: [Include aiVariableName and aiVariableId in mail body]
  ```

  ### 4. Monitor Campaign Performance

  ```
  1. Salesrobot Node (Campaign → Get Stats)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}

  2. Function Node (to process and format statistics)

  3. Email Node (to send daily report)
  ```

  ## API Documentation

  For detailed API documentation, visit:

  - **Postman Collection**: [SalesRobot API Documentation](https://solar-robot-476240.postman.co/workspace/salesrobot~11cc6376-ed3b-435e-926a-0a10deb24cd7/collection/10815846-ab263f3a-130f-4de2-a05f-b824b4877a20)

  ## Common Parameters

  ### LinkedIn Account UUID

  Most operations require a `linkedinAccountUuid`. You can get this by:

  1. Using the **LinkedIn → Get Accounts** operation
  2. The UUID will be in the response

  ### Campaign UUID

  Campaign operations require a `campaignUuid`. You can get this by:

  1. Creating a new campaign (returns UUID)
  2. Listing campaigns (UUID in response)

  ### Sequence Steps Format

  When adding sequence steps, use this JSON format:

  ```json
  [
  	{
  		"stepOrdinal": 1,
  		"hoursDelay": 0,
  		"sequenceStepType": "VIEW_PROFILE",
  		"multiVariateMails": [
  			{
  				"body": "",
  				"subject": "",
  				"inMailVariant": false,
  				"ordinal": 1
  			}
  		]
  	},
  	{
  		"stepOrdinal": 2,
  		"hoursDelay": 1,
  		"sequenceStepType": "SEND_CONNECTION_REQUEST",
  		"multiVariateMails": [
  			{
  				"body": "Hi {{firstName}}, I would love to connect with you!",
  				"subject": "",
  				"inMailVariant": false,
  				"ordinal": 1
  			}
  		]
  	}
  ]
  ```

  **Available Sequence Step Types:**

  - `VIEW_PROFILE`
  - `SEND_CONNECTION_REQUEST`
  - `SEND_CONNECTION_REQUEST_BROWSER`
  - `SEND_CONNECTION_USING_EMAIL`
  - `SEND_MESSAGE`
  - `SEND_VOICE_MESSAGE`
  - `SEND_VIDEO_MESSAGE`
  - `FOLLOW`
  - `ENDORSE`
  - `LIKE_POST`
  - `LIKE_AND_COMMENT`
  - `SEND_MESSAGE_IN_MAIL`
  - `SEND_EMAIL`
  - `SEND_MESSAGE_USING_GROUP`
  - `SEND_MESSAGE_USING_EVENT`

  ## Troubleshooting

  ### Authentication Errors

  - Verify your API key is correct
  - Ensure the API key hasn't expired
  - Check that the API key has the necessary permissions

  ### Missing Parameters

  - Most operations require a `linkedinAccountUuid`
  - Campaign operations require a `campaignUuid`
  - Ensure all required fields are filled in the node configuration

  ## Support

  - **GitHub Issues**: [Report Issues](https://github.com/coderman400/n8n-nodes-salesrobot/issues)
  - **SalesRobot Support**: Contact SalesRobot support for API-related questions at support@salesrobot.co
  - **n8n Community**: [n8n Community Forum](https://community.n8n.io/)

  ## License

  MIT

  ## Version

  Current version: 0.2.4


node_type: n8n-nodes-personio-hr.personioHrTrigger
package_name: n8n-nodes-personio-hr
display_name: Personio HR Trigger
description: Starts the workflow when Personio events occur
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: pk-consult
author_github_url: https://github.com/PK-Consulting/
npm_package_name: n8n-nodes-personio-hr
npm_version: 0.1.14
community_fetched_at: 2026-04-16T09:43:36.171Z
npm_readme:
  # n8n-nodes-personio-hr

  Community node for [n8n](https://n8n.io/) to interact with the [Personio](https://www.personio.com/) HR platform via their v2 API.

  ## Installation

  ### In n8n Desktop / Self-Hosted

  Go to **Settings > Community Nodes** and install:

  ```
  n8n-nodes-personio-hr
  ```

  ### Manual Installation

  ```bash
  cd ~/.n8n/nodes
  npm install n8n-nodes-personio-hr
  ```

  Then restart n8n.

  ## Credentials

  You need a Personio API client ID and client secret. Create them in **Personio > Settings > Integrations > API credentials**.

  When configuring the credential in n8n, enter:
  - **Client ID** - Your API client ID
  - **Client Secret** - Your API client secret

  The node handles token authentication automatically (OAuth2 Client Credentials flow with expirable tokens).

  ## Supported Resources & Operations

  ### Personio HR (Regular Node)

  | Resource | Operations |
  |---|---|
  | **Person** | Create, Get, Get Many, Update, Delete |
  | **Employment** | Get, Get Many, Update |
  | **Absence Period** | Create, Get, Get Many, Get Breakdowns, Update, Delete |
  | **Absence Type** | Get, Get Many |
  | **Attendance Period** | Create, Get, Get Many, Update, Delete |
  | **Project** | Create, Get, Get Many, Update, Delete, Get Members, Add Members, Remove Members |
  | **Document** | Get Many, Download (binary), Update, Delete |
  | **Compensation** | Create, Get Many, Get Types, Create Type |
  | **Organization** | Get Legal Entities, Get Legal Entity |

  ### Personio Trigger (Webhook Node)

  Automatically registers webhooks with Personio for real-time events:

  - Person: created, updated, deleted
  - Employment: created, updated, deleted
  - Absence Period: created, updated, deleted
  - Attendance Period: created, updated, deleted
  - Compensation: created, updated, deleted
  - Project: created, updated, deleted
  - Custom reports: created

  Webhooks are auto-registered on workflow activation and cleaned up on deactivation.

  ## Features

  - **Cursor-based pagination** on all list endpoints with "Return All" toggle
  - **Custom Attributes** support on Person Create/Update (dynamic key-value pairs for instance-specific fields like date of birth, phone, address, etc.)
  - **Nested body formats** handled correctly for the Personio v2 API (employments, positions, supervisors, org units, cost centers)
  - **Binary file download** for documents
  - **Proper Accept headers** for DELETE/PATCH operations (`application/problem+json`)

  ## Custom Attributes

  Personio stores many personal details (date of birth, phone, nationality, etc.) as custom attributes with instance-specific IDs. The Person Create and Update operations include a "Custom Attributes" section where you can add multiple attribute rows.

  **Single value:**
  - Attribute ID: `laptop_serial_number`
  - Value: `ABC-123`

  **Array value (tags/multi-select):**
  - Attribute ID: `peripheries`
  - Value: `["mouse","keyboard","monitor"]`

  ## Known Limitations

  - **Compensation Create** returns 403 Forbidden - this is a Personio-side issue (also fails in their own API playground)
  - **Organization** - Cost Centers and Workplaces endpoints return 404 (not live in Personio API despite being documented). Only Legal Entities are available.
  - **Org Units** - No list endpoint exists, so you need to know the org unit ID beforehand
  - **Recruiting API** - Not included (known to be unstable)

  ## API Scopes Required

  Ensure your Personio API credentials have the following scopes enabled:
  - `persons:read`, `persons:write`
  - `employments:read`, `employments:write`
  - `absences:read`, `absences:write`
  - `attendances:read`, `attendances:write`
  - `projects:read`, `projects:write`
  - `documents:read`, `documents:write`
  - `compensations:read`, `compensations:write`
  - `webhooks:read`, `webhooks:write` (for the Trigger node)

  ## License

  MIT


node_type: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudCloudApi
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (Infrastructure)
description: Manage IONOS Cloud infrastructure resources
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-04-16T09:43:36.172Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "datacenter",
      "options": [
        {
          "name": "Contract",
          "value": "contract"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "IP Block",
          "value": "ipBlock"
        },
        {
          "name": "Request",
          "value": "request"
        },
        {
          "name": "Datacenter",
          "value": "datacenter"
        },
        {
          "name": "LAN",
          "value": "lan"
        },
        {
          "name": "Server",
          "value": "server"
        },
        {
          "name": "Volume",
          "value": "volume"
        },
        {
          "name": "Snapshot",
          "value": "snapshot"
        },
        {
          "name": "NIC",
          "value": "nic"
        },
        {
          "name": "Firewall Rule",
          "value": "firewallRule"
        },
        {
          "name": "Kubernetes Cluster",
          "value": "k8s"
        },
        {
          "name": "Node Pool",
          "value": "nodePool"
        },
        {
          "name": "Private Cross-Connect",
          "value": "pcc"
        },
        {
          "name": "Load Balancer",
          "value": "loadBalancer"
        },
        {
          "name": "Network Load Balancer",
          "value": "networkLoadBalancer"
        },
        {
          "name": "Application Load Balancer",
          "value": "applicationLoadBalancer"
        },
        {
          "name": "Target Group",
          "value": "targetGroup"
        },
        {
          "name": "NAT Gateway",
          "value": "natGateway"
        },
        {
          "name": "Security Group",
          "value": "securityGroup"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get contracts",
          "routing": {
            "request": {
              "url": "/contracts",
              "method": "GET"
            }
          },
          "description": "Get contract information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contract"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a location",
          "routing": {
            "request": {
              "url": "=/locations/{{$parameter.regionId}}/{{$parameter.locationId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a specific location"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get locations",
          "routing": {
            "request": {
              "url": "/locations?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many available locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "location"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an image",
          "routing": {
            "request": {
              "url": "=/images/{{$parameter.imageId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of an image"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get images",
          "routing": {
            "request": {
              "url": "/images?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many available images"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an IP block",
          "routing": {
            "request": {
              "url": "/ipblocks",
              "method": "POST"
            }
          },
          "description": "Reserve a new IP block"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an IP block",
          "routing": {
            "request": {
              "url": "=/ipblocks/{{$parameter.ipBlockId}}",
              "method": "DELETE"
            }
          },
          "description": "Release an IP block"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an IP block",
          "routing": {
            "request": {
              "url": "=/ipblocks/{{$parameter.ipBlockId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of an IP block"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get IP blocks",
          "routing": {
            "request": {
              "url": "/ipblocks?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many reserved IP blocks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ipBlock"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a request",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Retrieve a specific request"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many requests",
          "routing": {
            "request": {
              "url": "/requests",
              "method": "GET"
            }
          },
          "description": "List many API requests"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get request status",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Retrieve the status of a request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "request"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a datacenter",
          "routing": {
            "request": {
              "url": "/datacenters",
              "method": "POST"
            }
          },
          "description": "Create a new datacenter"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a datacenter",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a datacenter"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a datacenter",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the data of a single datacenter"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get datacenters",
          "routing": {
            "request": {
              "url": "/datacenters?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many datacenters"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a datacenter",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}",
              "method": "PUT"
            }
          },
          "description": "Update the properties of a datacenter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "datacenter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a LAN",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/lans",
              "method": "POST"
            }
          },
          "description": "Create a new LAN"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a LAN",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a LAN"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a LAN",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a LAN"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many lans",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/lans?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many LANs within a datacenter"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a LAN",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}",
              "method": "PUT"
            }
          },
          "description": "Update LAN properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Attach CDROM",
          "value": "attachCdrom",
          "action": "Attach CDROM to server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms",
              "method": "POST"
            }
          },
          "description": "Attach a CDROM image to server"
        },
        {
          "name": "Attach Volume",
          "value": "attachVolume",
          "action": "Attach volume to server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes",
              "method": "POST"
            }
          },
          "description": "Attach an existing volume to server"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers",
              "method": "POST"
            }
          },
          "description": "Create a new server"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a server"
        },
        {
          "name": "Detach CDROM",
          "value": "detachCdrom",
          "action": "Detach CDROM from server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms/{{$parameter.cdromId}}",
              "method": "DELETE"
            }
          },
          "description": "Detach a CDROM from server"
        },
        {
          "name": "Detach Volume",
          "value": "detachVolume",
          "action": "Detach volume from server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes/{{$parameter.volumeId}}",
              "method": "DELETE"
            }
          },
          "description": "Detach a volume from server"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the data of a single server"
        },
        {
          "name": "Get CDROM",
          "value": "getCdrom",
          "action": "Get attached CDROM",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms/{{$parameter.cdromId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific attached CDROM"
        },
        {
          "name": "Get CDROMs",
          "value": "getCdroms",
          "action": "Get attached cdro ms",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms",
              "method": "GET"
            }
          },
          "description": "List all CDROMs attached to server"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get servers",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many servers within a specific data center"
        },
        {
          "name": "Get Remote Console",
          "value": "getRemoteConsole",
          "action": "Get remote console URL",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/remoteconsole",
              "method": "GET"
            }
          },
          "description": "Get remote console access URL"
        },
        {
          "name": "Get Token",
          "value": "getToken",
          "action": "Get server token",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/token",
              "method": "GET"
            }
          },
          "description": "Get JSON Web Token for server access"
        },
        {
          "name": "Get Volume",
          "value": "getVolume",
          "action": "Get attached volume",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes/{{$parameter.volumeId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific attached volume"
        },
        {
          "name": "Get Volumes",
          "value": "getVolumes",
          "action": "Get attached volumes",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes",
              "method": "GET"
            }
          },
          "description": "List all volumes attached to server"
        },
        {
          "name": "Reboot",
          "value": "reboot",
          "action": "Reboot a  server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/reboot",
              "method": "POST"
            }
          },
          "description": "Reboot a server"
        },
        {
          "name": "Resume",
          "value": "resume",
          "action": "Resume a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/resume",
              "method": "POST"
            }
          },
          "description": "Resume a suspended Cube server"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start a  server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/start",
              "method": "POST"
            }
          },
          "description": "Start a server"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop a  server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/stop",
              "method": "POST"
            }
          },
          "description": "Stop a server"
        },
        {
          "name": "Suspend",
          "value": "suspend",
          "action": "Suspend a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/suspend",
              "method": "POST"
            }
          },
          "description": "Suspend a Cube server"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}",
              "method": "PUT"
            }
          },
          "description": "Update a server"
        },
        {
          "name": "Upgrade",
          "value": "upgrade",
          "action": "Upgrade a server",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/upgrade",
              "method": "POST"
            }
          },
          "description": "Upgrade a server to a newer generation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "server"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a volume",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes",
              "method": "POST"
            }
          },
          "description": "Create a new volume"
        },
        {
          "name": "Create Snapshot",
          "value": "createSnapshot",
          "action": "Create a volume snapshot",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}/create-snapshot",
              "method": "POST"
            }
          },
          "description": "Create a snapshot of a volume"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a volume",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a volume"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a volume",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the data of a single volume"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get volumes",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many volumes within a datacenter"
        },
        {
          "name": "Restore Snapshot",
          "value": "restoreSnapshot",
          "action": "Restore volume from snapshot",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}/restore-snapshot",
              "method": "POST"
            }
          },
          "description": "Restore a volume from a snapshot"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a volume",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}",
              "method": "PUT"
            }
          },
          "description": "Update volume properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "volume"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a snapshot",
          "routing": {
            "request": {
              "url": "=/snapshots/{{$parameter.snapshotId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a snapshot"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a snapshot",
          "routing": {
            "request": {
              "url": "=/snapshots/{{$parameter.snapshotId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the data of a single snapshot"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get snapshots",
          "routing": {
            "request": {
              "url": "/snapshots?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many available snapshots"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a snapshot",
          "routing": {
            "request": {
              "url": "=/snapshots/{{$parameter.snapshotId}}",
              "method": "PUT"
            }
          },
          "description": "Update snapshot properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "snapshot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a NIC",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics",
              "method": "POST"
            }
          },
          "description": "Create a new network interface"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a NIC",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a network interface"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a NIC",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a network interface"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many nics",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many network interfaces of a server"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a NIC",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}",
              "method": "PUT"
            }
          },
          "description": "Update network interface properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "nic"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a firewall rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules",
              "method": "POST"
            }
          },
          "description": "Create a new firewall rule"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a firewall rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a firewall rule"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a firewall rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a firewall rule"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get firewall rules",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many firewall rules for a NIC"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a firewall rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}",
              "method": "PUT"
            }
          },
          "description": "Update firewall rule properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "firewallRule"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a kubernetes cluster",
          "routing": {
            "request": {
              "url": "/k8s",
              "method": "POST"
            }
          },
          "description": "Create a new Kubernetes cluster"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a kubernetes cluster",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter.k8sClusterId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a Kubernetes cluster"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a kubernetes cluster",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter.k8sClusterId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a Kubernetes cluster"
        },
        {
          "name": "Get Kubeconfig",
          "value": "getKubeconfig",
          "action": "Get kubernetes configuration",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter.k8sClusterId}}/kubeconfig",
              "method": "GET"
            }
          },
          "description": "Get the kubeconfig file for a cluster"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many kubernetes clusters",
          "routing": {
            "request": {
              "url": "/k8s?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many Kubernetes clusters"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a kubernetes cluster",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter.k8sClusterId}}",
              "method": "PUT"
            }
          },
          "description": "Update Kubernetes cluster properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "k8s"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools",
              "method": "POST"
            }
          },
          "description": "Create a node pool"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a node pool"
        },
        {
          "name": "Delete Node",
          "value": "deleteNode",
          "action": "Delete a node from a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a node from a node pool"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a node pool"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many node pools",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools",
              "method": "GET"
            }
          },
          "description": "Get many node pools"
        },
        {
          "name": "Get Node",
          "value": "getNode",
          "action": "Get a node in a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific node in a node pool"
        },
        {
          "name": "Get Nodes",
          "value": "getNodes",
          "action": "Get nodes in a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes",
              "method": "GET"
            }
          },
          "description": "Get all nodes in a node pool"
        },
        {
          "name": "Replace Node",
          "value": "replaceNode",
          "action": "Replace a node in a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}/replace",
              "method": "POST"
            }
          },
          "description": "Recreate a node in a node pool"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a node pool",
          "routing": {
            "request": {
              "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a node pool"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "nodePool"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a private cross connect",
          "routing": {
            "request": {
              "url": "/pccs",
              "method": "POST"
            }
          },
          "description": "Create a new Private Cross-Connect"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a private cross connect",
          "routing": {
            "request": {
              "url": "=/pccs/{{$parameter.pccId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a Private Cross-Connect"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a private cross connect",
          "routing": {
            "request": {
              "url": "=/pccs/{{$parameter.pccId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a Private Cross-Connect"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many private cross connects",
          "routing": {
            "request": {
              "url": "/pccs?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many Private Cross-Connects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a private cross connect",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/pccs/{{$parameter.pccId}}",
              "method": "PATCH"
            }
          },
          "description": "Update Private Cross-Connect properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pcc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Attach NIC",
          "value": "attachNic",
          "action": "Attach NIC to load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics",
              "method": "POST"
            }
          },
          "description": "Attach a NIC to load balancer"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers",
              "method": "POST"
            }
          },
          "description": "Create a Load Balancer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a Load Balancer"
        },
        {
          "name": "Detach NIC",
          "value": "detachNic",
          "action": "Detach NIC from load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics/{{$parameter[\"nicId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Detach a NIC from load balancer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a Load Balancer"
        },
        {
          "name": "Get Balanced NIC",
          "value": "getBalancedNic",
          "action": "Get a balanced NIC",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics/{{$parameter[\"nicId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a balanced NIC"
        },
        {
          "name": "Get Balanced NICs",
          "value": "getBalancedNics",
          "action": "Get balanced nics",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics",
              "method": "GET"
            }
          },
          "description": "List balanced NICs"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many load balancers",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers",
              "method": "GET"
            }
          },
          "description": "Get many Load Balancers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a Load Balancer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "loadBalancer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers",
              "method": "POST"
            }
          },
          "description": "Create a Network Load Balancer"
        },
        {
          "name": "Create Flow Log",
          "value": "createFlowLog",
          "action": "Create a flow log for a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs",
              "method": "POST"
            }
          },
          "description": "Create a flow log for a Network Load Balancer"
        },
        {
          "name": "Create Forwarding Rule",
          "value": "createForwardingRule",
          "action": "Create a forwarding rule for a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules",
              "method": "POST"
            }
          },
          "description": "Create a forwarding rule for a Network Load Balancer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a Network Load Balancer"
        },
        {
          "name": "Delete Flow Log",
          "value": "deleteFlowLog",
          "action": "Delete a flow log from a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a flow log from a Network Load Balancer"
        },
        {
          "name": "Delete Forwarding Rule",
          "value": "deleteForwardingRule",
          "action": "Delete a forwarding rule from a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a forwarding rule from a Network Load Balancer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a Network Load Balancer"
        },
        {
          "name": "Get Flow Log",
          "value": "getFlowLog",
          "action": "Get a flow log of a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific flow log of a Network Load Balancer"
        },
        {
          "name": "Get Flow Logs",
          "value": "getFlowLogs",
          "action": "Get flow logs of a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs",
              "method": "GET"
            }
          },
          "description": "Get all flow logs of a Network Load Balancer"
        },
        {
          "name": "Get Forwarding Rule",
          "value": "getForwardingRule",
          "action": "Get a forwarding rule of a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific forwarding rule of a Network Load Balancer"
        },
        {
          "name": "Get Forwarding Rules",
          "value": "getForwardingRules",
          "action": "Get forwarding rules of a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules",
              "method": "GET"
            }
          },
          "description": "Get all forwarding rules of a Network Load Balancer"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many network load balancers",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers",
              "method": "GET"
            }
          },
          "description": "Get many Network Load Balancers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a network load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a Network Load Balancer"
        },
        {
          "name": "Update Flow Log",
          "value": "updateFlowLog",
          "action": "Update a flow log of a network load balancer",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a flow log of a Network Load Balancer"
        },
        {
          "name": "Update Forwarding Rule",
          "value": "updateForwardingRule",
          "action": "Update a forwarding rule of a network load balancer",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a forwarding rule of a Network Load Balancer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "networkLoadBalancer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers",
              "method": "POST"
            }
          },
          "description": "Create an Application Load Balancer"
        },
        {
          "name": "Create Flow Log",
          "value": "createFlowLog",
          "action": "Create a flow log for an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs",
              "method": "POST"
            }
          },
          "description": "Create a flow log for an Application Load Balancer"
        },
        {
          "name": "Create Forwarding Rule",
          "value": "createForwardingRule",
          "action": "Create a forwarding rule for an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules",
              "method": "POST"
            }
          },
          "description": "Create a forwarding rule for an Application Load Balancer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an Application Load Balancer"
        },
        {
          "name": "Delete Flow Log",
          "value": "deleteFlowLog",
          "action": "Delete a flow log from an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a flow log from an Application Load Balancer"
        },
        {
          "name": "Delete Forwarding Rule",
          "value": "deleteForwardingRule",
          "action": "Delete a forwarding rule from an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a forwarding rule from an Application Load Balancer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get an Application Load Balancer"
        },
        {
          "name": "Get Flow Log",
          "value": "getFlowLog",
          "action": "Get a flow log of an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific flow log of an Application Load Balancer"
        },
        {
          "name": "Get Flow Logs",
          "value": "getFlowLogs",
          "action": "Get flow logs of an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs",
              "method": "GET"
            }
          },
          "description": "Get all flow logs of an Application Load Balancer"
        },
        {
          "name": "Get Forwarding Rule",
          "value": "getForwardingRule",
          "action": "Get a forwarding rule of an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific forwarding rule of an Application Load Balancer"
        },
        {
          "name": "Get Forwarding Rules",
          "value": "getForwardingRules",
          "action": "Get forwarding rules of an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules",
              "method": "GET"
            }
          },
          "description": "Get all forwarding rules of an Application Load Balancer"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many application load balancers",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers",
              "method": "GET"
            }
          },
          "description": "Get many Application Load Balancers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an application load balancer",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an Application Load Balancer"
        },
        {
          "name": "Update Flow Log",
          "value": "updateFlowLog",
          "action": "Update a flow log of an application load balancer",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a flow log of an Application Load Balancer"
        },
        {
          "name": "Update Forwarding Rule",
          "value": "updateForwardingRule",
          "action": "Update a forwarding rule of an application load balancer",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a forwarding rule of an Application Load Balancer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "applicationLoadBalancer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a target group",
          "routing": {
            "request": {
              "url": "=/targetgroups",
              "method": "POST"
            }
          },
          "description": "Create a target group"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a target group",
          "routing": {
            "request": {
              "url": "=/targetgroups/{{$parameter.targetGroupId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a target group"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a target group",
          "routing": {
            "request": {
              "url": "=/targetgroups/{{$parameter.targetGroupId}}",
              "method": "GET"
            }
          },
          "description": "Get a target group"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many target groups",
          "routing": {
            "request": {
              "url": "=/targetgroups",
              "method": "GET"
            }
          },
          "description": "Get many target groups"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a target group",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/targetgroups/{{$parameter.targetGroupId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a target group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "targetGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways",
              "method": "POST"
            }
          },
          "description": "Create a new NAT Gateway"
        },
        {
          "name": "Create Flow Log",
          "value": "createFlowLog",
          "action": "Create a flow log for a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs",
              "method": "POST"
            }
          },
          "description": "Create a NAT Gateway flow log"
        },
        {
          "name": "Create Rule",
          "value": "createRule",
          "action": "Create a rule for a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules",
              "method": "POST"
            }
          },
          "description": "Create a NAT Gateway rule"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a NAT Gateway"
        },
        {
          "name": "Delete Flow Log",
          "value": "deleteFlowLog",
          "action": "Delete a flow log from a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a NAT Gateway flow log"
        },
        {
          "name": "Delete Rule",
          "value": "deleteRule",
          "action": "Delete a rule from a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a NAT Gateway rule"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a NAT Gateway"
        },
        {
          "name": "Get Flow Log",
          "value": "getFlowLog",
          "action": "Get a flow log of a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific NAT Gateway flow log"
        },
        {
          "name": "Get Flow Logs",
          "value": "getFlowLogs",
          "action": "Get flow logs of a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs",
              "method": "GET"
            }
          },
          "description": "Get all NAT Gateway flow logs"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many NAT gateways",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many NAT Gateways within a datacenter"
        },
        {
          "name": "Get Rule",
          "value": "getRule",
          "action": "Get a rule of a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
              "method": "GET"
            }
          },
          "description": "Get a specific NAT Gateway rule"
        },
        {
          "name": "Get Rules",
          "value": "getRules",
          "action": "Get rules of a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules",
              "method": "GET"
            }
          },
          "description": "Get all NAT Gateway rules"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a NAT gateway",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}",
              "method": "PUT"
            }
          },
          "description": "Update NAT Gateway properties"
        },
        {
          "name": "Update Flow Log",
          "value": "updateFlowLog",
          "action": "Update a flow log of a NAT gateway",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a NAT Gateway flow log"
        },
        {
          "name": "Update Rule",
          "value": "updateRule",
          "action": "Update a rule of a NAT gateway",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a NAT Gateway rule"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "natGateway"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a security group",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups",
              "method": "POST"
            }
          },
          "description": "Create a new security group"
        },
        {
          "name": "Create Rule",
          "value": "createRule",
          "action": "Create a security group rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules",
              "method": "POST"
            }
          },
          "description": "Create a new rule in a security group"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a security group",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a security group"
        },
        {
          "name": "Delete Rule",
          "value": "deleteRule",
          "action": "Delete a security group rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a rule from a security group"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a security group",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}?depth=2",
              "method": "GET"
            }
          },
          "description": "Get the properties of a security group"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get security groups",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups?depth=2",
              "method": "GET"
            }
          },
          "description": "Get many security groups within a datacenter"
        },
        {
          "name": "Get Rule",
          "value": "getRule",
          "action": "Get a security group rule",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
              "method": "GET"
            }
          },
          "description": "Get properties of a specific rule"
        },
        {
          "name": "Get Rules",
          "value": "getRules",
          "action": "Get security group rules",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules",
              "method": "GET"
            }
          },
          "description": "List all rules in a security group"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a security group",
          "routing": {
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}",
              "method": "PUT"
            }
          },
          "description": "Update security group properties"
        },
        {
          "name": "Update Rule",
          "value": "updateRule",
          "action": "Update a security group rule",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a rule in a security group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "securityGroup"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get contracts",
      "routing": {
        "request": {
          "url": "/contracts",
          "method": "GET"
        }
      },
      "description": "Get contract information",
      "resource": "contract"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a location",
      "routing": {
        "request": {
          "url": "=/locations/{{$parameter.regionId}}/{{$parameter.locationId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a specific location",
      "resource": "location"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get locations",
      "routing": {
        "request": {
          "url": "/locations?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many available locations",
      "resource": "location"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an image",
      "routing": {
        "request": {
          "url": "=/images/{{$parameter.imageId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of an image",
      "resource": "image"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get images",
      "routing": {
        "request": {
          "url": "/images?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many available images",
      "resource": "image"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an IP block",
      "routing": {
        "request": {
          "url": "/ipblocks",
          "method": "POST"
        }
      },
      "description": "Reserve a new IP block",
      "resource": "ipBlock"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an IP block",
      "routing": {
        "request": {
          "url": "=/ipblocks/{{$parameter.ipBlockId}}",
          "method": "DELETE"
        }
      },
      "description": "Release an IP block",
      "resource": "ipBlock"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an IP block",
      "routing": {
        "request": {
          "url": "=/ipblocks/{{$parameter.ipBlockId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of an IP block",
      "resource": "ipBlock"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get IP blocks",
      "routing": {
        "request": {
          "url": "/ipblocks?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many reserved IP blocks",
      "resource": "ipBlock"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a request",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Retrieve a specific request",
      "resource": "request"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many requests",
      "routing": {
        "request": {
          "url": "/requests",
          "method": "GET"
        }
      },
      "description": "List many API requests",
      "resource": "request"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get request status",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Retrieve the status of a request",
      "resource": "request"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a datacenter",
      "routing": {
        "request": {
          "url": "/datacenters",
          "method": "POST"
        }
      },
      "description": "Create a new datacenter",
      "resource": "datacenter"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a datacenter",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a datacenter",
      "resource": "datacenter"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a datacenter",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the data of a single datacenter",
      "resource": "datacenter"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get datacenters",
      "routing": {
        "request": {
          "url": "/datacenters?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many datacenters",
      "resource": "datacenter"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a datacenter",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}",
          "method": "PUT"
        }
      },
      "description": "Update the properties of a datacenter",
      "resource": "datacenter"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a LAN",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/lans",
          "method": "POST"
        }
      },
      "description": "Create a new LAN",
      "resource": "lan"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a LAN",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a LAN",
      "resource": "lan"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a LAN",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a LAN",
      "resource": "lan"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many lans",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/lans?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many LANs within a datacenter",
      "resource": "lan"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a LAN",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/lans/{{$parameter.lanId}}",
          "method": "PUT"
        }
      },
      "description": "Update LAN properties",
      "resource": "lan"
    },
    {
      "name": "Attach CDROM",
      "value": "attachCdrom",
      "action": "Attach CDROM to server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms",
          "method": "POST"
        }
      },
      "description": "Attach a CDROM image to server",
      "resource": "server"
    },
    {
      "name": "Attach Volume",
      "value": "attachVolume",
      "action": "Attach volume to server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes",
          "method": "POST"
        }
      },
      "description": "Attach an existing volume to server",
      "resource": "server"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers",
          "method": "POST"
        }
      },
      "description": "Create a new server",
      "resource": "server"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a server",
      "resource": "server"
    },
    {
      "name": "Detach CDROM",
      "value": "detachCdrom",
      "action": "Detach CDROM from server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms/{{$parameter.cdromId}}",
          "method": "DELETE"
        }
      },
      "description": "Detach a CDROM from server",
      "resource": "server"
    },
    {
      "name": "Detach Volume",
      "value": "detachVolume",
      "action": "Detach volume from server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes/{{$parameter.volumeId}}",
          "method": "DELETE"
        }
      },
      "description": "Detach a volume from server",
      "resource": "server"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the data of a single server",
      "resource": "server"
    },
    {
      "name": "Get CDROM",
      "value": "getCdrom",
      "action": "Get attached CDROM",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms/{{$parameter.cdromId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific attached CDROM",
      "resource": "server"
    },
    {
      "name": "Get CDROMs",
      "value": "getCdroms",
      "action": "Get attached cdro ms",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/cdroms",
          "method": "GET"
        }
      },
      "description": "List all CDROMs attached to server",
      "resource": "server"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get servers",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many servers within a specific data center",
      "resource": "server"
    },
    {
      "name": "Get Remote Console",
      "value": "getRemoteConsole",
      "action": "Get remote console URL",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/remoteconsole",
          "method": "GET"
        }
      },
      "description": "Get remote console access URL",
      "resource": "server"
    },
    {
      "name": "Get Token",
      "value": "getToken",
      "action": "Get server token",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/token",
          "method": "GET"
        }
      },
      "description": "Get JSON Web Token for server access",
      "resource": "server"
    },
    {
      "name": "Get Volume",
      "value": "getVolume",
      "action": "Get attached volume",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes/{{$parameter.volumeId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific attached volume",
      "resource": "server"
    },
    {
      "name": "Get Volumes",
      "value": "getVolumes",
      "action": "Get attached volumes",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/volumes",
          "method": "GET"
        }
      },
      "description": "List all volumes attached to server",
      "resource": "server"
    },
    {
      "name": "Reboot",
      "value": "reboot",
      "action": "Reboot a  server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/reboot",
          "method": "POST"
        }
      },
      "description": "Reboot a server",
      "resource": "server"
    },
    {
      "name": "Resume",
      "value": "resume",
      "action": "Resume a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/resume",
          "method": "POST"
        }
      },
      "description": "Resume a suspended Cube server",
      "resource": "server"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start a  server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/start",
          "method": "POST"
        }
      },
      "description": "Start a server",
      "resource": "server"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop a  server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/stop",
          "method": "POST"
        }
      },
      "description": "Stop a server",
      "resource": "server"
    },
    {
      "name": "Suspend",
      "value": "suspend",
      "action": "Suspend a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/suspend",
          "method": "POST"
        }
      },
      "description": "Suspend a Cube server",
      "resource": "server"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}",
          "method": "PUT"
        }
      },
      "description": "Update a server",
      "resource": "server"
    },
    {
      "name": "Upgrade",
      "value": "upgrade",
      "action": "Upgrade a server",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/upgrade",
          "method": "POST"
        }
      },
      "description": "Upgrade a server to a newer generation",
      "resource": "server"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a volume",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes",
          "method": "POST"
        }
      },
      "description": "Create a new volume",
      "resource": "volume"
    },
    {
      "name": "Create Snapshot",
      "value": "createSnapshot",
      "action": "Create a volume snapshot",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}/create-snapshot",
          "method": "POST"
        }
      },
      "description": "Create a snapshot of a volume",
      "resource": "volume"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a volume",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a volume",
      "resource": "volume"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a volume",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the data of a single volume",
      "resource": "volume"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get volumes",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many volumes within a datacenter",
      "resource": "volume"
    },
    {
      "name": "Restore Snapshot",
      "value": "restoreSnapshot",
      "action": "Restore volume from snapshot",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}/restore-snapshot",
          "method": "POST"
        }
      },
      "description": "Restore a volume from a snapshot",
      "resource": "volume"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a volume",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/volumes/{{$parameter.volumeId}}",
          "method": "PUT"
        }
      },
      "description": "Update volume properties",
      "resource": "volume"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a snapshot",
      "routing": {
        "request": {
          "url": "=/snapshots/{{$parameter.snapshotId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a snapshot",
      "resource": "snapshot"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a snapshot",
      "routing": {
        "request": {
          "url": "=/snapshots/{{$parameter.snapshotId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the data of a single snapshot",
      "resource": "snapshot"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get snapshots",
      "routing": {
        "request": {
          "url": "/snapshots?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many available snapshots",
      "resource": "snapshot"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a snapshot",
      "routing": {
        "request": {
          "url": "=/snapshots/{{$parameter.snapshotId}}",
          "method": "PUT"
        }
      },
      "description": "Update snapshot properties",
      "resource": "snapshot"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a NIC",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics",
          "method": "POST"
        }
      },
      "description": "Create a new network interface",
      "resource": "nic"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a NIC",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a network interface",
      "resource": "nic"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a NIC",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a network interface",
      "resource": "nic"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many nics",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many network interfaces of a server",
      "resource": "nic"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a NIC",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}",
          "method": "PUT"
        }
      },
      "description": "Update network interface properties",
      "resource": "nic"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a firewall rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules",
          "method": "POST"
        }
      },
      "description": "Create a new firewall rule",
      "resource": "firewallRule"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a firewall rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a firewall rule",
      "resource": "firewallRule"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a firewall rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a firewall rule",
      "resource": "firewallRule"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get firewall rules",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many firewall rules for a NIC",
      "resource": "firewallRule"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a firewall rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/servers/{{$parameter.serverId}}/nics/{{$parameter.nicId}}/firewallrules/{{$parameter.firewallRuleId}}",
          "method": "PUT"
        }
      },
      "description": "Update firewall rule properties",
      "resource": "firewallRule"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a kubernetes cluster",
      "routing": {
        "request": {
          "url": "/k8s",
          "method": "POST"
        }
      },
      "description": "Create a new Kubernetes cluster",
      "resource": "k8s"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a kubernetes cluster",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter.k8sClusterId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a Kubernetes cluster",
      "resource": "k8s"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a kubernetes cluster",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter.k8sClusterId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a Kubernetes cluster",
      "resource": "k8s"
    },
    {
      "name": "Get Kubeconfig",
      "value": "getKubeconfig",
      "action": "Get kubernetes configuration",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter.k8sClusterId}}/kubeconfig",
          "method": "GET"
        }
      },
      "description": "Get the kubeconfig file for a cluster",
      "resource": "k8s"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many kubernetes clusters",
      "routing": {
        "request": {
          "url": "/k8s?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many Kubernetes clusters",
      "resource": "k8s"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a kubernetes cluster",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter.k8sClusterId}}",
          "method": "PUT"
        }
      },
      "description": "Update Kubernetes cluster properties",
      "resource": "k8s"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools",
          "method": "POST"
        }
      },
      "description": "Create a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Delete Node",
      "value": "deleteNode",
      "action": "Delete a node from a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a node from a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many node pools",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools",
          "method": "GET"
        }
      },
      "description": "Get many node pools",
      "resource": "nodePool"
    },
    {
      "name": "Get Node",
      "value": "getNode",
      "action": "Get a node in a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific node in a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Get Nodes",
      "value": "getNodes",
      "action": "Get nodes in a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes",
          "method": "GET"
        }
      },
      "description": "Get all nodes in a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Replace Node",
      "value": "replaceNode",
      "action": "Replace a node in a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}/nodes/{{$parameter[\"nodeId\"]}}/replace",
          "method": "POST"
        }
      },
      "description": "Recreate a node in a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a node pool",
      "routing": {
        "request": {
          "url": "=/k8s/{{$parameter[\"k8sClusterId\"]}}/nodepools/{{$parameter[\"nodePoolId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a node pool",
      "resource": "nodePool"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a private cross connect",
      "routing": {
        "request": {
          "url": "/pccs",
          "method": "POST"
        }
      },
      "description": "Create a new Private Cross-Connect",
      "resource": "pcc"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a private cross connect",
      "routing": {
        "request": {
          "url": "=/pccs/{{$parameter.pccId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a Private Cross-Connect",
      "resource": "pcc"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a private cross connect",
      "routing": {
        "request": {
          "url": "=/pccs/{{$parameter.pccId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a Private Cross-Connect",
      "resource": "pcc"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many private cross connects",
      "routing": {
        "request": {
          "url": "/pccs?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many Private Cross-Connects",
      "resource": "pcc"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a private cross connect",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/pccs/{{$parameter.pccId}}",
          "method": "PATCH"
        }
      },
      "description": "Update Private Cross-Connect properties",
      "resource": "pcc"
    },
    {
      "name": "Attach NIC",
      "value": "attachNic",
      "action": "Attach NIC to load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics",
          "method": "POST"
        }
      },
      "description": "Attach a NIC to load balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers",
          "method": "POST"
        }
      },
      "description": "Create a Load Balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a Load Balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Detach NIC",
      "value": "detachNic",
      "action": "Detach NIC from load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics/{{$parameter[\"nicId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Detach a NIC from load balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a Load Balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Get Balanced NIC",
      "value": "getBalancedNic",
      "action": "Get a balanced NIC",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics/{{$parameter[\"nicId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a balanced NIC",
      "resource": "loadBalancer"
    },
    {
      "name": "Get Balanced NICs",
      "value": "getBalancedNics",
      "action": "Get balanced nics",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}/balancednics",
          "method": "GET"
        }
      },
      "description": "List balanced NICs",
      "resource": "loadBalancer"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many load balancers",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers",
          "method": "GET"
        }
      },
      "description": "Get many Load Balancers",
      "resource": "loadBalancer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/loadbalancers/{{$parameter[\"loadBalancerId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a Load Balancer",
      "resource": "loadBalancer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers",
          "method": "POST"
        }
      },
      "description": "Create a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Create Flow Log",
      "value": "createFlowLog",
      "action": "Create a flow log for a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs",
          "method": "POST"
        }
      },
      "description": "Create a flow log for a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Create Forwarding Rule",
      "value": "createForwardingRule",
      "action": "Create a forwarding rule for a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules",
          "method": "POST"
        }
      },
      "description": "Create a forwarding rule for a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Delete Flow Log",
      "value": "deleteFlowLog",
      "action": "Delete a flow log from a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a flow log from a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Delete Forwarding Rule",
      "value": "deleteForwardingRule",
      "action": "Delete a forwarding rule from a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a forwarding rule from a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get Flow Log",
      "value": "getFlowLog",
      "action": "Get a flow log of a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific flow log of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get Flow Logs",
      "value": "getFlowLogs",
      "action": "Get flow logs of a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs",
          "method": "GET"
        }
      },
      "description": "Get all flow logs of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get Forwarding Rule",
      "value": "getForwardingRule",
      "action": "Get a forwarding rule of a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific forwarding rule of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get Forwarding Rules",
      "value": "getForwardingRules",
      "action": "Get forwarding rules of a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules",
          "method": "GET"
        }
      },
      "description": "Get all forwarding rules of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many network load balancers",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers",
          "method": "GET"
        }
      },
      "description": "Get many Network Load Balancers",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a network load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Update Flow Log",
      "value": "updateFlowLog",
      "action": "Update a flow log of a network load balancer",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a flow log of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Update Forwarding Rule",
      "value": "updateForwardingRule",
      "action": "Update a forwarding rule of a network load balancer",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/networkloadbalancers/{{$parameter[\"networkLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a forwarding rule of a Network Load Balancer",
      "resource": "networkLoadBalancer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers",
          "method": "POST"
        }
      },
      "description": "Create an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Create Flow Log",
      "value": "createFlowLog",
      "action": "Create a flow log for an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs",
          "method": "POST"
        }
      },
      "description": "Create a flow log for an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Create Forwarding Rule",
      "value": "createForwardingRule",
      "action": "Create a forwarding rule for an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules",
          "method": "POST"
        }
      },
      "description": "Create a forwarding rule for an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Delete Flow Log",
      "value": "deleteFlowLog",
      "action": "Delete a flow log from an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a flow log from an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Delete Forwarding Rule",
      "value": "deleteForwardingRule",
      "action": "Delete a forwarding rule from an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a forwarding rule from an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get Flow Log",
      "value": "getFlowLog",
      "action": "Get a flow log of an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific flow log of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get Flow Logs",
      "value": "getFlowLogs",
      "action": "Get flow logs of an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs",
          "method": "GET"
        }
      },
      "description": "Get all flow logs of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get Forwarding Rule",
      "value": "getForwardingRule",
      "action": "Get a forwarding rule of an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific forwarding rule of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get Forwarding Rules",
      "value": "getForwardingRules",
      "action": "Get forwarding rules of an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules",
          "method": "GET"
        }
      },
      "description": "Get all forwarding rules of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many application load balancers",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers",
          "method": "GET"
        }
      },
      "description": "Get many Application Load Balancers",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an application load balancer",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Update Flow Log",
      "value": "updateFlowLog",
      "action": "Update a flow log of an application load balancer",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/flowlogs/{{$parameter[\"flowLogId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a flow log of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Update Forwarding Rule",
      "value": "updateForwardingRule",
      "action": "Update a forwarding rule of an application load balancer",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter[\"datacenterId\"]}}/applicationloadbalancers/{{$parameter[\"applicationLoadBalancerId\"]}}/forwardingrules/{{$parameter[\"forwardingRuleId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a forwarding rule of an Application Load Balancer",
      "resource": "applicationLoadBalancer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a target group",
      "routing": {
        "request": {
          "url": "=/targetgroups",
          "method": "POST"
        }
      },
      "description": "Create a target group",
      "resource": "targetGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a target group",
      "routing": {
        "request": {
          "url": "=/targetgroups/{{$parameter.targetGroupId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a target group",
      "resource": "targetGroup"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a target group",
      "routing": {
        "request": {
          "url": "=/targetgroups/{{$parameter.targetGroupId}}",
          "method": "GET"
        }
      },
      "description": "Get a target group",
      "resource": "targetGroup"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many target groups",
      "routing": {
        "request": {
          "url": "=/targetgroups",
          "method": "GET"
        }
      },
      "description": "Get many target groups",
      "resource": "targetGroup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a target group",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/targetgroups/{{$parameter.targetGroupId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a target group",
      "resource": "targetGroup"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways",
          "method": "POST"
        }
      },
      "description": "Create a new NAT Gateway",
      "resource": "natGateway"
    },
    {
      "name": "Create Flow Log",
      "value": "createFlowLog",
      "action": "Create a flow log for a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs",
          "method": "POST"
        }
      },
      "description": "Create a NAT Gateway flow log",
      "resource": "natGateway"
    },
    {
      "name": "Create Rule",
      "value": "createRule",
      "action": "Create a rule for a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules",
          "method": "POST"
        }
      },
      "description": "Create a NAT Gateway rule",
      "resource": "natGateway"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a NAT Gateway",
      "resource": "natGateway"
    },
    {
      "name": "Delete Flow Log",
      "value": "deleteFlowLog",
      "action": "Delete a flow log from a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a NAT Gateway flow log",
      "resource": "natGateway"
    },
    {
      "name": "Delete Rule",
      "value": "deleteRule",
      "action": "Delete a rule from a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a NAT Gateway rule",
      "resource": "natGateway"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a NAT Gateway",
      "resource": "natGateway"
    },
    {
      "name": "Get Flow Log",
      "value": "getFlowLog",
      "action": "Get a flow log of a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific NAT Gateway flow log",
      "resource": "natGateway"
    },
    {
      "name": "Get Flow Logs",
      "value": "getFlowLogs",
      "action": "Get flow logs of a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs",
          "method": "GET"
        }
      },
      "description": "Get all NAT Gateway flow logs",
      "resource": "natGateway"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many NAT gateways",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many NAT Gateways within a datacenter",
      "resource": "natGateway"
    },
    {
      "name": "Get Rule",
      "value": "getRule",
      "action": "Get a rule of a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
          "method": "GET"
        }
      },
      "description": "Get a specific NAT Gateway rule",
      "resource": "natGateway"
    },
    {
      "name": "Get Rules",
      "value": "getRules",
      "action": "Get rules of a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules",
          "method": "GET"
        }
      },
      "description": "Get all NAT Gateway rules",
      "resource": "natGateway"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a NAT gateway",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}",
          "method": "PUT"
        }
      },
      "description": "Update NAT Gateway properties",
      "resource": "natGateway"
    },
    {
      "name": "Update Flow Log",
      "value": "updateFlowLog",
      "action": "Update a flow log of a NAT gateway",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/flowlogs/{{$parameter.flowLogId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a NAT Gateway flow log",
      "resource": "natGateway"
    },
    {
      "name": "Update Rule",
      "value": "updateRule",
      "action": "Update a rule of a NAT gateway",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/natgateways/{{$parameter.natGatewayId}}/rules/{{$parameter.ruleId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a NAT Gateway rule",
      "resource": "natGateway"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a security group",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups",
          "method": "POST"
        }
      },
      "description": "Create a new security group",
      "resource": "securityGroup"
    },
    {
      "name": "Create Rule",
      "value": "createRule",
      "action": "Create a security group rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules",
          "method": "POST"
        }
      },
      "description": "Create a new rule in a security group",
      "resource": "securityGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a security group",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a security group",
      "resource": "securityGroup"
    },
    {
      "name": "Delete Rule",
      "value": "deleteRule",
      "action": "Delete a security group rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a rule from a security group",
      "resource": "securityGroup"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a security group",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}?depth=2",
          "method": "GET"
        }
      },
      "description": "Get the properties of a security group",
      "resource": "securityGroup"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get security groups",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups?depth=2",
          "method": "GET"
        }
      },
      "description": "Get many security groups within a datacenter",
      "resource": "securityGroup"
    },
    {
      "name": "Get Rule",
      "value": "getRule",
      "action": "Get a security group rule",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
          "method": "GET"
        }
      },
      "description": "Get properties of a specific rule",
      "resource": "securityGroup"
    },
    {
      "name": "Get Rules",
      "value": "getRules",
      "action": "Get security group rules",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules",
          "method": "GET"
        }
      },
      "description": "List all rules in a security group",
      "resource": "securityGroup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a security group",
      "routing": {
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}",
          "method": "PUT"
        }
      },
      "description": "Update security group properties",
      "resource": "securityGroup"
    },
    {
      "name": "Update Rule",
      "value": "updateRule",
      "action": "Update a security group rule",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/datacenters/{{$parameter.datacenterId}}/securitygroups/{{$parameter.securityGroupId}}/rules/{{$parameter.ruleId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a rule in a security group",
      "resource": "securityGroup"
    }
  ]

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

ai_documentation_summary:
  {"purpose":"Manages IONOS Cloud infrastructure resources including compute, networking, storage, Kubernetes, DNS, certificates, CDN, and AI models within n8n workflows.","capabilities":["Infrastructure provisioning and management (servers, volumes, snapshots, NICs, firewalls)","Kubernetes cluster and node pool management","IP block and request management","DNS zone and record management with DNSSEC support","SSL/TLS certificate lifecycle management with ACME support","CDN content delivery with custom routing and geo-restrictions","AI model inference and RAG capabilities","LangChain sub-node integration for AI Agent workflows","Load balancer, NAT gateway, and security group management","Request monitoring capabilities"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Automating server provisioning and configuration","Managing SSL certificates for web applications","Configuring DNS zones and records","Setting up CDN for content delivery","Deploying and managing Kubernetes clusters"],"limitations":["Requires n8n version 2.1.5 or higher","Chat Model and Embeddings nodes are LangChain sub-nodes that plug into n8n's built-in AI nodes rather than operating as standalone workflow nodes","Some operations may require instance restart after installation"],"relatedNodes":["IONOS Cloud (Certificate Manager)","IONOS Cloud (Cloud DNS)","IONOS Cloud (CDN)","IONOS Cloud (AI Model Hub)","IONOS Cloud Chat Model"]}


node_type: n8n-nodes-fluentc.fluentCTranslate
package_name: n8n-nodes-fluentc
display_name: FluentC Translate
description: Translate text or HTML using FluentC AI
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: fluentc
author_github_url: https://github.com/FluentC/
npm_package_name: n8n-nodes-fluentc
npm_version: 1.2.7
community_fetched_at: 2026-04-16T09:43:36.176Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # FluentC N8N Plugin

  This N8N community plugin provides integration with the FluentC AI Translation API, enabling you to translate text and HTML content and detect languages within your N8N workflows.

  ## Features

  - **Translation**: Support for both real-time and batch translation modes
  - **Language Detection**: Detect the language of input content
  - **Language Retrieval**: Fetch lists of supported and source languages
  - **Dynamic Language Selection**: Dropdown menus populated with your API key's enabled languages
  - **Format Support**: Handle both text and HTML content
  - **Automatic Polling**: Batch jobs are automatically polled until completion
  - **Comprehensive Output**: Returns all metadata including token counts, detected languages, and model information
  - **Error Handling**: Graceful error handling with continue-on-fail support
  - **Language Management**: Direct link to manage enabled languages on your account

  ## Installation

  The installation method depends on your n8n setup. Choose the appropriate method below:

  ### Method 1: n8n GUI Installation (Recommended for self-hosted n8n)

  This is the easiest method for self-hosted n8n instances:

  1. **Open n8n Settings**: In your n8n instance, go to **Settings** > **Community Nodes**
  2. **Install Node**: Click **Install** 
  3. **Enter Package Name**: Enter `n8n-nodes-fluentc` in the "Enter npm package name" field
  4. **Accept Risk**: Check "I understand the risks of installing unverified code from a public source"
  5. **Install**: Click **Install**
  6. **Restart**: The nodes will be available immediately after installation

  ### Method 2: Verified Community Nodes (for n8n Cloud and recent versions)

  If this package gets verified by n8n (future goal):

  1. **Open Nodes Panel**: Go to the Canvas and open the nodes panel (click '+' or press Tab)
  2. **Search**: Search for "FluentC" 
  3. **Install from Community**: Look for the "More from the community" section
  4. **Install**: Click on the FluentC node and select **Install**

  ### Method 3: Manual Installation (for Docker/advanced setups)

  For Docker containers, queue mode, or when GUI installation isn't available:

  #### For Docker Containers:

  1. **Access Docker Shell**: 
     ```bash
     docker exec -it [your-n8n-container-name] sh
     ```

  2. **Create nodes directory** (if it doesn't exist):
     ```bash
     mkdir -p ~/.n8n/nodes
     cd ~/.n8n/nodes
     ```

  3. **Install the package**:
     ```bash
     npm install n8n-nodes-fluentc
     ```

  4. **Restart n8n container**

  #### For npm-based installations:

  1. **Navigate to n8n nodes directory**:
     ```bash
     cd ~/.n8n/nodes
     ```
     (Create the directory if it doesn't exist: `mkdir -p ~/.n8n/nodes`)

  2. **Install the package**:
     ```bash
     npm install n8n-nodes-fluentc
     ```

  3. **Restart n8n**

  ### Method 4: Custom Docker Build

  For permanent installation in a custom Docker image:

  ```dockerfile
  FROM n8nio/n8n:latest
  RUN cd ~/.n8n/ && mkdir -p nodes && cd nodes && npm install n8n-nodes-fluentc
  ```

  ## Verification

  After installation, verify the nodes are available:

  1. Create a new workflow
  2. Click the '+' button to add a node
  3. Search for "FluentC" in the node search
  4. You should see:
     - **FluentC Translate** (with package icon)
     - **FluentC Check Language** (with package icon)
     - **FluentC Languages** (with package icon)

  ## Setup

  ### 1. Create FluentC API Credentials

  1. In N8N, go to **Credentials** > **New**
  2. Search for "FluentC API" and select it
  3. Enter your FluentC API key (obtained from the FluentC sales website)
  4. Test and save the credential

  ### 2. Using the Nodes

  #### FluentC Translate Node

  This node handles text and HTML translation with support for both real-time and batch modes.

  **Parameters:**
  - **Mode**: Choose between "Real-time" (synchronous) or "Batch" (asynchronous)
  - **Input**: Text or HTML content to translate (max 100,000 bytes)
  - **Input Format**: Select "Text" or "HTML"
  - **Target Language**: Dropdown populated with your enabled target languages
  - **Source Language**: Dropdown with your enabled source languages (optional, includes "Auto-detect")
  - **Max Polling Attempts**: (Batch mode only) Maximum polling attempts for batch jobs (default: 30)

  **Language Management:**
  The language dropdowns are dynamically populated based on your API key's enabled languages. If you need additional languages, you'll see a link to visit www.fluentc.io to manage your language access.

  **Output:**
  The node returns all available data including:
  - `translation`: The translated content
  - `token_count`: Number of tokens used
  - `source_language_detected`: Detected source language
  - `model_used`: AI model used for translation
  - `metadata`: Additional metadata
  - `mode`: Translation mode used
  - `input_format`: Input format processed
  - `target_language`: Target language

  #### FluentC Check Language Node

  This node detects the language of input content.

  **Parameters:**
  - **Input**: Text or HTML content to analyze
  - **Input Format**: Select "Text" or "HTML"

  **Output:**
  - `detected_language`: Two-letter language code of detected language
  - `confidence`: Confidence score (0-1) for the detection
  - `input_format`: Input format processed
  - `input_length`: Length of analyzed content

  #### FluentC Languages Node

  This node fetches the lists of supported and source languages from your FluentC account.

  **Parameters:**
  This node has no parameters. It only requires a configured FluentC API credential.

  **Output:**
  - `supported_languages`: An array of objects, each with `code` and `name` of a language available for translation as a target.
  - `source_languages`: An array of objects, each with `code` and `name` of a language available as a source for translation.

  ## Usage Examples

  ### Basic Translation Workflow

  1. Add a **FluentC Translate** node to your workflow
  2. Configure it with:
     - Mode: "Real-time"
     - Input: "Hello, how are you today?"
     - Input Format: "Text"
     - Target Language: Select "Spanish (es)" from dropdown
  3. The output will include the Spanish translation and metadata

  ### Batch Translation for Large Content

  1. Use **FluentC Translate** node with:
     - Mode: "Batch"
     - Input: Your large HTML or text content
     - Target Language: Your desired language code
  2. The node will automatically poll until the translation is complete

  ### Language Detection Before Translation

  1. Add a **FluentC Check Language** node first
  2. Connect it to a **FluentC Translate** node
  3. Use the detected language as the source language parameter

  ### Retrieving Language Lists

  1. Add a **FluentC Languages** node to your workflow.
  2. Execute the node.
  3. The output will contain two arrays: `supported_languages` and `source_languages`, which you can then use in other parts of your workflow.

  ## Troubleshooting

  ### Nodes Not Appearing

  If nodes don't appear after installation:

  1. **Check Installation Method**: Ensure you used the correct method for your setup
  2. **Restart n8n**: Always restart n8n after manual installation
  3. **Check Directory**: For manual installs, verify the package is in `~/.n8n/nodes/`
  4. **Check Permissions**: Ensure n8n has read permissions for the nodes directory
  5. **Check Logs**: Look at n8n logs for any error messages during startup

  ### Permission Issues

  For Docker installations, you might need to ensure proper permissions:

  ```bash
  # Inside the container
  chown -R node:node ~/.n8n/nodes
  ```

  ### Queue Mode

  If you're running n8n in queue mode, you **must** use manual installation (Method 3).

  ## Error Handling

  The plugin includes comprehensive error handling:

  - **Content Size Validation**: Prevents requests exceeding 100,000 bytes
  - **Batch Timeout Protection**: Limits polling attempts to prevent infinite loops  
  - **API Error Handling**: Gracefully handles API errors and rate limits
  - **Continue on Fail**: Option to continue workflow execution even if translation fails

  ## API Rate Limits

  The plugin respects FluentC API rate limits and uses the recommended polling intervals returned by the batch API to avoid overwhelming the service.

  ## Development & Publishing

  This package follows n8n community node standards:

  - ✅ Package name starts with `n8n-nodes-`
  - ✅ Includes `n8n-community-node-package` keyword
  - ✅ No runtime dependencies (only devDependencies)
  - ✅ Proper n8n configuration in package.json
  - ✅ Built TypeScript with proper exports

  ## Support

  For issues related to this N8N plugin, please check:

  1. **FluentC API Documentation**: https://fluentc.ai/docs
  2. **N8N Community**: https://community.n8n.io
  3. **Plugin Repository**: https://github.com/FluentC/n8n-nodes-fluentc
  4. **n8n Community Nodes Documentation**: https://docs.n8n.io/integrations/community-nodes/

  ## License

  MIT License - see LICENSE file for details.

  ---

  **Note**: You need a valid FluentC API key to use this plugin. API keys are obtained through the FluentC sales website.

ai_documentation_summary:
  {"purpose":"The FluentC Translate node integrates with the FluentC AI Translation API to translate text and HTML content, detect languages, and manage language lists within n8n workflows.","capabilities":["Real-time (synchronous) translation","Batch translation with automatic polling","Text and HTML content translation","Language detection for input content","Supported and source language list retrieval","Dynamic language selection based on API credentials","Comprehensive metadata output including token counts and model information"],"authentication":"API key required (FluentC API key)","commonUseCases":["Multi-language content translation for websites or documents","Real-time chat translation","Batch processing of large content volumes","Language detection for incoming user input","Workflow automation for internationalization tasks"],"limitations":["Input content is limited to a maximum of 100,000 bytes","Batch mode requires manual configuration of max polling attempts","Language selection is restricted to languages enabled in the user's FluentC account"],"relatedNodes":["FluentC Check Language","FluentC Languages","n8n-nodes-fluentc.fluentCTranslate"]}


node_type: @reportei/n8n-nodes-reportei.reportei
package_name: @reportei/n8n-nodes-reportei
display_name: Reportei
description: Perform actions with Reportei API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: pgabriel20
author_github_url: https://github.com/reportei/reportei-n8n-node.git
npm_package_name: @reportei/n8n-nodes-reportei
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:36.177Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "report",
      "options": [
        {
          "name": "Report",
          "value": "report"
        },
        {
          "name": "Dashboard",
          "value": "dashboard"
        },
        {
          "name": "Timeline",
          "value": "timeline"
        }
      ],
      "required": true,
      "description": "Choose which resource you want to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create a Report",
          "value": "create",
          "action": "Create a report",
          "description": "Creates a new report in Reportei"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a dashboard",
          "description": "Create a new dashboard in Reportei"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dashboard"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Add event to timeline",
          "description": "Add an event (milestone) to the timeline in Reportei"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timeline"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create a Report",
      "value": "create",
      "action": "Create a report",
      "description": "Creates a new report in Reportei",
      "resource": "report"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a dashboard",
      "description": "Create a new dashboard in Reportei",
      "resource": "dashboard"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Add event to timeline",
      "description": "Add an event (milestone) to the timeline in Reportei",
      "resource": "timeline"
    }
  ]

npm_readme:
  # n8n-nodes-reportei

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

  **Reportei** is a reporting and dashboard platform that helps you generate marketing reports, track timelines, and automate analytics. With this node, you can create reports, dashboards, and timeline events, as well as trigger workflows on various events happening in your Reportei account.

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

  Once installed, you can select **Reportei** and **Reportei Trigger** in your n8n workflows to interact with the Reportei API.

  ## Operations

  The **Reportei** node offers the following _actions_ (operations):

  - **Create Report**: Create a marketing report, specifying the project, integrations, date ranges, titles, and optionally select a template.  
  - **Create Dashboard**: Create a custom dashboard linked to a project, with selected integrations, date ranges, and optionally select a template.  
  - **Add Event to Timeline**: Insert a milestone or note into a project’s report timeline.

  The **Reportei Trigger** node supports these _events_ (webhooks):

  - **Report Created**  
  - **Report Viewed**  
  - **Dashboard Created**  
  - **Automation Executed**  
  - **Control Goal Met**  
  - **Control Goal Not Met**  
  - **Timeline Milestone Added**

  ## Credentials

  To use this node, you need a **Reportei API** token (Bearer token).  
  1. **Get your token** from the Reportei account page.  
  2. In n8n, create a new credential called **Reportei API** and paste your token.  
  3. Use this credential in the **Reportei** or **Reportei Trigger** node.

  For webhooks, the node will automatically register or unregister a webhook subscription in your Reportei account if you use the **Reportei Trigger** node. You only need to provide valid credentials and set the correct event type.

  ## Compatibility

  - **Minimum n8n version**: 1.85.0 (or whichever you have tested).  
  - The node is developed and tested against **Reportei**’s [API v1](https://app.reportei.com/docs/api).  
  - No known incompatibilities, but you must enable **community nodes** in n8n’s settings for installation.

  ## Usage

  1. In your n8n instance, install the node via one of the methods described in the community nodes [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).  
  2. Create or select a credential for **Reportei API**.  
  3. **Actions** node (Reportei):
     - Drag the **Reportei** node into your workflow.  
     - Select your resource (Report, Dashboard, or Timeline) and the operation (create).  
     - Fill the required fields, such as “Project ID”, “Integrations”, “Title”, etc.  
     - Execute the workflow to see the results.
  4. **Trigger** node (Reportei Trigger):
     - Drag the **Reportei Trigger** node into your workflow.  
     - Choose an event type (e.g., “report_created”).  
     - (Optional) If you are running n8n locally or behind a tunnel, fill **Custom Webhook Base URL** with your public domain (for example, `https://your-domain.tld`). This replaces the default localhost address in the webhook registration, ensuring external services (Reportei) can reach your n8n instance.  
     - Activate the workflow. The node will register a webhook at Reportei.  
     - Once the event occurs, n8n will receive a POST request at your specified domain and trigger your workflow.

  If you need more help with n8n basics, check out the [Try it out](https://docs.n8n.io/try-it-out/) documentation.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)  
  - [Reportei API documentation](https://app.reportei.com/docs/api)  
  - [n8n official docs](https://docs.n8n.io/)

  ## Version history

  - **0.1.0**  
    - Initial release of the **n8n-nodes-reportei** package.  
    - Added actions: Create Report, Create Dashboard, Add Timeline Event.  
    - Added triggers for 6 events: `report_created`, `dashboard_created`, `automation_executed`, `control_goal_met`, `control_goal_not_met`, `timeline_milestone`.

  - **0.1.1**  
    - Fixed minor bugs in the existing operations and triggers.

  - **0.1.2**  
    - Added the optional **Custom Webhook Base URL** input in the trigger node.  
    - Users can now specify a public domain (such as a tunnel URL) to replace localhost, making it easier to receive events behind NAT or local environments.

  - **0.1.3**  
    - **NEW**: Added optional **Template Selection** for Reports and Dashboards.  
    - Templates are now loaded dynamically based on the selected project.  
    - Enhanced API endpoint handling with multiple fallback URLs for better reliability.  
    - Improved error handling for template loading operations.

  - **0.1.4**  
    - **FIXED**: Added credential test functionality to validate API tokens.  
    - The node now includes automatic credential validation using the `/me` endpoint.  
    - This resolves the "Missing credential test" error during n8n community node verification.  
    - Improved user experience with immediate feedback on invalid credentials.

  - **0.1.5**  
    - **NEW**: Added 'Report Viewed' trigger event (`report_viewed`).  
    - **IMPROVED**: Made 'Project Name or ID' field optional in trigger configuration. Users can now create triggers without specifying a specific project, allowing for more flexible webhook configurations.  

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Reportei API to create marketing reports, dashboards, and timeline events, or to trigger workflows based on specific events within a Reportei account.","capabilities":["Create marketing reports with project and template selection","Create custom dashboards linked to projects","Add milestones or notes to project timelines","Trigger workflows on report creation","Trigger workflows on dashboard creation","Trigger workflows on automation execution","Trigger workflows when control goals are met or not met","Trigger workflows on timeline milestone addition","Trigger workflows when reports are viewed","Register and unregister webhook subscriptions"],"authentication":"API key required (Reportei API Bearer token)","commonUseCases":["Automating marketing report generation based on project milestones","Creating dynamic dashboards for project tracking","Receiving notifications when reports are viewed or automation runs","Integrating Reportei analytics into external n8n workflows"],"limitations":["Community node (requires enabling in n8n settings)","Requires Reportei API v1 compatibility","Minimum n8n version 1.85.0"],"relatedNodes":["Reportei Trigger","Community Nodes"]}


node_type: n8n-nodes-personio-hr.personioHr
package_name: n8n-nodes-personio-hr
display_name: Personio HR
description: Interact with the Personio HR platform API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: pk-consult
author_github_url: https://github.com/PK-Consulting/
npm_package_name: n8n-nodes-personio-hr
npm_version: 0.1.14
community_fetched_at: 2026-04-16T09:43:36.184Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Absence Period",
          "value": "absencePeriod"
        },
        {
          "name": "Absence Type",
          "value": "absenceType"
        },
        {
          "name": "Attendance Period",
          "value": "attendancePeriod"
        },
        {
          "name": "Compensation",
          "value": "compensation"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Employment",
          "value": "employment"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Person",
          "value": "person"
        },
        {
          "name": "Project",
          "value": "project"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a person",
          "routing": {
            "request": {
              "url": "/v2/persons",
              "method": "POST"
            }
          },
          "description": "Create a new person (employee)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a person",
          "routing": {
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a person"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a person",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}",
              "method": "GET"
            }
          },
          "description": "Get a person by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many persons",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/persons",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many persons"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a person",
          "routing": {
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a person"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an employment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}/employments/{{$parameter.employmentId}}",
              "method": "GET"
            }
          },
          "description": "Get an employment record"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many employments",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}/employments",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get all employments for a person"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an employment",
          "routing": {
            "request": {
              "url": "=/v2/persons/{{$parameter.personId}}/employments/{{$parameter.employmentId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an employment record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an absence period",
          "routing": {
            "request": {
              "url": "/v2/absence-periods",
              "method": "POST"
            }
          },
          "description": "Create an absence period"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an absence period",
          "routing": {
            "request": {
              "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an absence period"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an absence period",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
              "method": "GET"
            }
          },
          "description": "Get an absence period by ID"
        },
        {
          "name": "Get Breakdowns",
          "value": "getBreakdowns",
          "action": "Get absence period breakdowns",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}/breakdowns",
              "method": "GET"
            }
          },
          "description": "Get daily breakdowns for an absence period"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many absence periods",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/absence-periods",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many absence periods"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an absence period",
          "routing": {
            "request": {
              "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an absence period"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "absencePeriod"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an absence type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/absence-types/{{$parameter.absenceTypeId}}",
              "method": "GET"
            }
          },
          "description": "Get an absence type by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many absence types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/absence-types",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get all absence types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "absenceType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an attendance period",
          "routing": {
            "request": {
              "url": "/v2/attendance-periods",
              "method": "POST"
            }
          },
          "description": "Create an attendance period"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an attendance period",
          "routing": {
            "request": {
              "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an attendance period"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an attendance period",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
              "method": "GET"
            }
          },
          "description": "Get an attendance period by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many attendance periods",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/attendance-periods",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many attendance periods"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an attendance period",
          "routing": {
            "request": {
              "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an attendance period"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attendancePeriod"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Members",
          "value": "addMembers",
          "action": "Add members to a project",
          "routing": {
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}/members",
              "method": "POST"
            }
          },
          "description": "Add members to a project"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "routing": {
            "request": {
              "url": "/v2/projects",
              "method": "POST"
            }
          },
          "description": "Create a project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "routing": {
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a project"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}",
              "method": "GET"
            }
          },
          "description": "Get a project by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many projects",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/projects",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many projects"
        },
        {
          "name": "Get Members",
          "value": "getMembers",
          "action": "Get project members",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}/members",
              "method": "GET"
            }
          },
          "description": "Get members of a project"
        },
        {
          "name": "Remove Members",
          "value": "removeMembers",
          "action": "Remove members from a project",
          "routing": {
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}/members",
              "method": "DELETE"
            }
          },
          "description": "Remove members from a project"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project",
          "routing": {
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "routing": {
            "request": {
              "url": "=/v2/document-management/documents/{{$parameter.documentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a document"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a document",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/v2/document-management/documents/{{$parameter.documentId}}/download",
              "json": false,
              "method": "GET",
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Download a document file"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many documents",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/document-management/documents",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many documents"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "routing": {
            "request": {
              "url": "=/v2/document-management/documents/{{$parameter.documentId}}",
              "method": "PATCH"
            }
          },
          "description": "Update document metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a compensation",
          "routing": {
            "request": {
              "url": "/v2/compensations",
              "method": "POST"
            }
          },
          "description": "Create a compensation"
        },
        {
          "name": "Create Type",
          "value": "createType",
          "action": "Create a compensation type",
          "routing": {
            "request": {
              "url": "/v2/compensations/types",
              "method": "POST"
            }
          },
          "description": "Create a compensation type"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many compensations",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/compensations",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get many compensations"
        },
        {
          "name": "Get Types",
          "value": "getTypes",
          "action": "Get compensation types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/compensations/types",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get compensation types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "compensation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLegalEntities",
      "options": [
        {
          "name": "Get Legal Entities",
          "value": "getLegalEntities",
          "action": "Get legal entities",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/legal-entities",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "url": "={{ $response.body._meta?.links?.next?.href }}"
                  },
                  "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
                }
              }
            }
          },
          "description": "Get all legal entities"
        },
        {
          "name": "Get Legal Entity",
          "value": "getLegalEntity",
          "action": "Get a legal entity",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/legal-entities/{{$parameter.legalEntityId}}",
              "method": "GET"
            }
          },
          "description": "Get a legal entity by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a person",
      "routing": {
        "request": {
          "url": "/v2/persons",
          "method": "POST"
        }
      },
      "description": "Create a new person (employee)",
      "resource": "person"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a person",
      "routing": {
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a person",
      "resource": "person"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a person",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}",
          "method": "GET"
        }
      },
      "description": "Get a person by ID",
      "resource": "person"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many persons",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/persons",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many persons",
      "resource": "person"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a person",
      "routing": {
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a person",
      "resource": "person"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an employment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}/employments/{{$parameter.employmentId}}",
          "method": "GET"
        }
      },
      "description": "Get an employment record",
      "resource": "employment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many employments",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}/employments",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get all employments for a person",
      "resource": "employment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an employment",
      "routing": {
        "request": {
          "url": "=/v2/persons/{{$parameter.personId}}/employments/{{$parameter.employmentId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an employment record",
      "resource": "employment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an absence period",
      "routing": {
        "request": {
          "url": "/v2/absence-periods",
          "method": "POST"
        }
      },
      "description": "Create an absence period",
      "resource": "absencePeriod"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an absence period",
      "routing": {
        "request": {
          "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an absence period",
      "resource": "absencePeriod"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an absence period",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
          "method": "GET"
        }
      },
      "description": "Get an absence period by ID",
      "resource": "absencePeriod"
    },
    {
      "name": "Get Breakdowns",
      "value": "getBreakdowns",
      "action": "Get absence period breakdowns",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}/breakdowns",
          "method": "GET"
        }
      },
      "description": "Get daily breakdowns for an absence period",
      "resource": "absencePeriod"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many absence periods",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/absence-periods",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many absence periods",
      "resource": "absencePeriod"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an absence period",
      "routing": {
        "request": {
          "url": "=/v2/absence-periods/{{$parameter.absencePeriodId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an absence period",
      "resource": "absencePeriod"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an absence type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/absence-types/{{$parameter.absenceTypeId}}",
          "method": "GET"
        }
      },
      "description": "Get an absence type by ID",
      "resource": "absenceType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many absence types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/absence-types",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get all absence types",
      "resource": "absenceType"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an attendance period",
      "routing": {
        "request": {
          "url": "/v2/attendance-periods",
          "method": "POST"
        }
      },
      "description": "Create an attendance period",
      "resource": "attendancePeriod"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an attendance period",
      "routing": {
        "request": {
          "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an attendance period",
      "resource": "attendancePeriod"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an attendance period",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
          "method": "GET"
        }
      },
      "description": "Get an attendance period by ID",
      "resource": "attendancePeriod"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many attendance periods",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/attendance-periods",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many attendance periods",
      "resource": "attendancePeriod"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an attendance period",
      "routing": {
        "request": {
          "url": "=/v2/attendance-periods/{{$parameter.attendancePeriodId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an attendance period",
      "resource": "attendancePeriod"
    },
    {
      "name": "Add Members",
      "value": "addMembers",
      "action": "Add members to a project",
      "routing": {
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}/members",
          "method": "POST"
        }
      },
      "description": "Add members to a project",
      "resource": "project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "routing": {
        "request": {
          "url": "/v2/projects",
          "method": "POST"
        }
      },
      "description": "Create a project",
      "resource": "project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "routing": {
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a project",
      "resource": "project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}",
          "method": "GET"
        }
      },
      "description": "Get a project by ID",
      "resource": "project"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many projects",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/projects",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many projects",
      "resource": "project"
    },
    {
      "name": "Get Members",
      "value": "getMembers",
      "action": "Get project members",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}/members",
          "method": "GET"
        }
      },
      "description": "Get members of a project",
      "resource": "project"
    },
    {
      "name": "Remove Members",
      "value": "removeMembers",
      "action": "Remove members from a project",
      "routing": {
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}/members",
          "method": "DELETE"
        }
      },
      "description": "Remove members from a project",
      "resource": "project"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project",
      "routing": {
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a project",
      "resource": "project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "routing": {
        "request": {
          "url": "=/v2/document-management/documents/{{$parameter.documentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a document",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/v2/document-management/documents/{{$parameter.documentId}}/download",
          "json": false,
          "method": "GET",
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Download a document file",
      "resource": "document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many documents",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/document-management/documents",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many documents",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "routing": {
        "request": {
          "url": "=/v2/document-management/documents/{{$parameter.documentId}}",
          "method": "PATCH"
        }
      },
      "description": "Update document metadata",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a compensation",
      "routing": {
        "request": {
          "url": "/v2/compensations",
          "method": "POST"
        }
      },
      "description": "Create a compensation",
      "resource": "compensation"
    },
    {
      "name": "Create Type",
      "value": "createType",
      "action": "Create a compensation type",
      "routing": {
        "request": {
          "url": "/v2/compensations/types",
          "method": "POST"
        }
      },
      "description": "Create a compensation type",
      "resource": "compensation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many compensations",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/compensations",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get many compensations",
      "resource": "compensation"
    },
    {
      "name": "Get Types",
      "value": "getTypes",
      "action": "Get compensation types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/compensations/types",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get compensation types",
      "resource": "compensation"
    },
    {
      "name": "Get Legal Entities",
      "value": "getLegalEntities",
      "action": "Get legal entities",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/legal-entities",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "url": "={{ $response.body._meta?.links?.next?.href }}"
              },
              "continue": "={{ Boolean($response.body._meta?.links?.next) }}"
            }
          }
        }
      },
      "description": "Get all legal entities",
      "resource": "organization"
    },
    {
      "name": "Get Legal Entity",
      "value": "getLegalEntity",
      "action": "Get a legal entity",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/legal-entities/{{$parameter.legalEntityId}}",
          "method": "GET"
        }
      },
      "description": "Get a legal entity by ID",
      "resource": "organization"
    }
  ]

npm_readme:
  # n8n-nodes-personio-hr

  Community node for [n8n](https://n8n.io/) to interact with the [Personio](https://www.personio.com/) HR platform via their v2 API.

  ## Installation

  ### In n8n Desktop / Self-Hosted

  Go to **Settings > Community Nodes** and install:

  ```
  n8n-nodes-personio-hr
  ```

  ### Manual Installation

  ```bash
  cd ~/.n8n/nodes
  npm install n8n-nodes-personio-hr
  ```

  Then restart n8n.

  ## Credentials

  You need a Personio API client ID and client secret. Create them in **Personio > Settings > Integrations > API credentials**.

  When configuring the credential in n8n, enter:
  - **Client ID** - Your API client ID
  - **Client Secret** - Your API client secret

  The node handles token authentication automatically (OAuth2 Client Credentials flow with expirable tokens).

  ## Supported Resources & Operations

  ### Personio HR (Regular Node)

  | Resource | Operations |
  |---|---|
  | **Person** | Create, Get, Get Many, Update, Delete |
  | **Employment** | Get, Get Many, Update |
  | **Absence Period** | Create, Get, Get Many, Get Breakdowns, Update, Delete |
  | **Absence Type** | Get, Get Many |
  | **Attendance Period** | Create, Get, Get Many, Update, Delete |
  | **Project** | Create, Get, Get Many, Update, Delete, Get Members, Add Members, Remove Members |
  | **Document** | Get Many, Download (binary), Update, Delete |
  | **Compensation** | Create, Get Many, Get Types, Create Type |
  | **Organization** | Get Legal Entities, Get Legal Entity |

  ### Personio Trigger (Webhook Node)

  Automatically registers webhooks with Personio for real-time events:

  - Person: created, updated, deleted
  - Employment: created, updated, deleted
  - Absence Period: created, updated, deleted
  - Attendance Period: created, updated, deleted
  - Compensation: created, updated, deleted
  - Project: created, updated, deleted
  - Custom reports: created

  Webhooks are auto-registered on workflow activation and cleaned up on deactivation.

  ## Features

  - **Cursor-based pagination** on all list endpoints with "Return All" toggle
  - **Custom Attributes** support on Person Create/Update (dynamic key-value pairs for instance-specific fields like date of birth, phone, address, etc.)
  - **Nested body formats** handled correctly for the Personio v2 API (employments, positions, supervisors, org units, cost centers)
  - **Binary file download** for documents
  - **Proper Accept headers** for DELETE/PATCH operations (`application/problem+json`)

  ## Custom Attributes

  Personio stores many personal details (date of birth, phone, nationality, etc.) as custom attributes with instance-specific IDs. The Person Create and Update operations include a "Custom Attributes" section where you can add multiple attribute rows.

  **Single value:**
  - Attribute ID: `laptop_serial_number`
  - Value: `ABC-123`

  **Array value (tags/multi-select):**
  - Attribute ID: `peripheries`
  - Value: `["mouse","keyboard","monitor"]`

  ## Known Limitations

  - **Compensation Create** returns 403 Forbidden - this is a Personio-side issue (also fails in their own API playground)
  - **Organization** - Cost Centers and Workplaces endpoints return 404 (not live in Personio API despite being documented). Only Legal Entities are available.
  - **Org Units** - No list endpoint exists, so you need to know the org unit ID beforehand
  - **Recruiting API** - Not included (known to be unstable)

  ## API Scopes Required

  Ensure your Personio API credentials have the following scopes enabled:
  - `persons:read`, `persons:write`
  - `employments:read`, `employments:write`
  - `absences:read`, `absences:write`
  - `attendances:read`, `attendances:write`
  - `projects:read`, `projects:write`
  - `documents:read`, `documents:write`
  - `compensations:read`, `compensations:write`
  - `webhooks:read`, `webhooks:write` (for the Trigger node)

  ## License

  MIT


node_type: @geocapture/n8n-nodes-geocapture.geocapture
package_name: @geocapture/n8n-nodes-geocapture
display_name: geoCapture
description: Consume geoCapture API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: geocapture
author_github_url: https://github.com/geocapture/n8n-nodes-geocapture.git
npm_package_name: @geocapture/n8n-nodes-geocapture
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:36.185Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "project",
      "options": [
        {
          "name": "Project",
          "value": "project"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new project",
          "description": "Create a new project"
        },
        {
          "name": "Create or Update",
          "value": "upsert",
          "action": "Create or update a project",
          "description": "Create a new project, or update the current one if it already exists (upsert)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new project",
      "description": "Create a new project",
      "resource": "project"
    },
    {
      "name": "Create or Update",
      "value": "upsert",
      "action": "Create or update a project",
      "description": "Create a new project, or update the current one if it already exists (upsert)",
      "resource": "project"
    }
  ]

npm_readme:
  # @geocapture/n8n-nodes-geocapture

  This node lets you use the geoCapture API in your n8n workflows.

  ## Installation

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

  ## Operations

  - Projects
    - Create a new project
    - Create or Update a project
    - Watch for Project Events (Create, Update, Delete)

  ## Credentials

  You can use the geoCapture API Token to use this node.

  1. Go to the [API Settings](https://app.geocapture.net/apis) to create a new API Token.
  2. Add a Service to the API Token.
  3. Search for the "n8n" Service and click "Add"
  4. Save the API Token.
  5. Copy the API Token.

  ## Compatibility

  Compatible with n8n@1.60.0 or later

ai_documentation_summary:
  {"purpose":"This n8n node enables interaction with the geoCapture API to manage projects and monitor project events within automated workflows.","capabilities":["Create a new project","Update an existing project","Watch for project events (Create, Update, Delete)","Retrieve project data via API"],"authentication":"API Token required (configured via n8n credentials with geoCapture API Token)","commonUseCases":["Automating project lifecycle management","Monitoring project status changes in real-time","Integrating geoCapture services into n8n workflows"],"limitations":["Requires n8n version 1.60.0 or later","Requires manual setup of API Token and service configuration in geoCapture dashboard"],"relatedNodes":[]}


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

updated_at: 2026-04-16 09:43:36
author_name: achiya
author_github_url: https://github.com/achiya-automation/
npm_package_name: n8n-nodes-typebot
npm_version: 1.3.24
community_fetched_at: 2026-04-16T09:43:36.185Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        },
        {
          "name": "Folder",
          "value": "folder"
        },
        {
          "name": "Result",
          "value": "result"
        },
        {
          "name": "Typebot",
          "value": "typebot"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "startChat",
      "options": [
        {
          "name": "Continue Chat",
          "value": "continueChat",
          "action": "Continue a chat session",
          "description": "Continue an existing chat session"
        },
        {
          "name": "Generate Upload URL",
          "value": "generateUploadUrl",
          "action": "Generate upload URL",
          "description": "Generate a presigned URL for file upload"
        },
        {
          "name": "Save Logs",
          "value": "saveLogs",
          "action": "Save logs",
          "description": "Save client logs for a session"
        },
        {
          "name": "Start Chat",
          "value": "startChat",
          "action": "Start a chat session",
          "description": "Start a new chat session"
        },
        {
          "name": "Start Preview Chat",
          "value": "startPreviewChat",
          "action": "Start a preview chat session",
          "description": "Start a preview chat session"
        },
        {
          "name": "Update Typebot in Session",
          "value": "updateTypebotInSession",
          "action": "Update typebot in session",
          "description": "Update typebot configuration in an active session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all typebots",
          "description": "List all typebots"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a typebot",
          "description": "Get a typebot"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a typebot",
          "description": "Create a typebot"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a typebot",
          "description": "Update a typebot"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a typebot",
          "description": "Delete a typebot"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a typebot",
          "description": "Publish a typebot"
        },
        {
          "name": "Unpublish",
          "value": "unpublish",
          "action": "Unpublish a typebot",
          "description": "Unpublish a typebot"
        },
        {
          "name": "Get Published",
          "value": "getPublished",
          "action": "Get published typebot",
          "description": "Get published typebot"
        },
        {
          "name": "Import",
          "value": "import",
          "action": "Import a typebot",
          "description": "Import a typebot from JSON"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "typebot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all results",
          "description": "List all results"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a result",
          "description": "Get a result"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete results",
          "description": "Delete results"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get statistics",
          "description": "Get statistics"
        },
        {
          "name": "List Logs",
          "value": "listLogs",
          "action": "List logs in result",
          "description": "List logs for a result"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "result"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all workspaces",
          "description": "List all workspaces"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a workspace",
          "description": "Get a workspace"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a workspace",
          "description": "Create a workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a workspace",
          "description": "Update a workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a workspace",
          "description": "Delete a workspace"
        },
        {
          "name": "List Members",
          "value": "listMembers",
          "action": "List workspace members",
          "description": "List workspace members"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all folders",
          "description": "List all folders"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a folder",
          "description": "Create a folder"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a folder",
          "description": "Update a folder"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a folder",
          "description": "Delete a folder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Continue Chat",
      "value": "continueChat",
      "action": "Continue a chat session",
      "description": "Continue an existing chat session",
      "resource": "chat"
    },
    {
      "name": "Generate Upload URL",
      "value": "generateUploadUrl",
      "action": "Generate upload URL",
      "description": "Generate a presigned URL for file upload",
      "resource": "chat"
    },
    {
      "name": "Save Logs",
      "value": "saveLogs",
      "action": "Save logs",
      "description": "Save client logs for a session",
      "resource": "chat"
    },
    {
      "name": "Start Chat",
      "value": "startChat",
      "action": "Start a chat session",
      "description": "Start a new chat session",
      "resource": "chat"
    },
    {
      "name": "Start Preview Chat",
      "value": "startPreviewChat",
      "action": "Start a preview chat session",
      "description": "Start a preview chat session",
      "resource": "chat"
    },
    {
      "name": "Update Typebot in Session",
      "value": "updateTypebotInSession",
      "action": "Update typebot in session",
      "description": "Update typebot configuration in an active session",
      "resource": "chat"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all typebots",
      "description": "List all typebots",
      "resource": "typebot"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a typebot",
      "description": "Get a typebot",
      "resource": "typebot"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a typebot",
      "description": "Create a typebot",
      "resource": "typebot"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a typebot",
      "description": "Update a typebot",
      "resource": "typebot"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a typebot",
      "description": "Delete a typebot",
      "resource": "typebot"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a typebot",
      "description": "Publish a typebot",
      "resource": "typebot"
    },
    {
      "name": "Unpublish",
      "value": "unpublish",
      "action": "Unpublish a typebot",
      "description": "Unpublish a typebot",
      "resource": "typebot"
    },
    {
      "name": "Get Published",
      "value": "getPublished",
      "action": "Get published typebot",
      "description": "Get published typebot",
      "resource": "typebot"
    },
    {
      "name": "Import",
      "value": "import",
      "action": "Import a typebot",
      "description": "Import a typebot from JSON",
      "resource": "typebot"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all results",
      "description": "List all results",
      "resource": "result"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a result",
      "description": "Get a result",
      "resource": "result"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete results",
      "description": "Delete results",
      "resource": "result"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get statistics",
      "description": "Get statistics",
      "resource": "result"
    },
    {
      "name": "List Logs",
      "value": "listLogs",
      "action": "List logs in result",
      "description": "List logs for a result",
      "resource": "result"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all workspaces",
      "description": "List all workspaces",
      "resource": "workspace"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a workspace",
      "description": "Get a workspace",
      "resource": "workspace"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a workspace",
      "description": "Create a workspace",
      "resource": "workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a workspace",
      "description": "Update a workspace",
      "resource": "workspace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a workspace",
      "description": "Delete a workspace",
      "resource": "workspace"
    },
    {
      "name": "List Members",
      "value": "listMembers",
      "action": "List workspace members",
      "description": "List workspace members",
      "resource": "workspace"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all folders",
      "description": "List all folders",
      "resource": "folder"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a folder",
      "description": "Create a folder",
      "resource": "folder"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a folder",
      "description": "Update a folder",
      "resource": "folder"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a folder",
      "description": "Delete a folder",
      "resource": "folder"
    }
  ]

npm_readme:
  # n8n-nodes-typebot

  This is an n8n community node that lets you use [Typebot](https://typebot.io/) in your n8n workflows.

  Typebot is a powerful open-source chatbot builder that allows you to create conversational apps and forms.

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

  ## Table of Contents

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

  ## Installation

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

  ### Community Node Installation

  1. Open your n8n instance
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install**
  4. Enter `n8n-nodes-typebot` in the npm Package Name field
  5. Click **Install**

  ### Manual Installation (for development)

  ```bash
  cd ~/.n8n/custom
  npm install n8n-nodes-typebot
  ```

  After installation, restart your n8n instance.

  ## Prerequisites

  You will need:

  1. A Typebot account (cloud or self-hosted)
  2. An API token from your Typebot account

  ### Getting Your API Token

  1. Log into your Typebot dashboard at https://app.typebot.io
  2. Navigate to **Settings & Members** → **My account**
  3. Scroll to the **API tokens** section
  4. Click **Create**
  5. Give your token a name and click **Create**
  6. Copy the generated token (you'll need it for n8n credentials)

  ## Operations

  This node supports all major Typebot API operations:

  ### Chat Operations
  - **Start Chat** - Start a new chat session with a published typebot
  - **Continue Chat** - Continue an existing chat session
  - **Start Preview Chat** - Start a preview chat session (for testing unpublished bots)

  ### Typebot Management
  - **List** - List all typebots in your workspace
  - **Get** - Get a specific typebot by ID
  - **Create** - Create a new typebot
  - **Update** - Update an existing typebot
  - **Delete** - Delete a typebot
  - **Publish** - Publish a typebot
  - **Unpublish** - Unpublish a typebot
  - **Get Published** - Get a published typebot by public ID

  ### Results
  - **List** - List all results for a typebot
  - **Get** - Get a specific result
  - **Delete** - Delete results
  - **Get Stats** - Get statistics for a typebot

  ### Workspaces
  - **List** - List all workspaces
  - **Get** - Get a specific workspace
  - **Create** - Create a new workspace
  - **Update** - Update a workspace
  - **Delete** - Delete a workspace
  - **List Members** - List workspace members

  ### Folders
  - **List** - List all folders in a workspace
  - **Create** - Create a new folder
  - **Update** - Update a folder
  - **Delete** - Delete a folder

  ## Credentials

  To use this node, you need to set up Typebot API credentials in n8n:

  1. In n8n, go to **Credentials** → **New**
  2. Search for "Typebot API"
  3. Enter your credentials:
     - **API Token**: Your Typebot API token
     - **Base URL**:
       - For cloud: `https://app.typebot.io/api`
       - For self-hosted: `https://your-domain.com/api`
  4. Click **Save**

  ## Compatibility

  - Tested with n8n version 1.0.0+
  - Tested with Typebot API v1

  ## Usage

  ### Example 1: Start a Chat Session

  This example shows how to start a chat with a published typebot:

  1. Add the **Typebot** node to your workflow
  2. Select **Chat** as the resource
  3. Select **Start Chat** as the operation
  4. Enter your typebot's **Public ID** (found in typebot settings)
  5. Optionally add a message or prefilled variables
  6. Execute the node

  The node will return:
  - `sessionId` - Use this to continue the conversation
  - `messages` - The bot's response messages
  - `input` - The next expected input from the user

  ### Example 2: Continue a Chat Conversation

  1. Add another **Typebot** node
  2. Select **Chat** → **Continue Chat**
  3. Enter the `sessionId` from the previous chat start
  4. Enter the user's message
  5. Execute the node

  ### Example 3: Create a New Typebot

  1. Add the **Typebot** node
  2. Select **Typebot** → **Create**
  3. Enter your **Workspace ID**
  4. Enter the typebot configuration as JSON:

  ```json
  {
    "name": "My New Bot",
    "groups": [],
    "events": [{
      "type": "start",
      "graphCoordinates": { "x": 0, "y": 0 }
    }]
  }
  ```

  ### Example 4: Get Chat Results

  1. Add the **Typebot** node
  2. Select **Result** → **List**
  3. Enter your **Typebot ID**
  4. Execute to get all conversation results

  ## Tips for Usage

  ### Working with JSON Fields

  Several operations require JSON input (like creating or updating typebots). You can:

  1. Use the **Code** node to prepare the JSON data
  2. Reference data from previous nodes using expressions: `{{ $json.fieldName }}`
  3. Use the **Set** node to construct complex objects

  ### Chat Flow Pattern

  A typical chat flow in n8n might look like:

  1. **Webhook** node - Receives user message
  2. **Typebot** (Start/Continue Chat) - Processes the message
  3. **IF** node - Check if conversation is complete
  4. **Typebot** (Get Result) - Retrieve final answers
  5. **HTTP Request** - Send response back to user

  ### Error Handling

  - Enable **Continue On Fail** in node settings to handle errors gracefully
  - The node will return error information in the output if the API request fails
  - Check Typebot API documentation for specific error codes

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Typebot documentation](https://docs.typebot.io/)
  - [Typebot API reference](https://docs.typebot.io/api-reference)
  - [GitHub repository](https://github.com/yourusername/n8n-nodes-typebot) (update with your repo URL)

  ## License

  [MIT](LICENSE.md)

  ## Support

  For issues or questions:
  - Open an issue on [GitHub](https://github.com/yourusername/n8n-nodes-typebot/issues)
  - Check the [n8n community forum](https://community.n8n.io/)
  - Refer to [Typebot documentation](https://docs.typebot.io/)

  ## Contributing

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

  ## Version History

  ### 1.0.0
  - Initial release
  - Support for all major Typebot API operations
  - Chat operations (start, continue, preview)
  - Typebot management (CRUD operations)
  - Results management
  - Workspace and folder management


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-04-16 09:43:36
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-04-16T09:43:36.186Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "attempts",
      "options": [
        {
          "name": "Attempts",
          "value": "attempts"
        },
        {
          "name": "Events",
          "value": "events"
        },
        {
          "name": "Issues",
          "value": "issues"
        },
        {
          "name": "Requests",
          "value": "requests"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an attempt",
          "routing": {
            "request": {
              "url": "={{\"/attempts/\" + $parameter.attemptId }}",
              "method": "GET"
            }
          },
          "description": "Get an attempt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attempts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId }}",
              "method": "GET"
            }
          },
          "description": "Get an event"
        },
        {
          "name": "Mute",
          "value": "mute",
          "action": "Mute an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/mute\" }}",
              "method": "PUT"
            }
          },
          "description": "Mute an event"
        },
        {
          "name": "Retry",
          "value": "retry",
          "action": "Retry an event",
          "routing": {
            "request": {
              "url": "={{\"/events/\" + $parameter.eventId + \"/retry\" }}",
              "method": "POST"
            }
          },
          "description": "Retry an event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "events"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Dismiss",
          "value": "dismiss",
          "action": "Dismiss an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "DELETE"
            }
          },
          "description": "Dismiss an issue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "GET"
            }
          },
          "description": "Get an issue"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an issue",
          "routing": {
            "request": {
              "url": "={{\"/issues/\" + $parameter.issueId }}",
              "method": "PUT"
            }
          },
          "description": "Update an issue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "issues"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a request",
          "routing": {
            "request": {
              "url": "={{\"/requests/\" + $parameter.requestId }}",
              "method": "GET"
            }
          },
          "description": "Get a request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "requests"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

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

npm_readme:
  # n8n-nodes-hookdeck

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

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

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

  ## Installation

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

  ## Operations

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

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

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


node_type: @musixmatch/n8n-nodes-musixmatch.musixmatch
package_name: @musixmatch/n8n-nodes-musixmatch
display_name: Musixmatch
description: Interact with Musixmatch API to access music metadata, lyrics, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: musixmatchdev
author_github_url: https://github.com/musixmatchdev/n8n-nodes-musixmatch.git
npm_package_name: @musixmatch/n8n-nodes-musixmatch
npm_version: 0.2.4
community_fetched_at: 2026-04-16T09:43:36.192Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "catalog",
      "options": [
        {
          "name": "Catalog",
          "value": "catalog"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Chart Tracks Get",
          "value": "chartTracksGet",
          "action": "Get chart tracks",
          "description": "Retrieve track charts"
        },
        {
          "name": "Track Get",
          "value": "trackGet",
          "action": "Get track information",
          "description": "Get track information"
        },
        {
          "name": "Track Lyrics Get",
          "value": "trackLyricsGet",
          "action": "Get track lyrics",
          "description": "Get track lyrics"
        },
        {
          "name": "Track Subtitle Get",
          "value": "trackSubtitleGet",
          "action": "Get track subtitles",
          "description": "Get track subtitles"
        },
        {
          "name": "Matcher Track Get",
          "value": "matcherTrackGet",
          "action": "Match track by metadata",
          "description": "Match track by metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "catalog"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Chart Tracks Get",
      "value": "chartTracksGet",
      "action": "Get chart tracks",
      "description": "Retrieve track charts",
      "resource": "catalog"
    },
    {
      "name": "Track Get",
      "value": "trackGet",
      "action": "Get track information",
      "description": "Get track information",
      "resource": "catalog"
    },
    {
      "name": "Track Lyrics Get",
      "value": "trackLyricsGet",
      "action": "Get track lyrics",
      "description": "Get track lyrics",
      "resource": "catalog"
    },
    {
      "name": "Track Subtitle Get",
      "value": "trackSubtitleGet",
      "action": "Get track subtitles",
      "description": "Get track subtitles",
      "resource": "catalog"
    },
    {
      "name": "Matcher Track Get",
      "value": "matcherTrackGet",
      "action": "Match track by metadata",
      "description": "Match track by metadata",
      "resource": "catalog"
    }
  ]

npm_readme:
  # n8n-nodes-musixmatch

  <picture>
    <source media="(prefers-color-scheme: dark)" srcset=".github/musixmatch-logo-dark.png">
    <source media="(prefers-color-scheme: light)" srcset=".github/musixmatch-logo.png">
    <img alt="Musixmatch Logo" src=".github/musixmatch-logo.png" width="300">
  </picture>

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

  This is an n8n community node that lets you use [Musixmatch](https://www.musixmatch.com/) in your n8n workflows.

  Musixmatch is the world's largest lyrics catalog, providing access to millions of songs' lyrics, translations, subtitles, and music metadata. This node enables you to integrate Musixmatch's powerful API into your automation workflows.

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

  ## Table of Contents

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

  ## Installation

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

  ### Community Node Installation

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

  After installing the node, you can use it like any other node in your workflows.

  ## Operations

  The Musixmatch node currently supports the following operations:

  ### Catalog Resource

  - **Chart Tracks Get**: Retrieve the top charting tracks from a specific country
  - **Track Get**: Get track information by Musixmatch Track ID
  - **Track Lyrics Get**: Retrieve lyrics for a specific track
  - **Track Lyrics Translation Get**: Get translated lyrics for a track in a specified language
  - **Track Subtitle Get**: Retrieve subtitles (time-synced lyrics) for a track
  - **Matcher Track Get**: Search and match a track by artist and track name

  ### Available Operations Details

  #### Chart Tracks Get

  Retrieve trending and top charting tracks from Musixmatch charts. You can filter by country and chart type (e.g., top, hot, mxmweekly).

  #### Track Get

  Fetch detailed information about a specific track using its Musixmatch Track ID, including metadata like artist name, album, release date, and more.

  #### Track Lyrics Get

  Access the lyrics of any track in the Musixmatch catalog by providing the Track ID.

  #### Track Lyrics Translation Get

  Get translated versions of lyrics in multiple languages. Perfect for multilingual applications and global audiences.

  #### Track Subtitle Get

  Retrieve time-synced subtitles (lyrics with timestamps) for karaoke applications, music players, or synchronized displays.

  #### Matcher Track Get

  Search for a track by providing the artist name and track title. This operation returns the best matching track from the Musixmatch database.

  ## Credentials

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

  ### Getting Your API Key

  1. Visit [Musixmatch API Pricing](https://www.musixmatch.com/pro/api/pricing?utm_source=github_n8n_node&utm_medium=web&utm_content=pricing_page_link) to view available plans
  2. Subscribe to a plan that fits your needs
  3. Once subscribed, you'll receive your API key
  4. Copy your API key to use with this n8n node

  ### Setting Up Credentials in n8n

  1. In your n8n workflow, add the Musixmatch node
  2. Click on **Credential for Musixmatch API**
  3. Select **Create New Credential**
  4. Enter your **API Key**
  5. Click **Save**

  The node will automatically authenticate all API requests using your credentials.

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with n8n versions**: 1.119.2 and above

  This node is built using the latest n8n community node standards and should be compatible with all recent versions of n8n.

  ## Usage

  ### Example Workflow: Get Trending Tracks with Lyrics

  Here's a simple example that retrieves the top 10 trending tracks from the US charts and fetches their lyrics:

  1. **Add Musixmatch node** configured to use **Chart Tracks Get** operation
     - Set **Country** to `US`
     - Set **Chart Name** to `top`
     - Set **Page Size** to `10`

  2. **Add a second Musixmatch node** configured to use **Track Lyrics Get** operation
     - Use `{{ $json.track_id }}` from the previous node to fetch lyrics for each track

  3. **Process the results** with other n8n nodes as needed (e.g., save to database, send to webhook, etc.)

  ### Example Workflow: Search and Translate Lyrics

  1. **Add Musixmatch node** configured to use **Matcher Track Get** operation
     - Set **Artist Name** to the artist you want to search
     - Set **Track Name** to the song title

  2. **Add a second Musixmatch node** configured to use **Track Lyrics Translation Get** operation
     - Use `{{ $json.track_id }}` from the previous node
     - Set **Language** to your desired language code (e.g., `es` for Spanish, `fr` for French)

  ### Tips

  - The node is compatible with AI Agent workflows (marked as `usableAsTool`)
  - All operations respect n8n's **Continue On Fail** setting for robust error handling
  - Use the **Matcher Track Get** operation when you don't have a Track ID but know the artist and song name
  - Rate limits depend on your Musixmatch API plan - consider implementing appropriate delays for large batch operations

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Musixmatch API Documentation](https://docs.musixmatch.com/lyrics-api/introduction?utm_source=github_n8n_node&utm_medium=web&utm_content=docs_link)
  - [n8n Documentation](https://docs.n8n.io/)

  ## Support

  For issues, questions, or contributions, please visit the [GitHub repository](https://github.com/musixmatchdev/n8n-nodes-musixmatch/issues).

  ---

  _This is a community node and is not officially maintained by n8n. For official support, please contact Musixmatch directly._

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Musixmatch API to retrieve music metadata, lyrics, translations, and subtitles.","capabilities":["Retrieve top charting tracks by country","Get detailed track information by Track ID","Fetch lyrics for specific tracks","Get translated lyrics in multiple languages","Retrieve time-synced subtitles","Search and match tracks by artist and name"],"authentication":"API Key required","commonUseCases":["Automating music metadata collection for databases","Integrating lyrics into content creation workflows","Building multilingual lyric translation tools","Creating karaoke or synchronized display applications"],"limitations":["Rate limits depend on the Musixmatch API plan","Requires a paid Musixmatch subscription to obtain an API key","Minimum n8n version required is 1.0.0"],"relatedNodes":["n8n HTTP Request node","n8n Set node","n8n Webhook node"]}


node_type: n8n-nodes-bookstack.bookstack
package_name: n8n-nodes-bookstack
display_name: BookStack
description: Manage BookStack resources
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:36
author_name: lucaguindani
author_github_url: https://github.com/lucaguindani/
npm_package_name: n8n-nodes-bookstack
npm_version: 1.3.0
community_fetched_at: 2026-04-16T09:43:36.193Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "global",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Book",
          "value": "book"
        },
        {
          "name": "Chapter",
          "value": "chapter"
        },
        {
          "name": "Global",
          "value": "global"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "Page",
          "value": "page"
        },
        {
          "name": "Shelf",
          "value": "shelf"
        }
      ],
      "description": "The BookStack resource to work with",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "book"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "shelf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chapter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Global search"
        },
        {
          "name": "Audit Log",
          "value": "auditLogList",
          "action": "Audit log"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "global"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "attachment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "attachment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "attachment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "attachment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "attachment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "book"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "book"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "book"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "book"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "book"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "page"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "page"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "page"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "page"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "page"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "shelf"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "shelf"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "shelf"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "shelf"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "shelf"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "chapter"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "chapter"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "chapter"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "chapter"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "chapter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Global search",
      "resource": "global"
    },
    {
      "name": "Audit Log",
      "value": "auditLogList",
      "action": "Audit log",
      "resource": "global"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "resource": "image"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete",
      "resource": "image"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get",
      "resource": "image"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many",
      "resource": "image"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update",
      "resource": "image"
    }
  ]

npm_readme:
  # n8n-nodes-bookstack

  [![CI](https://github.com/lucaguindani/n8n-nodes-bookstack/actions/workflows/ci.yml/badge.svg)](https://github.com/lucaguindani/n8n-nodes-bookstack/actions/workflows/ci.yml)

  This is a n8n community node that lets you use BookStack in your n8n workflows. The [n8n](https://n8n.io/) project is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  BookStack is an open source, self‑hosted documentation / knowledge base platform for organizing and sharing content via books, chapters, pages, and shelves.

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [License](#license)
  - [Contributing](#contributing)
  - [Disclaimer](#disclaimer)

  ---
  ## Installation

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

  ### Manual (custom code folder)
  If you are running a self‑hosted n8n and want to build from source:
  ```bash
  # Go to your n8n custom folder
  mkdir -p ~/.n8n/custom && cd ~/.n8n/custom

  # Clone the repository
  git clone https://github.com/lucaguindani/n8n-nodes-bookstack.git
  cd n8n-nodes-bookstack

  # Install dependencies & build
  pnpm install
  pnpm run build

  # Restart n8n so the node is loaded
  ```
  After restart, search for "BookStack" in the node picker.

  ---
  ## Operations
  The node exposes CRUD + search and audit capabilities for core BookStack entities.

  Resource: Book
  - Get Many / Get / Create / Update / Delete

  Resource: Page
  - Get Many / Get / Create / Update / Delete

  Resource: Chapter
  - Get Many / Get / Create / Update / Delete

  Resource: Shelf
  - Get Many / Get / Create / Update / Delete

  Resource: Image
  - Get Many / Get / Create / Update / Delete

  Resource: Attachment
  - Get Many / Get / Create / Update / Delete

  Resource: Global
  - Search / Audit Log

  ---
  ## Credentials
  You need a BookStack API Token.
  1. In BookStack, open: My Account → Access & Security (`/my-account/auth`)
  2. Create a token; copy Token ID and Token Secret
  3. In n8n, create new credentials of type "Bookstack API":
     - Base URL: e.g. `https://your-bookstack.example.com/api`
     - Token ID
     - Token Secret
  4. Save and use in the node

  Required permission: The token inherits the permissions of the user who created it. Ensure that user can read/create/update intended entities. Audit Log requires permission to manage both users and system settings.

  ---
  ## Compatibility
  Tested with:
  - n8n 1.109+
  - Bookstack 24.5+
  - Node 20+

  ---
  ## Usage
  ### Listing (Get Many)
  - Return All: When enabled, the node will automatically paginate through all results.
  - Limit: When "Return All" is disabled, sets the maximum number of items to return.
  - Sort By / Sort Direction
  - Filters (field, operation, value)

  Internally, the node handles pagination (count/offset) for you when needed.

  ### Global Search
  - Provide a search query and optionally pick a content type (book, page, chapter, shelf)
  - "Return All" / "Limit" to control the amount of results
  - "Deep Dive" to automatically fetch full content for all search results. This provides complete context but increases execution time and API calls.

  ### Image & Attachment
  - "Binary Property" to tell the node which binary key on the current item holds the file. For example, if a previous node (HTTP Request, Read Binary File, etc.) stored the file under the key `data`, enter `data` here. The node will read that binary entry and attach it as the file in the request.

  ### Tags
  When creating/updating entities, `tags` can be provided as a comma‑separated list: `tagA, tagB`.

  ---
  ## Resources
  * n8n Community Nodes Docs: https://docs.n8n.io/integrations/#community-nodes
  * BookStack Documentation: https://www.bookstackapp.com/docs/
  * BookStack API Reference: https://demo.bookstackapp.com/api/docs
  * BookStack GitHub: https://github.com/BookStackApp/BookStack

  ---
  ## License
  This project is licensed under the MIT License – see [LICENSE.md](./LICENSE.md).

  ---
  ## Contributing
  To lunch a local instance, make sure Node 20+ and pnpm 10+ are installed, then run the following from the root directory of the project.

  ```bash
  pnpm install
  pnpm run dev
  ```

  You should be able to connect to `http://localhost:5678`.

  Pull requests are welcome. For significant changes, open an issue first to discuss scope.

  Before committing, ensure build passes and no lint or formatting errors are found.

  ```bash
  pnpm run lint
  pnpm run format
  pnpm run build
  ```

  Please provide a clear PR description.

  ---
  ## Disclaimer
  This community node is not an official BookStack product. Use at your own risk; validate results in critical workflows.

ai_documentation_summary:
  {"purpose":"This n8n community node enables full CRUD operations, search, and audit logging for BookStack resources including books, pages, chapters, shelves, images, and attachments.","capabilities":["Create, Read, Update, Delete (CRUD) for Books, Pages, Chapters, Shelves, Images, and Attachments","Global Search with content type filtering and 'Deep Dive' for full content retrieval","Audit Log access for user and system settings","Built-in pagination handling with 'Return All' and limit controls","Sorting by field and direction","Filtering by field, operation, and value","Binary file attachment support via custom binary keys","Tag management (comma-separated list) for entity creation and updates"],"authentication":"BookStack API Token (Token ID and Token Secret required)","commonUseCases":["Automated documentation management and content synchronization","Knowledge base search and content retrieval workflows","Audit trail generation for user and system changes","Bulk import or export of BookStack content"],"limitations":["Audit Log requires specific permissions to manage both users and system settings","Deep Dive feature increases execution time and API calls significantly","Not an official BookStack product; use at own risk"],"relatedNodes":["HTTP Request","Read Binary File","Write Binary File","Split In Batches"]}


