# nodes

package_name: @digitalocean/n8n-nodes-digitalocean-gradient-serverless-inference
display_name: DigitalOcean Gradient™ AI Serverless Inference
description: Consume DigitalOcean Gradient™ AI Serverless Inference
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: digitalocean-eng
author_github_url: https://github.com/digitalocean-labs/n8n-node-gradient-serverless-inference.git
npm_package_name: @digitalocean/n8n-nodes-digitalocean-gradient-serverless-inference
npm_version: 1.0.6
community_fetched_at: 2026-07-14T14:40:33.252Z
ai_summary_generated_at: 2026-03-25 22:51:43
node_type:
  @digitalocean/n8n-nodes-digitalocean-gradient-serverless-inference.digitalOceanGradientServerlessInference

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "text",
      "options": [
        {
          "name": "Text",
          "value": "text"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "complete",
      "options": [
        {
          "name": "Complete",
          "value": "complete",
          "action": "Create a text completion",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/chat/completions",
              "method": "POST"
            }
          },
          "description": "Create one or more completions for a given text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "text"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Complete",
      "value": "complete",
      "action": "Create a text completion",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/chat/completions",
          "method": "POST"
        }
      },
      "description": "Create one or more completions for a given text",
      "resource": "text"
    }
  ]

npm_readme:
  # n8n-nodes-digitalocean-serverless-inference

  This is an n8n community node for the [DigitalOcean Gradient™ AI Platform Serverless Inference API](https://gradientai-sdk.digitalocean.com/api/resources/chat/). It provides access to DigitalOcean Gradient™ AI Platform's large language models through n8n workflows.

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

  [Installation](#installation)   
  [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.

  ### Quick Installation

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `@digitalocean/n8n-nodes-digitalocean-serverless-inference` in **Enter npm package name**
  4. Agree to the risks of using community nodes
  5. Select **Install**

  **Note:** After installation, you need to restart your n8n instance for the new node to be recognized.

  ### Chat Completion

  Create chat completions using DigitalOcean Gradient™ AI Serverless Inference LLMs. The node supports:

  - Multiple messages with system, user, and assistant roles
  - [Multiple Models](https://docs.digitalocean.com/products/gradient-ai-platform/details/models/)
  - Customizable parameters conforming to the [API Specification](https://gradientai-sdk.digitalocean.com/api/resources/chat/subresources/completions/methods/create)

  ## Credentials

  To use this node, you need a [Model Access Key](https://docs.digitalocean.com/products/gradient-ai-platform/how-to/use-serverless-inference/#create) from DigitalOcean Gradient™ AI Platform

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Tested up to n8n version 1.106.3

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [DigitalOcean Gradient™ AI Serverless Inference documentation](https://docs.digitalocean.com/products/gradient-ai-platform/how-to/use-serverless-inference/)

  ## Version History

  ### 1.0.0

  - Initial usable release

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation to consume DigitalOcean Gradient™ AI Serverless Inference API for large language model chat completions.","capabilities":["Generate chat completions using DigitalOcean Gradient AI LLMs","Support multiple messages with system, user, and assistant roles","Access multiple available models","Configure customizable inference parameters per API specification"],"authentication":"Model Access Key required","commonUseCases":["Integrate AI chatbots into n8n workflows","Process natural language inputs through DigitalOcean Gradient models","Automate tasks requiring LLM inference"],"limitations":["Requires n8n version 1.0.0 or later","Community node status may require accepting usage risks","Requires n8n instance restart after installation"],"relatedNodes":["DigitalOcean API nodes","AI/LLM nodes","Chat completion nodes"]}


node_type: n8n-nodes-krispcall.krispcall
package_name: n8n-nodes-krispcall
display_name: KrispCall
description: Interact with KrispCall API to manage contacts.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: kapil-krispcall
author_github_url: https://github.com/kapil-krispcall/
npm_package_name: n8n-nodes-krispcall
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:33.253Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Contact",
          "value": "contact",
          "description": "Manage contacts in KrispCall"
        },
        {
          "name": "SMS_MMS",
          "value": "sms",
          "description": "Manage SMS in KrispCall"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact in KrispCall"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete contacts",
          "description": "Delete contacts in KrispCall"
        },
        {
          "name": "Get Voicemail",
          "value": "getVoicemail",
          "action": "Get many voicemails",
          "description": "Retrieve voicemails from KrispCall"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "new_contact",
      "options": [
        {
          "name": "New Contact",
          "value": "new_contact",
          "action": "On New Contact",
          "description": "Triggers when a new contact is added in your Workspace"
        },
        {
          "name": "New SMS/MMS",
          "value": "new_sms_or_mms",
          "action": "On New SMS/MMS",
          "description": "Triggers when a new SMS or MMS is received in your Workspace"
        },
        {
          "name": "New Voicemail",
          "value": "new_voicemail",
          "action": "On New Voicemail",
          "description": "Triggers when a new voicemail is received in your Workspace"
        },
        {
          "name": "New Call Event",
          "value": "new_call_log",
          "action": "On New Call Event",
          "description": "Triggers when a new call related activity is created in your Workspace"
        },
        {
          "name": "New SMS/MMS Sent",
          "value": "outbound_sms_or_mms",
          "action": "On New SMS/MMS Sent",
          "description": "Triggers when a new SMS or MMS is sent from your Workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send SMS",
          "value": "send",
          "action": "Send an SMS",
          "description": "Send an SMS in KrispCall"
        },
        {
          "name": "Send MMS",
          "value": "mms",
          "action": "Send an MMS",
          "description": "Send an MMS in KrispCall"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact in KrispCall",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete contacts",
      "description": "Delete contacts in KrispCall",
      "resource": "contact"
    },
    {
      "name": "Get Voicemail",
      "value": "getVoicemail",
      "action": "Get many voicemails",
      "description": "Retrieve voicemails from KrispCall",
      "resource": "contact"
    },
    {
      "name": "New Contact",
      "value": "new_contact",
      "action": "On New Contact",
      "description": "Triggers when a new contact is added in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New SMS/MMS",
      "value": "new_sms_or_mms",
      "action": "On New SMS/MMS",
      "description": "Triggers when a new SMS or MMS is received in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New Voicemail",
      "value": "new_voicemail",
      "action": "On New Voicemail",
      "description": "Triggers when a new voicemail is received in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New Call Event",
      "value": "new_call_log",
      "action": "On New Call Event",
      "description": "Triggers when a new call related activity is created in your Workspace",
      "resource": "webhook"
    },
    {
      "name": "New SMS/MMS Sent",
      "value": "outbound_sms_or_mms",
      "action": "On New SMS/MMS Sent",
      "description": "Triggers when a new SMS or MMS is sent from your Workspace",
      "resource": "webhook"
    },
    {
      "name": "Send SMS",
      "value": "send",
      "action": "Send an SMS",
      "description": "Send an SMS in KrispCall",
      "resource": "sms"
    },
    {
      "name": "Send MMS",
      "value": "mms",
      "action": "Send an MMS",
      "description": "Send an MMS in KrispCall",
      "resource": "sms"
    }
  ]

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

  # n8n-nodes-krispcall

  This repository contains the custom [n8n](https://n8n.io) node for Krispcall, designed to help you automate your telephony workflows directly within n8n. It includes the node linter and other necessary development dependencies.

  **KrispCall** is an AI-powered modern telephony platform that helps businesses streamline communication with virtual numbers, advanced calling features, and seamless CRM integrations.

  This **n8n community node** enables you to integrate KrispCall’s advanced telephony features into your n8n workflows. You can create and manage contacts, send SMS/MMS messages, retrieve voicemails, and manage webhooks directly from n8n.

  ---

  ## 🔧 Features

  - 🔐 API key authentication
  - 📇 Create and manage contacts
  - 📤 Send SMS and MMS
  - 📥 Retrieve voicemails and phone numbers
  - 🌐 Create and delete webhooks for real-time event handling

  ---

  ## 📦 Installation

  Install this community node in your n8n instance:

  ```bash
  npm install n8n-nodes-krispcall
  ```

  Or via the n8n Community Nodes UI (under Settings → Community Nodes → Install).

  ## 🔐 Authentication

  To use this node, you must have a [KrispCall](https://krispcall.com) account and an API key.

  ### Get your API Key

  1. Sign in to your [KrispCall](https://krispcall.com) account
  2. Navigate to **Settings** → **Developer**
  3. Click **Generate API Key**
  4. Copy the key and use it when setting up **credentials** in n8n

  ### Credentials Setup in n8n

  **Base URL:** `https://app.krispcall.com/api/v3/platform/n8n`

  **API Key:** Paste your [KrispCall](https://krispcall.com) API key

  ## 🔁 Supported Resources & Operations Resource

  | Resource    | Actions              |Triggers |
  | ----------- | ----------------------- | -- |
  | `Contact`   | Create, Delete | New Contact, Call Logs|
  | `SMS` `MMS`  | Send              | New SMS or MMS, |
  | `Voicemail` | Get| New Voicemail|

  ## 📘 Example Usage

  ### Create a Contact

  1. Connect to KrispCall via `credentials`
  2. Select resource: `Contact`
  3. Choose operation: `Create`
  4. Provide the contact details (`name`, `phone`, etc.)
  5. Execute

  ### Send SMS

  1. Select resource: `SMS`
  2. Choose operation: `Send`
  3. Set `phone number` and `message`
  4. Execute

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of telephony workflows by interacting with the KrispCall API to manage contacts, send messages, and handle webhooks.","capabilities":["Create contacts","Delete contacts","Send SMS messages","Send MMS messages","Retrieve voicemails","Retrieve phone numbers","Create webhooks","Delete webhooks"],"authentication":"API key required","commonUseCases":["Automating customer communication via SMS/MMS","Managing CRM contacts through telephony integration","Handling incoming voicemails automatically","Setting up real-time event notifications via webhooks"],"limitations":["Community node (may require manual installation)","Requires a separate KrispCall account and API key"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.credentialManager"]}


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-07-14 14:40:33
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-07-14T14:40:33.254Z
ai_summary_generated_at: 2026-03-25 22:51:43
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",
      "resource": "client"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple clients",
      "resource": "client"
    },
    {
      "name": "Add Note To Job",
      "value": "addNoteToJob",
      "action": "Add job note",
      "resource": "job"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create new job",
      "resource": "job"
    },
    {
      "name": "Create From Template",
      "value": "createFromTemplate",
      "action": "Create job from template",
      "resource": "job"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete job",
      "resource": "job"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get job details",
      "resource": "job"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get multiple jobs",
      "resource": "job"
    },
    {
      "name": "Send Job To Queue",
      "value": "sendJobToQueue",
      "action": "Queue job",
      "resource": "job"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update job details",
      "resource": "job"
    },
    {
      "name": "Send Email",
      "value": "sendEmail",
      "action": "Send email",
      "resource": "email"
    },
    {
      "name": "Send SMS",
      "value": "sendSMS",
      "action": "Send text message",
      "resource": "sms"
    },
    {
      "name": "Create Inbox Message",
      "value": "createInboxMessage",
      "action": "Create inbox message",
      "resource": "inbox"
    },
    {
      "name": "Global Search",
      "value": "globalSearch",
      "action": "Search everything",
      "resource": "search"
    },
    {
      "name": "Search",
      "value": "objectSearch",
      "action": "Search specific type",
      "resource": "search"
    }
  ]

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":"Automates job, staff, and client workflows in trade service businesses by integrating ServiceM8's job management software with n8n workflows.","capabilities":["Manage jobs (create, update, delete, queue, add notes, send to queue)","Manage clients (create, update, delete, update contacts)","Manage job bookings and check-ins","Handle file attachments (upload, download, get metadata, delete)","Manage inbox messages and convert messages to jobs","Send emails and SMS messages","Global and object-specific search","Webhook triggers for 20+ events (e.g., job status changes, quote acceptance, payment received)","Create jobs from templates","Support for pagination and advanced filtering in Get Many operations"],"authentication":"API Key (requires API key and account email)","commonUseCases":["Automating job creation from web form submissions","Sending daily schedule emails to staff","Automating invoice and payment notifications","Syncing customer data between ServiceM8 and other systems","Triggering workflows when job status changes or quotes are accepted"],"limitations":["Community node (not official n8n node)","Requires active ServiceM8 account with API key access","Some advanced features may depend on ServiceM8 API capabilities"],"relatedNodes":["Webhook","Schedule","Email","SMS","Activity"]}


node_type: n8n-nodes-twittershots.twitterShots
package_name: n8n-nodes-twittershots
display_name: TwitterShots
description: Get Tweet screenshots from TwitterShots API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  {
  "type": "main",
  "required": true
  }
  ]

updated_at: 2026-07-14 14:40:33
author_name: wuxinhua
author_github_url: https://github.com/0xinhua/
npm_package_name: n8n-nodes-twittershots
npm_version: 0.3.0
community_fetched_at: 2026-07-14T14:40:33.255Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tweetScreenshot",
      "options": [
        {
          "name": "Tweet Screenshot",
          "value": "tweetScreenshot"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a tweet screenshot",
          "description": "Get a screenshot of a tweet"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tweetScreenshot"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a tweet screenshot",
      "description": "Get a screenshot of a tweet",
      "resource": "tweetScreenshot"
    }
  ]

npm_readme:
  ![n8n TwitterShots node image](./n8n-TwitterShots-node.png)

  # n8n-nodes-twittershots

  A n8n node lets you easily screenshot X (Twitter) posts in your workflows with TwitterShots API.

  - [TwitterShots](https://twittershots.com/) is professional X/Tweet screenshot generator.
  - [n8n](https://n8n.io/) is a fair-code licensed workflow automation platform.

  ## Features

  - Multiple output formats (SVG, PNG, HTML)
  - Light/Dark theme support
  - Customizable logo options (X, bluebird, or none)
  - Configurable display options (full text, timestamp, view count, statistics)
  - Simple API integration

  ## Authentication

  Before using the node, you need to set up TwitterShots API credentials:

  1. Visit [TwitterShots account](https://twittershots.com/account/settings) to get your API key
  2. Add your API key to n8n credentials

  For detailed information about API credentials and parameters, please refer to the [API Documentation](https://twittershots.com/docs/api).

  ## Usage

  1. Search TwitterShots and add TwitterShots node to your workflow
  2. Select "Tweet Screenshot" resource
  3. Select "Get a tweet screenshot" action
  4. Create TwitterShots API credentials
  5. Select Tweet Screenshot Resource
  6. Enter the tweet ID and configure output format and display options
  7. Run the workflow to get your screenshot

  ## Dev and test node local

  ### 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/).

  1.Clone your new repo

    ```
    git clone https://github.com/0xinhua/n8n-nodes-twittershots
    ```

  2.When you are ready to test your node, publish it locally

  ```
  # In your n8n-nodes-twittershots directory
  npm i
  npm run build
  npm link
  ```

  3. Install the node into your local n8n instance:

  ```
  ~/.n8n/custom/

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

  4.Start n8n:

  ```
  n8n start
  ```

  5.Open n8n in your browser. You should see TwitterShots nodes when you search for them in the nodes panel.

  Checkout full docs [test n8n node](https://docs.n8n.io/integrations/creating-nodes/build/declarative-style-node/#test-your-node).

  ### Issues

  If you need help or have any questions:

  - Check the [API Documentation](https://twittershots.com/docs/api)
  - Email us at support@twittershots.com
  - Create an issue on [GitHub Issues](https://github.com/0xinhua/n8n-nodes-twittershots/issues)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Generates screenshots of X (Twitter) posts using the TwitterShots API within n8n workflows.","capabilities":["Generate screenshots in SVG, PNG, or HTML formats","Support light and dark themes","Customize logo options (X, bluebird, or none)","Configure display options (full text, timestamp, view count, statistics)","Retrieve tweet ID from workflow parameters"],"authentication":"API key required","commonUseCases":["Automated social media monitoring","Content archiving and backup","Social media analytics visualization","Automated reporting workflows"],"limitations":["Requires external API key from TwitterShots service","Dependent on TwitterShots API availability and rate limits","No built-in error handling for API failures mentioned in README"],"relatedNodes":["n8n Twitter node","n8n HTTP Request node","n8n Code node"]}


node_type: @orq-ai/n8n-nodes-orq.orqDeployment
package_name: @orq-ai/n8n-nodes-orq
display_name: Orq Deployment
description: Invoke Orq AI deployment
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: sohrabhosseini
author_github_url: https://github.com/orq-ai/orqkit.git
npm_package_name: @orq-ai/n8n-nodes-orq
npm_version: 1.3.2
community_fetched_at: 2026-07-14T14:40:33.256Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # @orq-ai/n8n-nodes-orq

  Community nodes for integrating [Orq AI](https://orq.ai) with n8n workflows. These nodes provide seamless access to Orq AI's deployment and knowledge base capabilities within your automation workflows.

  ## Features

  - **Agent Execution**: Run Orq AI Agents for complex, multi-step workflows
  - **Deployment Invocation**: Execute Orq AI deployments with messages, context, and inputs
  - **Knowledge Base Search**: Search and retrieve content from Orq knowledge bases
  - **Dynamic Configuration**: Automatically load available agents, deployments, and knowledge bases
  - **Multi-modal Support**: Send text and image content to vision-capable models
  - **Metadata Filtering**: Advanced filtering options for knowledge base searches
  - **Error Handling**: Built-in error handling with continue-on-fail support

  ## Installation

  ### Community Node Installation

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

  ### Manual Installation

  ```bash
  bun add @orq-ai/n8n-nodes-orq
  ```

  ### Docker Installation

  If using n8n with Docker, set the environment variable:

  ```bash
  N8N_COMMUNITY_NODE_PACKAGES=@orq-ai/n8n-nodes-orq
  ```

  ### Local Development Installation

  For local development and testing with n8n:

  1. Clone and navigate to the package:

  ```bash
  git clone https://github.com/orq-ai/orqkit.git
  cd orqkit/packages/n8n-nodes-orq
  ```

  2. Install dependencies:

  ```bash
  bun install
  ```

  3. Build the nodes:

  ```bash
  bunx nx build n8n-nodes-orq
  ```

  4. Start n8n with custom nodes:

  ```bash
  N8N_CUSTOM_EXTENSIONS="$(pwd)" n8n start
  ```

  The nodes will appear as "OrqAgent", "OrqDeployment" and "OrqKnowledgeBaseSearch" in the n8n node panel.

  ## Authentication

  1. Sign up or log in at [Orq AI](https://orq.ai)
  2. Navigate to your account settings to generate an API key
  3. In n8n, create new credentials:
     - Go to **Credentials** → **New**
     - Select **Orq API**
     - Enter your API key
     - Save the credentials

  ## Available Nodes

  ### Orq Agent

  Run Orq AI Agents for complex, long-running tasks with multi-step reasoning and tool use.

  #### How It Works

  1. **Run**: Send a message to an agent
  2. **Execute**: The server runs the agent turn (including any tools it has configured) and returns when done
  3. **Retrieve Results**: Extract the final agent response

  #### Configuration

  - **Agent**: Select from your available agents or specify via expression
  - **Message**: Send your instruction or data to the agent
  - **Timeout (Seconds)**: How long to wait for the agent to finish (default 600)

  **Additional Fields** (optional)
  - **Previous Response ID**: Continue from a prior response by passing its `responseId`
  - **Conversation ID**: Thread multiple calls into a long-lived conversation (pre-create via the Orq API; mutually exclusive with Previous Response ID)
  - **Memory Entity ID**: Attach a persistent memory entity so the agent can recall facts across calls
  - **Store Response**: Whether Orq persists this response server-side (default on)
  - **Variables**: Templated prompt variables; each row has Name, Value, and a Secret toggle for log redaction
  - **Metadata**: Key-value tags (max 16 pairs)

  #### Response Statuses

  The node branches on the agent's final status:

  - `completed` — success, response text extracted
  - `incomplete` — partial response returned with an `incomplete` flag
  - `failed` — throws with the server error message

  #### Output

  The node returns:

  - **responseId**: Unique identifier for this response (use as Previous Response ID in a downstream node)
  - **agentKey**: The agent that was invoked
  - **status**: Final status (`completed` or `incomplete`)
  - **success**: Boolean indicating if the response completed successfully
  - **response**: The agent's response text
  - **raw**: Full response body for anything else you need
  - **usage**: Token counts, when present
  - **refusals**: Array of refusal strings, when present
  - **incomplete**: `true` when status is `incomplete`
  - **incompleteReason**: Reason for the incomplete status, when present

  #### Example Use Cases

  - Data analysis and insights generation
  - Complex document processing
  - Multi-step reasoning tasks
  - Tool use and function calling

  #### Example Workflow

  ```yaml
  1. Set Node (Create data)
     - csvData: "Month,Sales\nJan,10000..."
  2. Orq Agent
     - Agent: "data-analyst"
     - Message: "Analyze this sales data and provide insights"
  3. Email Send
     - Body: "{{ $node["Orq Agent"].json.response }}"
  ```

  #### When to Use Orq Agent vs Orq Deployment

  These n8n nodes connect to different resource types in your Orq workspace:

  **Use Orq Agent when you need:**
  - **Tools & Actions**: Agent can call HTTP APIs, run Python code, or use built-in utilities
  - **Autonomous Iteration**: Agent works through multi-step problems independently to reach the final output

  **Use Orq Deployment when you need:**
  - **Direct LLM Calls**: Single prompt-to-response execution
  - **No Tool Complexity**: Just generate text without external actions
  - **Template Variables**: Parameterized prompts with inputs

  **Key Difference**: In Orq, Agents have access to tools and can autonomously iterate to solve problems, while Deployments are single LLM calls without tools or autonomous iteration.

  ### Orq Deployment

  Invoke Orq AI deployments to process messages with AI models.

  #### Configuration

  - **Deployment Key**: Select from your available deployments or specify via expression
  - **Messages**: Add conversation messages with roles (User, System, Assistant)
  - **Context**: Set key-value pairs for deployment routing
  - **Inputs**: Provide values for prompt template variables

  #### Message Types

  - **Text Messages**: Standard text content for all roles
  - **Image Messages**: For User role only, supporting:
    - Image URLs
    - Base64 encoded images
    - Optional text descriptions with images

  #### Example Use Cases

  - Generate content based on templates
  - Process customer inquiries
  - Analyze images with vision models
  - Chain multiple AI operations

  ### Orq Knowledge Base Search

  Search and retrieve relevant content from your Orq knowledge bases.

  #### Configuration

  - **Knowledge Base**: Select from your available knowledge bases
  - **Query**: Search query to find relevant content
  - **Metadata Filters**: Optional filtering with AND/OR conditions or custom JSON

  #### Filter Types

  - **None**: No filtering, return all matching results
  - **AND**: All filter conditions must match
  - **OR**: Any filter condition must match
  - **Custom JSON**: Advanced recursive filter structures

  #### Example Use Cases

  - Semantic search across documents
  - Context retrieval for RAG applications
  - Content discovery and recommendations
  - Metadata-based filtering

  ## Workflow Examples

  ### Agent-Based Data Analysis

  ```yaml
  1. Manual Trigger
  2. Set Node
     - csvData: "Month,Sales,Region\nJan,10000,North..."
  3. Orq Agent
     - Agent: "data-analyst"
     - Message: "Analyze this sales data by region and provide growth rates"
  4. Email Send
     - Subject: "Sales Analysis Report"
     - Body: "{{ $node["Orq Agent"].json.response }}"
  ```

  ### Basic Text Generation

  ```yaml
  1. Trigger (e.g., Webhook)
  2. Orq Deployment
     - Deployment: "content-generator"
     - Input: { topic: "{{$json.topic}}" }
     - Message: "Generate an article"
  3. Output (e.g., Google Sheets)
  ```

  ### Knowledge-Enhanced Response

  ```yaml
  1. Trigger (e.g., Form submission)
  2. Orq Knowledge Base Search
     - Query: "{{$json.question}}"
     - Knowledge Base: "product-docs"
  3. Orq Deployment
     - Context from search results
     - Generate informed response
  4. Send response (e.g., Email)
  ```

  ### Image Analysis Pipeline

  ```yaml
  1. Image input (e.g., S3 trigger)
  2. Orq Deployment
  - Vision model deployment
  - Image URL from trigger
  - Analyze and extract data
  3. Store results (e.g., Database)
  ```

  ## Development

  ```bash
  # Build the package
  bunx nx build n8n-nodes-orq

  # Run development mode
  bunx nx dev n8n-nodes-orq

  # Test locally with n8n
  bun run test:local
  ```

  ## Resources

  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
  - [Orq AI Documentation](https://docs.orq.ai)
  - [Orq AI Platform](https://orq.ai)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Orq AI by allowing workflow execution of AI deployments and searching knowledge bases with support for multi-modal inputs.","capabilities":["Invoke Orq AI deployments with messages, context, and inputs","Search and retrieve content from Orq knowledge bases","Support for text and image content (vision models)","Advanced metadata filtering for knowledge base searches","Dynamic configuration of deployments and knowledge bases","Built-in error handling with continue-on-fail support"],"authentication":"API key required (via Orq API credentials in n8n)","commonUseCases":["Generate content based on templates","Process customer inquiries","Analyze images with vision models","Semantic search across documents for RAG applications","Chain multiple AI operations in a workflow"],"limitations":[],"relatedNodes":["Orq Knowledge Base Search","Webhook Trigger","Google Sheets Output","Database Store"]}


node_type: n8n-nodes-extruct.extruct
package_name: n8n-nodes-extruct
display_name: Extruct AI
description: Add companies to Extruct tables and run enrichment
category: Community
development_style: declarative
version: 3
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zodackwand
author_github_url: https://github.com/extruct-ai/
npm_package_name: n8n-nodes-extruct
npm_version: 2.1.0
community_fetched_at: 2026-07-14T14:40:33.257Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-extruct

  ![Extruct AI Banner](icons/banner.png)

  **n8n community node for Extruct AI**

  This node lets you enrich and fetch company data from Extruct AI, right inside your n8n workflows.
  Define your own table structure, add any custom columns, and get exactly the data you need.

  ### Instant preview

  Suppose you want to enrich a company by website and get its funding, team size, recent news headline, patent count, and head of HR LinkedIn profile.


  ```json
  {
    "company_name": {
      "value": {
        "answer": "Stripe",
        "source": [
          "https://en.wikipedia.org/wiki/Stripe,_Inc."
        ],
        "explanation": "Full company name as listed on the Stripe Wikipedia page."
      }
    },
    "company_website": {
      "value": {
        "answer": "https://stripe.com/",
        "source": [
          "https://en.wikipedia.org/wiki/Stripe,_Inc.",
          "https://stripe.com"
        ],
        "explanation": "Canonical homepage confirmed on Wikipedia and the stripe.com domain."
      }
    },
    "recent_news_headline": {
      "value": {
        "answer": "Stripe’s first employee, the founder of fintech Increase, sort of bought a bank",
        "source": [
          "https://techcrunch.com/2025/07/03/stripes-first-employee-the-founder-of-fintech-increase-sort-of-bought-a-bank"
        ],
        "explanation": "Headline from a TechCrunch article published July 3, 2025, as the latest news about Stripe."
      }
    },
    "team_size": {
      "value": {
        "answer": "8550",
        "source": [
          "https://techcrunch.com/2025/01/21/stripe-is-laying-off-300-people-but-says-it-still-plans-to-hire-in-2025"
        ],
        "explanation": "About 8,550 employees after a January 2025 layoff of 300 people, per TechCrunch."
      }
    },
    "patent_count": {
      "value": {
        "answer": "247",
        "source": [
          "https://insights.greyb.com/stripe-patents"
        ],
        "explanation": "Total of 247 patents held globally by Stripe, according to GreyB Insights."
      }
    },
    "funding_amount": {
      "value": {
        "answer": "$9.81B",
        "source": [
          "https://tracxn.com/d/companies/stripe/__uahG_IGnVgsUsOG-f8otYHLkOkliWg7YFhJ5ZkNIkpI/funding-and-investors",
          "https://www.crunchbase.com/organization/stripe/company_financials"
        ],
        "explanation": "Raised $9.81 B over 24 rounds, including a $6.87 B round in March 2023, per Tracxn and Crunchbase."
      }
    },
    "head_of_hr_linkedin": {
      "value": {
        "answer": "https://www.linkedin.com/in/maiaj",
        "source": [
          "https://www.comparably.com/companies/stripe/maia-josebachvili",
          "https://www.linkedin.com/in/maiaj"
        ],
        "explanation": "Confirmed as Head of People at Stripe via Comparably and LinkedIn."
      }
    }
  }
  ```



  ## What is Extruct AI?

  **Extruct AI** is a data enrichment platform that lets you create custom tables with any columns you want, and then enrich them with company data from the web and public sources.  

  - **Any info you want:** Define your own columns — get emails, social links, funding, tech stack, or anything else.
  - **No limits:** Works for any company, in any country, any industry.
  - **Built for automation:** Integrate with CRMs, lead gen, analytics, and more.



  ## Features

  - Add a company to your Extruct table and trigger enrichment
  - Poll for enrichment completion automatically
  - Instantly fetch the enriched row with all your custom columns
  - Use in any n8n workflow



  ## Installation

  Follow the [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/) for installing custom nodes.



  ## Usage

  1. **Create an Extruct table:**
     - You can start from a template table or create your own from scratch at [Extruct AI](https://extruct.ai).
     - Add any custom columns you need — you have full control over the table structure and fields.
  2. **Get your Table ID:**
     - After creating the table, copy its Table ID from the Extruct dashboard, or simply grab it from the table page URL.
  3. **Use in n8n:**
     - In the Extruct node, paste your Table ID.
     - Enter the company name or website you want to enrich:
       - You can type it manually in the node field,
       - Or pass it dynamically from a Form Trigger,
       - Or from any other node in your workflow — just connect it to the Extruct node.
     - Run the workflow — the node will add the company, trigger enrichment, and return the enriched data for your custom columns.

  ## Quick Demo

  ![n8n node demo](https://github.com/zodackwand/extruct_screenshots/blob/main/demo.gif?raw=true)


  ## Operations

  ### Enrich Company Info

  - **Input:**  
    - Table ID (your Extruct table)
    - Company Input (website or name)
  - **Output:**  
    - Returns a fully enriched row with all your custom columns as clean JSON, ready to use in your n8n workflow.

  **How it works:**  
  1. Adds a company to your Extruct table  
  2. Triggers enrichment  
  3. Waits for completion  
  4. Returns the enriched row (with all your custom fields)



  ## Output
  The node returns clean JSON with all enriched fields for the company, matching your custom table columns.



  ## Extruct Table Templates
  Use these ready-to-go table templates for your n8n workflows:

  - [Sales and Business Development](https://app.extruct.ai/tables/shared/jlcBdFwKXrC8uw21)  
    *Track leads, enrich company profiles, and automate sales research.*

  - [Complete Startup Overview](https://app.extruct.ai/tables/shared/gQlqQK4pQgPDmk81)  
    *Get a 360° view of startups with funding, team, and product data.*

  - [Social Enrichment](https://app.extruct.ai/tables/shared/VfGemEC1BujAIJx8)  
    *Enrich companies with social profiles, Twitter, LinkedIn, and more.*

  Open a template, get the Table ID, and use it in your node.



  ## Credentials

  - **Extruct API Token**  
    - Sign up at [extruct.ai](https://extruct.ai)
    - Get your API token from the dashboard
    - Add it as a credential in n8n



  ## Resources

  - [Extruct AI website](https://extruct.ai)
  - [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Extruct AI API Docs](https://www.extruct.ai/docs/extruct-ai/product)



  ## Compatibility

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

ai_documentation_summary:
  {"purpose":"This n8n community node enriches company data by adding companies to a custom Extruct AI table, triggering automated enrichment, and returning structured JSON with custom columns like funding, team size, and social profiles.","capabilities":["Add companies to custom Extruct AI tables","Trigger automated data enrichment","Poll for enrichment completion status","Return enriched data as clean JSON","Support custom table structures with any columns","Fetch company data from multiple web sources","Integrate with n8n workflows via dynamic inputs"],"authentication":"Extruct API Token (requires manual entry in n8n credentials)","commonUseCases":["Sales lead enrichment","Startup research and analysis","CRM data population","Competitor intelligence gathering","Automated social profile extraction"],"limitations":["Requires manual setup of Extruct AI account and API token","Enrichment results depend on data availability in Extruct's sources","Custom table structure must be defined in Extruct AI dashboard before use","May require waiting for enrichment completion before data is returned"],"relatedNodes":["n8n HTTP Request","n8n Code","n8n Form Trigger","n8n Webhook"]}


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

updated_at: 2026-07-14 14:40:33
author_name: bcharleson
author_github_url: https://github.com/r-Howitzer/
npm_package_name: n8n-nodes-heyreach
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:33.258Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "LinkedIn Account",
          "value": "linkedInAccount"
        },
        {
          "name": "List",
          "value": "list"
        },
        {
          "name": "My Network",
          "value": "myNetwork"
        },
        {
          "name": "Stat",
          "value": "stats"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Add Leads",
          "value": "addLeads",
          "action": "Add leads to campaign",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/AddLeadsToCampaign",
              "body": {
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "accountLeadPairs": "={{$parameter[\"accountLeadPairs\"].pair.map(pair => ({\n                                    linkedInAccountId: parseInt(pair.linkedInAccountId),\n                                    lead: {\n                                        ...pair.lead.details,\n                                        customUserFields: pair.lead.details.customUserFields?.field || []\n                                    }\n                                }))}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Retrieve a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/GetById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Leads",
          "value": "getLeads",
          "action": "Retrieve leads from campaign",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetLeadsFromCampaign",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "timeTo": "={{$parameter[\"additionalFields\"][\"timeTo\"]}}",
                "timeFrom": "={{$parameter[\"additionalFields\"][\"timeFrom\"]}}",
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "timeFilter": "={{$parameter[\"additionalFields\"][\"timeFilter\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Retrieve all campaigns",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "statuses": "={{$parameter[\"additionalFields\"][\"statuses\"]}}",
                "accountIds": "={{$parameter[\"additionalFields\"][\"accountIds\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many For Lead",
          "value": "getCampaignsForLead",
          "action": "Retrieve campaigns for a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/campaign/GetCampaignsForLead",
              "body": {
                "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Pause",
          "value": "pause",
          "action": "Pause a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/Pause",
              "body": {},
              "method": "POST"
            }
          }
        },
        {
          "name": "Resume",
          "value": "resume",
          "action": "Resume a campaign",
          "routing": {
            "request": {
              "qs": {
                "campaignId": "={{$parameter[\"campaignId\"]}}"
              },
              "url": "/campaign/Resume",
              "body": {},
              "method": "POST"
            }
          }
        },
        {
          "name": "Stop Lead",
          "value": "stopLeadInCampaign",
          "action": "Stop a lead in campaign",
          "routing": {
            "request": {
              "url": "/campaign/StopLeadInCampaign",
              "body": {
                "leadUrl": "={{$parameter[\"leadUrl\"]}}",
                "campaignId": "={{$parameter[\"campaignId\"]}}",
                "leadMemberId": "={{$parameter[\"leadMemberId\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOverallStats",
      "options": [
        {
          "name": "Get Overall",
          "value": "getOverallStats",
          "action": "Retrieve overall statistics",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/stats/GetOverallStats",
              "body": {
                "endDate": "={{$parameter[\"additionalFields\"][\"endDate\"]}}",
                "startDate": "={{$parameter[\"additionalFields\"][\"startDate\"]}}",
                "accountIds": "={{$parameter[\"accountIds\"]}}",
                "campaignIds": "={{$parameter[\"campaignIds\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stats"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createWebhook",
      "options": [
        {
          "name": "Create",
          "value": "createWebhook",
          "action": "Create a new webhook",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/webhooks/CreateWebhook",
              "body": {
                "eventType": "={{$parameter[\"eventType\"]}}",
                "webhookUrl": "={{$parameter[\"webhookUrl\"]}}",
                "campaignIds": "={{ $parameter[\"campaignIds\"] ?? [] }}",
                "webhookName": "={{$parameter[\"webhookName\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "deleteWebhook",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/DeleteWebhook",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "getWebhookById",
          "action": "Retrieve a single webhook",
          "routing": {
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/GetWebhookById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAllWebhooks",
          "action": "Retrieve all webhooks",
          "routing": {
            "request": {
              "url": "/webhooks/GetAllWebhooks",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Update",
          "value": "updateWebhook",
          "action": "Update an existing webhook",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "qs": {
                "webhookId": "={{$parameter[\"webhookId\"]}}"
              },
              "url": "/webhooks/UpdateWebhook",
              "body": {
                "isActive": "={{$parameter[\"additionalFields\"][\"isActive\"]}}",
                "eventType": "={{$parameter[\"additionalFields\"][\"eventType\"]}}",
                "webhookUrl": "={{$parameter[\"additionalFields\"][\"webhookUrl\"]}}",
                "campaignIds": "={{ ($parameter[\"additionalFields\"]?.[\"eventType\"] === \"EVERY_MESSAGE_REPLY_RECEIVED\" || $parameter[\"additionalFields\"]?.[\"eventType\"] === \"LEAD_TAG_UPDATED\") ? [] : $parameter[\"additionalFields\"]?.[\"campaignIds\"] ?? null }}",
                "webhookName": "={{$parameter[\"additionalFields\"][\"webhookName\"]}}"
              },
              "method": "PATCH"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMyNetworkForSender",
      "options": [
        {
          "name": "Get",
          "value": "getMyNetworkForSender",
          "action": "Retrieve list of network connections for a sender account",
          "routing": {
            "request": {
              "url": "/MyNetwork/GetMyNetworkForSender",
              "body": {
                "pageSize": "={{$parameter[\"pageSize\"]}}",
                "senderId": "={{$parameter[\"senderId\"]}}",
                "pageNumber": "={{$parameter[\"pageNumber\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "myNetwork"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getListById",
      "options": [
        {
          "name": "Add Leads",
          "value": "addLeadsToList",
          "action": "Add leads to a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/AddLeadsToList",
              "body": {
                "leads": "={{$parameter[\"wrapperLeads\"][\"leads\"].map(lead => ({\n                                ...lead,\n                                customUserFields: lead.customUserFields?.field || []\n                            }))}}",
                "listId": "={{$parameter[\"listId\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Create Empty",
          "value": "createEmptyList",
          "action": "Create an empty list",
          "routing": {
            "request": {
              "url": "/list/CreateEmptyList",
              "body": {
                "name": "={{$parameter[\"listName\"]}}",
                "type": "={{$parameter[\"listType\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete Leads (By LinkedIn ID)",
          "value": "deleteLeadsFromList",
          "action": "Delete leads from a list by LinkedIn ID",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/DeleteLeadsFromList",
              "body": {
                "listId": "={{$parameter[\"listId\"]}}",
                "leadMemberIds": "={{$parameter[\"leadMemberIds\"]}}"
              },
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Delete Leads (By Profile URL)",
          "value": "deleteLeadsFromListByProfileUrl",
          "action": "Delete leads from a list by LinkedIn profile URL",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/DeleteLeadsFromListByProfileUrl",
              "body": {
                "listId": "={{$parameter[\"listId\"]}}",
                "profileUrls": "={{$parameter[\"leadProfileUrls\"]}}"
              },
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "getListById",
          "action": "Retrieve a list",
          "routing": {
            "request": {
              "qs": {
                "listId": "={{$parameter[\"listId\"]}}"
              },
              "url": "/list/GetById",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Companies",
          "value": "getCompaniesFromList",
          "action": "Retrieve companies from a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetCompaniesFromList",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "listId": "={{$parameter[\"listId\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Leads",
          "value": "getLeadsFromList",
          "action": "Retrieve leads from a list",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetLeadsFromList",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "listId": "={{$parameter[\"listId\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "createdTo": "={{$parameter[\"additionalFields\"][\"createdTo\"]}}",
                "createdFrom": "={{$parameter[\"additionalFields\"][\"createdFrom\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Lists",
          "value": "getListsForLead",
          "action": "Retrieve lists associated with a specific lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetListsForLead",
              "body": {
                "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
                "profileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAllLists",
          "action": "Retrieve all lists",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/list/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
                "listType": "={{$parameter[\"additionalFields\"][\"listType\"]}}",
                "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "list"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getConversationsV2",
      "options": [
        {
          "name": "Get Many",
          "value": "getConversationsV2",
          "action": "Retrieve all LinkedIn conversations",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/inbox/GetConversations",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "filters": {
                  "seen": "={{$parameter[\"additionalFields\"][\"seen\"]}}",
                  "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}",
                  "searchString": "={{$parameter[\"additionalFields\"][\"searchString\"]}}",
                  "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                  "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}",
                  "linkedInAccountIds": "={{$parameter[\"additionalFields\"][\"linkedInAccountIds\"]}}"
                }
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Chatroom",
          "value": "getChatroom",
          "action": "Retrieve a specific LinkedIn conversation and messages",
          "routing": {
            "request": {
              "url": "=/inbox/GetChatroom/{{$parameter[\"accountId\"]}}/{{$parameter[\"conversationId\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message to a LinkedIn conversation",
          "routing": {
            "request": {
              "url": "/inbox/SendMessage",
              "body": {
                "message": "={{$parameter[\"message\"]}}",
                "subject": "={{$parameter[\"subject\"]}}",
                "conversationId": "={{$parameter[\"conversationId\"]}}",
                "linkedInAccountId": "={{$parameter[\"linkedInAccountId\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllLinkedInAccounts",
      "options": [
        {
          "name": "Get Many",
          "value": "getAllLinkedInAccounts",
          "action": "Retrieve a list of LinkedIn accounts",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/li_account/GetAll",
              "body": {
                "limit": "={{$parameter[\"limit\"]}}",
                "offset": "={{$parameter[\"offset\"]}}",
                "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "getLinkedInAccountById",
          "action": "Retrieve a LinkedIn account",
          "routing": {
            "request": {
              "qs": {
                "accountId": "={{$parameter[\"accountId\"]}}"
              },
              "url": "/li_account/GetById",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedInAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLead",
      "options": [
        {
          "name": "Get",
          "value": "getLead",
          "action": "Retrieve the details of a specific lead",
          "routing": {
            "request": {
              "url": "/lead/GetLead",
              "body": {
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Tags",
          "value": "addTagsToLead",
          "action": "Add tags to a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/lead/AddTags",
              "body": {
                "tags": "={{$parameter[\"tags\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
                "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Get Tags",
          "value": "getTagsForLead",
          "action": "Retrieve all tags for a lead",
          "routing": {
            "request": {
              "url": "/lead/GetTags",
              "body": {
                "profileUrl": "={{$parameter[\"profileUrl\"]}}"
              },
              "method": "POST"
            }
          }
        },
        {
          "name": "Replace Tags",
          "value": "replaceTags",
          "action": "Replace all existing tags for a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/lead/ReplaceTags",
              "body": {
                "tags": "={{$parameter[\"tags\"]}}",
                "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
                "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
                "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
              },
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Leads",
      "value": "addLeads",
      "action": "Add leads to campaign",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/AddLeadsToCampaign",
          "body": {
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "accountLeadPairs": "={{$parameter[\"accountLeadPairs\"].pair.map(pair => ({\n                                    linkedInAccountId: parseInt(pair.linkedInAccountId),\n                                    lead: {\n                                        ...pair.lead.details,\n                                        customUserFields: pair.lead.details.customUserFields?.field || []\n                                    }\n                                }))}}"
          },
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Retrieve a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/GetById",
          "method": "GET"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Get Leads",
      "value": "getLeads",
      "action": "Retrieve leads from campaign",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetLeadsFromCampaign",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "timeTo": "={{$parameter[\"additionalFields\"][\"timeTo\"]}}",
            "timeFrom": "={{$parameter[\"additionalFields\"][\"timeFrom\"]}}",
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "timeFilter": "={{$parameter[\"additionalFields\"][\"timeFilter\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Retrieve all campaigns",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "statuses": "={{$parameter[\"additionalFields\"][\"statuses\"]}}",
            "accountIds": "={{$parameter[\"additionalFields\"][\"accountIds\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Get Many For Lead",
      "value": "getCampaignsForLead",
      "action": "Retrieve campaigns for a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/campaign/GetCampaignsForLead",
          "body": {
            "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Pause",
      "value": "pause",
      "action": "Pause a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/Pause",
          "body": {},
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Resume",
      "value": "resume",
      "action": "Resume a campaign",
      "routing": {
        "request": {
          "qs": {
            "campaignId": "={{$parameter[\"campaignId\"]}}"
          },
          "url": "/campaign/Resume",
          "body": {},
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Stop Lead",
      "value": "stopLeadInCampaign",
      "action": "Stop a lead in campaign",
      "routing": {
        "request": {
          "url": "/campaign/StopLeadInCampaign",
          "body": {
            "leadUrl": "={{$parameter[\"leadUrl\"]}}",
            "campaignId": "={{$parameter[\"campaignId\"]}}",
            "leadMemberId": "={{$parameter[\"leadMemberId\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "campaign"
    },
    {
      "name": "Get Overall",
      "value": "getOverallStats",
      "action": "Retrieve overall statistics",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/stats/GetOverallStats",
          "body": {
            "endDate": "={{$parameter[\"additionalFields\"][\"endDate\"]}}",
            "startDate": "={{$parameter[\"additionalFields\"][\"startDate\"]}}",
            "accountIds": "={{$parameter[\"accountIds\"]}}",
            "campaignIds": "={{$parameter[\"campaignIds\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "stats"
    },
    {
      "name": "Create",
      "value": "createWebhook",
      "action": "Create a new webhook",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/webhooks/CreateWebhook",
          "body": {
            "eventType": "={{$parameter[\"eventType\"]}}",
            "webhookUrl": "={{$parameter[\"webhookUrl\"]}}",
            "campaignIds": "={{ $parameter[\"campaignIds\"] ?? [] }}",
            "webhookName": "={{$parameter[\"webhookName\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "deleteWebhook",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/DeleteWebhook",
          "method": "DELETE"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "getWebhookById",
      "action": "Retrieve a single webhook",
      "routing": {
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/GetWebhookById",
          "method": "GET"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Get Many",
      "value": "getAllWebhooks",
      "action": "Retrieve all webhooks",
      "routing": {
        "request": {
          "url": "/webhooks/GetAllWebhooks",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "updateWebhook",
      "action": "Update an existing webhook",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "qs": {
            "webhookId": "={{$parameter[\"webhookId\"]}}"
          },
          "url": "/webhooks/UpdateWebhook",
          "body": {
            "isActive": "={{$parameter[\"additionalFields\"][\"isActive\"]}}",
            "eventType": "={{$parameter[\"additionalFields\"][\"eventType\"]}}",
            "webhookUrl": "={{$parameter[\"additionalFields\"][\"webhookUrl\"]}}",
            "campaignIds": "={{ ($parameter[\"additionalFields\"]?.[\"eventType\"] === \"EVERY_MESSAGE_REPLY_RECEIVED\" || $parameter[\"additionalFields\"]?.[\"eventType\"] === \"LEAD_TAG_UPDATED\") ? [] : $parameter[\"additionalFields\"]?.[\"campaignIds\"] ?? null }}",
            "webhookName": "={{$parameter[\"additionalFields\"][\"webhookName\"]}}"
          },
          "method": "PATCH"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "getMyNetworkForSender",
      "action": "Retrieve list of network connections for a sender account",
      "routing": {
        "request": {
          "url": "/MyNetwork/GetMyNetworkForSender",
          "body": {
            "pageSize": "={{$parameter[\"pageSize\"]}}",
            "senderId": "={{$parameter[\"senderId\"]}}",
            "pageNumber": "={{$parameter[\"pageNumber\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "myNetwork"
    },
    {
      "name": "Add Leads",
      "value": "addLeadsToList",
      "action": "Add leads to a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/AddLeadsToList",
          "body": {
            "leads": "={{$parameter[\"wrapperLeads\"][\"leads\"].map(lead => ({\n                                ...lead,\n                                customUserFields: lead.customUserFields?.field || []\n                            }))}}",
            "listId": "={{$parameter[\"listId\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Create Empty",
      "value": "createEmptyList",
      "action": "Create an empty list",
      "routing": {
        "request": {
          "url": "/list/CreateEmptyList",
          "body": {
            "name": "={{$parameter[\"listName\"]}}",
            "type": "={{$parameter[\"listType\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Delete Leads (By LinkedIn ID)",
      "value": "deleteLeadsFromList",
      "action": "Delete leads from a list by LinkedIn ID",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/DeleteLeadsFromList",
          "body": {
            "listId": "={{$parameter[\"listId\"]}}",
            "leadMemberIds": "={{$parameter[\"leadMemberIds\"]}}"
          },
          "method": "DELETE"
        }
      },
      "resource": "list"
    },
    {
      "name": "Delete Leads (By Profile URL)",
      "value": "deleteLeadsFromListByProfileUrl",
      "action": "Delete leads from a list by LinkedIn profile URL",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/DeleteLeadsFromListByProfileUrl",
          "body": {
            "listId": "={{$parameter[\"listId\"]}}",
            "profileUrls": "={{$parameter[\"leadProfileUrls\"]}}"
          },
          "method": "DELETE"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get",
      "value": "getListById",
      "action": "Retrieve a list",
      "routing": {
        "request": {
          "qs": {
            "listId": "={{$parameter[\"listId\"]}}"
          },
          "url": "/list/GetById",
          "method": "GET"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get Companies",
      "value": "getCompaniesFromList",
      "action": "Retrieve companies from a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetCompaniesFromList",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "listId": "={{$parameter[\"listId\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get Leads",
      "value": "getLeadsFromList",
      "action": "Retrieve leads from a list",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetLeadsFromList",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "listId": "={{$parameter[\"listId\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "createdTo": "={{$parameter[\"additionalFields\"][\"createdTo\"]}}",
            "createdFrom": "={{$parameter[\"additionalFields\"][\"createdFrom\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get Lists",
      "value": "getListsForLead",
      "action": "Retrieve lists associated with a specific lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetListsForLead",
          "body": {
            "email": "={{$parameter[\"additionalFields\"][\"email\"]}}",
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "linkedinId": "={{$parameter[\"additionalFields\"][\"linkedinId\"]}}",
            "profileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get Many",
      "value": "getAllLists",
      "action": "Retrieve all lists",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/list/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}",
            "listType": "={{$parameter[\"additionalFields\"][\"listType\"]}}",
            "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "list"
    },
    {
      "name": "Get Many",
      "value": "getConversationsV2",
      "action": "Retrieve all LinkedIn conversations",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/inbox/GetConversations",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "filters": {
              "seen": "={{$parameter[\"additionalFields\"][\"seen\"]}}",
              "campaignIds": "={{$parameter[\"additionalFields\"][\"campaignIds\"]}}",
              "searchString": "={{$parameter[\"additionalFields\"][\"searchString\"]}}",
              "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
              "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"leadProfileUrl\"]}}",
              "linkedInAccountIds": "={{$parameter[\"additionalFields\"][\"linkedInAccountIds\"]}}"
            }
          },
          "method": "POST"
        }
      },
      "resource": "inbox"
    },
    {
      "name": "Get Chatroom",
      "value": "getChatroom",
      "action": "Retrieve a specific LinkedIn conversation and messages",
      "routing": {
        "request": {
          "url": "=/inbox/GetChatroom/{{$parameter[\"accountId\"]}}/{{$parameter[\"conversationId\"]}}",
          "method": "GET"
        }
      },
      "resource": "inbox"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message to a LinkedIn conversation",
      "routing": {
        "request": {
          "url": "/inbox/SendMessage",
          "body": {
            "message": "={{$parameter[\"message\"]}}",
            "subject": "={{$parameter[\"subject\"]}}",
            "conversationId": "={{$parameter[\"conversationId\"]}}",
            "linkedInAccountId": "={{$parameter[\"linkedInAccountId\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "inbox"
    },
    {
      "name": "Get Many",
      "value": "getAllLinkedInAccounts",
      "action": "Retrieve a list of LinkedIn accounts",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/li_account/GetAll",
          "body": {
            "limit": "={{$parameter[\"limit\"]}}",
            "offset": "={{$parameter[\"offset\"]}}",
            "keyword": "={{$parameter[\"additionalFields\"][\"keyword\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "linkedInAccount"
    },
    {
      "name": "Get",
      "value": "getLinkedInAccountById",
      "action": "Retrieve a LinkedIn account",
      "routing": {
        "request": {
          "qs": {
            "accountId": "={{$parameter[\"accountId\"]}}"
          },
          "url": "/li_account/GetById",
          "method": "GET"
        }
      },
      "resource": "linkedInAccount"
    },
    {
      "name": "Get",
      "value": "getLead",
      "action": "Retrieve the details of a specific lead",
      "routing": {
        "request": {
          "url": "/lead/GetLead",
          "body": {
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "lead"
    },
    {
      "name": "Add Tags",
      "value": "addTagsToLead",
      "action": "Add tags to a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/lead/AddTags",
          "body": {
            "tags": "={{$parameter[\"tags\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
            "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "lead"
    },
    {
      "name": "Get Tags",
      "value": "getTagsForLead",
      "action": "Retrieve all tags for a lead",
      "routing": {
        "request": {
          "url": "/lead/GetTags",
          "body": {
            "profileUrl": "={{$parameter[\"profileUrl\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "lead"
    },
    {
      "name": "Replace Tags",
      "value": "replaceTags",
      "action": "Replace all existing tags for a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/lead/ReplaceTags",
          "body": {
            "tags": "={{$parameter[\"tags\"]}}",
            "leadLinkedInId": "={{$parameter[\"additionalFields\"][\"leadLinkedInId\"]}}",
            "leadProfileUrl": "={{$parameter[\"additionalFields\"][\"profileUrl\"]}}",
            "createTagIfNotExisting": "={{$parameter[\"createTagIfNotExisting\"]}}"
          },
          "method": "POST"
        }
      },
      "resource": "lead"
    }
  ]

npm_readme:
  #  n8n-nodes-heyreach
  This is a **HeyReach** Community Node for n8n, enabling seamless integration with **HeyReach** in your workflows.  
  **HeyReach** is a powerful LinkedIn automation platform designed to help you scale and optimize your outreach campaigns.  
  This project make it easy to manage LinkedIn campaigns and automate your outreach directly from your workflows.

  [License](#license)  
  [Installation](#installation)  
  [Available Operations](#available-operations)  
  [Credentials](#credentials)  
  [Resources](#resources)  
  [Folder Structure](#folder-structure)

  ## License
  This project is licensed under the **MIT License**. See the [LICENSE](LICENSE.md) file for details.

  ## Installation
  ### Community Nodes (Recommended)
  1. Navigate to **n8n** and sign in.
  2. Go to Settings > Community Nodes
  3. Click Install
  4. Enter `n8n-nodes-heyreach` and click Download
  5. Restart your n8n instance
  6. The HeyReach node will appear in your node palette
  --- 

  ### Local Setup 
  1. Clone the repository.
  2. Run `npm install` to install dependencies.
  3. Before running locally make sure `baseURL` which can be found in `HeyReach.node.ts` is set to dev or staging endpoints.
  4. Run `npm run build` each time you have change or the for the very first time.
  5. Reference the official [n8n documentation](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for running and testing custom nodes locally

  ## Credentials
  Steps to obtain **API KEY** needed for authentication.
  1. Go to **[HeyReach app](https://app.heyreach.io/)** and sign in.
  2. Navigate to the **Integrations** section.
  3. Find the **n8n** card and click **Connect Now**.
  4. Click **New API Key** to generate an API key.
  5. **Copy** the generated API key.
  6. In **n8n**, create a new **HeyReach connection**.
  7. **Paste** the API key into the connection settings and save it.  

  ✅ That’s it — your HeyReach account is now connected to n8n! 🎉

  ## Available Operations

  ### 🔧 Campaign Management

  - **Retrieve all campaigns** – Get a list of all campaigns.
  - **Retrieve a campaign** – Get details of a specific campaign.
  - **Resume a campaign** – Resume a paused campaign.
  - **Pause a campaign** – Pause an active campaign.
  - **Stop a lead in campaign** – Stop a specific lead within a campaign.
  - **Add leads to campaign** – Add one or multiple leads to a campaign.
  - **Retrieve leads from campaign** – Get leads from a campaign.
  - **Retrieve campaigns for a lead** – Find all campaigns that a specific lead belongs to.
  ---

  ### 💬 Inbox

  - **Retrieve all LinkedIn conversations** - Get a list of all LinkedIn conversations.
  - **Retrieve a specific LinkedIn conversation and messages** - Retrieve details of a particular LinkedIn conversation along with all associated messages.
  - **Send a message to a LinkedIn conversation** - Send a new message to a specific LinkedIn conversation.
  ---

  ### 🧑‍💼 Lead

  - **Retrieve the details of a specific lead** - Get detailed information about a specific lead.
  - **Add tags to a lead** - Add one or more tags to a lead to help categorize or filter.
  - **Retrieve all tags for a lead** - Retrieve all tags associated with a specific lead.
  - **Replace all existing tags for a lead** - Replace the current tags on a lead with a new set of tags.
  ---

  ### 🔗 LinkedIn Account Actions

  - **Retrieve a list of LinkedIn accounts** - Get all LinkedIn accounts connected to the system.
  - **Retrieve a LinkedIn account** - Get details of a specific LinkedIn account.
  ---

  ### 📋 List Actions

  - **Retrieve a list** - Get a specific list of leads.
  - **Retrieve all lists** - Get all available lead lists.
  - **Retrieve leads from a list** - Get all leads within a specific list.
  - **Delete leads from a list by LinkedIn ID** - Remove one or more leads from a list using their LinkedIn IDs.
  - **Delete leads from a list by LinkedIn profile URL** - Remove leads from a list using their LinkedIn profile URLs.
  - **Retrieve companies from a list** - Get all associated companies from a specific list.
  - **Add leads to a list** - Add one or more leads to a given list.
  - **Retrieve lists associated with a specific lead** - Get all lists that include a specific lead.
  - **Create an empty list** - Create a new list with no leads.
  ---

  ### 🌐 My Network Actions

  - **Retrieve list of network connections for a sender account** - Get all network connections associated with a given sender LinkedIn account.

  ---

  ### 📊 Stats Actions

  - **Retrieve overall statistics** - Get general statistics across the system, such as lead or campaign performance.

  ---

  ### 🪝 Webhook Actions

  - **Retrieve all webhooks** - Get a list of all configured webhooks.
  - **Retrieve a single webhook** - Get the details of a specific webhook.

  ## Resources

    [HeyReach API documentation](https://documenter.getpostman.com/view/23808049/2sA2xb5F75#61f5ef5d-5f31-4da9-b6af-ef0a6f128146)    

  ## Folder Structure

  - `nodes/HeyReach/operations/` – Contains folders based on the available features.  
    - Each feature has its own folder.
    - `operations` files specify the category of the endpoints and request params for each API call.
    - `fields` files describe the fields required for each request.
  - The starting point for the integration is `HeyReach.node.ts`.  
    - Any new operations should be registered in this file.

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the HeyReach LinkedIn automation platform to manage outreach campaigns, handle conversations, and organize leads directly within n8n workflows.","capabilities":["Retrieve and manage LinkedIn campaigns (list, get details, pause, resume, stop)","Add, retrieve, and remove leads from campaigns","Manage LinkedIn conversations (list, retrieve messages, send messages)","Organize leads into lists (create, add, remove, retrieve)","Tag and categorize leads","Retrieve LinkedIn account details and network connections","Retrieve system statistics and webhook configurations","Retrieve lead details and associated companies"],"authentication":"API Key required (obtained from HeyReach app Integrations section)","commonUseCases":["Automating LinkedIn outreach campaigns from n8n","Managing lead lists and tagging for segmentation","Handling LinkedIn conversations and messaging","Retrieving campaign performance statistics"],"limitations":["Requires manual installation via n8n Community Nodes or local repository setup","Local development requires manual configuration of baseURL to dev or staging endpoints","Community node status may imply less official support compared to official n8n nodes"],"relatedNodes":["HTTP Request","Webhook","Code"]}


node_type: @datafix/n8n-nodes-anthias.anthias
package_name: @datafix/n8n-nodes-anthias
display_name: Anthias
description: Node for controlling Anthias deployments with the Anthias API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: bramknuever
author_github_url: https://github.com/DataFix-B-V/n8n-nodes-anthias.git
npm_package_name: @datafix/n8n-nodes-anthias
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:33.260Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "asset",
      "options": [
        {
          "name": "Asset",
          "value": "asset"
        },
        {
          "name": "Device",
          "value": "device"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllAssets",
      "options": [
        {
          "name": "Control Asset Playback",
          "value": "controlAssetPlayback",
          "action": "Control asset playback"
        },
        {
          "name": "Create Asset",
          "value": "createAsset",
          "action": "Create an asset"
        },
        {
          "name": "Delete Asset",
          "value": "deleteAsset",
          "action": "Delete an asset"
        },
        {
          "name": "Get All Assets",
          "value": "getAllAssets",
          "action": "Get all assets"
        },
        {
          "name": "Get Asset",
          "value": "getAsset",
          "action": "Get an asset"
        },
        {
          "name": "Get Asset Content",
          "value": "getAssetContent",
          "action": "Get asset content"
        },
        {
          "name": "Update Asset",
          "value": "updateAsset",
          "action": "Update an asset"
        },
        {
          "name": "Update Playlist Order",
          "value": "updatePlaylistOrder",
          "action": "Update playlist order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "asset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDeviceSettings",
      "options": [
        {
          "name": "Get Device Settings",
          "value": "getDeviceSettings",
          "action": "Get device settings"
        },
        {
          "name": "Get Integrations Information",
          "value": "getIntegrationsInformation",
          "action": "Get integrations information"
        },
        {
          "name": "Get System Information",
          "value": "getSystemInfo",
          "action": "Get system information"
        },
        {
          "name": "Reboot Device",
          "value": "rebootDevice",
          "action": "Reboot device"
        },
        {
          "name": "Shutdown Device",
          "value": "shutdownDevice",
          "action": "Shutdown device"
        },
        {
          "name": "Update Device Settings",
          "value": "updateDeviceSettings",
          "action": "Update device settings"
        }
      ],
      "displayName": "Operation",
      "placeholder": "Select operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Control Asset Playback",
      "value": "controlAssetPlayback",
      "action": "Control asset playback",
      "resource": "asset"
    },
    {
      "name": "Create Asset",
      "value": "createAsset",
      "action": "Create an asset",
      "resource": "asset"
    },
    {
      "name": "Delete Asset",
      "value": "deleteAsset",
      "action": "Delete an asset",
      "resource": "asset"
    },
    {
      "name": "Get All Assets",
      "value": "getAllAssets",
      "action": "Get all assets",
      "resource": "asset"
    },
    {
      "name": "Get Asset",
      "value": "getAsset",
      "action": "Get an asset",
      "resource": "asset"
    },
    {
      "name": "Get Asset Content",
      "value": "getAssetContent",
      "action": "Get asset content",
      "resource": "asset"
    },
    {
      "name": "Update Asset",
      "value": "updateAsset",
      "action": "Update an asset",
      "resource": "asset"
    },
    {
      "name": "Update Playlist Order",
      "value": "updatePlaylistOrder",
      "action": "Update playlist order",
      "resource": "asset"
    },
    {
      "name": "Get Device Settings",
      "value": "getDeviceSettings",
      "action": "Get device settings",
      "resource": "device"
    },
    {
      "name": "Get Integrations Information",
      "value": "getIntegrationsInformation",
      "action": "Get integrations information",
      "resource": "device"
    },
    {
      "name": "Get System Information",
      "value": "getSystemInfo",
      "action": "Get system information",
      "resource": "device"
    },
    {
      "name": "Reboot Device",
      "value": "rebootDevice",
      "action": "Reboot device",
      "resource": "device"
    },
    {
      "name": "Shutdown Device",
      "value": "shutdownDevice",
      "action": "Shutdown device",
      "resource": "device"
    },
    {
      "name": "Update Device Settings",
      "value": "updateDeviceSettings",
      "action": "Update device settings",
      "resource": "device"
    }
  ]

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

  # n8n-nodes-anthias

  This is a custom node for n8n, a powerful workflow automation tool. It provides a simple way to connect your n8n workflows with the Anthias, a digital signage platform. By using this node, you can automate tasks related to your digital displays, content management, and player controls.

  ## What can you do with this node?
  The n8n-nodes-anthias node acts as a bridge between n8n and the Anthias API. It includes features like:

  - Retrieve information about your screens and players.
  - Update content on a display.
  - Change the schedule for a screen.
  - Trigger actions on a player, such as a reboot or a content refresh.

  ## Developer
  ![logo](https://github.com/datafix-b-v/n8n-nodes-anthias/blob/master/images/logoDataFix.png)

  This node was created by [DataFix B.V.](https://datafix.nl), a n8n expert partner from the Netherlands.

  DataFix supports companies with their implementation of n8n, including node development. If you want to use our services, feel free to reach out. You can contact us through our [site](https://datafix.nl) or by emailing hi@datafix.nl

  ## More information

  Refer to the [documentation on installing nodes](https://docs.n8n.io/integrations/community-nodes/installation/) for detailed information on installing custom nodes.

  Refer to the [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":"This n8n node enables automation of Anthias digital signage deployments by connecting n8n workflows to the Anthias API for managing screens, players, and content.","capabilities":["Retrieve screen and player information","Update content on displays","Modify screen schedules","Trigger player actions (reboot, content refresh)"],"authentication":"API key required (implied by 'Anthias API' reference, specific method not detailed in README)","commonUseCases":["Automating digital signage content updates","Managing player reboots via workflow triggers","Scheduling display content changes"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-blue.blue
package_name: n8n-nodes-blue
display_name: Blue
description: Interact with Blue Project Management via GraphQL API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: bluetogether
author_github_url: https://github.com/datadoesntlie/
npm_package_name: n8n-nodes-blue
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.260Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getCompanies",
      "options": [
        {
          "name": "Create Project",
          "value": "createProject",
          "action": "Create a new project from a template",
          "description": "Create a new project from a template"
        },
        {
          "name": "Create Record",
          "value": "createRecord",
          "action": "Create a new record todo task with custom fields",
          "description": "Create a new record (todo/task) with custom fields"
        },
        {
          "name": "Execute Custom GraphQL",
          "value": "customQuery",
          "action": "Execute a custom graph ql query",
          "description": "Execute a custom GraphQL query"
        },
        {
          "name": "Get Records",
          "value": "getRecords",
          "action": "Get records with advanced filtering",
          "description": "Retrieve records (todos/tasks) with advanced filtering"
        },
        {
          "name": "Invite User",
          "value": "inviteUser",
          "action": "Invite a user to a project",
          "description": "Invite User to a Project"
        },
        {
          "name": "List Companies",
          "value": "getCompanies",
          "action": "List all companies you have access to",
          "description": "List all companies you have access to"
        },
        {
          "name": "List Custom Fields",
          "value": "listCustomFields",
          "action": "List custom fields in a project with detailed information",
          "description": "List custom fields in a project with detailed information"
        },
        {
          "name": "List Projects",
          "value": "getProjects",
          "action": "List projects from a company",
          "description": "Retrieve projects from a company"
        },
        {
          "name": "Tag Record",
          "value": "tagRecord",
          "action": "Add tags to a record todo task",
          "description": "Add tags to a record (todo/task)"
        },
        {
          "name": "Update Record",
          "value": "updateRecord",
          "action": "Update a record todo task with custom fields",
          "description": "Update a record (todo/task) with custom fields"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Project",
      "value": "createProject",
      "action": "Create a new project from a template",
      "description": "Create a new project from a template"
    },
    {
      "name": "Create Record",
      "value": "createRecord",
      "action": "Create a new record todo task with custom fields",
      "description": "Create a new record (todo/task) with custom fields"
    },
    {
      "name": "Execute Custom GraphQL",
      "value": "customQuery",
      "action": "Execute a custom graph ql query",
      "description": "Execute a custom GraphQL query"
    },
    {
      "name": "Get Records",
      "value": "getRecords",
      "action": "Get records with advanced filtering",
      "description": "Retrieve records (todos/tasks) with advanced filtering"
    },
    {
      "name": "Invite User",
      "value": "inviteUser",
      "action": "Invite a user to a project",
      "description": "Invite User to a Project"
    },
    {
      "name": "List Companies",
      "value": "getCompanies",
      "action": "List all companies you have access to",
      "description": "List all companies you have access to"
    },
    {
      "name": "List Custom Fields",
      "value": "listCustomFields",
      "action": "List custom fields in a project with detailed information",
      "description": "List custom fields in a project with detailed information"
    },
    {
      "name": "List Projects",
      "value": "getProjects",
      "action": "List projects from a company",
      "description": "Retrieve projects from a company"
    },
    {
      "name": "Tag Record",
      "value": "tagRecord",
      "action": "Add tags to a record todo task",
      "description": "Add tags to a record (todo/task)"
    },
    {
      "name": "Update Record",
      "value": "updateRecord",
      "action": "Update a record todo task with custom fields",
      "description": "Update a record (todo/task) with custom fields"
    }
  ]

npm_readme:
  # n8n-nodes-blue

  This is an n8n community node. It lets you use Blue Project Management in your n8n workflows.

  Blue Project Management is a modern project management platform that provides powerful GraphQL APIs for managing projects, tasks, teams, and workflows.

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

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

  ## 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:

  ### Companies
  - **Get Companies** - List all companies you have access to

  ### Projects  
  - **Get Projects** - List all projects within a specific company

  ### Records (Tasks/Todos)
  - **Get Records** - Retrieve tasks/todos with advanced filtering (by project, search terms, completion status)
  - **Create Record** - Create new tasks/todos with support for assignees, tags, custom fields, and checklists
  - **Update Record** - Update existing records including core fields and custom field values

  ### Advanced
  - **Custom Query** - Execute custom GraphQL queries against the Blue API for advanced use cases

  ## Credentials

  ### Getting Blue API Credentials

  1. **Create Blue Account**
     - Sign up for a Blue Project Management account at [blue.cc](https://blue.cc)
     - Complete account verification and setup

  2. **Generate API Tokens**
     - Log into your Blue account
     - Navigate to Account Settings → API Settings
     - Generate a new API token pair:
       - **Token ID**: Your unique identifier (e.g., `abc123def456`)
       - **Token Secret**: Your authentication secret (keep this secure!)
     - Copy both values - you'll need them for n8n configuration

  3. **Note Your Company Access**
     - Ensure you have access to at least one company in Blue
     - API operations require company context
     - You can be a member of multiple companies

  ### Configuring in n8n

  1. **Add Blue API Credential**
     - In n8n, go to **Settings** → **Credentials**
     - Click **Add Credential** → Search for "Blue API"
     - Fill in the credential form:

  2. **Credential Configuration**
     ```
     Base URL: https://api.blue.cc/graphql (default - don't change)
     Token ID: [Your Blue API Token ID]
     Token Secret: [Your Blue API Token Secret]
     ```

  3. **Test Connection**
     - Click **Test** to verify your credentials
     - You should see a successful connection message
     - If test fails, double-check your Token ID and Secret

  4. **Save Credential**
     - Give your credential a descriptive name (e.g., "Blue Production API")
     - Click **Save**

  ### Authentication Flow

  The node automatically handles all authentication:
  - **Headers**: Adds `X-Bloo-Token-ID` and `X-Bloo-Token-Secret` to requests
  - **Company Context**: Passes `X-Bloo-Company-ID` based on your operation selections
  - **GraphQL Endpoint**: Routes all requests to Blue's GraphQL API at `https://api.blue.cc/graphql`

  ### Security Notes

  - **Keep Token Secret Secure**: Never share or commit your Token Secret
  - **Rotate Tokens**: Regularly regenerate tokens for security
  - **Company Access**: Tokens only work with companies you have access to
  - **Rate Limits**: Blue API has rate limiting - implement appropriate delays in high-volume workflows

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with**: n8n 1.x
  - **Node API version**: 1

  ## Usage

  ### Example Workflows

  #### Workflow 1: Task Management Dashboard
  Create a workflow that monitors and manages tasks across projects:

  1. **Trigger**: Schedule (runs every hour)
  2. **Blue - Get Companies**: Retrieve available companies
  3. **Loop**: For each company:
     - **Blue - Get Projects**: Get all projects for the company
     - **Blue - Get Records**: Fetch incomplete tasks with search filter
     - **Filter**: Identify overdue tasks
     - **Send Email**: Notify project managers of overdue items

  #### Workflow 2: Automated Task Creation
  Set up task creation from external sources:

  1. **Trigger**: Webhook (from form submission/external system)
  2. **Blue - Get Companies**: Select target company
  3. **Blue - Get Projects**: Find appropriate project by name
  4. **Blue - Create Record**: Create new task with:
     - Title and description from webhook data
     - Assignees based on project team
     - Custom fields populated from form data
     - Tags for categorization

  #### Workflow 3: Weekly Project Reports
  Generate automated project status reports:

  1. **Trigger**: Schedule (weekly)
  2. **Blue - Get Companies**: Get all companies
  3. **Loop**: For each company:
     - **Blue - Get Projects**: Retrieve active projects
     - **Blue - Get Records**: Get tasks with completion filter
     - **Calculate**: Progress metrics (completed vs total tasks)
     - **Format**: Create summary report
     - **Send to Slack/Email**: Distribute reports to stakeholders

  #### Workflow 4: Custom Data Integration
  Sync data between Blue and other systems:

  1. **External API**: Fetch data from CRM/ERP system
  2. **Transform**: Map external data to Blue format
  3. **Blue - Custom Query**: Execute complex GraphQL query to check for existing records
  4. **Conditional**: Create or update based on existence
  5. **Blue - Create/Update Record**: Sync the data with custom fields populated

  ### Quick Start Guide

  **Step 1: Set up Credentials**
  1. In n8n, go to Credentials → Add Credential → Blue API
  2. Enter your Blue API Token ID and Secret
  3. Test the connection

  **Step 2: Basic Flow**
  1. Add Blue node to your workflow
  2. Select "Get Companies" operation
  3. Execute to see available companies
  4. Copy a Company ID for next steps

  **Step 3: Explore Operations**
  - Use Company ID to get projects
  - Select a project to retrieve tasks
  - Create new tasks with the Create Record operation

  ### Advanced Features

  - **Custom Fields**: Both create and update operations support Blue's custom field system with dynamic field selection
  - **Multiselect Dropdowns**: Assignees and tags use dynamic dropdowns populated from your Blue data based on selected company/project
  - **GraphQL Power**: Use the Custom Query operation for complex data operations beyond standard CRUD
  - **Intelligent Filtering**: Records support rich filtering - combine project filtering with search terms for precise results
  - **Error Handling**: Comprehensive GraphQL error handling with detailed error messages and suggestions

  ### Operation Details

  #### Get Records Options
  - **Project Filter**: Limit results to specific project
  - **Search**: Find records containing specific text
  - **Show Completed**: Include/exclude completed tasks
  - **Pagination**: Control result size with limit/skip

  #### Create Record Features
  - **Rich Content**: Title, description, due dates
  - **Team Assignment**: Multi-select assignees from project team
  - **Categorization**: Apply multiple tags for organization
  - **Custom Fields**: Populate any custom fields defined in your Blue setup
  - **Checklists**: Add sub-tasks during creation

  #### Custom Query Power
  Execute any GraphQL query against Blue's API:
  ```graphql
  query GetProjectStats($projectId: ID!) {
    project(id: $projectId) {
      name
      todos {
        totalCount
      }
      todosCompleted: todos(completed: true) {
        totalCount
      }
    }
  }
  ```

  ### Tips & Best Practices

  - **Company Context**: Company ID is automatically passed as header for all operations after selection
  - **Performance**: Use pagination and filtering to limit large result sets
  - **Error Recovery**: Implement error handling for API rate limits and network issues
  - **Data Validation**: Validate required fields before creating/updating records
  - **Webhook Integration**: Use Blue's webhook system with n8n triggers for real-time automation

  ## Troubleshooting

  ### Common Issues

  #### Authentication Errors
  **Problem**: "Invalid credentials" or "Unauthorized" errors
  **Solutions**:
  - Verify Token ID and Secret are correct (copy-paste to avoid typos)
  - Check that tokens haven't expired or been revoked
  - Ensure you have access to at least one company in Blue
  - Test credentials using the credential test function

  #### Empty Company List
  **Problem**: "Get Companies" returns empty results
  **Solutions**:
  - Confirm your Blue account has company access
  - Check if you need to be invited to a company
  - Verify your account is active and verified

  #### Operation Failures
  **Problem**: Operations fail with GraphQL errors
  **Solutions**:
  - Check that Company ID is valid and you have access
  - Verify Project ID exists and is accessible
  - For custom queries, validate GraphQL syntax
  - Review Blue API documentation for field requirements

  #### Dropdown Loading Issues
  **Problem**: Assignees, Tags, or Custom Fields don't load
  **Solutions**:
  - Ensure Company and Project are selected first
  - Check that the project has users/tags/custom fields configured
  - Verify network connectivity to Blue API
  - Try refreshing the dropdown options

  #### Performance Issues
  **Problem**: Slow response times or timeouts
  **Solutions**:
  - Use pagination for large result sets (limit/skip parameters)
  - Add appropriate delays between API calls
  - Filter results to reduce data transfer
  - Check Blue API status for outages

  ### Getting Help

  - **Blue API Issues**: Refer to [Blue API Documentation](https://www.blue.cc/en/api/start-guide/introduction)
  - **n8n Node Issues**: Check [n8n Community](https://community.n8n.io/)
  - **Bug Reports**: Submit issues to the [GitHub repository](https://github.com/datadoesntlie/n8n-nodes-blue/issues)

  ### Debug Tips

  1. **Enable Detailed Logging**: Turn on n8n's detailed execution logging
  2. **Test Operations Individually**: Isolate failing operations
  3. **Verify Data**: Check that IDs and parameters are valid
  4. **GraphQL Debugging**: Use Blue's GraphQL playground for query testing
  5. **Network Issues**: Check firewall/proxy settings if requests fail

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Blue API Documentation](https://www.blue.cc/en/api/start-guide/introduction) - Official API guide and reference
  * [Blue GraphQL Schema](https://api.blue.cc/graphql) - Interactive GraphQL playground
  * [GitHub Repository](https://github.com/datadoesntlie/n8n-nodes-blue) - Source code and issue tracking

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with Blue Project Management via its GraphQL API to manage projects, tasks, teams, and workflows.","capabilities":["List all accessible companies","List projects within a specific company","Retrieve tasks/todos with advanced filtering","Create new tasks/todos with assignees, tags, custom fields, and checklists","Update existing tasks/todos including core fields and custom values","Execute custom GraphQL queries for advanced use cases"],"authentication":"API Token (Token ID and Token Secret)","commonUseCases":["Task management dashboards and monitoring","Automated task creation from external sources","Weekly project status reporting","Data synchronization between Blue and other systems (CRM/ERP)"],"limitations":["Requires valid Blue API credentials (Token ID and Secret)","API operations require company context and access","Subject to Blue API rate limits","Requires n8n version 1.0.0 or higher","Advanced features may be truncated in documentation"],"relatedNodes":["n8n-nodes-core.code","n8n-nodes-core.httpRequest","n8n-nodes-core.if"]}


node_type: @nvoip/n8n-nodes-nvoip.nvoip
package_name: @nvoip/n8n-nodes-nvoip
display_name: Nvoip
description: Make calls, send WhatsApp and SMS.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: lucasnaves
author_github_url: https://github.com/Nvoip/nvoip-n8n.git
npm_package_name: @nvoip/n8n-nodes-nvoip
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:33.262Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sms",
      "options": [
        {
          "name": "SMS",
          "value": "sms",
          "description": "SMS actions"
        },
        {
          "name": "WhatsApp",
          "value": "whatsapp",
          "description": "WhatsApp actions"
        },
        {
          "name": "Call",
          "value": "call",
          "description": "Call actions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "makeCall",
      "options": [
        {
          "name": "Make Call",
          "value": "makeCall",
          "action": "Make a phone call",
          "description": "Make an outbound call using Nvoip"
        },
        {
          "name": "Send Interactive Voice Broadcast",
          "value": "sendVoiceBlastInteractive",
          "action": "Send interactive voice broadcast",
          "description": "Send an automated voice message with the ability to receive DTMF input"
        },
        {
          "name": "Send Voice Broadcast",
          "value": "sendVoiceBlast",
          "action": "Send voice broadcast",
          "description": "Send an automated voice message delivered as audio file or TTS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendSms",
      "options": [
        {
          "name": "Send SMS",
          "value": "sendSms",
          "action": "Send SMS",
          "description": "Send a customized SMS message to a customer"
        },
        {
          "name": "Send SMS (Template)",
          "value": "sendTemplateSms",
          "action": "Send template SMS",
          "description": "Send an SMS using a predefined template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendWhatsapp",
      "options": [
        {
          "name": "Send WhatsApp (With HSM)",
          "value": "sendWhatsapp",
          "action": "Send whatsapp message",
          "description": "Send WhatsApp template messages using Nvoip for automated communication"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whatsapp"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Make Call",
      "value": "makeCall",
      "action": "Make a phone call",
      "description": "Make an outbound call using Nvoip",
      "resource": "call"
    },
    {
      "name": "Send Interactive Voice Broadcast",
      "value": "sendVoiceBlastInteractive",
      "action": "Send interactive voice broadcast",
      "description": "Send an automated voice message with the ability to receive DTMF input",
      "resource": "call"
    },
    {
      "name": "Send Voice Broadcast",
      "value": "sendVoiceBlast",
      "action": "Send voice broadcast",
      "description": "Send an automated voice message delivered as audio file or TTS",
      "resource": "call"
    },
    {
      "name": "Send SMS",
      "value": "sendSms",
      "action": "Send SMS",
      "description": "Send a customized SMS message to a customer",
      "resource": "sms"
    },
    {
      "name": "Send SMS (Template)",
      "value": "sendTemplateSms",
      "action": "Send template SMS",
      "description": "Send an SMS using a predefined template",
      "resource": "sms"
    },
    {
      "name": "Send WhatsApp (With HSM)",
      "value": "sendWhatsapp",
      "action": "Send whatsapp message",
      "description": "Send WhatsApp template messages using Nvoip for automated communication",
      "resource": "whatsapp"
    }
  ]

npm_readme:
  # 📡 @nvoip/n8n-nodes-nvoip

  [![Node.js Version](https://img.shields.io/badge/Node.js-20+-green)](https://nodejs.org/)
  [![n8n](https://img.shields.io/badge/n8n-supported-brightgreen)](https://n8n.io/)
  [![License](https://img.shields.io/badge/License-MIT-blue)](LICENSE)

  Integração da **Nvoip** com o **[n8n](https://n8n.io/)** para automação de comunicações:  
  ✅ Envio de SMS  
  ✅ Mensagens via WhatsApp  
  ✅ Ligações telefônicas  
  ✅ Torpedos de voz (simples e interativos)  

  ---

  ## 🚀 Introdução
  Este pacote fornece um **node personalizado para o n8n**, permitindo integrar de forma simples e rápida os serviços da **Nvoip** em fluxos de automação.  
  O projeto foi desenvolvido em **TypeScript**, com suporte a **OAuth2** para autenticação segura e diversas funcionalidades de comunicação.

  ---

  ## ⚙️ Como usar o node

  Siga este passo a passo para configurar e usar o node @nvoip/n8n-nodes-nvoip:

  1. **Instale o node da comunidade**  
     - Abra o n8n e vá até a aba de **Nodes da Comunidade**.  
     - Procure por `@nvoip/n8n-nodes-nvoip` e instale.

  2. **Adicione o node no seu fluxo**  
     - Arraste o node para o seu canvas de automação.  
     - Clique nele para abrir as configurações.

  3. **Configure suas credenciais**  
     - Na aba de **Login/Autenticação**, insira suas credenciais da Nvoip.  
     - O node utiliza **OAuth2**, garantindo acesso seguro à API da Nvoip.

  4. **Configure a ação desejada**  
     - **SMS**: Defina o número do destinatário e a mensagem (suporte a variáveis e templates).  
     - **WhatsApp**: Configure o envio de mensagens via API oficial, com suporte a templates predefinidos.  
     - **Ligações telefônicas**: Escolha o ramal de origem, número de destino e configure transferências se necessário.  
     - **Torpedo de voz**: Selecione **Simples** (texto convertido em áudio) ou **Interativo** (envio de link para áudio público).

  5. **Teste o fluxo**  
     - Execute o node no modo de teste.  
     - Verifique logs e mensagens enviadas para garantir que a integração está funcionando corretamente.

  6. **Salve e publique seu fluxo**  
     - Quando tudo estiver configurado, salve o fluxo e publique para produção.


  ## SMS

  -	Envio de mensagens customizadas
  	
  -	Suporte a variáveis e templates de SMS

  ## WhatsApp

  -	Envio de mensagens via API oficial
  	
  -	Suporte a templates predefinidos

  ## Ligações Telefônicas

  -	Disparo de chamadas via ramal
  	
  -	Conexão entre usuário e cliente final
  	
  -	Implementação inicial do recurso transferTrue (em desenvolvimento)
  	
  -	Torpedo de Voz
  	
  -	Simples: texto convertido em áudio
  	
  -	Interativo: envio de link para áudio público

  ## 📌 Conclusão

  O @nvoip/n8n-nodes-nvoip amplia o poder de automação no n8n, permitindo gerenciar toda a comunicação multicanal da Nvoip em um único node.
  A arquitetura modular garante extensibilidade e manutenção simples, abrindo espaço para futuras evoluções.

ai_documentation_summary:
  {"purpose":"This n8n community node integrates Nvoip services to automate SMS, WhatsApp messaging, phone calls, and voice torpedos within workflow executions.","capabilities":["Send custom SMS messages with variable and template support","Send WhatsApp messages via official API with predefined templates","Initiate phone calls from specific trunks","Implement voice torpedo features (simple text-to-audio and interactive public audio links)","Support for call transfers (in development)"],"authentication":"OAuth2","commonUseCases":["Automated customer notifications via SMS or WhatsApp","Interactive voice response systems for surveys or menus","Automated outbound calling campaigns","Multi-channel communication automation"],"limitations":["Call transfer functionality is in development and not yet fully implemented"],"relatedNodes":["n8n Community Node","n8n HTTP Request"]}


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

updated_at: 2026-07-14 14:40:33
author_name: jacketbg
author_github_url: https://github.com/Jacketbg/n8n-node-inoreader.git
npm_package_name: n8n-nodes-inoreader
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:33.262Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "article",
      "options": [
        {
          "name": "Article",
          "value": "article"
        },
        {
          "name": "Feed",
          "value": "feed"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Folder",
          "value": "folder"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFromFeed",
      "options": [
        {
          "name": "Add Tag",
          "value": "addToTag",
          "action": "Add tag to article",
          "description": "Add a tag to an article"
        },
        {
          "name": "Add to Read Later",
          "value": "addToReadLater",
          "action": "Add article to read later",
          "description": "Add an article to the Read later section"
        },
        {
          "name": "Create in Read Later",
          "value": "saveToReadLater",
          "action": "Create new article in read later",
          "description": "Create external article and save to the Read later section"
        },
        {
          "name": "Create in Tag",
          "value": "saveToTag",
          "action": "Create new article in a specific tag",
          "description": "Create external article and save to a specific tag"
        },
        {
          "name": "Get Many From Feed",
          "value": "getFromFeed",
          "action": "Get many articles from feed",
          "description": "Get articles from a specific feed"
        },
        {
          "name": "Get Many From Folder",
          "value": "getFromFolder",
          "action": "Get many articles from folder",
          "description": "Get articles from a specific folder"
        },
        {
          "name": "Get Many From Read Later",
          "value": "getFromReadLater",
          "action": "Get many articles from read later",
          "description": "Get articles from the Read later section"
        },
        {
          "name": "Get Many From Tag",
          "value": "getFromTag",
          "action": "Get many articles from tag",
          "description": "Get articles from a specific tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllFeeds",
      "options": [
        {
          "name": "Get All Feeds",
          "value": "getAllFeeds",
          "action": "Get all feeds in user account",
          "description": "Get all feeds from the user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllTags",
      "options": [
        {
          "name": "Get All Tags",
          "value": "getAllTags",
          "action": "Get all tags in user account",
          "description": "Get all tags from the user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllFolders",
      "options": [
        {
          "name": "Get All Folders",
          "value": "getAllFolders",
          "action": "Get all folders in user account",
          "description": "Get all folders from the user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Tag",
      "value": "addToTag",
      "action": "Add tag to article",
      "description": "Add a tag to an article",
      "resource": "article"
    },
    {
      "name": "Add to Read Later",
      "value": "addToReadLater",
      "action": "Add article to read later",
      "description": "Add an article to the Read later section",
      "resource": "article"
    },
    {
      "name": "Create in Read Later",
      "value": "saveToReadLater",
      "action": "Create new article in read later",
      "description": "Create external article and save to the Read later section",
      "resource": "article"
    },
    {
      "name": "Create in Tag",
      "value": "saveToTag",
      "action": "Create new article in a specific tag",
      "description": "Create external article and save to a specific tag",
      "resource": "article"
    },
    {
      "name": "Get Many From Feed",
      "value": "getFromFeed",
      "action": "Get many articles from feed",
      "description": "Get articles from a specific feed",
      "resource": "article"
    },
    {
      "name": "Get Many From Folder",
      "value": "getFromFolder",
      "action": "Get many articles from folder",
      "description": "Get articles from a specific folder",
      "resource": "article"
    },
    {
      "name": "Get Many From Read Later",
      "value": "getFromReadLater",
      "action": "Get many articles from read later",
      "description": "Get articles from the Read later section",
      "resource": "article"
    },
    {
      "name": "Get Many From Tag",
      "value": "getFromTag",
      "action": "Get many articles from tag",
      "description": "Get articles from a specific tag",
      "resource": "article"
    },
    {
      "name": "Get All Feeds",
      "value": "getAllFeeds",
      "action": "Get all feeds in user account",
      "description": "Get all feeds from the user",
      "resource": "feed"
    },
    {
      "name": "Get All Tags",
      "value": "getAllTags",
      "action": "Get all tags in user account",
      "description": "Get all tags from the user",
      "resource": "tag"
    },
    {
      "name": "Get All Folders",
      "value": "getAllFolders",
      "action": "Get all folders in user account",
      "description": "Get all folders from the user",
      "resource": "folder"
    }
  ]

npm_readme:
  # n8n-nodes-inoreader

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

  Inoreader is a powerful content aggregator and RSS reader platform that lets you monitor, organize, and automate the flow of articles, feeds, and web content. Stay ahead with real-time updates from your favorite websites, blogs, newsletters, and social media – all in one customizable, distraction-free space.

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

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

  ---

  ## Installation

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

  ---

  ## Operations

  This node supports the following operations:

  ### Trigger (Inoreader Trigger node)
  - New article in feed
  - New article in folder
  - New article in "Read later" section

  ### Actions (Inoreader node)
  - Create new article in "Read later" section
  - Create new article in a tag
  - Get many articles from feed
  - Get many articles from folder
  - Get many articles from tag
  - Get many articles from "Read later"
  - Assign tag to article
  - Assign "Read later" flag to article
  - Get all feeds
  - Get all tags
  - Get all folders

  ---

  ## Credentials

  To use this node, you need an **Inoreader app** and OAuth2 credentials:

  1. Sign up at [Inoreader](https://www.inoreader.com/) if you haven’t already. 
  2. Go to the [Inoreader Developer Console](https://www.inoreader.com/preferences/other) and create an app. This requires an Inoreader Pro plan.
  3. Copy your **App ID** and **App Key**.
  4. In n8n, add new credentials of type **Inoreader OAuth2 API**, and enter your App ID and App Key.
  5. Click **Connect** and authorize n8n to access your Inoreader account.

  Tokens are managed automatically, and refresh tokens are supported.

  ---

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Tested with:** n8n 1.43.0 and above
  - May not work on legacy n8n versions prior to v1 due to changes in trigger handling and credentials.

  ---

  ## Usage

  - Add the **Inoreader Trigger** node to start a workflow when a new article appears in a feed, folder, or "Read later".
  - Use the **Inoreader** node to execute actions like tagging articles or saving external HTML content as new articles in Inoreader

  For general help with n8n, see [Try it out](https://docs.n8n.io/try-it-out/).

  ---

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Inoreader Developer Documentation](https://www.inoreader.com/developers/)
  * [Inoreader](https://www.inoreader.com/)

  ---

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Inoreader API to monitor, organize, and automate RSS feeds, articles, and web content.","capabilities":["Trigger workflow on new article in feed","Trigger workflow on new article in folder","Trigger workflow on new article in Read later section","Create new article in Read later section","Create new article in a tag","Get many articles from feed","Get many articles from folder","Get many articles from tag","Get many articles from Read later","Assign tag to article"],"authentication":"OAuth2 (requires Inoreader App ID and App Key)","commonUseCases":["Automated content aggregation from multiple RSS feeds","Real-time monitoring of specific blogs or websites","Organizing articles into tags or folders automatically","Saving external HTML content as new Inoreader articles"],"limitations":["Requires an Inoreader Pro plan to create an app","May not work on legacy n8n versions prior to v1","Minimum supported n8n version is 1.0.0"],"relatedNodes":["Inoreader Trigger","Inoreader"]}


node_type: n8n-nodes-authentica.authentica
package_name: n8n-nodes-authentica
display_name: Authentica
description: OTP and account balance via Authentica
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: authenticasa
author_github_url: https://github.com/AuthenticaSA/n8n-node-authentica.git
npm_package_name: n8n-nodes-authentica
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:33.263Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "otp",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "OTP",
          "value": "otp"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send an OTP",
          "description": "Send an OTP"
        },
        {
          "name": "Verify",
          "value": "verify",
          "action": "Verify an OTP",
          "description": "Verify an OTP"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "otp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get balance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send an OTP",
      "description": "Send an OTP",
      "resource": "otp"
    },
    {
      "name": "Verify",
      "value": "verify",
      "action": "Verify an OTP",
      "description": "Verify an OTP",
      "resource": "otp"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get balance",
      "resource": "account"
    }
  ]

npm_readme:
  <p align="center">
    <img src="nodes/Authentica/authentica.svg" alt="Authentica" width="120" />
  </p>

  <h1 align="center">Authentica for n8n</h1>

  <p align="center">
    Saudi identity & communications APIs for OTP and balance — packaged as an n8n Community Node.
  </p>

  ---

  ## ✨ What’s included in v0.1.0

  This first release focuses on the essentials:

  * **Account → Get Balance**
  * **OTP → Send** (SMS / WhatsApp / Email)
  * **OTP → Verify**


  ---

  ## 🧰 Requirements

  * n8n **v1.x** (self‑hosted or desktop)
  * Node.js **>= 20** (for local development)
  * An **Authentica API key** (header: `X-Authorization`)

  ---

  ## 🚀 Install

  ### Install from the n8n editor (Community Nodes)

  1. Open the n8n editor → **Settings → Community Nodes → Install**.
  2. Search for **Authentica** (package **`n8n-nodes-authentica`**).
  3. Click **Install** and confirm the warning screen.
  4. n8n downloads the package from npm and reloads. You’ll now see **Authentica** in the Nodes panel.

  ### Update / Uninstall

  * **Update:** Settings → Community Nodes → find *Authentica* → **Update**.
  * **Uninstall:** Settings → Community Nodes → find *Authentica* → **Uninstall**.

  ### Offline / Self‑hosted without Community Nodes

  If Community Nodes is disabled in your environment, install via npm on the host that runs n8n and point the extensions path:

  ```bash
  npm i n8n-nodes-authentica
  export N8N_CUSTOM_EXTENSIONS="/absolute/path/to/node_modules/n8n-nodes-authentica"
  n8n start
  ```

  ---

  ## 🔐 Credentials — *Authentica API*

  Create a new credential in **Credentials → New → Authentica API**.

  **Fields**

  * **API Key** *(required)*: your Authentica key (sent as `X-Authorization`) 
  * **Base URL** *(optional)*: defaults to `https://api.authentica.sa`

  **Test**

  * Click **Test** to call `/api/v2/balance` — you should see **Success**.

  ---

  ## 🧩 Node usage

  ### 1) Account → Get Balance

  * **Resource:** `Account`
  * **Operation:** `Get Balance`
  * **Output:** `{ balance: number }`

  ### 2) OTP → Send

  * **Resource:** `OTP`
  * **Operation:** `Send`
  * **Channel:** `SMS` | `WhatsApp` | `Email`
  * **Phone** *(required for SMS/WhatsApp)*: **E.164** format, e.g. `+9665XXXXXXX`
  * **Email** *(required for Email)*: valid email
  * **Optional:** message/template fields as supported by your Authentica app

  **Output (example)**

  ```json
  {
  	"success": true,
  	"data": null,
  	"message": "OTP send successfully"
  }
  ```

  ### 3) OTP → Verify

  * **Resource:** `OTP`
  * **Operation:** `Verify`
  * **Verify With:** `Phone` or `Email`
  * **Code:** the OTP the user received

  **Output (example)**

  ```json
  {
  	"status": true,
  	"message": "OTP verified successfully"
  }
  ```

  > **Validation built‑in:**
  >
  > * Phone must be E.164 (`+<country><number>`). Example KSA mobile: `+9665…`
  > * Email must be a well‑formed address.

  ---

  ## 🐞 Troubleshooting

  * **401 Unauthorized** → API key missing/invalid. Recheck the *Authentica API* credential, header `X-Authorization`.
  * **422 Unprocessable Entity** → A required field is missing or invalid (e.g., non‑E.164 phone). Fix inputs and retry.
  * **Rate limiting** → If you expect bursts, add a **Wait** or **Rate Limit** node before the Authentica node.
  * **Large execution data** → Run with the top‑bar **Execute workflow** button, or enable on‑disk binaries.

  ---

  ## 📦 Build locally (contributors)

  ```bash
  npm ci
  npm run lint
  npm run build
  # local load
  export N8N_CUSTOM_EXTENSIONS="$PWD"
  n8n start
  ```


  ---

  ## 🔒 Security & privacy

  * Keep API keys in **Credentials** (never hardcode in workflows).
  * Use **E.164** phones and never log sensitive PII in plaintext nodes.

  ---


  ## 🙌 Thanks

  Built by the **Authentica** team to help developers verify users and reduce fraud in Saudi Arabia.

  * Website: [https://authentica.sa](https://authentica.sa)
  * Issues / Feedback: [Support Email](mailto:support@authentica.sa)

  ---

  ## 📄 License (MIT)

  ```
  MIT License

  Copyright (c) 2025 Authentica

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included
  in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.

  ```

  ---

  ### File layout (what gets published)

  ```
  .
  ├─ dist/                               # compiled node + credentials + svg
  ├─ README.md                           # this file
  ├─ LICENSE
  ├─ CHANGELOG.md
  └─ package.json
  ```

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the Authentica API to manage Saudi identity communications, specifically handling account balance checks and One-Time Password (OTP) verification via SMS, WhatsApp, or Email.","capabilities":["Retrieve account balance","Send OTP via SMS","Send OTP via WhatsApp","Send OTP via Email","Verify OTP via Phone","Verify OTP via Email","Input validation for E.164 phone numbers and email addresses"],"authentication":"API key required (sent as header 'X-Authorization')","commonUseCases":["User registration and verification flows","Two-factor authentication (2FA) implementation","Account balance monitoring for Saudi users","Secure communication channels for user onboarding"],"limitations":["Requires n8n v1.x or higher","Requires Node.js >= 20 for local development","Limited to Saudi Arabia identity services","Rate limiting may require additional workflow nodes for burst handling"],"relatedNodes":["Wait node","Rate Limit node","Execute Workflow node"]}


node_type: @aotoki/n8n-nodes-line-messaging.lineMessaging
package_name: @aotoki/n8n-nodes-line-messaging
display_name: Line Messaging
description: Interact with the Line Messaging API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: elct9620
author_github_url: https://github.com/elct9620/n8n-nodes-line-messaging.git
npm_package_name: @aotoki/n8n-nodes-line-messaging
npm_version: 0.10.0
community_fetched_at: 2026-07-14T14:40:33.264Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "reply",
      "options": [
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Retrieve profile information of a user",
          "description": "Retrieve profile information of a user"
        },
        {
          "name": "Multicast",
          "value": "multicast",
          "action": "Send a message to multiple users",
          "description": "Send a message to multiple users"
        },
        {
          "name": "Reply",
          "value": "reply",
          "action": "Reply to a message using a reply token",
          "description": "Reply to a message using a reply token"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a message to a user",
          "description": "Send a message to a user"
        },
        {
          "name": "Show Loading Animation",
          "value": "showLoadingAnimation",
          "action": "Display a loading animation to a user",
          "description": "Display a loading animation to a user"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Retrieve profile information of a user",
      "description": "Retrieve profile information of a user"
    },
    {
      "name": "Multicast",
      "value": "multicast",
      "action": "Send a message to multiple users",
      "description": "Send a message to multiple users"
    },
    {
      "name": "Reply",
      "value": "reply",
      "action": "Reply to a message using a reply token",
      "description": "Reply to a message using a reply token"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a message to a user",
      "description": "Send a message to a user"
    },
    {
      "name": "Show Loading Animation",
      "value": "showLoadingAnimation",
      "action": "Display a loading animation to a user",
      "description": "Display a loading animation to a user"
    }
  ]

npm_readme:
  # n8n-nodes-line-messaging

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

  LINE Messaging API enables developers to build chatbots and integrate messaging features into their services with the LINE platform, which is especially popular in Japan, Thailand, Taiwan, and other parts of Asia.

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

  ## Installation

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

  ```bash
  npm install @aotoki/n8n-nodes-line-messaging
  ```

  ## Operations

  This node provides the following operations:

  ### Line Messaging Node

  - **Reply**: Reply to a user's message using the replyToken
  - **Send**: Proactively send messages to users using their User ID
  - **Multicast**: Send messages to multiple users simultaneously (up to 500 recipients)
  - **Get Profile**: Retrieve user profile information

  ### Line Messaging Data Node

  - **Get Content**: Retrieve content (images, videos, audio, files) from message IDs

  ### Line Messaging Trigger Node

  - **Webhook**: Receive events from LINE Messaging API

  ## Credentials

  You need to set up a LINE Bot channel in the [LINE Developers Console](https://developers.line.biz/console/) before using this node.

  1. Create a new provider and channel in the LINE Developers Console
  2. Enable the Messaging API option
  3. Get your Channel Secret and Channel Access Token from the Basic Settings and Messaging API tabs
  4. Use these credentials when setting up the node in n8n

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Built without external dependencies to comply with n8n verified node requirements

  ## Usage

  ### Setting up a LINE Bot Webhook

  1. Create a workflow with the LINE Messaging Trigger node
  2. Configure the node to listen for the events you're interested in
  3. Copy the webhook URL from the trigger node
  4. Set this URL as your webhook URL in the LINE Developers Console
  5. Add a verification step in your workflow to validate the signature using the Channel Secret

  ### Responding to Messages

  1. When a message is received, your workflow will be triggered
  2. You can access the `replyToken` from the trigger output
  3. Use the LINE Messaging node with the "Reply" operation to send a response
  4. Set the reply token and add the messages you want to send

  ### Sending Proactive Messages

  1. Use the LINE Messaging node with the "Send" operation
  2. Provide the User ID of the recipient (format: U1234567890abcdef...)
  3. Add the messages you want to send
  4. This allows sending messages without waiting for user interaction

  ### Sending Bulk Messages (Multicast)

  1. Use the LINE Messaging node with the "Multicast" operation
  2. Provide comma-separated User IDs (e.g., "U1234..., U5678..., U9012...")
  3. Add the messages you want to send to all recipients
  4. Supports up to 500 recipients per operation for efficient bulk messaging

  ### Getting User Profiles

  1. Use the LINE Messaging node with the "Get Profile" operation
  2. Provide the User ID to retrieve profile information
  3. Get user's display name, profile picture, and status message

  ### Retrieving Media Content

  1. When a media message (image, video, audio, file) is received, you get a message ID
  2. Use the LINE Messaging Data node with the "Get Content" operation
  3. Provide the message ID to download the content as binary data
  4. The content can then be processed, saved, or sent to other services

  ### Example: Simple Echo Bot

  This example workflow receives messages and echoes them back to the user:

  1. Add a LINE Messaging Trigger node and configure it to listen for "message" events
  2. Add a LINE Messaging node configured to "Reply"
  3. Set the "Reply Token" field to use the replyToken from the trigger output: `{{$json.replyToken}}`
  4. Add a text message with the content: `You said: {{$json.message.text}}`

  ## Features

  - **Multiple Messaging Types**: Reply to messages, send to individuals, or multicast to groups
  - **Bulk Messaging**: Send to up to 500 recipients simultaneously with multicast operation
  - **Text Messages (V2)**: Send text messages with quote tokens and quick reply buttons
  - **Quick Replies**: Add postback and message action buttons to messages
  - **Quote Messages**: Reference previous messages in conversations
  - **User Profiles**: Retrieve user display names, pictures, and status messages
  - **Media Content**: Download images, videos, audio files, and documents
  - **Webhook Events**: Receive all LINE webhook events for comprehensive bot functionality
  - **No External Dependencies**: Built using only n8n-workflow types and Node.js built-ins

  ## Development

  To develop and test this node locally:

  ```bash
  # Clone the repository
  git clone git@github.com:elct9620/n8n-nodes-line-messaging.git
  cd n8n-nodes-line-messaging

  # Install dependencies
  pnpm install

  # Start the development server
  pnpm n8n-node dev
  ```

  The `pnpm n8n-node dev` command will start a local n8n instance with the node loaded for development and testing. This replaces the previous Docker-based development setup.

  For more development commands, see the available scripts:

  ```bash
  # Build the project
  pnpm build

  # Run linting
  pnpm lint

  # Format code
  pnpm format
  ```

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [LINE Messaging API documentation](https://developers.line.biz/en/docs/messaging-api/)
  - [LINE Bot Designer](https://developers.line.biz/en/services/bot-designer/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the LINE Messaging API to build chatbots and integrate messaging features into workflows.","capabilities":["Reply to user messages using replyToken","Proactively send messages to individual users by User ID","Multicast messages to up to 500 recipients simultaneously","Retrieve user profile information (display name, profile picture, status message)","Retrieve media content (images, videos, audio, files) from message IDs","Receive webhook events from LINE Messaging API","Send text messages with quote tokens and quick reply buttons","Add postback and message action buttons to messages","Reference previous messages in conversations"],"authentication":"API key required (Channel Secret and Channel Access Token from LINE Developers Console)","commonUseCases":["Building simple echo bots that respond to user messages","Sending proactive notifications to customers","Broadcasting announcements to groups of users","Retrieving user profiles for personalized interactions","Downloading and processing media files sent by users"],"limitations":["Multicast is limited to 500 recipients per operation","Requires a LINE Bot channel to be set up in the LINE Developers Console","Requires n8n version 1.0.0 or later","Community node (not official n8n node)"],"relatedNodes":["LINE Messaging Trigger Node","LINE Messaging Data Node","n8n HTTP Request node","n8n Webhook node"]}


node_type: @cloudconvert/n8n-nodes-cloudconvert.cloudConvert
package_name: @cloudconvert/n8n-nodes-cloudconvert
display_name: CloudConvert
description: Use CloudConvert to convert files, create thumbnails, merge files, add watermarks and more!
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: josiasmontag
author_github_url: https://github.com/cloudconvert/n8n-nodes-cloudconvert.git
npm_package_name: @cloudconvert/n8n-nodes-cloudconvert
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:33.265Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "file",
      "options": [
        {
          "name": "Command",
          "value": "command"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Metadata",
          "value": "metadata"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Website",
          "value": "website"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Add Watermark",
          "value": "watermark",
          "action": "Add watermark to a file",
          "description": "Add a watermark to a PDF file, to an image or to a video"
        },
        {
          "name": "Convert File",
          "value": "convert",
          "action": "Convert a file",
          "description": "Convert a file to a different format"
        },
        {
          "name": "Create Archive",
          "value": "archive",
          "action": "Create archive",
          "description": "Create an archive (ZIP, RAR...) for multiple files"
        },
        {
          "name": "Create Thumbnail",
          "value": "thumbnail",
          "action": "Create a thumbnail",
          "description": "Create a thumbnail of a file"
        },
        {
          "name": "Optimize File",
          "value": "optimize",
          "action": "Optimize a file",
          "description": "Optimize / compress a file to reduce its size"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "metadata",
      "options": [
        {
          "name": "Get Metadata",
          "value": "metadata",
          "action": "Get metadata from a file",
          "description": "Extract metadata from files"
        },
        {
          "name": "Write Metadata",
          "value": "metadata/write",
          "action": "Write metadata to a file",
          "description": "Write metadata to files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "metadata"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "pdf/a",
      "options": [
        {
          "name": "Add PDF OCR Layer",
          "value": "pdf/ocr",
          "action": "Add OCR layer to PDF",
          "description": "Add an OCR text layer to scanned PDF files"
        },
        {
          "name": "Convert PDF to PDF/A",
          "value": "pdf/a",
          "action": "Convert PDF to PDF/A",
          "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B"
        },
        {
          "name": "Decrypt PDF",
          "value": "pdf/decrypt",
          "action": "Decrypt PDF",
          "description": "Decrypt a password-protected PDF file"
        },
        {
          "name": "Encrypt PDF",
          "value": "pdf/encrypt",
          "action": "Encrypt PDF",
          "description": "Encrypt a PDF file and optionally set a password and restrictions"
        },
        {
          "name": "Extract Pages From PDF",
          "value": "pdf/extract-pages",
          "action": "Extract pages from PDF",
          "description": "Extract specific pages or page ranges from a PDF file"
        },
        {
          "name": "Merge Files",
          "value": "pdf/merge",
          "action": "Merge files to PDF",
          "description": "Merge multiple files into a single PDF"
        },
        {
          "name": "Rotate PDF Pages",
          "value": "pdf/rotate-pages",
          "action": "Rotate PDF pages",
          "description": "Rotate single pages or all pages of a PDF file"
        },
        {
          "name": "Split PDF Into Pages",
          "value": "pdf/split-pages",
          "action": "Split PDF into pages",
          "description": "Split a PDF into one PDF file per page"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "command",
      "options": [
        {
          "name": "Execute Command",
          "value": "command",
          "action": "Execute command",
          "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "command"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "capture-website",
      "options": [
        {
          "name": "Capture Website",
          "value": "capture-website",
          "action": "Capture website",
          "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "website"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Watermark",
      "value": "watermark",
      "action": "Add watermark to a file",
      "description": "Add a watermark to a PDF file, to an image or to a video",
      "resource": "file"
    },
    {
      "name": "Convert File",
      "value": "convert",
      "action": "Convert a file",
      "description": "Convert a file to a different format",
      "resource": "file"
    },
    {
      "name": "Create Archive",
      "value": "archive",
      "action": "Create archive",
      "description": "Create an archive (ZIP, RAR...) for multiple files",
      "resource": "file"
    },
    {
      "name": "Create Thumbnail",
      "value": "thumbnail",
      "action": "Create a thumbnail",
      "description": "Create a thumbnail of a file",
      "resource": "file"
    },
    {
      "name": "Optimize File",
      "value": "optimize",
      "action": "Optimize a file",
      "description": "Optimize / compress a file to reduce its size",
      "resource": "file"
    },
    {
      "name": "Get Metadata",
      "value": "metadata",
      "action": "Get metadata from a file",
      "description": "Extract metadata from files",
      "resource": "metadata"
    },
    {
      "name": "Write Metadata",
      "value": "metadata/write",
      "action": "Write metadata to a file",
      "description": "Write metadata to files",
      "resource": "metadata"
    },
    {
      "name": "Add PDF OCR Layer",
      "value": "pdf/ocr",
      "action": "Add OCR layer to PDF",
      "description": "Add an OCR text layer to scanned PDF files",
      "resource": "pdf"
    },
    {
      "name": "Convert PDF to PDF/A",
      "value": "pdf/a",
      "action": "Convert PDF to PDF/A",
      "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B",
      "resource": "pdf"
    },
    {
      "name": "Decrypt PDF",
      "value": "pdf/decrypt",
      "action": "Decrypt PDF",
      "description": "Decrypt a password-protected PDF file",
      "resource": "pdf"
    },
    {
      "name": "Encrypt PDF",
      "value": "pdf/encrypt",
      "action": "Encrypt PDF",
      "description": "Encrypt a PDF file and optionally set a password and restrictions",
      "resource": "pdf"
    },
    {
      "name": "Extract Pages From PDF",
      "value": "pdf/extract-pages",
      "action": "Extract pages from PDF",
      "description": "Extract specific pages or page ranges from a PDF file",
      "resource": "pdf"
    },
    {
      "name": "Merge Files",
      "value": "pdf/merge",
      "action": "Merge files to PDF",
      "description": "Merge multiple files into a single PDF",
      "resource": "pdf"
    },
    {
      "name": "Rotate PDF Pages",
      "value": "pdf/rotate-pages",
      "action": "Rotate PDF pages",
      "description": "Rotate single pages or all pages of a PDF file",
      "resource": "pdf"
    },
    {
      "name": "Split PDF Into Pages",
      "value": "pdf/split-pages",
      "action": "Split PDF into pages",
      "description": "Split a PDF into one PDF file per page",
      "resource": "pdf"
    },
    {
      "name": "Execute Command",
      "value": "command",
      "action": "Execute command",
      "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file",
      "resource": "command"
    },
    {
      "name": "Capture Website",
      "value": "capture-website",
      "action": "Capture website",
      "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG",
      "resource": "website"
    }
  ]

npm_readme:
  # n8n-nodes-cloudconvert

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

  CloudConvert is an online file conversion and processing API which allows to convert files, create thumbnails, merge files, add watermarks 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)  <!-- 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 > Community Nodes**.
  2. Select **Install**.
  3. Enter `@cloudconvert/n8n-nodes-cloudconvert` 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

  It supports these operations:

  - Convert files from one format to another
  - Create thumbnails of files
  - Add watermarks to images, PDFs and videos
  - Capture website screenshots and save websites as PDF
  - Merge multiple input files in one single PDF
  - Create archives (ZIP, RAR...) for multiple input files
  - Get file metadata (EXIF etc)

  ## Credentials

  Create a free CloudConvert account [here](https://cloudconvert.com/register) which allows 25 free credits per day.

  - Generate OAuth 2 credentials (default auth method) here: https://cloudconvert.com/dashboard/api/v2/clients
  - Generate an API key (alternative auth method) here: https://cloudconvert.com/dashboard/api/v2/keys

  ## Compatibility

  Tested against n8n version 0.225+.

  ## Usage

  A typical workflow using this node would look like this:
  <img width="906" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/3cd6f332-74ee-4997-8e67-7d873a124592">

  This is a workflow merging multiple input files in a single PDF:
  <img width="1276" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/9324c941-eb86-48ac-8d83-aaeecf16fd09">



  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [CloudConvert API v2 Documentation](https://cloudconvert.com/api/v2)

ai_documentation_summary:
  {"purpose":"A community node that enables file conversion, thumbnail creation, watermarking, merging, and other processing tasks using the CloudConvert API within n8n workflows.","capabilities":["Convert files between different formats","Create thumbnails for images, PDFs, and videos","Add watermarks to images, PDFs, and videos","Capture website screenshots","Save websites as PDF","Merge multiple input files into a single PDF","Create archives (ZIP, RAR) from multiple input files","Retrieve file metadata (EXIF, etc.)"],"authentication":"OAuth 2 (default) or API Key","commonUseCases":["Automating document format conversion in business workflows","Generating image thumbnails for media galleries","Creating watermarked promotional materials","Consolidating multiple documents into a single PDF","Archiving multiple files for storage or backup"],"limitations":["Requires a free CloudConvert account for usage (25 free credits per day)","Community node status may require accepting installation risks","Compatible with n8n version 0.225+ only"],"relatedNodes":["n8n Community Nodes","CloudConvert API Integration"]}


node_type: @handelsregister/n8n-nodes-handelsregister-ai.handelsregisterAi
package_name: @handelsregister/n8n-nodes-handelsregister-ai
display_name: handelsregister.ai
description: Interact with handelsregister.ai API to query German business registry data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: padho
author_github_url: https://github.com/Handelsregister-AI/n8n-nodes-handelsregister-ai.git
npm_package_name: @handelsregister/n8n-nodes-handelsregister-ai
npm_version: 0.3.1
community_fetched_at: 2026-07-14T14:40:33.267Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "fetchOrganization",
      "options": [
        {
          "name": "Fetch Organization",
          "value": "fetchOrganization",
          "action": "Fetch organization details",
          "description": "Get comprehensive information about a German company"
        },
        {
          "name": "Search Organizations",
          "value": "searchOrganizations",
          "action": "Search organizations",
          "description": "Search German companies with filters and pagination"
        },
        {
          "name": "Fetch Document",
          "value": "fetchDocument",
          "action": "Fetch document",
          "description": "Download official PDF documents from the German business registry"
        },
        {
          "name": "Fetch Person",
          "value": "fetchPerson",
          "action": "Fetch person details",
          "description": "Fetch a person profile by name and company context (always uses AI enrichment)"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Fetch Organization",
      "value": "fetchOrganization",
      "action": "Fetch organization details",
      "description": "Get comprehensive information about a German company"
    },
    {
      "name": "Search Organizations",
      "value": "searchOrganizations",
      "action": "Search organizations",
      "description": "Search German companies with filters and pagination"
    },
    {
      "name": "Fetch Document",
      "value": "fetchDocument",
      "action": "Fetch document",
      "description": "Download official PDF documents from the German business registry"
    },
    {
      "name": "Fetch Person",
      "value": "fetchPerson",
      "action": "Fetch person details",
      "description": "Fetch a person profile by name and company context (always uses AI enrichment)"
    }
  ]

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

  This is an n8n community node that allows you to interact with the [Handelsregister.ai](https://handelsregister.ai) API to query German business registry data.

  ## Installation

  ### Community Node

  1. In n8n, go to **Settings** > **Community Nodes**
  2. Click **Install**
  3. Enter `@handelsregister/n8n-nodes-handelsregister-ai`
  4. Click **Install**

  ### Manual Installation

  ```bash
  npm install @handelsregister/n8n-nodes-handelsregister-ai
  ```

  ## Features

  - **Fetch Organization**: Get comprehensive information about a German company including financial data, related persons, shareholders, UBOs, shareholdings, and publications
  - **Search Organizations**: Search German companies with filters and pagination
  - **Fetch Document**: Download official PDF documents from the German business registry (Shareholders List, AD, CD, Articles of Association)
  - **Fetch Person**: Look up a person profile by name and company context (with AI enrichment)

  ## Setup

  1. Get your API key from [Handelsregister.ai](https://handelsregister.ai)
  2. In n8n, add credentials:
     - Go to **Credentials** > **New**
     - Select **Handelsregister.ai API**
     - Enter your API key
     - Save the credentials

  ## Usage

  ### Fetch Organization

  Get comprehensive information about a German company:
  - **Query**: Company name, registration number or search query (e.g., "Konux GmbH aus München")
  - **Features**: Select additional data to include:
    - Financial KPI (1 Credit)
    - Balance Sheet Accounts (3 Credits)
    - Profit and Loss Account (3 Credits)
    - Related Persons (2 Credits)
    - Shareholders (5 Credits)
    - Publications (1 Credit)
    - News (10 Credits)
    - Insolvency Publications (1 Credit)
    - Annual Financial Statements (5 Credits)
    - Website Content (0 Credits - requires AI Mode to be enabled)
    - UBOs (Ultimate Beneficial Owners)
    - Shareholdings (outbound holdings the company has in other companies)
    - Annual Financial Statements (HTML) (HTML variant of the annual reports)
  - **AI Mode**: Enable AI-powered search for better results (enabled by default)
  - **Realtime Mode**: Enable live lookup against the official Handelsregister (+10 credits, disabled by default)

  ### Search Organizations

  Search German companies with filters and pagination:
  - **Query**: Search query (minimum 2 characters, e.g., "Konux")
  - **Additional Fields**:
    - Skip: Number of results to skip
    - Limit: Results per page (1-100)
    - Postal Code Filter: Filter by postal code

  ### Fetch Document

  Download official PDF documents from the German business registry:
  - **Company ID**: Unique company entity ID from search results
  - **Document Type**: 
    - Shareholders List
    - Current Extract (AD)
    - Historical Extract (CD)
    - Articles of Association (Gesellschaftsvertrag / Satzung)

  ### Fetch Person

  Look up a person profile by name with company context for disambiguation. The endpoint always uses AI enrichment (15 base credits).

  - **Person Name**: Full name of the person (minimum 2 characters, e.g., "Erika Mustermann")
  - **Organization**: Company context used to disambiguate common names (minimum 2 characters, e.g., "Musterfirma GmbH")
  - **Features**: Optional additional data
    - Shareholdings (+5 credits when data is returned)

  ## Example Workflows

  ### Fetch Organization with Features
  ```json
  {
    "nodes": [
      {
        "parameters": {
          "operation": "fetchOrganization",
          "q": "Konux GmbH aus München",
          "features": ["financial_kpi", "related_persons"],
          "ai_search": true
        },
        "name": "handelsregister.ai",
        "type": "@handelsregister/n8n-nodes-handelsregister-ai.handelsregisterAi",
        "typeVersion": 1,
        "position": [250, 300]
      }
    ]
  }
  ```

  ### Search Organizations with Filters
  ```json
  {
    "nodes": [
      {
        "parameters": {
          "operation": "searchOrganizations",
          "q": "tech",
          "additionalFields": {
            "limit": 20,
            "postal_code": "80331"
          }
        },
        "name": "Search Organizations",
        "type": "@handelsregister/n8n-nodes-handelsregister-ai.handelsregisterAi",
        "typeVersion": 1,
        "position": [250, 300]
      }
    ]
  }
  ```

  ### Fetch Document Workflow
  ```json
  {
    "nodes": [
      {
        "parameters": {
          "operation": "fetchDocument",
          "company_id": "{{ $json.entity_id }}",
          "document_type": "shareholders_list"
        },
        "name": "Fetch Document",
        "type": "@handelsregister/n8n-nodes-handelsregister-ai.handelsregisterAi",
        "typeVersion": 1,
        "position": [450, 300]
      }
    ]
  }
  ```

  ### Fetch Person Workflow
  ```json
  {
    "nodes": [
      {
        "parameters": {
          "operation": "fetchPerson",
          "person_q": "Erika Mustermann",
          "organization_q": "Musterfirma GmbH",
          "personFeatures": ["shareholdings"]
        },
        "name": "Fetch Person",
        "type": "@handelsregister/n8n-nodes-handelsregister-ai.handelsregisterAi",
        "typeVersion": 1,
        "position": [450, 300]
      }
    ]
  }
  ```

  ### Batch Company Processing
  Use this workflow to process multiple companies from a spreadsheet or database:

  1. **Spreadsheet/Database Node** → Read company names
  2. **handelsregister.ai Node** → Use `searchOrganizations` to find companies
  3. **Filter Node** → Filter results based on criteria
  4. **handelsregister.ai Node** → Use `fetchOrganization` to get detailed data
  5. **Output Node** → Save results to database or file

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Run in development mode
  npm run dev
  ```

  ## License

  [MIT](LICENSE.md)

  ## Support

  For issues and feature requests, please visit the [GitHub repository](https://github.com/Handelsregister-AI/n8n-nodes-handelsregister-ai).

ai_documentation_summary:
  {"purpose":"This n8n community node enables querying German business registry data via the Handelsregister.ai API, supporting organization searches, detailed company information retrieval, and official document downloads.","capabilities":["Fetch comprehensive organization data including financial KPIs, balance sheets, profit/loss, related persons, shareholders, publications, news, and annual financial statements","Search German companies with customizable filters (postal code) and pagination (skip/limit)","Download official PDF documents (Shareholders List, Current Extract, Historical Extract)","AI-powered search for enhanced query results","Batch processing support for multiple companies"],"authentication":"API key required","commonUseCases":["Comprehensive company due diligence and background checks","Automated German business registry data collection","Financial data extraction for business intelligence","Document retrieval for legal or compliance verification"],"limitations":["Website Content feature requires AI Mode to be enabled","Some data features have associated credit costs","Search query minimum length of 2 characters required","Community node (may require manual installation)"],"relatedNodes":["Spreadsheet Node","Database Node","Filter Node","Output Node"]}


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

updated_at: 2026-07-14 14:40:33
author_name: sus-tech
author_github_url: https://github.com/S-S-Technologies-GmbH/
npm_package_name: n8n-nodes-matrix42
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:33.267Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "ticket",
      "options": [
        {
          "name": "ASQL",
          "value": "asql"
        },
        {
          "name": "Import",
          "value": "import"
        },
        {
          "name": "Ticket",
          "value": "ticket"
        },
        {
          "name": "Storage",
          "value": "storage"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFragments",
      "options": [
        {
          "name": "Get Fragments",
          "value": "getFragments",
          "action": "Get fragments",
          "description": "Receives list of fragments with defined list of columns, which match the specified search criteria"
        },
        {
          "name": "Add Fragment",
          "value": "addFragment",
          "action": "Add fragment",
          "description": "Creates a new Data Definition fragment. The operation is required for cases of multi-fragments or optional fragments."
        },
        {
          "name": "Update Fragment",
          "value": "updateFragment",
          "action": "Update fragment",
          "description": "Updates the specified Data Definition fragment, which has been at first retrieved by the Get Fragment operation, and adjusted with the new data. The Server throws the Concurrency exception in case the updated fragment has been updated between Get Fragment operation and Update Fragment."
        },
        {
          "name": "Delete Fragment",
          "value": "deleteFragment",
          "action": "Delete fragment",
          "description": "Deletes the fragment from Database defined by the Data Definition name and the fragment ID. The operation is required for cases of multi-fragments or optional fragments."
        },
        {
          "name": "Add Object",
          "value": "addObject",
          "action": "Add object",
          "description": "Add the Object of the specified Configuration Item"
        },
        {
          "name": "Get Object",
          "value": "getObject",
          "action": "Get object",
          "description": "Reads the whole Object with the specified Configuration Item name and object ID. The Service returns exclusively the data belonged to object (e.g. attributes, N:1 relations) Virtual attributes, like N:M relations are not returned and need to be obtained with the dedicated service request."
        },
        {
          "name": "Update Object",
          "value": "updateObject",
          "action": "Update object",
          "description": "Updates the object of the specified Configuration Item name and object ID. The method works in pair with “Get Object” method, which delivers the original Object with the current Timestamp (market of current state), which is used for concurrency tracking."
        },
        {
          "name": "Delete Object",
          "value": "deleteObject",
          "action": "Delete object",
          "description": "Deletes the object from Database defined by the Configuration Item name and the object ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "asql"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "executeImportDefinition",
      "options": [
        {
          "name": "Execute Import Definition",
          "value": "executeImportDefinition",
          "action": "Execute import definition",
          "description": "Execute an Import Definition"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "import"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createTicket",
      "options": [
        {
          "name": "Create Ticket",
          "value": "createTicket",
          "action": "Create a ticket",
          "description": "Create a ticket"
        },
        {
          "name": "Close Ticket",
          "value": "closeTicket",
          "action": "Close ticket",
          "description": "Close a ticket"
        },
        {
          "name": "Transform Ticket",
          "value": "transformTicket",
          "action": "Transform a ticket",
          "description": "Transform a ticket"
        },
        {
          "name": "Add Journal Entry",
          "value": "addJournalEntry",
          "action": "Add a journal entry",
          "description": "Add a journal entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadFile",
      "options": [
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload file",
          "description": "Upload one or more file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "storage"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Fragments",
      "value": "getFragments",
      "action": "Get fragments",
      "description": "Receives list of fragments with defined list of columns, which match the specified search criteria",
      "resource": "asql"
    },
    {
      "name": "Add Fragment",
      "value": "addFragment",
      "action": "Add fragment",
      "description": "Creates a new Data Definition fragment. The operation is required for cases of multi-fragments or optional fragments.",
      "resource": "asql"
    },
    {
      "name": "Update Fragment",
      "value": "updateFragment",
      "action": "Update fragment",
      "description": "Updates the specified Data Definition fragment, which has been at first retrieved by the Get Fragment operation, and adjusted with the new data. The Server throws the Concurrency exception in case the updated fragment has been updated between Get Fragment operation and Update Fragment.",
      "resource": "asql"
    },
    {
      "name": "Delete Fragment",
      "value": "deleteFragment",
      "action": "Delete fragment",
      "description": "Deletes the fragment from Database defined by the Data Definition name and the fragment ID. The operation is required for cases of multi-fragments or optional fragments.",
      "resource": "asql"
    },
    {
      "name": "Add Object",
      "value": "addObject",
      "action": "Add object",
      "description": "Add the Object of the specified Configuration Item",
      "resource": "asql"
    },
    {
      "name": "Get Object",
      "value": "getObject",
      "action": "Get object",
      "description": "Reads the whole Object with the specified Configuration Item name and object ID. The Service returns exclusively the data belonged to object (e.g. attributes, N:1 relations) Virtual attributes, like N:M relations are not returned and need to be obtained with the dedicated service request.",
      "resource": "asql"
    },
    {
      "name": "Update Object",
      "value": "updateObject",
      "action": "Update object",
      "description": "Updates the object of the specified Configuration Item name and object ID. The method works in pair with “Get Object” method, which delivers the original Object with the current Timestamp (market of current state), which is used for concurrency tracking.",
      "resource": "asql"
    },
    {
      "name": "Delete Object",
      "value": "deleteObject",
      "action": "Delete object",
      "description": "Deletes the object from Database defined by the Configuration Item name and the object ID",
      "resource": "asql"
    },
    {
      "name": "Execute Import Definition",
      "value": "executeImportDefinition",
      "action": "Execute import definition",
      "description": "Execute an Import Definition",
      "resource": "import"
    },
    {
      "name": "Create Ticket",
      "value": "createTicket",
      "action": "Create a ticket",
      "description": "Create a ticket",
      "resource": "ticket"
    },
    {
      "name": "Close Ticket",
      "value": "closeTicket",
      "action": "Close ticket",
      "description": "Close a ticket",
      "resource": "ticket"
    },
    {
      "name": "Transform Ticket",
      "value": "transformTicket",
      "action": "Transform a ticket",
      "description": "Transform a ticket",
      "resource": "ticket"
    },
    {
      "name": "Add Journal Entry",
      "value": "addJournalEntry",
      "action": "Add a journal entry",
      "description": "Add a journal entry",
      "resource": "ticket"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload file",
      "description": "Upload one or more file",
      "resource": "storage"
    }
  ]

npm_readme:
  # n8n-nodes-matrix42

  This is an n8n community node that integrates with the Matrix42 ESMP Web Services API. It allows you to retrieve and work with Data Fragments from Matrix42 Data Definitions directly in your n8n workflows.

  Matrix42’s ESMP API exposes CRUD‑style endpoints for data fragments, supporting OData‑like filtering, column selection, paging, sorting, 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)  
  [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

  This node supports multiple operations across different resources:

  ### Data Fragment

  -   **Get Many** (`getAll`): Retrieve data fragments matching a search expression, with Return All / Limit paging.

  -   **Create** (`create`): Create a new data fragment in the specified Data Definition.

  -   **Update** (`update`): Update an existing data fragment.

  -   **Delete** (`delete`): Delete a data fragment by its ID.


  ### Data Object

  -   **Create** (`create`): Create a new object for a Configuration Item.

  -   **Get** (`get`): Retrieve a single object by its ID.

  -   **Update** (`update`): Update an existing object.

  -   **Delete** (`delete`): Delete an object by its ID.


  ### Data Query

  -   **Get Data** (`getData`): Read the list items of a data query, with Return All / paging (zero-based pages). Uses the `POST` variant so a structured **User Filters** group (`QueryFilterGroup`) can be passed in the body for ad-hoc filtering.

  ### Ticket

  -   **Create** (`create`): Open a new ticket in the Service Desk (with a selectable initial **State**).

  -   **Close** (`close`): Close an Incident or Service Request.

  -   **Transform** (`transform`): Transform a ticket into another type.

  -   **Add Journal Entry** (`addJournalEntry`): Add a journal entry to a ticket.

  ### Storage

  -   **Upload** (`upload`): Upload a file and attach it to a Configuration Item.

  ### Import

  -   **Execute** (`execute`): Run a predefined import definition to ingest data.

  ## Credentials

  > **Prerequisite:** You must have access to a running Matrix42 instance with appropriate API permissions.

  This node supports two authentication methods. Configure these under **Workflow → Credentials**.

  ### Matrix42 Webservice Token Auth

  1.  **Server URL** — Your Matrix42 server URL (e.g. `https://matrix42.example.com`).

  2.  **Webservice Token** — Your Matrix42 API Token.

  3.  **Ignore SSL Issues (Insecure)** — Enable when the server uses a self‑signed certificate.


  On execution, the node:

  -   Exchanges the API Token for a short‑lived Bearer (JWT) access token via `GenerateAccessTokenFromApiToken` (handled automatically in the credential's pre‑authentication step; the access token is cached and refreshed on expiry).

  -   Uses the access token in the `Authorization` header for all subsequent calls.


  > **Self‑signed certificates**: enable **Ignore SSL Issues (Insecure)** on the credential, or add the server's CA certificate to n8n's trusted store (see https://docs.n8n.io/hosting/configuration/configuration-examples/custom-certificate-authority/).

  ### Matrix42 Basic Auth

  1.  **Server URL** — As above.

  2.  **User** and **Password** — Your Matrix42 user credentials.

  3.  **Ignore SSL Issues (Insecure)** — As above.

  ## Compatibility

  -   **n8n**: Node API version 1; built and tested against `n8n-workflow` 2.x. Requires n8n 1.85 or later (uses `NodeConnectionTypes`). Last tested with n8n 2.2.3.

  -   **Node.js**: v22 or higher.

  -   **Matrix42 ESMP API**: Last tested against Matrix42 26.1.0.1390.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Matrix42 Web Services](https://help.matrix42.com/030_ESMP/030_INT/Business_Processes_and_API_Integrations/Matrix42_Web_Services_API#Public_API)

  ## Version History

  **0.2.1:**
  - Wrap runtime execution errors in `NodeApiError` so HTTP status codes and response context surface in the n8n UI.
  - Set the codex `nodeVersion` to `1.0` (schema value, independent of the node's runtime version).

  **0.2.0:**
  - **Breaking (node v2):** the `ASQL` resource was split into **Data Fragment** and **Data Object**, and operations were renamed to the standard CRUD set (`Get Many`, `Create`, `Update`, `Delete`, `Get`, `Transform`, `Close`, `Add Journal Entry`, `Upload`, `Execute`). Existing workflows using the node must reselect the resource/operation.
  - Token auth now performs the documented API‑token → access‑token exchange
  - Added an **Ignore SSL Issues (Insecure)** toggle to both credentials.
  - Added a **Data Query** resource with **Get Data** (POST-based, paged, with Return All and a structured **User Filters** body).
  - Ticket **Create** gained a selectable **State** field (loaded from the instance's activity states; defaults to New/200) and an **Extra Properties** collection for setting arbitrary/custom ticket attributes as name/value pairs.
  - Added an optional **Response Language** credential field, sent as the `Explicit-Language` header on every request.
  - `Get Many` (fragments) gained **Return All / Limit** paging.

  **0.1.3:**
  - Added Operations:
  	-   Tickets: `addJournalEntry`

  **0.1.2:**
  - Added Operations:
  	-   Storage Operations: `uploadFile`

  **0.1.1:**
  - Bug Fixes

  **0.1.0:**
    - Initial release supporting operations across multiple resources:
      -   Data Fragments: `getFragments`, `addFragment`, `updateFragment`, `deleteFragment`
      -   Data Objects: `addObject`, `getObject`, `updateObject`, `deleteObject`
      -   Tickets: `createTicket`, `closeTicket`, `transformTicket`
      -   Import: `executeImportDefinition`

    - Authentication methods:
      -   Matrix42 Token API (API Token ↔︎ Bearer JWT exchange)
      -   Matrix42 Basic API (HTTP Basic Authentication)
     

  ## Legal & Disclaimer

  This project is an **unofficial, community-maintained integration** for the Matrix42 ESMP **Public API**.  
  It uses only documented, publicly available endpoints as described in the official
  [Matrix42 Web Services API documentation](https://help.matrix42.com/030_ESMP/030_INT/Business_Processes_and_API_Integrations/Matrix42_Web_Services_API).

  Matrix42 **explicitly provides** a Public API and token-based authentication mechanism to support
  third-party integrations. This node simply wraps those endpoints for easier use within n8n.
  There is **no violation** of Matrix42’s licensing or terms of service in doing so.

  > **No Affiliation:**  
  > This project is **not affiliated with, endorsed, or sponsored by Matrix42 GmbH**.  
  > *MATRIX42* and related marks are trademarks of Matrix42 GmbH, used here for identification purposes only.

ai_documentation_summary:
  {"purpose":"A community n8n node that interacts with the Matrix42 ESMP Web Services API to manage Data Fragments, Data Objects, Tickets, and Import definitions.","capabilities":["Retrieve Data Fragments","Create Data Fragments","Update Data Fragments","Delete Data Fragments","Retrieve Data Objects","Create Data Objects","Update Data Objects","Delete Data Objects","Create Tickets","Close Tickets"],"authentication":"API Token (exchanges for Bearer JWT) or Basic Auth (Username/Password)","commonUseCases":["Automating data entry and updates in Matrix42 Service Desk","Integrating Matrix42 data into external workflows","Managing customer tickets programmatically","Automating data imports and file uploads"],"limitations":["Community-maintained (unofficial)","Requires access to a running Matrix42 instance with appropriate API permissions","Self-signed SSL certificates require manual configuration in n8n"],"relatedNodes":["n8n-nodes-matrix42.matrix42"]}


node_type: n8n-nodes-memara.memara
package_name: n8n-nodes-memara
display_name: Memara
description: Store and retrieve memories from Memara with semantic search
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: memaraio
author_github_url: https://github.com/memara-memory/
npm_package_name: n8n-nodes-memara
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:33.268Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "hidden",
      "default": "memory",
      "description": "n8n integrations work with memories within your assigned space",
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Memory",
          "value": "create",
          "action": "Create a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $response.body.id, \"memory\": $response.body } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/v1/n8n/memories",
              "body": {
                "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : []}}",
                "title": "={{$parameter.title}}",
                "content": "={{$parameter.content}}"
              },
              "method": "POST"
            }
          },
          "description": "Store information as a memory"
        },
        {
          "name": "Search Memories",
          "value": "search",
          "action": "Search memories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ $response.body.memories || [] }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/v1/n8n/search",
              "body": {
                "limit": "={{$parameter.limit || 10}}",
                "query": "={{$parameter.query}}"
              },
              "method": "POST"
            }
          },
          "description": "Find relevant memories using semantic search"
        },
        {
          "name": "Update Memory",
          "value": "update",
          "action": "Update a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"memory\": $response.body } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
              "body": {
                "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : undefined}}",
                "title": "={{$parameter.title}}",
                "content": "={{$parameter.content}}"
              },
              "method": "PUT"
            }
          },
          "description": "Modify an existing memory"
        },
        {
          "name": "Delete Memory",
          "value": "delete",
          "action": "Delete a memory",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a memory permanently"
        },
        {
          "name": "List Memories",
          "value": "list",
          "action": "List memories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ $response.body.memories || [] }}"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "limit": "={{$parameter.limit || 50}}",
                "offset": "={{$parameter.offset || 0}}"
              },
              "url": "/api/v1/n8n/memories",
              "method": "GET"
            }
          },
          "description": "Get memories from your space"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "memory"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Memory",
      "value": "create",
      "action": "Create a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $response.body.id, \"memory\": $response.body } }}"
              }
            }
          ]
        },
        "request": {
          "url": "/api/v1/n8n/memories",
          "body": {
            "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : []}}",
            "title": "={{$parameter.title}}",
            "content": "={{$parameter.content}}"
          },
          "method": "POST"
        }
      },
      "description": "Store information as a memory",
      "resource": "memory"
    },
    {
      "name": "Search Memories",
      "value": "search",
      "action": "Search memories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ $response.body.memories || [] }}"
              }
            }
          ]
        },
        "request": {
          "url": "/api/v1/n8n/search",
          "body": {
            "limit": "={{$parameter.limit || 10}}",
            "query": "={{$parameter.query}}"
          },
          "method": "POST"
        }
      },
      "description": "Find relevant memories using semantic search",
      "resource": "memory"
    },
    {
      "name": "Update Memory",
      "value": "update",
      "action": "Update a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"memory\": $response.body } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
          "body": {
            "tags": "={{$parameter.tags ? $parameter.tags.split(\",\").map((tag) => tag.trim()).filter(Boolean) : undefined}}",
            "title": "={{$parameter.title}}",
            "content": "={{$parameter.content}}"
          },
          "method": "PUT"
        }
      },
      "description": "Modify an existing memory",
      "resource": "memory"
    },
    {
      "name": "Delete Memory",
      "value": "delete",
      "action": "Delete a memory",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true, \"id\": $parameter.memoryId, \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/v1/n8n/memories/{{$parameter.memoryId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a memory permanently",
      "resource": "memory"
    },
    {
      "name": "List Memories",
      "value": "list",
      "action": "List memories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ $response.body.memories || [] }}"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "limit": "={{$parameter.limit || 50}}",
            "offset": "={{$parameter.offset || 0}}"
          },
          "url": "/api/v1/n8n/memories",
          "method": "GET"
        }
      },
      "description": "Get memories from your space",
      "resource": "memory"
    }
  ]

npm_readme:
  # Memara n8n Community Node

  ![Memara Logo](https://app.memara.io/logos/memara-logo.svg)

  n8n community package **n8n-nodes-memara** integrates Memara’s semantic memory API. Version **2.x** exposes **five action nodes** (one operation each) so you can pick the right step from the node panel without an operation dropdown. From **2.1.0** onward it also ships **three polling triggers** aligned with common Zapier-style patterns (with the API limitations described below).

  ## Features

  ### Action nodes

  - **Memara Create Memory** — store content with optional title and tags
  - **Memara Search Memories** — semantic search with limit
  - **Memara Update Memory** — update by memory ID
  - **Memara Delete Memory** — delete by memory ID
  - **Memara List Memories** — paginated list (limit / offset)

  ### Polling triggers (2.1+)

  - **Memara Trigger: New Memory** — polls `GET /api/v1/n8n/memories`; first successful poll establishes a baseline (no run), then new items are detected by `created_at` and same-second `id` handling within the configured list window.
  - **Memara Trigger: Memory Updated** — best-effort: compares a fingerprint of list fields per memory **only for memories returned in the current list window**; not a guarantee for the entire space.
  - **Memara Trigger: Search Match** — polls `POST /api/v1/n8n/search`; emits memories whose ids newly appear in the top-N search results. **Similarity scores are not returned** on this API path, so threshold filtering is not supported.

  **Shared credentials** — one **Memara API** credential for all nodes and triggers.

  **AI tools** — action nodes are usable as tools where your n8n version supports it (triggers are not tools).

  ### Polling costs and limits

  Each poll is a real Memara API call and counts toward your plan limits. Triggers only see memories inside the **fetched page** (`limit` ≤ 100 for list, ≤ 50 for search). If more new memories arrive between polls than fit in that window, some may not be observed—design workflows and limits accordingly.

  ## Installation

  ### Option 1: Community Nodes (recommended)

  1. In n8n: **Settings** → **Community Nodes**
  2. Install package: `n8n-nodes-memara`
  3. Restart n8n if prompted

  ### Option 2: npm

  ```bash
  npm install n8n-nodes-memara
  ```

  ### Option 3: Local development

  ```bash
  git clone https://github.com/memara-memory/n8n-nodes-memara.git
  cd n8n-nodes-memara
  npm install
  npm run build
  npm link

  cd ~/.n8n/nodes
  npm link n8n-nodes-memara
  ```

  ## Configuration

  ### 1. API key

  1. Open [Memara](https://app.memara.io) → **Settings** → **API Keys**
  2. Create a key (format `mk_live_...`)

  ### 2. Credential in n8n

  1. Create credential **Memara API**
  2. Paste **API Key**
  3. Optionally override **Base URL** (default `https://api.memara.io`)
  4. Test the connection

  ### 3. Add nodes to a workflow

  1. **Add node** and search for **Memara**
  2. Choose an **action** node (**Memara Create Memory**, **Memara Search Memories**, etc.) or a **trigger** (**Memara Trigger: New Memory**, etc.)
  3. Attach the same **Memara API** credential to each node

  ## Migrating from v1.x

  v1 shipped a single node with internal type `memara` and parameters `resource`, `operation`, and operation-specific fields.

  **v2 removes that node.** Workflows break until you replace each old node with the matching v2 node:

  | v1 `operation` | v2 node | Internal type (`type` in JSON) |
  |----------------|---------|--------------------------------|
  | Create | Memara Create Memory | `memaraCreateMemory` |
  | Search | Memara Search Memories | `memaraSearchMemories` |
  | Update | Memara Update Memory | `memaraUpdateMemory` |
  | Delete | Memara Delete Memory | `memaraDeleteMemory` |
  | List | Memara List Memories | `memaraListMemories` |

  Triggers (2.1+):

  | Trigger | Internal type (`type` in JSON) |
  |---------|----------------------------------|
  | New Memory | `memaraTriggerNewMemory` |
  | Memory Updated | `memaraTriggerMemoryUpdated` |
  | Search Match | `memaraTriggerSearchMatch` |

  Remove `resource` and `operation` from parameters; keep only the fields that node needs (same names as before: `content`, `title`, `tags`, `memoryId`, `query`, `limit`, `offset`).

  **Search / List output:** Each run still produces **one item** whose `json` is the **array of memories** (same shape as v1’s search/list output for typical workflows).

  ## Usage examples (parameters)

  ### Create (Memara Create Memory)

  ```json
  {
    "content": "Customer reported billing issue #12345. Resolved with 10% credit.",
    "title": "Customer issue resolution",
    "tags": "customer-service, billing"
  }
  ```

  ### Search (Memara Search Memories)

  ```json
  {
    "query": "billing problems with customers",
    "limit": 5
  }
  ```

  ### Update (Memara Update Memory)

  ```json
  {
    "memoryId": "mem_...",
    "content": "Updated content",
    "title": "Optional title",
    "tags": "tag1, tag2"
  }
  ```

  ### Delete (Memara Delete Memory)

  ```json
  {
    "memoryId": "mem_..."
  }
  ```

  ### List (Memara List Memories)

  ```json
  {
    "limit": 50,
    "offset": 0
  }
  ```

  ## Common workflow patterns

  1. **Support KB:** Webhook → **Memara Search Memories** → branch on results → **Memara Create Memory** for new resolutions.
  2. **Content assist:** Schedule or external trigger → **Memara Search Memories** → Code / LLM → **Memara Create Memory**.
  3. **React to new memories:** **Memara Trigger: New Memory** → notify Slack / CRM / internal API (each item is one memory payload plus `_memaraTrigger`).

  Example workflow JSON: [`workflows/customer-support-example.json`](workflows/customer-support-example.json). **Polling trigger starter:** [`workflows/new-memory-trigger-example.json`](workflows/new-memory-trigger-example.json).

  ## Parameters reference

  | Node | Required | Optional |
  |------|----------|----------|
  | Create Memory | `content` | `title`, `tags` |
  | Search Memories | `query` | `limit` (default 10); emits **one output item per memory** |
  | Update Memory | `memoryId`, `content` | `title`, `tags` |
  | Delete Memory | `memoryId` | — |
  | List Memories | — | `limit` (default 50), `offset` (default 0); emits **one output item per memory** |
  | Trigger: New Memory | — | `limit`, `tags`, `source`, `minImportance` |
  | Trigger: Memory Updated | — | `limit`, `tags`, `source`, `minImportance` |
  | Trigger: Search Match | `query` | `limit`, `workflowId`, `filtersJson` |

  ## Troubleshooting

  - **Invalid API key:** Confirm key in Memara dashboard; default API URL is `https://api.memara.io`.
  - **Node not listed:** Reinstall the package, restart n8n, check `npm list n8n-nodes-memara`.

  **Docs:** [memara.io/docs/integrations/n8n](https://memara.io/docs/integrations/n8n) · **Support:** [support@memara.io](mailto:support@memara.io)

  ## Development

  ### Local (no Docker)

  ```bash
  git clone https://github.com/memara-memory/n8n-nodes-memara.git
  cd n8n-nodes-memara
  npm install
  npm run build
  npm run verify:pack
  npm run lint
  ```

  ### Docker (recommended parity with CI / publish)

  Uses [`docker-compose.n8n.yml`](docker-compose.n8n.yml) and [`scripts/docker-n8n.sh`](scripts/docker-n8n.sh). From **`packages/memara-n8n-node`**:

  | Goal | Command |
  |------|---------|
  | Start n8n + dev container | `./scripts/docker-n8n.sh dev` or `npm run docker:dev` |
  | Build inside container | `./scripts/docker-n8n.sh build` or `npm run docker:build` |
  | Lint | `./scripts/docker-n8n.sh lint` or `npm run docker:lint` |
  | Lint with autofix | `./scripts/docker-n8n.sh lintfix` or `npm run docker:lintfix` |
  | Prettier | `./scripts/docker-n8n.sh format` or `npm run docker:format` |
  | CI gate (build + verify tarball + lint) | `./scripts/docker-n8n.sh ci` or `npm run docker:ci` |
  | npm pack tarball | `./scripts/docker-n8n.sh pack` or `npm run docker:pack` |
  | Publish to npm | `./scripts/docker-n8n.sh publish` (see below) |
  | Verify GitHub PAT | `./scripts/docker-n8n.sh github-verify-pat` or `npm run docker:github-verify-pat` |
  | Mirror package to public GitHub `main` | `./scripts/docker-n8n.sh github-sync` or `npm run docker:github-sync` |
  | Push release tag `v*` to public GitHub | `./scripts/docker-n8n.sh github-tag` or `npm run docker:github-tag` |

  After a local build, **`npm run verify:pack`** runs `npm pack` and checks the archive for unexpected paths (for example stray third-party `dist` artifacts). The same step runs inside **`docker-n8n.sh ci`** before lint.

  **n8n community verification scanner** (queries the **public npm** package `n8n-nodes-memara`—useful after you publish a version):

  ```bash
  npm run docker:scan-npm
  # or locally: npm run scan:npm
  ```

  ### Team: mirror to GitHub from the monorepo (same idea as Memara Python SDK)

  Maintainers can sync this directory to **[memara-memory/n8n-nodes-memara](https://github.com/memara-memory/n8n-nodes-memara)** using Docker: git runs **inside** `memara-n8n-dev` in an ephemeral **`/tmp`** clone, populated with **`tar`** from **`/app`** (the bind-mounted package). You do **not** need a nested `.git` under `packages/memara-n8n-node`, and you do **not** need the memara monorepo git root to equal this folder.

  1. Put a **fine-grained PAT** (Contents read/write on that repo; for releases also **Releases** write when using `publish-release`) in **`packages/memara-n8n-node/.env.github`** (single line).
  2. From **`packages/memara-n8n-node`**:

  ```bash
  ./scripts/docker-n8n.sh github-verify-pat
  ./scripts/docker-n8n.sh github-sync
  # non-interactive:
  ./scripts/docker-n8n.sh github-sync --yes
  # after sync, push annotated tag v<version> from package.json:
  ./scripts/docker-n8n.sh github-tag --yes
  ```

  `github-sync` excludes build secrets and artifacts (`.env*`, `dist`, `node_modules`, etc.); the public repo receives **sources** so GitHub Actions or local builds can produce `dist`.

  ### One-shot: CI, GitHub mirror, npm, and GitHub Release

  From **`packages/memara-n8n-node`** (including inside the **memara** monorepo): bump and **commit** `package.json` version, then:

  1. **`packages/memara-n8n-node/.env.github`** — GitHub PAT as above (needs **Releases** permission for the API step in `publish-release`).
  2. **`packages/memara-n8n-node/.env.npm`** — npm token (same as publish below).

  ```bash
  ./scripts/docker-n8n.sh publish-release
  # or: npm run docker:publish-release
  # or: ./scripts/release-publish.sh --yes
  ./scripts/docker-n8n.sh publish-release --yes
  ```

  This runs **Docker CI** (`build` → `verify:pack` → `lint`), **`github-sync`** (mirror to public `main`), **`github-tag`**, **`publish`** to npm, then creates a **GitHub Release** on the host via the REST API (PAT never printed).

  If this package lives inside a parent git repo, **uncommitted changes under `packages/memara-n8n-node`** must be clean before `publish-release` runs (paths are scoped to that directory).

  ### Publish to npm via Docker

  Publishing is **manual** (nothing is published from CI in this repo unless you run it). Bump **`package.json` version**, then:

  1. Put your npm access token in **`packages/memara-n8n-node/.env.npm`** (single line, no variable name). The file is gitignored.
  2. From **`packages/memara-n8n-node`**:

  ```bash
  ./scripts/docker-n8n.sh publish
  # or: npm run docker:publish
  # non-interactive:
  ./scripts/docker-n8n.sh publish --yes
  ```

  The script starts **`memara-n8n-dev`** if needed, runs `npm run build` in the container, then publishes using a temporary npm userconfig so your token is not written to the repo’s `package.json` or a persistent `.npmrc`.

  ### GitHub Actions and npm provenance (n8n verified nodes)

  For **n8n Cloud verified** community nodes, npm expects **provenance** from **GitHub Actions** (see [Submit your node for verification](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/#submit-your-node-for-verification-by-n8n)). This package includes [`.github/workflows/publish-npm.yml`](.github/workflows/publish-npm.yml), which publishes with `npm publish --access public --provenance` when you publish a **GitHub Release** (or run the workflow manually).

  1. In the npm package settings, connect a **Trusted Publisher** to **`memara-memory/n8n-nodes-memara`** (or your fork) and this workflow, so OIDC can authenticate publishes where possible.
  2. Add repository secret **`NPM_TOKEN`** with a granular **Automation** token that can publish `n8n-nodes-memara` (required until Trusted Publisher fully replaces token auth for your account).
  3. Keep **GitHub `package.json` version and git tags** aligned with each npm release so reviewers can verify source.

  **If publish fails with `403` / two-factor authentication:** npm requires either an interactive publish with OTP, or a **granular access token** that includes **Publish** for `n8n-nodes-memara` and the **“Bypass two-factor authentication”** option (or equivalent automation permission). Classic tokens alone are often blocked when 2FA is enabled on the account.

  ## License

  MIT — see [LICENSE.md](LICENSE.md).

  ---

  Made with care by the [Memara](https://memara.io) team.

ai_documentation_summary:
  {"purpose":"The Memara n8n node integrates Memara's semantic memory system to store, retrieve, and search memories using AI-powered natural language queries within organized memory spaces.","capabilities":["Create memories with content, title, and tags","Search memories using natural language queries","Update existing memories by memory ID","Delete memories by memory ID","List all memories","Create memory spaces for organization","List available memory spaces","Semantic search with configurable result limits","API key authentication"],"authentication":"API key required (format: mk_live_...)","commonUseCases":["Customer support knowledge base with issue resolution tracking","Content creation assistant with contextual search","Lead qualification system with historical comparison","Personal or team knowledge management","Automated documentation generation from interactions"],"limitations":["Requires Memara API key and account access","Search results limited to 1-100 items","Requires n8n version 1.0+","Memory spaces must be created in Memara dashboard first","No built-in error handling or retry logic mentioned"],"relatedNodes":["HTTP Request","Webhook","Code","Email","Slack"]}


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

updated_at: 2026-07-14 14:40:33
author_name: payfunnels
author_github_url: https://github.com/Payfunnels/
npm_package_name: n8n-nodes-payfunnels
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:33.270Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "payment",
      "options": [
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Subscription",
          "value": "subscription"
        },
        {
          "name": "One Time Setup Fee",
          "value": "oneTimeSetupFees"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List payments",
          "description": "List payments"
        },
        {
          "name": "Refund",
          "value": "refund",
          "action": "Refund payment",
          "description": "Refund a payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List subscriptions",
          "description": "List subscriptions"
        },
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel subscription",
          "description": "Cancel a subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subscription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List one time setup fees",
          "description": "Retrieves a list of one time setup fees based on filters like page and limit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "oneTimeSetupFees"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "List payments",
      "description": "List payments",
      "resource": "payment"
    },
    {
      "name": "Refund",
      "value": "refund",
      "action": "Refund payment",
      "description": "Refund a payment",
      "resource": "payment"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List subscriptions",
      "description": "List subscriptions",
      "resource": "subscription"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel subscription",
      "description": "Cancel a subscription",
      "resource": "subscription"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List one time setup fees",
      "description": "Retrieves a list of one time setup fees based on filters like page and limit",
      "resource": "oneTimeSetupFees"
    }
  ]

npm_readme:
  # n8n-nodes-payfunnels

  This is the official n8n community node for [PayFunnels](https://www.payfunnels.com/).

  PayFunnels—an all-in-one online payment solution and platform. Collect payments, manage subscriptions, and engage customers seamlessly.

  By using this node, you will be able to integrate Payfunnels events 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)
  [Resources](#resources)  

  ## Installation

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

  ## Operations

  ### Payment Link
  - Payment Link Created
  - Payment Link Updated
  - Payment Link Deleted

  ### Payment
  - Payment Success
  - Payment Failed
  - First Recurring Payment
  - Refund Payment
  - List Payments

  ### Subscription
  - List Subscriptions
  - Cancel Subscription

  ### One Time Setup Fees
  - One Time Setup Fees Created
  - One Time Setup Fees Updated
  - One Time Setup Fees Deleted
  - List One Time Setup Fees

  ## Credentials

  You can obtain the credentials from your Payfunnels dashboard. Go to `Billings -> Integrations -> n8n`.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Payfunnels API documentation](https://api.payfunnels.com/api/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with PayFunnels to manage payment links, process payments, handle subscriptions, and track one-time setup fees within automated workflows.","capabilities":["Create payment links","Update payment links","Delete payment links","Process successful payments","Handle failed payments","Manage first recurring payments","Process refunds","List all payments","List subscriptions","Cancel subscriptions"],"authentication":"API key required (obtained from Payfunnels dashboard under Billings -> Integrations -> n8n)","commonUseCases":["Automating payment link generation for marketing campaigns","Managing recurring subscription billing cycles","Processing refunds and handling failed payments automatically","Tracking one-time setup fees for service onboarding"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-omnara.omnara
package_name: n8n-nodes-omnara
display_name: Omnara
description: Send messages to users via Omnara - a web and mobile platform for human-AI communication
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ksarangmath
author_github_url: https://github.com/omnara-ai/omnara.git
npm_package_name: n8n-nodes-omnara
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:33.270Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message",
          "description": "Send messages to Omnara agents"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Manage agent sessions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send message",
          "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue"
        },
        {
          "name": "Send and Wait",
          "value": "sendAndWait",
          "action": "Send message and wait for response",
          "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "end",
      "options": [
        {
          "name": "End",
          "value": "end",
          "action": "End agent session",
          "description": "End an agent session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send message",
      "description": "Send a non-blocking message to the user (for status updates, progress reports, or sharing your thought process). Use this when you want to inform the user but do not need their response to continue",
      "resource": "message"
    },
    {
      "name": "Send and Wait",
      "value": "sendAndWait",
      "action": "Send message and wait for response",
      "description": "Send a message and wait for the user's response (for questions, approvals, or conversations). Use this when you need the user's input to proceed with your task",
      "resource": "message"
    },
    {
      "name": "End",
      "value": "end",
      "action": "End agent session",
      "description": "End an agent session",
      "resource": "session"
    }
  ]

npm_readme:
  # n8n-nodes-omnara

  The best human-in-the-loop node for n8n, built for seamless human-agent interaction. Perfect for approval workflows and real-time agent conversations.

  [Omnara](https://omnara.com) lets you monitor and guide AI agents without the noise. View your agent's full thought process through our web and mobile apps with smart notifications - only get alerted when your input is needed. Need urgent responses? Enable email and SMS notifications with zero setup. Stay in control while automation runs.

  ## Installation

  ### Community Node (Recommended)

  ```bash
  npm install n8n-nodes-omnara
  ```

  Or in n8n, go to **Settings** > **Community Nodes** and search for `n8n-nodes-omnara`.

  ### Manual Installation

  1. Clone or download this repository
  2. In the repository folder, run:
     ```bash
     npm install
     npm run build
     ```
  3. Copy the `dist` folder to your n8n custom nodes folder
  4. Restart n8n

  ### Development Installation

  For development and testing:

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # For development with auto-rebuild
  npm run dev

  # Link to n8n for testing
  npm link
  # In your n8n installation:
  npm link n8n-nodes-omnara
  ```

  ## Getting Started

  ### 1. Get Your API Key

  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click on your email in the bottom left corner
  3. Click "API Keys"
  4. Create a new API key and copy it

  ### 2. Add Omnara Credentials in n8n

  1. In n8n, go to Credentials → Add Credential → Omnara API
  2. Paste your API key
  3. Leave the API URL as default (unless you have a custom deployment)
  4. Save the credentials

  ### 3. Important: Agent Instance ID and Agent Type

  **Every Omnara node in your workflow needs:**
  - **Agent Instance ID**: A unique UUID for each workflow run (same across all nodes in one run)
  - **Agent Type**: The name of your agent on the Omnara dashboard (same across all nodes)

  ⚠️ **Critical**: Use the SAME agent instance ID and agent type across ALL Omnara nodes in a single workflow run!

  ## Workflow Setup

  ### Option A: Trigger with Webhook (Recommended)

  This lets you start workflows from the Omnara dashboard.

  **Step 1: Set up n8n Webhook**
  1. Add a **Webhook** node as your trigger
  2. Set it to **POST** method
  3. Copy the webhook URL (looks like: `https://your-n8n.com/webhook/xxx`)

  **Step 2: Configure Omnara Dashboard**
  1. Go to [Omnara Dashboard](https://omnara.com/dashboard)
  2. Click the **+ New Instance** button (top left)
  3. Paste your webhook URL
  4. Create your agent type
  5. Send a message to trigger your workflow

  **Step 3: Use Webhook Data in Omnara Nodes**
  The webhook provides these values - use them in ALL your Omnara nodes:
  - **Agent Instance ID**: `{{ $('Webhook').item.json.body.agent_instance_id }}`
  - **Agent Type**: `{{ $('Webhook').item.json.body.agent_type }}`

  The webhook also provides:
  - **Prompt**: `{{ $('Webhook').item.json.body.prompt }}` - This is the message you entered in Omnara dashboard. Use it as input for your workflow if needed.

  ### Option B: Trigger Without Webhook

  For workflows triggered by other events (cron, manual, other apps).

  **Requirements:**
  1. Generate a unique UUID for Agent Instance ID (use Expression: `{{ $uuid() }}`)
  2. Choose an agent type name (e.g., "customer_support", "code_reviewer")
  3. Store these in Set node variables
  4. Use the SAME values across all Omnara nodes in the workflow

  **Example Setup:**
  ```
  Trigger → Set Node (store UUID & agent type) → Your Workflow → Omnara Nodes
  ```

  In Set node:
  - `agent_instance_id`: `{{ $uuid() }}`
  - `agent_type`: "your_agent_name"

  Then reference in all Omnara nodes:
  - **Agent Instance ID**: `{{ $('Set').item.json.agent_instance_id }}`
  - **Agent Type**: `{{ $('Set').item.json.agent_type }}`

  ## Operations

  ### Message Resource

  #### Send Message (Non-blocking)
  Send status updates and progress reports to users without waiting for a response. Perfect for AI agents to share their thought process, progress updates, or informational messages while continuing to work.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance (creates new if doesn't exist)
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Status update or informational message (workflow continues immediately)
  - **Additional Options**:
    - Send Email/SMS/Push: Notification preferences

  #### Send and Wait (Blocking)
  Send a question or request and WAIT for the user's response. Essential for AI agents that need human input, approvals, or answers to continue their task. The workflow pauses until the user responds via the Omnara web/mobile app.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance
  - **Agent Type**: Type of agent (e.g., 'claude_code', 'cursor')
  - **Message**: Question or request that requires user response (workflow pauses until answered)
  - **Wait Options**:
    - Timeout: How long to wait (default 24 hours)
    - **Sync Mode (For AI Agents)**: Enable synchronous polling mode for AI Agent compatibility
      - Sync Timeout: Max wait time in sync mode (default 2 hours, max 48 hours)
      - Poll Interval: How often to check for responses (default 5 seconds)
  - **Additional Options**: Same as Send Message

  **How it works:**

  *Normal Mode (for regular workflows):*
  1. Sends message to Omnara with `requires_user_input: true`
  2. Generates a webhook URL and stores it with the message
  3. Pauses workflow execution
  4. When user responds in Omnara dashboard, workflow resumes with the response

  *Sync Mode (for AI Agent tools):*
  1. Sends message to Omnara
  2. Polls for responses every 5 seconds
  3. Returns immediately when response received
  4. Works within AI Agent execution context (avoids async/await issues)

  ### Session Resource

  #### End Session
  End an agent session and mark it as completed.

  **Parameters:**
  - **Agent Instance ID**: The ID of the agent instance session to end

  ## Usage Examples

  ### Basic Message Send
  ```javascript
  // Send a status update to your agent
  {
    "resource": "message",
    "operation": "send",
    "agentInstanceId": "agent-123",
    "content": "Build completed successfully"
  }
  ```

  ### Approval Workflow (Regular)
  ```javascript
  // Ask for approval and wait for response
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-456",
    "agentType": "claude_code",
    "message": "Deploy to production? Please approve or decline.",
    "options": {
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### AI Agent Tool Usage (Sync Mode)
  ```javascript
  // Use sync mode when calling from AI Agent tools
  {
    "resource": "message",
    "operation": "sendAndWait",
    "agentInstanceId": "agent-789",
    "agentType": "claude_code",
    "message": "What changes should I make to the database schema?",
    "options": {
      "syncMode": true,
      "syncTimeout": 600,  // Wait up to 10 minutes
      "pollInterval": 5,   // Check every 5 seconds
      "sendEmail": true,
      "sendPush": true
    }
  }
  ```

  ### End Session
  ```javascript
  // Mark agent session as completed
  {
    "resource": "session",
    "operation": "end",
    "agentInstanceId": "agent-789"
  }
  ```

  ## Agent Tool Support

  This node is configured with `usableAsTool: true`, making it available as a tool for AI agents in n8n. 

  **Important**: When using Send and Wait as an AI Agent tool, you MUST enable **Sync Mode** in the options. This solves the async/await limitations of AI Agents in n8n.

  AI Agents can:
  - Send status updates
  - Ask for human input and wait for responses (using Sync Mode)
  - Manage agent sessions

  ### Why Sync Mode?
  Regular Send and Wait uses `putExecutionToWait()` which doesn't work properly in AI Agent context due to n8n's architecture. Sync Mode polls for responses synchronously, allowing AI Agents to wait for human responses without timing out or returning prematurely.

  ## Webhook Integration

  The Send and Wait operation uses n8n's built-in webhook functionality:
  - Webhook URLs are automatically generated by n8n
  - Omnara stores the webhook URL and triggers it when users respond
  - Workflows resume with the user's response data
  - Supports timeout configuration (max 7 days)

  ## Error Handling

  The node includes comprehensive error handling:
  - Authentication failures
  - Invalid agent instance IDs
  - Timeout handling for wait operations
  - Network errors and API issues

  All operations support the "Continue On Fail" option in n8n.

  ## Development

  ### Building
  ```bash
  npm run build
  ```

  ### Linting
  ```bash
  npm run lint
  npm run lint:fix
  ```

  ### Code Formatting
  ```bash
  npm run format
  ```

  ## Resources

  - [Omnara GitHub](https://github.com/omnara-ai/omnara)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  MIT

  ## Support & Feedback

  Our mission is to make Omnara the best platform for human-in-the-loop workflows and human-AI collaboration. We're actively improving and would love your input!

  - **Issues & feature requests**: [GitHub Issues](https://github.com/omnara-ai/omnara/issues) or contact@omnara.com
  - **Questions & support**: contact@omnara.com

  Share your ideas on how we can make human-AI interaction better!

ai_documentation_summary:
  {"purpose":"This n8n node enables human-in-the-loop workflows by allowing AI agents to send messages to users via the Omnara platform for approvals, feedback, or status updates.","capabilities":["Send non-blocking status updates and progress reports","Send blocking messages requiring user response with wait functionality","Support for email, SMS, and push notifications","Synchronous polling mode for AI Agent compatibility","Session management (start and end)","Webhook-triggered workflows from Omnara dashboard"],"authentication":"API Key required (configured via n8n Credentials)","commonUseCases":["Human approval workflows","AI agent feedback collection","Real-time human-agent interaction","Progress reporting to users","Customer support agent monitoring"],"limitations":["Requires consistent Agent Instance ID and Agent Type across all nodes in a single workflow run","Blocking mode pauses workflow execution until user responds","Requires manual UUID generation for non-webhook triggered workflows","Sync mode has configurable timeout limits (max 48 hours)"],"relatedNodes":["Webhook","Set","Credentials","Expression"]}


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

updated_at: 2026-07-14 14:40:33
author_name: outscraper-api
author_github_url: https://github.com/outscraper/
npm_package_name: n8n-nodes-outscraper
npm_version: 0.2.9
community_fetched_at: 2026-07-14T14:40:33.271Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "googleMaps",
      "options": [
        {
          "name": "AI Scraper",
          "value": "aiScraper"
        },
        {
          "name": "Airbnb",
          "value": "airbnb"
        },
        {
          "name": "AppStore",
          "value": "appStore"
        },
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Company Insight",
          "value": "companyInsights"
        },
        {
          "name": "Company Website Finder",
          "value": "companyWebsiteFinder"
        },
        {
          "name": "Email Validator",
          "value": "emailValidator"
        },
        {
          "name": "Emails & Contact",
          "value": "emailsAndContacts"
        },
        {
          "name": "Expedia",
          "value": "expedia"
        },
        {
          "name": "G2 Review",
          "value": "g2Reviews"
        },
        {
          "name": "Geocoding",
          "value": "geocoding"
        },
        {
          "name": "GetApp Review",
          "value": "getAppReviews"
        },
        {
          "name": "Google Map",
          "value": "googleMaps"
        },
        {
          "name": "Google Search",
          "value": "googleSearch"
        },
        {
          "name": "Indeed",
          "value": "indeed"
        },
        {
          "name": "Phone Identity Finder",
          "value": "phoneIdentityFinder"
        },
        {
          "name": "Phones Owner",
          "value": "phonesOwners"
        },
        {
          "name": "Product Hunt",
          "value": "productHunt"
        },
        {
          "name": "Similarweb",
          "value": "similarweb"
        },
        {
          "name": "Target Review",
          "value": "targetReviews"
        },
        {
          "name": "TikTok Profile",
          "value": "tiktokProfiles"
        },
        {
          "name": "TripAdvisor",
          "value": "tripadvisor"
        },
        {
          "name": "Trustpilot",
          "value": "trustpilot"
        },
        {
          "name": "Twitter Profile",
          "value": "twitterProfiles"
        },
        {
          "name": "Universal AI Scraper",
          "value": "universalScraper"
        },
        {
          "name": "Walmart Review",
          "value": "walmartReviews"
        },
        {
          "name": "WebPage Screenshoter",
          "value": "webPageScreenshoter"
        },
        {
          "name": "Whitepages Addresses Scraper",
          "value": "whitepagesAddresses"
        },
        {
          "name": "Yellow Pages Search",
          "value": "yellowPagesSearch"
        },
        {
          "name": "Yelp",
          "value": "yelp"
        },
        {
          "name": "YouTube",
          "value": "youtube"
        },
        {
          "name": "Zillow",
          "value": "zillow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for businesses on google maps",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/maps/search-v3",
              "method": "GET"
            }
          },
          "description": "Search for businesses on Google Maps"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews for a place on google maps",
          "routing": {
            "request": {
              "url": "/maps/reviews-v3",
              "method": "GET"
            }
          },
          "description": "Get reviews for a place on Google Maps"
        },
        {
          "name": "Get Photos",
          "value": "photos",
          "action": "Get photos for a place on google maps",
          "routing": {
            "request": {
              "url": "/maps/photos-v3",
              "method": "GET"
            }
          },
          "description": "Get photos for a place on Google Maps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleMaps"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on google",
          "routing": {
            "request": {
              "url": "/google-search-v3",
              "method": "GET"
            }
          },
          "description": "Search on Google"
        },
        {
          "name": "Search Careers",
          "value": "searchCareers",
          "action": "Search for career listings on google",
          "routing": {
            "request": {
              "url": "/google-search-careers",
              "method": "GET"
            }
          },
          "description": "Search for career listings on Google"
        },
        {
          "name": "Search Events",
          "value": "searchEvents",
          "action": "Search for events on google",
          "routing": {
            "request": {
              "url": "/google-search-events",
              "method": "GET"
            }
          },
          "description": "Search for events on Google"
        },
        {
          "name": "Search Images",
          "value": "searchImages",
          "action": "Search for images on google",
          "routing": {
            "request": {
              "url": "/google-search-images-v2",
              "method": "GET"
            }
          },
          "description": "Search for images on Google"
        },
        {
          "name": "Search News",
          "value": "searchNews",
          "action": "Search for news on google",
          "routing": {
            "request": {
              "url": "/google-search-news",
              "method": "GET"
            }
          },
          "description": "Search for news on Google"
        },
        {
          "name": "Search Shopping",
          "value": "searchShopping",
          "action": "Search for shopping products on google",
          "routing": {
            "request": {
              "url": "/google-search-shopping",
              "method": "GET"
            }
          },
          "description": "Search for shopping products on Google"
        },
        {
          "name": "Search Videos",
          "value": "searchVideos",
          "action": "Search for videos on google",
          "routing": {
            "request": {
              "url": "/google-search-videos",
              "method": "GET"
            }
          },
          "description": "Search for videos on Google"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "googleSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from G2",
          "routing": {
            "request": {
              "url": "/g2/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from G2"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "g2Reviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "business",
      "options": [
        {
          "name": "Get Business Info",
          "value": "business",
          "action": "Get business information from trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot",
              "method": "GET"
            }
          },
          "description": "Get business information from Trustpilot"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search businesses on trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot/search",
              "method": "GET"
            }
          },
          "description": "Search businesses on Trustpilot"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from trustpilot",
          "routing": {
            "request": {
              "url": "/trustpilot/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Trustpilot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "trustpilot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from trip advisor",
          "routing": {
            "request": {
              "url": "/tripadvisor-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from TripAdvisor"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search on trip advisor",
          "routing": {
            "request": {
              "url": "/tripadvisor-search",
              "method": "GET"
            }
          },
          "description": "Search on TripAdvisor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tripadvisor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on expedia",
          "routing": {
            "request": {
              "url": "/expedia/search",
              "method": "GET"
            }
          },
          "description": "Search on Expedia"
        },
        {
          "name": "Get Reviews",
          "value": "reviews",
          "action": "Get reviews from expedia",
          "routing": {
            "request": {
              "url": "/expedia/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Expedia"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "expedia"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for videos on you tube",
          "description": "Search for videos on YouTube"
        },
        {
          "name": "Channel",
          "value": "channel",
          "action": "Get you tube channel information",
          "description": "Get YouTube channel information"
        },
        {
          "name": "Comments",
          "value": "comments",
          "action": "Get comments from you tube videos",
          "description": "Get comments from YouTube videos"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "youtube"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on yelp",
          "routing": {
            "request": {
              "url": "/yelp-search",
              "method": "GET"
            }
          },
          "description": "Search on Yelp"
        },
        {
          "name": "Business",
          "value": "business",
          "action": "Get business information from yelp",
          "routing": {
            "request": {
              "url": "/yelp-business",
              "method": "GET"
            }
          },
          "description": "Get business information from Yelp"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from yelp businesses",
          "routing": {
            "request": {
              "url": "/yelp-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Yelp businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yelp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from product hunt",
          "routing": {
            "request": {
              "url": "/producthunt-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Product Hunt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productHunt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "jobSearch",
      "options": [
        {
          "name": "Job Search",
          "value": "jobSearch",
          "action": "Get jobs from indeed",
          "routing": {
            "request": {
              "url": "/indeed-jobs",
              "method": "GET"
            }
          },
          "description": "Get jobs from Indeed"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from indeed companies",
          "routing": {
            "request": {
              "url": "/indeed-reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Indeed companies"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "indeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on booking",
          "routing": {
            "request": {
              "url": "/booking/search",
              "method": "GET"
            }
          },
          "description": "Search results from Booking.com"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from booking",
          "routing": {
            "request": {
              "url": "/booking/reviews",
              "method": "GET"
            }
          },
          "description": "Get reviews from Booking.com hotels"
        },
        {
          "name": "Prices",
          "value": "prices",
          "action": "Get prices from booking",
          "routing": {
            "request": {
              "url": "/booking/prices",
              "method": "GET"
            }
          },
          "description": "Get prices from Booking.com hotels"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on zillow",
          "routing": {
            "request": {
              "url": "/zillow/search",
              "method": "GET"
            }
          },
          "description": "Returns listings from Zillow"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zillow"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from appstore",
          "routing": {
            "request": {
              "url": "/appstore/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from AppStore apps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appStore"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "geocode",
      "options": [
        {
          "name": "Geocode",
          "value": "geocode",
          "action": "Geocode address",
          "routing": {
            "request": {
              "url": "/geocoding",
              "method": "GET"
            }
          },
          "description": "Translates human-readable addresses into locations on the map"
        },
        {
          "name": "Reverse Geocode",
          "value": "reverseGeocode",
          "action": "Reverse geocode coordinates",
          "routing": {
            "request": {
              "url": "/reverse-geocoding",
              "method": "GET"
            }
          },
          "description": "Translate locations on the map into human-readable addresses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "geocoding"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInsights",
      "options": [
        {
          "name": "Get Insights",
          "value": "getInsights",
          "action": "Get company insights",
          "routing": {
            "request": {
              "url": "/company-insights",
              "method": "GET"
            }
          },
          "description": "Finds company details such as revenue, size, founding year, public status, etc"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companyInsights"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape web page with ai",
          "routing": {
            "request": {
              "url": "/ai-scraper",
              "method": "POST"
            }
          },
          "description": "Extracts structured data from a webpage using AI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiScraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape web page",
          "routing": {
            "request": {
              "url": "/universal-scraper",
              "method": "GET"
            }
          },
          "description": "Extracts the data you need from any web page by using AI"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "universalScraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "screenshot",
      "options": [
        {
          "name": "Screenshot",
          "value": "screenshot",
          "action": "Screenshot web page",
          "routing": {
            "request": {
              "url": "/screenshoter",
              "method": "GET"
            }
          },
          "description": "Captures high-quality screenshots of any webpage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webPageScreenshoter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search on airbnb",
          "routing": {
            "request": {
              "url": "/airbnb/search",
              "method": "GET"
            }
          },
          "description": "Returns search results from Airbnb"
        },
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from airbnb",
          "routing": {
            "request": {
              "url": "/airbnb/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from Airbnb accommodations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "airbnb"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from walmart",
          "routing": {
            "request": {
              "url": "/walmart/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from a list of Walmart products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "walmartReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from target",
          "routing": {
            "request": {
              "url": "/target/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from a list of Target products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "targetReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "profiles",
      "options": [
        {
          "name": "Profiles",
          "value": "profiles",
          "action": "Get twitter profiles",
          "routing": {
            "request": {
              "url": "/twitter/profiles",
              "method": "GET"
            }
          },
          "description": "Returns information from the list of Twitter profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "twitterProfiles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "profiles",
      "options": [
        {
          "name": "Profiles",
          "value": "profiles",
          "action": "Get tik tok profiles",
          "routing": {
            "request": {
              "url": "/tiktok/profiles",
              "method": "GET"
            }
          },
          "description": "Returns information from the list of TikTok profiles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tiktokProfiles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reviews",
      "options": [
        {
          "name": "Reviews",
          "value": "reviews",
          "action": "Get reviews from get app",
          "routing": {
            "request": {
              "url": "/getapp/reviews",
              "method": "GET"
            }
          },
          "description": "Returns reviews from GetApp apps"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "getAppReviews"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search yellow pages",
          "routing": {
            "request": {
              "url": "/yellowpages-search",
              "method": "GET"
            }
          },
          "description": "Returns search results from Yellow Pages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yellowPagesSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findIdentity",
      "options": [
        {
          "name": "Find Identity",
          "value": "findIdentity",
          "action": "Find phone identity",
          "routing": {
            "request": {
              "url": "/whitepages-phones",
              "method": "GET"
            }
          },
          "description": "Returns insights about phone number owners (name, address, etc.)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phoneIdentityFinder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeAddresses",
      "options": [
        {
          "name": "Scrape Addresses",
          "value": "scrapeAddresses",
          "action": "Scrape whitepages addresses",
          "routing": {
            "request": {
              "url": "/whitepages-addresses",
              "method": "GET"
            }
          },
          "description": "Returns insights about addresses and their residents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whitepagesAddresses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOwners",
      "options": [
        {
          "name": "Get Owners",
          "value": "getOwners",
          "action": "Get phone owners",
          "routing": {
            "request": {
              "url": "/phones-owners",
              "method": "GET"
            }
          },
          "description": "Returns insights about phone number owners (name, address, etc.)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phonesOwners"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getData",
      "options": [
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get similarweb data",
          "routing": {
            "request": {
              "url": "/similarweb",
              "method": "GET"
            }
          },
          "description": "Returns data from Similarweb businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "similarweb"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findWebsite",
      "options": [
        {
          "name": "Find Website",
          "value": "findWebsite",
          "action": "Find company website",
          "routing": {
            "request": {
              "url": "/company-website-finder",
              "method": "GET"
            }
          },
          "description": "Returns data from Company Website Finder businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companyWebsiteFinder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findEmailsAndContacts",
      "options": [
        {
          "name": "Find Emails & Contacts",
          "value": "findEmailsAndContacts",
          "action": "Find emails and contacts",
          "routing": {
            "request": {
              "url": "/emails-and-contacts",
              "method": "GET"
            }
          },
          "description": "Finds email addresses, social links, and phones from domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailsAndContacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validateEmail",
      "options": [
        {
          "name": "Validate Email",
          "value": "validateEmail",
          "action": "Validate email",
          "routing": {
            "request": {
              "url": "/email-validator",
              "method": "GET"
            }
          },
          "description": "Validates email addresses for deliverability"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailValidator"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search",
      "value": "search",
      "action": "Search for businesses on google maps",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/maps/search-v3",
          "method": "GET"
        }
      },
      "description": "Search for businesses on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews for a place on google maps",
      "routing": {
        "request": {
          "url": "/maps/reviews-v3",
          "method": "GET"
        }
      },
      "description": "Get reviews for a place on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Get Photos",
      "value": "photos",
      "action": "Get photos for a place on google maps",
      "routing": {
        "request": {
          "url": "/maps/photos-v3",
          "method": "GET"
        }
      },
      "description": "Get photos for a place on Google Maps",
      "resource": "googleMaps"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on google",
      "routing": {
        "request": {
          "url": "/google-search-v3",
          "method": "GET"
        }
      },
      "description": "Search on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Careers",
      "value": "searchCareers",
      "action": "Search for career listings on google",
      "routing": {
        "request": {
          "url": "/google-search-careers",
          "method": "GET"
        }
      },
      "description": "Search for career listings on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Events",
      "value": "searchEvents",
      "action": "Search for events on google",
      "routing": {
        "request": {
          "url": "/google-search-events",
          "method": "GET"
        }
      },
      "description": "Search for events on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Images",
      "value": "searchImages",
      "action": "Search for images on google",
      "routing": {
        "request": {
          "url": "/google-search-images-v2",
          "method": "GET"
        }
      },
      "description": "Search for images on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search News",
      "value": "searchNews",
      "action": "Search for news on google",
      "routing": {
        "request": {
          "url": "/google-search-news",
          "method": "GET"
        }
      },
      "description": "Search for news on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Shopping",
      "value": "searchShopping",
      "action": "Search for shopping products on google",
      "routing": {
        "request": {
          "url": "/google-search-shopping",
          "method": "GET"
        }
      },
      "description": "Search for shopping products on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Search Videos",
      "value": "searchVideos",
      "action": "Search for videos on google",
      "routing": {
        "request": {
          "url": "/google-search-videos",
          "method": "GET"
        }
      },
      "description": "Search for videos on Google",
      "resource": "googleSearch"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from G2",
      "routing": {
        "request": {
          "url": "/g2/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from G2",
      "resource": "g2Reviews"
    },
    {
      "name": "Get Business Info",
      "value": "business",
      "action": "Get business information from trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot",
          "method": "GET"
        }
      },
      "description": "Get business information from Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search businesses on trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot/search",
          "method": "GET"
        }
      },
      "description": "Search businesses on Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from trustpilot",
      "routing": {
        "request": {
          "url": "/trustpilot/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Trustpilot",
      "resource": "trustpilot"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from trip advisor",
      "routing": {
        "request": {
          "url": "/tripadvisor-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from TripAdvisor",
      "resource": "tripadvisor"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on trip advisor",
      "routing": {
        "request": {
          "url": "/tripadvisor-search",
          "method": "GET"
        }
      },
      "description": "Search on TripAdvisor",
      "resource": "tripadvisor"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on expedia",
      "routing": {
        "request": {
          "url": "/expedia/search",
          "method": "GET"
        }
      },
      "description": "Search on Expedia",
      "resource": "expedia"
    },
    {
      "name": "Get Reviews",
      "value": "reviews",
      "action": "Get reviews from expedia",
      "routing": {
        "request": {
          "url": "/expedia/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Expedia",
      "resource": "expedia"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search for videos on you tube",
      "description": "Search for videos on YouTube",
      "resource": "youtube"
    },
    {
      "name": "Channel",
      "value": "channel",
      "action": "Get you tube channel information",
      "description": "Get YouTube channel information",
      "resource": "youtube"
    },
    {
      "name": "Comments",
      "value": "comments",
      "action": "Get comments from you tube videos",
      "description": "Get comments from YouTube videos",
      "resource": "youtube"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on yelp",
      "routing": {
        "request": {
          "url": "/yelp-search",
          "method": "GET"
        }
      },
      "description": "Search on Yelp",
      "resource": "yelp"
    },
    {
      "name": "Business",
      "value": "business",
      "action": "Get business information from yelp",
      "routing": {
        "request": {
          "url": "/yelp-business",
          "method": "GET"
        }
      },
      "description": "Get business information from Yelp",
      "resource": "yelp"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from yelp businesses",
      "routing": {
        "request": {
          "url": "/yelp-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Yelp businesses",
      "resource": "yelp"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from product hunt",
      "routing": {
        "request": {
          "url": "/producthunt-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Product Hunt",
      "resource": "productHunt"
    },
    {
      "name": "Job Search",
      "value": "jobSearch",
      "action": "Get jobs from indeed",
      "routing": {
        "request": {
          "url": "/indeed-jobs",
          "method": "GET"
        }
      },
      "description": "Get jobs from Indeed",
      "resource": "indeed"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from indeed companies",
      "routing": {
        "request": {
          "url": "/indeed-reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Indeed companies",
      "resource": "indeed"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on booking",
      "routing": {
        "request": {
          "url": "/booking/search",
          "method": "GET"
        }
      },
      "description": "Search results from Booking.com",
      "resource": "booking"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from booking",
      "routing": {
        "request": {
          "url": "/booking/reviews",
          "method": "GET"
        }
      },
      "description": "Get reviews from Booking.com hotels",
      "resource": "booking"
    },
    {
      "name": "Prices",
      "value": "prices",
      "action": "Get prices from booking",
      "routing": {
        "request": {
          "url": "/booking/prices",
          "method": "GET"
        }
      },
      "description": "Get prices from Booking.com hotels",
      "resource": "booking"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on zillow",
      "routing": {
        "request": {
          "url": "/zillow/search",
          "method": "GET"
        }
      },
      "description": "Returns listings from Zillow",
      "resource": "zillow"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from appstore",
      "routing": {
        "request": {
          "url": "/appstore/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from AppStore apps",
      "resource": "appStore"
    },
    {
      "name": "Geocode",
      "value": "geocode",
      "action": "Geocode address",
      "routing": {
        "request": {
          "url": "/geocoding",
          "method": "GET"
        }
      },
      "description": "Translates human-readable addresses into locations on the map",
      "resource": "geocoding"
    },
    {
      "name": "Reverse Geocode",
      "value": "reverseGeocode",
      "action": "Reverse geocode coordinates",
      "routing": {
        "request": {
          "url": "/reverse-geocoding",
          "method": "GET"
        }
      },
      "description": "Translate locations on the map into human-readable addresses",
      "resource": "geocoding"
    },
    {
      "name": "Get Insights",
      "value": "getInsights",
      "action": "Get company insights",
      "routing": {
        "request": {
          "url": "/company-insights",
          "method": "GET"
        }
      },
      "description": "Finds company details such as revenue, size, founding year, public status, etc",
      "resource": "companyInsights"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape web page with ai",
      "routing": {
        "request": {
          "url": "/ai-scraper",
          "method": "POST"
        }
      },
      "description": "Extracts structured data from a webpage using AI",
      "resource": "aiScraper"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape web page",
      "routing": {
        "request": {
          "url": "/universal-scraper",
          "method": "GET"
        }
      },
      "description": "Extracts the data you need from any web page by using AI",
      "resource": "universalScraper"
    },
    {
      "name": "Screenshot",
      "value": "screenshot",
      "action": "Screenshot web page",
      "routing": {
        "request": {
          "url": "/screenshoter",
          "method": "GET"
        }
      },
      "description": "Captures high-quality screenshots of any webpage",
      "resource": "webPageScreenshoter"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search on airbnb",
      "routing": {
        "request": {
          "url": "/airbnb/search",
          "method": "GET"
        }
      },
      "description": "Returns search results from Airbnb",
      "resource": "airbnb"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from airbnb",
      "routing": {
        "request": {
          "url": "/airbnb/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from Airbnb accommodations",
      "resource": "airbnb"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from walmart",
      "routing": {
        "request": {
          "url": "/walmart/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from a list of Walmart products",
      "resource": "walmartReviews"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from target",
      "routing": {
        "request": {
          "url": "/target/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from a list of Target products",
      "resource": "targetReviews"
    },
    {
      "name": "Profiles",
      "value": "profiles",
      "action": "Get twitter profiles",
      "routing": {
        "request": {
          "url": "/twitter/profiles",
          "method": "GET"
        }
      },
      "description": "Returns information from the list of Twitter profiles",
      "resource": "twitterProfiles"
    },
    {
      "name": "Profiles",
      "value": "profiles",
      "action": "Get tik tok profiles",
      "routing": {
        "request": {
          "url": "/tiktok/profiles",
          "method": "GET"
        }
      },
      "description": "Returns information from the list of TikTok profiles",
      "resource": "tiktokProfiles"
    },
    {
      "name": "Reviews",
      "value": "reviews",
      "action": "Get reviews from get app",
      "routing": {
        "request": {
          "url": "/getapp/reviews",
          "method": "GET"
        }
      },
      "description": "Returns reviews from GetApp apps",
      "resource": "getAppReviews"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search yellow pages",
      "routing": {
        "request": {
          "url": "/yellowpages-search",
          "method": "GET"
        }
      },
      "description": "Returns search results from Yellow Pages",
      "resource": "yellowPagesSearch"
    },
    {
      "name": "Find Identity",
      "value": "findIdentity",
      "action": "Find phone identity",
      "routing": {
        "request": {
          "url": "/whitepages-phones",
          "method": "GET"
        }
      },
      "description": "Returns insights about phone number owners (name, address, etc.)",
      "resource": "phoneIdentityFinder"
    },
    {
      "name": "Scrape Addresses",
      "value": "scrapeAddresses",
      "action": "Scrape whitepages addresses",
      "routing": {
        "request": {
          "url": "/whitepages-addresses",
          "method": "GET"
        }
      },
      "description": "Returns insights about addresses and their residents",
      "resource": "whitepagesAddresses"
    },
    {
      "name": "Get Owners",
      "value": "getOwners",
      "action": "Get phone owners",
      "routing": {
        "request": {
          "url": "/phones-owners",
          "method": "GET"
        }
      },
      "description": "Returns insights about phone number owners (name, address, etc.)",
      "resource": "phonesOwners"
    },
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get similarweb data",
      "routing": {
        "request": {
          "url": "/similarweb",
          "method": "GET"
        }
      },
      "description": "Returns data from Similarweb businesses",
      "resource": "similarweb"
    },
    {
      "name": "Find Website",
      "value": "findWebsite",
      "action": "Find company website",
      "routing": {
        "request": {
          "url": "/company-website-finder",
          "method": "GET"
        }
      },
      "description": "Returns data from Company Website Finder businesses",
      "resource": "companyWebsiteFinder"
    },
    {
      "name": "Find Emails & Contacts",
      "value": "findEmailsAndContacts",
      "action": "Find emails and contacts",
      "routing": {
        "request": {
          "url": "/emails-and-contacts",
          "method": "GET"
        }
      },
      "description": "Finds email addresses, social links, and phones from domains",
      "resource": "emailsAndContacts"
    },
    {
      "name": "Validate Email",
      "value": "validateEmail",
      "action": "Validate email",
      "routing": {
        "request": {
          "url": "/email-validator",
          "method": "GET"
        }
      },
      "description": "Validates email addresses for deliverability",
      "resource": "emailValidator"
    }
  ]

npm_readme:
  # n8n-nodes-outscraper

  ![Outscraper Logo](https://outscraper.com/wp-content/uploads/2023/11/cropped-logo-long-e1628850886215.webp)

  This is an n8n community node for integrating with the [Outscraper API](https://outscraper.com). It allows you to automate data extraction from various online platforms including Google Maps, Google Search, YouTube, Trustpilot, TripAdvisor, Expedia, and G2 Reviews.

  [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)  
  [Example Workflows](#example-workflows)  
  [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.

  ### Community Nodes (Recommended)

  For users on n8n v0.187+:

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-outscraper` in the input field
  4. Agree to the risks of using community nodes
  5. Click **Install**

  ### Manual Installation

  To install the node manually:

  1. Open your n8n installation folder
  2. Go to the `node_modules` folder
  3. Create a new folder called `n8n-nodes-outscraper`
  4. Download the [latest release](https://github.com/outscraper/n8n-nodes-outscraper/releases) and extract it into the folder
  5. Restart n8n

  ### npm Installation

  To install via npm:

  ```bash
  npm install n8n-nodes-outscraper
  ```

  ## Operations

  The Outscraper node supports the following platforms and operations:

  ### Google Maps
  - **Search**: Search for businesses on Google Maps
  - **Reviews**: Get reviews for businesses on Google Maps
  - **Photos**: Get photos for businesses on Google Maps

  ### Google Search
  - **Search**: Perform Google search queries

  ### Emails & Contacts
  - **Find Emails & Contacts**: Find email addresses, social links, and phones from domains

  ### Email Validator
  - **Validate Email**: Validate email addresses before outreach

  ## Credentials

  To use this node, you need an Outscraper API key.

  1. Create an account on [Outscraper](https://app.outscraper.com/signup)
  2. Navigate to the [account page](https://app.outscraper.com/account/api) to get your API key
  3. In n8n, create new credentials of type **Outscraper API**
  4. Enter your API key and the API URL (default: https://api.outscraper.cloud)

  ## Usage

  1. Add the Outscraper node to your workflow
  2. Select the resource (e.g., Google Maps) you want to work with
  3. Choose the operation (e.g., Search, Reviews)
  4. Configure the required parameters
  5. Connect the node to the rest of your workflow

  ### Example: Search for Businesses on Google Maps

  1. Add the Outscraper node
  2. Select **Google Maps** as the resource
  3. Select **Search** as the operation
  4. Enter your search query (e.g., "coffee shops in New York")
  5. Set additional parameters like limit, async mode, etc.
  6. Run the workflow to get the search results

  ## Example Workflows

  Importable n8n workflow templates are available in the [`examples`](examples) folder:

  * **AI-powered lead generation pipeline**: Google Maps search, contact enrichment, email validation, lead scoring, and CRM push
  * **Review sentiment analysis workflow**: Review extraction, OpenAI sentiment analysis, and Slack notification
  * **Competitor monitoring agent**: Scheduled Google Maps scraping, snapshot comparison, AI summary, and Slack alert

  ## Resources

  * [Outscraper Website](https://outscraper.com)
  * [Outscraper API Documentation](https://app.outscraper.com/api-docs)
  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## Version History

  ### 0.2.8 (2026-04-30)
  * Changed the refreshed n8n node type version to integer `2` so n8n accepts the updated resource options

  ### 0.2.7 (2026-04-30)
  * Added node type version `1.1` so n8n refreshes the updated Outscraper resource list

  ### 0.2.6 (2026-04-30)
  * Added Email Validator as a first-class Outscraper node resource
  * Updated the lead generation example to use Outscraper credentials for email validation

  ### 0.2.5 (2026-04-30)
  * Fixed the lead generation example normalizer to handle nested Outscraper response arrays such as `data: [[...businesses]]`

  ### 0.2.4 (2026-04-30)
  * Added importable n8n workflow examples for lead generation, review sentiment analysis, and competitor monitoring
  * Included the `examples` folder in the npm package

  ### 0.2.3 (2026-04-30)
  * Added nested JSON schema builder support with path syntax
  * Use dots for objects and `[]` for arrays, for example `products[].title`
  * Supported building arrays of objects such as product lists with title, price, and description fields

  ### 0.2.2 (2026-04-30)
  * Fixed AI Scraper request routing to use `POST /ai-scraper`
  * Added optional JSON schema support with visual field builder and raw JSON modes
  * Added `Use Schema` toggle so schema fields stay hidden until needed
  * Updated AI Scraper request body to send `query`, `prompt`, `schema`, `async`, and `webhook`

  ### 0.2.1 (2026-02-19)
  * New service AI Scraper

  ### 0.2.0 (2026-01-22)
  * Fixed screenshot service

  ### 0.1.7 (2025-07-17)
  * Added Emails & Contacts scraper

  ### 0.1.6 (2025-07-17)
  * Fixed support for operations

  ### 0.1.5 (2025-06-27)
  * Added support for geocoding operations (Geocode and Reverse Geocode)
  * Enhanced operations with prices functionality
  * Improved field configurations and routing options

  ### 0.1.4 (2025-06-26)

  * Enhanced field configurations with additional parameters

  ### 0.1.3 (2025-06-26)

  * Improved routing and display options

  ### 0.1.2 (2025-06-26)

  * Refactored node structure for better maintainability
  * Updated field configurations with improved descriptions
  * Enhanced error handling and validation

  ### 0.1.1 (2025-06-25)

  * Fixed minor bugs and improved stability
  * Updated dependencies and documentation

  ### 0.1.0 (2025-06-25)

  * Initial release
  * Support for Google Maps, Google Search

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Automates data extraction from online platforms including Google Maps, Google Search, YouTube, Trustpilot, TripAdvisor, Expedia, and G2 Reviews via the Outscraper API.","capabilities":["Search businesses on Google Maps","Retrieve reviews from Google Maps","Extract photos from Google Maps","Perform Google Search queries","Scrape emails and contacts","Geocode and reverse geocoding","Access AI Scraper service","Retrieve prices and ratings data"],"authentication":"API key required","commonUseCases":["Automated business research and competitor analysis","Review monitoring and sentiment analysis","Lead generation via email and contact scraping","Market research using geocoding and location data"],"limitations":["Community node (requires accepting risks)","Requires separate Outscraper account and API key"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: @cometapi-dev/n8n-nodes-cometapi.cometApi
package_name: @cometapi-dev/n8n-nodes-cometapi
display_name: CometAPI
description: Interact with CometAPI large language models
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: tensornull
author_github_url: https://github.com/cometapi-dev/n8n-nodes-cometapi.git
npm_package_name: @cometapi-dev/n8n-nodes-cometapi
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.273Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-cometapi

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

  CometAPI is a powerful AI language model service that provides OpenAI-compatible API endpoints for various large language models, enabling developers to integrate advanced AI capabilities into their applications.

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

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

  ## Installation

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

  ## Operations

  The CometAPI node supports chat completions using various AI language models:

  ### Chat Completions
  - **Model Selection**: Choose from available models (default: gpt-4o-mini)
  - **Message Management**: Support for multi-turn conversations with user, assistant, and system roles
  - **Advanced Parameters**:
    - **Temperature**: Control randomness (0-2, default: 0.7)
    - **Max Tokens**: Set maximum response length (up to 32,768 tokens)
    - **Top P**: Control diversity via nucleus sampling (0-1, default: 1)
    - **Frequency Penalty**: Reduce repetition (-2 to 2, default: 0)
    - **Presence Penalty**: Encourage new topics (-2 to 2, default: 0)
    - **Stream**: Enable streaming responses (default: false)

  ## Credentials

  To use this node, you need to authenticate with CometAPI:

  1. Sign up for a CometAPI account at [CometAPI Console](https://api.cometapi.com/console/token)
  2. Generate an API key from your console dashboard
  3. In n8n, create new CometAPI credentials and enter your API key

  ### Authentication Method
  - **API Key**: Bearer token authentication using your CometAPI key

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Node.js version**: 20.15 or higher
  - **Tested with**: Latest stable versions of n8n

  This node is compatible with all n8n deployment methods including:
  - Self-hosted n8n instances
  - n8n Cloud
  - Docker deployments

  ## Usage

  ### Basic Chat Completion

  1. Add the CometAPI node to your workflow
  2. Configure your CometAPI credentials
  3. Set up your messages:
     - **System message**: Define the AI's behavior (optional)
     - **User message**: Your prompt or question
  4. Choose your preferred model (e.g., gpt-4o-mini)
  5. Execute the workflow

  ### Example Use Cases

  - **Content Generation**: Create articles, summaries, or creative content
  - **Data Analysis**: Analyze and interpret data with AI assistance
  - **Customer Support**: Build intelligent chatbots and support systems
  - **Code Review**: Get AI feedback on code quality and suggestions
  - **Translation**: Translate text between different languages

  ### Advanced Configuration

  For more control over the AI responses, you can adjust:
  - **Temperature**: Lower values (0.1-0.3) for more focused responses, higher values (0.7-1.0) for more creative outputs
  - **Max Tokens**: Limit response length to control costs and response time
  - **Frequency/Presence Penalty**: Fine-tune repetition and topic diversity

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [CometAPI Documentation](https://api.cometapi.com/doc)
  * [CometAPI Console](https://api.cometapi.com/console/token)

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with CometAPI's large language models by providing OpenAI-compatible API endpoints for chat completions.","capabilities":["Chat completions with model selection","Multi-turn conversation support (user, assistant, system roles)","Temperature control for response randomness","Max token limit configuration","Top P nucleus sampling for diversity","Frequency and presence penalty adjustments","Streaming response support","System prompt configuration"],"authentication":"API Key (Bearer token)","commonUseCases":["Content generation (articles, summaries, creative writing)","Data analysis and interpretation","Customer support chatbots","Code review and suggestions","Text translation"],"limitations":[],"relatedNodes":["OpenAI node","Anthropic node","Generic AI node","Chatbot node"]}


node_type: n8n-nodes-dart.dart
package_name: n8n-nodes-dart
display_name: Dart
description: Dart streamlines project management so your team can get back to work that matters.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: dart-software
author_github_url: https://github.com/its-dart/
npm_package_name: n8n-nodes-dart
npm_version: 0.2.6
community_fetched_at: 2026-07-14T14:40:33.273Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Agent",
      "options": [
        {
          "name": "Agent",
          "value": "Agent"
        },
        {
          "name": "Attachment",
          "value": "Attachment"
        },
        {
          "name": "Comment",
          "value": "Comment"
        },
        {
          "name": "Config",
          "value": "Config"
        },
        {
          "name": "Dartboard",
          "value": "Dartboard"
        },
        {
          "name": "Doc",
          "value": "Doc"
        },
        {
          "name": "Folder",
          "value": "Folder"
        },
        {
          "name": "Help Center Article",
          "value": "Help Center Article"
        },
        {
          "name": "Skill",
          "value": "Skill"
        },
        {
          "name": "Task",
          "value": "Task"
        },
        {
          "name": "View",
          "value": "View"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Agent",
      "options": [
        {
          "name": "Create Agent",
          "value": "Create Agent",
          "action": "Create a new agent",
          "routing": {
            "request": {
              "url": "=/agents",
              "method": "POST"
            }
          },
          "description": "Create a new agent in the workspace with a name and optional description or instructions"
        },
        {
          "name": "Delete Agent",
          "value": "Delete Agent",
          "action": "Delete an agent",
          "routing": {
            "request": {
              "url": "=/agents/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an agent by its ID"
        },
        {
          "name": "Get Agent",
          "value": "Get Agent",
          "action": "Retrieve an existing agent",
          "routing": {
            "request": {
              "url": "=/agents/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing agent by its ID, including its name and current description or instructions"
        },
        {
          "name": "List Agents",
          "value": "List Agents",
          "action": "List all agents",
          "routing": {
            "request": {
              "url": "=/agents/list",
              "method": "GET"
            }
          },
          "description": "List all agents in the workspace. Agents are AI assistants that can be assigned tasks and have customizable instructions."
        },
        {
          "name": "Update Agent",
          "value": "Update Agent",
          "action": "Update an agent",
          "routing": {
            "request": {
              "url": "=/agents/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an agent's name and/or description. Only the fields provided will be changed. The agent is identified by its ID in the URL."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Task Comment",
      "options": [
        {
          "name": "Add Task Comment",
          "value": "Add Task Comment",
          "action": "Create a new comment",
          "routing": {
            "request": {
              "url": "=/comments",
              "method": "POST"
            }
          },
          "description": "Record a new comment that the user intends to add to a given task. This will save the comment in Dart for later access, search, etc."
        },
        {
          "name": "List Comments",
          "value": "List Comments",
          "action": "List comments",
          "routing": {
            "request": {
              "url": "=/comments/list",
              "method": "GET"
            }
          },
          "description": "List comments for a task with filtering options. Filter by author, text content, or date range. Sort by date or hierarchical thread order. Task ID required. Supports pagination."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Config",
      "options": [
        {
          "name": "Get Config",
          "value": "Get Config",
          "action": "Get user space configuration",
          "routing": {
            "request": {
              "url": "=/config",
              "method": "GET"
            }
          },
          "description": "Get information about the user's space, including all of the possible values that can be provided to other endpoints"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Config"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Dartboard",
      "options": [
        {
          "name": "Get Dartboard",
          "value": "Get Dartboard",
          "action": "Retrieve an existing dartboard",
          "routing": {
            "request": {
              "url": "=/dartboards/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing dartboard. This will return the dartboard's information, including the title and description."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Dartboard"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Doc",
      "options": [
        {
          "name": "Create Doc",
          "value": "Create Doc",
          "action": "Create a new doc",
          "routing": {
            "request": {
              "url": "=/docs",
              "method": "POST"
            }
          },
          "description": "Record a new doc that the user intends to write down. This will save the doc in Dart for later access, search, etc. By default the created doc will be in the Docs folder. More information can be included in the text."
        },
        {
          "name": "Delete Doc",
          "value": "Delete Doc",
          "action": "Delete an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Move an existing doc to the trash, where it can be recovered if needed. Nothing else about the doc will be changed."
        },
        {
          "name": "Get Doc",
          "value": "Get Doc",
          "action": "Retrieve an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing doc. This will return the doc's information, including the title, folder, text and others."
        },
        {
          "name": "List Docs",
          "value": "List Docs",
          "action": "List docs",
          "routing": {
            "request": {
              "url": "=/docs/list",
              "method": "GET"
            }
          },
          "description": "List docs with filtering and search capabilities. Filter by folder, title, text content, or use full-text search. Sort by creation/update date or title. Supports pagination."
        },
        {
          "name": "Update Doc",
          "value": "Update Doc",
          "action": "Update an existing doc",
          "routing": {
            "request": {
              "url": "=/docs/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update certain properties of an existing doc. This will save the doc in Dart for later access, search, etc. Any properties that are not specified will not be changed."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Folder",
      "options": [
        {
          "name": "Get Folder",
          "value": "Get Folder",
          "action": "Retrieve an existing folder",
          "routing": {
            "request": {
              "url": "=/folders/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing folder. This will return the folder's information, including the title, description, all docs within it, and others."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Folder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "List Help Center Articles",
      "options": [
        {
          "name": "List Help Center Articles",
          "value": "List Help Center Articles",
          "action": "List help center articles by query",
          "routing": {
            "request": {
              "url": "=/help-center-articles/list",
              "method": "GET"
            }
          },
          "description": "Search for up to two help center articles by their semantic similarity to a short (1-5 word) query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Help Center Article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Skill",
      "options": [
        {
          "name": "Create Skill",
          "value": "Create Skill",
          "action": "Create a new skill",
          "routing": {
            "request": {
              "url": "=/skills",
              "method": "POST"
            }
          },
          "description": "Create a new custom skill with a title and instructions in markdown. The skill will be available to all workspace members."
        },
        {
          "name": "Delete Skill",
          "value": "Delete Skill",
          "action": "Delete an existing skill",
          "routing": {
            "request": {
              "url": "=/skills/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a skill by its ID. The skill will be permanently removed from the workspace."
        },
        {
          "name": "Get Skill",
          "value": "Get Skill",
          "action": "Retrieve an existing skill",
          "routing": {
            "request": {
              "url": "=/skills/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing skill by its ID. Returns the skill's title and instructions."
        },
        {
          "name": "List Skills",
          "value": "List Skills",
          "action": "List all skills",
          "routing": {
            "request": {
              "url": "=/skills/list",
              "method": "GET"
            }
          },
          "description": "List all skills in the workspace. Skills are user-defined instructions or templates for performing specific task types."
        },
        {
          "name": "Retrieve Skill By Title",
          "value": "Retrieve Skill By Title",
          "action": "Retrieve a skill by title",
          "routing": {
            "request": {
              "url": "=/skills/by-title",
              "method": "GET"
            }
          },
          "description": "Retrieve a skill by its title. Skills are user-defined instructions or templates for performing specific task types in the workspace. Returns the skill's title and instructions if found."
        },
        {
          "name": "Update Skill",
          "value": "Update Skill",
          "action": "Update an existing skill",
          "routing": {
            "request": {
              "url": "=/skills/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing skill's title and/or instructions. Only the fields provided will be updated. The skill is identified by its ID in the URL."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Task Time Tracking",
      "options": [
        {
          "name": "Add Task Time Tracking",
          "value": "Add Task Time Tracking",
          "action": "Add a time tracking entry to a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}/time-tracking",
              "method": "POST"
            }
          },
          "description": "Record an additional time tracking entry on a task and return the updated task with refreshed time tracking"
        },
        {
          "name": "Create Task",
          "value": "Create Task",
          "action": "Create a new task",
          "routing": {
            "request": {
              "url": "=/tasks",
              "method": "POST"
            }
          },
          "description": "Record a new task that the user intends to do. By default the task will be assigned to the current user, have an unstarted status, have no parent, and be in the default dartboard. More information can be included in the description."
        },
        {
          "name": "Delete Task",
          "value": "Delete Task",
          "action": "Delete an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Move an existing task to the trash, where it can be recovered if needed. Nothing else about the task will be changed."
        },
        {
          "name": "Get Task",
          "value": "Get Task",
          "action": "Retrieve an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing task. This will return the task's information, including the title, dartboard, status, description and others."
        },
        {
          "name": "List Tasks",
          "value": "List Tasks",
          "action": "List tasks",
          "routing": {
            "request": {
              "url": "=/tasks/list",
              "method": "GET"
            }
          },
          "description": "List tasks with powerful filtering options. Filter by dartboard, status, assignee, tags, priority, dates, completion state, view, and more. Supports pagination with limit/offset."
        },
        {
          "name": "Move Task",
          "value": "Move Task",
          "action": "Move a task within its dartboard",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}/move",
              "method": "POST"
            }
          },
          "description": "Move a task to a specific position within results sorted by the order field. Use afterTaskId to place the task after a specific task, or beforeTaskId to place it before one."
        },
        {
          "name": "Update Task",
          "value": "Update Task",
          "action": "Update an existing task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update properties of an existing task. For customProperties, use property NAME (not ID) as key. Get property names from workspace config. Example: {\"customTextProperty\": \"Some text\"}. Fields not provided are unchanged."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Add Task Attachment From Url",
      "options": [
        {
          "name": "Add Task Attachment From Url",
          "value": "Add Task Attachment From Url",
          "action": "Attach a file from a provided URL to a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter[\"id\"]}}/attachments/from-url",
              "method": "POST"
            }
          },
          "description": "Attach a file from a provided URL to a task. The file will be downloaded and attached asynchronously. This operation may take a few moments to complete."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get View",
      "options": [
        {
          "name": "Get View",
          "value": "Get View",
          "action": "Retrieve an existing view",
          "routing": {
            "request": {
              "url": "=/views/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing view. This will return the view's information, including the title, description, and others."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "View"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Create Webhook",
      "options": [
        {
          "name": "Create Webhook",
          "value": "Create Webhook",
          "action": "Create a new webhook",
          "routing": {
            "request": {
              "url": "=/webhooks",
              "method": "POST"
            }
          },
          "description": "Create a new webhook that sends selected workspace events to a URL"
        },
        {
          "name": "Delete Webhook",
          "value": "Delete Webhook",
          "action": "Delete an existing webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a webhook by its ID"
        },
        {
          "name": "Get Webhook",
          "value": "Get Webhook",
          "action": "Retrieve an existing webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve an existing webhook by its ID"
        },
        {
          "name": "List Webhooks",
          "value": "List Webhooks",
          "action": "List all webhooks",
          "routing": {
            "request": {
              "url": "=/webhooks/list",
              "method": "GET"
            }
          },
          "description": "List all webhooks in the workspace"
        },
        {
          "name": "Update Webhook",
          "value": "Update Webhook",
          "action": "Update an existing webhook",
          "routing": {
            "request": {
              "url": "=/webhooks/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing webhook. Only the fields provided will be updated."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /agents",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "Create Agent"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /agents/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "Get Agent"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /agents/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "Update Agent"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /agents/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "Delete Agent"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /agents/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Agent"
          ],
          "operation": [
            "List Agents"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /comments",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ],
          "operation": [
            "Add Task Comment"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /comments/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Comment"
          ],
          "operation": [
            "List Comments"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /config",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Config"
          ],
          "operation": [
            "Get Config"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /dartboards/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Dartboard"
          ],
          "operation": [
            "Get Dartboard"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /docs",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Create Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Get Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Update Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /docs/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "Delete Doc"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /docs/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Doc"
          ],
          "operation": [
            "List Docs"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /folders/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Folder"
          ],
          "operation": [
            "Get Folder"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /help-center-articles/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Help Center Article"
          ],
          "operation": [
            "List Help Center Articles"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /skills",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Create Skill"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /skills/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Get Skill"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /skills/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Update Skill"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /skills/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Delete Skill"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /skills/by-title",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "Retrieve Skill By Title"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /skills/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Skill"
          ],
          "operation": [
            "List Skills"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Create Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Get Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Update Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /tasks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Delete Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks/{ID}/attachments/from-url",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Attachment"
          ],
          "operation": [
            "Add Task Attachment From Url"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks/{ID}/move",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Move Task"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /tasks/{ID}/time-tracking",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "Add Task Time Tracking"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /tasks/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Task"
          ],
          "operation": [
            "List Tasks"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /views/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "View"
          ],
          "operation": [
            "Get View"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /webhooks",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ],
          "operation": [
            "Create Webhook"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /webhooks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ],
          "operation": [
            "Get Webhook"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "PUT /webhooks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ],
          "operation": [
            "Update Webhook"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "DELETE /webhooks/{ID}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ],
          "operation": [
            "Delete Webhook"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /webhooks/list",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Webhook"
          ],
          "operation": [
            "List Webhooks"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Create Agent",
      "value": "Create Agent",
      "action": "Create a new agent",
      "routing": {
        "request": {
          "url": "=/agents",
          "method": "POST"
        }
      },
      "description": "Create a new agent in the workspace with a name and optional description or instructions",
      "resource": "Agent"
    },
    {
      "name": "Delete Agent",
      "value": "Delete Agent",
      "action": "Delete an agent",
      "routing": {
        "request": {
          "url": "=/agents/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an agent by its ID",
      "resource": "Agent"
    },
    {
      "name": "Get Agent",
      "value": "Get Agent",
      "action": "Retrieve an existing agent",
      "routing": {
        "request": {
          "url": "=/agents/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing agent by its ID, including its name and current description or instructions",
      "resource": "Agent"
    },
    {
      "name": "List Agents",
      "value": "List Agents",
      "action": "List all agents",
      "routing": {
        "request": {
          "url": "=/agents/list",
          "method": "GET"
        }
      },
      "description": "List all agents in the workspace. Agents are AI assistants that can be assigned tasks and have customizable instructions.",
      "resource": "Agent"
    },
    {
      "name": "Update Agent",
      "value": "Update Agent",
      "action": "Update an agent",
      "routing": {
        "request": {
          "url": "=/agents/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an agent's name and/or description. Only the fields provided will be changed. The agent is identified by its ID in the URL.",
      "resource": "Agent"
    },
    {
      "name": "Add Task Comment",
      "value": "Add Task Comment",
      "action": "Create a new comment",
      "routing": {
        "request": {
          "url": "=/comments",
          "method": "POST"
        }
      },
      "description": "Record a new comment that the user intends to add to a given task. This will save the comment in Dart for later access, search, etc.",
      "resource": "Comment"
    },
    {
      "name": "List Comments",
      "value": "List Comments",
      "action": "List comments",
      "routing": {
        "request": {
          "url": "=/comments/list",
          "method": "GET"
        }
      },
      "description": "List comments for a task with filtering options. Filter by author, text content, or date range. Sort by date or hierarchical thread order. Task ID required. Supports pagination.",
      "resource": "Comment"
    },
    {
      "name": "Get Config",
      "value": "Get Config",
      "action": "Get user space configuration",
      "routing": {
        "request": {
          "url": "=/config",
          "method": "GET"
        }
      },
      "description": "Get information about the user's space, including all of the possible values that can be provided to other endpoints",
      "resource": "Config"
    },
    {
      "name": "Get Dartboard",
      "value": "Get Dartboard",
      "action": "Retrieve an existing dartboard",
      "routing": {
        "request": {
          "url": "=/dartboards/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing dartboard. This will return the dartboard's information, including the title and description.",
      "resource": "Dartboard"
    },
    {
      "name": "Create Doc",
      "value": "Create Doc",
      "action": "Create a new doc",
      "routing": {
        "request": {
          "url": "=/docs",
          "method": "POST"
        }
      },
      "description": "Record a new doc that the user intends to write down. This will save the doc in Dart for later access, search, etc. By default the created doc will be in the Docs folder. More information can be included in the text.",
      "resource": "Doc"
    },
    {
      "name": "Delete Doc",
      "value": "Delete Doc",
      "action": "Delete an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Move an existing doc to the trash, where it can be recovered if needed. Nothing else about the doc will be changed.",
      "resource": "Doc"
    },
    {
      "name": "Get Doc",
      "value": "Get Doc",
      "action": "Retrieve an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing doc. This will return the doc's information, including the title, folder, text and others.",
      "resource": "Doc"
    },
    {
      "name": "List Docs",
      "value": "List Docs",
      "action": "List docs",
      "routing": {
        "request": {
          "url": "=/docs/list",
          "method": "GET"
        }
      },
      "description": "List docs with filtering and search capabilities. Filter by folder, title, text content, or use full-text search. Sort by creation/update date or title. Supports pagination.",
      "resource": "Doc"
    },
    {
      "name": "Update Doc",
      "value": "Update Doc",
      "action": "Update an existing doc",
      "routing": {
        "request": {
          "url": "=/docs/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update certain properties of an existing doc. This will save the doc in Dart for later access, search, etc. Any properties that are not specified will not be changed.",
      "resource": "Doc"
    },
    {
      "name": "Get Folder",
      "value": "Get Folder",
      "action": "Retrieve an existing folder",
      "routing": {
        "request": {
          "url": "=/folders/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing folder. This will return the folder's information, including the title, description, all docs within it, and others.",
      "resource": "Folder"
    },
    {
      "name": "List Help Center Articles",
      "value": "List Help Center Articles",
      "action": "List help center articles by query",
      "routing": {
        "request": {
          "url": "=/help-center-articles/list",
          "method": "GET"
        }
      },
      "description": "Search for up to two help center articles by their semantic similarity to a short (1-5 word) query",
      "resource": "Help Center Article"
    },
    {
      "name": "Create Skill",
      "value": "Create Skill",
      "action": "Create a new skill",
      "routing": {
        "request": {
          "url": "=/skills",
          "method": "POST"
        }
      },
      "description": "Create a new custom skill with a title and instructions in markdown. The skill will be available to all workspace members.",
      "resource": "Skill"
    },
    {
      "name": "Delete Skill",
      "value": "Delete Skill",
      "action": "Delete an existing skill",
      "routing": {
        "request": {
          "url": "=/skills/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a skill by its ID. The skill will be permanently removed from the workspace.",
      "resource": "Skill"
    },
    {
      "name": "Get Skill",
      "value": "Get Skill",
      "action": "Retrieve an existing skill",
      "routing": {
        "request": {
          "url": "=/skills/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing skill by its ID. Returns the skill's title and instructions.",
      "resource": "Skill"
    },
    {
      "name": "List Skills",
      "value": "List Skills",
      "action": "List all skills",
      "routing": {
        "request": {
          "url": "=/skills/list",
          "method": "GET"
        }
      },
      "description": "List all skills in the workspace. Skills are user-defined instructions or templates for performing specific task types.",
      "resource": "Skill"
    },
    {
      "name": "Retrieve Skill By Title",
      "value": "Retrieve Skill By Title",
      "action": "Retrieve a skill by title",
      "routing": {
        "request": {
          "url": "=/skills/by-title",
          "method": "GET"
        }
      },
      "description": "Retrieve a skill by its title. Skills are user-defined instructions or templates for performing specific task types in the workspace. Returns the skill's title and instructions if found.",
      "resource": "Skill"
    },
    {
      "name": "Update Skill",
      "value": "Update Skill",
      "action": "Update an existing skill",
      "routing": {
        "request": {
          "url": "=/skills/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing skill's title and/or instructions. Only the fields provided will be updated. The skill is identified by its ID in the URL.",
      "resource": "Skill"
    },
    {
      "name": "Add Task Time Tracking",
      "value": "Add Task Time Tracking",
      "action": "Add a time tracking entry to a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}/time-tracking",
          "method": "POST"
        }
      },
      "description": "Record an additional time tracking entry on a task and return the updated task with refreshed time tracking",
      "resource": "Task"
    },
    {
      "name": "Create Task",
      "value": "Create Task",
      "action": "Create a new task",
      "routing": {
        "request": {
          "url": "=/tasks",
          "method": "POST"
        }
      },
      "description": "Record a new task that the user intends to do. By default the task will be assigned to the current user, have an unstarted status, have no parent, and be in the default dartboard. More information can be included in the description.",
      "resource": "Task"
    },
    {
      "name": "Delete Task",
      "value": "Delete Task",
      "action": "Delete an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Move an existing task to the trash, where it can be recovered if needed. Nothing else about the task will be changed.",
      "resource": "Task"
    },
    {
      "name": "Get Task",
      "value": "Get Task",
      "action": "Retrieve an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing task. This will return the task's information, including the title, dartboard, status, description and others.",
      "resource": "Task"
    },
    {
      "name": "List Tasks",
      "value": "List Tasks",
      "action": "List tasks",
      "routing": {
        "request": {
          "url": "=/tasks/list",
          "method": "GET"
        }
      },
      "description": "List tasks with powerful filtering options. Filter by dartboard, status, assignee, tags, priority, dates, completion state, view, and more. Supports pagination with limit/offset.",
      "resource": "Task"
    },
    {
      "name": "Move Task",
      "value": "Move Task",
      "action": "Move a task within its dartboard",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}/move",
          "method": "POST"
        }
      },
      "description": "Move a task to a specific position within results sorted by the order field. Use afterTaskId to place the task after a specific task, or beforeTaskId to place it before one.",
      "resource": "Task"
    },
    {
      "name": "Update Task",
      "value": "Update Task",
      "action": "Update an existing task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update properties of an existing task. For customProperties, use property NAME (not ID) as key. Get property names from workspace config. Example: {\"customTextProperty\": \"Some text\"}. Fields not provided are unchanged.",
      "resource": "Task"
    },
    {
      "name": "Add Task Attachment From Url",
      "value": "Add Task Attachment From Url",
      "action": "Attach a file from a provided URL to a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter[\"id\"]}}/attachments/from-url",
          "method": "POST"
        }
      },
      "description": "Attach a file from a provided URL to a task. The file will be downloaded and attached asynchronously. This operation may take a few moments to complete.",
      "resource": "Attachment"
    },
    {
      "name": "Get View",
      "value": "Get View",
      "action": "Retrieve an existing view",
      "routing": {
        "request": {
          "url": "=/views/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing view. This will return the view's information, including the title, description, and others.",
      "resource": "View"
    },
    {
      "name": "Create Webhook",
      "value": "Create Webhook",
      "action": "Create a new webhook",
      "routing": {
        "request": {
          "url": "=/webhooks",
          "method": "POST"
        }
      },
      "description": "Create a new webhook that sends selected workspace events to a URL",
      "resource": "Webhook"
    },
    {
      "name": "Delete Webhook",
      "value": "Delete Webhook",
      "action": "Delete an existing webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a webhook by its ID",
      "resource": "Webhook"
    },
    {
      "name": "Get Webhook",
      "value": "Get Webhook",
      "action": "Retrieve an existing webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve an existing webhook by its ID",
      "resource": "Webhook"
    },
    {
      "name": "List Webhooks",
      "value": "List Webhooks",
      "action": "List all webhooks",
      "routing": {
        "request": {
          "url": "=/webhooks/list",
          "method": "GET"
        }
      },
      "description": "List all webhooks in the workspace",
      "resource": "Webhook"
    },
    {
      "name": "Update Webhook",
      "value": "Update Webhook",
      "action": "Update an existing webhook",
      "routing": {
        "request": {
          "url": "=/webhooks/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing webhook. Only the fields provided will be updated.",
      "resource": "Webhook"
    }
  ]

npm_readme:
  <div align="center">
    <h1>Dart n8n Node</h1>
    <p>
      <a href="https://www.npmjs.com/package/n8n-nodes-dart"><img src="https://img.shields.io/npm/v/n8n-nodes-dart" alt="NPM"></a>
      <a href="LICENSE"><img src="https://img.shields.io/github/license/its-dart/n8n-nodes-dart" alt="License"></a>
    </p>
  </div>

  [Dart](https://dartai.com?nr=1) is Project Management powered by AI.

  `n8n-nodes-dart` is the Dart n8n community node. It enables direct integration with Dart through n8n workflows.

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

  ## Installation

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

  ## Credentials

  This node uses bearer token authentication with the Dart API. You'll need to:

  1. Sign up for a [Dart account](https://app.dartai.com)
  2. Get your API token from [your Dart profile](https://app.dartai.com/home?settings=account)
  3. Configure the Dart API credentials in n8n with your token

  ## Help and Resources

  - [Homepage](https://dartai.com/?nr=1)
  - [Web App](https://app.dartai.com/)
  - [Help Center](https://help.dartai.com/)
  - [Bugs and Features](https://app.dartai.com/p/r/JFyPnhL9En61)
  - [Library Source](https://github.com/its-dart/n8n-nodes-dart/)
  - [Chat on Discord](https://discord.gg/RExv8jEkSh)
  - Email us at [support@dartai.com](mailto:support@dartai.com)

  ## Contributing

  Contributions are welcome! Please open an issue or submit a pull request.

  ## License

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

ai_documentation_summary:
  {"purpose":"The Dart n8n node enables direct integration with the Dart AI project management platform, allowing users to manage projects and tasks within n8n workflows.","capabilities":["Project management automation","Task creation and updates","Team collaboration features","AI-powered project insights"],"authentication":"Bearer token authentication via API key","commonUseCases":["Automating project tracking in n8n","Integrating AI project management with existing workflows","Streamlining team collaboration tasks"],"limitations":["Requires manual API token setup from Dart dashboard"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-github","n8n-nodes-jira"]}


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

updated_at: 2026-07-14 14:40:33
author_name: matheins
author_github_url: https://github.com/steuerboard/n8n-nodes-steuerboard.git
npm_package_name: @steuerboard/n8n-nodes-steuerboard
npm_version: 1.8.0
community_fetched_at: 2026-07-14T14:40:33.275Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "client",
      "options": [
        {
          "name": "Admin User",
          "value": "adminUser"
        },
        {
          "name": "Client",
          "value": "client"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        },
        {
          "name": "Workspace Member",
          "value": "workspaceMember"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List accountant users",
          "routing": {
            "request": {
              "url": "=/admin/users",
              "method": "GET"
            }
          },
          "description": "Returns a paginated list of accountant users"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get an accountant user by ID",
          "routing": {
            "request": {
              "url": "=/admin/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Returns a single accountant user by ID"
        },
        {
          "name": "Invite",
          "value": "create",
          "action": "Invite an accountant user",
          "routing": {
            "request": {
              "url": "=/admin/users",
              "method": "POST"
            }
          },
          "description": "Invites a new accountant user and returns the created record"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an accountant user",
          "routing": {
            "request": {
              "url": "=/admin/users/{{$parameter.userId}}",
              "method": "PATCH"
            }
          },
          "description": "Updates an accountant user by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an accountant user",
          "routing": {
            "request": {
              "url": "=/admin/users/{{$parameter.userId}}",
              "method": "DELETE"
            }
          },
          "description": "Deletes an accountant user by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "adminUser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a client",
          "routing": {
            "request": {
              "url": "=/admin/clients",
              "method": "POST"
            }
          },
          "description": "Creates a new client for the accountant"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get a client by ID",
          "routing": {
            "request": {
              "url": "=/admin/clients/{{$parameter.clientId}}",
              "method": "GET"
            }
          },
          "description": "Returns a single client object by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List clients",
          "routing": {
            "request": {
              "url": "=/admin/clients",
              "method": "GET"
            }
          },
          "description": "Returns a list of clients"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a client",
          "routing": {
            "request": {
              "url": "=/admin/clients/{{$parameter.clientId}}",
              "method": "PATCH"
            }
          },
          "description": "Updates a client by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List users",
          "routing": {
            "request": {
              "url": "=/users",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a paginated list of client users"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get a user by ID",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a single client user by ID"
        },
        {
          "name": "Invite",
          "value": "create",
          "action": "Invite a user",
          "routing": {
            "request": {
              "url": "=/users",
              "method": "POST",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Invites a new client user and returns the created record"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "PATCH",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Updates a client user by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "DELETE",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Deletes a client user by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List workspaces",
          "routing": {
            "request": {
              "url": "=/workspaces",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a list of workspaces"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a workspace",
          "routing": {
            "request": {
              "url": "=/workspaces",
              "method": "POST",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Creates a new workspace and returns the created workspace"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get a workspace by ID",
          "routing": {
            "request": {
              "url": "=/workspaces/{{$parameter.workspaceId}}",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a single workspace object by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a workspace",
          "routing": {
            "request": {
              "url": "=/workspaces/{{$parameter.workspaceId}}",
              "method": "PATCH",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Updates a workspace by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List workspace members",
          "routing": {
            "request": {
              "url": "=/workspaces/{{$parameter.workspaceId}}/members",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns workspace members for a workspace"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a workspace member",
          "routing": {
            "request": {
              "url": "=/workspaces/{{$parameter.workspaceId}}/members",
              "method": "POST",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Creates a new workspace member"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Remove a workspace member",
          "routing": {
            "request": {
              "url": "=/workspaces/{{$parameter.workspaceId}}/members",
              "method": "DELETE",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Removes a workspace member from a workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspaceMember"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List files",
          "routing": {
            "request": {
              "url": "=/files",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a paginated list of files"
        },
        {
          "name": "Upload",
          "value": "create",
          "action": "Upload a file",
          "routing": {
            "request": {
              "url": "=/files",
              "method": "POST",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Uploads a new file"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get a file by ID",
          "routing": {
            "request": {
              "url": "=/files/{{$parameter.fileId}}",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a single file object by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a file",
          "routing": {
            "request": {
              "url": "=/files/{{$parameter.fileId}}",
              "method": "DELETE",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Deletes a file by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a file",
          "routing": {
            "request": {
              "url": "=/files/{{$parameter.fileId}}",
              "method": "PATCH",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Updates a file by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List tasks",
          "routing": {
            "request": {
              "url": "=/tasks",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a list of tasks"
        },
        {
          "name": "Get by ID",
          "value": "get",
          "action": "Get a task by ID",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "GET",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Returns a single task object by ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "routing": {
            "request": {
              "url": "=/tasks",
              "method": "POST",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Creates a new task"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "PATCH",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Updates an existing task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "DELETE",
              "headers": {
                "x-client-id": "={{ $parameter.clientId }}"
              }
            }
          },
          "description": "Deletes a task by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "List accountant users",
      "routing": {
        "request": {
          "url": "=/admin/users",
          "method": "GET"
        }
      },
      "description": "Returns a paginated list of accountant users",
      "resource": "adminUser"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get an accountant user by ID",
      "routing": {
        "request": {
          "url": "=/admin/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Returns a single accountant user by ID",
      "resource": "adminUser"
    },
    {
      "name": "Invite",
      "value": "create",
      "action": "Invite an accountant user",
      "routing": {
        "request": {
          "url": "=/admin/users",
          "method": "POST"
        }
      },
      "description": "Invites a new accountant user and returns the created record",
      "resource": "adminUser"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an accountant user",
      "routing": {
        "request": {
          "url": "=/admin/users/{{$parameter.userId}}",
          "method": "PATCH"
        }
      },
      "description": "Updates an accountant user by ID",
      "resource": "adminUser"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an accountant user",
      "routing": {
        "request": {
          "url": "=/admin/users/{{$parameter.userId}}",
          "method": "DELETE"
        }
      },
      "description": "Deletes an accountant user by ID",
      "resource": "adminUser"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a client",
      "routing": {
        "request": {
          "url": "=/admin/clients",
          "method": "POST"
        }
      },
      "description": "Creates a new client for the accountant",
      "resource": "client"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get a client by ID",
      "routing": {
        "request": {
          "url": "=/admin/clients/{{$parameter.clientId}}",
          "method": "GET"
        }
      },
      "description": "Returns a single client object by ID",
      "resource": "client"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List clients",
      "routing": {
        "request": {
          "url": "=/admin/clients",
          "method": "GET"
        }
      },
      "description": "Returns a list of clients",
      "resource": "client"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a client",
      "routing": {
        "request": {
          "url": "=/admin/clients/{{$parameter.clientId}}",
          "method": "PATCH"
        }
      },
      "description": "Updates a client by ID",
      "resource": "client"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List users",
      "routing": {
        "request": {
          "url": "=/users",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a paginated list of client users",
      "resource": "user"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get a user by ID",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a single client user by ID",
      "resource": "user"
    },
    {
      "name": "Invite",
      "value": "create",
      "action": "Invite a user",
      "routing": {
        "request": {
          "url": "=/users",
          "method": "POST",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Invites a new client user and returns the created record",
      "resource": "user"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "PATCH",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Updates a client user by ID",
      "resource": "user"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "DELETE",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Deletes a client user by ID",
      "resource": "user"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List workspaces",
      "routing": {
        "request": {
          "url": "=/workspaces",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a list of workspaces",
      "resource": "workspace"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a workspace",
      "routing": {
        "request": {
          "url": "=/workspaces",
          "method": "POST",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Creates a new workspace and returns the created workspace",
      "resource": "workspace"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get a workspace by ID",
      "routing": {
        "request": {
          "url": "=/workspaces/{{$parameter.workspaceId}}",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a single workspace object by ID",
      "resource": "workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a workspace",
      "routing": {
        "request": {
          "url": "=/workspaces/{{$parameter.workspaceId}}",
          "method": "PATCH",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Updates a workspace by ID",
      "resource": "workspace"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List workspace members",
      "routing": {
        "request": {
          "url": "=/workspaces/{{$parameter.workspaceId}}/members",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns workspace members for a workspace",
      "resource": "workspaceMember"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a workspace member",
      "routing": {
        "request": {
          "url": "=/workspaces/{{$parameter.workspaceId}}/members",
          "method": "POST",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Creates a new workspace member",
      "resource": "workspaceMember"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Remove a workspace member",
      "routing": {
        "request": {
          "url": "=/workspaces/{{$parameter.workspaceId}}/members",
          "method": "DELETE",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Removes a workspace member from a workspace",
      "resource": "workspaceMember"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List files",
      "routing": {
        "request": {
          "url": "=/files",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a paginated list of files",
      "resource": "file"
    },
    {
      "name": "Upload",
      "value": "create",
      "action": "Upload a file",
      "routing": {
        "request": {
          "url": "=/files",
          "method": "POST",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Uploads a new file",
      "resource": "file"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get a file by ID",
      "routing": {
        "request": {
          "url": "=/files/{{$parameter.fileId}}",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a single file object by ID",
      "resource": "file"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a file",
      "routing": {
        "request": {
          "url": "=/files/{{$parameter.fileId}}",
          "method": "DELETE",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Deletes a file by ID",
      "resource": "file"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a file",
      "routing": {
        "request": {
          "url": "=/files/{{$parameter.fileId}}",
          "method": "PATCH",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Updates a file by ID",
      "resource": "file"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List tasks",
      "routing": {
        "request": {
          "url": "=/tasks",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a list of tasks",
      "resource": "task"
    },
    {
      "name": "Get by ID",
      "value": "get",
      "action": "Get a task by ID",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "GET",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Returns a single task object by ID",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "routing": {
        "request": {
          "url": "=/tasks",
          "method": "POST",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Creates a new task",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "PATCH",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Updates an existing task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "DELETE",
          "headers": {
            "x-client-id": "={{ $parameter.clientId }}"
          }
        }
      },
      "description": "Deletes a task by ID",
      "resource": "task"
    }
  ]

npm_readme:
  # n8n-nodes-steuerboard

  This is an n8n community node. It lets you use Steuerboard 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)
  [Credentials](#credentials)
  [Compatibility](#compatibility)
  [Usage](#usage)
  [Resources](#resources)

  ## Installation

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

  ## Operations

  - Clients
    - List clients
    - Get client by ID

  ## Credentials

  This node uses API key authentication via an Authorization: Bearer header.

  How to get an API key:

  - Create an account at steuerboard.net and sign in.
  - In your dashboard, open the API keys section and create a new API key.
  - Copy the key value. Keep it secure.
  - Details and up-to-date instructions: see Authentication.

  In n8n, create credentials of type Steuerboard API and set:

  API Key: your generated key
  Requests are sent with:

  Authorization: Bearer YOUR_API_KEY

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Steuerboard docs](https://docs.steuerboard.com)
  - [Steuerboard Website](https://steuerboard.net)

ai_documentation_summary:
  {"purpose":"This n8n community node enables users to interact with the Steuerboard API by performing client management operations within n8n workflows.","capabilities":["List all clients in Steuerboard","Retrieve a specific client by ID"],"authentication":"API key via Authorization: Bearer header","commonUseCases":["Automating client data retrieval in n8n workflows","Integrating Steuerboard client management with other automation tasks"],"limitations":["Limited to client listing and retrieval operations only","Requires manual API key creation and management in n8n credentials"],"relatedNodes":["HTTP Request node","Steuerboard API node"]}


node_type: n8n-nodes-pdfmonkey.pdfMonkey
package_name: n8n-nodes-pdfmonkey
display_name: PDFMonkey
description: Generate PDFs using PDFMonkey API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: tiny-monkey
author_github_url: https://github.com/pdfmonkey/
npm_package_name: n8n-nodes-pdfmonkey
npm_version: 0.4.0
community_fetched_at: 2026-07-14T14:40:33.276Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "generateDocument",
      "options": [
        {
          "name": "Generate Document",
          "value": "generateDocument",
          "action": "Create a new PDF using a template",
          "description": "Create a new PDF using a template"
        },
        {
          "name": "Get Document",
          "value": "getDocument",
          "action": "Get document details and status",
          "description": "Get document details and status"
        },
        {
          "name": "Download File",
          "value": "downloadFile",
          "action": "Download a generated PDF or image",
          "description": "Download a generated PDF or Image"
        },
        {
          "name": "Delete Document",
          "value": "deleteDocument",
          "action": "Delete an existing PDF document",
          "description": "Delete an existing PDF document"
        }
      ],
      "description": "Choose what you want to do with PDFMonkey",
      "displayName": "Actions",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Document",
      "value": "generateDocument",
      "action": "Create a new PDF using a template",
      "description": "Create a new PDF using a template"
    },
    {
      "name": "Get Document",
      "value": "getDocument",
      "action": "Get document details and status",
      "description": "Get document details and status"
    },
    {
      "name": "Download File",
      "value": "downloadFile",
      "action": "Download a generated PDF or image",
      "description": "Download a generated PDF or Image"
    },
    {
      "name": "Delete Document",
      "value": "deleteDocument",
      "action": "Delete an existing PDF document",
      "description": "Delete an existing PDF document"
    }
  ]

npm_readme:
  ![PDFMonkey for n8n](./images/n8n-nodes-pdfmonkey.webp)

  # n8n-nodes-pdfmonkey

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

  [PDFMonkey](https://www.pdfmonkey.io/) is a service that allows you to generate PDFs from HTML templates with dynamic data.

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

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

  ## Installation

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

  ## Operations

  ### PDFMonkey Node

  The PDFMonkey node provides the following operations:

  - **Generate Document**: Create a new PDF document using a template and dynamic data
    - Supports custom metadata and filename customization
    - Optional auto-polling for document completion (controlled by "Wait For Completion" option)
    - Uses a simple 2-second interval between status checks when polling
    - Downloads the PDF automatically if generation is successful and auto-polling is enabled
  - **Get Document**: Get document details and check its generation status
  - **Download File**: Download a generated PDF or image document and save it as a binary file
  - **Delete Document**: Delete a previously generated PDF document from PDFMonkey

  ### PDFMonkey Trigger Node

  The PDFMonkey Trigger node listens for webhooks from PDFMonkey and processes them:

  - **Webhook Receiver**: Triggers when PDFMonkey sends a webhook notification
  - **Automatic File Download**: Automatically downloads the PDF or image when the document generation is successful
  - **Intelligent Filename Handling**: Extracts the filename from metadata
  - **Complete Response Data**: Returns all document properties from the PDFMonkey API in the JSON output

  ## Credentials

  To use the PDFMonkey nodes, you need to have a PDFMonkey account and API key.

  1. Sign up for PDFMonkey at [https://www.pdfmonkey.io/](https://www.pdfmonkey.io/)
  2. In your PDFMonkey dashboard, navigate to the API section
  3. Copy your API key
  4. In n8n, create new credentials of type 'PDFMonkey API' and paste your API key

  ## Compatibility

  This node has been tested with n8n version 1.0.0 and later.

  ## Usage

  ### Flexible Payload Input

  The Generate Document operation supports two methods for providing template data:

  1. **JSON Format**:

     - Enter your entire payload as a JSON object
     - Ideal for complex data structures or when copying from another source
     - Example:
       ```json
       {
       	"invoiceNumber": "INV-2023-001",
       	"customerName": "Acme Inc.",
       	"items": [
       		{ "name": "Widget", "quantity": 5, "price": 10.99 },
       		{ "name": "Gadget", "quantity": 2, "price": 24.99 }
       	],
       	"total": 104.93
       }
       ```

  2. **Key-Value Pairs**:
     - Add fields individually with key-value pairs
     - More visual and easier to manage for simple templates
     - Supports complex data structures:
       - JSON objects/arrays: Values starting with `{` or `[` are automatically parsed as JSON
       - Arrays from other nodes: The node automatically handles n8n's special array format `[Array: [...]]`
       - Direct objects: When passing data from other nodes that return objects, they are used directly

  ### Enhanced Object Handling

  The node intelligently processes different value types in key-value pairs:

  - **Direct Objects**: Objects passed directly from other nodes are preserved intact
  - **JSON Strings**: Strings that look like JSON (starting with `{` or `[`) are parsed automatically
  - **Special Array Format**: The n8n array format `[Array: [...]]` is detected and parsed
  - **Regular Values**: Simple strings, numbers, and booleans are handled appropriately

  This makes it easy to pass complex data from other nodes to PDFMonkey without manual conversion.

  #### Example: Processing Arrays from n8n

  When you map data from other nodes (like Function or HTTP Request nodes), arrays often come in this special format:

  ```
  [Array: [{"name":"Mouse","quantity":3,"price":88.92},{"name":"Headphones","quantity":5,"price":14.99},{"name":"Keyboard","quantity":3,"price":48.28}]]
  ```

  The PDFMonkey node will automatically detect this format, extract the array content, and properly parse it as a JSON array. This is especially useful for templating tables or lists in your PDFs where you need to pass complex structured data.

  ### Generate Document with Auto-Polling

  The Generate Document operation includes a "Wait For Completion" option that controls whether the node waits for the document to finish generating before continuing the workflow:

  1. When **enabled** (default):

     - The node checks the document status every 2 seconds until it reaches a final state (success or failure)
     - If successful, it automatically downloads the PDF or image and returns it as a binary file
     - Simple, straightforward polling mechanism with minimal overhead
     - Progress is logged with status updates during polling

  2. When **disabled**:
     - The node returns immediately after creating the document
     - The response includes the document ID and initial pending status
     - You can later use the Get Document or Download File operations to check status and retrieve the document

  This feature is especially useful for smaller documents that generate quickly, providing a simpler workflow without needing separate Get Document and Download File steps. For larger documents that take longer to generate, you may want to disable this option and use a separate Get Document or Download File operation later.

  ### Custom Filenames

  You can set a custom filename for your generated PDF or image using the dedicated `Custom Filename` field in the Generate Document operation

  If the field is left empty, the node will use the default generated filename.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [PDFMonkey API Documentation](https://docs.pdfmonkey.io/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables the creation of PDF documents from HTML templates using dynamic data via the PDFMonkey API, supporting both manual generation and webhook-triggered workflows.","capabilities":["Generate PDF documents from HTML templates with dynamic data","Download generated PDFs or images as binary files","Check document generation status and retrieve details","Delete previously generated documents","Receive webhook notifications for document generation events","Support auto-polling for document completion status","Handle complex data structures including JSON objects and arrays","Customize output filenames"],"authentication":"API key required","commonUseCases":["Automated invoice generation from order data","Creating personalized marketing materials from customer databases","Generating reports from database queries or API responses","Automated document creation triggered by form submissions or webhooks"],"limitations":["Requires a paid PDFMonkey account with API access","Auto-polling uses a fixed 2-second interval between status checks","No built-in support for custom HTML templates beyond PDFMonkey's template system","Limited to PDF and image formats only"],"relatedNodes":["HTTP Request","Function","Webhook","Binary File","Wait Until"]}


