# nodes

node_type: n8n-nodes-ragmetrics.ragmetrics
package_name: n8n-nodes-ragmetrics
display_name: RagMetrics
description: RagMetrics: Evaluate AI agents and outputs
category: Community
development_style: declarative
version: 1
operations:
  [
  {
  "name": "Evaluate",
  "value": "evaluate"
  }
  ]

credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: hernan_ragmetrics
author_github_url: https://github.com/RagMetrics-ai/
npm_package_name: n8n-nodes-ragmetrics
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:33.730Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "evaluation",
      "options": [
        {
          "name": "Evaluation",
          "value": "evaluation"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "evaluate",
      "options": [
        {
          "name": "Evaluate",
          "value": "evaluate"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

npm_readme:
  ## RAGMETRICS 

  ### *The AI Trust Layer*

  Real-time monitoring and scoring mechanism integrated directly into your LLM pipeline. Monitor, measure, and improve your generative AI outputs with confidence as they happen in production.

  RagMetrics is a turnkey evaluationAI service that scores, analyzes, validates and monitors any AI-generated text in seconds. Plug RagMetrics into your workflow to ensure accuracy, consistency, and quality—without needing extra reviewers. The system evaluates responses based on customizable criteria and provides detailed scoring and reasoning.

  RagMetrics has been proven to detect Hallucination in AI Agents and chat bots.

  Visit: https://ragmetrics.ai/live-ai-evaluation

  *Put your workflows and chat bots under the microscope and understand when they start to derail, hallucinate or degrade their accuracy.*

  ### Requirements

  To configure you n8n node, you need a RagMetrics API key. For that you have to register for the service at ragmetrics.ai. You will also need a LLM Provider API key.

  You can configure your account and get your RagMetrics API Key at: app.ragmetrics.ai

  ### Understanding the evaluation process

  The evaluation process is very simple. It compares an *answer* to a specific *question* to a *ground truth answer* in a *context* given. A *score* and *reasoning* is provided based on a *criteria* or criterion given to evaluate.

  #### Inputs to the evaluation
  - . **question:** The question that you want to evaluate. Example: *Which is capital of France?*

  - . **answer:** This is the answer that is going to be evaluated. Example: *Paris*.

  - . **ground_truth_answer**: This is the source of truth. It is used as rubric to for the evaluation process to score the criterion. Example: *The capital of France is Paris.*

  - . **context:** Additional information that is used to evaluate. The context becomes more relevant in non-direct comparison criterion. As an example in cases of **hallucination:** The context is key to understand if the evaluated answer related to the conversation that has been happening. Example: *Paris is the capital and largest city of France, with an estimated population of 2,048,472 in January 2025 in an area of more than 105 km2 (41 sq mi).*

  - . **Conversation ID:** The conversation is use to track the monitoring of different bots

  - . **type:** This is the type of evaluation. 

  - . **Conversation ID:** The conversation is use to track the monitoring of different bots

  - . **Evaluation Group ID:** The evaluation group id can be obtained in the application @ ragmetrics.ai. It has to be preconfigured in the platform with the criteria needed to run the evaluations properly.

  #### Example of a Information for an evaluation
  ```json

  From Input to the Node:	
    "question": "What is the capital of France?",
    "answer": "Paris.",
    "ground_truth_answer": "Paris is the capital of France.",
    "context": "",

  From Configuration:
  	
    "type": "S",
    "conversation_id":"ChatBot1"

  ```
  After the evaluation is completed almost in real time, the system returns the score for each of the metrics and the reasoning behind.


  ### Using the n8n RagMetrics Module

  ***Configuration:*** The module requires the corresponding configuration:
  	- RagMetrics API Key: linked to your account in ragmetrics.ai
  	- Type of Evaluation: S - Simple, or C- Conversational
  	- Conversation ID: user created indicator to monitor different conversations
  	- Evaluation Group ID: obtained from the ragmetrics.ai application, used to monitor different groups of AI agents

  ***Input:*** You should provide the no de the fields needed for the evaluation:
  	- question: question to answer
  	- answer: answer that has to be evaluated
  	- ground_truth_answer: source of truth for the answer to be evaluated
  	- context: additional information to help the evaluation process

  The inputs should be in Json Format.

  Obtain the results and monitor what is going on with your tools!

  Look for more information and examples in our website!!

  support: support@ragmetrics.ai
  website: ragmetrics.ai 

ai_documentation_summary:
  {"purpose":"Evaluates AI-generated text in real-time by comparing answers to ground truth and context, providing scores and reasoning to detect hallucinations and ensure quality.","capabilities":["Real-time scoring of AI responses","Hallucination detection","Customizable evaluation criteria","Detailed reasoning generation","Conversation tracking via Conversation ID","Evaluation grouping for multiple agents"],"authentication":"API key required","commonUseCases":["Monitoring LLM pipeline outputs in production","Validating chatbot responses against ground truth","Detecting accuracy degradation in AI agents","Ensuring consistency in generative AI outputs"],"limitations":["Requires preconfigured Evaluation Group ID with specific criteria","Requires a separate LLM Provider API key for the evaluation process","Requires manual registration and account setup at ragmetrics.ai"],"relatedNodes":[]}


node_type: n8n-nodes-merge.mergeAgentHandlerTools
package_name: n8n-nodes-merge
display_name: Merge Agent Handler MCP
description: Connect to a Merge Agent Handler Tool Pack and call MCP tools
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: experience-team
author_github_url: https://github.com/merge-api/
npm_package_name: n8n-nodes-merge
npm_version: 0.2.9
community_fetched_at: 2026-07-14T14:40:33.732Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-merge

  Community nodes for [n8n](https://n8n.io/) that integrate with [Merge Agent Handler](https://merge.dev/agent-handler) and [Merge Gateway](https://www.merge.dev/gateway).

  This package provides three nodes:

  - **Merge Agent Handler** — Manage Merge resources (registered users, tool packs, connectors, and more) directly from n8n workflows
  - **Merge Agent Handler MCP** — Connect to Merge Tool Packs via MCP to call integration tools, either standalone or as an AI agent tool
  - **Merge Gateway Chat Model** — Use chat models from any provider (OpenAI, Anthropic, Google, and more) in AI Agents and chains via Merge Gateway

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

  [Installation](#installation) |
  [Nodes](#nodes) |
  [Key Concepts](#key-concepts) |
  [Credentials](#credentials) |
  [Compatibility](#compatibility) |
  [Resources](#resources)

  ## Installation

  ### Self-hosted n8n

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

  ```
  n8n-nodes-merge
  ```

  ### n8n Cloud

  1. Go to **Settings > Community Nodes**
  2. Select **Install a community node**
  3. Enter `n8n-nodes-merge`
  4. Agree to the risks and click **Install**

  ## Nodes

  ### Merge Agent Handler

  A standard n8n node for managing Merge Agent Handler resources through the REST API. Use this node to set up and configure your Merge environment directly from n8n workflows — create registered users, manage tool packs, generate link tokens, and more.

  #### Resources & Operations

  | Resource | Operations |
  |----------|-----------|
  | Registered User | Create, Get, List, Update, Delete |
  | Tool Pack | Create, Get, List, Update, Delete |
  | Connector | List, Get |
  | Link Token | Create |
  | Credential | Delete |
  | Audit Log | List |
  | Tool Search | Search |

  #### Setup

  1. Add the **Merge Agent Handler** node to your workflow
  2. Create or select your **Merge Agent Handler API** credential (see [Credentials](#credentials))
  3. Select a **Resource** (e.g., Registered User, Tool Pack)
  4. Select an **Operation** (e.g., Create, List, Get)
  5. Fill in the required fields for that operation

  #### Example: Create a Registered User

  1. Set **Resource** to `Registered User`
  2. Set **Operation** to `Create`
  3. Enter an **Origin User ID** (your system's user identifier)
  4. Enter an **Origin User Name** (display name)
  5. Select a **User Type** (Human or System)
  6. Execute the node — the output contains the created user's ID and details

  ![Create Registered User configuration](docs/images/create_registered_user.png)

  You can wire this node's output into subsequent nodes. For example, pipe the registered user ID into a Merge Agent Handler MCP node using an expression like `{{ $json.id }}`.

  ---

  ### Merge Agent Handler MCP

  Connects to a Merge Agent Handler Tool Pack via [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) and calls integration tools. This node supports two usage modes: **with an AI agent** and **standalone**.

  #### Mode 1: With an AI Agent

  Connect the MCP node to an AI Agent node's **Tool** input. The agent automatically discovers all available tools in the Tool Pack and calls them as needed during a conversation.

  1. Add an **AI Agent** node to your workflow
  2. Click **Add Tool** on the agent and select **Merge Agent Handler MCP**
  3. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  4. The agent now has access to all tools in the selected Tool Pack

  ![Merge Agent Handler MCP connected to an AI Agent](docs/images/connect-node.png)

  The agent uses the Merge Search Tools API to discover relevant tools based on natural-language intent. On the first call, it receives a list of up to 20 matching tools and selects the best one. On the second call, it executes the selected tool directly.

  When a connector requires authentication, the `authenticate_*` tools appear in the search results. The agent calls the authenticate tool and returns a magic link URL. The user clicks the link to complete OAuth, and subsequent tool calls work with the authenticated connection.

  #### Mode 2: Standalone

  Use the MCP node directly in a workflow to call a specific tool without an AI agent.

  1. Add the **Merge Agent Handler MCP** node to your workflow
  2. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  3. Select a **Tool Name** from the dropdown (tools are loaded from the Tool Pack)
  4. Enter **Arguments (JSON)** if the tool requires input parameters
  5. Execute the node — the output contains the tool's response

  ![Merge Agent Handler MCP in standalone mode](docs/images/standalone.png)

  ##### Authenticating connectors in standalone mode

  If a connector hasn't been authenticated yet for the selected registered user:

  1. Select the `authenticate_*` tool for that connector (e.g., `authenticate_linear`)
  2. Execute the node
  3. Copy the **magic link URL** from the output and open it in a browser
  4. Complete the OAuth flow
  5. Refresh the **Tool Name** dropdown to see the full list of available tools

  ![Authenticate connector output with magic link](docs/images/authenticate_connector.png)

  ### Merge Gateway Chat Model

  A chat model sub-node that connects AI Agent, chain, and other LangChain root nodes to [Merge Gateway](https://www.merge.dev/gateway) — Merge's multi-provider LLM gateway. One credential gives you access to models from OpenAI, Anthropic, Google, and more, with centralized usage tracking, routing, and spend controls.

  #### Setup

  1. Add an **AI Agent** (or another AI chain node) to your workflow
  2. For the agent's **Chat Model**, select **Merge Gateway Chat Model**
  3. Create or select your **Merge Gateway API** credential (see [Credentials](#credentials))
  4. Pick a **Model** from the dropdown (the list is loaded live from the gateway, e.g. `openai/gpt-4o` or `anthropic/claude-opus-4.6`)
  5. Optionally tune **Options** (temperature, max tokens, response format, retries, and more)

  > **Note:** The Merge Gateway Chat Model node is built on n8n's official AI node SDK and requires n8n 2.16.0 or later.

  ## Key Concepts

  **Tool Packs** are bundles of connectors that define which third-party integrations your AI agent can access. Each Tool Pack contains one or more connectors (e.g., Greenhouse, Salesforce, Jira) and exposes their capabilities as tools that can be called. You can create and manage Tool Packs using the **Merge Agent Handler** node in n8n or in the [Merge Agent Handler dashboard](https://ah.merge.dev/tool-packs).

  ![Creating a Tool Pack in the Merge dashboard](docs/images/create-tool-pack.png)

  **Registered Users** represent the identities whose third-party accounts have been authenticated with Merge. A Registered User can be an end user in your system or a system-level service account. When a tool is called, it acts on behalf of a specific Registered User — using their authenticated connections to read or write data in the connected services. You manage Registered Users in the [Merge Agent Handler dashboard](https://ah.merge.dev/registered-users).

  ![Adding a Registered User in the Merge dashboard](docs/images/add-registered-user.png)

  ## Prerequisites

  1. A [Merge Agent Handler](https://ah.merge.dev/) account
  2. An API key (Production or Test Access Key) from the Merge Agent Handler dashboard
  3. At least one [Tool Pack](https://ah.merge.dev/tool-packs) created with connectors configured (can be created via the Merge Agent Handler node or the dashboard)
  4. At least one [Registered User](https://ah.merge.dev/registered-users) (can be created via the Merge Agent Handler node or the dashboard)

  ## Credentials

  ### Merge Agent Handler API

  To authenticate with Merge Agent Handler:

  1. Log in to the [Merge Agent Handler dashboard](https://ah.merge.dev/)
  2. Navigate to **Settings > API Keys**
  3. Copy your **Production** or **Test Access Key**
  4. In n8n, create a new **Merge Agent Handler API** credential and paste the key

  The Merge Agent Handler and Merge Agent Handler MCP nodes share this credential.

  ### Merge Gateway API

  To authenticate with Merge Gateway:

  1. Log in to the [Merge Gateway dashboard](https://gateway.merge.dev/)
  2. Navigate to **Settings > API Keys** and create an API key
  3. In n8n, create a new **Merge Gateway API** credential and paste the key

  ## Compatibility

  - Requires n8n version 1.50.0 or later
  - The Merge Gateway Chat Model node requires n8n 2.16.0 or later (built on n8n's official AI node SDK)
  - Tested with n8n v2.9.4 (Agent Handler nodes) and v2.25.7 (Merge Gateway Chat Model)

  ## Resources

  - [Merge](https://merge.dev/)
  - [Merge Agent Handler Documentation](https://docs.ah.merge.dev/Overview/Agent-Handler-intro)
  - [Merge Agent Handler API Reference](https://docs.ah.merge.dev/api-reference/overview)
  - [Merge Agent Handler Dashboard](https://ah.merge.dev/)
  - [Merge Gateway Documentation](https://docs.merge.dev/merge-gateway/get-started)
  - [Merge Gateway Dashboard](https://gateway.merge.dev/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Connects to Merge Agent Handler Tool Packs via the Model Context Protocol (MCP) to call integration tools, either as a standalone node or as a tool for an AI agent.","capabilities":["Call integration tools from Tool Packs","Discover tools via MCP Search Tools API","Authenticate connectors using magic link OAuth flow","Execute tools in standalone mode with custom arguments","Provide tools to AI agents for natural language interaction"],"authentication":"API key required (via Merge Agent Handler credential)","commonUseCases":["Enable AI agents to interact with third-party services like Salesforce or Jira","Execute specific integration tools directly within n8n workflows","Automate onboarding by authenticating connectors via magic links"],"limitations":["Requires a pre-configured Merge Agent Handler Tool Pack","Authentication for connectors requires manual user interaction via magic link URL","Tool discovery is limited to tools within the selected Tool Pack"],"relatedNodes":["Merge Agent Handler","AI Agent"]}


node_type: n8n-nodes-merge.mergeAgentHandler
package_name: n8n-nodes-merge
display_name: Merge Agent Handler
description: Manage Merge Agent Handler resources — registered users, tool packs, connectors, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: experience-team
author_github_url: https://github.com/merge-api/
npm_package_name: n8n-nodes-merge
npm_version: 0.2.9
community_fetched_at: 2026-07-14T14:40:33.733Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "registeredUser",
      "options": [
        {
          "name": "Audit Log",
          "value": "auditLog"
        },
        {
          "name": "Connector",
          "value": "connector"
        },
        {
          "name": "Credential",
          "value": "credential"
        },
        {
          "name": "Link Token",
          "value": "linkToken"
        },
        {
          "name": "Registered User",
          "value": "registeredUser"
        },
        {
          "name": "Tool Pack",
          "value": "toolPack"
        },
        {
          "name": "Tool Search",
          "value": "toolSearch"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create registered user",
          "description": "Create a new registered user"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete registered user",
          "description": "Delete a registered user permanently"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get registered user",
          "description": "Retrieve a registered user"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many registered users",
          "description": "Retrieve a list of registered users"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update registered user",
          "description": "Update a registered user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "registeredUser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create tool pack",
          "description": "Create a new tool pack"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete tool pack",
          "description": "Delete a tool pack permanently"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get tool pack",
          "description": "Retrieve a tool pack"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tool packs",
          "description": "Retrieve a list of tool packs"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update tool pack",
          "description": "Update a tool pack"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "toolPack"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get connector",
          "description": "Retrieve a connector"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many connectors",
          "description": "Retrieve a list of connectors"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connector"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Generate link token",
          "description": "Generate a link token for connector authentication"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkToken"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "delete",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete credential",
          "description": "Delete a credential permanently"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credential"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many audit log events",
          "description": "Retrieve a list of audit log events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auditLog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for tools",
          "description": "Search for tools by intent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "toolSearch"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create registered user",
      "description": "Create a new registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete registered user",
      "description": "Delete a registered user permanently",
      "resource": "registeredUser"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get registered user",
      "description": "Retrieve a registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many registered users",
      "description": "Retrieve a list of registered users",
      "resource": "registeredUser"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update registered user",
      "description": "Update a registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create tool pack",
      "description": "Create a new tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete tool pack",
      "description": "Delete a tool pack permanently",
      "resource": "toolPack"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get tool pack",
      "description": "Retrieve a tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tool packs",
      "description": "Retrieve a list of tool packs",
      "resource": "toolPack"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update tool pack",
      "description": "Update a tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get connector",
      "description": "Retrieve a connector",
      "resource": "connector"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many connectors",
      "description": "Retrieve a list of connectors",
      "resource": "connector"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Generate link token",
      "description": "Generate a link token for connector authentication",
      "resource": "linkToken"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete credential",
      "description": "Delete a credential permanently",
      "resource": "credential"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many audit log events",
      "description": "Retrieve a list of audit log events",
      "resource": "auditLog"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search for tools",
      "description": "Search for tools by intent",
      "resource": "toolSearch"
    }
  ]

npm_readme:
  # n8n-nodes-merge

  Community nodes for [n8n](https://n8n.io/) that integrate with [Merge Agent Handler](https://merge.dev/agent-handler) and [Merge Gateway](https://www.merge.dev/gateway).

  This package provides three nodes:

  - **Merge Agent Handler** — Manage Merge resources (registered users, tool packs, connectors, and more) directly from n8n workflows
  - **Merge Agent Handler MCP** — Connect to Merge Tool Packs via MCP to call integration tools, either standalone or as an AI agent tool
  - **Merge Gateway Chat Model** — Use chat models from any provider (OpenAI, Anthropic, Google, and more) in AI Agents and chains via Merge Gateway

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

  [Installation](#installation) |
  [Nodes](#nodes) |
  [Key Concepts](#key-concepts) |
  [Credentials](#credentials) |
  [Compatibility](#compatibility) |
  [Resources](#resources)

  ## Installation

  ### Self-hosted n8n

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

  ```
  n8n-nodes-merge
  ```

  ### n8n Cloud

  1. Go to **Settings > Community Nodes**
  2. Select **Install a community node**
  3. Enter `n8n-nodes-merge`
  4. Agree to the risks and click **Install**

  ## Nodes

  ### Merge Agent Handler

  A standard n8n node for managing Merge Agent Handler resources through the REST API. Use this node to set up and configure your Merge environment directly from n8n workflows — create registered users, manage tool packs, generate link tokens, and more.

  #### Resources & Operations

  | Resource | Operations |
  |----------|-----------|
  | Registered User | Create, Get, List, Update, Delete |
  | Tool Pack | Create, Get, List, Update, Delete |
  | Connector | List, Get |
  | Link Token | Create |
  | Credential | Delete |
  | Audit Log | List |
  | Tool Search | Search |

  #### Setup

  1. Add the **Merge Agent Handler** node to your workflow
  2. Create or select your **Merge Agent Handler API** credential (see [Credentials](#credentials))
  3. Select a **Resource** (e.g., Registered User, Tool Pack)
  4. Select an **Operation** (e.g., Create, List, Get)
  5. Fill in the required fields for that operation

  #### Example: Create a Registered User

  1. Set **Resource** to `Registered User`
  2. Set **Operation** to `Create`
  3. Enter an **Origin User ID** (your system's user identifier)
  4. Enter an **Origin User Name** (display name)
  5. Select a **User Type** (Human or System)
  6. Execute the node — the output contains the created user's ID and details

  ![Create Registered User configuration](docs/images/create_registered_user.png)

  You can wire this node's output into subsequent nodes. For example, pipe the registered user ID into a Merge Agent Handler MCP node using an expression like `{{ $json.id }}`.

  ---

  ### Merge Agent Handler MCP

  Connects to a Merge Agent Handler Tool Pack via [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) and calls integration tools. This node supports two usage modes: **with an AI agent** and **standalone**.

  #### Mode 1: With an AI Agent

  Connect the MCP node to an AI Agent node's **Tool** input. The agent automatically discovers all available tools in the Tool Pack and calls them as needed during a conversation.

  1. Add an **AI Agent** node to your workflow
  2. Click **Add Tool** on the agent and select **Merge Agent Handler MCP**
  3. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  4. The agent now has access to all tools in the selected Tool Pack

  ![Merge Agent Handler MCP connected to an AI Agent](docs/images/connect-node.png)

  The agent uses the Merge Search Tools API to discover relevant tools based on natural-language intent. On the first call, it receives a list of up to 20 matching tools and selects the best one. On the second call, it executes the selected tool directly.

  When a connector requires authentication, the `authenticate_*` tools appear in the search results. The agent calls the authenticate tool and returns a magic link URL. The user clicks the link to complete OAuth, and subsequent tool calls work with the authenticated connection.

  #### Mode 2: Standalone

  Use the MCP node directly in a workflow to call a specific tool without an AI agent.

  1. Add the **Merge Agent Handler MCP** node to your workflow
  2. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  3. Select a **Tool Name** from the dropdown (tools are loaded from the Tool Pack)
  4. Enter **Arguments (JSON)** if the tool requires input parameters
  5. Execute the node — the output contains the tool's response

  ![Merge Agent Handler MCP in standalone mode](docs/images/standalone.png)

  ##### Authenticating connectors in standalone mode

  If a connector hasn't been authenticated yet for the selected registered user:

  1. Select the `authenticate_*` tool for that connector (e.g., `authenticate_linear`)
  2. Execute the node
  3. Copy the **magic link URL** from the output and open it in a browser
  4. Complete the OAuth flow
  5. Refresh the **Tool Name** dropdown to see the full list of available tools

  ![Authenticate connector output with magic link](docs/images/authenticate_connector.png)

  ### Merge Gateway Chat Model

  A chat model sub-node that connects AI Agent, chain, and other LangChain root nodes to [Merge Gateway](https://www.merge.dev/gateway) — Merge's multi-provider LLM gateway. One credential gives you access to models from OpenAI, Anthropic, Google, and more, with centralized usage tracking, routing, and spend controls.

  #### Setup

  1. Add an **AI Agent** (or another AI chain node) to your workflow
  2. For the agent's **Chat Model**, select **Merge Gateway Chat Model**
  3. Create or select your **Merge Gateway API** credential (see [Credentials](#credentials))
  4. Pick a **Model** from the dropdown (the list is loaded live from the gateway, e.g. `openai/gpt-4o` or `anthropic/claude-opus-4.6`)
  5. Optionally tune **Options** (temperature, max tokens, response format, retries, and more)

  > **Note:** The Merge Gateway Chat Model node is built on n8n's official AI node SDK and requires n8n 2.16.0 or later.

  ## Key Concepts

  **Tool Packs** are bundles of connectors that define which third-party integrations your AI agent can access. Each Tool Pack contains one or more connectors (e.g., Greenhouse, Salesforce, Jira) and exposes their capabilities as tools that can be called. You can create and manage Tool Packs using the **Merge Agent Handler** node in n8n or in the [Merge Agent Handler dashboard](https://ah.merge.dev/tool-packs).

  ![Creating a Tool Pack in the Merge dashboard](docs/images/create-tool-pack.png)

  **Registered Users** represent the identities whose third-party accounts have been authenticated with Merge. A Registered User can be an end user in your system or a system-level service account. When a tool is called, it acts on behalf of a specific Registered User — using their authenticated connections to read or write data in the connected services. You manage Registered Users in the [Merge Agent Handler dashboard](https://ah.merge.dev/registered-users).

  ![Adding a Registered User in the Merge dashboard](docs/images/add-registered-user.png)

  ## Prerequisites

  1. A [Merge Agent Handler](https://ah.merge.dev/) account
  2. An API key (Production or Test Access Key) from the Merge Agent Handler dashboard
  3. At least one [Tool Pack](https://ah.merge.dev/tool-packs) created with connectors configured (can be created via the Merge Agent Handler node or the dashboard)
  4. At least one [Registered User](https://ah.merge.dev/registered-users) (can be created via the Merge Agent Handler node or the dashboard)

  ## Credentials

  ### Merge Agent Handler API

  To authenticate with Merge Agent Handler:

  1. Log in to the [Merge Agent Handler dashboard](https://ah.merge.dev/)
  2. Navigate to **Settings > API Keys**
  3. Copy your **Production** or **Test Access Key**
  4. In n8n, create a new **Merge Agent Handler API** credential and paste the key

  The Merge Agent Handler and Merge Agent Handler MCP nodes share this credential.

  ### Merge Gateway API

  To authenticate with Merge Gateway:

  1. Log in to the [Merge Gateway dashboard](https://gateway.merge.dev/)
  2. Navigate to **Settings > API Keys** and create an API key
  3. In n8n, create a new **Merge Gateway API** credential and paste the key

  ## Compatibility

  - Requires n8n version 1.50.0 or later
  - The Merge Gateway Chat Model node requires n8n 2.16.0 or later (built on n8n's official AI node SDK)
  - Tested with n8n v2.9.4 (Agent Handler nodes) and v2.25.7 (Merge Gateway Chat Model)

  ## Resources

  - [Merge](https://merge.dev/)
  - [Merge Agent Handler Documentation](https://docs.ah.merge.dev/Overview/Agent-Handler-intro)
  - [Merge Agent Handler API Reference](https://docs.ah.merge.dev/api-reference/overview)
  - [Merge Agent Handler Dashboard](https://ah.merge.dev/)
  - [Merge Gateway Documentation](https://docs.merge.dev/merge-gateway/get-started)
  - [Merge Gateway Dashboard](https://gateway.merge.dev/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Manages Merge Agent Handler resources via REST API and connects to Tool Packs via Model Context Protocol (MCP) for AI agent integration.","capabilities":["Create, Get, List, Update, Delete registered users","Create, Get, List, Update, Delete tool packs","List and Get connectors","Create link tokens","Delete credentials","List audit logs","Search tools","Call integration tools via MCP in standalone mode","Provide tools to AI agents for automatic discovery and execution","Handle OAuth authentication via magic links"],"authentication":"API key required","commonUseCases":["Automate user registration and management in Merge","Configure and manage tool packs for AI agents","Enable AI agents to interact with third-party services like Salesforce or Jira","Authenticate connectors programmatically using magic links"],"limitations":[],"relatedNodes":["AI Agent","Merge Agent Handler MCP"]}


node_type: n8n-nodes-bcdrllc.bcdrllcFlowTrigger
package_name: n8n-nodes-bcdrllc
display_name: BCDR Flow Trigger
description: Handle WhatsApp Flow data exchange requests with encryption
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: wganme
author_github_url: https://github.com/BCDRLLC/
npm_package_name: n8n-nodes-bcdrllc
npm_version: 2.0.4
community_fetched_at: 2026-07-14T14:40:33.734Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-bcdrllc

  ![BCDR Company](https://r2.bcdr.sa/images/bimilogo.svg)

  **BCDR Company** - Cloud API integration for n8n

  Send messages, media, templates, and manage business communications directly from your n8n workflows.

  ## Installation

  ### Community Nodes (Recommended)

  1. Open n8n
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install** and search for `n8n-nodes-bcdrllc`
  4. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-bcdrllc
  ```

  ## Configuration

  ### Credentials Setup

  1. Get your API credentials from Meta for Developers
  2. In n8n, create new **Bcdrllc API** credentials
  3. Enter the following:
     - **Access Token**: Your access token
     - **Phone Number ID**: Your phone number ID  
     - **Business Account ID**: (Optional) Your business account ID
     - **API Version**: v21.0 (or your preferred version)

  ## Features

  ### Message Operations
  - **Send Text**: Send text messages with URL preview support
  - **Send Interactive**: Send interactive messages with buttons
  - **Send Location**: Share location coordinates
  - **Send Contact**: Send contact information
  - **React to Message**: React to messages with emojis

  ### Media Operations
  - **Send Image**: Send images with optional captions
  - **Send Video**: Send videos with optional captions
  - **Send Audio**: Send audio files
  - **Send Document**: Send documents with custom filenames
  - **Send Sticker**: Send stickers

  ### Template Operations
  - **Send Template**: Send pre-approved template messages

  ## Usage Examples

  ### Send Text Message

  ```json
  {
    "resource": "message",
    "operation": "sendText",
    "to": "966565430200",
    "message": "Hello from BCDR Company!",
    "previewUrl": true
  }
  ```

  ### Send Interactive Message with Buttons

  ```json
  {
    "resource": "message",
    "operation": "sendInteractive",
    "to": "966565430200",
    "bodyText": "Choose an option:",
    "buttons": [
      {"type": "reply", "reply": {"id": "opt1", "title": "Option 1"}},
      {"type": "reply", "reply": {"id": "opt2", "title": "Option 2"}}
    ]
  }
  ```

  ### Send Image

  ```json
  {
    "resource": "media",
    "operation": "sendImage",
    "to": "966565430200",
    "mediaUrl": "https://example.com/image.jpg",
    "caption": "Check this out!"
  }
  ```

  ### Send Template

  ```json
  {
    "resource": "template",
    "operation": "sendTemplate",
    "to": "966565430200",
    "templateName": "hello_world",
    "languageCode": "en",
    "components": []
  }
  ```

  ## About BCDR Company

  **BCDR Company** (شركة بي سي دي آر)

  - **Website**: https://bcdr.sa
  - **Email**: sales@bcdr.sa
  - **Phone**: +966565430200
  - **Location**: Jeddah, Saudi Arabia
  - **CR Number**: 4030587068
  - **VAT Number**: 311728280700003

  ## Support

  For issues and questions:
  - **Email**: sales@bcdr.sa
  - **GitHub**: https://github.com/BCDRLLC/n8n-nodes-bcdrllc/issues
  - **Documentation**: https://bcdr.sa/docs

  ## License

  MIT License - Copyright (c) 2025 BCDR Company

  ## Version

  1.0.0 - Initial release

  ---

  **Built with ❤️ by BCDR Company ®**

ai_documentation_summary:
  {"purpose":"Enables WhatsApp Business API integration within n8n workflows to send messages, media, and templates with encryption support.","capabilities":["Send text messages with URL previews","Send interactive messages with buttons","Share location coordinates","Send contact information","React to messages with emojis","Send images with captions","Send videos with captions","Send audio files","Send documents with custom filenames","Send stickers"],"authentication":"API key required (Access Token, Phone Number ID, Business Account ID)","commonUseCases":["Customer support automation via WhatsApp","Sending marketing templates and media","Interactive menu systems for businesses","Location sharing and contact management"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-bcdrllc.bcdrllc
package_name: n8n-nodes-bcdrllc
display_name: BCDR Cloud API
description: BCDR Company Cloud API integration for business communications
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: wganme
author_github_url: https://github.com/BCDRLLC/
npm_package_name: n8n-nodes-bcdrllc
npm_version: 2.0.4
community_fetched_at: 2026-07-14T14:40:33.735Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Business Profile",
          "value": "businessProfile",
          "description": "Manage business profile settings"
        },
        {
          "name": "Call",
          "value": "call",
          "description": "Manage call operations"
        },
        {
          "name": "Flow",
          "value": "flow",
          "description": "Manage interactive flows"
        },
        {
          "name": "Media",
          "value": "media",
          "description": "Send and manage media files"
        },
        {
          "name": "Message",
          "value": "message",
          "description": "Send text, interactive, location, and contact messages"
        },
        {
          "name": "Phone Number",
          "value": "phoneNumber",
          "description": "Manage phone number settings"
        },
        {
          "name": "QR Code",
          "value": "qrCode",
          "description": "Create and manage QR codes"
        },
        {
          "name": "System",
          "value": "system",
          "description": "System-level operations"
        },
        {
          "name": "Template",
          "value": "template",
          "description": "Send and manage message templates"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Block/unblock users"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Mark As Read",
          "value": "markAsRead",
          "action": "Mark message as read",
          "description": "Mark a message as read"
        },
        {
          "name": "Remove Reaction",
          "value": "removeReaction",
          "action": "Remove a reaction",
          "description": "Remove reaction from a message"
        },
        {
          "name": "Request Location",
          "value": "requestLocation",
          "action": "Request location from user",
          "description": "Request location from user"
        },
        {
          "name": "Send Catalog",
          "value": "sendCatalog",
          "action": "Send product catalog",
          "description": "Send product catalog"
        },
        {
          "name": "Send Contact",
          "value": "sendContact",
          "action": "Send a contact",
          "description": "Send contact information"
        },
        {
          "name": "Send Flow",
          "value": "sendFlow",
          "action": "Send a Flow message",
          "description": "Send an interactive Flow message"
        },
        {
          "name": "Send Interactive Buttons",
          "value": "sendInteractiveButtons",
          "action": "Send an interactive buttons message",
          "description": "Send an interactive message with buttons"
        },
        {
          "name": "Send Interactive List",
          "value": "sendInteractiveList",
          "action": "Send an interactive list message",
          "description": "Send an interactive message with a list"
        },
        {
          "name": "Send Location",
          "value": "sendLocation",
          "action": "Send a location",
          "description": "Send a location"
        },
        {
          "name": "Send Marketing Message",
          "value": "sendMarketingMessage",
          "action": "Send marketing message",
          "description": "Send marketing template with tracking"
        },
        {
          "name": "Send Product",
          "value": "sendProduct",
          "action": "Send a product",
          "description": "Send a single product"
        },
        {
          "name": "Send Products",
          "value": "sendProducts",
          "action": "Send multiple products",
          "description": "Send multiple products"
        },
        {
          "name": "Send Raw Request",
          "value": "sendRawRequest",
          "action": "Send raw request",
          "description": "Send custom API request"
        },
        {
          "name": "Send Reaction",
          "value": "sendReaction",
          "action": "Send a reaction",
          "description": "React to a message with an emoji"
        },
        {
          "name": "Send Text",
          "value": "sendText",
          "action": "Send a text message",
          "description": "Send a text message"
        },
        {
          "name": "Set Typing Indicator",
          "value": "setTypingIndicator",
          "action": "Set typing indicator",
          "description": "Show typing indicator to user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendImage",
      "options": [
        {
          "name": "Create Upload Session",
          "value": "createUploadSession",
          "action": "Create upload session",
          "description": "Create session for large file upload (>25MB)"
        },
        {
          "name": "Delete Media",
          "value": "deleteMedia",
          "action": "Delete media",
          "description": "Delete uploaded media"
        },
        {
          "name": "Download Media",
          "value": "downloadMedia",
          "action": "Download media",
          "description": "Download media file"
        },
        {
          "name": "Get Media URL",
          "value": "getMediaUrl",
          "action": "Get media URL",
          "description": "Get URL of uploaded media"
        },
        {
          "name": "Get Upload Session",
          "value": "getUploadSession",
          "action": "Get upload session status",
          "description": "Get status of upload session"
        },
        {
          "name": "Send Audio",
          "value": "sendAudio",
          "action": "Send an audio file",
          "description": "Send an audio file"
        },
        {
          "name": "Send Document",
          "value": "sendDocument",
          "action": "Send a document",
          "description": "Send a document"
        },
        {
          "name": "Send Image",
          "value": "sendImage",
          "action": "Send an image",
          "description": "Send an image"
        },
        {
          "name": "Send Sticker",
          "value": "sendSticker",
          "action": "Send a sticker",
          "description": "Send a sticker"
        },
        {
          "name": "Send Video",
          "value": "sendVideo",
          "action": "Send a video",
          "description": "Send a video"
        },
        {
          "name": "Send Voice",
          "value": "sendVoice",
          "action": "Send a voice message",
          "description": "Send a voice message"
        },
        {
          "name": "Upload File to Session",
          "value": "uploadFileToSession",
          "action": "Upload file to session",
          "description": "Upload file chunks to upload session"
        },
        {
          "name": "Upload Media",
          "value": "uploadMedia",
          "action": "Upload media",
          "description": "Upload media to get a media ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendTemplate",
      "options": [
        {
          "name": "Compare Templates",
          "value": "compareTemplates",
          "action": "Compare templates",
          "description": "Compare performance of two templates"
        },
        {
          "name": "Create Template",
          "value": "createTemplate",
          "action": "Create template",
          "description": "Create a new message template"
        },
        {
          "name": "Delete Template",
          "value": "deleteTemplate",
          "action": "Delete template",
          "description": "Delete a message template"
        },
        {
          "name": "Get Template",
          "value": "getTemplate",
          "action": "Get template",
          "description": "Get a specific template by ID"
        },
        {
          "name": "Get Templates",
          "value": "getTemplates",
          "action": "Get templates",
          "description": "Get all message templates"
        },
        {
          "name": "Migrate Templates",
          "value": "migrateTemplates",
          "action": "Migrate templates",
          "description": "Migrate templates between WABAs"
        },
        {
          "name": "Send Template",
          "value": "sendTemplate",
          "action": "Send a template message",
          "description": "Send a template message"
        },
        {
          "name": "Unpause Template",
          "value": "unpauseTemplate",
          "action": "Unpause template",
          "description": "Unpause a previously paused template"
        },
        {
          "name": "Update Template",
          "value": "updateTemplate",
          "action": "Update template",
          "description": "Update an existing template"
        },
        {
          "name": "Upsert Message Templates",
          "value": "upsertMessageTemplates",
          "action": "Upsert message templates",
          "description": "Bulk create/update authentication templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProfile",
      "options": [
        {
          "name": "Delete Webhook URL",
          "value": "deleteWebhookUrl",
          "action": "Delete webhook URL",
          "description": "Delete alternate callback URL"
        },
        {
          "name": "Get Business Account",
          "value": "getBusinessAccount",
          "action": "Get business account",
          "description": "Get business account details"
        },
        {
          "name": "Get Business Public Key",
          "value": "getBusinessPublicKey",
          "action": "Get business public key",
          "description": "Get business public key for encryption"
        },
        {
          "name": "Get Commerce Settings",
          "value": "getCommerceSettings",
          "action": "Get commerce settings",
          "description": "Get commerce settings"
        },
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Get business profile",
          "description": "Get business profile information"
        },
        {
          "name": "Get Subscribed Apps",
          "value": "getSubscribedApps",
          "action": "Get subscribed apps",
          "description": "Get apps subscribed to webhooks"
        },
        {
          "name": "Set Business Public Key",
          "value": "setBusinessPublicKey",
          "action": "Set business public key",
          "description": "Set business public key for encryption"
        },
        {
          "name": "Set Webhook URL",
          "value": "setWebhookUrl",
          "action": "Set webhook URL",
          "description": "Set alternate callback URL for WABA"
        },
        {
          "name": "Update Commerce Settings",
          "value": "updateCommerceSettings",
          "action": "Update commerce settings",
          "description": "Update commerce settings"
        },
        {
          "name": "Update Conversational Automation",
          "value": "updateConversationalAutomation",
          "action": "Update conversational automation",
          "description": "Update commands and ice breakers"
        },
        {
          "name": "Update Profile",
          "value": "updateProfile",
          "action": "Update business profile",
          "description": "Update business profile information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "businessProfile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPhoneNumbers",
      "options": [
        {
          "name": "Delete Phone Webhook URL",
          "value": "deletePhoneWebhookUrl",
          "action": "Delete phone webhook URL",
          "description": "Delete phone alternate callback URL"
        },
        {
          "name": "Deregister Phone",
          "value": "deregisterPhone",
          "action": "Deregister phone number",
          "description": "Deregister a phone number"
        },
        {
          "name": "Get Phone Number",
          "value": "getPhoneNumber",
          "action": "Get phone number",
          "description": "Get details of a specific phone number"
        },
        {
          "name": "Get Phone Numbers",
          "value": "getPhoneNumbers",
          "action": "Get phone numbers",
          "description": "Get all business phone numbers"
        },
        {
          "name": "Get Phone Settings",
          "value": "getPhoneSettings",
          "action": "Get phone settings",
          "description": "Get phone number settings"
        },
        {
          "name": "Register Phone",
          "value": "registerPhone",
          "action": "Register phone number",
          "description": "Register a phone number"
        },
        {
          "name": "Set Phone Webhook URL",
          "value": "setPhoneWebhookUrl",
          "action": "Set phone webhook URL",
          "description": "Set alternate callback URL for phone"
        },
        {
          "name": "Update Conversational Automation",
          "value": "updateConversationalAutomation",
          "action": "Update conversational automation",
          "description": "Update ice breakers and commands"
        },
        {
          "name": "Update Display Name",
          "value": "updateDisplayName",
          "action": "Update display name",
          "description": "Update business display name"
        },
        {
          "name": "Update Phone Settings",
          "value": "updatePhoneSettings",
          "action": "Update phone settings",
          "description": "Update phone number settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phoneNumber"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFlows",
      "options": [
        {
          "name": "Create Flow",
          "value": "createFlow",
          "action": "Create flow",
          "description": "Create a new flow"
        },
        {
          "name": "Delete Flow",
          "value": "deleteFlow",
          "action": "Delete flow",
          "description": "Delete a flow"
        },
        {
          "name": "Deprecate Flow",
          "value": "deprecateFlow",
          "action": "Deprecate flow",
          "description": "Deprecate a flow"
        },
        {
          "name": "Exchange Data",
          "value": "exchangeData",
          "action": "Exchange data with flow",
          "description": "Send data to Flow using Data Exchange API"
        },
        {
          "name": "Generate Flow JSON Template",
          "value": "generateFlowTemplate",
          "action": "Generate flow template",
          "description": "Generate Flow JSON template with screens and components"
        },
        {
          "name": "Get Flow",
          "value": "getFlow",
          "action": "Get flow",
          "description": "Get a specific flow"
        },
        {
          "name": "Get Flow Assets",
          "value": "getFlowAssets",
          "action": "Get flow assets",
          "description": "Get flow assets"
        },
        {
          "name": "Get Flow Metrics",
          "value": "getFlowMetrics",
          "action": "Get flow metrics",
          "description": "Get flow performance metrics"
        },
        {
          "name": "Get Flows",
          "value": "getFlows",
          "action": "Get flows",
          "description": "Get all flows"
        },
        {
          "name": "Migrate Flows",
          "value": "migrateFlows",
          "action": "Migrate flows",
          "description": "Migrate flows between WABAs"
        },
        {
          "name": "Publish Flow",
          "value": "publishFlow",
          "action": "Publish flow",
          "description": "Publish a flow"
        },
        {
          "name": "Update Flow JSON",
          "value": "updateFlowJson",
          "action": "Update flow JSON",
          "description": "Update flow JSON definition"
        },
        {
          "name": "Update Flow Metadata",
          "value": "updateFlow",
          "action": "Update flow metadata",
          "description": "Update flow metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "flow"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "initiateCall",
      "options": [
        {
          "name": "Accept Call",
          "value": "acceptCall",
          "action": "Accept call",
          "description": "Accept an incoming call"
        },
        {
          "name": "End Call",
          "value": "endCall",
          "action": "End call",
          "description": "End an active call"
        },
        {
          "name": "Get Call Permissions",
          "value": "getCallPermissions",
          "action": "Get call permissions",
          "description": "Get call permissions for phone number"
        },
        {
          "name": "Initiate Call",
          "value": "initiateCall",
          "action": "Initiate call",
          "description": "Initiate a voice/video call"
        },
        {
          "name": "Pre-Accept Call",
          "value": "preAcceptCall",
          "action": "Pre-accept call",
          "description": "Pre-accept an incoming call before fully accepting"
        },
        {
          "name": "Reject Call",
          "value": "rejectCall",
          "action": "Reject call",
          "description": "Reject an incoming call"
        },
        {
          "name": "Terminate Call",
          "value": "terminateCall",
          "action": "Terminate call",
          "description": "Terminate an ongoing call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createQrCode",
      "options": [
        {
          "name": "Create QR Code",
          "value": "createQrCode",
          "action": "Create QR code",
          "description": "Create a new QR code"
        },
        {
          "name": "Delete QR Code",
          "value": "deleteQrCode",
          "action": "Delete QR code",
          "description": "Delete a QR code"
        },
        {
          "name": "Get QR Code",
          "value": "getQrCode",
          "action": "Get QR code",
          "description": "Get a specific QR code"
        },
        {
          "name": "Get QR Codes",
          "value": "getQrCodes",
          "action": "Get QR codes",
          "description": "Get all QR codes"
        },
        {
          "name": "Update QR Code",
          "value": "updateQrCode",
          "action": "Update QR code",
          "description": "Update a QR code"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "qrCode"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "blockUser",
      "options": [
        {
          "name": "Block User",
          "value": "blockUser",
          "action": "Block user",
          "description": "Block a user from sending messages"
        },
        {
          "name": "Get Blocked Users",
          "value": "getBlockedUsers",
          "action": "Get blocked users",
          "description": "Get list of blocked users"
        },
        {
          "name": "Unblock User",
          "value": "unblockUser",
          "action": "Unblock user",
          "description": "Unblock a previously blocked user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAppAccessToken",
      "options": [
        {
          "name": "Get App Access Token",
          "value": "getAppAccessToken",
          "action": "Get app access token",
          "description": "Get app-level access token"
        },
        {
          "name": "Set App Callback URL",
          "value": "setAppCallbackUrl",
          "action": "Set app callback URL",
          "description": "Set app-level webhook callback URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "system"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Mark As Read",
      "value": "markAsRead",
      "action": "Mark message as read",
      "description": "Mark a message as read",
      "resource": "message"
    },
    {
      "name": "Remove Reaction",
      "value": "removeReaction",
      "action": "Remove a reaction",
      "description": "Remove reaction from a message",
      "resource": "message"
    },
    {
      "name": "Request Location",
      "value": "requestLocation",
      "action": "Request location from user",
      "description": "Request location from user",
      "resource": "message"
    },
    {
      "name": "Send Catalog",
      "value": "sendCatalog",
      "action": "Send product catalog",
      "description": "Send product catalog",
      "resource": "message"
    },
    {
      "name": "Send Contact",
      "value": "sendContact",
      "action": "Send a contact",
      "description": "Send contact information",
      "resource": "message"
    },
    {
      "name": "Send Flow",
      "value": "sendFlow",
      "action": "Send a Flow message",
      "description": "Send an interactive Flow message",
      "resource": "message"
    },
    {
      "name": "Send Interactive Buttons",
      "value": "sendInteractiveButtons",
      "action": "Send an interactive buttons message",
      "description": "Send an interactive message with buttons",
      "resource": "message"
    },
    {
      "name": "Send Interactive List",
      "value": "sendInteractiveList",
      "action": "Send an interactive list message",
      "description": "Send an interactive message with a list",
      "resource": "message"
    },
    {
      "name": "Send Location",
      "value": "sendLocation",
      "action": "Send a location",
      "description": "Send a location",
      "resource": "message"
    },
    {
      "name": "Send Marketing Message",
      "value": "sendMarketingMessage",
      "action": "Send marketing message",
      "description": "Send marketing template with tracking",
      "resource": "message"
    },
    {
      "name": "Send Product",
      "value": "sendProduct",
      "action": "Send a product",
      "description": "Send a single product",
      "resource": "message"
    },
    {
      "name": "Send Products",
      "value": "sendProducts",
      "action": "Send multiple products",
      "description": "Send multiple products",
      "resource": "message"
    },
    {
      "name": "Send Raw Request",
      "value": "sendRawRequest",
      "action": "Send raw request",
      "description": "Send custom API request",
      "resource": "message"
    },
    {
      "name": "Send Reaction",
      "value": "sendReaction",
      "action": "Send a reaction",
      "description": "React to a message with an emoji",
      "resource": "message"
    },
    {
      "name": "Send Text",
      "value": "sendText",
      "action": "Send a text message",
      "description": "Send a text message",
      "resource": "message"
    },
    {
      "name": "Set Typing Indicator",
      "value": "setTypingIndicator",
      "action": "Set typing indicator",
      "description": "Show typing indicator to user",
      "resource": "message"
    },
    {
      "name": "Create Upload Session",
      "value": "createUploadSession",
      "action": "Create upload session",
      "description": "Create session for large file upload (>25MB)",
      "resource": "media"
    },
    {
      "name": "Delete Media",
      "value": "deleteMedia",
      "action": "Delete media",
      "description": "Delete uploaded media",
      "resource": "media"
    },
    {
      "name": "Download Media",
      "value": "downloadMedia",
      "action": "Download media",
      "description": "Download media file",
      "resource": "media"
    },
    {
      "name": "Get Media URL",
      "value": "getMediaUrl",
      "action": "Get media URL",
      "description": "Get URL of uploaded media",
      "resource": "media"
    },
    {
      "name": "Get Upload Session",
      "value": "getUploadSession",
      "action": "Get upload session status",
      "description": "Get status of upload session",
      "resource": "media"
    },
    {
      "name": "Send Audio",
      "value": "sendAudio",
      "action": "Send an audio file",
      "description": "Send an audio file",
      "resource": "media"
    },
    {
      "name": "Send Document",
      "value": "sendDocument",
      "action": "Send a document",
      "description": "Send a document",
      "resource": "media"
    },
    {
      "name": "Send Image",
      "value": "sendImage",
      "action": "Send an image",
      "description": "Send an image",
      "resource": "media"
    },
    {
      "name": "Send Sticker",
      "value": "sendSticker",
      "action": "Send a sticker",
      "description": "Send a sticker",
      "resource": "media"
    },
    {
      "name": "Send Video",
      "value": "sendVideo",
      "action": "Send a video",
      "description": "Send a video",
      "resource": "media"
    },
    {
      "name": "Send Voice",
      "value": "sendVoice",
      "action": "Send a voice message",
      "description": "Send a voice message",
      "resource": "media"
    },
    {
      "name": "Upload File to Session",
      "value": "uploadFileToSession",
      "action": "Upload file to session",
      "description": "Upload file chunks to upload session",
      "resource": "media"
    },
    {
      "name": "Upload Media",
      "value": "uploadMedia",
      "action": "Upload media",
      "description": "Upload media to get a media ID",
      "resource": "media"
    },
    {
      "name": "Compare Templates",
      "value": "compareTemplates",
      "action": "Compare templates",
      "description": "Compare performance of two templates",
      "resource": "template"
    },
    {
      "name": "Create Template",
      "value": "createTemplate",
      "action": "Create template",
      "description": "Create a new message template",
      "resource": "template"
    },
    {
      "name": "Delete Template",
      "value": "deleteTemplate",
      "action": "Delete template",
      "description": "Delete a message template",
      "resource": "template"
    },
    {
      "name": "Get Template",
      "value": "getTemplate",
      "action": "Get template",
      "description": "Get a specific template by ID",
      "resource": "template"
    },
    {
      "name": "Get Templates",
      "value": "getTemplates",
      "action": "Get templates",
      "description": "Get all message templates",
      "resource": "template"
    },
    {
      "name": "Migrate Templates",
      "value": "migrateTemplates",
      "action": "Migrate templates",
      "description": "Migrate templates between WABAs",
      "resource": "template"
    },
    {
      "name": "Send Template",
      "value": "sendTemplate",
      "action": "Send a template message",
      "description": "Send a template message",
      "resource": "template"
    },
    {
      "name": "Unpause Template",
      "value": "unpauseTemplate",
      "action": "Unpause template",
      "description": "Unpause a previously paused template",
      "resource": "template"
    },
    {
      "name": "Update Template",
      "value": "updateTemplate",
      "action": "Update template",
      "description": "Update an existing template",
      "resource": "template"
    },
    {
      "name": "Upsert Message Templates",
      "value": "upsertMessageTemplates",
      "action": "Upsert message templates",
      "description": "Bulk create/update authentication templates",
      "resource": "template"
    },
    {
      "name": "Delete Webhook URL",
      "value": "deleteWebhookUrl",
      "action": "Delete webhook URL",
      "description": "Delete alternate callback URL",
      "resource": "businessProfile"
    },
    {
      "name": "Get Business Account",
      "value": "getBusinessAccount",
      "action": "Get business account",
      "description": "Get business account details",
      "resource": "businessProfile"
    },
    {
      "name": "Get Business Public Key",
      "value": "getBusinessPublicKey",
      "action": "Get business public key",
      "description": "Get business public key for encryption",
      "resource": "businessProfile"
    },
    {
      "name": "Get Commerce Settings",
      "value": "getCommerceSettings",
      "action": "Get commerce settings",
      "description": "Get commerce settings",
      "resource": "businessProfile"
    },
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Get business profile",
      "description": "Get business profile information",
      "resource": "businessProfile"
    },
    {
      "name": "Get Subscribed Apps",
      "value": "getSubscribedApps",
      "action": "Get subscribed apps",
      "description": "Get apps subscribed to webhooks",
      "resource": "businessProfile"
    },
    {
      "name": "Set Business Public Key",
      "value": "setBusinessPublicKey",
      "action": "Set business public key",
      "description": "Set business public key for encryption",
      "resource": "businessProfile"
    },
    {
      "name": "Set Webhook URL",
      "value": "setWebhookUrl",
      "action": "Set webhook URL",
      "description": "Set alternate callback URL for WABA",
      "resource": "businessProfile"
    },
    {
      "name": "Update Commerce Settings",
      "value": "updateCommerceSettings",
      "action": "Update commerce settings",
      "description": "Update commerce settings",
      "resource": "businessProfile"
    },
    {
      "name": "Update Conversational Automation",
      "value": "updateConversationalAutomation",
      "action": "Update conversational automation",
      "description": "Update commands and ice breakers",
      "resource": "businessProfile"
    },
    {
      "name": "Update Profile",
      "value": "updateProfile",
      "action": "Update business profile",
      "description": "Update business profile information",
      "resource": "businessProfile"
    },
    {
      "name": "Delete Phone Webhook URL",
      "value": "deletePhoneWebhookUrl",
      "action": "Delete phone webhook URL",
      "description": "Delete phone alternate callback URL",
      "resource": "phoneNumber"
    },
    {
      "name": "Deregister Phone",
      "value": "deregisterPhone",
      "action": "Deregister phone number",
      "description": "Deregister a phone number",
      "resource": "phoneNumber"
    },
    {
      "name": "Get Phone Number",
      "value": "getPhoneNumber",
      "action": "Get phone number",
      "description": "Get details of a specific phone number",
      "resource": "phoneNumber"
    },
    {
      "name": "Get Phone Numbers",
      "value": "getPhoneNumbers",
      "action": "Get phone numbers",
      "description": "Get all business phone numbers",
      "resource": "phoneNumber"
    },
    {
      "name": "Get Phone Settings",
      "value": "getPhoneSettings",
      "action": "Get phone settings",
      "description": "Get phone number settings",
      "resource": "phoneNumber"
    },
    {
      "name": "Register Phone",
      "value": "registerPhone",
      "action": "Register phone number",
      "description": "Register a phone number",
      "resource": "phoneNumber"
    },
    {
      "name": "Set Phone Webhook URL",
      "value": "setPhoneWebhookUrl",
      "action": "Set phone webhook URL",
      "description": "Set alternate callback URL for phone",
      "resource": "phoneNumber"
    },
    {
      "name": "Update Conversational Automation",
      "value": "updateConversationalAutomation",
      "action": "Update conversational automation",
      "description": "Update ice breakers and commands",
      "resource": "phoneNumber"
    },
    {
      "name": "Update Display Name",
      "value": "updateDisplayName",
      "action": "Update display name",
      "description": "Update business display name",
      "resource": "phoneNumber"
    },
    {
      "name": "Update Phone Settings",
      "value": "updatePhoneSettings",
      "action": "Update phone settings",
      "description": "Update phone number settings",
      "resource": "phoneNumber"
    },
    {
      "name": "Create Flow",
      "value": "createFlow",
      "action": "Create flow",
      "description": "Create a new flow",
      "resource": "flow"
    },
    {
      "name": "Delete Flow",
      "value": "deleteFlow",
      "action": "Delete flow",
      "description": "Delete a flow",
      "resource": "flow"
    },
    {
      "name": "Deprecate Flow",
      "value": "deprecateFlow",
      "action": "Deprecate flow",
      "description": "Deprecate a flow",
      "resource": "flow"
    },
    {
      "name": "Exchange Data",
      "value": "exchangeData",
      "action": "Exchange data with flow",
      "description": "Send data to Flow using Data Exchange API",
      "resource": "flow"
    },
    {
      "name": "Generate Flow JSON Template",
      "value": "generateFlowTemplate",
      "action": "Generate flow template",
      "description": "Generate Flow JSON template with screens and components",
      "resource": "flow"
    },
    {
      "name": "Get Flow",
      "value": "getFlow",
      "action": "Get flow",
      "description": "Get a specific flow",
      "resource": "flow"
    },
    {
      "name": "Get Flow Assets",
      "value": "getFlowAssets",
      "action": "Get flow assets",
      "description": "Get flow assets",
      "resource": "flow"
    },
    {
      "name": "Get Flow Metrics",
      "value": "getFlowMetrics",
      "action": "Get flow metrics",
      "description": "Get flow performance metrics",
      "resource": "flow"
    },
    {
      "name": "Get Flows",
      "value": "getFlows",
      "action": "Get flows",
      "description": "Get all flows",
      "resource": "flow"
    },
    {
      "name": "Migrate Flows",
      "value": "migrateFlows",
      "action": "Migrate flows",
      "description": "Migrate flows between WABAs",
      "resource": "flow"
    },
    {
      "name": "Publish Flow",
      "value": "publishFlow",
      "action": "Publish flow",
      "description": "Publish a flow",
      "resource": "flow"
    },
    {
      "name": "Update Flow JSON",
      "value": "updateFlowJson",
      "action": "Update flow JSON",
      "description": "Update flow JSON definition",
      "resource": "flow"
    },
    {
      "name": "Update Flow Metadata",
      "value": "updateFlow",
      "action": "Update flow metadata",
      "description": "Update flow metadata",
      "resource": "flow"
    },
    {
      "name": "Accept Call",
      "value": "acceptCall",
      "action": "Accept call",
      "description": "Accept an incoming call",
      "resource": "call"
    },
    {
      "name": "End Call",
      "value": "endCall",
      "action": "End call",
      "description": "End an active call",
      "resource": "call"
    },
    {
      "name": "Get Call Permissions",
      "value": "getCallPermissions",
      "action": "Get call permissions",
      "description": "Get call permissions for phone number",
      "resource": "call"
    },
    {
      "name": "Initiate Call",
      "value": "initiateCall",
      "action": "Initiate call",
      "description": "Initiate a voice/video call",
      "resource": "call"
    },
    {
      "name": "Pre-Accept Call",
      "value": "preAcceptCall",
      "action": "Pre-accept call",
      "description": "Pre-accept an incoming call before fully accepting",
      "resource": "call"
    },
    {
      "name": "Reject Call",
      "value": "rejectCall",
      "action": "Reject call",
      "description": "Reject an incoming call",
      "resource": "call"
    },
    {
      "name": "Terminate Call",
      "value": "terminateCall",
      "action": "Terminate call",
      "description": "Terminate an ongoing call",
      "resource": "call"
    },
    {
      "name": "Create QR Code",
      "value": "createQrCode",
      "action": "Create QR code",
      "description": "Create a new QR code",
      "resource": "qrCode"
    },
    {
      "name": "Delete QR Code",
      "value": "deleteQrCode",
      "action": "Delete QR code",
      "description": "Delete a QR code",
      "resource": "qrCode"
    },
    {
      "name": "Get QR Code",
      "value": "getQrCode",
      "action": "Get QR code",
      "description": "Get a specific QR code",
      "resource": "qrCode"
    },
    {
      "name": "Get QR Codes",
      "value": "getQrCodes",
      "action": "Get QR codes",
      "description": "Get all QR codes",
      "resource": "qrCode"
    },
    {
      "name": "Update QR Code",
      "value": "updateQrCode",
      "action": "Update QR code",
      "description": "Update a QR code",
      "resource": "qrCode"
    },
    {
      "name": "Block User",
      "value": "blockUser",
      "action": "Block user",
      "description": "Block a user from sending messages",
      "resource": "user"
    },
    {
      "name": "Get Blocked Users",
      "value": "getBlockedUsers",
      "action": "Get blocked users",
      "description": "Get list of blocked users",
      "resource": "user"
    },
    {
      "name": "Unblock User",
      "value": "unblockUser",
      "action": "Unblock user",
      "description": "Unblock a previously blocked user",
      "resource": "user"
    },
    {
      "name": "Get App Access Token",
      "value": "getAppAccessToken",
      "action": "Get app access token",
      "description": "Get app-level access token",
      "resource": "system"
    },
    {
      "name": "Set App Callback URL",
      "value": "setAppCallbackUrl",
      "action": "Set app callback URL",
      "description": "Set app-level webhook callback URL",
      "resource": "system"
    }
  ]

npm_readme:
  # n8n-nodes-bcdrllc

  ![BCDR Company](https://r2.bcdr.sa/images/bimilogo.svg)

  **BCDR Company** - Cloud API integration for n8n

  Send messages, media, templates, and manage business communications directly from your n8n workflows.

  ## Installation

  ### Community Nodes (Recommended)

  1. Open n8n
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install** and search for `n8n-nodes-bcdrllc`
  4. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-bcdrllc
  ```

  ## Configuration

  ### Credentials Setup

  1. Get your API credentials from Meta for Developers
  2. In n8n, create new **Bcdrllc API** credentials
  3. Enter the following:
     - **Access Token**: Your access token
     - **Phone Number ID**: Your phone number ID  
     - **Business Account ID**: (Optional) Your business account ID
     - **API Version**: v21.0 (or your preferred version)

  ## Features

  ### Message Operations
  - **Send Text**: Send text messages with URL preview support
  - **Send Interactive**: Send interactive messages with buttons
  - **Send Location**: Share location coordinates
  - **Send Contact**: Send contact information
  - **React to Message**: React to messages with emojis

  ### Media Operations
  - **Send Image**: Send images with optional captions
  - **Send Video**: Send videos with optional captions
  - **Send Audio**: Send audio files
  - **Send Document**: Send documents with custom filenames
  - **Send Sticker**: Send stickers

  ### Template Operations
  - **Send Template**: Send pre-approved template messages

  ## Usage Examples

  ### Send Text Message

  ```json
  {
    "resource": "message",
    "operation": "sendText",
    "to": "966565430200",
    "message": "Hello from BCDR Company!",
    "previewUrl": true
  }
  ```

  ### Send Interactive Message with Buttons

  ```json
  {
    "resource": "message",
    "operation": "sendInteractive",
    "to": "966565430200",
    "bodyText": "Choose an option:",
    "buttons": [
      {"type": "reply", "reply": {"id": "opt1", "title": "Option 1"}},
      {"type": "reply", "reply": {"id": "opt2", "title": "Option 2"}}
    ]
  }
  ```

  ### Send Image

  ```json
  {
    "resource": "media",
    "operation": "sendImage",
    "to": "966565430200",
    "mediaUrl": "https://example.com/image.jpg",
    "caption": "Check this out!"
  }
  ```

  ### Send Template

  ```json
  {
    "resource": "template",
    "operation": "sendTemplate",
    "to": "966565430200",
    "templateName": "hello_world",
    "languageCode": "en",
    "components": []
  }
  ```

  ## About BCDR Company

  **BCDR Company** (شركة بي سي دي آر)

  - **Website**: https://bcdr.sa
  - **Email**: sales@bcdr.sa
  - **Phone**: +966565430200
  - **Location**: Jeddah, Saudi Arabia
  - **CR Number**: 4030587068
  - **VAT Number**: 311728280700003

  ## Support

  For issues and questions:
  - **Email**: sales@bcdr.sa
  - **GitHub**: https://github.com/BCDRLLC/n8n-nodes-bcdrllc/issues
  - **Documentation**: https://bcdr.sa/docs

  ## License

  MIT License - Copyright (c) 2025 BCDR Company

  ## Version

  1.0.0 - Initial release

  ---

  **Built with ❤️ by BCDR Company ®**

ai_documentation_summary:
  {"purpose":"Integrates BCDR Company Cloud API into n8n workflows to enable business communications, including sending various message types, media, and templates to phone numbers.","capabilities":["Send text messages with URL preview","Send interactive messages with buttons","Share location coordinates","Send contact information","React to messages with emojis","Send images with captions","Send videos with captions","Send audio files","Send documents with custom filenames","Send stickers"],"authentication":"API key required (Access Token, Phone Number ID, and optional Business Account ID)","commonUseCases":["Customer support notifications via text and media","Interactive menu systems for user engagement","Automated marketing campaigns using templates","Sharing location or contact details with customers"],"limitations":["Requires prior setup of API credentials from Meta for Developers","Phone Number ID and Business Account ID must be configured in n8n credentials"],"relatedNodes":[]}


node_type: n8n-nodes-bcdrllc.bcdrllcTrigger
package_name: n8n-nodes-bcdrllc
display_name: BCDR Webhook Trigger
description: Receive WhatsApp webhook updates (messages, statuses, etc.)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: wganme
author_github_url: https://github.com/BCDRLLC/
npm_package_name: n8n-nodes-bcdrllc
npm_version: 2.0.4
community_fetched_at: 2026-07-14T14:40:33.736Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-bcdrllc

  ![BCDR Company](https://r2.bcdr.sa/images/bimilogo.svg)

  **BCDR Company** - Cloud API integration for n8n

  Send messages, media, templates, and manage business communications directly from your n8n workflows.

  ## Installation

  ### Community Nodes (Recommended)

  1. Open n8n
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install** and search for `n8n-nodes-bcdrllc`
  4. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-bcdrllc
  ```

  ## Configuration

  ### Credentials Setup

  1. Get your API credentials from Meta for Developers
  2. In n8n, create new **Bcdrllc API** credentials
  3. Enter the following:
     - **Access Token**: Your access token
     - **Phone Number ID**: Your phone number ID  
     - **Business Account ID**: (Optional) Your business account ID
     - **API Version**: v21.0 (or your preferred version)

  ## Features

  ### Message Operations
  - **Send Text**: Send text messages with URL preview support
  - **Send Interactive**: Send interactive messages with buttons
  - **Send Location**: Share location coordinates
  - **Send Contact**: Send contact information
  - **React to Message**: React to messages with emojis

  ### Media Operations
  - **Send Image**: Send images with optional captions
  - **Send Video**: Send videos with optional captions
  - **Send Audio**: Send audio files
  - **Send Document**: Send documents with custom filenames
  - **Send Sticker**: Send stickers

  ### Template Operations
  - **Send Template**: Send pre-approved template messages

  ## Usage Examples

  ### Send Text Message

  ```json
  {
    "resource": "message",
    "operation": "sendText",
    "to": "966565430200",
    "message": "Hello from BCDR Company!",
    "previewUrl": true
  }
  ```

  ### Send Interactive Message with Buttons

  ```json
  {
    "resource": "message",
    "operation": "sendInteractive",
    "to": "966565430200",
    "bodyText": "Choose an option:",
    "buttons": [
      {"type": "reply", "reply": {"id": "opt1", "title": "Option 1"}},
      {"type": "reply", "reply": {"id": "opt2", "title": "Option 2"}}
    ]
  }
  ```

  ### Send Image

  ```json
  {
    "resource": "media",
    "operation": "sendImage",
    "to": "966565430200",
    "mediaUrl": "https://example.com/image.jpg",
    "caption": "Check this out!"
  }
  ```

  ### Send Template

  ```json
  {
    "resource": "template",
    "operation": "sendTemplate",
    "to": "966565430200",
    "templateName": "hello_world",
    "languageCode": "en",
    "components": []
  }
  ```

  ## About BCDR Company

  **BCDR Company** (شركة بي سي دي آر)

  - **Website**: https://bcdr.sa
  - **Email**: sales@bcdr.sa
  - **Phone**: +966565430200
  - **Location**: Jeddah, Saudi Arabia
  - **CR Number**: 4030587068
  - **VAT Number**: 311728280700003

  ## Support

  For issues and questions:
  - **Email**: sales@bcdr.sa
  - **GitHub**: https://github.com/BCDRLLC/n8n-nodes-bcdrllc/issues
  - **Documentation**: https://bcdr.sa/docs

  ## License

  MIT License - Copyright (c) 2025 BCDR Company

  ## Version

  1.0.0 - Initial release

  ---

  **Built with ❤️ by BCDR Company ®**

ai_documentation_summary:
  {"purpose":"This node enables receiving WhatsApp webhook updates (messages, statuses, etc.) to trigger automated workflows in n8n based on incoming WhatsApp events.","capabilities":["Receive WhatsApp webhook updates","Process incoming messages","Track message statuses","Handle media uploads (images, videos, audio, documents, stickers)","Manage interactive message responses","Process template message callbacks"],"authentication":"API key required (Access Token, Phone Number ID, Business Account ID)","commonUseCases":["Automate customer support responses to WhatsApp messages","Trigger workflows when specific media types are received","Monitor message delivery statuses","Integrate WhatsApp interactions with CRM or database updates"],"limitations":["Only supports receiving webhook data; does not include nodes for sending messages or media","Requires Meta for Developers API credentials and proper webhook configuration"],"relatedNodes":["n8n-nodes-bcdrllc.bcdrllcSend","n8n-nodes-bcdrllc.bcdrllcMedia","n8n-nodes-bcdrllc.bcdrllcTemplate"]}


node_type: n8n-nodes-renderio.renderio
package_name: n8n-nodes-renderio
display_name: RenderIO
description: Process video and audio with FFmpeg, download media with yt-dlp, and store outputs in RenderIO
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: hodho
author_github_url: https://github.com/RenderIO/
npm_package_name: n8n-nodes-renderio
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:33.737Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "preset",
      "options": [
        {
          "name": "Preset Workflow",
          "value": "preset",
          "description": "Run a saved RenderIO preset with input files"
        },
        {
          "name": "Custom FFmpeg Command",
          "value": "command",
          "description": "Run custom FFmpeg or yt-dlp jobs"
        },
        {
          "name": "RenderIO File Storage",
          "value": "file",
          "description": "Store, upload, retrieve, list, or delete RenderIO files"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "run",
      "options": [
        {
          "name": "Download and Process Media",
          "value": "downloadAndProcessMedia",
          "action": "Download and process media",
          "description": "Download media with yt-dlp and process it with an FFmpeg command"
        },
        {
          "name": "Download Media",
          "value": "downloadMedia",
          "action": "Download media",
          "description": "Download media from YouTube, Instagram, TikTok, and other yt-dlp-supported URLs"
        },
        {
          "name": "Run FFmpeg Command",
          "value": "run",
          "action": "Run ffmpeg command",
          "description": "Execute a single FFmpeg command with input and output files"
        },
        {
          "name": "Run Chained FFmpeg Commands",
          "value": "runChained",
          "action": "Run chained ffmpeg commands",
          "description": "Execute multiple chained FFmpeg commands sequentially"
        },
        {
          "name": "Run Multiple FFmpeg Commands",
          "value": "runMultiple",
          "action": "Run multiple ffmpeg commands",
          "description": "Execute multiple independent FFmpeg commands in one request"
        },
        {
          "name": "Get Command Status",
          "value": "get",
          "action": "Get command status",
          "description": "Retrieve a command by ID to check its status and results"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "command"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "store",
      "options": [
        {
          "name": "Store From URL",
          "value": "store",
          "action": "Store a file from URL",
          "description": "Store a publicly accessible file URL in RenderIO storage"
        },
        {
          "name": "Upload Binary File",
          "value": "upload",
          "action": "Upload a binary file",
          "description": "Upload a binary file directly to RenderIO storage"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Retrieve a file",
          "description": "Retrieve a single file by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Retrieve a list of files",
          "description": "Retrieve a list of files"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a file",
          "description": "Delete a file permanently"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute Preset",
          "value": "execute",
          "action": "Execute a preset",
          "description": "Run a preset with provided input files"
        },
        {
          "name": "Get Preset",
          "value": "get",
          "action": "Get a preset",
          "description": "Retrieve a single preset by ID"
        },
        {
          "name": "List Presets",
          "value": "getMany",
          "action": "List presets",
          "description": "Retrieve a list of presets"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "preset"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Download and Process Media",
      "value": "downloadAndProcessMedia",
      "action": "Download and process media",
      "description": "Download media with yt-dlp and process it with an FFmpeg command",
      "resource": "command"
    },
    {
      "name": "Download Media",
      "value": "downloadMedia",
      "action": "Download media",
      "description": "Download media from YouTube, Instagram, TikTok, and other yt-dlp-supported URLs",
      "resource": "command"
    },
    {
      "name": "Run FFmpeg Command",
      "value": "run",
      "action": "Run ffmpeg command",
      "description": "Execute a single FFmpeg command with input and output files",
      "resource": "command"
    },
    {
      "name": "Run Chained FFmpeg Commands",
      "value": "runChained",
      "action": "Run chained ffmpeg commands",
      "description": "Execute multiple chained FFmpeg commands sequentially",
      "resource": "command"
    },
    {
      "name": "Run Multiple FFmpeg Commands",
      "value": "runMultiple",
      "action": "Run multiple ffmpeg commands",
      "description": "Execute multiple independent FFmpeg commands in one request",
      "resource": "command"
    },
    {
      "name": "Get Command Status",
      "value": "get",
      "action": "Get command status",
      "description": "Retrieve a command by ID to check its status and results",
      "resource": "command"
    },
    {
      "name": "Store From URL",
      "value": "store",
      "action": "Store a file from URL",
      "description": "Store a publicly accessible file URL in RenderIO storage",
      "resource": "file"
    },
    {
      "name": "Upload Binary File",
      "value": "upload",
      "action": "Upload a binary file",
      "description": "Upload a binary file directly to RenderIO storage",
      "resource": "file"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Retrieve a file",
      "description": "Retrieve a single file by ID",
      "resource": "file"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Retrieve a list of files",
      "description": "Retrieve a list of files",
      "resource": "file"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a file",
      "description": "Delete a file permanently",
      "resource": "file"
    },
    {
      "name": "Execute Preset",
      "value": "execute",
      "action": "Execute a preset",
      "description": "Run a preset with provided input files",
      "resource": "preset"
    },
    {
      "name": "Get Preset",
      "value": "get",
      "action": "Get a preset",
      "description": "Retrieve a single preset by ID",
      "resource": "preset"
    },
    {
      "name": "List Presets",
      "value": "getMany",
      "action": "List presets",
      "description": "Retrieve a list of presets",
      "resource": "preset"
    }
  ]

npm_readme:
  # n8n Nodes - RenderIO integration

  This is an n8n community node that integrates [RenderIO](https://renderio.dev) with your n8n workflows, so you can run FFmpeg commands in the cloud, download web media with yt-dlp, manage media files, and automate video/audio processing tasks.

  [RenderIO](https://renderio.dev) is an FFmpeg-as-a-Service cloud API that lets you submit FFmpeg commands via API, get results stored in the cloud, and integrate media processing into your automation workflows, while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) tool for AI workflow automation that allows you to connect various services.

  ## Table of contents

  - [Installation on self hosted instance](#installation-self-hosted)
  - [Installation on n8n cloud](#installation-n8n-cloud)
  - [Installation for development and contributing](#installation-development-and-contributing)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Placeholder syntax](#placeholder-syntax)
  - [Resources](#resources)
  - [Release](#releasing-a-new-version)
  - [Version History](#version-history)
  - [Troubleshooting](#troubleshooting)

  ## Installation (self-hosted)

  To install the RenderIO community node directly from the n8n Editor UI:

  1. Open your n8n instance.
  2. Go to **Settings > Community Nodes**
  3. Select **Install**.
  4. Enter the npm package name: `n8n-nodes-renderio` to install the latest version. To install a specific version (e.g 0.1.0) enter `n8n-nodes-renderio@0.1.0`. All versions are available [here](https://www.npmjs.com/package/n8n-nodes-renderio?activeTab=versions)
  5. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes and select **Install**
  6. The node is now available to use in your workflows.

  ## Installation (n8n Cloud)

  If you're using n8n Cloud, installing community nodes is even simpler:

  1. Go to the **Canvas** and open the **nodes panel**.
  2. Search for **RenderIO** in the community node registry.
  3. Click **Install node** to add the RenderIO node to your instance.

  > On n8n cloud users can choose not to show verified community nodes. Instance owners can toggle this in the Cloud Admin Panel. To install the RenderIO node, make sure the installation of verified community nodes is enabled.

  ## Installation (development and contributing)

  ### Prerequisites

  - **Node.js**: 22.x or higher (required)
  - **npm**: 10.8.2 or higher (required)

  Verify your versions:

  ```bash
  node --version  # Should be v22.x.x or higher
  npm --version   # Should be 10.8.2 or higher
  ```

  If you use `nvm`, the project includes a `.nvmrc` file. Simply run:

  ```bash
  nvm use
  ```

  ### 1. Clone and Install Dependencies

  Clone the repository and install dependencies:

  ```bash
  git clone https://github.com/RenderIO/n8n-nodes-renderio.git
  cd n8n-nodes-renderio
  npm install
  ```

  ### 2. Build the Node Package

  ```bash
  npm run build
  ```

  ### 3. Start Development Server

  Start the n8n development server with your node linked:

  ```bash
  npm run dev
  ```

  ---

  ### Making changes

  If you make any changes to your custom node locally, remember to rebuild and restart:

  ```bash
  npm run build
  ```

  ---

  ## Operations

  This node supports a wide range of RenderIO operations, organized by resource type in the n8n UI:

  ### Preset Workflow

  - **Execute Preset**: Run a preset with input files
    - Use predefined FFmpeg command templates
    - Pass different input files to reusable presets
    - Searchable preset list via dynamic dropdown
    - Returns a `command_id` for status checks
  - **Get Preset**: Retrieve a preset by ID
    - View preset configuration and FFmpeg command template
  - **List Presets**: Browse available presets

  ### Custom FFmpeg Command

  - **Download and Process Media**: Download media with yt-dlp and process it with FFmpeg
    - Use downloaded media as `<<in_key>>` placeholders in an FFmpeg command
    - Create transformed outputs such as clips, GIFs, resized videos, or extracted audio
  - **Download Media**: Download media with yt-dlp
    - Supports YouTube, Instagram, TikTok, and other yt-dlp-supported URLs
    - Stores downloaded media as RenderIO output files
  - **Run FFmpeg Command**: Execute a single FFmpeg command
    - Provide FFmpeg arguments and input files
    - Configurable output format and options
    - Background processing with status polling
  - **Run Chained FFmpeg Commands**: Execute multiple sequential FFmpeg commands
    - Chain commands where output of one feeds into the next
    - Useful for multi-step media processing pipelines
  - **Run Multiple FFmpeg Commands**: Execute multiple independent FFmpeg commands in parallel
    - Process multiple files simultaneously
    - Each command runs independently
  - **Get Command Status**: Retrieve a command by ID
    - Check processing status (queued, processing, completed, failed)
    - Access output file references and metadata

  ### RenderIO File Storage

  - **Store From URL**: Store a file from a URL into RenderIO
    - Import media from any publicly accessible URL
    - File is stored in RenderIO's cloud storage for processing
  - **Upload Binary File**: Upload a binary file
    - Upload files directly from your n8n workflow
    - Supports any media format compatible with FFmpeg
  - **Get**: Retrieve a file by ID
    - Access file metadata and download URLs
  - **Get Many**: List files
    - Browse your stored files
    - Pagination support
  - **Delete**: Delete a file
    - Remove files from cloud storage

  ### AI Tools

  All RenderIO node operations can be combined with n8n's AI tools to create powerful workflows.
  For example, you can process media files using FFmpeg commands and then use an AI model to analyze, transcribe, or classify the output.

  ## Credentials

  To authenticate with RenderIO:

  1. Sign up or log in at [RenderIO](https://renderio.dev)
  2. Navigate to the **Dashboard** and open the **API Keys** section
  3. Generate a new API key. Keys start with `ffsk_`
  4. In n8n, create a new **RenderIO API** credential
  5. Paste the key into the **API Key** field

  For more details, see the [authentication documentation](https://renderio.dev/docs/getting-started/authentication).

  ## Compatibility

  - **n8n**: Version 1.60.0 and higher
  - **Node.js**: 22.x or higher
  - **npm**: 10.8.2 or higher
  - **RenderIO node v1 workflows**: Existing saved workflows keep using legacy `{{alias}}` RenderIO placeholders, with n8n expressions disabled in FFmpeg command fields
  - **RenderIO node v2 workflows**: New workflows use `<<alias>>` RenderIO placeholders, allowing `{{ ... }}` to be used for n8n expressions in FFmpeg command fields

  ## Usage

  1. **Run a preset first**: Use **Preset Workflow > Execute Preset**, choose a preset, and add the requested input file URLs.
  2. **Use a custom command when needed**: Use **Custom FFmpeg Command > Run FFmpeg Command** for raw FFmpeg, or **Custom FFmpeg Command > Download and Process Media** to download and transform web media in one job.
  3. **Check status**: Use **Custom FFmpeg Command > Get Command Status** with the returned `command_id`.
  4. **Retrieve results**: Use **RenderIO File Storage > Get** to access an output file by ID or from the searchable file list.
  5. **Store or upload reusable media**: Use **RenderIO File Storage > Store From URL** or **Upload Binary File**.

  For repeated operations, create a **Preset** with your FFmpeg command template, then use **Preset Workflow > Execute Preset** to run it with different input files.

  Common fields returned by the node:

  - `command_id`: Use this with **Get Command Status**.
  - `status`: Current job or file status.
  - `file_id`: Use this with **RenderIO File Storage > Get**.
  - `storage_url`: Direct URL for a stored or output file when available.

  ## Placeholder syntax

  RenderIO command fields support two syntax modes through n8n node versioning:

  - **Version 1 (legacy)**: Use `{{in_video}}` and `{{out_video}}`. n8n expressions are intentionally disabled in FFmpeg command fields to avoid conflicts with RenderIO placeholders. Existing production workflows stay on this version.
  - **Version 2 (current)**: Use `<<in_video>>` and `<<out_video>>` for RenderIO placeholders. The `{{ ... }}` syntax is available for n8n expressions.

  Version 2 example:

  ```text
  -i <<in_video>> -metadata title="{{ $json.title }}" -c:v libx264 <<out_video>>
  ```

  If a version 2 command still contains a raw legacy placeholder such as `{{in_video}}`, the node rejects it and asks you to replace it with `<<in_video>>`.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [RenderIO API Documentation](https://renderio.dev/docs)
  - [RenderIO Authentication Documentation](https://renderio.dev/docs/getting-started/authentication)

  ## Version history

  Track changes and updates to the node here.

  ## Troubleshooting

  ### Common issues

  1. **Authentication errors**
     - Verify your API key is correct and starts with `ffsk_`
     - Check that your RenderIO account is active

  2. **Command failures**
     - Verify the FFmpeg arguments are valid
     - Check that input files exist and are accessible
     - In node version 2, use `<<alias>>` for RenderIO placeholders and reserve `{{ ... }}` for n8n expressions
     - Review the command status via **Custom FFmpeg Command > Get Command Status** for detailed error messages

  3. **File upload issues**
     - Ensure the file URL is publicly accessible (for Store operations)
     - Verify the file format is supported by FFmpeg
     - Check file size limits on your RenderIO plan

  4. **Operation timeouts**
     - FFmpeg processing runs in the background; use **Custom FFmpeg Command > Get Command Status** to poll for completion
     - Large files or complex operations may take longer to process

  ### Getting help

  If you encounter issues:

  1. Check the [RenderIO API Documentation](https://renderio.dev/docs)
  2. Review the [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  3. Open an issue in the [GitHub repository](https://github.com/RenderIO/n8n-nodes-renderio)

ai_documentation_summary:
  {"purpose":"Execute FFmpeg commands in the cloud to process video and audio files, manage media storage, and utilize predefined processing presets.","capabilities":["Execute single FFmpeg commands","Chain multiple FFmpeg commands sequentially","Run multiple independent FFmpeg commands in parallel","Store media files from URLs","Upload binary files directly","Retrieve file metadata and download URLs","List and browse stored files with pagination","Delete files from cloud storage","Execute predefined FFmpeg presets","Retrieve and list preset configurations"],"authentication":"API key required","commonUseCases":["Automated video transcoding and format conversion","Background media processing pipelines","Batch processing of multiple video files","Integrating media analysis with AI tools in n8n workflows"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-pdfbolt.pdfBolt
package_name: n8n-nodes-pdfbolt
display_name: PDFBolt
description: Generate PDFs from HTML, URLs, and templates with PDFBolt API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: pdfbolt
author_github_url: https://github.com/pdfbolt/
npm_package_name: n8n-nodes-pdfbolt
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.738Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "convertHtml",
      "options": [
        {
          "name": "Convert HTML to PDF",
          "value": "convertHtml",
          "action": "Convert HTML to PDF",
          "description": "Paste your HTML code and get a PDF file"
        },
        {
          "name": "Convert Template to PDF",
          "value": "convertTemplate",
          "action": "Convert template to PDF",
          "description": "Use a PDFBolt template with your JSON data to generate a PDF"
        },
        {
          "name": "Convert URL to PDF",
          "value": "convertUrl",
          "action": "Convert URL to PDF",
          "description": "Enter a webpage URL and get a PDF of that page"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get API usage",
          "description": "Check your plan, remaining conversions, and expiry date"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Convert HTML to PDF",
      "value": "convertHtml",
      "action": "Convert HTML to PDF",
      "description": "Paste your HTML code and get a PDF file"
    },
    {
      "name": "Convert Template to PDF",
      "value": "convertTemplate",
      "action": "Convert template to PDF",
      "description": "Use a PDFBolt template with your JSON data to generate a PDF"
    },
    {
      "name": "Convert URL to PDF",
      "value": "convertUrl",
      "action": "Convert URL to PDF",
      "description": "Enter a webpage URL and get a PDF of that page"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get API usage",
      "description": "Check your plan, remaining conversions, and expiry date"
    }
  ]

npm_readme:
  # n8n-nodes-pdfbolt

  This is an [n8n](https://n8n.io/) community node for [PDFBolt](https://pdfbolt.com) – a scalable and privacy-first PDF generation API.

  Convert HTML content, URLs, and templates to high-quality PDFs directly from your n8n workflows.

  ## Installation

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

  In your n8n instance:
  1. Go to **Settings** > **Community Nodes**
  2. Enter `n8n-nodes-pdfbolt`
  3. Click **Install**

  ## Operations

  | Operation | Description |
  |-----------|-------------|
  | **Convert HTML to PDF** | Paste your HTML code and get a PDF file |
  | **Convert URL to PDF** | Enter a webpage URL and get a PDF of that page |
  | **Convert Template to PDF** | Use a PDFBolt template with your JSON data to generate a PDF |
  | **Get Usage** | Check your plan, remaining conversions, and expiry date |

  ### Endpoints

  Each conversion operation supports three endpoints:

  | Endpoint | Description |
  |----------|-------------|
  | **Direct (PDF in Response)** | Get the PDF file immediately in the response. The simplest option. |
  | **Sync (PDF via URL)** | Get a download URL for the PDF (valid 24h) with conversion details. |
  | **Async (PDF via Webhook)** | Convert in the background and send the result to your webhook when ready. Best for large volumes. |

  ### Additional Options

  Fine-tune your PDF output with 30+ parameters:

  - **Page Layout** – format, orientation, dimensions, margins, scale, page ranges
  - **Output** – filename, compression, content disposition
  - **Header & Footer** – custom HTML templates with dynamic page numbers
  - **Rendering** – background graphics, media type, JavaScript, timeout, wait conditions
  - **Viewport & Device** – viewport size, mobile emulation, device scale factor
  - **HTTP** – cookies, custom headers, basic authentication
  - **Print Production** – PDF/X standards, color space (RGB/CMYK), ICC profiles

  ## Credentials

  You need a PDFBolt API key. Get one at [app.pdfbolt.com](https://app.pdfbolt.com/api-keys).

  ## Resources

  - [PDFBolt API Documentation](https://pdfbolt.com/docs)
  - [Conversion Parameters](https://pdfbolt.com/docs/parameters)
  - [PDFBolt Dashboard](https://app.pdfbolt.com)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Converts HTML content, URLs, and templates into high-quality PDF files using the PDFBolt API directly within n8n workflows.","capabilities":["Convert HTML code to PDF","Convert webpage URLs to PDF","Generate PDFs from custom templates using JSON data","Retrieve API usage statistics and plan details","Return PDF directly in API response","Generate time-limited download URLs for PDFs","Trigger background conversions via webhooks for large files","Customize page layout, orientation, margins, and scale","Add custom headers and footers with dynamic page numbers","Control rendering settings including JavaScript execution and media types"],"authentication":"API key required","commonUseCases":["Generating invoices and receipts from HTML templates","Capturing web pages as PDF archives","Creating branded documents from dynamic data sources","Automating report generation for email attachments"],"limitations":["Requires an active PDFBolt API key and account","Community node installation may require manual setup in n8n instance"],"relatedNodes":[]}


node_type: @easybits/n8n-nodes-extractor.easybitsExtractor
package_name: @easybits/n8n-nodes-extractor
display_name: easybits Extractor
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ivan.easybits
author_github_url: https://github.com/easybits-tech/n8n-nodes-extractor.git
npm_package_name: @easybits/n8n-nodes-extractor
npm_version: 1.4.0
community_fetched_at: 2026-07-14T14:40:33.739Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Sends files to the easybits Extractor API for data extraction. Supports binary file attachments and base64 Data URLs as input.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document",
          "description": "A document file (PDF, JPEG, or PNG) to extract data from"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "extract",
      "options": [
        {
          "name": "Extract",
          "value": "extract",
          "action": "Extract a document",
          "description": "Send documents to the easybits' Extractor API for structured data extraction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Extract",
      "value": "extract",
      "action": "Extract a document",
      "description": "Send documents to the easybits' Extractor API for structured data extraction",
      "resource": "document"
    }
  ]

npm_readme:
  # @easybits/n8n-nodes-extractor

  [![npm version](https://img.shields.io/npm/v/@easybits%2Fn8n-nodes-extractor.svg)](https://www.npmjs.com/package/@easybits/n8n-nodes-extractor)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  n8n community node that sends documents to the [Easybits Extractor](https://extractor.easybits.tech) API for structured data extraction.

  Replace complex OCR setups, fragile Regex logic, and heavy cloud consoles (like AWS Textract) with a single node that guarantees strictly typed JSON output.

  ## What it does

  Here is the standard flow:
  1. Create a pipeline: Define your extraction schema for free at [extractor.easybits.tech](https://extractor.easybits.tech).
  2. Pass the file: Use this node in n8n to send your document. It accepts PDF, JPG, or PNG files, either as standard n8n Binary Files or base64 Data URLs.
  3. Get structured data back: The node returns a strictly typed JSON object containing the exact key-value pairs you defined, ready to be used in your downstream n8n nodes.

  ## Installation

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

  The package name is: `@easybits/n8n-nodes-extractor`

  ## What can you build with this node?

  This node is designed for high-stakes, production-grade document automation:

  **Accounting & Order Processing:** Automate the extraction of key data points from order and invoice documents for inventory management and accounting.

  **Digital Document Archiving:** Automate the extraction and classification of relevant information for structured storage in public administration Document Management Systems (DMS).

  **Claims Processing for Insurers:** Automate FNOL (First Notice of Loss) capture and extract structured data from messy claims documents.

  **Medical Reports:** Extract critical findings from medical reports and handwritten doctor prescriptions.

  ## Supported file formats

  **JPEG**, **PNG**, and **PDF** — other file types will be rejected with a clear error message.

  ## Configuration

  ### Credential

  Both **Pipeline ID** and **API Key** are configured in the credential dialog. Each Easybits Extractor pipeline has its own API key, so bundling them together prevents accidental mismatches. The credential also includes a built-in connection test.

  | Credential Field   | Description                                                              |
  | ------------------ | ------------------------------------------------------------------------ |
  | **Pipeline ID**    | The ID of your extraction pipeline, obtained from Easybits Extractor     |
  | **API Key**        | Your API key from the Easybits Extractor dashboard (stored as a secret)  |

  ### Node parameters

  | Parameter          | Description                                                              |
  | ------------------ | ------------------------------------------------------------------------ |
  | **Input Type**     | How files are provided: **Binary Files** (default), **Data URLs**, or **Auto** |
  | **Data URL Field** | JSON field name containing base64 Data URL(s). Shown when Input Type is Data URLs or Auto. Default: `dataUrl` |

  ### Input types

  - **Binary Files** — reads binary attachments from input items (e.g. from Read Binary File, HTTP Request, or email trigger nodes). This is the default and matches the original behavior.
  - **Data URLs** — reads pre-encoded base64 Data URLs from a JSON field on each item. Useful when you already have Data URLs from a previous API response or a Set node.
  - **Auto** — collects both binary attachments and Data URLs from the same items. Handy when mixing sources.

  ## How it works

  1. Collects files from all input items (as binary attachments, Data URLs, or both — depending on Input Type)
  2. Converts binary files to base64 Data URLs; passes Data URLs through as-is
  3. POSTs them all to `https://extractor.easybits.tech/api/pipelines/{pipelineId}` with Bearer auth
  4. Returns the extraction result as a single JSON output item

  ## usage

  ### Extract data from a single file

  Use **Read Binary File** to load a document, then connect it to easybits Extractor.

  ```
  [Read Binary File] → [easybits Extractor]
  ```

  Extractor settings:
  - **Input Type**: Binary Files
  - **Credential**: select your Easybits Extractor credential (Pipeline ID + API Key)

  ### Extract data from multiple files

  Any node that outputs multiple items with binary attachments works — for example, reading files from disk in a loop, or an email trigger that has several attachments.

  ```
  [Read Binary Files (loop)] → [easybits Extractor]
  ```

  All binary attachments across all input items are collected and sent in a single API call.

  ### Extract from an HTTP-downloaded file

  Use **HTTP Request** with "Response Format" set to **File** to download a PDF or image, then pass it directly to the extractor.

  ```
  [HTTP Request (download file)] → [easybits Extractor]
  ```

  ### Pass a base64 Data URL from a previous step

  If you already have a base64 Data URL (e.g. from another API response), use the **Data URLs** input type.

  ```
  [HTTP Request / Set node] → [easybits Extractor]
  ```

  Extractor settings:
  - **Input Type**: Data URLs
  - **Data URL Field**: `dataUrl` (or whatever field contains the Data URL in your JSON)

  The JSON item should look like:

  ```json
  {
    "dataUrl": "data:image/png;base64,iVBORw0KGgo..."
  }
  ```

  The field can also contain an **array** of Data URLs:

  ```json
  {
    "dataUrl": [
      "data:image/jpeg;base64,/9j/4AAQ...",
      "data:image/jpeg;base64,JVBERi0..."
    ]
  }
  ```

  ### Read a Data URL from a nested JSON field

  If the Data URL is nested inside the JSON structure, use dot notation in the **Data URL Field** parameter.

  For this JSON:

  ```json
  {
    "response": {
      "attachments": [
        { "url": "data:image/png;base64,iVBORw0KGgo..." }
      ]
    }
  }
  ```

  Set **Data URL Field** to `response.attachments.0.url`.

  ### Mix binary files and Data URLs

  Use **Auto** to collect from both sources at once.

  ```
  [Read Binary File] ──┐
                        ├──→ [Merge] → [easybits Extractor]
  [HTTP Request (JSON)] ┘
  ```

  Extractor settings:
  - **Input Type**: Auto
  - **Data URL Field**: the field name for items that carry Data URLs

  Binary attachments are converted to Data URLs automatically; JSON Data URLs are passed through as-is. Everything is sent in one API call.

  ## Compatibility

  Requires n8n v0.187 or later (community node support).

  ## Resources

  - [Easybits Extractor documentation](https://extractor.easybits.tech/documentation)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Sends documents to the Easybits Extractor API to perform structured data extraction from images and PDFs, returning strictly typed JSON output.","capabilities":["Extract structured data from PDF, JPEG, and PNG files","Accept input as binary attachments, base64 Data URLs, or mixed","Support nested JSON field paths for Data URL extraction","Process multiple files in a single API call","Return strictly typed JSON based on predefined extraction schemas"],"authentication":"API key required (combined with Pipeline ID in credentials)","commonUseCases":["Automating accounting and order processing from invoices","Digital document archiving and classification","Claims processing and FNOL capture for insurers","Extracting critical findings from medical reports and prescriptions"],"limitations":["Only supports JPEG, PNG, and PDF file formats; other types are rejected","Requires a predefined extraction schema created on the Easybits platform"],"relatedNodes":["Read Binary File","HTTP Request","Set","Read Binary Files (loop)"]}


node_type: @cradl/n8n-nodes-cradlai.cradlAi
package_name: @cradl/n8n-nodes-cradlai
display_name: Cradl AI
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: augustak
author_github_url: https://github.com/CradlAI/n8n-nodes-cradlai.git
npm_package_name: @cradl/n8n-nodes-cradlai
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:33.740Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Document processing AI agents you can trust. Run production-grade agents that reliably extract and validate data, with built-in guardrails and human-in-the-loop exception handling.

npm_readme:
  # @cradl/n8n-nodes-cradlai

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

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

  ## Cradl AI

  Document processing AI agents you can trust. Run production-grade agents that reliably extract and validate data, with built-in guardrails and human-in-the-loop exception handling.

  ## Overview

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

  Alternatively, for local development:

  1. Clone this repository
  2. Run `npm install` to install dependencies
  3. Run `npm run build` to compile the TypeScript code
  4. Link the node to your n8n instance or copy the built files to your custom nodes directory

  ## Operations

  ### Cradl AI Node

  The Cradl AI node provides intelligent document processing capabilities:

  - **Extract Data From Document**: Process documents using AI-powered agents
    - Upload documents directly from workflow binary data or reference existing documents
    - Configure custom variables to pass context and metadata
    - Optionally wait for processing completion with automatic webhook handling
    - Support for human-in-the-loop review workflows
    - Secure HMAC signature verification for webhook callbacks

  ### Cradl AI Trigger Node

  The trigger node enables event-driven workflows based on Cradl AI processing:

  - **Webhook Trigger**: Respond to document processing events
    - Automatic webhook registration and management
    - Receive notifications when processing completes or requires human intervention
    - Configurable HMAC verification for secure callbacks
    - Seamless integration with Cradl AI workflows

  ## Credentials

  This node requires OAuth2 authentication with Cradl AI.

  ### Setup Instructions

  1. **Locate OAuth2 credentials in Cradl AI:**
     - Navigate to [https://rc.app.cradl.ai](https://rc.app.cradl.ai)
     - Go to Account Settings ⮕ API
     - Locate the Client ID and Client Secret under API credentials

  2. **Configure Credentials in n8n:**
     - Create new credentials of type **Cradl AI API**
     - Enter your Client ID and Client Secret
     - The Authorization URL, Token URL, Scope, and Audience are pre-configured
     - Click **Connect my account** and authorize the application

  3. **Security:**
     - Client Secret is also used as the default HMAC secret for webhook verification
     - Store credentials securely and rotate them periodically
     - Use custom HMAC secrets in production for enhanced security

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n versions: 1.x
  - Node version: Requires Node.js 18 or higher

  ## Usage

  ### Extract Data From Documents

  1. Add the **Cradl AI** node to your workflow
  2. Select **Extract Data From Document** operation
  3. Configure the node:
     - **Agent**: Choose from your configured Cradl AI agents (dynamically loaded)
     - **Document Source**:
       - Upload new: Specify binary data property from previous node
       - Use existing: Select a previously uploaded document for testing
     - **Wait for Results**: Enable to pause workflow until processing completes
     - **Variables**: Pass custom JSON data to your agent workflow
  4. Advanced options (when waiting for results):
     - **Resume URL Variable Name**: Customize the webhook variable name (default: `n8nResumeUrl`)
     - **HMAC Secret**: Override default secret for webhook signature verification if needed

  The node will create an agent run, upload the document, and either return immediately or wait for processing completion based on your configuration.

  ### Working with Binary Data

  The node accepts document data from any source that provides binary output:

  ```
  HTTP Request ⮕ Cradl AI
  Webhook ⮕ Cradl AI
  Read Binary File ⮕ Cradl AI
  ```

  Specify the binary property name (e.g., `data`) in the **Document Binary Data** field.

  ### Asynchronous Processing

  When **Wait for Results** is disabled:
  - The workflow continues immediately after submitting the document
  - The node returns the agent run details
  - Results must be retrieved separately or handled via the Cradl AI Trigger node

  When **Wait for Results** is enabled:
  - The workflow pauses at the node
  - A webhook is automatically configured on your Cradl AI agent
  - Execution resumes when processing completes or human review is finished
  - The node outputs the final extracted data

  ### Example Workflows

  **Synchronous Document Processing:**
  ```
  Manual Trigger ⮕ Read Binary File ⮕ Cradl AI (wait enabled) ⮕ Send Email
  ```

  **Asynchronous Processing with Trigger:**
  ```
  Workflow 1: Webhook ⮕ Cradl AI (wait disabled) ⮕ Store Run ID

  Workflow 2: Cradl AI Trigger ⮕ Process Results ⮕ Update Database
  ```

  **Batch Processing:**
  ```
  Schedule ⮕ List Files ⮕ Loop Over Items ⮕ Cradl AI ⮕ Aggregate Results
  ```

  ## Resources

  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Cradl AI Documentation](https://docs.cradl.ai)
  * [Cradl AI API Reference](https://docs.cradl.ai/api-reference)
  * [Cradl AI Platform](https://rc.app.cradl.ai)

  ## Support

  For issues related to this n8n node, please open an issue in this repository.

  For Cradl AI platform support, contact [support@cradl.ai](mailto:support@cradl.ai).

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Enables intelligent document processing and data extraction using Cradl AI agents within n8n workflows, featuring built-in guardrails and human-in-the-loop exception handling.","capabilities":["Extract structured data from uploaded documents using AI agents","Process documents via binary data input or reference existing documents","Support for synchronous processing with automatic webhook handling","Asynchronous processing with event-driven triggers","Human-in-the-loop review workflows for exception handling","Custom variable injection for agent context and metadata","Secure HMAC signature verification for webhook callbacks","Automatic webhook registration and management"],"authentication":"OAuth2","commonUseCases":["Automated invoice and receipt data extraction","Document validation with human review fallback","Batch processing of large document volumes","Event-driven workflows triggered by document processing completion"],"limitations":["Requires Node.js 18 or higher","Minimum n8n version 1.0.0 required","Webhook callbacks rely on external Cradl AI platform configuration"],"relatedNodes":["Webhook","Read Binary File","HTTP Request","Manual Trigger","Schedule"]}


node_type: @cradl/n8n-nodes-cradlai.cradlAiTrigger
package_name: @cradl/n8n-nodes-cradlai
display_name: Cradl AI Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: augustak
author_github_url: https://github.com/CradlAI/n8n-nodes-cradlai.git
npm_package_name: @cradl/n8n-nodes-cradlai
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:33.741Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Document processing AI agents you can trust. Run production-grade agents that reliably extract and validate data, with built-in guardrails and human-in-the-loop exception handling.

npm_readme:
  # @cradl/n8n-nodes-cradlai

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

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

  ## Cradl AI

  Document processing AI agents you can trust. Run production-grade agents that reliably extract and validate data, with built-in guardrails and human-in-the-loop exception handling.

  ## Overview

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

  Alternatively, for local development:

  1. Clone this repository
  2. Run `npm install` to install dependencies
  3. Run `npm run build` to compile the TypeScript code
  4. Link the node to your n8n instance or copy the built files to your custom nodes directory

  ## Operations

  ### Cradl AI Node

  The Cradl AI node provides intelligent document processing capabilities:

  - **Extract Data From Document**: Process documents using AI-powered agents
    - Upload documents directly from workflow binary data or reference existing documents
    - Configure custom variables to pass context and metadata
    - Optionally wait for processing completion with automatic webhook handling
    - Support for human-in-the-loop review workflows
    - Secure HMAC signature verification for webhook callbacks

  ### Cradl AI Trigger Node

  The trigger node enables event-driven workflows based on Cradl AI processing:

  - **Webhook Trigger**: Respond to document processing events
    - Automatic webhook registration and management
    - Receive notifications when processing completes or requires human intervention
    - Configurable HMAC verification for secure callbacks
    - Seamless integration with Cradl AI workflows

  ## Credentials

  This node requires OAuth2 authentication with Cradl AI.

  ### Setup Instructions

  1. **Locate OAuth2 credentials in Cradl AI:**
     - Navigate to [https://rc.app.cradl.ai](https://rc.app.cradl.ai)
     - Go to Account Settings ⮕ API
     - Locate the Client ID and Client Secret under API credentials

  2. **Configure Credentials in n8n:**
     - Create new credentials of type **Cradl AI API**
     - Enter your Client ID and Client Secret
     - The Authorization URL, Token URL, Scope, and Audience are pre-configured
     - Click **Connect my account** and authorize the application

  3. **Security:**
     - Client Secret is also used as the default HMAC secret for webhook verification
     - Store credentials securely and rotate them periodically
     - Use custom HMAC secrets in production for enhanced security

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n versions: 1.x
  - Node version: Requires Node.js 18 or higher

  ## Usage

  ### Extract Data From Documents

  1. Add the **Cradl AI** node to your workflow
  2. Select **Extract Data From Document** operation
  3. Configure the node:
     - **Agent**: Choose from your configured Cradl AI agents (dynamically loaded)
     - **Document Source**:
       - Upload new: Specify binary data property from previous node
       - Use existing: Select a previously uploaded document for testing
     - **Wait for Results**: Enable to pause workflow until processing completes
     - **Variables**: Pass custom JSON data to your agent workflow
  4. Advanced options (when waiting for results):
     - **Resume URL Variable Name**: Customize the webhook variable name (default: `n8nResumeUrl`)
     - **HMAC Secret**: Override default secret for webhook signature verification if needed

  The node will create an agent run, upload the document, and either return immediately or wait for processing completion based on your configuration.

  ### Working with Binary Data

  The node accepts document data from any source that provides binary output:

  ```
  HTTP Request ⮕ Cradl AI
  Webhook ⮕ Cradl AI
  Read Binary File ⮕ Cradl AI
  ```

  Specify the binary property name (e.g., `data`) in the **Document Binary Data** field.

  ### Asynchronous Processing

  When **Wait for Results** is disabled:
  - The workflow continues immediately after submitting the document
  - The node returns the agent run details
  - Results must be retrieved separately or handled via the Cradl AI Trigger node

  When **Wait for Results** is enabled:
  - The workflow pauses at the node
  - A webhook is automatically configured on your Cradl AI agent
  - Execution resumes when processing completes or human review is finished
  - The node outputs the final extracted data

  ### Example Workflows

  **Synchronous Document Processing:**
  ```
  Manual Trigger ⮕ Read Binary File ⮕ Cradl AI (wait enabled) ⮕ Send Email
  ```

  **Asynchronous Processing with Trigger:**
  ```
  Workflow 1: Webhook ⮕ Cradl AI (wait disabled) ⮕ Store Run ID

  Workflow 2: Cradl AI Trigger ⮕ Process Results ⮕ Update Database
  ```

  **Batch Processing:**
  ```
  Schedule ⮕ List Files ⮕ Loop Over Items ⮕ Cradl AI ⮕ Aggregate Results
  ```

  ## Resources

  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Cradl AI Documentation](https://docs.cradl.ai)
  * [Cradl AI API Reference](https://docs.cradl.ai/api-reference)
  * [Cradl AI Platform](https://rc.app.cradl.ai)

  ## Support

  For issues related to this n8n node, please open an issue in this repository.

  For Cradl AI platform support, contact [support@cradl.ai](mailto:support@cradl.ai).

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Enables event-driven workflows by responding to document processing events from Cradl AI, including completion notifications and human-in-the-loop exceptions.","capabilities":["Webhook trigger for document processing events","Automatic webhook registration and management","Receive notifications when processing completes","Handle human intervention exceptions","Configurable HMAC verification for secure callbacks"],"authentication":"OAuth2","commonUseCases":["Process documents asynchronously and react to completion events","Handle human-in-the-loop review workflows","Integrate document extraction results into downstream workflows"],"limitations":["Requires Node.js 18 or higher","Minimum n8n version 1.0.0 required"],"relatedNodes":["Cradl AI","Read Binary File","HTTP Request","Webhook"]}


node_type: n8n-nodes-loops.loopsTrigger
package_name: n8n-nodes-loops
display_name: Loops Trigger
description: Starts the workflow when Loops sends a webhook event
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: fredfrom
author_github_url: https://github.com/fredfrom/
npm_package_name: n8n-nodes-loops
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:33.742Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-loops

  This is an n8n community node for [Loops](https://loops.so) — the email platform for modern SaaS. It lets you manage contacts, send events, deliver transactional emails, and receive webhooks directly from your n8n workflows.

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

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

  ## Installation

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

  **npm package name:** `n8n-nodes-loops`

  ### Self-hosted

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-loops` and confirm

  ### Docker

  Mount your custom nodes directory into the container:

  ```yaml
  volumes:
    - ~/.n8n:/home/node/.n8n
  ```

  Then install the package inside `~/.n8n/nodes/`:

  ```bash
  cd ~/.n8n/nodes
  npm install n8n-nodes-loops
  ```

  Restart n8n to load the new nodes.

  ## Operations

  ### Loops (Action Node)

  | Resource | Operation | Description |
  |---|---|---|
  | **API Key** | Test | Validate that the API key is valid |
  | **Contact** | Create | Create a new contact |
  | **Contact** | Delete | Delete a contact by email or user ID |
  | **Contact** | Find | Find a contact by email or user ID |
  | **Contact** | Update | Update an existing contact |
  | **Contact Property** | Create | Create a custom contact property |
  | **Contact Property** | List | List all contact properties |
  | **Dedicated Sending IP** | List | Retrieve dedicated sending IP addresses |
  | **Event** | Send | Send an event with properties and mailing list updates |
  | **Mailing List** | List | List all mailing lists |
  | **Transactional Email** | List | List published transactional email templates |
  | **Transactional Email** | Send | Send a transactional email with variables and attachments |

  ### Loops Trigger (Webhook Node)

  Starts workflows when Loops sends webhook events. Supports all 17 event types:

  - **Contact events:** created, deleted, unsubscribed, mailing list subscribed/unsubscribed
  - **Email send events:** campaign sent, loop sent, transactional sent
  - **Email delivery events:** delivered, soft bounced, hard bounced
  - **Email engagement events:** opened, clicked, unsubscribed, resubscribed, spam reported
  - **Test event:** for verifying webhook configuration

  The trigger includes HMAC-SHA256 signature verification with replay attack protection.

  ## Credentials

  ### Loops API

  Used by the **Loops** action node.

  1. Log into [Loops](https://app.loops.so)
  2. Go to **Settings > API**
  3. Copy your API key
  4. In n8n, create a new **Loops API** credential and paste the key

  ### Loops Webhook API

  Used by the **Loops Trigger** node.

  1. In your Loops dashboard, go to **Settings > Webhooks**
  2. Add your n8n webhook URL (shown in the trigger node's **Webhook URLs** section)
  3. Enable the events you want to receive
  4. Copy the **Signing Secret**
  5. In n8n, create a new **Loops Webhook API** credential and paste the signing secret

  The signing secret is optional but recommended for production use. Without it, signature verification is skipped.

  ## Example Workflows

  ### New signup: create contact and send event

  1. **Webhook** node receives a signup payload
  2. **Loops** node — Contact > Create (email, firstName, lastName)
  3. **Loops** node — Event > Send (eventName: `signup`, email)

  ### Stripe cancellation: update contact for win-back

  1. **Stripe Trigger** node fires on `customer.subscription.deleted`
  2. **Loops** node — Contact > Update (email, subscribed: false)
  3. Loops triggers a win-back automation based on the contact update

  ## Rate Limits

  The Loops API allows 10 requests per second. The node surfaces 429 errors with a clear message. Use n8n's retry-on-failure setting to handle bursts.

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Tested with:** n8n 1.91.3 (Docker)
  - Works with n8n Cloud, self-hosted, and Docker deployments

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Loops API Reference](https://loops.so/docs/api-reference)
  - [Loops Webhooks Documentation](https://loops.so/docs/webhooks)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Loops Trigger node starts n8n workflows when Loops sends webhook events, supporting all 17 event types including contact changes, email sends, delivery status, and engagement metrics.","capabilities":["Start workflows on contact events (created, deleted, unsubscribed, mailing list subscribed/unsubscribed)","Start workflows on email send events (campaign sent, loop sent, transactional sent)","Start workflows on email delivery events (delivered, soft bounced, hard bounced)","Start workflows on email engagement events (opened, clicked, unsubscribed, resubscribed, spam reported)","Support for test events to verify webhook configuration","HMAC-SHA256 signature verification with replay attack protection"],"authentication":"API key required (Loops Webhook API signing secret)","commonUseCases":["Trigger automations when a new contact is created or unsubscribed","Send win-back campaigns when a contact is deleted or unsubscribed","Log email engagement metrics (opens, clicks) to a database","Handle email delivery failures (bounces) by updating contact status"],"limitations":["Signature verification is skipped if the signing secret is not configured"],"relatedNodes":["Loops","Webhook"]}


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

updated_at: 2026-07-14 14:40:33
author_name: fredfrom
author_github_url: https://github.com/fredfrom/
npm_package_name: n8n-nodes-loops
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:33.743Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "API Key",
          "value": "apiKey"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Property",
          "value": "contactProperty"
        },
        {
          "name": "Dedicated Sending IP",
          "value": "dedicatedSendingIp"
        },
        {
          "name": "Event",
          "value": "event"
        },
        {
          "name": "Mailing List",
          "value": "mailingList"
        },
        {
          "name": "Transactional Email",
          "value": "transactionalEmail"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "test",
      "options": [
        {
          "name": "Test",
          "value": "test",
          "action": "Test API key",
          "description": "Validate that the API key is valid"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "apiKey"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact by email or user ID"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a contact",
          "description": "Find a contact by email or user ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact property",
          "description": "Create a custom contact property"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List contact properties",
          "description": "List all contact properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactProperty"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List dedicated sending ips",
          "description": "Retrieve dedicated sending IP addresses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dedicatedSendingIp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send an event",
          "description": "Send an event for a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List mailing lists",
          "description": "List all mailing lists"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mailingList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List transactional emails",
          "description": "List transactional email templates"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a transactional email",
          "description": "Send a transactional email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transactionalEmail"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Test",
      "value": "test",
      "action": "Test API key",
      "description": "Validate that the API key is valid",
      "resource": "apiKey"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact by email or user ID",
      "resource": "contact"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a contact",
      "description": "Find a contact by email or user ID",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact property",
      "description": "Create a custom contact property",
      "resource": "contactProperty"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List contact properties",
      "description": "List all contact properties",
      "resource": "contactProperty"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List dedicated sending ips",
      "description": "Retrieve dedicated sending IP addresses",
      "resource": "dedicatedSendingIp"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send an event",
      "description": "Send an event for a contact",
      "resource": "event"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List mailing lists",
      "description": "List all mailing lists",
      "resource": "mailingList"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List transactional emails",
      "description": "List transactional email templates",
      "resource": "transactionalEmail"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a transactional email",
      "description": "Send a transactional email",
      "resource": "transactionalEmail"
    }
  ]

npm_readme:
  # n8n-nodes-loops

  This is an n8n community node for [Loops](https://loops.so) — the email platform for modern SaaS. It lets you manage contacts, send events, deliver transactional emails, and receive webhooks directly from your n8n workflows.

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

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

  ## Installation

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

  **npm package name:** `n8n-nodes-loops`

  ### Self-hosted

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-loops` and confirm

  ### Docker

  Mount your custom nodes directory into the container:

  ```yaml
  volumes:
    - ~/.n8n:/home/node/.n8n
  ```

  Then install the package inside `~/.n8n/nodes/`:

  ```bash
  cd ~/.n8n/nodes
  npm install n8n-nodes-loops
  ```

  Restart n8n to load the new nodes.

  ## Operations

  ### Loops (Action Node)

  | Resource | Operation | Description |
  |---|---|---|
  | **API Key** | Test | Validate that the API key is valid |
  | **Contact** | Create | Create a new contact |
  | **Contact** | Delete | Delete a contact by email or user ID |
  | **Contact** | Find | Find a contact by email or user ID |
  | **Contact** | Update | Update an existing contact |
  | **Contact Property** | Create | Create a custom contact property |
  | **Contact Property** | List | List all contact properties |
  | **Dedicated Sending IP** | List | Retrieve dedicated sending IP addresses |
  | **Event** | Send | Send an event with properties and mailing list updates |
  | **Mailing List** | List | List all mailing lists |
  | **Transactional Email** | List | List published transactional email templates |
  | **Transactional Email** | Send | Send a transactional email with variables and attachments |

  ### Loops Trigger (Webhook Node)

  Starts workflows when Loops sends webhook events. Supports all 17 event types:

  - **Contact events:** created, deleted, unsubscribed, mailing list subscribed/unsubscribed
  - **Email send events:** campaign sent, loop sent, transactional sent
  - **Email delivery events:** delivered, soft bounced, hard bounced
  - **Email engagement events:** opened, clicked, unsubscribed, resubscribed, spam reported
  - **Test event:** for verifying webhook configuration

  The trigger includes HMAC-SHA256 signature verification with replay attack protection.

  ## Credentials

  ### Loops API

  Used by the **Loops** action node.

  1. Log into [Loops](https://app.loops.so)
  2. Go to **Settings > API**
  3. Copy your API key
  4. In n8n, create a new **Loops API** credential and paste the key

  ### Loops Webhook API

  Used by the **Loops Trigger** node.

  1. In your Loops dashboard, go to **Settings > Webhooks**
  2. Add your n8n webhook URL (shown in the trigger node's **Webhook URLs** section)
  3. Enable the events you want to receive
  4. Copy the **Signing Secret**
  5. In n8n, create a new **Loops Webhook API** credential and paste the signing secret

  The signing secret is optional but recommended for production use. Without it, signature verification is skipped.

  ## Example Workflows

  ### New signup: create contact and send event

  1. **Webhook** node receives a signup payload
  2. **Loops** node — Contact > Create (email, firstName, lastName)
  3. **Loops** node — Event > Send (eventName: `signup`, email)

  ### Stripe cancellation: update contact for win-back

  1. **Stripe Trigger** node fires on `customer.subscription.deleted`
  2. **Loops** node — Contact > Update (email, subscribed: false)
  3. Loops triggers a win-back automation based on the contact update

  ## Rate Limits

  The Loops API allows 10 requests per second. The node surfaces 429 errors with a clear message. Use n8n's retry-on-failure setting to handle bursts.

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Tested with:** n8n 1.91.3 (Docker)
  - Works with n8n Cloud, self-hosted, and Docker deployments

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Loops API Reference](https://loops.so/docs/api-reference)
  - [Loops Webhooks Documentation](https://loops.so/docs/webhooks)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Loops email platform, allowing users to manage contacts, send events, deliver transactional emails, and receive webhook notifications directly within n8n workflows.","capabilities":["Create new contacts","Delete contacts by email or user ID","Find contacts by email or user ID","Update existing contacts","Create custom contact properties","List all contact properties","Retrieve dedicated sending IP addresses","Send events with properties and mailing list updates","List all mailing lists","List published transactional email templates"],"authentication":"API key required for actions; Signing secret recommended for webhooks","commonUseCases":["Automate contact creation when new users sign up","Trigger win-back campaigns when subscriptions are cancelled","Send transactional emails with dynamic variables","Monitor email delivery and engagement metrics","Synchronize user data between external systems and Loops"],"limitations":["Rate limited to 10 requests per second","Signature verification for webhooks is optional and may be skipped without a signing secret","Requires manual configuration of webhook URLs in the Loops dashboard"],"relatedNodes":["Webhook","Stripe Trigger"]}


node_type: @qualytics/n8n-nodes-qualytics.qualyticsTrigger
package_name: @qualytics/n8n-nodes-qualytics
display_name: Qualytics Trigger
description: Triggers workflow when a Qualytics Flow Action fires
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ets
author_github_url: https://github.com/Qualytics/n8n-node-qualytics.git
npm_package_name: @qualytics/n8n-nodes-qualytics
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.745Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-qualytics

  This is an n8n community node for [Qualytics](https://qualytics.ai/), a data quality platform. It lets you trigger n8n workflows when Qualytics Flow Actions fire.

  [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)
  [Setup](#setup)
  [Resources](#resources)

  ## Installation

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

  ## Operations

  ### Qualytics Trigger

  A webhook trigger node that starts your workflow when Qualytics sends a Flow Action event.

  **Trigger Events:**
  - Flow triggered (anomaly detection, quality checks, etc.)

  **Available Data:**
  - Flow ID and name
  - Datastore ID and name
  - Trigger type and timestamp
  - Anomaly details (ID, type, description, affected fields)
  - Container information
  - Quality check results
  - Link to Qualytics UI

  ## Credentials

  ### Webhook Secret (Optional)

  For additional security, you can configure a shared secret to validate incoming webhook requests:

  1. In n8n, set Authentication to "Webhook Secret"
  2. Enter a secret value in the Qualytics API credentials
  3. Configure the same secret in your Qualytics n8n integration
  4. Qualytics will send the secret in the `X-Qualytics-Secret` header

  If the secrets do not match, the webhook request will be rejected with a 401 Unauthorized response.

  ## Compatibility

  Compatible with n8n version 1.60.0 or later.

  ## Setup

  ### In Qualytics

  1. Navigate to Settings > Integrations
  2. Add a new n8n integration
  3. Enter the webhook URL from your n8n Qualytics Trigger node
  4. (Optional) Set a webhook secret for authentication
  5. Save the integration

  ### In n8n

  1. Add a "Qualytics Trigger" node to your workflow
  2. Copy the webhook URL shown in the node
  3. (Optional) Configure webhook secret authentication
  4. (Optional) Filter to specific event types
  5. Activate your workflow

  ### In Your Qualytics Flow

  1. Edit your Flow
  2. Add a new Action
  3. Select "Notification" action type
  4. Choose your n8n integration
  5. Save the Flow

  ## Example Workflow

  ```
  [Qualytics Trigger] → [IF anomaly count > 10] → [Slack] Send alert
                                                → [Email] Send report
  ```

  ## Payload Structure

  The Qualytics Trigger node receives the following JSON payload:

  ```json
  {
    "event": "qualytics.flow.triggered",
    "flow": {
      "id": 123,
      "name": "My Flow"
    },
    "datastore": {
      "id": 456,
      "name": "Production DB"
    },
    "trigger": {
      "type": "Anomaly",
      "timestamp": "2026-01-25T12:00:00Z"
    },
    "context": {
      "anomalies": [
        {
          "id": 1,
          "type": "unexpected_value",
          "description": "Value outside expected range",
          "container": "orders",
          "field": "amount",
          "created_at": "2026-01-25T11:59:00Z"
        }
      ],
      "containers": [
        {
          "id": 1,
          "name": "orders"
        }
      ],
      "quality_checks": [
        {
          "id": 1,
          "name": "Amount Range Check",
          "status": "failed"
        }
      ]
    },
    "target_link": "https://demo.qualytics.io/..."
  }
  ```

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Qualytics documentation](https://userguide.qualytics.io/)
  * [Qualytics n8n integration guide](https://userguide.qualytics.io/flows/workflow/#n8n)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when Qualytics Flow Actions fire, such as anomaly detections or quality check failures.","capabilities":["Start workflows on Qualytics Flow triggered events","Access Flow ID and name in workflow data","Access Datastore ID and name in workflow data","Retrieve trigger type and timestamp","Extract anomaly details including ID, type, description, and affected fields","Access container information","Retrieve quality check results","Provide link to Qualytics UI for context"],"authentication":"Webhook Secret (optional)","commonUseCases":["Alerting teams on data quality anomalies","Automated reporting on failed quality checks","Triggering remediation workflows based on data issues"],"limitations":["Requires Qualytics integration setup in both Qualytics and n8n","Webhook secret configuration is optional and may leave the webhook open if not set"],"relatedNodes":[]}


node_type: @youdotcom-oss/n8n-nodes-youdotcom.youDotCom
package_name: @youdotcom-oss/n8n-nodes-youdotcom
display_name: You.com
description: Search the web, extract content from URLs, and run multi-step research using You.com APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: tyleratydc
author_github_url: https://github.com/youdotcom-oss/n8n-nodes-youdotcom.git
npm_package_name: @youdotcom-oss/n8n-nodes-youdotcom
npm_version: 0.2.9
community_fetched_at: 2026-07-14T14:40:33.746Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Contents",
          "value": "contents",
          "action": "Extract content from web pages",
          "description": "Extract content from one or more URLs"
        },
        {
          "name": "Research",
          "value": "research",
          "action": "Research a complex question",
          "description": "Get a comprehensive, cited answer to a complex question"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search the web and news",
          "description": "Search the web and news using You.com"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Contents",
      "value": "contents",
      "action": "Extract content from web pages",
      "description": "Extract content from one or more URLs"
    },
    {
      "name": "Research",
      "value": "research",
      "action": "Research a complex question",
      "description": "Get a comprehensive, cited answer to a complex question"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search the web and news",
      "description": "Search the web and news using You.com"
    }
  ]

npm_readme:
  # @youdotcom-oss/n8n-nodes-youdotcom

  Add real time web search, page content extraction, and AI powered deep research to your n8n workflows with the [You.com](https://you.com) API.

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

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

  ## Installation

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

  ## Operations

  ### Search

  Search the web and news with up to date results. Supports advanced query operators (`site:`, `filetype:`, `+`, `-`, `AND`, `OR`, `NOT`) and geographic/language filtering.

  Great for monitoring mentions, pulling recent news, or feeding live data into AI agent workflows.

  | Parameter | Description |
  |-----------|-------------|
  | Query | The search query (required) |
  | Count | Max results per section, 1-100 (default: 10) |
  | Country | Two-letter country code to focus results geographically |
  | Freshness | Filter by recency: day, week, month, or year |
  | Language | BCP 47 language code for results (default: EN) |
  | Livecrawl | Fetch full page content for web, news, or all results |
  | Livecrawl Format | Format for livecrawled content: markdown or HTML |
  | Offset | Pagination offset, 0-9 |
  | Safe Search | Content filter: off, moderate, or strict |

  ### Get Contents

  Extract clean, structured content from one or more web pages. Returns page text as markdown or HTML, plus metadata like JSON-LD, OpenGraph, and Twitter Cards.

  Useful for scraping product pages, pulling article text, or extracting structured data from any URL.

  | Parameter | Description |
  |-----------|-------------|
  | URLs | Comma-separated list of URLs to extract (required) |
  | Formats | Output formats: markdown, HTML, and/or metadata (JSON-LD, OpenGraph, Twitter Cards) |
  | Crawl Timeout | Timeout in seconds for page crawling, 1-60 (default: 30) |

  ### Research

  Get a comprehensive, cited answer to a complex question. The Research API searches the web, reads multiple sources, and synthesizes a detailed markdown response with inline numbered citations.

  Perfect for competitive analysis, market research, technical due diligence, or any question that needs more than a simple search result.

  | Parameter | Description |
  |-----------|-------------|
  | Input | The research question (required) |
  | Research Effort | Controls depth and speed (see below, default: standard) |

  **Research Effort levels:**

  | Level | Description |
  |-------|-------------|
  | Lite | Quick answers for straightforward questions |
  | Standard | Balanced speed and depth (default) |
  | Deep | More time researching and cross-referencing sources |
  | Exhaustive | Most thorough option for complex research tasks |

  ## Credentials

  1. Go to [you.com/platform/api-keys](https://you.com/platform/api-keys) to get an API key
  2. In n8n, go to Credentials and create a new "You.com API" credential
  3. Paste your API key and save

  ## Usage

  1. Add the "You.com" node to your workflow
  2. Select an operation (Search, Get Contents, or Research)
  3. Configure the parameters for your chosen operation
  4. Run the workflow

  This node also works as a tool for [AI agents in n8n](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/). Connect it to an agent node and let the agent decide when to search the web, extract page content, or run deep research.

  ## Resources

  - [You.com API docs](https://docs.you.com/)
  - [Search API reference](https://docs.you.com/api-reference/search)
  - [Contents API reference](https://docs.you.com/api-reference/contents)
  - [Research API reference](https://docs.you.com/api-reference/research)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Enables real-time web search, page content extraction, and AI-powered deep research using You.com APIs within n8n workflows.","capabilities":["Web search with advanced query operators (site:, filetype:, etc.)","Geographic and language filtering for search results","Freshness filtering (day, week, month, year)","Live crawling of full page content in markdown or HTML","Extraction of structured metadata (JSON-LD, OpenGraph, Twitter Cards)","Multi-step research with cited answers and inline citations","Configurable research depth (Lite, Standard, Deep, Exhaustive)","Pagination support for search results"],"authentication":"API key required","commonUseCases":["Real-time news monitoring and mention tracking","Feeding live web data into AI agent workflows","Competitive analysis and market research","Technical due diligence with cited sources","Scraping and extracting structured data from web pages"],"limitations":[],"relatedNodes":["n8n-nodes-langchain.agent"]}


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-07-14 14:40:33
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-07-14T14:40:33.752Z
ai_summary_generated_at: 2026-05-02 08:57:17
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

ai_documentation_summary:
  {"purpose":"Enables n8n workflows to interact with the Personio HR platform via their v2 API, supporting both manual API calls and real-time event triggers.","capabilities":["Create, Get, Update, Delete Person records","Manage Employment records","Handle Absence Periods and Types","Manage Attendance Periods","Create and manage Projects with member operations","Download binary documents","Manage Compensation and Types","Retrieve Legal Entities","Register and manage webhooks for real-time event listening","Support custom attributes for dynamic personal data"],"authentication":"OAuth2 Client Credentials flow (requires Personio API Client ID and Client Secret)","commonUseCases":["Automatically trigger workflows when employee data changes in Personio","Sync Personio HR data into internal databases or analytics tools","Automate onboarding processes by creating employment records","Monitor project membership changes across the organization"],"limitations":["Compensation Create operation returns 403 Forbidden (Personio-side issue)","Cost Centers and Workplaces endpoints return 404 (not live in API)","No list endpoint exists for Org Units (requires pre-known ID)","Recruiting API is not included due to instability"],"relatedNodes":["Webhook","HTTP Request","n8n-nodes-personio-hr.personioHrTrigger"]}


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-07-14 14:40:33
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-07-14T14:40:33.754Z
ai_summary_generated_at: 2026-05-02 08:57:17
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

ai_documentation_summary:
  {"purpose":"Interact with the Personio HR platform v2 API to manage HR data such as employees, employment records, absences, projects, and documents.","capabilities":["Create, read, update, and delete person records","Manage employment records and attendance periods","Handle absence periods and types","Manage projects and project members","Download binary documents","Create and manage compensation records","Retrieve legal entities and organization data","Support for custom attributes (single and array values)","Real-time event triggers via webhooks for multiple resources","Cursor-based pagination with 'Return All' toggle"],"authentication":"OAuth2 Client Credentials (API Client ID and Client Secret)","commonUseCases":["Automating employee onboarding and profile updates","Tracking attendance and absence periods","Managing project assignments and team structures","Syncing HR data between Personio and other systems","Real-time notifications for HR events (e.g., new hire, contract change)"],"limitations":["Compensation Create operation returns 403 Forbidden (known Personio API issue)","Cost Centers and Workplaces endpoints return 404 (not live in API)","No list endpoint for Org Units (requires pre-known ID)","Recruiting API is not included due to instability"],"relatedNodes":[]}


node_type: n8n-nodes-instafill.instafillTrigger
package_name: n8n-nodes-instafill
display_name: Instafill.ai Trigger
description: Starts the workflow when an Instafill.ai event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: vladyslav-instafill
author_github_url: https://github.com/Instafill/n8n-nodes.git
npm_package_name: n8n-nodes-instafill
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:33.756Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-instafill

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-instafill.svg)](https://www.npmjs.com/package/n8n-nodes-instafill)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![n8n community](https://img.shields.io/badge/n8n-community--node-orange)](https://www.npmjs.com/package/n8n-nodes-instafill)

  This is a n8n community node. It lets you use [Instafill.ai](https://instafill.ai) in your n8n workflows.

  Instafill.ai is an AI-powered form automation platform. It fills PDF and Word forms in seconds — extracting fields, mapping your data semantically, and completing forms automatically. Used by legal, insurance, healthcare, and finance teams to eliminate manual data entry at scale.

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

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

  ## Installation

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

  ## Operations

  ### Instafill.ai (Action node)

  **Fill**

  - **Create** — Fill a PDF form with data from provided sources (file URLs, text) using AI.
  - **Get** — Retrieve the status of a form fill by its ID.

  **Form**

  - **Upload** — Upload a PDF form to your Instafill.ai workspace.
  - **Get Many** — Search for forms in your workspace by name.

  **Utility**

  - **Convert PDF** — Convert a flat (non-interactive) PDF into a fillable form. Returns a job ID to track the conversion.
  - **Get Conversion Status** — Check the status of a conversion job. Returns the result and a link to the fillable form when complete.
  - **Check If Flat** — Determine whether a PDF is already fillable or needs to be converted first.

  ### Instafill.ai Trigger

  - **Form Converted** — Starts when a flat-to-fillable PDF conversion completes.
  - **Form Filled** — Starts when a form has been filled with data.

  ## Credentials

  To authenticate with Instafill.ai, you need an API key.

  **Prerequisites:** An active [Instafill.ai](https://instafill.ai) account.

  You can find your API key in your [workspace API settings](https://instafill.ai/settings/workspace/api).

  **Setting up credentials in n8n:**

  1. In n8n, open **Credentials** and create a new credential of type **Instafill.ai API**.
  2. Paste your API key into the **API Key** field.
  3. Click **Save** — n8n will verify the key automatically.

  ## Example Workflows

  **Fill a form with data from a document:**

  1. **Instafill.ai (Fill > Create)** — Select a form from the dropdown, provide source file URLs or text data.
  2. **Wait** — Pause the workflow to allow processing.
  3. **Instafill.ai (Fill > Get)** — Pass the fill ID to check status and get the filled PDF URL.

  **Upload and convert a flat PDF:**

  1. **Read Binary File** — Load a PDF from disk or an HTTP request.
  2. **Instafill.ai (Form > Upload)** — Upload the PDF to your workspace.
  3. **Instafill.ai (Utility > Convert PDF)** — Send the PDF for conversion. Returns a job ID.
  4. **Instafill.ai (Utility > Get Conversion Status)** — Check if conversion is complete.

  **Use trigger nodes for automation:**

  1. **Instafill.ai Trigger (Form Filled)** — Starts the workflow when a form is filled with data.
  2. **Instafill.ai Trigger (Form Converted)** — Starts the workflow when a PDF conversion completes.

  ## Compatibility

  Tested against n8n version 1.x. No known incompatibilities.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Instafill.ai](https://instafill.ai)
  - [Instafill.ai API documentation](https://api.instafill.ai/swagger/index.html)

ai_documentation_summary:
  {"purpose":"Starts an n8n workflow automatically when specific events occur in an Instafill.ai account, such as a PDF conversion completing or a form being filled.","capabilities":["Start workflow on Form Converted event","Start workflow on Form Filled event"],"authentication":"API key required","commonUseCases":["Automate downstream processes when a PDF is converted to a fillable form","Trigger notifications or data entry workflows when a form is automatically filled"],"limitations":[],"relatedNodes":["Instafill.ai","Wait"]}


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

updated_at: 2026-07-14 14:40:33
author_name: vladyslav-instafill
author_github_url: https://github.com/Instafill/n8n-nodes.git
npm_package_name: n8n-nodes-instafill
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:33.757Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "form",
      "options": [
        {
          "name": "Fill",
          "value": "fill"
        },
        {
          "name": "Form",
          "value": "form"
        },
        {
          "name": "Utility",
          "value": "utility"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "@version": [
            2
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convertPdf",
      "options": [
        {
          "name": "Check If Flat",
          "value": "checkIfFlat",
          "action": "Check whether PDF form is flat or fillable",
          "description": "Check whether PDF form is flat or fillable"
        },
        {
          "name": "Convert PDF",
          "value": "convertPdf",
          "action": "Convert flat PDF form into a fillable one",
          "description": "Convert flat PDF form into a fillable one"
        },
        {
          "name": "Get Conversion Status",
          "value": "getConversionStatus",
          "action": "Get status of PDF conversion job",
          "description": "Get status of PDF conversion job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "@version": [
            1
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a fill from provided sources",
          "description": "Create a new fill for a form with data from provided sources"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get fill status by ID",
          "description": "Retrieve the status of a form fill by its ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fill"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many forms in workspace",
          "description": "Retrieve a list of forms matching a search query"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload PDF form to workspace",
          "description": "Upload a PDF form to your Instafill.ai workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "form"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convertPdf",
      "options": [
        {
          "name": "Check If Flat",
          "value": "checkIfFlat",
          "action": "Check whether PDF form is flat or fillable",
          "description": "Check whether PDF form is flat or fillable"
        },
        {
          "name": "Convert PDF",
          "value": "convertPdf",
          "action": "Convert flat PDF form into a fillable one",
          "description": "Convert flat PDF form into a fillable one"
        },
        {
          "name": "Get Conversion Status",
          "value": "getConversionStatus",
          "action": "Get status of PDF conversion job",
          "description": "Get status of PDF conversion job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "utility"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Check If Flat",
      "value": "checkIfFlat",
      "action": "Check whether PDF form is flat or fillable",
      "description": "Check whether PDF form is flat or fillable"
    },
    {
      "name": "Convert PDF",
      "value": "convertPdf",
      "action": "Convert flat PDF form into a fillable one",
      "description": "Convert flat PDF form into a fillable one"
    },
    {
      "name": "Get Conversion Status",
      "value": "getConversionStatus",
      "action": "Get status of PDF conversion job",
      "description": "Get status of PDF conversion job"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a fill from provided sources",
      "description": "Create a new fill for a form with data from provided sources",
      "resource": "fill"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get fill status by ID",
      "description": "Retrieve the status of a form fill by its ID",
      "resource": "fill"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many forms in workspace",
      "description": "Retrieve a list of forms matching a search query",
      "resource": "form"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload PDF form to workspace",
      "description": "Upload a PDF form to your Instafill.ai workspace",
      "resource": "form"
    },
    {
      "name": "Check If Flat",
      "value": "checkIfFlat",
      "action": "Check whether PDF form is flat or fillable",
      "description": "Check whether PDF form is flat or fillable",
      "resource": "utility"
    },
    {
      "name": "Convert PDF",
      "value": "convertPdf",
      "action": "Convert flat PDF form into a fillable one",
      "description": "Convert flat PDF form into a fillable one",
      "resource": "utility"
    },
    {
      "name": "Get Conversion Status",
      "value": "getConversionStatus",
      "action": "Get status of PDF conversion job",
      "description": "Get status of PDF conversion job",
      "resource": "utility"
    }
  ]

npm_readme:
  # n8n-nodes-instafill

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-instafill.svg)](https://www.npmjs.com/package/n8n-nodes-instafill)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![n8n community](https://img.shields.io/badge/n8n-community--node-orange)](https://www.npmjs.com/package/n8n-nodes-instafill)

  This is a n8n community node. It lets you use [Instafill.ai](https://instafill.ai) in your n8n workflows.

  Instafill.ai is an AI-powered form automation platform. It fills PDF and Word forms in seconds — extracting fields, mapping your data semantically, and completing forms automatically. Used by legal, insurance, healthcare, and finance teams to eliminate manual data entry at scale.

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

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

  ## Installation

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

  ## Operations

  ### Instafill.ai (Action node)

  **Fill**

  - **Create** — Fill a PDF form with data from provided sources (file URLs, text) using AI.
  - **Get** — Retrieve the status of a form fill by its ID.

  **Form**

  - **Upload** — Upload a PDF form to your Instafill.ai workspace.
  - **Get Many** — Search for forms in your workspace by name.

  **Utility**

  - **Convert PDF** — Convert a flat (non-interactive) PDF into a fillable form. Returns a job ID to track the conversion.
  - **Get Conversion Status** — Check the status of a conversion job. Returns the result and a link to the fillable form when complete.
  - **Check If Flat** — Determine whether a PDF is already fillable or needs to be converted first.

  ### Instafill.ai Trigger

  - **Form Converted** — Starts when a flat-to-fillable PDF conversion completes.
  - **Form Filled** — Starts when a form has been filled with data.

  ## Credentials

  To authenticate with Instafill.ai, you need an API key.

  **Prerequisites:** An active [Instafill.ai](https://instafill.ai) account.

  You can find your API key in your [workspace API settings](https://instafill.ai/settings/workspace/api).

  **Setting up credentials in n8n:**

  1. In n8n, open **Credentials** and create a new credential of type **Instafill.ai API**.
  2. Paste your API key into the **API Key** field.
  3. Click **Save** — n8n will verify the key automatically.

  ## Example Workflows

  **Fill a form with data from a document:**

  1. **Instafill.ai (Fill > Create)** — Select a form from the dropdown, provide source file URLs or text data.
  2. **Wait** — Pause the workflow to allow processing.
  3. **Instafill.ai (Fill > Get)** — Pass the fill ID to check status and get the filled PDF URL.

  **Upload and convert a flat PDF:**

  1. **Read Binary File** — Load a PDF from disk or an HTTP request.
  2. **Instafill.ai (Form > Upload)** — Upload the PDF to your workspace.
  3. **Instafill.ai (Utility > Convert PDF)** — Send the PDF for conversion. Returns a job ID.
  4. **Instafill.ai (Utility > Get Conversion Status)** — Check if conversion is complete.

  **Use trigger nodes for automation:**

  1. **Instafill.ai Trigger (Form Filled)** — Starts the workflow when a form is filled with data.
  2. **Instafill.ai Trigger (Form Converted)** — Starts the workflow when a PDF conversion completes.

  ## Compatibility

  Tested against n8n version 1.x. No known incompatibilities.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Instafill.ai](https://instafill.ai)
  - [Instafill.ai API documentation](https://api.instafill.ai/swagger/index.html)

ai_documentation_summary:
  {"purpose":"Interact with the Instafill.ai API to automate the filling of PDF and Word forms using AI, extract fields, and manage form conversions.","capabilities":["Fill PDF forms with data from file URLs or text","Retrieve form fill status by ID","Upload PDF forms to workspace","Search for forms by name","Convert flat PDFs into fillable forms","Check conversion job status","Determine if a PDF is already fillable","Trigger workflows when forms are filled","Trigger workflows when PDF conversions complete"],"authentication":"API key required","commonUseCases":["Automating data entry for legal, insurance, healthcare, and finance teams","Processing large volumes of forms to eliminate manual entry","Converting static PDF documents into interactive fillable forms","Integrating form filling into existing n8n workflows"],"limitations":["Requires an active Instafill.ai account and API key","Limited to n8n version 1.x compatibility"],"relatedNodes":["n8n-nodes-n8n","n8n-nodes-credentials"]}


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

updated_at: 2026-07-14 14:40:33
author_name: buddiesd
author_github_url: https://github.com/BuddiesD/
npm_package_name: n8n-nodes-tanss
npm_version: 1.1.22
community_fetched_at: 2026-07-14T14:40:33.759Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "availability",
      "options": [
        {
          "name": "Activity Feed",
          "value": "activityFeed"
        },
        {
          "name": "Availability",
          "value": "availability"
        },
        {
          "name": "Call",
          "value": "calls"
        },
        {
          "name": "Call User",
          "value": "callsuser"
        },
        {
          "name": "Callback",
          "value": "callbacks"
        },
        {
          "name": "Chat",
          "value": "chats"
        },
        {
          "name": "Checklist",
          "value": "checklists"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Company Category",
          "value": "companyCategories"
        },
        {
          "name": "Component",
          "value": "components"
        },
        {
          "name": "CPU",
          "value": "cpus"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Employee",
          "value": "employees"
        },
        {
          "name": "HDD Type",
          "value": "hddTypes"
        },
        {
          "name": "IP",
          "value": "ips"
        },
        {
          "name": "Mail",
          "value": "mails"
        },
        {
          "name": "Manufacturer",
          "value": "manufacturers"
        },
        {
          "name": "Operating System",
          "value": "operatingSystems"
        },
        {
          "name": "PC",
          "value": "pc"
        },
        {
          "name": "Periphery",
          "value": "peripheries"
        },
        {
          "name": "Remote Support",
          "value": "remoteSupports"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Service",
          "value": "services"
        },
        {
          "name": "Software License",
          "value": "softwareLicenses"
        },
        {
          "name": "Ticket",
          "value": "ticket"
        },
        {
          "name": "Ticket Content",
          "value": "ticketContent"
        },
        {
          "name": "Ticket List",
          "value": "ticketList"
        },
        {
          "name": "Ticket State",
          "value": "ticketStates"
        },
        {
          "name": "Timestamp",
          "value": "timestamps"
        }
      ],
      "description": "Select which TANSS API resource to interact with",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPcById",
      "options": [
        {
          "name": "Create PC",
          "value": "createPc",
          "action": "Creates a PC",
          "description": "Creates a new PC or server"
        },
        {
          "name": "Delete PC",
          "value": "deletePc",
          "action": "Deletes a PC",
          "description": "Deletes a PC or server"
        },
        {
          "name": "Get PC by ID",
          "value": "getPcById",
          "action": "Fetches a PC by ID",
          "description": "Fetches a PC or server by a given ID"
        },
        {
          "name": "List PCs",
          "value": "listPcs",
          "action": "List pcs",
          "description": "Gets a list of PCs or servers"
        },
        {
          "name": "Update PC",
          "value": "updatePc",
          "action": "Updates a PC",
          "description": "Updates a PC or server"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTicketById",
      "options": [
        {
          "name": "Create Comment",
          "value": "createComment",
          "action": "Creates a comment for a specific ticket",
          "description": "Creates a comment for a specific ticket"
        },
        {
          "name": "Create Ticket",
          "value": "createTicket",
          "action": "Creates a new ticket",
          "description": "Creates a new Ticket in TANSS"
        },
        {
          "name": "Delete Ticket",
          "value": "deleteTicket",
          "action": "Deletes a ticket",
          "description": "Deletes a ticket"
        },
        {
          "name": "Get Ticket by ID",
          "value": "getTicketById",
          "action": "Fetches a ticket by ID",
          "description": "Fetches a ticket by ID"
        },
        {
          "name": "Get Ticket History",
          "value": "getTicketHistory",
          "action": "Fetches the history of a ticket",
          "description": "Fetches the history of a ticket"
        },
        {
          "name": "Merge Tickets",
          "value": "mergeTickets",
          "action": "Merges one ticket into another",
          "description": "Merges one ticket into another"
        },
        {
          "name": "Update Ticket",
          "value": "updateTicket",
          "action": "Updates a ticket with the provided details",
          "description": "Updates a ticket with the provided details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createDomain",
      "options": [
        {
          "name": "Create Domain",
          "value": "createDomain",
          "action": "Creates a new domain",
          "description": "Creates a new Domain in TANSS"
        },
        {
          "name": "Get Domain by ID",
          "value": "getDomainById",
          "action": "Fetches a domain by ID",
          "description": "Fetches a domain by ID"
        },
        {
          "name": "Update Domain",
          "value": "updateDomain",
          "action": "Updates a domain",
          "description": "Updates a domain"
        },
        {
          "name": "Delete Domain",
          "value": "deleteDomain",
          "action": "Deletes a domain",
          "description": "Deletes a domain"
        },
        {
          "name": "List Domains By Company",
          "value": "listDomainsByCompany",
          "action": "Lists domains of a company",
          "description": "Lists domains for a company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "assignChecklist",
      "options": [
        {
          "name": "Assign Checklist",
          "value": "assignChecklist",
          "action": "Assigns a checklist to a ticket",
          "description": "Assigns a checklist to a ticket"
        },
        {
          "name": "Remove Checklist",
          "value": "removeChecklist",
          "action": "Removes a checklist assignment from a ticket",
          "description": "Removes a checklist assignment from a ticket"
        },
        {
          "name": "Get Assigned Checklists",
          "value": "getAssignedChecklists",
          "action": "Gets all checklists assigned to a ticket",
          "description": "Gets all checklists assigned to a ticket"
        },
        {
          "name": "Get Checklist Process",
          "value": "getChecklistProcess",
          "action": "Gets checklist details for processing within a ticket",
          "description": "Gets checklist details for processing within a ticket"
        },
        {
          "name": "Check Item",
          "value": "checkItem",
          "action": "Checks/unchecks an item",
          "description": "Checks or unchecks an item in a checklist"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "checklists"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTicketDocuments",
      "options": [
        {
          "name": "Get Ticket Documents",
          "value": "getTicketDocuments",
          "action": "Get ticket documents",
          "description": "Gets all documents attached to a ticket (list)"
        },
        {
          "name": "Get Ticket Document",
          "value": "getTicketDocument",
          "action": "Get a ticket document",
          "description": "Generates a one-time download URL for a specific ticket document"
        },
        {
          "name": "Get Ticket Images",
          "value": "getTicketImages",
          "action": "Get ticket images",
          "description": "Gets all images (screenshots) attached to a ticket (list)"
        },
        {
          "name": "Get Ticket Image",
          "value": "getTicketImage",
          "action": "Get a ticket image",
          "description": "Generates a one-time download URL for a specific ticket image"
        },
        {
          "name": "Upload Document / Image",
          "value": "uploadTicketContent",
          "action": "Upload document or image to ticket",
          "description": "Uploads a document or image into a ticket (multipart/form-data)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketContent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOwnTickets",
      "options": [
        {
          "name": "Get All Project Tickets",
          "value": "getProjectTickets",
          "action": "Get a list of all projects",
          "description": "Get a list of all projects"
        },
        {
          "name": "Get Company Tickets",
          "value": "getCompanyTickets",
          "action": "Get tickets for a specific company",
          "description": "Get tickets for a specific company"
        },
        {
          "name": "Get Custom Ticket List",
          "value": "getCustomTicketList",
          "action": "Get a custom ticket list",
          "description": "Get a custom ticket list with query parameters"
        },
        {
          "name": "Get General Tickets",
          "value": "getGeneralTickets",
          "action": "Get general tickets assigned to no employee",
          "description": "Get general tickets assigned to no employee"
        },
        {
          "name": "Get Local Admin Tickets",
          "value": "getLocalAdminTickets",
          "action": "Get a list of local admin tickets",
          "description": "Gets a list of all tickets which are assigned to local ticket admins"
        },
        {
          "name": "Get Not Identified Tickets",
          "value": "getNotIdentifiedTickets",
          "action": "Get tickets not assigned to any company",
          "description": "Get tickets not assigned to any company"
        },
        {
          "name": "Get Own Tickets",
          "value": "getOwnTickets",
          "action": "Get tickets assigned to the current employee",
          "description": "Get tickets assigned to the current employee"
        },
        {
          "name": "Get Repair Tickets",
          "value": "getRepairTickets",
          "action": "Get a list of repair tickets",
          "description": "Gets a list of repair tickets"
        },
        {
          "name": "Get Technician Tickets",
          "value": "getTechnicianTickets",
          "action": "Get tickets assigned to other technicians",
          "description": "Get tickets assigned to other technicians"
        },
        {
          "name": "Get Tickets With Role",
          "value": "getTicketsWithRole",
          "action": "Get a list of tickets with technician role",
          "description": "Gets a list of all tickets which a technician has a role in"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTicketStates",
      "options": [
        {
          "name": "Get Ticket States",
          "value": "getTicketStates",
          "action": "Get ticket states",
          "description": "Gets a list of all ticket states"
        },
        {
          "name": "Create Ticket State",
          "value": "createTicketState",
          "action": "Create a ticket state",
          "description": "Creates a new ticket state"
        },
        {
          "name": "Update Ticket State",
          "value": "updateTicketState",
          "action": "Update a ticket state",
          "description": "Updates an existing ticket state"
        },
        {
          "name": "Delete Ticket State",
          "value": "deleteTicketState",
          "action": "Delete a ticket state",
          "description": "Deletes a ticket state"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketStates"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTimestamps",
      "options": [
        {
          "name": "Get Timestamps",
          "value": "getTimestamps",
          "action": "Get timestamps",
          "description": "Gets a list of timestamps from a given period"
        },
        {
          "name": "Get Timestamp Info",
          "value": "getTimestampInfo",
          "action": "Get timestamp info",
          "description": "Gets the timestamp infos for a given time period"
        },
        {
          "name": "Get Timestamp Statistics",
          "value": "getTimestampStatistics",
          "action": "Get timestamp statistics",
          "description": "Gets the timestamp infos for a given time period (with statistical values)"
        },
        {
          "name": "Create Timestamp",
          "value": "createTimestamp",
          "action": "Create timestamp",
          "description": "Writes a timestamp into the database"
        },
        {
          "name": "Update Timestamp",
          "value": "updateTimestamp",
          "action": "Update timestamp",
          "description": "Edits a single timestamp"
        },
        {
          "name": "Save Day Timestamps",
          "value": "saveDayTimestamps",
          "action": "Save day timestamps",
          "description": "Writes the timestamps of a whole day into the database at once"
        },
        {
          "name": "Create Day Closing(s)",
          "value": "createDayClosing",
          "action": "Create day closing(s)",
          "description": "Creates one or more day closings"
        },
        {
          "name": "Delete Day Closing(s)",
          "value": "deleteDayClosing",
          "action": "Delete day closing(s)",
          "description": "Deletes one or more day closings (undo)"
        },
        {
          "name": "Get Day Closing Till Date",
          "value": "getDayClosingTillDate",
          "action": "Get day closing till date",
          "description": "Gets all infos about last dayclosings for employees"
        },
        {
          "name": "Create Day Closings Till Date",
          "value": "createDayClosingsTillDate",
          "action": "Create day closings till date",
          "description": "Creates missing dayClosings for given employees till a date"
        },
        {
          "name": "Set Initial Balance",
          "value": "setInitialBalance",
          "action": "Set initial balance",
          "description": "Sets the initial balance for an employee"
        },
        {
          "name": "Get Pause Configs",
          "value": "getPauseConfigs",
          "action": "Get pause configs",
          "description": "Gets a list of all pause configs"
        },
        {
          "name": "Create Pause Config",
          "value": "createPauseConfig",
          "action": "Create pause config",
          "description": "Creates a pause config"
        },
        {
          "name": "Update Pause Config",
          "value": "updatePauseConfig",
          "action": "Update pause config",
          "description": "Updates a pause config"
        },
        {
          "name": "Delete Pause Config",
          "value": "deletePauseConfig",
          "action": "Delete pause config",
          "description": "Deletes a pause config"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timestamps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAvailability",
      "options": [
        {
          "name": "Get Availability",
          "value": "getAvailability",
          "action": "Get availability",
          "description": "Fetch availability information for employees"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUserItems",
      "options": [
        {
          "name": "Get Number of Unseen Events",
          "value": "getUnseenEventsCount",
          "action": "Get the number of unseen events",
          "description": "Gets the total number of unseen activity feed events"
        },
        {
          "name": "List User Items",
          "value": "listUserItems",
          "action": "List user items",
          "description": "Gets a list of activity feed items for the current user"
        },
        {
          "name": "Mark All as Seen",
          "value": "markAllAsSeen",
          "action": "Mark all as seen",
          "description": "Marks all unseen activity feed events as seen"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "activityFeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTechnicians",
      "options": [
        {
          "name": "Get Technicians",
          "value": "getTechnicians",
          "action": "Get technicians",
          "description": "Gets all technicians of this system"
        },
        {
          "name": "Create Employee",
          "value": "createEmployee",
          "action": "Create employee",
          "description": "Creates a new employee"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employees"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "testSmtp",
      "options": [
        {
          "name": "Test SMTP Settings",
          "value": "testSmtp",
          "action": "Test SMTP",
          "description": "Send a test email using specified SMTP settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mails"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createCall",
      "options": [
        {
          "name": "Create / Import Call",
          "value": "createCall",
          "action": "Create call",
          "description": "Creates/imports a phone call into the database"
        },
        {
          "name": "Get a List of Phone Calls",
          "value": "getCalls",
          "action": "Get calls",
          "description": "Retrieves a list of phone calls using filter settings"
        },
        {
          "name": "Get Phone Call By ID",
          "value": "getCallById",
          "action": "Get call by id",
          "description": "Gets a specific phone call by its ID"
        },
        {
          "name": "Update Phone Call",
          "value": "updateCall",
          "action": "Update call",
          "description": "Updates an existing phone call by ID"
        },
        {
          "name": "Identify Phone Call",
          "value": "identifyCall",
          "action": "Identify call",
          "description": "Identifies a phone call and resolves company / employee IDs"
        },
        {
          "name": "Get All Employee Assignments",
          "value": "getEmployeeAssignments",
          "action": "Get employee assignments",
          "description": "Get all assignments between idStrings and TANSS employees"
        },
        {
          "name": "Create Employee Assignment",
          "value": "createEmployeeAssignment",
          "action": "Create employee assignment",
          "description": "Creates a new assignment between an idString and a TANSS employee"
        },
        {
          "name": "Delete Employee Assignment",
          "value": "deleteEmployeeAssignment",
          "action": "Delete employee assignment",
          "description": "Deletes an assignment between an idString and a TANSS employee"
        },
        {
          "name": "Creates a Call Notification",
          "value": "createNotification",
          "action": "Create call notification",
          "description": "Generates a notification (popup) for an incoming or outgoing call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "calls"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCalls",
      "options": [
        {
          "name": "Get a List of Phone Calls",
          "value": "getCalls",
          "action": "Get calls",
          "description": "Retrieves a list of phone calls using filter settings"
        },
        {
          "name": "Get Phone Call By ID",
          "value": "getCallById",
          "action": "Get call by id",
          "description": "Gets a specific phone call by its ID"
        },
        {
          "name": "Identifies a Phone Call",
          "value": "identifyCall",
          "action": "Identify call",
          "description": "Tries to identify a phone call and resolve company and employeeId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "callsuser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllCpus",
      "options": [
        {
          "name": "Create CPU",
          "value": "createCpu",
          "action": "Create a CPU",
          "description": "Creates a new CPU"
        },
        {
          "name": "Delete CPU",
          "value": "deleteCpu",
          "action": "Delete a CPU",
          "description": "Deletes a CPU"
        },
        {
          "name": "Get All CPUs",
          "value": "getAllCpus",
          "action": "Get all CPUs",
          "description": "Gets a list of all CPUs"
        },
        {
          "name": "Get CPU",
          "value": "getCpuById",
          "action": "Get a CPU",
          "description": "Gets a specific CPU"
        },
        {
          "name": "Update CPU",
          "value": "updateCpu",
          "action": "Update a CPU",
          "description": "Updates an existing CPU"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "cpus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllHddTypes",
      "options": [
        {
          "name": "Create HDD Type",
          "value": "createHddType",
          "action": "Create an HDD type",
          "description": "Creates a new hdd type"
        },
        {
          "name": "Delete HDD Type",
          "value": "deleteHddType",
          "action": "Delete an HDD type",
          "description": "Deletes a hdd type"
        },
        {
          "name": "Get All HDD Types",
          "value": "getAllHddTypes",
          "action": "Get all HDD types",
          "description": "Gets a list of all hdd types"
        },
        {
          "name": "Get HDD Type",
          "value": "getHddTypeById",
          "action": "Get an HDD type",
          "description": "Gets a specific hdd type"
        },
        {
          "name": "Update HDD Type",
          "value": "updateHddType",
          "action": "Update an HDD type",
          "description": "Updates an existing hdd type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "hddTypes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getIps",
      "options": [
        {
          "name": "Get IPs",
          "value": "getIps",
          "action": "Get IPs",
          "description": "Gets all ip addresses of a device"
        },
        {
          "name": "Create IP",
          "value": "createIp",
          "action": "Create IP",
          "description": "Creates an ip address for a pc/periphery"
        },
        {
          "name": "Update IP",
          "value": "updateIp",
          "action": "Update IP",
          "description": "Updates a specific ip address"
        },
        {
          "name": "Delete IP",
          "value": "deleteIp",
          "action": "Delete IP",
          "description": "Deletes an ip address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ips"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getComponent",
      "options": [
        {
          "name": "Get Component",
          "value": "getComponent",
          "action": "Get component"
        },
        {
          "name": "Create Component",
          "value": "createComponent",
          "action": "Create component"
        },
        {
          "name": "Update Component",
          "value": "updateComponent",
          "action": "Update component"
        },
        {
          "name": "Delete Component",
          "value": "deleteComponent",
          "action": "Delete component"
        },
        {
          "name": "List Components",
          "value": "listComponents",
          "action": "List components"
        },
        {
          "name": "Get Component Types",
          "value": "getComponentTypes",
          "action": "Get component types"
        },
        {
          "name": "Create Component Type",
          "value": "createComponentType",
          "action": "Create component type"
        },
        {
          "name": "Update Component Type",
          "value": "updateComponentType",
          "action": "Update component type"
        },
        {
          "name": "Delete Component Type",
          "value": "deleteComponentType",
          "action": "Delete component type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "components"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createCompany",
      "options": [
        {
          "name": "Create Company",
          "value": "createCompany",
          "action": "Create a company",
          "description": "Creates a new company"
        },
        {
          "name": "Get Company Employees",
          "value": "getCompanyEmployees",
          "action": "Get all employees of a company",
          "description": "Gets all employees of a company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listCategories",
      "options": [
        {
          "name": "List Categories",
          "value": "listCategories",
          "action": "List categories"
        },
        {
          "name": "Create Category",
          "value": "createCategory",
          "action": "Create category"
        },
        {
          "name": "Get Category",
          "value": "getCategory",
          "action": "Get category"
        },
        {
          "name": "Update Category",
          "value": "updateCategory",
          "action": "Update category"
        },
        {
          "name": "Delete Category",
          "value": "deleteCategory",
          "action": "Delete category"
        },
        {
          "name": "List Company Types",
          "value": "listCompanyTypes",
          "action": "List company types"
        },
        {
          "name": "Create Company Type",
          "value": "createCompanyType",
          "action": "Create company type"
        },
        {
          "name": "Get Company Type",
          "value": "getCompanyType",
          "action": "Get company type"
        },
        {
          "name": "Update Company Type",
          "value": "updateCompanyType",
          "action": "Update company type"
        },
        {
          "name": "Delete Company Type",
          "value": "deleteCompanyType",
          "action": "Delete company type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companyCategories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPeriphery",
      "options": [
        {
          "name": "Get Periphery",
          "value": "getPeriphery",
          "action": "Get periphery",
          "description": "Fetches a periphery by ID"
        },
        {
          "name": "List Peripheries",
          "value": "listPeripheries",
          "action": "List peripheries",
          "description": "Gets a list of peripheries with filters"
        },
        {
          "name": "Get Periphery Types",
          "value": "getPeripheryTypes",
          "action": "Get periphery types",
          "description": "Gets a list of all periphery types"
        },
        {
          "name": "Create Periphery Type",
          "value": "createPeripheryType",
          "action": "Create periphery type",
          "description": "Creates a new periphery type"
        },
        {
          "name": "Update Periphery Type",
          "value": "updatePeripheryType",
          "action": "Update periphery type",
          "description": "Updates a periphery type"
        },
        {
          "name": "Delete Periphery Type",
          "value": "deletePeripheryType",
          "action": "Delete periphery type",
          "description": "Deletes a periphery type"
        },
        {
          "name": "Assign Periphery",
          "value": "assignPeriphery",
          "action": "Assign periphery",
          "description": "Assigns a periphery to another pc or periphery"
        },
        {
          "name": "Delete Periphery Assignment",
          "value": "deletePeripheryAssignment",
          "action": "Delete periphery assignment",
          "description": "Deletes a periphery assignment to another pc or periphery"
        },
        {
          "name": "Update Periphery",
          "value": "updatePeriphery",
          "action": "Update periphery",
          "description": "Updates a periphery"
        },
        {
          "name": "Create Periphery",
          "value": "createPeriphery",
          "action": "Create periphery",
          "description": "Creates a periphery"
        },
        {
          "name": "Delete Periphery",
          "value": "deletePeriphery",
          "action": "Delete periphery",
          "description": "Deletes a periphery"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "peripheries"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllManufacturers",
      "options": [
        {
          "name": "Create Manufacturer",
          "value": "createManufacturer",
          "action": "Create a manufacturer",
          "description": "Creates a new manufacturer"
        },
        {
          "name": "Delete Manufacturer",
          "value": "deleteManufacturer",
          "action": "Delete a manufacturer",
          "description": "Deletes a manufacturer"
        },
        {
          "name": "Get All Manufacturers",
          "value": "getAllManufacturers",
          "action": "Get all manufacturers",
          "description": "Gets a list of all manufacturers"
        },
        {
          "name": "Get Manufacturer",
          "value": "getManufacturerById",
          "action": "Get a manufacturer",
          "description": "Gets a specific manufacturer"
        },
        {
          "name": "Update Manufacturer",
          "value": "updateManufacturer",
          "action": "Update a manufacturer",
          "description": "Updates an existing manufacturer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "manufacturers"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllOs",
      "options": [
        {
          "name": "Create OS",
          "value": "createOs",
          "action": "Create an OS",
          "description": "Creates a new operating system"
        },
        {
          "name": "Delete OS",
          "value": "deleteOs",
          "action": "Delete an OS",
          "description": "Deletes a specific operating system"
        },
        {
          "name": "Get All OS",
          "value": "getAllOs",
          "action": "Get all OS",
          "description": "Gets a list of all operating systems"
        },
        {
          "name": "Get OS",
          "value": "getOsById",
          "action": "Get an OS",
          "description": "Gets a specific operating system"
        },
        {
          "name": "Update OS",
          "value": "updateOs",
          "action": "Update an OS",
          "description": "Updates an existing operating system"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "operatingSystems"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createCallback",
      "options": [
        {
          "name": "Create Callback",
          "value": "createCallback",
          "action": "Creates a new callback",
          "description": "Creates a new callback in TANSS"
        },
        {
          "name": "Get a List of Callbacks",
          "value": "getCallbacks",
          "action": "Get callbacks",
          "description": "Retrieves a list of callback from the database, using misc. filter settings."
        },
        {
          "name": "Get Callback by ID",
          "value": "getCallbackById",
          "action": "Get callback by id",
          "description": "Gets a single callback by its ID"
        },
        {
          "name": "Update Callback",
          "value": "updateCallback",
          "action": "Update callback",
          "description": "Updates an existing callback"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "callbacks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createChat",
      "options": [
        {
          "name": "Create Chat",
          "value": "createChat",
          "action": "Create a chat",
          "description": "Creates a new chat"
        },
        {
          "name": "Get Chats",
          "value": "getChats",
          "action": "Get chats",
          "description": "Get a list of chats"
        },
        {
          "name": "Get Chat",
          "value": "getChat",
          "action": "Get a chat",
          "description": "Gets a chat"
        },
        {
          "name": "Get Chat Close Requests",
          "value": "getChatCloseRequests",
          "action": "Get chat close requests",
          "description": "Gets chat close requests"
        },
        {
          "name": "Create Chat Message",
          "value": "createChatMessage",
          "action": "Create a chat message",
          "description": "Creates a new chat message"
        },
        {
          "name": "Add Participant",
          "value": "addChatParticipant",
          "action": "Add a participant",
          "description": "Adds a participant"
        },
        {
          "name": "Delete Participant",
          "value": "deleteChatParticipant",
          "action": "Delete a participant",
          "description": "Deletes a participant"
        },
        {
          "name": "Close Chat",
          "value": "closeChat",
          "action": "Close a chat",
          "description": "Closes a chat"
        },
        {
          "name": "Accept/Decline Close Request",
          "value": "acceptDeclineCloseRequest",
          "action": "Accept or decline close request",
          "description": "Accepts or declines a chat closing request"
        },
        {
          "name": "Re-Open Chat",
          "value": "reOpenChat",
          "action": "Re-open a chat",
          "description": "Re-opens a chat"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chats"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "globalSearch",
      "options": [
        {
          "name": "Global Search",
          "value": "globalSearch",
          "action": "Global search",
          "description": "Executes a global search using the provided configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllServices",
      "options": [
        {
          "name": "Create Service",
          "value": "createService",
          "action": "Create a service",
          "description": "Creates a new service"
        },
        {
          "name": "Delete Service",
          "value": "deleteService",
          "action": "Delete a service",
          "description": "Deletes a service"
        },
        {
          "name": "Get All Services",
          "value": "getAllServices",
          "action": "Get all services",
          "description": "Gets a list of all services"
        },
        {
          "name": "Get Service",
          "value": "getServiceById",
          "action": "Get a service",
          "description": "Gets a service by ID"
        },
        {
          "name": "Update Service",
          "value": "updateService",
          "action": "Update a service",
          "description": "Updates an existing service"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "services"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSoftwareLicenses",
      "options": [
        {
          "name": "Get Software Licenses",
          "value": "getSoftwareLicenses",
          "action": "Get a list of software licenses",
          "description": "Get a list of software licenses"
        },
        {
          "name": "Create Software License",
          "value": "createSoftwareLicense",
          "action": "Create a software license",
          "description": "Creates a software license"
        },
        {
          "name": "Get Software License by ID",
          "value": "getSoftwareLicenseById",
          "action": "Get a software license by ID",
          "description": "Gets a single software license by ID"
        },
        {
          "name": "Update Software License",
          "value": "updateSoftwareLicense",
          "action": "Update a software license",
          "description": "Updates a software license"
        },
        {
          "name": "Delete Software License",
          "value": "deleteSoftwareLicense",
          "action": "Delete a software license",
          "description": "Deletes a software license"
        },
        {
          "name": "Get Software License Types",
          "value": "getSoftwareLicenseTypes",
          "action": "Get software license types",
          "description": "Gets all software license types"
        },
        {
          "name": "Create Software License Type",
          "value": "createSoftwareLicenseType",
          "action": "Create a software license type",
          "description": "Creates a new software license type"
        },
        {
          "name": "Get Software License Type",
          "value": "getSoftwareLicenseTypeById",
          "action": "Get a software license type",
          "description": "Gets a single software license type"
        },
        {
          "name": "Update Software License Type",
          "value": "updateSoftwareLicenseType",
          "action": "Update a software license type",
          "description": "Updates a software license type"
        },
        {
          "name": "Delete Software License Type",
          "value": "deleteSoftwareLicenseType",
          "action": "Delete a software license type",
          "description": "Deletes a software license type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "softwareLicenses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createRemoteSupport",
      "options": [
        {
          "name": "Create / Import Remote Support",
          "value": "createRemoteSupport",
          "action": "Create remote support",
          "description": "Creates/imports a remote support into the TANSS database"
        },
        {
          "name": "Get List of Remote Supports",
          "value": "getRemoteSupports",
          "action": "Get remote supports",
          "description": "Gets a list of remote supports based on filter settings"
        },
        {
          "name": "Get Remote Support by ID",
          "value": "getRemoteSupportById",
          "action": "Get remote support by id",
          "description": "Gets a remote support from the database by its ID"
        },
        {
          "name": "Update Remote Support",
          "value": "updateRemoteSupport",
          "action": "Update remote support",
          "description": "Updates a remote support by ID and sets the new values"
        },
        {
          "name": "Delete Remote Support",
          "value": "deleteRemoteSupport",
          "action": "Delete remote support",
          "description": "Deletes a remote support by ID"
        },
        {
          "name": "Get Device Assignments",
          "value": "getDeviceAssignments",
          "action": "Get device assignments",
          "description": "Gets all device assignments for the remote support type"
        },
        {
          "name": "Create Device Assignment",
          "value": "createAssignDevice",
          "action": "Create device assignment",
          "description": "Creates a device assignment mapping deviceId -> company/link"
        },
        {
          "name": "Delete Device Assignment",
          "value": "deleteAssignDevice",
          "action": "Delete device assignment",
          "description": "Deletes a device assignment by deviceId"
        },
        {
          "name": "Get Technician Assignments",
          "value": "getEmployeeAssignments",
          "action": "Get technician assignments",
          "description": "Gets all employee (technician) assignments for the remote support type"
        },
        {
          "name": "Create Technician Assignment",
          "value": "createAssignEmployee",
          "action": "Create technician assignment",
          "description": "Creates an assignment mapping userId -> employeeId"
        },
        {
          "name": "Delete Technician Assignment",
          "value": "deleteAssignEmployee",
          "action": "Delete technician assignment",
          "description": "Deletes a technician assignment by userId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "remoteSupports"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create PC",
      "value": "createPc",
      "action": "Creates a PC",
      "description": "Creates a new PC or server",
      "resource": "pc"
    },
    {
      "name": "Delete PC",
      "value": "deletePc",
      "action": "Deletes a PC",
      "description": "Deletes a PC or server",
      "resource": "pc"
    },
    {
      "name": "Get PC by ID",
      "value": "getPcById",
      "action": "Fetches a PC by ID",
      "description": "Fetches a PC or server by a given ID",
      "resource": "pc"
    },
    {
      "name": "List PCs",
      "value": "listPcs",
      "action": "List pcs",
      "description": "Gets a list of PCs or servers",
      "resource": "pc"
    },
    {
      "name": "Update PC",
      "value": "updatePc",
      "action": "Updates a PC",
      "description": "Updates a PC or server",
      "resource": "pc"
    },
    {
      "name": "Create Comment",
      "value": "createComment",
      "action": "Creates a comment for a specific ticket",
      "description": "Creates a comment for a specific ticket",
      "resource": "ticket"
    },
    {
      "name": "Create Ticket",
      "value": "createTicket",
      "action": "Creates a new ticket",
      "description": "Creates a new Ticket in TANSS",
      "resource": "ticket"
    },
    {
      "name": "Delete Ticket",
      "value": "deleteTicket",
      "action": "Deletes a ticket",
      "description": "Deletes a ticket",
      "resource": "ticket"
    },
    {
      "name": "Get Ticket by ID",
      "value": "getTicketById",
      "action": "Fetches a ticket by ID",
      "description": "Fetches a ticket by ID",
      "resource": "ticket"
    },
    {
      "name": "Get Ticket History",
      "value": "getTicketHistory",
      "action": "Fetches the history of a ticket",
      "description": "Fetches the history of a ticket",
      "resource": "ticket"
    },
    {
      "name": "Merge Tickets",
      "value": "mergeTickets",
      "action": "Merges one ticket into another",
      "description": "Merges one ticket into another",
      "resource": "ticket"
    },
    {
      "name": "Update Ticket",
      "value": "updateTicket",
      "action": "Updates a ticket with the provided details",
      "description": "Updates a ticket with the provided details",
      "resource": "ticket"
    },
    {
      "name": "Create Domain",
      "value": "createDomain",
      "action": "Creates a new domain",
      "description": "Creates a new Domain in TANSS",
      "resource": "domain"
    },
    {
      "name": "Get Domain by ID",
      "value": "getDomainById",
      "action": "Fetches a domain by ID",
      "description": "Fetches a domain by ID",
      "resource": "domain"
    },
    {
      "name": "Update Domain",
      "value": "updateDomain",
      "action": "Updates a domain",
      "description": "Updates a domain",
      "resource": "domain"
    },
    {
      "name": "Delete Domain",
      "value": "deleteDomain",
      "action": "Deletes a domain",
      "description": "Deletes a domain",
      "resource": "domain"
    },
    {
      "name": "List Domains By Company",
      "value": "listDomainsByCompany",
      "action": "Lists domains of a company",
      "description": "Lists domains for a company",
      "resource": "domain"
    },
    {
      "name": "Assign Checklist",
      "value": "assignChecklist",
      "action": "Assigns a checklist to a ticket",
      "description": "Assigns a checklist to a ticket",
      "resource": "checklists"
    },
    {
      "name": "Remove Checklist",
      "value": "removeChecklist",
      "action": "Removes a checklist assignment from a ticket",
      "description": "Removes a checklist assignment from a ticket",
      "resource": "checklists"
    },
    {
      "name": "Get Assigned Checklists",
      "value": "getAssignedChecklists",
      "action": "Gets all checklists assigned to a ticket",
      "description": "Gets all checklists assigned to a ticket",
      "resource": "checklists"
    },
    {
      "name": "Get Checklist Process",
      "value": "getChecklistProcess",
      "action": "Gets checklist details for processing within a ticket",
      "description": "Gets checklist details for processing within a ticket",
      "resource": "checklists"
    },
    {
      "name": "Check Item",
      "value": "checkItem",
      "action": "Checks/unchecks an item",
      "description": "Checks or unchecks an item in a checklist",
      "resource": "checklists"
    },
    {
      "name": "Get Ticket Documents",
      "value": "getTicketDocuments",
      "action": "Get ticket documents",
      "description": "Gets all documents attached to a ticket (list)",
      "resource": "ticketContent"
    },
    {
      "name": "Get Ticket Document",
      "value": "getTicketDocument",
      "action": "Get a ticket document",
      "description": "Generates a one-time download URL for a specific ticket document",
      "resource": "ticketContent"
    },
    {
      "name": "Get Ticket Images",
      "value": "getTicketImages",
      "action": "Get ticket images",
      "description": "Gets all images (screenshots) attached to a ticket (list)",
      "resource": "ticketContent"
    },
    {
      "name": "Get Ticket Image",
      "value": "getTicketImage",
      "action": "Get a ticket image",
      "description": "Generates a one-time download URL for a specific ticket image",
      "resource": "ticketContent"
    },
    {
      "name": "Upload Document / Image",
      "value": "uploadTicketContent",
      "action": "Upload document or image to ticket",
      "description": "Uploads a document or image into a ticket (multipart/form-data)",
      "resource": "ticketContent"
    },
    {
      "name": "Get All Project Tickets",
      "value": "getProjectTickets",
      "action": "Get a list of all projects",
      "description": "Get a list of all projects",
      "resource": "ticketList"
    },
    {
      "name": "Get Company Tickets",
      "value": "getCompanyTickets",
      "action": "Get tickets for a specific company",
      "description": "Get tickets for a specific company",
      "resource": "ticketList"
    },
    {
      "name": "Get Custom Ticket List",
      "value": "getCustomTicketList",
      "action": "Get a custom ticket list",
      "description": "Get a custom ticket list with query parameters",
      "resource": "ticketList"
    },
    {
      "name": "Get General Tickets",
      "value": "getGeneralTickets",
      "action": "Get general tickets assigned to no employee",
      "description": "Get general tickets assigned to no employee",
      "resource": "ticketList"
    },
    {
      "name": "Get Local Admin Tickets",
      "value": "getLocalAdminTickets",
      "action": "Get a list of local admin tickets",
      "description": "Gets a list of all tickets which are assigned to local ticket admins",
      "resource": "ticketList"
    },
    {
      "name": "Get Not Identified Tickets",
      "value": "getNotIdentifiedTickets",
      "action": "Get tickets not assigned to any company",
      "description": "Get tickets not assigned to any company",
      "resource": "ticketList"
    },
    {
      "name": "Get Own Tickets",
      "value": "getOwnTickets",
      "action": "Get tickets assigned to the current employee",
      "description": "Get tickets assigned to the current employee",
      "resource": "ticketList"
    },
    {
      "name": "Get Repair Tickets",
      "value": "getRepairTickets",
      "action": "Get a list of repair tickets",
      "description": "Gets a list of repair tickets",
      "resource": "ticketList"
    },
    {
      "name": "Get Technician Tickets",
      "value": "getTechnicianTickets",
      "action": "Get tickets assigned to other technicians",
      "description": "Get tickets assigned to other technicians",
      "resource": "ticketList"
    },
    {
      "name": "Get Tickets With Role",
      "value": "getTicketsWithRole",
      "action": "Get a list of tickets with technician role",
      "description": "Gets a list of all tickets which a technician has a role in",
      "resource": "ticketList"
    },
    {
      "name": "Get Ticket States",
      "value": "getTicketStates",
      "action": "Get ticket states",
      "description": "Gets a list of all ticket states",
      "resource": "ticketStates"
    },
    {
      "name": "Create Ticket State",
      "value": "createTicketState",
      "action": "Create a ticket state",
      "description": "Creates a new ticket state",
      "resource": "ticketStates"
    },
    {
      "name": "Update Ticket State",
      "value": "updateTicketState",
      "action": "Update a ticket state",
      "description": "Updates an existing ticket state",
      "resource": "ticketStates"
    },
    {
      "name": "Delete Ticket State",
      "value": "deleteTicketState",
      "action": "Delete a ticket state",
      "description": "Deletes a ticket state",
      "resource": "ticketStates"
    },
    {
      "name": "Get Timestamps",
      "value": "getTimestamps",
      "action": "Get timestamps",
      "description": "Gets a list of timestamps from a given period",
      "resource": "timestamps"
    },
    {
      "name": "Get Timestamp Info",
      "value": "getTimestampInfo",
      "action": "Get timestamp info",
      "description": "Gets the timestamp infos for a given time period",
      "resource": "timestamps"
    },
    {
      "name": "Get Timestamp Statistics",
      "value": "getTimestampStatistics",
      "action": "Get timestamp statistics",
      "description": "Gets the timestamp infos for a given time period (with statistical values)",
      "resource": "timestamps"
    },
    {
      "name": "Create Timestamp",
      "value": "createTimestamp",
      "action": "Create timestamp",
      "description": "Writes a timestamp into the database",
      "resource": "timestamps"
    },
    {
      "name": "Update Timestamp",
      "value": "updateTimestamp",
      "action": "Update timestamp",
      "description": "Edits a single timestamp",
      "resource": "timestamps"
    },
    {
      "name": "Save Day Timestamps",
      "value": "saveDayTimestamps",
      "action": "Save day timestamps",
      "description": "Writes the timestamps of a whole day into the database at once",
      "resource": "timestamps"
    },
    {
      "name": "Create Day Closing(s)",
      "value": "createDayClosing",
      "action": "Create day closing(s)",
      "description": "Creates one or more day closings",
      "resource": "timestamps"
    },
    {
      "name": "Delete Day Closing(s)",
      "value": "deleteDayClosing",
      "action": "Delete day closing(s)",
      "description": "Deletes one or more day closings (undo)",
      "resource": "timestamps"
    },
    {
      "name": "Get Day Closing Till Date",
      "value": "getDayClosingTillDate",
      "action": "Get day closing till date",
      "description": "Gets all infos about last dayclosings for employees",
      "resource": "timestamps"
    },
    {
      "name": "Create Day Closings Till Date",
      "value": "createDayClosingsTillDate",
      "action": "Create day closings till date",
      "description": "Creates missing dayClosings for given employees till a date",
      "resource": "timestamps"
    },
    {
      "name": "Set Initial Balance",
      "value": "setInitialBalance",
      "action": "Set initial balance",
      "description": "Sets the initial balance for an employee",
      "resource": "timestamps"
    },
    {
      "name": "Get Pause Configs",
      "value": "getPauseConfigs",
      "action": "Get pause configs",
      "description": "Gets a list of all pause configs",
      "resource": "timestamps"
    },
    {
      "name": "Create Pause Config",
      "value": "createPauseConfig",
      "action": "Create pause config",
      "description": "Creates a pause config",
      "resource": "timestamps"
    },
    {
      "name": "Update Pause Config",
      "value": "updatePauseConfig",
      "action": "Update pause config",
      "description": "Updates a pause config",
      "resource": "timestamps"
    },
    {
      "name": "Delete Pause Config",
      "value": "deletePauseConfig",
      "action": "Delete pause config",
      "description": "Deletes a pause config",
      "resource": "timestamps"
    },
    {
      "name": "Get Availability",
      "value": "getAvailability",
      "action": "Get availability",
      "description": "Fetch availability information for employees",
      "resource": "availability"
    },
    {
      "name": "Get Number of Unseen Events",
      "value": "getUnseenEventsCount",
      "action": "Get the number of unseen events",
      "description": "Gets the total number of unseen activity feed events",
      "resource": "activityFeed"
    },
    {
      "name": "List User Items",
      "value": "listUserItems",
      "action": "List user items",
      "description": "Gets a list of activity feed items for the current user",
      "resource": "activityFeed"
    },
    {
      "name": "Mark All as Seen",
      "value": "markAllAsSeen",
      "action": "Mark all as seen",
      "description": "Marks all unseen activity feed events as seen",
      "resource": "activityFeed"
    },
    {
      "name": "Get Technicians",
      "value": "getTechnicians",
      "action": "Get technicians",
      "description": "Gets all technicians of this system",
      "resource": "employees"
    },
    {
      "name": "Create Employee",
      "value": "createEmployee",
      "action": "Create employee",
      "description": "Creates a new employee",
      "resource": "employees"
    },
    {
      "name": "Test SMTP Settings",
      "value": "testSmtp",
      "action": "Test SMTP",
      "description": "Send a test email using specified SMTP settings",
      "resource": "mails"
    },
    {
      "name": "Create / Import Call",
      "value": "createCall",
      "action": "Create call",
      "description": "Creates/imports a phone call into the database",
      "resource": "calls"
    },
    {
      "name": "Get a List of Phone Calls",
      "value": "getCalls",
      "action": "Get calls",
      "description": "Retrieves a list of phone calls using filter settings",
      "resource": "calls"
    },
    {
      "name": "Get Phone Call By ID",
      "value": "getCallById",
      "action": "Get call by id",
      "description": "Gets a specific phone call by its ID",
      "resource": "calls"
    },
    {
      "name": "Update Phone Call",
      "value": "updateCall",
      "action": "Update call",
      "description": "Updates an existing phone call by ID",
      "resource": "calls"
    },
    {
      "name": "Identify Phone Call",
      "value": "identifyCall",
      "action": "Identify call",
      "description": "Identifies a phone call and resolves company / employee IDs",
      "resource": "calls"
    },
    {
      "name": "Get All Employee Assignments",
      "value": "getEmployeeAssignments",
      "action": "Get employee assignments",
      "description": "Get all assignments between idStrings and TANSS employees",
      "resource": "calls"
    },
    {
      "name": "Create Employee Assignment",
      "value": "createEmployeeAssignment",
      "action": "Create employee assignment",
      "description": "Creates a new assignment between an idString and a TANSS employee",
      "resource": "calls"
    },
    {
      "name": "Delete Employee Assignment",
      "value": "deleteEmployeeAssignment",
      "action": "Delete employee assignment",
      "description": "Deletes an assignment between an idString and a TANSS employee",
      "resource": "calls"
    },
    {
      "name": "Creates a Call Notification",
      "value": "createNotification",
      "action": "Create call notification",
      "description": "Generates a notification (popup) for an incoming or outgoing call",
      "resource": "calls"
    },
    {
      "name": "Get a List of Phone Calls",
      "value": "getCalls",
      "action": "Get calls",
      "description": "Retrieves a list of phone calls using filter settings",
      "resource": "callsuser"
    },
    {
      "name": "Get Phone Call By ID",
      "value": "getCallById",
      "action": "Get call by id",
      "description": "Gets a specific phone call by its ID",
      "resource": "callsuser"
    },
    {
      "name": "Identifies a Phone Call",
      "value": "identifyCall",
      "action": "Identify call",
      "description": "Tries to identify a phone call and resolve company and employeeId",
      "resource": "callsuser"
    },
    {
      "name": "Create CPU",
      "value": "createCpu",
      "action": "Create a CPU",
      "description": "Creates a new CPU",
      "resource": "cpus"
    },
    {
      "name": "Delete CPU",
      "value": "deleteCpu",
      "action": "Delete a CPU",
      "description": "Deletes a CPU",
      "resource": "cpus"
    },
    {
      "name": "Get All CPUs",
      "value": "getAllCpus",
      "action": "Get all CPUs",
      "description": "Gets a list of all CPUs",
      "resource": "cpus"
    },
    {
      "name": "Get CPU",
      "value": "getCpuById",
      "action": "Get a CPU",
      "description": "Gets a specific CPU",
      "resource": "cpus"
    },
    {
      "name": "Update CPU",
      "value": "updateCpu",
      "action": "Update a CPU",
      "description": "Updates an existing CPU",
      "resource": "cpus"
    },
    {
      "name": "Create HDD Type",
      "value": "createHddType",
      "action": "Create an HDD type",
      "description": "Creates a new hdd type",
      "resource": "hddTypes"
    },
    {
      "name": "Delete HDD Type",
      "value": "deleteHddType",
      "action": "Delete an HDD type",
      "description": "Deletes a hdd type",
      "resource": "hddTypes"
    },
    {
      "name": "Get All HDD Types",
      "value": "getAllHddTypes",
      "action": "Get all HDD types",
      "description": "Gets a list of all hdd types",
      "resource": "hddTypes"
    },
    {
      "name": "Get HDD Type",
      "value": "getHddTypeById",
      "action": "Get an HDD type",
      "description": "Gets a specific hdd type",
      "resource": "hddTypes"
    },
    {
      "name": "Update HDD Type",
      "value": "updateHddType",
      "action": "Update an HDD type",
      "description": "Updates an existing hdd type",
      "resource": "hddTypes"
    },
    {
      "name": "Get IPs",
      "value": "getIps",
      "action": "Get IPs",
      "description": "Gets all ip addresses of a device",
      "resource": "ips"
    },
    {
      "name": "Create IP",
      "value": "createIp",
      "action": "Create IP",
      "description": "Creates an ip address for a pc/periphery",
      "resource": "ips"
    },
    {
      "name": "Update IP",
      "value": "updateIp",
      "action": "Update IP",
      "description": "Updates a specific ip address",
      "resource": "ips"
    },
    {
      "name": "Delete IP",
      "value": "deleteIp",
      "action": "Delete IP",
      "description": "Deletes an ip address",
      "resource": "ips"
    },
    {
      "name": "Get Component",
      "value": "getComponent",
      "action": "Get component",
      "resource": "components"
    },
    {
      "name": "Create Component",
      "value": "createComponent",
      "action": "Create component",
      "resource": "components"
    },
    {
      "name": "Update Component",
      "value": "updateComponent",
      "action": "Update component",
      "resource": "components"
    },
    {
      "name": "Delete Component",
      "value": "deleteComponent",
      "action": "Delete component",
      "resource": "components"
    },
    {
      "name": "List Components",
      "value": "listComponents",
      "action": "List components",
      "resource": "components"
    },
    {
      "name": "Get Component Types",
      "value": "getComponentTypes",
      "action": "Get component types",
      "resource": "components"
    },
    {
      "name": "Create Component Type",
      "value": "createComponentType",
      "action": "Create component type",
      "resource": "components"
    },
    {
      "name": "Update Component Type",
      "value": "updateComponentType",
      "action": "Update component type",
      "resource": "components"
    },
    {
      "name": "Delete Component Type",
      "value": "deleteComponentType",
      "action": "Delete component type",
      "resource": "components"
    },
    {
      "name": "Create Company",
      "value": "createCompany",
      "action": "Create a company",
      "description": "Creates a new company",
      "resource": "company"
    },
    {
      "name": "Get Company Employees",
      "value": "getCompanyEmployees",
      "action": "Get all employees of a company",
      "description": "Gets all employees of a company",
      "resource": "company"
    },
    {
      "name": "List Categories",
      "value": "listCategories",
      "action": "List categories",
      "resource": "companyCategories"
    },
    {
      "name": "Create Category",
      "value": "createCategory",
      "action": "Create category",
      "resource": "companyCategories"
    },
    {
      "name": "Get Category",
      "value": "getCategory",
      "action": "Get category",
      "resource": "companyCategories"
    },
    {
      "name": "Update Category",
      "value": "updateCategory",
      "action": "Update category",
      "resource": "companyCategories"
    },
    {
      "name": "Delete Category",
      "value": "deleteCategory",
      "action": "Delete category",
      "resource": "companyCategories"
    },
    {
      "name": "List Company Types",
      "value": "listCompanyTypes",
      "action": "List company types",
      "resource": "companyCategories"
    },
    {
      "name": "Create Company Type",
      "value": "createCompanyType",
      "action": "Create company type",
      "resource": "companyCategories"
    },
    {
      "name": "Get Company Type",
      "value": "getCompanyType",
      "action": "Get company type",
      "resource": "companyCategories"
    },
    {
      "name": "Update Company Type",
      "value": "updateCompanyType",
      "action": "Update company type",
      "resource": "companyCategories"
    },
    {
      "name": "Delete Company Type",
      "value": "deleteCompanyType",
      "action": "Delete company type",
      "resource": "companyCategories"
    },
    {
      "name": "Get Periphery",
      "value": "getPeriphery",
      "action": "Get periphery",
      "description": "Fetches a periphery by ID",
      "resource": "peripheries"
    },
    {
      "name": "List Peripheries",
      "value": "listPeripheries",
      "action": "List peripheries",
      "description": "Gets a list of peripheries with filters",
      "resource": "peripheries"
    },
    {
      "name": "Get Periphery Types",
      "value": "getPeripheryTypes",
      "action": "Get periphery types",
      "description": "Gets a list of all periphery types",
      "resource": "peripheries"
    },
    {
      "name": "Create Periphery Type",
      "value": "createPeripheryType",
      "action": "Create periphery type",
      "description": "Creates a new periphery type",
      "resource": "peripheries"
    },
    {
      "name": "Update Periphery Type",
      "value": "updatePeripheryType",
      "action": "Update periphery type",
      "description": "Updates a periphery type",
      "resource": "peripheries"
    },
    {
      "name": "Delete Periphery Type",
      "value": "deletePeripheryType",
      "action": "Delete periphery type",
      "description": "Deletes a periphery type",
      "resource": "peripheries"
    },
    {
      "name": "Assign Periphery",
      "value": "assignPeriphery",
      "action": "Assign periphery",
      "description": "Assigns a periphery to another pc or periphery",
      "resource": "peripheries"
    },
    {
      "name": "Delete Periphery Assignment",
      "value": "deletePeripheryAssignment",
      "action": "Delete periphery assignment",
      "description": "Deletes a periphery assignment to another pc or periphery",
      "resource": "peripheries"
    },
    {
      "name": "Update Periphery",
      "value": "updatePeriphery",
      "action": "Update periphery",
      "description": "Updates a periphery",
      "resource": "peripheries"
    },
    {
      "name": "Create Periphery",
      "value": "createPeriphery",
      "action": "Create periphery",
      "description": "Creates a periphery",
      "resource": "peripheries"
    },
    {
      "name": "Delete Periphery",
      "value": "deletePeriphery",
      "action": "Delete periphery",
      "description": "Deletes a periphery",
      "resource": "peripheries"
    },
    {
      "name": "Create Manufacturer",
      "value": "createManufacturer",
      "action": "Create a manufacturer",
      "description": "Creates a new manufacturer",
      "resource": "manufacturers"
    },
    {
      "name": "Delete Manufacturer",
      "value": "deleteManufacturer",
      "action": "Delete a manufacturer",
      "description": "Deletes a manufacturer",
      "resource": "manufacturers"
    },
    {
      "name": "Get All Manufacturers",
      "value": "getAllManufacturers",
      "action": "Get all manufacturers",
      "description": "Gets a list of all manufacturers",
      "resource": "manufacturers"
    },
    {
      "name": "Get Manufacturer",
      "value": "getManufacturerById",
      "action": "Get a manufacturer",
      "description": "Gets a specific manufacturer",
      "resource": "manufacturers"
    },
    {
      "name": "Update Manufacturer",
      "value": "updateManufacturer",
      "action": "Update a manufacturer",
      "description": "Updates an existing manufacturer",
      "resource": "manufacturers"
    },
    {
      "name": "Create OS",
      "value": "createOs",
      "action": "Create an OS",
      "description": "Creates a new operating system",
      "resource": "operatingSystems"
    },
    {
      "name": "Delete OS",
      "value": "deleteOs",
      "action": "Delete an OS",
      "description": "Deletes a specific operating system",
      "resource": "operatingSystems"
    },
    {
      "name": "Get All OS",
      "value": "getAllOs",
      "action": "Get all OS",
      "description": "Gets a list of all operating systems",
      "resource": "operatingSystems"
    },
    {
      "name": "Get OS",
      "value": "getOsById",
      "action": "Get an OS",
      "description": "Gets a specific operating system",
      "resource": "operatingSystems"
    },
    {
      "name": "Update OS",
      "value": "updateOs",
      "action": "Update an OS",
      "description": "Updates an existing operating system",
      "resource": "operatingSystems"
    },
    {
      "name": "Create Callback",
      "value": "createCallback",
      "action": "Creates a new callback",
      "description": "Creates a new callback in TANSS",
      "resource": "callbacks"
    },
    {
      "name": "Get a List of Callbacks",
      "value": "getCallbacks",
      "action": "Get callbacks",
      "description": "Retrieves a list of callback from the database, using misc. filter settings.",
      "resource": "callbacks"
    },
    {
      "name": "Get Callback by ID",
      "value": "getCallbackById",
      "action": "Get callback by id",
      "description": "Gets a single callback by its ID",
      "resource": "callbacks"
    },
    {
      "name": "Update Callback",
      "value": "updateCallback",
      "action": "Update callback",
      "description": "Updates an existing callback",
      "resource": "callbacks"
    },
    {
      "name": "Create Chat",
      "value": "createChat",
      "action": "Create a chat",
      "description": "Creates a new chat",
      "resource": "chats"
    },
    {
      "name": "Get Chats",
      "value": "getChats",
      "action": "Get chats",
      "description": "Get a list of chats",
      "resource": "chats"
    },
    {
      "name": "Get Chat",
      "value": "getChat",
      "action": "Get a chat",
      "description": "Gets a chat",
      "resource": "chats"
    },
    {
      "name": "Get Chat Close Requests",
      "value": "getChatCloseRequests",
      "action": "Get chat close requests",
      "description": "Gets chat close requests",
      "resource": "chats"
    },
    {
      "name": "Create Chat Message",
      "value": "createChatMessage",
      "action": "Create a chat message",
      "description": "Creates a new chat message",
      "resource": "chats"
    },
    {
      "name": "Add Participant",
      "value": "addChatParticipant",
      "action": "Add a participant",
      "description": "Adds a participant",
      "resource": "chats"
    },
    {
      "name": "Delete Participant",
      "value": "deleteChatParticipant",
      "action": "Delete a participant",
      "description": "Deletes a participant",
      "resource": "chats"
    },
    {
      "name": "Close Chat",
      "value": "closeChat",
      "action": "Close a chat",
      "description": "Closes a chat",
      "resource": "chats"
    },
    {
      "name": "Accept/Decline Close Request",
      "value": "acceptDeclineCloseRequest",
      "action": "Accept or decline close request",
      "description": "Accepts or declines a chat closing request",
      "resource": "chats"
    },
    {
      "name": "Re-Open Chat",
      "value": "reOpenChat",
      "action": "Re-open a chat",
      "description": "Re-opens a chat",
      "resource": "chats"
    },
    {
      "name": "Global Search",
      "value": "globalSearch",
      "action": "Global search",
      "description": "Executes a global search using the provided configuration",
      "resource": "search"
    },
    {
      "name": "Create Service",
      "value": "createService",
      "action": "Create a service",
      "description": "Creates a new service",
      "resource": "services"
    },
    {
      "name": "Delete Service",
      "value": "deleteService",
      "action": "Delete a service",
      "description": "Deletes a service",
      "resource": "services"
    },
    {
      "name": "Get All Services",
      "value": "getAllServices",
      "action": "Get all services",
      "description": "Gets a list of all services",
      "resource": "services"
    },
    {
      "name": "Get Service",
      "value": "getServiceById",
      "action": "Get a service",
      "description": "Gets a service by ID",
      "resource": "services"
    },
    {
      "name": "Update Service",
      "value": "updateService",
      "action": "Update a service",
      "description": "Updates an existing service",
      "resource": "services"
    },
    {
      "name": "Get Software Licenses",
      "value": "getSoftwareLicenses",
      "action": "Get a list of software licenses",
      "description": "Get a list of software licenses",
      "resource": "softwareLicenses"
    },
    {
      "name": "Create Software License",
      "value": "createSoftwareLicense",
      "action": "Create a software license",
      "description": "Creates a software license",
      "resource": "softwareLicenses"
    },
    {
      "name": "Get Software License by ID",
      "value": "getSoftwareLicenseById",
      "action": "Get a software license by ID",
      "description": "Gets a single software license by ID",
      "resource": "softwareLicenses"
    },
    {
      "name": "Update Software License",
      "value": "updateSoftwareLicense",
      "action": "Update a software license",
      "description": "Updates a software license",
      "resource": "softwareLicenses"
    },
    {
      "name": "Delete Software License",
      "value": "deleteSoftwareLicense",
      "action": "Delete a software license",
      "description": "Deletes a software license",
      "resource": "softwareLicenses"
    },
    {
      "name": "Get Software License Types",
      "value": "getSoftwareLicenseTypes",
      "action": "Get software license types",
      "description": "Gets all software license types",
      "resource": "softwareLicenses"
    },
    {
      "name": "Create Software License Type",
      "value": "createSoftwareLicenseType",
      "action": "Create a software license type",
      "description": "Creates a new software license type",
      "resource": "softwareLicenses"
    },
    {
      "name": "Get Software License Type",
      "value": "getSoftwareLicenseTypeById",
      "action": "Get a software license type",
      "description": "Gets a single software license type",
      "resource": "softwareLicenses"
    },
    {
      "name": "Update Software License Type",
      "value": "updateSoftwareLicenseType",
      "action": "Update a software license type",
      "description": "Updates a software license type",
      "resource": "softwareLicenses"
    },
    {
      "name": "Delete Software License Type",
      "value": "deleteSoftwareLicenseType",
      "action": "Delete a software license type",
      "description": "Deletes a software license type",
      "resource": "softwareLicenses"
    },
    {
      "name": "Create / Import Remote Support",
      "value": "createRemoteSupport",
      "action": "Create remote support",
      "description": "Creates/imports a remote support into the TANSS database",
      "resource": "remoteSupports"
    },
    {
      "name": "Get List of Remote Supports",
      "value": "getRemoteSupports",
      "action": "Get remote supports",
      "description": "Gets a list of remote supports based on filter settings",
      "resource": "remoteSupports"
    },
    {
      "name": "Get Remote Support by ID",
      "value": "getRemoteSupportById",
      "action": "Get remote support by id",
      "description": "Gets a remote support from the database by its ID",
      "resource": "remoteSupports"
    },
    {
      "name": "Update Remote Support",
      "value": "updateRemoteSupport",
      "action": "Update remote support",
      "description": "Updates a remote support by ID and sets the new values",
      "resource": "remoteSupports"
    },
    {
      "name": "Delete Remote Support",
      "value": "deleteRemoteSupport",
      "action": "Delete remote support",
      "description": "Deletes a remote support by ID",
      "resource": "remoteSupports"
    },
    {
      "name": "Get Device Assignments",
      "value": "getDeviceAssignments",
      "action": "Get device assignments",
      "description": "Gets all device assignments for the remote support type",
      "resource": "remoteSupports"
    },
    {
      "name": "Create Device Assignment",
      "value": "createAssignDevice",
      "action": "Create device assignment",
      "description": "Creates a device assignment mapping deviceId -> company/link",
      "resource": "remoteSupports"
    },
    {
      "name": "Delete Device Assignment",
      "value": "deleteAssignDevice",
      "action": "Delete device assignment",
      "description": "Deletes a device assignment by deviceId",
      "resource": "remoteSupports"
    },
    {
      "name": "Get Technician Assignments",
      "value": "getEmployeeAssignments",
      "action": "Get technician assignments",
      "description": "Gets all employee (technician) assignments for the remote support type",
      "resource": "remoteSupports"
    },
    {
      "name": "Create Technician Assignment",
      "value": "createAssignEmployee",
      "action": "Create technician assignment",
      "description": "Creates an assignment mapping userId -> employeeId",
      "resource": "remoteSupports"
    },
    {
      "name": "Delete Technician Assignment",
      "value": "deleteAssignEmployee",
      "action": "Delete technician assignment",
      "description": "Deletes a technician assignment by userId",
      "resource": "remoteSupports"
    }
  ]

npm_readme:
  # Important for the old Tanss Node Users

  <details>
  <summary>Show migration details</summary>

  A new **TANSS Node** was released on **October 27, 2025** [here](https://github.com/BuddiesD/n8n-nodes-tanss).  
  Please note that **existing credentials are not compatible** due to the introduction of **2FA (Two-Factor Authentication)**.

  You can install both versions, but **2FA functionality will only be visible after uninstalling** the old package.

  Old: [n8n-nodes-tanss-api](https://www.npmjs.com/package/n8n-nodes-tanss-api)<br>
  New: [n8n-nodes-tanss](https://www.npmjs.com/package/n8n-nodes-tanss)

  ### Breaking Changes (Credentials & Auth)

  **Important:** Updating from older versions to versions **greater than 1.1.0** can break existing workflows until credentials and auth setup are migrated.

  - The legacy credential `TanssApi` is removed.
  - Authentication is now handled via `Auth Mode` and two credential types:
    - `TANSS User API` (username/password, optional 2FA, auto refresh)
    - `TANSS Generated Token API` (static generated token)
  - Existing workflows using old credentials must be reconfigured with one of the new credential types.
  - The old dedicated Authentication resource/node operations were removed.
  - If your workflow previously used Authentication operations to obtain tokens manually, switch to normal resource operations with the configured credentials.
  - TANSS credentials are now also usable in the normal n8n `HTTP Request` node.

  </details>


  # n8n-nodes-tanss

  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://opensource.org/licenses/MIT)
  [![CodeFactor](https://www.codefactor.io/repository/github/buddiesd/n8n-nodes-tanss/badge)](https://www.codefactor.io/repository/github/buddiesd/n8n-nodes-tanss)

  <div align="center">
  <img src="./docs/images/n8n_tanss.png" width="70%">
  </div>
  <br>
  This is an n8n community node. It lets you use the TANSS API in your n8n workflows.<br>
  TANSS is a professional ticket and service management system for handling support tickets, customer communication, and internal processes.

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

  ## Contents

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Resources](#resources)
  - [ToDo](#to-do--progress)
  - [Changelog](CHANGELOG.md)
  - [Contributing](#contributing)

  ## Installation

  ### For installation in n8n

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

  ---

  ### For Local Development

  This project is an **n8n community node** and must be run from source for local development.

  #### Prerequisites

  - Node.js (v22.20.0 recommended)
  - npm

  #### 1. Clone the repository

  You can clone the repository anywhere on your system — it does **not** need to be inside the n8n directory.
  ```bash
  git clone https://github.com/BuddiesD/n8n-nodes-tanss.git
  cd n8n-nodes-tanss
  ```
  #### 2. Install dependencies
  ```bash
  npm install
  ```
  #### 3. Start development mode

  Run the node in development mode with live reloading:

  ```bash
  npm run dev
  ```
  This command uses `n8n-node dev` to build the node, start a local n8n instance, and automatically apply code changes during development.

  `npm run dev` is equivalent to running `n8n-node dev` directly.

  ### Development (Dev Container)
  To start **n8n** with the custom node, run: `npm run dev`

  Note: The first startup may time out because n8n is being downloaded and set up.

  ## Operations

  The following operations are supported by this node and are documented in the **ToDo list** and the **TANSS API documentation**.

  **Operations currently implemented** in the node are marked as **Done** or **Testing** in the **ToDo list**.
  A complete overview of all available operations can be found in the TANSS API documentation.

  - [ToDo](#to-do--progress)
  - [Tanss API documentation](https://api-doc.tanss.de/)

  ## Credentials

  Authentication is now fully credential-based and also works with n8n `HTTP Request` using TANSS credentials.

  Use the node parameter `Auth Mode` and select one credential type:

  - `User Login (Auto Refresh)`
    - Credential: `TANSS User API`
    - Fields: `Base URL`, `Username`, `Password`, optional `2FA Secret`
    - Automatically refreshes tokens using `refreshToken` when possible

  - `Generated Token`
    - Credential: `TANSS Generated Token API`
    - Fields: `Base URL`, `Generated API Token`
    - Uses static generated token scopes (no refresh)

  ## Compatibility

  Compatible with n8n@1.60.0 or later<br>
  Tested with TANSS API. Version: 10.12.0

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Tanss API documentation](https://api-doc.tanss.de/)

  ## To-Do / Progress

  **Status / Progress**  
  Progress: **172 / 270 (1 not in API Docs)** (64%)

  <details>
  <summary><strong>Complete overview</strong></summary>

  <br>
  <details>
  <summary><strong>tickets [6/6] - Done</strong></summary>

    - [x] [POST] Creates a ticket in the database
    - [x] [GET] Gets a ticket by id
    - [x] [DEL] Deletes a ticket by id
    - [x] [PUT] Updates a ticket
    - [x] [GET] Gets a ticket history
    - [x] [POST] Creates a comment
    - [x] [PUT] Merge two Tickets (not in API Docs)
  </details>
  <details>
  <summary><strong>ticket lists [10/10] - Done</strong></summary>

    - [x] [GET] gets a list of own tickets (assigned to currently logged in employee)
    - [x] [GET] gets a list of general tickets (assigned to no employee)
    - [x] [GET] gets a list of company tickets
    - [x] [GET] gets a list of tickets of all technicians
    - [x] [GET] gets a list of repair tickets
    - [x] [GET] gets a list of not identified tickets
    - [x] [GET] gets a list of all projects
    - [x] [GET] gets a list of all tickets which are assigned to local ticket admins
    - [x] [GET] gets a list of all ticket which a technician has a role in
    - [x] [PUT] Get a (custom) ticket list
  </details>
  <details>
  <summary><strong>ticket content [5/5] - Done</strong></summary>

    - [x] [GET] Gets all ticket documents
    - [x] [GET] Gets a ticket document
    - [x] [GET] Gets all ticket images
    - [x] [GET] Gets a ticket image
    - [x] [POST] upload a document/image
  </details>
  <details>
  <summary><strong>ticket states [4/4] - Done</strong></summary>

    - [x] [GET] Gets a list of all ticket states
    - [x] [POST] Creates a ticket state
    - [x] [PUT] Updates a ticket state
    - [x] [DEL] Deletes a ticket state
  </details>
  <details>
  <summary><strong>timestamp [15/15] - Done</strong></summary>

    - [x] [GET] gets a list of timestamps from a given period
    - [x] [POST] writes a timestamp into the database
    - [x] [PUT] edits a single timestamp
    - [x] [PUT] writes the timstamps of a whole day into the database at once
    - [x] [GET] gets the timestamp infos for a given time period
    - [x] [GET] gets the timestamp infos for a given time period (with statistical values)
    - [x] [POST] does one or more "day closings" for the timestamp module
    - [x] [DEL] remove / undo one or more "day closings" for the timestamp module
    - [x] [GET] gets all infos about last dayclosings for employees
    - [x] [POST] created dayClosings to a given date
    - [x] [POST] sets the initial balance for this employee
    - [x] [GET] gets a list of all pause configs
    - [x] [POST] creates a pause config
    - [x] [PUT] updates a pause config
    - [x] [DEL] deletes a pause config
  </details>
  <details>
  <summary><strong>calls [9/9] - Done</strong></summary>

    - [x] [POST] Creates/imports a phone call into the database
    - [x] [PUT] Get a list of phone calls
    - [x] [GET] Get phone call by id
    - [x] [PUT] Update phone call
    - [x] [POST] identifies a phone call
    - [x] [GET] Get all employee assignments
    - [x] [POST] Creates a new employee assignment
    - [x] [DEL] Deletes an employee assignment
    - [x] [POST] Creates a call notification
  </details>
  <details>
  <summary><strong>calls (user context) [3/3] - Done</strong></summary>

    - [x] [PUT] Get a list of phone calls
    - [x] [GET] Get phone call by id
    - [x] [POST] identifies a phone call
  </details>
  <details>
  <summary><strong>remote supports [11/11] - Done</strong></summary>

    - [x] [POST] Creates/imports a remote support into the database
    - [x] [PUT] Get list of remote supports
    - [x] [GET] Get remote support by id
    - [x] [PUT] Updates a remote support
    - [x] [DEL] Delete remote support
    - [x] [GET] Gets all device assignments
    - [x] [POST] Creates a device assignment
    - [x] [DEL] Deletes a device assignment
    - [x] [GET] Gets all technician assignments
    - [x] [POST] Creates a technician assignment
    - [x] [DEL] Delets a technician assignment
  </details>
  <details>
  <summary><strong>monitoring [0/7] - ToDo</strong></summary>

    - [ ] [POST] Creates a ticket, using the monitoring api
    - [ ] [POST] Assigns a groupName to a company or device
    - [ ] [DEL] Delete a group assignment
    - [ ] [GET] Gets all group assignments
    - [ ] [GET] Gets ticket(s), based on a given group
    - [ ] [GET] Gets a ticket (created by the monitoring api) by id
    - [ ] [PUT] Updates a ticket (created by the monitoring api) by id
  </details>
  <details>
  <summary><strong>erp [0/16] - ?</strong></summary>

    - [ ] [POST] Insert new invoices
    - [ ] [GET] Gets a list of billable supports
    - [ ] [GET] Get a list of customers and employees
    - [ ] [POST] Insert new customers
    - [ ] [POST] create a new ticket
    - [ ] [GET] gets a list of tickets states
    - [ ] [GET] gets a list of tickets types
    - [ ] [POST] upload a document/image into a ticket
    - [ ] [GET] get all employees from the own company
    - [ ] [GET] gets all departments
    - [ ] [GET] list of company categories
    - [ ] [POST] Creates a new company category
    - [ ] [GET] gets all employees of a department
    - [ ] [GET] search for a company
    - [ ] [GET] gets all departments of a employee
    - [ ] [GET] gets all users with the associated departments
  </details>
  <details>
  <summary><strong>chats [10/10] - Testing</strong></summary>

    - [x] [POST] Creates a new chat
    - [x] [PUT] Get a list of chats
    - [x] [GET] Gets a chat
    - [x] [GET] Gets chat close requests
    - [x] [POST] Creates a new chat message
    - [x] [POST] Adds a participant
    - [x] [DEL] Deletes a participant
    - [x] [POST] Closes a chat
    - [x] [PUT] Accept/decline close request
    - [x] [POST] re-opens a chat
  </details>
  <details>
  <summary><strong>offer [0/16] - ?</strong></summary>

    - [ ] [POST] Creates a new erp selection
    - [ ] [GET] Fetches an erp selection
    - [ ] [PUT] Updates an erp selection
    - [ ] [DEL] Deletes an erp selection
    - [ ] [GET] Gets list of offer templates
    - [ ] [POST] Creates an offer template
    - [ ] [GET] Gets an offer templates
    - [ ] [PUT] Updates an offer templates
    - [ ] [DEL] Deletes an offer template
    - [ ] [GET] material picker
    - [ ] [GET] material picker for erp selection
    - [ ] [PUT] Gets list of offers
    - [ ] [POST] Creates an offer
    - [ ] [GET] Gets an offer
    - [ ] [PUT] Updates an offer
    - [ ] [DEL] Deletes an offer
  </details>
  <details>
  <summary><strong>availability [1/1] - Done</strong></summary>

    - [x] [GET] Fetches availability infos
  </details>
  <details>
  <summary><strong>employees [2/2] - Done</strong></summary>

    - [x] [GET] Gets all technicians
    - [x] [POST] creates an employee
  </details>
  <details>
  <summary><strong>mails [1/1] - Done</strong></summary>

    - [x] [POST] Test email smtp settings
  </details>
  <details>
  <summary><strong>tags [0/10] - ToDo</strong></summary>

    - [ ] [POST] Creates a new tag
    - [ ] [GET] Get all tags
    - [ ] [GET] Gets a tag
    - [ ] [PUT] Edits a tag
    - [ ] [DEL] Deletes a tag
    - [ ] [POST] Assigns a tag
    - [ ] [DEL] Removes a tag
    - [ ] [GET] List of tags to an assignment
    - [ ] [PUT] Assigns multiple tags
    - [ ] [GET] List of tags logs to an assignment
  </details>
  <details>
  <summary><strong>callback [4/4] - Done</strong></summary>

    - [x] [POST] Creates a callback
    - [x] [PUT] Get a list of callbacks
    - [x] [GET] Gets a callback
    - [x] [PUT] Updates a callback
  </details>
  <details>
  <summary><strong>search [1/1] - Done</strong></summary>

    - [x] [PUT] global search
  </details>
  <details>
  <summary><strong>checklists [5/5] - Done</strong></summary>

    - [x] [POST] Assigns a checklist to a ticket
    - [x] [DEL] Removes a checklist from a ticket
    - [x] [GET] Gets checklists for a ticket
    - [x] [GET] Gets checklist for ticket
    - [x] [PUT] Check an item
  </details>
  <details>
  <summary><strong>supports [0/5] - ToDo</strong></summary>

    - [ ] [PUT] Get a support list
    - [ ] [POST] Creates a support/appointment
    - [ ] [GET] Gets a support/appointment
    - [ ] [PUT] Edits a support/appointment
    - [ ] [POST] Uploads a signature for supports
  </details>
  <details>
  <summary><strong>timers [0/8] - ?</strong></summary>

    - [ ] [GET] Get all timers of current user
    - [ ] [POST] Creates a timer
    - [ ] [DEL] Deletes a timer
    - [ ] [GET] Get a specific timer
    - [ ] [PUT] Starts/stops timer
    - [ ] [GET] Get all timer fragments
    - [ ] [DEL] Deletes a timer fragment
    - [ ] [PUT] Updates a timer fragment
  </details>
  <details>
  <summary><strong>pc [5/5] - Done</strong></summary>

    - [x] [GET] Gets a pc by id
    - [x] [PUT] Updates a pc
    - [x] [DEL] Deletes a pc
    - [x] [POST] Creates a pc
    - [x] [PUT] Gets a list of pcs
  </details>
  <details>
  <summary><strong>periphery [11/11] - Done</strong></summary>

    - [x] [GET] Gets a periphery by id
    - [x] [PUT] Updates a periphery
    - [x] [DEL] Deletes a periphery
    - [x] [POST] Creates a periphery
    - [x] [PUT] Gets a list of peripheries
    - [x] [GET] Get periphery types
    - [x] [POST] Create periphery type
    - [x] [PUT] Update periphery type
    - [x] [DEL] Delete periphery type
    - [x] [POST] Assign periphery
    - [x] [DEL] Delete periphery assignment
  </details>
  <details>
  <summary><strong>components [9/9] - Done</strong></summary>

    - [x] [GET] Gets a component by id
    - [x] [PUT] Updates a component
    - [x] [DEL] Deletes a component
    - [x] [POST] Creates a component
    - [x] [PUT] Gets a list of components
    - [x] [GET] Gets a list of component types
    - [x] [POST] Create component type
    - [x] [PUT] Update component type
    - [x] [DEL] Delete component type
  </details>
  <details>
  <summary><strong>services [5/5] - Done</strong></summary>

    - [x] [POST] Creates a service
    - [x] [GET] Gets a list of all services
    - [x] [GET] Gets a service by id
    - [x] [PUT] Updates a service
    - [x] [DEL] Deletes a service
  </details>
  <details>
  <summary><strong>ips [4/4] - Done</strong></summary>

    - [x] [GET] Gets ip addresses
    - [x] [POST] Creates an ip address
    - [x] [PUT] Update ip address
    - [x] [DEL] Deletes an ip address
  </details>
  <details>
  <summary><strong>company [2/2] - Done</strong></summary>

    - [x] [POST] Creates a new company
    - [x] [GET] Gets all employees of a company
  </details>
  <details>
  <summary><strong>company category [10/10] - Done</strong></summary>

    - [x] [GET] list of categories
    - [x] [POST] Creates a new company category
    - [x] [GET] gets a category
    - [x] [PUT] updates a category
    - [x] [DEL] Deletes a company category
    - [x] [GET] list of company types
    - [x] [POST] Creates a new company type -- This option is experiencing a error right now. A fix will be included in the next Tanss update.
    - [x] [GET] gets a company type
    - [x] [PUT] updates a company type
    - [x] [DEL] Deletes a company type
  </details>
  <details>
  <summary><strong>documents [0/6] - ?</strong></summary>

    - [ ] [PUT] Get a list of company documents
    - [ ] [POST] Creates a document
    - [ ] [GET] Get a single document (including content)
    - [ ] [PUT] Updates a document
    - [ ] [DEL] Deletes a document
    - [ ] [POST] Uploads a file
  </details>
  <details>
  <summary><strong>webHooks [0/6] - ?</strong></summary>

    - [ ] [POST] creates a rule
    - [ ] [PUT] get a list of rules
    - [ ] [PUT] updates a rule
    - [ ] [GET] gets a rule
    - [ ] [DEL] deletes a rule
    - [ ] [PUT] test a rule
  </details>
  <details>
  <summary><strong>ticket board [0/10] - ?</strong></summary>

    - [ ] [GET] Gets the ticket board with all panels
    - [ ] [GET] Gets an empty ticket board panel
    - [ ] [POST] Creates a new ticket board panel
    - [ ] [PUT] Updates a ticket board panel
    - [ ] [GET] Gets a ticket board panel
    - [ ] [DEL] Deletes a ticket board panel
    - [ ] [GET] Gets all registers from a ticket board panel
    - [ ] [GET] Gets a ticket board from a project
    - [ ] [GET] Gets all registers from a ticket board project
    - [ ] [GET] Get global ticket panels
  </details>
  <details>
  <summary><strong>operating systems [5/5] - Done</strong></summary>

    - [x] [POST] Creates a new os
    - [x] [GET] Get a list of all os
    - [x] [PUT] Updates a os
    - [x] [GET] Get a specific os
    - [x] [DEL] Deletes a specific os
  </details>
  <details>
  <summary><strong>manufacturer [5/5] - Done</strong></summary>

    - [x] [POST] Creates a new manufacturer
    - [x] [GET] Get a list of all manufacturers
    - [x] [PUT] Updates a manufacturer
    - [x] [GET] Get a manufacturer
    - [x] [DEL] Deletes a manufacturer
  </details>
  <details>
  <summary><strong>cpus [5/5] - Done</strong></summary>

    - [x] [POST] Creates a new cpu
    - [x] [GET] Get a list of all cpus
    - [x] [PUT] Updates a cpu
    - [x] [GET] Get a cpu
    - [x] [DEL] Deletes a cpu
  </details>
  <details>
  <summary><strong>hddTypes [5/5] - Done</strong></summary>

    - [x] [POST] Creates a new hdd type
    - [x] [GET] Get a list of all hdd types
    - [x] [PUT] Updates a hdd type
    - [x] [GET] Get a hdd type
    - [x] [DEL] Deletes a hdd type
  </details>
  <details>
  <summary><strong>identify [0/1] - ToDo</strong></summary>

    - [ ] [POST] identifies items
  </details>
  <details>
  <summary><strong>emailAccounts [0/6] - ?</strong></summary>

    - [ ] [POST] Creates an email account
    - [ ] [GET] List accounts of company
    - [ ] [GET] Gets an account
    - [ ] [PUT] Edit an accounts
    - [ ] [DEL] Deletes an account
    - [ ] [GET] List account types
  </details>
  <details>
  <summary><strong>vacationRequests [0/7] - ToDo</strong></summary>

    - [ ] [PUT] Gets a list of vacation requests
    - [ ] [GET] Gets a list of absence/custom types
    - [ ] [POST] creates a vacation request
    - [ ] [PUT] updates a vacation request
    - [ ] [DEL] deletes a vacation request
    - [ ] [GET] gets the available vacation days per year
    - [ ] [POST] sets the available vacation days per year
  </details>
  <details>
  <summary><strong>activityFeed [3/3] - Testing</strong></summary>

    - [x] [PUT] List of user items
    - [x] [GET] Number of unseen events
    - [x] [POST] Marks all as seen
  </details>
  <details>
  <summary><strong>domains [5/5] - Done</strong></summary>

    - [x] [POST] Creates a domain -- This option is experiencing a error right now, Waiting for Support
    - [x] [GET] Gets a single domain
    - [x] [PUT] Updates a domain
    - [x] [DEL] Deletes a domain
    - [x] [GET] List of domains of a company
  </details>
  <details>
  <summary><strong>software licenses [10/10] - Done</strong></summary>

    - [x] [PUT] Get a list of software licenses
    - [x] [POST] Creates a software license
    - [x] [GET] Gets a single software license by id
    - [x] [PUT] Updates a software license
    - [x] [DEL] Deletes a software license
    - [x] [GET] Gets all software license types
    - [x] [POST] Creates a new software license type
    - [x] [GET] Gets a single software license type
    - [x] [PUT] Updates a software license type
    - [x] [DEL] Deletes a software license type
  </details>

  </details>

  ## Contributing

  Thank you for considering contributing to this project! Community contributions are what keep open-source projects growing and improving, and every contribution is highly appreciated.

  When submitting bug reports, please make sure they are:

  - **Reproducible** – clearly describe the steps required to reproduce the issue.
  - **Detailed** – include relevant information such as versions, environment, and setup.
  - **Unique** – avoid creating duplicate issues by checking existing ones first.
  - **Focused** – report one bug per issue to keep discussions clear and effective.

ai_documentation_summary:
  {"purpose":"Interact with the TANSS API to manage tickets, service requests, and customer communications within n8n workflows.","capabilities":["Create tickets","Get ticket by ID","Delete tickets","Update tickets","Get ticket history","Create comments","Merge tickets","List own tickets","List general tickets","List company tickets"],"authentication":"API key required (via 'TANSS User API' with username/password/2FA or 'TANSS Generated Token API')","commonUseCases":["Automating ticket creation and updates","Generating reports from ticket lists","Triggering workflows based on ticket status changes","Integrating TANSS data with other business processes"],"limitations":["Existing credentials from older versions are not compatible due to 2FA requirements","Only 60% of available API operations are currently implemented (162/270)","Some operations like merging tickets are not documented in the official API docs","Requires n8n version 1.60.0 or later"],"relatedNodes":["HTTP Request"]}


node_type: n8n-nodes-coresignal-api.coresignal
package_name: n8n-nodes-coresignal-api
display_name: Coresignal
description: Interact with Coresignal API for company, employee, job, and post data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: coresignal
author_github_url: https://github.com/Coresignal-com/
npm_package_name: n8n-nodes-coresignal-api
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:33.761Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "employee",
      "options": [
        {
          "name": "Company",
          "value": "company",
          "description": "Access company data and profiles"
        },
        {
          "name": "Employee",
          "value": "employee",
          "description": "Access employee data and profiles"
        },
        {
          "name": "Employee Post",
          "value": "post",
          "description": "Access employee posts data"
        },
        {
          "name": "Job",
          "value": "job",
          "description": "Access jobs data"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_by_id",
      "options": [
        {
          "name": "Enrich by Website",
          "value": "enrich",
          "action": "Enrich company by website URL",
          "description": "Enrich company data using a website URL"
        },
        {
          "name": "Get by ID",
          "value": "get_by_id",
          "action": "Get company by ID",
          "description": "Retrieve a full company profile using a company ID"
        },
        {
          "name": "Get by Slug",
          "value": "get_by_slug",
          "action": "Get company by URL slug",
          "description": "Retrieve a full company profile using a URL slug"
        },
        {
          "name": "Search with Elasticsearch DSL",
          "value": "search_es_dsl",
          "action": "Search companies using elasticsearch DSL",
          "description": "Search companies using an Elasticsearch DSL query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_by_id",
      "options": [
        {
          "name": "Get by ID",
          "value": "get_by_id",
          "action": "Get employee by ID",
          "description": "Retrieve a full employee profile using an employee ID"
        },
        {
          "name": "Get by Slug",
          "value": "get_by_slug",
          "action": "Get employee by URL slug",
          "description": "Retrieve a full employee profile using a URL slug"
        },
        {
          "name": "Search with Elasticsearch DSL",
          "value": "search_es_dsl",
          "action": "Search employees using elasticsearch DSL",
          "description": "Search employees using an Elasticsearch DSL query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_by_id",
      "options": [
        {
          "name": "Get by ID",
          "value": "get_by_id",
          "action": "Get job by ID",
          "description": "Retrieve a full job posting using a job ID"
        },
        {
          "name": "Search with Elasticsearch DSL",
          "value": "search_es_dsl",
          "action": "Search jobs using elasticsearch DSL",
          "description": "Search jobs using an Elasticsearch DSL query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get_by_id",
      "options": [
        {
          "name": "Get by ID",
          "value": "get_by_id",
          "action": "Get employee post by ID",
          "description": "Retrieve a full employee post using a post ID"
        },
        {
          "name": "Search with Elasticsearch DSL",
          "value": "search_es_dsl",
          "action": "Search employee posts using elasticsearch DSL",
          "description": "Search employee posts using an Elasticsearch DSL query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Enrich by Website",
      "value": "enrich",
      "action": "Enrich company by website URL",
      "description": "Enrich company data using a website URL",
      "resource": "company"
    },
    {
      "name": "Get by ID",
      "value": "get_by_id",
      "action": "Get company by ID",
      "description": "Retrieve a full company profile using a company ID",
      "resource": "company"
    },
    {
      "name": "Get by Slug",
      "value": "get_by_slug",
      "action": "Get company by URL slug",
      "description": "Retrieve a full company profile using a URL slug",
      "resource": "company"
    },
    {
      "name": "Search with Elasticsearch DSL",
      "value": "search_es_dsl",
      "action": "Search companies using elasticsearch DSL",
      "description": "Search companies using an Elasticsearch DSL query",
      "resource": "company"
    },
    {
      "name": "Get by ID",
      "value": "get_by_id",
      "action": "Get employee by ID",
      "description": "Retrieve a full employee profile using an employee ID",
      "resource": "employee"
    },
    {
      "name": "Get by Slug",
      "value": "get_by_slug",
      "action": "Get employee by URL slug",
      "description": "Retrieve a full employee profile using a URL slug",
      "resource": "employee"
    },
    {
      "name": "Search with Elasticsearch DSL",
      "value": "search_es_dsl",
      "action": "Search employees using elasticsearch DSL",
      "description": "Search employees using an Elasticsearch DSL query",
      "resource": "employee"
    },
    {
      "name": "Get by ID",
      "value": "get_by_id",
      "action": "Get job by ID",
      "description": "Retrieve a full job posting using a job ID",
      "resource": "job"
    },
    {
      "name": "Search with Elasticsearch DSL",
      "value": "search_es_dsl",
      "action": "Search jobs using elasticsearch DSL",
      "description": "Search jobs using an Elasticsearch DSL query",
      "resource": "job"
    },
    {
      "name": "Get by ID",
      "value": "get_by_id",
      "action": "Get employee post by ID",
      "description": "Retrieve a full employee post using a post ID",
      "resource": "post"
    },
    {
      "name": "Search with Elasticsearch DSL",
      "value": "search_es_dsl",
      "action": "Search employee posts using elasticsearch DSL",
      "description": "Search employee posts using an Elasticsearch DSL query",
      "resource": "post"
    }
  ]

npm_readme:
  # n8n-nodes-coresignal-api

  This is an [n8n](https://n8n.io/) community node for the [Coresignal API](https://coresignal.com/). It provides access to company, employee, job posting, and employee post data from Coresignal's multi-source datasets.

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

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

  ## Installation

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

  ## Operations

  ### Company Data

  - **Collect by ID** - Retrieve a full company profile using a company ID
  - **Collect by slug** - Retrieve a full company profile using a URL slug
  - **Enrich by website** - Enrich company data using a website URL
  - **Search with Elasticsearch DSL** - Search companies using an Elasticsearch DSL query

  ### Employee Data

  - **Collect by ID** - Retrieve a full employee profile using an employee ID
  - **Collect by slug** - Retrieve a full employee profile using a URL slug
  - **Search with Elasticsearch DSL** - Search employees using an Elasticsearch DSL query

  ### Job Data

  - **Collect by ID** - Retrieve a full job posting using a job ID
  - **Search with Elasticsearch DSL** - Search jobs using an Elasticsearch DSL query

  ### Employee Posts

  - **Collect by ID** - Retrieve a full employee post using a post ID
  - **Search with Elasticsearch DSL** - Search employee posts using an Elasticsearch DSL query

  ## Credentials

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

  1. Sign up at [Coresignal](https://coresignal.com/) and obtain an API key
  2. In n8n, go to **Credentials** > **Add Credential** > **Coresignal API**
  3. Enter your API key
  4. The default Base URL is `https://api.coresignal.com` (change only if instructed by Coresignal)

  ## Usage

  ### Collect by ID

  Select a category (Company, Employee, Job, or Post), choose "Collect by ID", and enter the entity ID. Optionally specify fields to return only specific data.

  ### Collect by slug

  Available for Company and Employee categories. Enter the URL slug (e.g., `microsoft` for a company or `john-smith` for an employee).

  ### Enrich by website

  Available for the Company category. Enter a company website URL to enrich with Coresignal data.

  ### Search with Elasticsearch DSL

  Use an Elasticsearch DSL query to search across any category. Enable **Preview mode** for quick testing (returns up to 20 results with essential fields only).

  Build your queries using the Coresignal Playground:
  - [Employee Playground](https://dashboard.coresignal.com/apis/employees/playground)
  - [Company Playground](https://dashboard.coresignal.com/apis/company/playground)
  - [Jobs Playground](https://dashboard.coresignal.com/apis/jobs/playground)

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Interact with the Coresignal API to retrieve and search company, employee, job posting, and employee post data from multi-source datasets.","capabilities":["Retrieve company profiles by ID or URL slug","Enrich company data using website URLs","Search companies using Elasticsearch DSL","Retrieve employee profiles by ID or URL slug","Search employees using Elasticsearch DSL","Retrieve job postings by ID","Search job postings using Elasticsearch DSL","Retrieve employee posts by ID","Search employee posts using Elasticsearch DSL"],"authentication":"API key required","commonUseCases":["Enriching lead data with company background information","Finding employees at specific companies for recruitment","Analyzing job market trends by searching job postings","Monitoring employee sentiment and posts"],"limitations":["Search with Elasticsearch DSL in Preview mode returns only up to 20 results with essential fields","Collect by slug is only available for Company and Employee categories, not for Jobs or Posts","Enrich by website is only available for the Company category"],"relatedNodes":[]}


node_type: @hasdata/n8n-nodes-hasdata.hasData
package_name: @hasdata/n8n-nodes-hasdata
display_name: HasData
description: Scrape data from various websites
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rmilyushkevich
author_github_url: https://github.com/hasdata/n8n-nodes-hasdata.git
npm_package_name: @hasdata/n8n-nodes-hasdata
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:33.764Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "google_serp",
      "options": [
        {
          "name": "Google SERP",
          "value": "google_serp"
        },
        {
          "name": "Google Map",
          "value": "google_maps"
        },
        {
          "name": "Zillow",
          "value": "zillow"
        },
        {
          "name": "Amazon",
          "value": "amazon"
        },
        {
          "name": "Yellow Page",
          "value": "yellowpages"
        },
        {
          "name": "Web Scraping",
          "value": "web_scraping"
        },
        {
          "name": "Glassdoor",
          "value": "glassdoor"
        },
        {
          "name": "Indeed",
          "value": "indeed"
        },
        {
          "name": "Instagram",
          "value": "instagram"
        },
        {
          "name": "Airbnb",
          "value": "airbnb"
        },
        {
          "name": "Google Image",
          "value": "google_images"
        },
        {
          "name": "Google Travel",
          "value": "google_travel"
        },
        {
          "name": "Google Trend",
          "value": "google_trends"
        },
        {
          "name": "Shopify",
          "value": "shopify"
        },
        {
          "name": "Redfin",
          "value": "redfin"
        },
        {
          "name": "Yelp",
          "value": "yelp"
        },
        {
          "name": "Bing",
          "value": "bing"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "serp",
      "options": [
        {
          "name": "Get Google Search Results",
          "value": "serp",
          "action": "Get Google Search Results",
          "description": "Retrieves structured Google search results for specified search terms and parameters."
        },
        {
          "name": "Get Google Light Search Results",
          "value": "serp_light",
          "action": "Get Google Light Search Results",
          "description": "Retrieves structured Google search results for specified search terms and parameters."
        },
        {
          "name": "Get Shopping Search Results",
          "value": "shopping",
          "action": "Get Shopping Search Results",
          "description": "Retrieves structured Google Shopping results for specified search terms and parameters."
        },
        {
          "name": "Get Google News Results",
          "value": "news",
          "action": "Get Google News Results",
          "description": "Returns structured Google News results based on query, topic, publisher, or story tokens."
        },
        {
          "name": "Get Short Videos Search Results",
          "value": "short_videos",
          "action": "Get Short Videos Search Results",
          "description": "Retrieves structured Google short videos search results based on specified search terms and advanced filters."
        },
        {
          "name": "Get Google Events Results",
          "value": "events",
          "action": "Get Google Events Results",
          "description": "Retrieves information about events from Google based on specified search terms, locations, and filters."
        },
        {
          "name": "Get AI Mode SERP Results",
          "value": "ai_mode",
          "action": "Get AI Mode SERP Results",
          "description": "Retrieves structured Google AI Mode response for specified search terms and parameters."
        },
        {
          "name": "Get AI Overview Results",
          "value": "ai_overview",
          "action": "Get AI Overview Results",
          "description": "Retrieves AI Overview result using a pageToken from Google SERP API."
        },
        {
          "name": "Get Immersive Product Information",
          "value": "immersive_product",
          "action": "Get Immersive Product Information",
          "description": "Retrieves information about immersive product from Google based on page token."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_serp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Google Maps Search Results",
          "value": "search",
          "action": "Get Google Maps Search Results",
          "description": "Allows users to search for specific locations on Google Maps using various criteria such as keyword, coordinates, and filters."
        },
        {
          "name": "Get Map Reviews",
          "value": "reviews",
          "action": "Get Map Reviews",
          "description": "Retrieves reviews from Google Maps based on specified parameters such as data ID, language, and sorting options."
        },
        {
          "name": "Get Place Details",
          "value": "place",
          "action": "Get Place Details",
          "description": "Fetches detailed information about a specific place using the unique Google Maps `placeId`. Optional parameters allow setting the domain and language."
        },
        {
          "name": "Get Place Photos",
          "value": "photos",
          "action": "Get Place Photos",
          "description": "Retrieves photos from Google Maps using dataId or placeId with optional filters."
        },
        {
          "name": "Get Map Contributor Reviews",
          "value": "contributor_reviews",
          "action": "Get Map Contributor Reviews",
          "description": "Retrieves reviews from Google Maps user based on specified parameters such as contributor ID."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_maps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listing",
      "options": [
        {
          "name": "Get Zillow Real Estate Listings",
          "value": "listing",
          "action": "Get Zillow Real Estate Listings",
          "description": "Retrieves real estate listings from Zillow based on various search parameters."
        },
        {
          "name": "Get Zillow Property Details",
          "value": "property",
          "action": "Get Zillow Property Details",
          "description": "Retrieves detailed information about a specific property from Zillow using the property's URL."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zillow"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "product",
      "options": [
        {
          "name": "Get Amazon Product Details",
          "value": "product",
          "action": "Get Amazon Product Details",
          "description": "Retrieves product details from Amazon based on the specified ASIN and domain."
        },
        {
          "name": "Get Amazon Search Results",
          "value": "search",
          "action": "Get Amazon Search Results",
          "description": "Retrieves search results from Amazon based on the specified query and domain."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "amazon"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listing",
      "options": [
        {
          "name": "Get Airbnb Listings",
          "value": "listing",
          "action": "Get Airbnb Listings",
          "description": "Retrieves Airbnb listings based on location and check-in/check-out dates."
        },
        {
          "name": "Get Airbnb Property Details",
          "value": "property",
          "action": "Get Airbnb Property Details",
          "description": "Retrieves detailed information about a specific Airbnb listing using the listing's URL."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "airbnb"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "job",
      "options": [
        {
          "name": "Get GlassDoor Job Details",
          "value": "job",
          "action": "Get GlassDoor Job Details",
          "description": "Retrieves detailed information about a specific job listing based on the provided vacancy URL."
        },
        {
          "name": "Get GlassDoor Job Listings",
          "value": "listing",
          "action": "Get GlassDoor Job Listings",
          "description": "Retrieves job listings from Glassdoor based on various search parameters."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "glassdoor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "web_scraping",
      "options": [
        {
          "name": "Scrape Web Page",
          "value": "web_scraping",
          "action": "Scrape Web Page",
          "description": "Send a web page URL to scrape along with various optional parameters to customize the scraping process.\n"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "web_scraping"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "place",
      "options": [
        {
          "name": "Get Yellow Pages Place Details",
          "value": "place",
          "action": "Get Yellow Pages Place Details",
          "description": "Retrieves detailed information about a specific place from YellowPages."
        },
        {
          "name": "Get YellowPages Search Results",
          "value": "search",
          "action": "Get YellowPages Search Results",
          "description": "Retrieves search results from YellowPages based on the specified keyword and location."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yellowpages"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "place",
      "options": [
        {
          "name": "Get Yelp Place Details",
          "value": "place",
          "action": "Get Yelp Place Details",
          "description": "Retrieves detailed information about a specific place from Yelp using the place's Yelp ID or Yelp Alias."
        },
        {
          "name": "Get Yelp Search Results",
          "value": "search",
          "action": "Get Yelp Search Results",
          "description": "Retrieves search results from Yelp based on the specified keyword and location."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yelp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "profile",
      "options": [
        {
          "name": "Get Instagram Profile",
          "value": "profile",
          "action": "Get Instagram Profile",
          "description": "Retrieves public profile details for a specific Instagram account using its handle."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "instagram"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "images",
      "options": [
        {
          "name": "Get Image Search Results",
          "value": "images",
          "action": "Get Image Search Results",
          "description": "Retrieves structured Google image search results based on specified search terms and advanced filters."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_images"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "flights",
      "options": [
        {
          "name": "Get Google Flights Results",
          "value": "flights",
          "action": "Get Google Flights Results",
          "description": "Retrieves structured flight results from Google's flight search based on the provided parameters. Supports multiple flight types, advanced filters, and localization settings.\n"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_travel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Google Trends Data",
          "value": "search",
          "action": "Get Google Trends Data",
          "description": "Retrieves Google Trends data for specified search terms and parameters."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "google_trends"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "job",
      "options": [
        {
          "name": "Get Indeed Job Details",
          "value": "job",
          "action": "Get Indeed Job Details",
          "description": "Retrieves detailed information about a specific job listing based on the provided vacancy URL."
        },
        {
          "name": "Get Indeed Job Listings",
          "value": "listing",
          "action": "Get Indeed Job Listings",
          "description": "Retrieves job listings from Indeed based on various search parameters."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "indeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listing",
      "options": [
        {
          "name": "Get Redfin Real Estate Listings",
          "value": "listing",
          "action": "Get Redfin Real Estate Listings",
          "description": "Retrieves real estate listings from Redfin based on various search parameters."
        },
        {
          "name": "Get Redfin Property Details",
          "value": "property",
          "action": "Get Redfin Property Details",
          "description": "Retrieves detailed information about a specific property from Redfin using the property's URL."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "redfin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "collections",
      "options": [
        {
          "name": "Get Shopify Store Collections",
          "value": "collections",
          "action": "Get Shopify Store Collections",
          "description": "Retrieves a list of collections along with their details from a Shopify store."
        },
        {
          "name": "Get Shopify Store Products",
          "value": "products",
          "action": "Get Shopify Store Products",
          "description": "Retrieves product information from a Shopify store with optional limits and collection filtering."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "shopify"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "serp",
      "options": [
        {
          "name": "Get Bing Search Results",
          "value": "serp",
          "action": "Get Bing Search Results",
          "description": "Retrieves structured Bing search results for specified search terms and parameters."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bing"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Google Search Results",
      "value": "serp",
      "action": "Get Google Search Results",
      "description": "Retrieves structured Google search results for specified search terms and parameters.",
      "resource": "google_serp"
    },
    {
      "name": "Get Google Light Search Results",
      "value": "serp_light",
      "action": "Get Google Light Search Results",
      "description": "Retrieves structured Google search results for specified search terms and parameters.",
      "resource": "google_serp"
    },
    {
      "name": "Get Shopping Search Results",
      "value": "shopping",
      "action": "Get Shopping Search Results",
      "description": "Retrieves structured Google Shopping results for specified search terms and parameters.",
      "resource": "google_serp"
    },
    {
      "name": "Get Google News Results",
      "value": "news",
      "action": "Get Google News Results",
      "description": "Returns structured Google News results based on query, topic, publisher, or story tokens.",
      "resource": "google_serp"
    },
    {
      "name": "Get Short Videos Search Results",
      "value": "short_videos",
      "action": "Get Short Videos Search Results",
      "description": "Retrieves structured Google short videos search results based on specified search terms and advanced filters.",
      "resource": "google_serp"
    },
    {
      "name": "Get Google Events Results",
      "value": "events",
      "action": "Get Google Events Results",
      "description": "Retrieves information about events from Google based on specified search terms, locations, and filters.",
      "resource": "google_serp"
    },
    {
      "name": "Get AI Mode SERP Results",
      "value": "ai_mode",
      "action": "Get AI Mode SERP Results",
      "description": "Retrieves structured Google AI Mode response for specified search terms and parameters.",
      "resource": "google_serp"
    },
    {
      "name": "Get AI Overview Results",
      "value": "ai_overview",
      "action": "Get AI Overview Results",
      "description": "Retrieves AI Overview result using a pageToken from Google SERP API.",
      "resource": "google_serp"
    },
    {
      "name": "Get Immersive Product Information",
      "value": "immersive_product",
      "action": "Get Immersive Product Information",
      "description": "Retrieves information about immersive product from Google based on page token.",
      "resource": "google_serp"
    },
    {
      "name": "Get Google Maps Search Results",
      "value": "search",
      "action": "Get Google Maps Search Results",
      "description": "Allows users to search for specific locations on Google Maps using various criteria such as keyword, coordinates, and filters.",
      "resource": "google_maps"
    },
    {
      "name": "Get Map Reviews",
      "value": "reviews",
      "action": "Get Map Reviews",
      "description": "Retrieves reviews from Google Maps based on specified parameters such as data ID, language, and sorting options.",
      "resource": "google_maps"
    },
    {
      "name": "Get Place Details",
      "value": "place",
      "action": "Get Place Details",
      "description": "Fetches detailed information about a specific place using the unique Google Maps `placeId`. Optional parameters allow setting the domain and language.",
      "resource": "google_maps"
    },
    {
      "name": "Get Place Photos",
      "value": "photos",
      "action": "Get Place Photos",
      "description": "Retrieves photos from Google Maps using dataId or placeId with optional filters.",
      "resource": "google_maps"
    },
    {
      "name": "Get Map Contributor Reviews",
      "value": "contributor_reviews",
      "action": "Get Map Contributor Reviews",
      "description": "Retrieves reviews from Google Maps user based on specified parameters such as contributor ID.",
      "resource": "google_maps"
    },
    {
      "name": "Get Zillow Real Estate Listings",
      "value": "listing",
      "action": "Get Zillow Real Estate Listings",
      "description": "Retrieves real estate listings from Zillow based on various search parameters.",
      "resource": "zillow"
    },
    {
      "name": "Get Zillow Property Details",
      "value": "property",
      "action": "Get Zillow Property Details",
      "description": "Retrieves detailed information about a specific property from Zillow using the property's URL.",
      "resource": "zillow"
    },
    {
      "name": "Get Amazon Product Details",
      "value": "product",
      "action": "Get Amazon Product Details",
      "description": "Retrieves product details from Amazon based on the specified ASIN and domain.",
      "resource": "amazon"
    },
    {
      "name": "Get Amazon Search Results",
      "value": "search",
      "action": "Get Amazon Search Results",
      "description": "Retrieves search results from Amazon based on the specified query and domain.",
      "resource": "amazon"
    },
    {
      "name": "Get Airbnb Listings",
      "value": "listing",
      "action": "Get Airbnb Listings",
      "description": "Retrieves Airbnb listings based on location and check-in/check-out dates.",
      "resource": "airbnb"
    },
    {
      "name": "Get Airbnb Property Details",
      "value": "property",
      "action": "Get Airbnb Property Details",
      "description": "Retrieves detailed information about a specific Airbnb listing using the listing's URL.",
      "resource": "airbnb"
    },
    {
      "name": "Get GlassDoor Job Details",
      "value": "job",
      "action": "Get GlassDoor Job Details",
      "description": "Retrieves detailed information about a specific job listing based on the provided vacancy URL.",
      "resource": "glassdoor"
    },
    {
      "name": "Get GlassDoor Job Listings",
      "value": "listing",
      "action": "Get GlassDoor Job Listings",
      "description": "Retrieves job listings from Glassdoor based on various search parameters.",
      "resource": "glassdoor"
    },
    {
      "name": "Scrape Web Page",
      "value": "web_scraping",
      "action": "Scrape Web Page",
      "description": "Send a web page URL to scrape along with various optional parameters to customize the scraping process.\n",
      "resource": "web_scraping"
    },
    {
      "name": "Get Yellow Pages Place Details",
      "value": "place",
      "action": "Get Yellow Pages Place Details",
      "description": "Retrieves detailed information about a specific place from YellowPages.",
      "resource": "yellowpages"
    },
    {
      "name": "Get YellowPages Search Results",
      "value": "search",
      "action": "Get YellowPages Search Results",
      "description": "Retrieves search results from YellowPages based on the specified keyword and location.",
      "resource": "yellowpages"
    },
    {
      "name": "Get Yelp Place Details",
      "value": "place",
      "action": "Get Yelp Place Details",
      "description": "Retrieves detailed information about a specific place from Yelp using the place's Yelp ID or Yelp Alias.",
      "resource": "yelp"
    },
    {
      "name": "Get Yelp Search Results",
      "value": "search",
      "action": "Get Yelp Search Results",
      "description": "Retrieves search results from Yelp based on the specified keyword and location.",
      "resource": "yelp"
    },
    {
      "name": "Get Instagram Profile",
      "value": "profile",
      "action": "Get Instagram Profile",
      "description": "Retrieves public profile details for a specific Instagram account using its handle.",
      "resource": "instagram"
    },
    {
      "name": "Get Image Search Results",
      "value": "images",
      "action": "Get Image Search Results",
      "description": "Retrieves structured Google image search results based on specified search terms and advanced filters.",
      "resource": "google_images"
    },
    {
      "name": "Get Google Flights Results",
      "value": "flights",
      "action": "Get Google Flights Results",
      "description": "Retrieves structured flight results from Google's flight search based on the provided parameters. Supports multiple flight types, advanced filters, and localization settings.\n",
      "resource": "google_travel"
    },
    {
      "name": "Get Google Trends Data",
      "value": "search",
      "action": "Get Google Trends Data",
      "description": "Retrieves Google Trends data for specified search terms and parameters.",
      "resource": "google_trends"
    },
    {
      "name": "Get Indeed Job Details",
      "value": "job",
      "action": "Get Indeed Job Details",
      "description": "Retrieves detailed information about a specific job listing based on the provided vacancy URL.",
      "resource": "indeed"
    },
    {
      "name": "Get Indeed Job Listings",
      "value": "listing",
      "action": "Get Indeed Job Listings",
      "description": "Retrieves job listings from Indeed based on various search parameters.",
      "resource": "indeed"
    },
    {
      "name": "Get Redfin Real Estate Listings",
      "value": "listing",
      "action": "Get Redfin Real Estate Listings",
      "description": "Retrieves real estate listings from Redfin based on various search parameters.",
      "resource": "redfin"
    },
    {
      "name": "Get Redfin Property Details",
      "value": "property",
      "action": "Get Redfin Property Details",
      "description": "Retrieves detailed information about a specific property from Redfin using the property's URL.",
      "resource": "redfin"
    },
    {
      "name": "Get Shopify Store Collections",
      "value": "collections",
      "action": "Get Shopify Store Collections",
      "description": "Retrieves a list of collections along with their details from a Shopify store.",
      "resource": "shopify"
    },
    {
      "name": "Get Shopify Store Products",
      "value": "products",
      "action": "Get Shopify Store Products",
      "description": "Retrieves product information from a Shopify store with optional limits and collection filtering.",
      "resource": "shopify"
    },
    {
      "name": "Get Bing Search Results",
      "value": "serp",
      "action": "Get Bing Search Results",
      "description": "Retrieves structured Bing search results for specified search terms and parameters.",
      "resource": "bing"
    }
  ]

npm_readme:
  # n8n-nodes-hasdata

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

  HasData is a powerful web scraping API that provides access to various search engines and website data through easy-to-use endpoints. It handles proxies, browsers, and CAPTCHAs so you can focus on the data you need.

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

  ## Installation

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

  ## Operations

  This node supports a wide range of web scraping operations across various platforms:

  * **Google SERP**: Get search results, light results, shopping, news, short videos, events, AI mode, and AI overview.
  * **Google Maps**: Search for places, get place details, photos, reviews, and contributor reviews.
  * **Amazon**: Search products and get product details.
  * **Web Scraping**: Scrape any web page with customizable parameters (JS rendering, premium proxies, etc.).
  * **Social Media**: Instagram (profile).
  * **Real Estate**: Zillow, Redfin.
  * **Jobs**: Indeed, Glassdoor.
  * **Business Directories**: Yellow Pages, Yelp.
  * **E-commerce**: Shopify.
  * **Other**: Google Images, Google Travel, Google Trends, Bing Search, Airbnb.

  ## Credentials

  To use this node, you'll need a **HasData API Key**.

  1.  Sign up for an account at [HasData](https://hasdata.com).
  2.  Go to your [Dashboard](https://app.hasdata.com) to find your API Key.
  3.  In n8n, add a new credential of type **HasData API** and paste your key.

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n version: 1.0.0+

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [HasData API Documentation](https://docs.hasdata.com)
  * [HasData Homepage](https://hasdata.com)

ai_documentation_summary:
  {"purpose":"Enables web scraping and data extraction from various websites and search engines using the HasData API within n8n workflows.","capabilities":["Google SERP search (results, shopping, news, AI mode)","Google Maps data (places, details, reviews, photos)","Amazon product search and details","General web scraping with JS rendering","Social media scraping (Instagram profiles)","Real estate data (Zillow, Redfin)","Job board scraping (Indeed, Glassdoor)","Business directory lookup (Yellow Pages, Yelp)","E-commerce data (Shopify)","Google services (Images, Travel, Trends)"],"authentication":"API key required","commonUseCases":["Extracting product information from e-commerce sites","Gathering location-based business data","Monitoring job listings across platforms","Scraping real estate listings","Aggregating search engine results for analysis"],"limitations":[],"relatedNodes":[]}


node_type: @poof-bg/n8n-nodes-poof.poof
package_name: @poof-bg/n8n-nodes-poof
display_name: Poof
description: Remove backgrounds from images with Poof API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rafalzawadzki
author_github_url: https://github.com/poof-bg/n8n-nodes-poof.git
npm_package_name: @poof-bg/n8n-nodes-poof
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:33.765Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "removeBackground",
      "options": [
        {
          "name": "Get Account",
          "value": "getAccount",
          "action": "Get account information",
          "description": "Get account information and credit usage"
        },
        {
          "name": "Remove Background",
          "value": "removeBackground",
          "action": "Remove background from an image",
          "description": "Remove background from an image"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Account",
      "value": "getAccount",
      "action": "Get account information",
      "description": "Get account information and credit usage"
    },
    {
      "name": "Remove Background",
      "value": "removeBackground",
      "action": "Remove background from an image",
      "description": "Remove background from an image"
    }
  ]

npm_readme:
  # @poof-bg/n8n-nodes-poof

  This is an n8n community node for the [Poof](https://poof.bg) background removal API.

  Poof is the developer-first standard for background removal — precise, fast, and scalable.

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

  ## Installation

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

  ### npm

  ```bash
  npm install @poof-bg/n8n-nodes-poof
  ```

  ### n8n Desktop/Cloud

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `@poof-bg/n8n-nodes-poof` and click **Install**

  ## Operations

  ### Remove Background

  Remove the background from an image.

  **Parameters:**

  | Parameter | Description |
  |-----------|-------------|
  | Input Binary Field | Name of the binary property containing the image |
  | Output Binary Field | Name of the binary property for the result |

  **Options:**

  | Option | Description | Default |
  |--------|-------------|---------|
  | Format | Output format: PNG, JPG, or WebP | PNG |
  | Channels | RGBA (transparent) or RGB (opaque) | RGBA |
  | Background Color | Color for RGB output (hex, rgb, or name) | - |
  | Size | Output size: full, preview, small, medium, large | full |
  | Crop to Subject | Crop image to subject bounds | false |

  ### Get Account

  Retrieve account information including plan details and credit usage.

  **Returns:**

  - `organizationId` - Your organization ID
  - `plan` - Current plan name
  - `maxCredits` - Total credits in billing cycle
  - `usedCredits` - Credits used this cycle
  - `autoRechargeThreshold` - Auto-recharge threshold (if enabled)

  ## Credentials

  You need a Poof API key to use this node.

  1. Sign up at [dash.poof.bg](https://dash.poof.bg)
  2. Create an API key in your dashboard
  3. In n8n, create new credentials of type **Poof API**
  4. Paste your API key

  ## Example Workflow

  ```
  [Read Binary File] → [Poof: Remove Background] → [Write Binary File]
  ```

  1. **Read Binary File**: Load an image
  2. **Poof**: Remove the background
  3. **Write Binary File**: Save the result

  ## Resources

  - [Poof Documentation](https://docs.poof.bg)
  - [Poof Dashboard](https://dash.poof.bg)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables users to remove backgrounds from images using the Poof API, supporting various output formats and customization options.","capabilities":["Remove background from images","Output in PNG, JPG, or WebP formats","Generate transparent (RGBA) or opaque (RGB) results","Customize background color for opaque outputs","Adjust output image size (full, preview, small, medium, large)","Crop images to subject bounds","Retrieve account information including plan details and credit usage"],"authentication":"API key required","commonUseCases":["Product image processing for e-commerce","Automated photo editing workflows","Creating transparent PNG assets","Batch background removal for marketing materials"],"limitations":["Requires active Poof API subscription and credits","Dependent on external Poof API availability and rate limits"],"relatedNodes":["n8n File System nodes","n8n HTTP Request node","n8n Image Processing nodes"]}


