# nodes

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

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

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

npm_readme:
  # n8n-nodes-pagbank-connect

  n8n integration with PagBank Connect for Brazilian payment processing.


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

  ## Features

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

  ## Installation

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

  ## Configuration

  ### 1. Get Credentials

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

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

  ### 2. Configure in n8n

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

  ## Available Nodes

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

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

  ## Data Format

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

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

  Required for most operations, except payment link creation.

  ## Environments

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

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

  ## Webhooks

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

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

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

  ## Support

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

  ## License

  MIT License - see LICENSE file for details.

  ## Contributing

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


  ## Roadmap
  - More installment options
  - Recurring sales

  Subject to change based on community requests.

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


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

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

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

npm_readme:
  # n8n-nodes-anny

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

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

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

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

  ## Installation

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

  ## Operations

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

  ## Credentials

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Version history

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

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


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

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

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

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

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

  # n8n-nodes-yepcode

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

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

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

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

  ## Installation

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

  ## Operations

  ### 1. Run a YepCode Process

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

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

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

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

  ### 2. Run Code

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

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

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

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

  ## Credentials

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

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

  ## Usage

  ### Setting Up Credentials

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

  ### Using Run Process Operation

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

  ### Using Run Code Operation

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

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

  const { n8n } = yepcode.context.parameters;

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

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

  return results;
  ```

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

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

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

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

  return results
  ```

  ### Accessing n8n Context

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

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

  ### Error Handling

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

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

  ## Resources

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

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


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

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

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

npm_readme:
  # n8n-nodes-reachkit

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

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

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

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

  ## Installation

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

  ## Operations

  This node supports the following resources and operations:

  ### Blocklist

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

  ### Campaign

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

  ### Conversation

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

  ### Inbox

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

  ### Lead

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

  ### Sequence

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

  ## Credentials

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

  ### Getting your API key:

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

  ### Authentication

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

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

  ## Compatibility

  Tested with n8n version 1.x.

  ## Resources

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

  ## Usage Examples

  ### Create leads from a spreadsheet

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

  ### Get campaign analytics

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

  ### Reply to new conversations

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

  ### Manage blocklist

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

  ## Version History

  ### 0.1.0

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

  ## License

  [MIT](LICENSE.md)

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


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

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

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

npm_readme:
  # n8n-nodes-starfish

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

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

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

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

  ## Installation

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

  ## Operations

  This package provides two nodes:

  ### Starfish (CampingCare/HotelCare) Node

  Regular node for making API calls:

  #### Accommodations API

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

  #### Administrations API

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

  #### Availability API

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

  #### Categories API

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

  #### Contacts API

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

  #### Exchange Rates API

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

  #### Invoices API

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

  #### Kiosks API

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

  #### Ledgers API

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

  #### License Plates API

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

  #### Logs API

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

  #### Price Calculation API

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

  #### Products API

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

  #### Rates API

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

  #### Reservations API

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

  #### Tags API

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

  #### Timezones API

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

  #### Users API

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

  #### Widgets API

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

  ### Starfish (CampingCare/HotelCare) Trigger Node

  Webhook trigger node for real-time events:

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

  ## Credentials

  ### Setting up API Credentials

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

  ### Obtaining Your API Key

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

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

  ## Compatibility

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

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

  ## Usage

  ### Getting Started

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

  ### Example 1: Create a Contact

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

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

  ### Example 2: Create a Reservation

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

  For the price calculation method:

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

  ### Example 3: Listen for Webhook Events

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

  ### Important Notes

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

  ## Development

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

  ### Deploy to local n8n container (Windows)

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

  ### Webhook trigger validation

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

  ### Resource coverage quick view

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

  ## Resources

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

  ## Version History

  ### Version 2.0.2 (Current)

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

  ### Version 1.0.6

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

  ### Version 1.0.0

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

  ---

  ## Troubleshooting

  ### Common Issues

  **"Invalid API Key" error**

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

  **Webhook not receiving events**

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

  **Date format errors**

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

  **Meta operations not working**

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

  **Rate limiting issues**

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

  **Connection timeouts**

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

  ## Contributing

  Contributions are welcome! Please:

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

  ## License

  [MIT](LICENSE.md)

  ## Support

  For support:

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

  ## Credits

  Created by the CampingCare development team.

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

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


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

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

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

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

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

  ## What is ScrapeOps?

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

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

  ## ✨ Key Features

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

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

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

  ---

  ## 📦 Installation

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

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

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

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

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

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

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

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

  For self-hosted n8n instances:

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

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

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

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

  # Restart n8n
  n8n start
  ```

  ### Method 4: Docker Installation

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

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

  Then install the node:

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

  ---

  ## 🔑 Authentication

  ### Getting Your ScrapeOps API Key

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

  **Steps to get your API key:**

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

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

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

  ### Configure Credentials in n8n

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

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

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

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

  3. Save and test the credentials.

  ---

  ## 🎯 Quick Start

  ### Adding the Node to a Workflow

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

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

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

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


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

  ---

  ## 📚 API Documentation

  ### 🔀 Proxy API

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

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

  **Advanced Options:**

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

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

  ### 📊 Parser API

  Parse HTML into structured JSON for supported domains.

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

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

  ### 💾 Data API

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

  **Workflow basics**

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

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

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

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



  ---

  ## 🎯 Common Use Cases

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

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

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

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

  ---

  ## 🛠️ Best Practices

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

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

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

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

  ---

  ## 🐛 Troubleshooting

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

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

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

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

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

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

  ---

  ## 📖 Resources

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

  ---

  ## 🤝 Support

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

  ---

  ## 📄 License

  [MIT](LICENSE.md)

  ---

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

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


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

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

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

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

npm_readme:
  ## Overview

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

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

  It allows you to automate retrieval of:

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

  ---
  ## API Key & Connection Setup

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

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

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

  ### Obtain your API Key

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

  ### Open Make and create a scenario

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

  ### Add an IPGeolocation node

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

  ### Set up the connection

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

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

  ### Test the connection

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

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

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

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

  ### Use your connection

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

  ---

  ## Actions Availability across our Plans

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

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

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

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

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

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

  ---

  ## Modules

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

  ### **Geolocation**

  **1. Get IP Geolocation**

  Retrieves full geolocation data of a single IPv4/IPv6.

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

  **2. Get Bulk IP Geolocation**

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

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

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

  ### **Security**

  **3. IP Security Lookup**

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

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

  **4. Bulk IP Security Lookup**

  Security assessment for multiple IPs.

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

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

  ### **Network Intelligence**

  **5. Lookup ASN**

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

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

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

  **6. Lookup Abuse Contact Information**

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

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

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

  ### **Time Services**

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

  **7. Get Timezone Info**

  It can be consumed with the following input variations:

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

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

  **8. Time Conversion**

  Converts a time from one of following options

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

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

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

  ### **Astronomy**

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

  **9. Get Astronomy Details**

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

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

  **10. Astronomy Time Series Lookup**

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

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

  ### **User-Agent Parsing**

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

  **11. Parse User Agent String**

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

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

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

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

  ---

  ## Use Cases

  Some of the use cases are provided as following.

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

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

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

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

  ---

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

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

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

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

  ---

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

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

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

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

  ---

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

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

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

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

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


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

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

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

npm_readme:
  # n8n-nodes-infobip-api

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

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

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

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

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

  ## Installation

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

  You can install this node using:

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

  ## Operations

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

  ## Credentials

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

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

  ## Compatibility

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

  ## Resources

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

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


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

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

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

npm_readme:
  # n8n-nodes-hookdeck

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

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

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

  ## Installation

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

  ## Operations

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

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

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


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

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

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

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

  # n8n-nodes-predict-leads

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

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

  ## Installation

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

  ## Operations

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

  ## Credentials

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

  https://predictleads.com/sign_in

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

  https://predictleads.com/dashboard

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

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

  ## Compatibility

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

  ## Usage

  Add PredictLeads node to a workflow.

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

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

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

  ## API Resources / Search Engines

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

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

  ## Related Resources

  PredictLeads's complete API documentation is available here:

  https://docs.predictleads.com/

  ## License

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

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


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

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

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

npm_readme:
  # @starhunter/n8n-nodes-graphql

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

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

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

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

  ## Installation

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

  ## Operations

  ### Person

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

  ### Candidate

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

  ### Employee

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

  ### Email

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

  ### Project Candidate

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

  ### Task

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

  ## Credentials

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

  ### Prerequisites

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

  ### Setting up credentials in n8n

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

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

  ## Compatibility

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

  Tested with n8n version 1.x.

  ## Usage

  ### Example: Birthday notifications

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

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

  ### Example: Log emails to CRM

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

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

  ### Example: Track candidate status changes

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

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

  ## Resources

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

  ## Version history

  ### 0.1.1

  - Initial public release
  - Added publishConfig for npm public access

  ### 0.1.0

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

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


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

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

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

npm_readme:
  # n8n-nodes-caspioofficial

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

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

  ## Installation

  ### Community Nodes (n8n Cloud)

  For verified community nodes on n8n Cloud:

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

  ### Self-Hosted

  For self-hosted n8n instances:

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

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

  ## Documentation

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

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

  ## Compatibility

  This node uses Caspio REST API v3.

  ## Resources

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

  ## License

  [MIT](LICENSE)

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


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

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

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

npm_readme:
  # Solapi for n8n (Community Node)

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

  ## 설치

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

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

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

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

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

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

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

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

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

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

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

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

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

  ## 라이선스
  MIT

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


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

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

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

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

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

  ## Installation

  ### In n8n Desktop/Cloud

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

  ### Manual Installation

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

  ## Configuration

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

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

  ## Features

  ### Model Operations

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

  ### Workflow Operations

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

  ## Usage Examples

  ### Generate an Image with Flux

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

  ### Run a Custom Workflow

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

  ### Monitor Model Performance

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

  ## Supported Models

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

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

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

  ## Async Execution

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

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

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

  ## Links

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

  ## License

  MIT

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


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

updated_at: 2026-02-19 14:41:52
author_name: goranstjepanovic
author_github_url: https://github.com/flarelight-io/n8n-nodes-flarelight.git
npm_package_name: @flarelight/n8n-nodes-flarelight
npm_version: 1.0.3
community_fetched_at: 2026-02-19T14:41:52.555Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "import",
      "options": [
        {
          "name": "Automation",
          "value": "automation"
        },
        {
          "name": "Import",
          "value": "import"
        },
        {
          "name": "Preparation",
          "value": "preparation"
        },
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute Automation",
          "value": "execute",
          "action": "Execute automation",
          "routing": {
            "request": {
              "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute an automation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many imports",
          "routing": {
            "request": {
              "url": "/Import/All",
              "method": "GET"
            }
          },
          "description": "Get many available imports"
        },
        {
          "name": "Get Import Data",
          "value": "getData",
          "action": "Get import data",
          "routing": {
            "request": {
              "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific import"
        },
        {
          "name": "Create Import",
          "value": "create",
          "action": "Create import",
          "routing": {
            "request": {
              "url": "/Import/Data",
              "body": "={{ JSON.parse($parameter.importRequest) }}",
              "method": "POST"
            }
          },
          "description": "Create a new data import"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "import"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many preparations",
          "routing": {
            "request": {
              "url": "/Preparation/All",
              "method": "GET"
            }
          },
          "description": "Get many available data preparations"
        },
        {
          "name": "Get Preparation Data",
          "value": "getData",
          "action": "Get preparation data",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
              "method": "GET"
            }
          },
          "description": "Get data from a specific preparation"
        },
        {
          "name": "Execute Preparation",
          "value": "execute",
          "action": "Execute preparation",
          "routing": {
            "request": {
              "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
              "method": "POST"
            }
          },
          "description": "Execute a data preparation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "preparation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many reports",
          "routing": {
            "request": {
              "url": "/Report/All",
              "method": "GET"
            }
          },
          "description": "Get many available reports"
        },
        {
          "name": "Get Report",
          "value": "get",
          "action": "Get report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific report by ID"
        },
        {
          "name": "Generate Report",
          "value": "generate",
          "action": "Generate report",
          "routing": {
            "request": {
              "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
              "method": "POST"
            }
          },
          "description": "Generate a report by ID"
        },
        {
          "name": "Get Chart Data",
          "value": "getChartData",
          "action": "Get chart data",
          "routing": {
            "request": {
              "url": "/Report/ChartData",
              "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
              "method": "POST"
            }
          },
          "description": "Get chart data for reports"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Execute Automation",
      "value": "execute",
      "action": "Execute automation",
      "routing": {
        "request": {
          "url": "=/Automation/{{$parameter[\"automationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute an automation by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many imports",
      "routing": {
        "request": {
          "url": "/Import/All",
          "method": "GET"
        }
      },
      "description": "Get many available imports"
    },
    {
      "name": "Get Import Data",
      "value": "getData",
      "action": "Get import data",
      "routing": {
        "request": {
          "url": "=/Import/{{$parameter[\"importId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific import"
    },
    {
      "name": "Create Import",
      "value": "create",
      "action": "Create import",
      "routing": {
        "request": {
          "url": "/Import/Data",
          "body": "={{ JSON.parse($parameter.importRequest) }}",
          "method": "POST"
        }
      },
      "description": "Create a new data import"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many preparations",
      "routing": {
        "request": {
          "url": "/Preparation/All",
          "method": "GET"
        }
      },
      "description": "Get many available data preparations"
    },
    {
      "name": "Get Preparation Data",
      "value": "getData",
      "action": "Get preparation data",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Data?start={{ $parameter.start }}&count={{ $parameter.count }}",
          "method": "GET"
        }
      },
      "description": "Get data from a specific preparation"
    },
    {
      "name": "Execute Preparation",
      "value": "execute",
      "action": "Execute preparation",
      "routing": {
        "request": {
          "url": "=/Preparation/{{$parameter[\"preparationId\"]}}/Execute",
          "method": "POST"
        }
      },
      "description": "Execute a data preparation by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many reports",
      "routing": {
        "request": {
          "url": "/Report/All",
          "method": "GET"
        }
      },
      "description": "Get many available reports"
    },
    {
      "name": "Get Report",
      "value": "get",
      "action": "Get report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific report by ID"
    },
    {
      "name": "Generate Report",
      "value": "generate",
      "action": "Generate report",
      "routing": {
        "request": {
          "url": "=/Report/{{$parameter[\"reportId\"]}}/Generate",
          "method": "POST"
        }
      },
      "description": "Generate a report by ID"
    },
    {
      "name": "Get Chart Data",
      "value": "getChartData",
      "action": "Get chart data",
      "routing": {
        "request": {
          "url": "/Report/ChartData",
          "body": "={{ JSON.parse($parameter.chartDataRequest) }}",
          "method": "POST"
        }
      },
      "description": "Get chart data for reports"
    }
  ]

npm_readme:
  # n8n-nodes-flarelight

  This is an n8n community node that lets you use [Flarelight](https://www.flarelight.io) APIs in your n8n workflows.

  Flarelight is a modern no-code Business Intelligence (BI) platform designed for micro-businesses, professionals, and small teams that enables users to import, prepare, analyze, automate, and report on data in a streamlined, easy-to-use workflow. The platform combines simplicity, automation, and AI-assisted insights, giving smaller organizations access to capabilities traditionally reserved for enterprise BI tools.

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

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

  ## Installation

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-flarelight` in **Enter npm package name**.
  4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand the risks of installing unverified code from a public source**.
  5. Select **Install**.

  After installing the node, you can use it like any other node. n8n displays the node in search results in the **Nodes** panel.

  ## Operations

  The node mirrors the primary resource groups exposed by the Flarelight API so you can:

  - Run automations to orchestrate Flarelight workflows.
  - Manage imports, including creating new imports and retrieving their data.
  - Handle preparation pipelines to transform datasets before downstream use.
  - Generate and retrieve reports, including chart data extraction.

  For the full list of endpoints and payloads, refer to the [Flarelight API specification](https://integration.eu1.flarelight.cloud/swagger/index.html).

  ## Credentials

  Create a Flarelight credential in n8n using the values supplied by your Flarelight workspace:

  - `Subscription ID` (sent as `X-Subscription-Id`)
  - `Integration Key` (sent as `X-Api-Key`)
  - Optional custom API base URL (defaults to `https://integration.eu1.flarelight.cloud`)

  Store credentials in n8n and reference them from every Flarelight node instance.

  ## Compatibility

  Tested against n8n version **1.120.4**.

  ## Usage

  1. Install the community node and configure the Flarelight credential once per n8n instance.
  2. Add the **Flarelight** node to a workflow and pick a resource (`Automation`, `Import`, `Preparation`, or `Report`).
  3. Choose an operation, supply required IDs or payloads, and optionally enable pagination or JSON body inputs where available.
  4. Chain the Flarelight node with other n8n nodes to automate end-to-end BI and reporting workflows.

  Review `n8nNodeDocPortal.md` in this repository for deeper, operation-by-operation guidance.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Flarelight website](https://www.flarelight.io)
  - [Flarelight API documentation](https://docs.flarelight.cloud/docs/integration-api/)

  ## Version history

  | Version | Date       | Notes                    |
  |---------|------------|--------------------------|
  | 1.0.3   | 2025-11-27 | POST Requests fix |
  | 1.0.2   | 2025-11-25 | Fixed gulp file copy which corrupted the icon  |
  | 1.0.1   | 2025-11-25 | Clean up template files  |
  | 1.0.0   | 2025-11-25 | Initial community release |

ai_documentation_summary:
  {"purpose":"Provide n8n workflow access to the Flarelight API so users can run automations, import and prepare data, and generate or retrieve reports from Flarelight within n8n.","capabilities":["Run Flarelight automations to orchestrate platform workflows","Create and retrieve imports and their data","Manage preparation pipelines to transform datasets before downstream use","Generate and retrieve reports, including extracting chart data","Expose the primary Flarelight API resource groups/endpoints (mirrors API capabilities)","Support pagination where available","Accept raw JSON body inputs for operations that support custom payloads","Allow configuring a custom API base URL"],"authentication":"API key required — provide Subscription ID and Integration Key (sent as X-Subscription-Id and X-Api-Key) via stored Flarelight credentials in n8n; optional custom API base URL can be set.","commonUseCases":["Automate end-to-end BI workflows by chaining Flarelight actions with other n8n nodes","Import external data into Flarelight and retrieve import results programmatically","Run and orchestrate Flarelight automations from scheduled or event-driven workflows","Prepare and transform datasets using Flarelight preparation pipelines before downstream processing","Generate reports and extract chart data for downstream reporting, notifications, or storage"],"limitations":[],"relatedNodes":[]}


node_type: @asyncai/n8n-nodes-asyncai.asyncAi
package_name: @asyncai/n8n-nodes-asyncai
display_name: Async
description: Interact with Async API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: ashotbagh
author_github_url: https://github.com/AsyncOrg/asyncai-n8n.git
npm_package_name: @asyncai/n8n-nodes-asyncai
npm_version: 0.1.4
community_fetched_at: 2026-02-19T14:41:52.555Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "voice",
      "options": [
        {
          "name": "Voice",
          "value": "voice"
        },
        {
          "name": "Speech",
          "value": "speech"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a voice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "enabled": "={{$parameter[\"simplify\"]}}",
                  "properties": {
                    "name": "={{$responseItem.name}}",
                    "labels": "={{$responseItem.labels}}",
                    "category": "={{$responseItem.category}}",
                    "voice_id": "={{$responseItem.voice_id}}",
                    "description": "={{$responseItem.description}}",
                    "preview_url": "={{$responseItem.preview_url}}"
                  }
                }
              ]
            },
            "request": {
              "url": "={{\"/voices/\"  + $parameter[\"voice\"] }}",
              "method": "GET"
            }
          },
          "description": "Returns metadata about a specific voice"
        },
        {
          "name": "Create Clone",
          "value": "createClone",
          "action": "Create a voice clone",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/voices/clone",
              "method": "POST",
              "headers": {
                "Content-Type": "multipart/form-data"
              },
              "returnFullResponse": true
            }
          },
          "description": "Create a voice clone from audio files"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a voice",
          "routing": {
            "request": {
              "url": "={{\"/voices/\" + $parameter[\"voice\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a specific voice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "textToSpeech",
      "options": [
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "action": "Convert text to speech",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "={{\"/text_to_speech\"}}",
              "method": "POST",
              "headers": {
                "content-type": "application/json"
              },
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Converts text into speech and returns audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a voice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "enabled": "={{$parameter[\"simplify\"]}}",
              "properties": {
                "name": "={{$responseItem.name}}",
                "labels": "={{$responseItem.labels}}",
                "category": "={{$responseItem.category}}",
                "voice_id": "={{$responseItem.voice_id}}",
                "description": "={{$responseItem.description}}",
                "preview_url": "={{$responseItem.preview_url}}"
              }
            }
          ]
        },
        "request": {
          "url": "={{\"/voices/\"  + $parameter[\"voice\"] }}",
          "method": "GET"
        }
      },
      "description": "Returns metadata about a specific voice"
    },
    {
      "name": "Create Clone",
      "value": "createClone",
      "action": "Create a voice clone",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/voices/clone",
          "method": "POST",
          "headers": {
            "Content-Type": "multipart/form-data"
          },
          "returnFullResponse": true
        }
      },
      "description": "Create a voice clone from audio files"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a voice",
      "routing": {
        "request": {
          "url": "={{\"/voices/\" + $parameter[\"voice\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a specific voice"
    },
    {
      "name": "Text to Speech",
      "value": "textToSpeech",
      "action": "Convert text to speech",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "={{\"/text_to_speech\"}}",
          "method": "POST",
          "headers": {
            "content-type": "application/json"
          },
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Converts text into speech and returns audio"
    }
  ]

npm_readme:
  # @asyncai/n8n-nodes-asyncai

  This is the official AsyncAI n8n community node.

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

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

  ## Installation

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

  ## Operations

  ### Speech
  - Text to Speech

  ### Voice
  - Get
  - Create Clone
  - Delete

  ## Credentials

  This node requires an API Key from AsyncAI, You can generate one by going to your [Account](https://app.async.ai/auth).


  ## Resources

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

ai_documentation_summary:
  {"purpose":"Interact with the AsyncAI platform from n8n to generate speech from text and manage voices (including creating voice clones, retrieving voice info, and deleting voices).","capabilities":["Text-to-Speech (convert text to audio)","Get voice(s) (retrieve voice details or list available voices)","Create voice clone (create a cloned/custom voice)","Delete voice (remove a voice or clone)"],"authentication":"API key required (AsyncAI account API Key)","commonUseCases":["Generate spoken audio from text for notifications, podcasts, or accessibility","Automate creation of custom/cloned voices for personalized TTS pipelines","Manage voice assets programmatically (list, inspect, and delete voices)","Integrate AsyncAI TTS into multi-step workflows for content production or customer communications"],"limitations":[],"relatedNodes":[]}


node_type: @servicem8/n8n-nodes-servicem8.serviceM8
package_name: @servicem8/n8n-nodes-servicem8
display_name: ServiceM8
description: Automate job, staff & client workflows in your trade service business.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: servicem8-devops
author_github_url: https://github.com/servicem8/n8n-nodes-servicem8.git
npm_package_name: @servicem8/n8n-nodes-servicem8
npm_version: 0.1.4
community_fetched_at: 2026-02-19T14:41:52.556Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "client",
      "options": [
        {
          "name": "Client",
          "value": "client"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "SMS",
          "value": "sms"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get customer details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get multiple clients"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Note To Job",
          "value": "addNoteToJob",
          "action": "Add job note"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create new job"
        },
        {
          "name": "Create From Template",
          "value": "createFromTemplate",
          "action": "Create job from template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete job"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get job details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get multiple jobs"
        },
        {
          "name": "Send Job To Queue",
          "value": "sendJobToQueue",
          "action": "Queue job"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update job details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendEmail",
      "options": [
        {
          "name": "Send Email",
          "value": "sendEmail",
          "action": "Send email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendSMS",
      "options": [
        {
          "name": "Send SMS",
          "value": "sendSMS",
          "action": "Send text message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createInboxMessage",
      "options": [
        {
          "name": "Create Inbox Message",
          "value": "createInboxMessage",
          "action": "Create inbox message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "globalSearch",
      "options": [
        {
          "name": "Global Search",
          "value": "globalSearch",
          "action": "Search everything"
        },
        {
          "name": "Search",
          "value": "objectSearch",
          "action": "Search specific type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get customer details"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple clients"
    },
    {
      "name": "Add Note To Job",
      "value": "addNoteToJob",
      "action": "Add job note"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create new job"
    },
    {
      "name": "Create From Template",
      "value": "createFromTemplate",
      "action": "Create job from template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete job"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get job details"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple jobs"
    },
    {
      "name": "Send Job To Queue",
      "value": "sendJobToQueue",
      "action": "Queue job"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update job details"
    },
    {
      "name": "Send Email",
      "value": "sendEmail",
      "action": "Send email"
    },
    {
      "name": "Send SMS",
      "value": "sendSMS",
      "action": "Send text message"
    },
    {
      "name": "Create Inbox Message",
      "value": "createInboxMessage",
      "action": "Create inbox message"
    },
    {
      "name": "Global Search",
      "value": "globalSearch",
      "action": "Search everything"
    },
    {
      "name": "Search",
      "value": "objectSearch",
      "action": "Search specific type"
    }
  ]

npm_readme:
  # n8n-nodes-servicem8

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

  ServiceM8 is a job management software designed for small service businesses, helping them streamline scheduling, quoting, invoicing, and communication. It enables field staff to access job details, capture information, and process payments on-site via a mobile app.

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

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

  ## Installation

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

  ## Operations

  ### Attachment
  - **Upload** - Upload a file and create an attachment record
  - **Get** - Get attachment metadata with optional file download
  - **Get Many** - Get multiple attachments for a job or client
  - **Delete** - Soft delete an attachment

  ### Client
  - **Create** - Create a new client
  - **Get** - Get client details
  - **Get Many** - Get multiple clients
  - **Update** - Update client details
  - **Delete** - Delete client
  - **Update Client Contacts** - Update client contact details

  ### Job
  - **Create** - Create new job
  - **Create From Template** - Create job from template
  - **Get** - Get job details
  - **Get Many** - Get multiple jobs
  - **Update** - Update job details
  - **Delete** - Delete job
  - **Add Note To Job** - Add job note
  - **Send Job To Queue** - Queue job
  - **Update Job Contacts** - Update job contact details

  ### Job Booking
  - **Create** - Create a job booking
  - **Get** - Get booking details
  - **Get Many** - Get multiple bookings
  - **Update** - Update booking details
  - **Delete** - Delete booking

  ### Job Checkin
  - **Get** - Get job checkin details
  - **Get Many** - Get multiple job checkins

  ### Inbox
  - **Create** - Create inbox message
  - **Get** - Get inbox message details
  - **Get Many** - Get multiple inbox messages
  - **Convert To Job** - Convert inbox message to a job

  ### Email
  - **Send** - Send email

  ### SMS
  - **Send** - Send text message

  ### Search
  - **Global Search** - Search everything
  - **Object Search** - Search specific type

  ### Webhook Trigger
  Available webhook events:
  - Badge Added to Job
  - Badge Removed From Job
  - Customer Accepted the Quote
  - Customer Details Updated
  - Customer Review Submitted
  - Form Response Submitted
  - Full Payment Received for Invoice
  - Invoice Sent to Customer
  - Job Added to Queue
  - Job Details Modified
  - Job Marked as Completed
  - Job Status Changed
  - New Customer Added
  - New Job Created in the System
  - New Message Received in Inbox
  - Note Added to Job
  - Photo Attached to Job
  - Proposal Sent to Customer
  - Proposal Viewed by Customer
  - Quote Sent to Customer

  ## Credentials

  This node supports two authentication methods:

  ### API Key Authentication 
  1. Log in to your ServiceM8 account
  2. Navigate to **Settings** > **API Keys**
  3. Click **Generate API Key**
  4. Copy your API key and account email
  5. In n8n, create new ServiceM8 credentials with your email and API key

  ## Compatibility

  Tested with n8n v1.110.0 and later.

  ## Usage

  ### Create Job from Web Form
  This example shows how to create a new job when a web form is submitted:

  1. Set up a Webhook trigger to receive form submissions
  2. Use the Company node to create or find the customer
  3. Use the Job node to create a new job for that customer

  ### Daily Schedule Email
  This example shows how to email tomorrow's schedule to staff:

  1. Set up a Schedule trigger to run daily
  2. Use the Activity node to list tomorrow's activities
  3. Use an Email node to send the schedule

  For detailed usage examples and field mapping information, refer to the ServiceM8 API documentation.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes)
  * [ServiceM8 API Documentation](https://developer.servicem8.com/docs)
  * [ServiceM8 Developer Forum](https://developer.servicem8.com/discuss)
  * [GitHub Issues](https://github.com/servicem8/n8n-nodes-servicem8/issues)

  ## Version history

  ### 0.1.5
  **New Resources:**
  - **Attachment** - Full support for file attachments
    - Upload files to jobs or clients with automatic metadata handling
    - Get attachment metadata with optional binary file download
    - Get multiple attachments with filtering support
    - Delete attachments
  - **Job Booking** - Full support for job allocations (flexible time) and job activities (fixed time)
  - **Job Checkin** - Get and list job checkin records

  **New Operations:**
  - **Client**: Create, Update, Delete, Update Client Contacts
  - **Job**: Update Job Contacts
  - **Inbox**: Get, Get Many, Convert To Job

  **Enhancements:**
  - Client and Job Get/Get Many now support optional contact inclusion
  - Get Many operations support pagination (limit) and advanced filtering
  - Attachment Get Many supports filtering by attachment name, file type, source, tags, and more
  - "Include Inactive Records" moved to Advanced Options section for cleaner UI
  - Job Create now uses a cleaner UI with required Status field and dynamic field picker
  - Readonly fields (uuid, edit_date, created_by_staff_uuid, etc.) are now excluded from create/update field pickers but remain available for filtering
  - Job Template dropdowns now filter to show only active templates with valid names
  - Improved UI consistency across all resources (standardised field labels and action names)
  - Refactored to handler-based architecture for better maintainability

  ### 0.1.4
  - Added Inbox resource with create message action

  ### 0.1.0
  Initial release of the ServiceM8 node with support for:
  - Jobs management
  - Customer (Company) management
  - Webhook triggers

ai_documentation_summary:
  {"purpose":"Provides n8n workflow actions and triggers to automate ServiceM8 job, client, staff and communication workflows (scheduling, quoting, invoicing, attachments, messages) from within n8n.","capabilities":["Attachment: Upload files, Get attachment metadata (with optional binary download), Get Many (filtering/pagination), Delete (soft delete)","Client/Company: Create, Get, Get Many, Update, Delete, Update Client Contacts","Job: Create, Create From Template, Get, Get Many (filtering/pagination), Update, Delete, Add Note to Job, Send Job to Queue, Update Job Contacts","Job Booking: Create, Get, Get Many, Update, Delete","Job Checkin: Get, Get Many","Inbox: Create message, Get, Get Many, Convert To Job","Email: Send emails","SMS: Send text messages","Search: Global Search and Object-specific Search","Webhook trigger: subscribe to many ServiceM8 events (e.g., new job, job status changes, quote/proposal events, invoice/payment events, inbox messages, notes, attachments, customer updates)"],"authentication":"API key required (ServiceM8 API key plus account email; create ServiceM8 credentials in n8n using email and API key)","commonUseCases":["Create a new job when a web form is submitted (Webhook -> Company lookup -> Job create)","Send daily schedule emails to staff (Schedule trigger -> list activities -> Email node)","Automate client creation and updates from external systems","Send SMS/email notifications for job updates or reminders","Process attachments and photos for jobs or clients, including downloading binary files"],"limitations":["Credentials documentation only details API Key authentication (README mentions two methods but only API Key is described)","Attachment deletion is a soft delete (not permanent removal)","Certain read-only fields (uuid, edit_date, created_by_staff_uuid, etc.) are excluded from create/update field pickers (available only for filtering)","Requires n8n v1.110.0 or later (compatibility tested from this version)"],"relatedNodes":["Webhook Trigger","Schedule Trigger","Email node","SMS node","Company/Client node (ServiceM8)"]}


node_type: n8n-nodes-itop.iTop
package_name: n8n-nodes-itop
display_name: iTop
description: Interact with iTop CMDB via REST API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: larhip
author_github_url: https://github.com/itomig-de/
npm_package_name: n8n-nodes-itop
npm_version: 1.0.3
community_fetched_at: 2026-02-19T14:41:52.557Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "object",
      "options": [
        {
          "name": "Object",
          "value": "object"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Apply Stimulus",
          "value": "apply_stimulus",
          "action": "Apply stimulus to an object",
          "description": "Update fields and apply a stimulus on a single iTop object"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new object",
          "description": "Create a new object in iTop"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an object",
          "description": "Delete an existing object in iTop"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get objects",
          "description": "Search for and retrieve iTop objects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an object",
          "description": "Update a single iTop object"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "object"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Apply Stimulus",
      "value": "apply_stimulus",
      "action": "Apply stimulus to an object",
      "description": "Update fields and apply a stimulus on a single iTop object"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new object",
      "description": "Create a new object in iTop"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an object",
      "description": "Delete an existing object in iTop"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get objects",
      "description": "Search for and retrieve iTop objects"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an object",
      "description": "Update a single iTop object"
    }
  ]

npm_readme:
  # n8n-nodes-itop

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

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

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

  ## Preview

  https://github.com/user-attachments/assets/6524dc6b-c6c9-4a39-ae8f-218ec982d13b


  ## Installation

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

  ## Operations

  - **Get**: Search for and retrieve iTop objects using OQL queries or object IDs
  - **Update**: Update a single iTop object with new field values

  ## Credentials

  You can use either username/password or token-based authentication to use this node.

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials** and create a new **iTop API** credential
  2. Enter your **iTop URL** (e.g., `https://your-itop-instance.com`)
  3. Select your **Authentication Method**:

  ### Username and Password

  1. Select **Username and Password** as the authentication method
  2. Enter your iTop **Username**
  3. Enter your iTop **Password**
  4. Optionally adjust the **API Version** (default: 1.3)

  ### Token

  1. Select **Token** as the authentication method
  2. Enter your iTop **Auth Token**
     - To generate a token in iTop, go to **User Account** > **Personal Tokens**
  3. Optionally adjust the **API Version** (default: 1.3)

  ### Required iTop Permissions

  Users need the following permissions in iTop:
  - **REST Services User** profile
  - **Write access** on the classes they want to modify
  - **Bulk write** permissions on the classes they want to modify

  Note: Standard administrator accounts do not have REST access by default unless the REST Services User profile is explicitly granted.

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [iTop REST/JSON API documentation](https://www.itophub.io/wiki/page?id=latest:advancedtopics:rest_json)

ai_documentation_summary:
  {"purpose":"Provide n8n workflow actions to search, retrieve and update iTop CMDB objects using the iTop REST/JSON API.","capabilities":["Get: search for and retrieve iTop objects using OQL queries","Get: retrieve iTop objects by object ID","Update: update a single iTop object with new field values","Allow specifying API version (default 1.3) via credentials"],"authentication":"Username/password or Token (iTop API token) configured via an 'iTop API' credential in n8n (requires iTop URL).","commonUseCases":["Lookup CMDB records by OQL or ID as part of an automation workflow","Update a single iTop object when source data changes (e.g., sync or enrichment)","Enrich a workflow with CMDB data for routing, approval, or notification logic","Integrate iTop with external systems by reading and updating CMDB entries"],"limitations":["Supported operations are limited to Get and Update (no Create/Delete or dedicated bulk operations exposed by the node)","Update operation updates only a single object at a time (no built-in bulk update in the node)","Requires iTop-specific permissions: 'REST Services User' profile, write and bulk write permissions on classes to be modified","Standard iTop administrator accounts do not have REST access by default unless REST Services User profile is granted","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":[]}


node_type: n8n-nodes-wpforms.wpformsTrigger
package_name: n8n-nodes-wpforms
display_name: WPForms Trigger
description: Starts a workflow when a WPForms form is submitted
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: wpforms
author_github_url: https://github.com/awesomemotive/wpforms-n8n-nodes.git
npm_package_name: n8n-nodes-wpforms
npm_version: 0.1.4
community_fetched_at: 2026-02-19T14:41:52.557Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  ## n8n WPForms Trigger node

  NPM package name: `n8n-nodes-wpforms`

  This repository contains custom n8n nodes for WPForms integration, providing triggers and actions to automate workflows with WPForms data.

  ## Prerequisites

  You need the following installed on your development machine:

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

  ## Build and Install the Node Package

  ### 1. Install Dependencies
  ```bash
  npm install
  ```

  ### 2. Build the Project
  ```bash
  npm run build
  ```
  This command will:
  - Clean the `dist` directory
  - Compile TypeScript files
  - Build icons using gulp
  - Generate the distributable files

  ### 3. Link the Package Locally
  ```bash
  npm link
  ```

  ### 4. Set Up Custom Nodes Directory
  ```bash
  # Create custom directory in n8n home
  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom

  # Initialize npm in the custom directory
  npm init -y
  ```

  ### 5. Link Node to n8n Instance
  ```bash
  # Link your custom node to n8n (run from ~/.n8n/custom)
  npm link n8n-nodes-wpforms
  ```

  ### 6. Configure n8n Environment
  Set the environment variable to tell n8n where to find custom nodes:

  **For Linux/Mac:**
  ```bash
  export N8N_CUSTOM_EXTENSIONS="$HOME/.n8n/custom"
  ```

  **For Windows (PowerShell):**
  ```powershell
  $env:N8N_CUSTOM_EXTENSIONS="$HOME\.n8n\custom"
  ```

  ### 7. Start n8n
  ```bash
  n8n start
  ```

  ### 8. Verify Installation
  1. Open n8n in your browser (usually `http://localhost:5678`)
  2. Look for your custom nodes in the node palette
  3. You should see "WPForms" nodes available

  ## Setup and Usage Instructions for WPForms Trigger Node

  ### Prerequisites

  - A WordPress site with the WPForms plugin + WPForms n8n addon installed and activated.
  - An n8n instance.

  ### Installation

  1.  Go to your n8n instance.
  2.  Go to **Settings > Community Nodes**.
  3.  Click **Install a community node**.
  4.  Enter `n8n-nodes-wpforms` in the **npm package name** field.
  5.  Click **Install**.

  ### Configuration

  1.  In your n8n workflow, add the **WPForms Trigger** node.
  2.  Configure the node settings:
      *   **Secret Key**: Enter a secret key. This key must match the secret key configured in your WPForms n8n addon settings. It is used to verify the integrity of the data received.
      *   **Timestamp Skew**: Set the allowed time difference in seconds between your server and the WPForms server. The default is 300 seconds.
      *   **Output Schema**: Choose the output format. 'Default' provides a structured JSON object, while 'Raw' provides the raw request body and headers.
  3.  The node will display a webhook URL. Copy this URL.
  4.  In the Form Builder, go to the Marketing > n8n tab.
  5.  Enable n8n integration.
  6.  Paste the webhook URL from n8n.
  7.  Copy Secret Key and paste it to the WPForms Trigger node.
  8.  Save your form settings.

  ### Usage

  Now, whenever the selected form is submitted, it will trigger your n8n workflow. The form data will be available in the node's output.

  ## Development Workflow 

  In Linux/MacOS or Windows using PS 7 shell:

  ```bash
  cd /path/to/wpforms-n8n-nodes/

  # Build and link after changes
  npm run build && npm link

  # Watch for changes during development
  npm run dev
  ```

  In your n8n instance, re-link the node and restart n8n:
  ```bash
  cd ~/.n8n/custom

  # Re-link node and restart n8n:
  npm link n8n-nodes-wpforms && n8n start
  ```

  ## Testing Your Node 

  ```bash
  # Check for linting errors
  npm run lint

  # Auto-fix linting errors when possible
  npm run lintfix
  ```

  ## Publishing  

  First you need to bump the version. This needs to be reflected both in the package.json & the package-lock.json.  

  You can also do that using `npm version` - this will also create the new tag:  

  ```bash
  npm version patch  # for bug fixes (0.1.2 → 0.1.3)
  npm version minor  # for new features (0.1.2 → 0.2.0)
  npm version major  # for breaking changes (0.1.2 → 1.0.0)
  ```

  Next, you need to push the change in the main branch and also create/push a tag starting with `v`, e.g. v0.1.3

  We are publishing automatically to npm each time a tag is pushed in the repo.  
  Alongside that, a GitHub Release is also created.  

  ## More information

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

  ## License

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

ai_documentation_summary:
  {"purpose":"Starts an n8n workflow when a WPForms form is submitted by receiving a webhook from the WPForms n8n addon and validating the payload.","capabilities":["Expose a webhook URL to receive WPForms form submissions","Validate incoming requests using a shared Secret Key","Protect against replay/timestamp attacks with configurable Timestamp Skew (seconds)","Choose output schema: 'Default' (structured JSON) or 'Raw' (request body and headers)","Integration setup guidance: displays webhook URL to paste into WPForms n8n addon"],"authentication":"Shared secret key required (Secret Key configured in the node must match the WPForms n8n addon). No OAuth.","commonUseCases":["Trigger automated workflows when a WPForms form is submitted","Send notifications or emails based on form submissions","Create CRM contacts/leads or support tickets from form data","Store form entries in databases or spreadsheets","Route or enrich submission data to other services via HTTP Request or other nodes"],"limitations":["Requires WPForms plugin plus the WPForms n8n addon installed and activated on the WordPress site","Secret Key in the node must exactly match the addon configuration","n8n instance/webhook URL must be reachable from the WordPress site (publicly accessible or tunneled)","Output format options are limited to 'Default' structured JSON or 'Raw' request body/headers","Node only handles form-submission triggers (not other WPForms events) as described"],"relatedNodes":["WPForms action nodes (from the same n8n-nodes-wpforms package)","Webhook (generic) node","HTTP Request","Email","CRM / Spreadsheet nodes (for downstream processing)"]}


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

updated_at: 2026-02-19 14:41:52
author_name: mohamed_ben
author_github_url: https://github.com/tomba-io/
npm_package_name: n8n-nodes-tomba
npm_version: 0.1.4
community_fetched_at: 2026-02-19T14:41:52.558Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "domainSearch",
      "options": [
        {
          "name": "Author Finder",
          "value": "authorFinder",
          "action": "Generate or retrieve the most likely email address from a blog post url",
          "description": "Generate or retrieve the most likely email address from a blog post URL"
        },
        {
          "name": "Autocomplete",
          "value": "Autocomplete",
          "action": "Find company names and retrieve logo and domain information",
          "description": "Find company names and retrieve logo and domain information"
        },
        {
          "name": "Domain Search",
          "value": "domainSearch",
          "action": "Get every email address found on the internet using a given domain name with sources",
          "description": "Get every email address found on the internet using a given domain name, with sources"
        },
        {
          "name": "Domain Status",
          "value": "DomainStatus",
          "action": "Find domain status if is webmail or disposable",
          "description": "Find domain status if is webmail or disposable"
        },
        {
          "name": "Email Count",
          "value": "EmailCount",
          "action": "Find total email addresses we have for one domain",
          "description": "Find total email addresses we have for one domain"
        },
        {
          "name": "Email Enrichment",
          "value": "emailEnrichment",
          "action": "Look up person and company data based on an email",
          "description": "Look up person and company data based on an email"
        },
        {
          "name": "Email Finder",
          "value": "emailFinder",
          "action": "Generate or retrieve the most likely email address from a domain name a first name and a last name",
          "description": "Generate or retrieve the most likely email address from a domain name, a first name and a last name"
        },
        {
          "name": "Email Format",
          "value": "emailFormat",
          "action": "Retrieve the email format patterns used by a specific domain",
          "description": "Retrieve the email format patterns used by a specific domain"
        },
        {
          "name": "Email Sources",
          "value": "emailSources",
          "action": "Find email address source somewhere on the web",
          "description": "Find email address source somewhere on the web"
        },
        {
          "name": "Email Verifier",
          "value": "emailVerifier",
          "action": "Verify the deliverability of an email address",
          "description": "Verify the deliverability of an email address"
        },
        {
          "name": "LinkedIn Finder",
          "value": "linkedinFinder",
          "action": "Generate or retrieve the most likely email address from a linkedin url",
          "description": "Generate or retrieve the most likely email address from a LinkedIn URL"
        },
        {
          "name": "Location",
          "value": "location",
          "action": "Get employees location based on the domain name",
          "description": "Get employees location based on the domain name"
        },
        {
          "name": "Phone Finder",
          "value": "phoneFinder",
          "action": "Search for phone numbers based on an email domain or linkedin url",
          "description": "Search for phone numbers based on an email, domain, or LinkedIn URL"
        },
        {
          "name": "Phone Validator",
          "value": "phoneValidator",
          "action": "Validate a phone number and retrieve its associated information",
          "description": "Validate a phone number and retrieve its associated information"
        },
        {
          "name": "Similar",
          "value": "similar",
          "action": "Retrieve similar domains based on a specific domain",
          "description": "Retrieve similar domains based on a specific domain"
        },
        {
          "name": "Technology",
          "value": "technology",
          "action": "Retrieve the technologies used by a specific domain",
          "description": "Retrieve the technologies used by a specific domain"
        }
      ],
      "description": "Operation to consume",
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Author Finder",
      "value": "authorFinder",
      "action": "Generate or retrieve the most likely email address from a blog post url",
      "description": "Generate or retrieve the most likely email address from a blog post URL"
    },
    {
      "name": "Autocomplete",
      "value": "Autocomplete",
      "action": "Find company names and retrieve logo and domain information",
      "description": "Find company names and retrieve logo and domain information"
    },
    {
      "name": "Domain Search",
      "value": "domainSearch",
      "action": "Get every email address found on the internet using a given domain name with sources",
      "description": "Get every email address found on the internet using a given domain name, with sources"
    },
    {
      "name": "Domain Status",
      "value": "DomainStatus",
      "action": "Find domain status if is webmail or disposable",
      "description": "Find domain status if is webmail or disposable"
    },
    {
      "name": "Email Count",
      "value": "EmailCount",
      "action": "Find total email addresses we have for one domain",
      "description": "Find total email addresses we have for one domain"
    },
    {
      "name": "Email Enrichment",
      "value": "emailEnrichment",
      "action": "Look up person and company data based on an email",
      "description": "Look up person and company data based on an email"
    },
    {
      "name": "Email Finder",
      "value": "emailFinder",
      "action": "Generate or retrieve the most likely email address from a domain name a first name and a last name",
      "description": "Generate or retrieve the most likely email address from a domain name, a first name and a last name"
    },
    {
      "name": "Email Format",
      "value": "emailFormat",
      "action": "Retrieve the email format patterns used by a specific domain",
      "description": "Retrieve the email format patterns used by a specific domain"
    },
    {
      "name": "Email Sources",
      "value": "emailSources",
      "action": "Find email address source somewhere on the web",
      "description": "Find email address source somewhere on the web"
    },
    {
      "name": "Email Verifier",
      "value": "emailVerifier",
      "action": "Verify the deliverability of an email address",
      "description": "Verify the deliverability of an email address"
    },
    {
      "name": "LinkedIn Finder",
      "value": "linkedinFinder",
      "action": "Generate or retrieve the most likely email address from a linkedin url",
      "description": "Generate or retrieve the most likely email address from a LinkedIn URL"
    },
    {
      "name": "Location",
      "value": "location",
      "action": "Get employees location based on the domain name",
      "description": "Get employees location based on the domain name"
    },
    {
      "name": "Phone Finder",
      "value": "phoneFinder",
      "action": "Search for phone numbers based on an email domain or linkedin url",
      "description": "Search for phone numbers based on an email, domain, or LinkedIn URL"
    },
    {
      "name": "Phone Validator",
      "value": "phoneValidator",
      "action": "Validate a phone number and retrieve its associated information",
      "description": "Validate a phone number and retrieve its associated information"
    },
    {
      "name": "Similar",
      "value": "similar",
      "action": "Retrieve similar domains based on a specific domain",
      "description": "Retrieve similar domains based on a specific domain"
    },
    {
      "name": "Technology",
      "value": "technology",
      "action": "Retrieve the technologies used by a specific domain",
      "description": "Retrieve the technologies used by a specific domain"
    }
  ]

npm_readme:
  # [<img src="https://tomba.io/logo.svg" alt="Tomba" width="25"/>](https://tomba.io/) Tomba.io n8n Nodes

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

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

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

  ## Installation

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

  1. Go to Settings (Cogwheel)
  2. Click on "Community Nodes"
  3. Enter "n8n-nodes-tomba" into the text box
  4. Click on "I understand the risk ..."
  5. Click on "Install"

  ## Operations

  - **[Author Finder](https://docs.tomba.io/api/finder#author-finder)** - Generate or retrieve the most likely email address from a blog post URL
  - **[Autocomplete](https://docs.tomba.io/api/domain-suggestions#get-domain-suggestions)** - Find company names and retrieve logo and domain information
  - **[Domain Search](https://docs.tomba.io/api/finder#domain-search)** - Get every email address found on the internet using a given domain name, with sources
  - **[Domain Status](https://docs.tomba.io/api/~endpoints#domain-status)** - Find domain status if is webmail or disposable
  - **[Email Count](https://docs.tomba.io/api/finder#email-count)** - Find total email addresses we have for one domain
  - **[Email Enrichment](https://docs.tomba.io/api/finder#email-enrichment)** - Look up person and company data based on an email
  - **[Email Finder](https://docs.tomba.io/api/finder#email-finder)** - Generate or retrieve the most likely email address from a domain name, a first name and a last name
  - **[Email Format](https://docs.tomba.io/api/finder#email-format)** - Retrieve the email format patterns used by a specific domain
  - **[Email Sources](https://docs.tomba.io/api/~endpoints#email-sources)** - Find email address source somewhere on the web
  - **[Email Verifier](https://docs.tomba.io/api/verifier#email-verifier)** - Verify the deliverability of an email address
  - **[LinkedIn Finder](https://docs.tomba.io/api/finder#linkedin-finder)** - Generate or retrieve the most likely email address from a LinkedIn URL
  - **[Location](https://docs.tomba.io/api/finder#location)** - Get employees location based on the domain name
  - **[Phone Finder](https://docs.tomba.io/api/phone#phone-finder)** - Search for phone numbers based on an email, domain, or LinkedIn URL
  - **[Phone Validator](https://docs.tomba.io/api/phone#phone-validator)** - Validate a phone number and retrieve its associated information
  - **[Similar](https://docs.tomba.io/api/~endpoints#similar)** - Retrieve similar domains based on a specific domain
  - **[Technology](https://docs.tomba.io/api/~endpoints#technology)** - Retrieve the technologies used by a specific domain

  ## Credentials

  To use the Tomba node, you need to authenticate with your Tomba API credentials. Follow these steps to set up authentication:

  ### Getting Your API Credentials

  1. Sign up for a free account at [Tomba.io](https://tomba.io)
  2. Navigate to your [API Settings](https://app.tomba.io/api) in your Tomba dashboard
  3. Copy your **API Key** and **Secret Key**

  ### Setting Up Credentials in n8n

  1. In your n8n workflow, add a Tomba node
  2. Click on the **Credential to connect with** dropdown
  3. Select **Create New** and choose **Tomba API**
  4. Enter your credentials:
     - **API Key**: Your Tomba API key
     - **Secret**: Your Tomba secret key
  5. Click **Save** to store your credentials securely

  The Tomba node supports all Tomba API features, including email finding, verification, enrichment, phone finding, and domain analysis. Your credentials will be used to authenticate all requests to the Tomba API.

  ## Usage

  The Tomba node provides powerful email intelligence capabilities for your n8n workflows. Here are some common usage examples:

  ### Example 1: Email Verification Workflow

  This workflow verifies the deliverability of email addresses:

  **Nodes needed:**

  - **Manual Trigger** (or any trigger node)
  - **Tomba** node

  **Setup:**

  1. Add a Manual Trigger node to start your workflow
  2. Add a Tomba node and connect it to the trigger
  3. Configure the Tomba node:
     - **Operation**: Email Verifier
     - **Email**: Enter the email address to verify (e.g., `test@example.com`)
  4. Execute the workflow to get verification results

  ### Example 2: Domain Email Discovery

  Find all email addresses associated with a company domain:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with these settings:
     - **Operation**: Domain Search
     - **Domain**: Company domain (e.g., `stripe.com`)
     - **Limit**: Number of results to return
     - **Filters**: Optional filters for department, type, etc.

  ### Example 3: Email Finder for Lead Generation

  Generate email addresses using names and company domains:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Operation**: Email Finder
     - **Domain**: Target company domain
     - **First Name**: Contact's first name
     - **Last Name**: Contact's last name

  ### Example 4: Phone Number Discovery

  Find phone numbers associated with emails or domains:

  **Setup:**

  1. Add a trigger node
  2. Add a Tomba node with:
     - **Operation**: Phone Finder
     - **Search Type**: Choose Email, Domain, or LinkedIn
     - Configure the relevant field based on your search type

  ### Example 5: Company Intelligence Workflow

  Gather comprehensive company data:

  **Setup:**

  1. **Domain Search**: Find all emails for a domain
  2. **Location**: Get company location data
  3. **Technology**: Discover technologies used
  4. **Similar**: Find similar companies

  ### Pro Tips

  - Use the **Return All** option in Domain Search for comprehensive results
  - Combine multiple operations in sequence for enriched data
  - Use filters in Domain Search to target specific departments
  - Cache results using n8n's built-in functionality to avoid duplicate API calls
  - Set up error handling for rate limits and invalid inputs

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Tomba Email Finder](https://tomba.io)
  - [Tomba API docs](https://docs.tomba.io/introduction)
  - [Tomba knowledge base](https://help.tomba.io/en/)

  ## Test the node

  You can test your node as you build it by running it in a local n8n instance.

  ### Install n8n using npm

  ```bash
  npm install n8n -g
  ```

  ### Clone git repository

  ```bash
  git clone https://github.com/tomba-io/n8n-nodes-tomba.git
  cd n8n-nodes-tomba/
  ```

  ### Publish it locally

  ```bash
  # In the node directory
  npm run build
  npm link
  ```

  ### Install the node into your local n8n instance

  ```bash
  # In the nodes directory within your n8n installation
  npm link n8n-nodes-tomba
  ```

  > Make sure you run <b>npm link n8n-nodes-tomba</b> in the nodes directory within your n8n installation. This is probably something like <b>~/.n8n/nodes/</b>

  ## More information

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

  ## License

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

ai_documentation_summary:
  {"purpose":"Provides access to the Tomba.io API from n8n workflows to find, verify, and enrich email addresses, phone numbers, and domain/company intelligence.","capabilities":["Author Finder (generate/retrieve likely email from a blog post URL)","Autocomplete / Domain suggestions (find company names, logo and domain info)","Domain Search (get all emails found for a domain with sources)","Domain Status (detect webmail/disposable domains)","Email Count (retrieve total known emails for a domain)","Email Enrichment (lookup person and company data from an email)","Email Finder (generate/retrieve likely email from domain + first/last name)","Email Format (retrieve email format patterns for a domain)","Email Sources (find sources where an email was found)","Email Verifier (verify deliverability of an email address)"],"authentication":"API Key and Secret (Tomba API credentials required — provide API Key and Secret in n8n Tomba API credential)","commonUseCases":["Verify email deliverability before sending outreach (Email Verifier)","Discover all public emails for a company domain (Domain Search)","Generate likely contact emails for lead generation using names and domains (Email Finder / LinkedIn Finder)","Enrich contact records with person and company data (Email Enrichment)","Find and validate phone numbers associated with contacts or domains (Phone Finder / Phone Validator)"],"limitations":[],"relatedNodes":["Manual Trigger (example usage in README)","Other trigger nodes (used to start workflows before calling Tomba)"]}


node_type: @alipeople/n8n-nodes-sendon.sendon
package_name: @alipeople/n8n-nodes-sendon
display_name: Sendon
description: Send SMS using Sendon API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: alipeople
author_github_url: https://github.com/alipeople/n8n-nodes-sendon.git
npm_package_name: @alipeople/n8n-nodes-sendon
npm_version: 0.1.7
community_fetched_at: 2026-02-19T14:41:52.558Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  # n8n-nodes-sendon

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

  Sendon is a messaging platform that allows you to send SMS, LMS, and MMS messages programmatically via API.

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

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

  ## Installation

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

  ## Operations

  The Sendon node supports the following operations:

  - Send SMS, LMS, and MMS messages
    - Automatic message type detection (SMS/LMS) based on content length
    - Optional title auto-generation for LMS/MMS
    - Support for development and production environments
    - Mark message as advertisement

  ## Credentials

  To use this node, you need a Sendon account and API credentials.

  1. Sign up at [Sendon](https://sendon.io/) as a business user. **Note: Only users with a registered business in South Korea are eligible to use Sendon.** After registration, obtain your Sendon ID and API Key.
  2. Charge your credits or points to send messages.
  3. Generate your API Key in your settings.
  4. In n8n, go to **Settings** → **Credentials**.
  5. Add new credentials for "Sendon" and enter:
     - **Sendon ID**: Your Sendon account ID
     - **API Key**: Your Sendon API key

  Authentication uses HTTP Basic Auth with your Sendon ID and API Key.

  ## Compatibility

  - Requires n8n version: 1.0.0 or higher (please adjust if you have a different minimum)
  - Node.js ≥ 20.15
  - No known incompatibilities at this time.

  ## Usage

  ### Parameters

  - **Sender Number** (`from`): The phone number sending the message
  - **Recipient Number** (`to`): The phone number receiving the message
  - **Message** (`message`): The content of your SMS/LMS/MMS
  - **Title** (`title`, optional): Custom title for LMS/MMS (auto-generated from first 20 characters if omitted)
  - **Is Ad** (`isAd`, optional): Mark as advertisement (default: false)
  - **Type** (`type`, optional): `Auto` (default), `SMS`, `LMS`, `MMS`

  ### Message Type Auto-Detection

  - If `Type` is set to `Auto` or left blank:
    - **SMS**: ≤ 90 bytes
    - **LMS**: > 90 bytes
    - **MMS**: Only if selected manually

  ### Example

  **Basic SMS:**

  ```json
  {
    "from": "01012345678",
    "to": "01087654321",
    "message": "Hello from n8n!",
    "isAd": false,
    "type": "auto"
  }
  ```

  **Long Message (LMS):**

  ```json
  {
    "from": "01012345678",
    "to": "01087654321",
    "message": "This is a longer message that will automatically be sent as LMS because it exceeds the SMS character limit...",
    "title": "Custom Title",
    "isAd": false,
    "type": "auto"
  }
  ```

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

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Sendon API documentation](https://api.sendon.io/swagger)

  ## Version history

  - v1.0.0: Initial release. Supports sending SMS, LMS, and MMS with auto-detection and credential management.

ai_documentation_summary:
  {"purpose":"Send SMS, LMS, and MMS messages from n8n workflows using the Sendon API, with automatic message-type detection and support for development/production environments.","capabilities":["Send SMS messages","Send LMS (long message) messages","Send MMS messages (must be selected manually)","Automatic message type detection based on content length (SMS vs LMS)","Optional title generation for LMS/MMS (auto-generated from first 20 characters if omitted)","Mark messages as advertisement","Support for development and production environments","Configure sender number, recipient number, message content, title, advertisement flag, and explicit type"],"authentication":"HTTP Basic Auth using Sendon ID and API Key (API credentials required)","commonUseCases":["Transactional notifications (alerts, verification codes) via SMS","Sending longer informational messages that auto-route as LMS","Marketing or promotional messages (using isAd flag)","Sending multimedia messages (MMS) when manually selected","Testing and staging messaging in development vs production environments"],"limitations":["Only available to Sendon business users registered in South Korea","Requires a Sendon account, charged credits/points, and generated API key","MMS is not auto-detected — must be selected manually","Auto-detection threshold: SMS ≤ 90 bytes, LMS > 90 bytes (may not account for encoding nuances)","Requires n8n >= 1.0.0 and Node.js >= 20.15"],"relatedNodes":[]}


