# nodes

node_type: n8n-nodes-logsnag.LogSnag
package_name: n8n-nodes-logsnag
display_name: LogSnag
description: Send events and insights to LogSnag
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: joff
author_github_url: https://github.com/joffcom/
npm_package_name: n8n-nodes-logsnag
npm_version: 0.1.0
community_fetched_at: 2026-02-19T14:41:52.357Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Log",
          "value": "log"
        },
        {
          "name": "Insight",
          "value": "insight"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish an event to LogSnag",
          "routing": {
            "request": {
              "url": "/log",
              "method": "POST"
            }
          },
          "description": "Publish an event to LogSnag"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "log"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish an insight to LogSnag",
          "routing": {
            "request": {
              "url": "/insight",
              "method": "POST"
            }
          },
          "description": "Publish an insight to LogSnag"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "insight"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish an event to LogSnag",
      "routing": {
        "request": {
          "url": "/log",
          "method": "POST"
        }
      },
      "description": "Publish an event to LogSnag"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish an insight to LogSnag",
      "routing": {
        "request": {
          "url": "/insight",
          "method": "POST"
        }
      },
      "description": "Publish an insight to LogSnag"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    }
  ]

npm_readme:
  # n8n-nodes-logsnag

  This is an n8n community node for sending events and insights to [LogSnag](https://logsnag.com/)

  This trigger node will get any items that have a published date that is after the date of the last run of the trigger.

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

  [Installation](#installation)  
  [Version history](#version-history) 

  ## Installation

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

  ## Resources

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

  ## Version history

  0.1.0 - Initial Release

ai_documentation_summary:
  {"purpose":"Send events and insights to LogSnag from n8n workflows, and act as a trigger that emits items whose published date is after the trigger's last run.","capabilities":["Send events to LogSnag","Send insights/metrics to LogSnag","Trigger on items with a published date after the last run (published-date-based trigger)"],"authentication":"Not specified in README","commonUseCases":["Record application events or activity logs in LogSnag from n8n workflows","Send metrics/insights to LogSnag for monitoring or analytics","Start workflows when new content/items are published (published-date-based trigger)"],"limitations":["README provides minimal detail—no usage examples or parameter descriptions","Authentication method and configuration are not documented in the README","Initial release (0.1.0) — functionality may be limited or incomplete","Trigger behavior is limited to items with a published date compared to last run (no other trigger criteria documented)"],"relatedNodes":[]}


node_type: n8n-nodes-murf.murf
package_name: n8n-nodes-murf
display_name: Murf AI
description: Murf AI APIs for speech synthesis, dubbing, and audio transformation.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: nileshmurf
author_github_url: https://github.com/murf-ai/
npm_package_name: n8n-nodes-murf
npm_version: 0.1.3
community_fetched_at: 2026-02-19T14:41:52.358Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "textToSpeech",
      "options": [
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "description": "Convert text to speech using AI voices"
        },
        {
          "name": "Voice Changer",
          "value": "voiceChanger",
          "description": "Change voice characteristics of audio files"
        },
        {
          "name": "Translation",
          "value": "translations",
          "description": "Translate content between languages"
        },
        {
          "name": "Dubbing",
          "value": "dubbing",
          "description": "Automated dubbing in multiple languages"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate Speech",
          "value": "generate",
          "action": "Generate speech from text",
          "description": "Convert text to speech"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "textToSpeech"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert Voice",
          "value": "convert",
          "action": "Change voice of audio files",
          "description": "Change voice characteristics of audio files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceChanger"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "translate",
      "options": [
        {
          "name": "Translate",
          "value": "translate",
          "action": "Translate text to another language",
          "description": "Translate text to another language"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "translations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createJob",
      "options": [
        {
          "name": "Create Dubbing Job",
          "value": "createJob",
          "action": "Create a dubbing job",
          "description": "Create a new dubbing job"
        },
        {
          "name": "Check Job Status",
          "value": "checkStatus",
          "action": "Check dubbing job status",
          "description": "Check the status of a dubbing job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dubbing"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Speech",
      "value": "generate",
      "action": "Generate speech from text",
      "description": "Convert text to speech"
    },
    {
      "name": "Convert Voice",
      "value": "convert",
      "action": "Change voice of audio files",
      "description": "Change voice characteristics of audio files"
    },
    {
      "name": "Translate",
      "value": "translate",
      "action": "Translate text to another language",
      "description": "Translate text to another language"
    },
    {
      "name": "Create Dubbing Job",
      "value": "createJob",
      "action": "Create a dubbing job",
      "description": "Create a new dubbing job"
    },
    {
      "name": "Check Job Status",
      "value": "checkStatus",
      "action": "Check dubbing job status",
      "description": "Check the status of a dubbing job"
    }
  ]

npm_readme:
  # n8n-nodes-murf

  This is an n8n community node for [Murf AI](https://murf.ai). It provides integration with Murf's AI-powered voice and audio processing services.

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

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

  ```bash
  npm install n8n-nodes-murf
  ```

  ## Operations

  The Murf AI node provides the following operations:

  ### Text to Speech
  - **Generate Speech**: Convert text to natural-sounding speech using AI voices
    - Supports multiple languages and voice styles
    - Control speech parameters like speed, pitch, and emphasis
    - Add pauses and customize pronunciation

  ### Voice Changer
  - **Convert Voice**: Transform audio files by changing voice characteristics
    - Modify voice properties while maintaining natural sound
    - Support for various audio formats

  ### Translation
  - **Translate**: Translate text between supported languages
    - High-quality translations optimized for voice synthesis
    - Preserve formatting and special characters

  ### Dubbing
  - **Create Dubbing Job**: Create automated dubbing jobs for videos
    - Support for multiple target languages
    - File or URL input options
    - Optional project creation for Murf UI editing
    - Priority levels for processing
    - Webhook support for status updates
  - **Check Job Status**: Monitor the progress of dubbing jobs
    - Get detailed status information
    - Access download URLs for completed jobs
    - View credit usage and remaining credits

  ## Node Structure

  ```
  nodes/Murf/
  ├── Dubbing/
  │   ├── DubbingDescription.ts   # Dubbing node parameters
  │   └── DubbingExecute.ts       # Dubbing operations logic
  ├── TextToSpeech/
  │   └── ...                     # Text to Speech components
  ├── VoiceChanger/
  │   └── ...                     # Voice Changer components
  ├── Translations/
  │   └── ...                     # Translation components
  ├── Murf.node.ts               # Main node definition
  └── Murf.node.json             # Node metadata
  ```

  ## Credentials

  The node requires API credentials from Murf AI:

  1. **Murf API** (`murfApi`)
     - Required for Text to Speech, Voice Changer, and Translation operations
     - Get your API key from [Murf API Dashboard](https://murf.ai/api/dashboard)

  2. **Murf Dubbing API** (`murfDubApi`)
     - Required for Dubbing operations
     - Get your Dubbing API key from [Murf Dub Dashboard](https://dub.murf.ai)

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Follows n8n community node standards

  ## Usage

  1. Install the node package
  2. Add your Murf AI credentials in n8n
  3. Add the Murf AI node to your workflow
  4. Configure the desired operation and parameters
  5. Connect with other nodes as needed

  ## Resources

  - [Murf AI API Documentation](https://murf.ai/api/docs)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Report Issues](https://github.com/murf-ai/n8n-nodes-murf)

  ## Development

  To develop the node:

  1. Clone the repository
  2. Install dependencies: `npm install`
  3. Build: `npm run build`
  4. Link to n8n: `npm link`
  5. Start n8n: `n8n start`

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Provides n8n integrations for Murf AI to perform text-to-speech, voice transformation, translation, and automated video dubbing so audio workflows can be automated within n8n.","capabilities":["Generate Speech: convert text to natural-sounding speech with multiple languages and voice styles","Speech parameter controls: adjust speed, pitch, emphasis, add pauses, and customize pronunciation","Voice Changer: transform existing audio by modifying voice characteristics while preserving natural sound; supports various audio formats","Translate: translate text between supported languages optimized for voice synthesis while preserving formatting and special characters","Create Dubbing Job: submit video/audio (file or URL) dubbing jobs for one or multiple target languages, optionally create a Murf UI project, set processing priority, and enable webhook notifications","Check Job Status: monitor dubbing job progress, retrieve detailed status, download URLs for completed outputs, and view credit usage/remaining credits"],"authentication":"API key required — two credential types: 'Murf API' (API key) for Text-to-Speech, Voice Changer, and Translation; and 'Murf Dubbing API' (API key) for Dubbing operations.","commonUseCases":["Generate narrated audio from text using AI voices for podcasts, tutorials, or IVR","Convert or modify recorded voice/audio to different voice styles","Translate text and produce voice-ready translations for multilingual content","Automate dubbing of videos (file or URL) into one or more target languages and retrieve finished assets","Integrate Murf audio processing into larger n8n workflows with status updates via webhooks"],"limitations":["Requires separate API keys for general Murf APIs and the Murf Dubbing API (two credentials)","Requires n8n version 1.0.0 or later","Dubbing jobs are processed asynchronously (use webhooks or poll job status) and consume Murf account credits"],"relatedNodes":[]}


node_type: n8n-nodes-syncmate.whatsAuto
package_name: n8n-nodes-syncmate
display_name: WhatsApp Notifications by SyncMate
description: Send WhatsApp messages or media using SyncMate Assistro API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: heratassistro
author_github_url: https://github.com/heratshah-collab/
npm_package_name: n8n-nodes-syncmate
npm_version: 1.1.0
community_fetched_at: 2026-02-19T14:41:52.361Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "normal",
      "options": [
        {
          "name": "Send Notification",
          "value": "normal",
          "action": "Send a notification",
          "description": "Send a WhatsApp notification to a phone number"
        },
        {
          "name": "Send Group Message",
          "value": "group",
          "action": "Send a group message",
          "description": "Send a message to a WhatsApp group"
        },
        {
          "name": "Send Newsletter",
          "value": "newsletter",
          "action": "Send a newsletter",
          "description": "Send a message to a WhatsApp channel/newsletter"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Notification",
      "value": "normal",
      "action": "Send a notification",
      "description": "Send a WhatsApp notification to a phone number"
    },
    {
      "name": "Send Group Message",
      "value": "group",
      "action": "Send a group message",
      "description": "Send a message to a WhatsApp group"
    },
    {
      "name": "Send Newsletter",
      "value": "newsletter",
      "action": "Send a newsletter",
      "description": "Send a message to a WhatsApp channel/newsletter"
    }
  ]

npm_readme:
  # n8n-nodes-syncmate

  Send WhatsApp messages or media using **SyncMate Assistro API** in n8n workflows.

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

  ---

  ## Features

  - Send text messages via WhatsApp
  - Send images, videos, documents, and other media
  - OAuth2 authentication with Assistro API
  - Designed for **n8n workflows**
  - Easy to integrate into existing automation

  ---

  ## Installation

  ### Install via npm

  ```bash
  npm install n8n-nodes-syncmate

ai_documentation_summary:
  {"purpose":"Send WhatsApp messages and media from n8n workflows using the SyncMate Assistro API, enabling automated notification and media delivery via WhatsApp.","capabilities":["Send WhatsApp text messages","Send images via WhatsApp","Send videos via WhatsApp","Send documents and other media attachments via WhatsApp","Integrate into n8n workflows as a node (designed for easy integration)"],"authentication":"OAuth2 (Assistro API)","commonUseCases":["Send transactional notifications or alerts (order updates, system alerts)","Deliver invoices, receipts, or documents to users via WhatsApp","Send marketing or promotional messages with media","Automate customer support or follow-up messages","Share images/videos (e.g., confirmations, previews) as part of workflows"],"limitations":[],"relatedNodes":[]}


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

updated_at: 2026-02-19 14:41:52
author_name: development_keephub
author_github_url: https://github.com/RetailInTouch/
npm_package_name: n8n-nodes-keephub
npm_version: 1.4.0
community_fetched_at: 2026-02-19T14:41:52.363Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "content",
      "options": [
        {
          "name": "Content",
          "value": "content"
        },
        {
          "name": "Form Submission",
          "value": "formSubmission"
        },
        {
          "name": "Orgchart",
          "value": "orgchart"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create content",
          "description": "Create new content"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete content",
          "description": "Delete content by ID"
        },
        {
          "name": "Find by Content Pool",
          "value": "findByContentPool",
          "action": "Find content by content pool",
          "description": "Find contents by content pool"
        },
        {
          "name": "Find by Group",
          "value": "findByGroup",
          "action": "Find content by group",
          "description": "Find contents by group"
        },
        {
          "name": "Find by Orgunit",
          "value": "findByOrgunit",
          "action": "Find content by orgunit",
          "description": "Find contents by organization unit"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get content by ID",
          "description": "Get content by ID"
        },
        {
          "name": "Update by ID",
          "value": "updateById",
          "action": "Update content by ID",
          "description": "Update content by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "content"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFormSubmission",
      "options": [
        {
          "name": "Calculate Response Duration",
          "value": "calculateResponseDuration",
          "action": "Calculate response duration for a form submission",
          "description": "Time from form creation to submission"
        },
        {
          "name": "Get",
          "value": "getFormSubmission",
          "action": "Get a form submission",
          "description": "Fetch full form submission data"
        },
        {
          "name": "Get Submission Orgunits",
          "value": "getSubmissionOrgunits",
          "action": "Get submission orgunits for a form submission",
          "description": "Fetch orgunit hierarchy"
        },
        {
          "name": "Get Submitter Details",
          "value": "getSubmitterDetails",
          "action": "Get submitter details for a form submission",
          "description": "Fetch full user data of the submitter"
        },
        {
          "name": "Update Submission Orgunits",
          "value": "updateSubmissionOrgunits",
          "action": "Update submission orgunits for a form submission",
          "description": "Change submission orgunit to limit visibility"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "formSubmission"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Get Ancestors",
          "value": "getAncestors",
          "action": "Get ancestors of an orgchart node",
          "description": "Get all ancestors of an orgchart node by ID"
        },
        {
          "name": "Get by External Ref",
          "value": "getByExternalRef",
          "action": "Get an orgchart node by external reference",
          "description": "Get a single orgchart node by external reference"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get an orgchart node",
          "description": "Get a single orgchart node by ID"
        },
        {
          "name": "Get Children",
          "value": "getChildren",
          "action": "Get children of an orgchart node",
          "description": "Get all children/descendants of an orgchart node by ID"
        },
        {
          "name": "Get Parent",
          "value": "getParent",
          "action": "Get parent of an orgchart node",
          "description": "Get the parent of an orgchart node by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "orgchart"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createTask",
      "options": [
        {
          "name": "Create",
          "value": "createTask",
          "action": "Create a task template",
          "description": "Create a new task template"
        },
        {
          "name": "Delete",
          "value": "deleteTask",
          "action": "Delete a task template",
          "description": "Delete a task template"
        },
        {
          "name": "Get by ID",
          "value": "getTask",
          "action": "Get a task by ID",
          "description": "Get a task template by ID"
        },
        {
          "name": "Get By Orgunit",
          "value": "getTaskByOrgunit",
          "action": "Get tasks by orgunit",
          "description": "Get tasks by orgunit"
        },
        {
          "name": "Get Progress",
          "value": "getTaskProgress",
          "action": "Get progress for a task template",
          "description": "Get task template progress"
        },
        {
          "name": "Get Status Counts",
          "value": "getTaskStatusCounts",
          "action": "Get status counts for a task template",
          "description": "Get task template status counts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get a user by ID",
          "description": "Retrieve a user by their unique ID"
        },
        {
          "name": "Find by Login Name",
          "value": "findByLoginName",
          "action": "Find a user by login name",
          "description": "Retrieve a user by their Login Name"
        },
        {
          "name": "Find by Group",
          "value": "findByGroup",
          "action": "Find a user by group",
          "description": "Find all users in a specific group"
        },
        {
          "name": "Find by Orgunit",
          "value": "findByOrgunit",
          "action": "Find a user by orgunit",
          "description": "Find all users in a specific organization unit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create content",
      "description": "Create new content"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete content",
      "description": "Delete content by ID"
    },
    {
      "name": "Find by Content Pool",
      "value": "findByContentPool",
      "action": "Find content by content pool",
      "description": "Find contents by content pool"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find content by group",
      "description": "Find contents by group"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find content by orgunit",
      "description": "Find contents by organization unit"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get content by ID",
      "description": "Get content by ID"
    },
    {
      "name": "Update by ID",
      "value": "updateById",
      "action": "Update content by ID",
      "description": "Update content by ID"
    },
    {
      "name": "Calculate Response Duration",
      "value": "calculateResponseDuration",
      "action": "Calculate response duration for a form submission",
      "description": "Time from form creation to submission"
    },
    {
      "name": "Get",
      "value": "getFormSubmission",
      "action": "Get a form submission",
      "description": "Fetch full form submission data"
    },
    {
      "name": "Get Submission Orgunits",
      "value": "getSubmissionOrgunits",
      "action": "Get submission orgunits for a form submission",
      "description": "Fetch orgunit hierarchy"
    },
    {
      "name": "Get Submitter Details",
      "value": "getSubmitterDetails",
      "action": "Get submitter details for a form submission",
      "description": "Fetch full user data of the submitter"
    },
    {
      "name": "Update Submission Orgunits",
      "value": "updateSubmissionOrgunits",
      "action": "Update submission orgunits for a form submission",
      "description": "Change submission orgunit to limit visibility"
    },
    {
      "name": "Get Ancestors",
      "value": "getAncestors",
      "action": "Get ancestors of an orgchart node",
      "description": "Get all ancestors of an orgchart node by ID"
    },
    {
      "name": "Get by External Ref",
      "value": "getByExternalRef",
      "action": "Get an orgchart node by external reference",
      "description": "Get a single orgchart node by external reference"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get an orgchart node",
      "description": "Get a single orgchart node by ID"
    },
    {
      "name": "Get Children",
      "value": "getChildren",
      "action": "Get children of an orgchart node",
      "description": "Get all children/descendants of an orgchart node by ID"
    },
    {
      "name": "Get Parent",
      "value": "getParent",
      "action": "Get parent of an orgchart node",
      "description": "Get the parent of an orgchart node by ID"
    },
    {
      "name": "Create",
      "value": "createTask",
      "action": "Create a task template",
      "description": "Create a new task template"
    },
    {
      "name": "Delete",
      "value": "deleteTask",
      "action": "Delete a task template",
      "description": "Delete a task template"
    },
    {
      "name": "Get by ID",
      "value": "getTask",
      "action": "Get a task by ID",
      "description": "Get a task template by ID"
    },
    {
      "name": "Get By Orgunit",
      "value": "getTaskByOrgunit",
      "action": "Get tasks by orgunit",
      "description": "Get tasks by orgunit"
    },
    {
      "name": "Get Progress",
      "value": "getTaskProgress",
      "action": "Get progress for a task template",
      "description": "Get task template progress"
    },
    {
      "name": "Get Status Counts",
      "value": "getTaskStatusCounts",
      "action": "Get status counts for a task template",
      "description": "Get task template status counts"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get a user by ID",
      "description": "Retrieve a user by their unique ID"
    },
    {
      "name": "Find by Login Name",
      "value": "findByLoginName",
      "action": "Find a user by login name",
      "description": "Retrieve a user by their Login Name"
    },
    {
      "name": "Find by Group",
      "value": "findByGroup",
      "action": "Find a user by group",
      "description": "Find all users in a specific group"
    },
    {
      "name": "Find by Orgunit",
      "value": "findByOrgunit",
      "action": "Find a user by orgunit",
      "description": "Find all users in a specific organization unit"
    }
  ]

npm_readme:
  # 🚀 n8n-nodes-keephub

  <div align="center">
    <img src="https://github.com/RetailInTouch/n8n-nodes-keephub/blob/master/assets/Keephub%20Banner.png?raw=true" alt="Keephub Banner" width="50%" height="auto">
  </div>



  <div align="center">

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-keephub.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-keephub)
  [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-keephub.svg?style=flat-square)](https://www.npmjs.com/package/n8n-nodes-keephub)
  [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](./LICENSE)
  [![Maintenance](https://img.shields.io/badge/maintained%3F-yes-green.svg?style=flat-square)](https://github.com/RetailInTouch/n8n-nodes-keephub)

  **Seamlessly integrate Keephub with your n8n workflows** 🎯

  Unlock the power of employee engagement and communication automation with this comprehensive n8n community node for Keephub.

  [🔧 Installation](#-installation) • [📚 Documentation](#-operations) • [🚀 Quick Start](#-quick-start) • [📝 Changelog](#-version-history) • [🤝 Contributing](#-contributing)

  </div>

  ---

  ## 📖 About

  This is a professional **n8n community node** that enables you to harness the full power of **Keephub** within your workflow automation.

  **Keephub** is an enterprise-grade employee engagement platform for managing:

  - 👥 User management and organizational structures
  - 📰 Content creation and distribution
  - ✅ Task management and templates
  - 📋 Dynamic form submissions and responses

  **n8n** is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that puts automation in the hands of technical and business users.

  ---

  ## 🔧 Installation

  ### 📦 Community Nodes Method (Recommended)

  1. Open your n8n instance
  2. Navigate to **Settings** ⚙️ → **Community Nodes**
  3. Click **Install a community node**
  4. Enter: `n8n-nodes-keephub`
  5. Click **Install**
  6. ✅ Done! The node is ready to use

  ### 🛠️ Manual Installation

  **For Local n8n:**

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

  **For Docker:**

  ```bash
  docker exec -it <n8n-container> sh
  cd /home/node/.n8n/nodes
  npm install n8n-nodes-keephub
  # Restart your container
  ```

  **For Node.js n8n:**

  ```bash
  npm install -g n8n-nodes-keephub
  ```

  > [!TIP]
  > Restart your n8n instance and the Keephub node will appear in your palette! 🎨

  ---

  ## 🚀 Quick Start

  ### 1️⃣ Set Up Credentials

  Keephub supports **two separate credential types**. Choose the one that matches your setup:

  **Option A — Bearer Token** (recommended for API integrations):
  1. In n8n, go to **Credentials** 🔐
  2. Create **New** → Search for **Keephub Bearer API**
  3. Fill in:
     - **Client URL**: `https://yourcompany.keephub.io`
     - **Bearer Token**: Your API token
     - **Language** (optional): Default is `en`
  4. Test & Save ✔️

  **Option B — Login Credentials** (username & password):
  1. In n8n, go to **Credentials** 🔐
  2. Create **New** → Search for **Keephub Login API**
  3. Fill in:
     - **Client URL**: `https://yourcompany.keephub.io`
     - **Login Name**: Your username
     - **Password**: Your password
     - **Token Endpoint** (optional): Custom token endpoint path
     - **Language** (optional): Default is `en`
  4. Test & Save ✔️

  ### 2️⃣ Add the Node to Your Workflow

  1. Click **+** to add a node
  2. Search for **Keephub**
  3. Select your **Authentication** method (Bearer Token or Login Credentials)
  4. Select your resource and operation
  5. Configure parameters
  6. Run! 🏃

  ### 3️⃣ Example: Get User Info

  ```
  Keephub Node Configuration:
  ├── Resource: User
  ├── Operation: Find by Login Name
  └── Login Name: john.doe

  Output:
  {
    "id": "63bd885034d0466d11073575",
    "loginName": "john.doe",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@company.com"
  }
  ```

  ---

  ## 📚 Operations

  ### 👥 **User Operations**

  | Operation                 | Description                              |
  | ------------------------- | ---------------------------------------- |
  | 🆔 **Get by ID**          | Retrieve a user by their unique ID       |
  | 🔍 **Find by Login Name** | Search users by login name               |
  | 👨‍💼 **Find by Group**      | Fetch all users in a specific group      |
  | 🏢 **Find by Orgunit**    | Retrieve users from an organization unit |

  **Example:**

  ```javascript
  // Get all users in a group
  {
    "resource": "user",
    "operation": "findByGroup",
    "groupId": "group_12345"
  }
  ```

  ---

  ### 📰 **Content Operations**

  | Operation                   | Description                                            |
  | --------------------------- | ------------------------------------------------------ |
  | ✨ **Create**               | Create new content (news, forms, manuals, etc.)        |
  | 🗑️ **Delete**               | Remove content                                         |
  | 📁 **Find by Content Pool** | Filter content by pool with optional sorting           |
  | 🏷️ **Find by Group**        | Get content assigned to groups with optional sorting   |
  | 🏢 **Find by Orgunit**      | Retrieve content by organization with optional sorting |
  | 📖 **Get by ID**            | Retrieve specific content                              |
  | ✏️ **Update by ID**         | Modify existing content                                |

  **Example - Create Content:**

  ```json
  {
  	"resource": "content",
  	"operation": "create",
  	"defineContentInput": "json",
  	"contentBody": {
  		"originLanguage": "en",
  		"contentType": "news",
  		"contentPool": "POOL_ID",
  		"title": { "en": "🎉 Company Announcement" },
  		"message": { "en": "<p>Great news everyone!</p>" },
  		"orgchartSelection": { "include": ["root0001"], "exclude": [] }
  	}
  }
  ```

  **Example - Find Content by Orgunit with Filtering:**

  ```json
  {
  	"resource": "content",
  	"operation": "findByOrgunit",
  	"orgunitId": "root0077",
  	"options": {
  		"limit": 50,
  		"skip": 0,
  		"sortBy": "createdAt",
  		"sortOrder": 1
  	}
  }
  ```

  **Content Filtering Parameters:**

  - **Orgunit ID** (required): The organization unit ID

  **Options** (all optional):

  - **Limit**: Maximum number of results (default: 50)
  - **Skip**: Number of results to skip (pagination)
  - **Sort Field**: Field to sort by (e.g., `createdAt`, `updatedAt`)
  - **Sort Order**: `1` for ascending, `-1` for descending

  ---

  ### ✅ **Task Operations**

  | Operation                | Description                                                  |
  | ------------------------ | ------------------------------------------------------------ |
  | ➕ **Create**            | Create a new task template                                   |
  | 🗑️ **Delete**            | Remove a task template                                       |
  | 📋 **Get by ID**         | Retrieve a task template                                     |
  | 🔍 **Get By Orgunit**    | Fetch tasks by organization unit with filtering & pagination |
  | 📊 **Get Progress**      | Check task template progress                                 |
  | 📈 **Get Status Counts** | View task completion statistics                              |

  **Example - Create Task with JSON Body:**

  ```json
  {
  	"resource": "task",
  	"operation": "create",
  	"defineTaskInput": "json",
  	"taskJsonBody": {
  		"title": { "en": "Q4 Performance Review" },
  		"template": {
  			"form": {
  				"fields": [
  					{ "name": "rating", "type": "number" },
  					{ "name": "feedback", "type": "text" }
  				]
  			}
  		}
  	}
  }
  ```

  **Example - Create Task with Additional Fields:**

  ```json
  {
  	"resource": "task",
  	"operation": "create",
  	"defineTaskInput": "fields",
  	"taskTitle": "Q4 Performance Review",
  	"taskType": "form",
  	"additionalFields": {
  		"taskMessage": "Please complete your review by end of quarter.",
  		"taskNotification": true
  	}
  }
  ```

  **Example - Get Tasks by Orgunit with Filtering:**

  ```json
  {
  	"resource": "task",
  	"operation": "getTaskByOrgunit",
  	"orgunitId": "root0077",
  	"options": {
  		"limit": 50,
  		"skip": 0,
  		"sortBy": "template.dueDate",
  		"sortOrder": 1,
  		"startDateGte": "2025-11-01T00:00:00Z",
  		"startDateLte": "2025-11-30T23:59:59Z"
  	}
  }
  ```

  **Task Create Parameters:**

  - **Task Title** (required): Name of the task
  - **Task Type** (required): `form`, `confirmation`, or `read`

  **Additional Fields** (optional):

  - **Message**: Custom message body for the task
  - **Send Notification**: Whether to notify assigned users (`true`/`false`)

  **Task Get by Orgunit Parameters:**

  - **Orgunit ID** (required): The organization unit ID to filter tasks

  **Options** (all optional):

  - **Limit**: Maximum number of results (default: 50)
  - **Skip**: Number of results to skip (pagination)
  - **Sort Field**: Field to sort by (e.g., `template.dueDate`)
  - **Sort Order**: `1` for ascending, `-1` for descending
  - **Start Date After**: Filter tasks after this date
  - **Start Date Before**: Filter tasks before this date

  ---

  ### 📋 **Form Submission Operations**

  | Operation                          | Description                             |
  | ---------------------------------- | --------------------------------------- |
  | 📥 **Get**                         | Fetch complete form submission data     |
  | 👤 **Get Submitter Details**       | Retrieve full user profile of submitter |
  | 🏢 **Get Submission Orgunits**     | View orgunit hierarchy                  |
  | 📍 **Update Submission Orgunits**  | Change visibility by orgunit            |
  | ⏱️ **Calculate Response Duration** | Time from creation to submission        |

  **Example - Calculate Response Time:**

  ```javascript
  {
    "resource": "formSubmission",
    "operation": "calculateResponseDuration",
    "formSubmissionId": "form_67890"
  }

  // Returns:
  {
    "duration": {
      "days": 2,
      "hours": 5,
      "minutes": 30,
      "totalSeconds": 183930
    }
  }
  ```

  ---

  ### Orgchart Operations

  | Operation               | Description                                        |
  | ----------------------- | -------------------------------------------------- |
  | **Get Ancestors**       | Get all ancestors in the org hierarchy             |
  | **Get by External Ref** | Retrieve an orgchart node by its externalRef value |
  | **Get by ID**           | Retrieve an orgchart node by ID                    |
  | **Get Children**        | Retrieve all children/descendants                  |
  | **Get Parent**          | Fetch the parent node of an orgchart node          |

  **Example - Get Children with Depth Limit:**

  ```json
  {
  	"resource": "orgchart",
  	"operation": "getChildren",
  	"orgunitId": "node123",
  	"additionalFields": {
  		"limit": 100
  	}
  }
  ```

  **Example - Get Ancestors with Depth Limit:**

  ```json
  {
  	"resource": "orgchart",
  	"operation": "getAncestors",
  	"orgunitId": "node123",
  	"additionalFields": {
  		"depthLimit": 3
  	}
  }
  ```

  **Optional Additional Fields:**

  - **Get Children** → `limit`: Maximum number of child nodes to return (default: 0 = unlimited)
  - **Get Ancestors** → `depthLimit`: How many levels up to traverse (default: 0 = unlimited)

  ---

  ## 🔐 Credentials Setup

  Keephub uses **two separate credential types** — select the matching authentication method from the **Authentication** dropdown on the Keephub node.

  ### 🔑 Keephub Bearer API

  ```
  ✓ Most secure for API integrations
  ✓ Use existing API tokens from Keephub
  ✓ Perfect for server-to-server communication
  ✓ Uses IAuthenticateGeneric — token sent automatically in headers
  ```

  | Field          | Description                          |
  | -------------- | ------------------------------------ |
  | **Client URL** | Your Keephub instance base URL       |
  | **Bearer Token** | API bearer token                   |
  | **Language**   | Language code (default: `en`)        |

  ### 🔒 Keephub Login API

  ```
  ✓ Automatic token generation from username/password
  ✓ Simple to set up
  ✓ Token refreshed dynamically per request
  ✓ Credentials securely stored and encrypted in n8n
  ```

  | Field              | Description                                     |
  | ------------------ | ----------------------------------------------- |
  | **Client URL**     | Your Keephub instance base URL                  |
  | **Login Name**     | Username for authentication                     |
  | **Password**       | Password for authentication                     |
  | **Token Endpoint** | Custom token path (default: `/api/v2/auth/token`) |
  | **Language**       | Language code (default: `en`)                   |

  **All credentials are encrypted** 🔒 and never exposed in logs or workflows.

  ---

  ## 💡 Real-World Examples

  ### 📧 Example 1: Auto-Create Tasks from Email

  ```
  Gmail Trigger
    ↓
  Extract email data
    ↓
  Keephub: Create Task
    ↓
  Send confirmation email
  ```

  ### 📊 Example 2: Sync Users to Slack

  ```
  Keephub: Get all users in a group
    ↓
  Filter active users
    ↓
  Slack: Create channels per active users in group
  ```

  ### 📋 Example 3: Form Response Automation

  ```
  Keephub: Form Submission Trigger
    ↓
  Get submitter details
    ↓
  Calculate response time
    ↓
  Store in database
    ↓
  Send thank you message
  ```

  ---

  ## ⚙️ Node Configuration

  ### Authentication

  The Keephub node provides an **Authentication** dropdown at the top of the configuration panel:

  - **Bearer Token** → uses the **Keephub Bearer API** credential
  - **Login Credentials** → uses the **Keephub Login API** credential

  ### Input Data

  - All parameters support dynamic expressions with `{{ }}`
  - Use previous node outputs: `{{ $node["Previous Node"].json.field }}`
  - Access environment variables: `{{ $env.MY_VAR }}`

  ### Output Format

  ```javascript
  {
    "pairedItem": { "item": 0 },
    "json": {
      // API response data
    }
  }
  ```

  ### Error Handling

  Enable "Continue on Error" to handle failures gracefully in your workflow.

  ---

  ## 📦 Requirements

  | Requirement | Version   |
  | ----------- | --------- |
  | **n8n**     | v0.199.0+ |
  | **Node.js** | 14.20.0+  |
  | **npm**     | 6.0.0+    |

  ---

  ## 🐛 Troubleshooting

  ### ❌ "Authentication failed"

  - ✅ Verify your Keephub instance URL
  - ✅ Check API credentials are correct
  - ✅ Ensure credentials have required permissions

  ### ❌ "Unknown operation"

  - ✅ Verify resource and operation combination exist
  - ✅ Check node version is latest
  - ✅ Try refreshing the node palette

  ### ❌ "Connection timeout"

  - ✅ Check network connectivity
  - ✅ Verify firewall allows outbound HTTPS
  - ✅ Check Keephub instance is accessible

  ---

  ## 📚 Documentation

  - 📖 [n8n Documentation](https://docs.n8n.io/)
  - 🔗 [Keephub API Docs](https://dev.api.keephub.io/api-docs/)
  - 💬 [n8n Community Forum](https://community.n8n.io/)

  ---

  ## 🏗️ Project Structure

  ```
  n8n-nodes-keephub/
  ├── nodes/
  │   └── Keephub/
  │       ├── Keephub.node.ts           # Main node class
  │       ├── descriptions/             # Field definitions
  │       │   ├── UserDescription.ts
  │       │   ├── ContentDescription.ts
  │       │   ├── TaskDescription.ts
  │       │   ├── FormSubmissionDescription.ts
  │       │   └── OrgchartDescription.ts
  │       ├── actions/                  # Operation implementations
  │       │   ├── user/
  │       │   ├── content/
  │       │   ├── task/
  │       │   ├── formSubmission/
  │       │   └── orgchart/
  │       └── utils/
  │           └── helpers.ts
  ├── credentials/
  │   ├── KeephubBearerApi.credentials.ts
  │   └── KeephubLoginApi.credentials.ts
  ├── package.json
  └── README.md
  ```

  ---

  ## 🚀 Development

  ### Build

  ```bash
  npm run build
  ```

  ### Test

  ```bash
  npm run test
  ```

  ### Lint

  ```bash
  npm run lint
  ```

  ---

  ## 📝 Version History

  ### v1.0.0 (2025-01-09) 🎉

  - ✨ Initial release
  - 👥 User management operations
  - 📰 Content creation & management
  - ✅ Task template operations
  - 📋 Form submission handling
  - 🔐 Secure API authentication

  ### v1.1.0 (2025-11-10) 📦

  - 📊 Added Orgchart operations (Get, Parent, Ancestors, Children)
  - 🧹 Fixed console.log in updateById operation
  - 🔧 Code cleanup and optimizations

  ### v1.2.0 (2025-11-12) 🆕

  - 🔍 Added Get By Orgunit task operation
  - 📅 Date range filtering support for tasks (Start Date Before/After)
  - 📰 Enhanced Content filtering

  ### v1.2.1 (2025-11-20)

  - 📖 README updates and documentation improvements

  ### v1.2.2 (2025-11-20)

  - 🧹 Build process improvements (added dist folder cleanup script)

  ### v1.3.0 (2025-12-04)

  - 🔍 Added Get by External Ref operation to Orgchart resource for querying nodes by external reference

  ### v1.3.4 (2025-12-08)

  - 🔧 Added externalRef of orgunit to the output of the Get submission orgunits node
  - 🧹 Fixed typo that was causing README rendering issues

  ### v1.4.0 (2026-02-09) 🔐

  - 🔑 **Split credentials** into two separate types: **Keephub Bearer API** and **Keephub Login API**
  - 🛡️ Added `IAuthenticateGeneric` to Bearer credential for automatic header injection
  - 🔀 Added **Authentication** selector dropdown to the node UI (Bearer Token / Login Credentials)
  - 🔌 Updated `inputs`/`outputs` to use `NodeConnectionTypes.Main` (n8n best practice)
  - 📦 Moved non-required fields into **Additional Fields** / **Options** collections:
    - Content: Limit, Skip, Sort Field, Sort Order → Options
    - Orgchart: Depth Limit, Result Limit → Additional Fields
    - Task: Message, Send Notification → Additional Fields; Limit → Options
  - 🧹 Updated helpers to dynamically resolve credentials based on authentication selector
  - 📖 Updated README documentation to reflect all changes

  ### v1.4.3 (2026-02-19)

  - 🖼️ Changed Image assets to better match n8n's dark theme

  ---

  ## 🤝 Contributing

  Contributions are welcome! 🙌

  1. **Fork** the repository
  2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
  3. **Commit** your changes (`git commit -m 'Add amazing feature'`)
  4. **Push** to the branch (`git push origin feature/amazing-feature`)
  5. **Open** a Pull Request

  ### Development Setup

  ```bash
  git clone https://github.com/RetailInTouch/n8n-nodes-keephub.git
  cd n8n-nodes-keephub
  npm install
  npm run build
  ```

  ---

  ## 📄 License

  This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.

  ---

  ## 🙏 Support

  Found a bug? Have a feature request?

  - 🐛 [Open an Issue](https://github.com/RetailInTouch/n8n-nodes-keephub/issues)
  - 💬 [Start a Discussion](https://github.com/RetailInTouch/n8n-nodes-keephub/discussions)

  ---

  ## ⭐ Show Your Support

  If you find this node useful, please consider:

  - ⭐ Starring this repository
  - 🐦 Sharing it on social media
  - 📢 Recommending it to the community

  ---

  <div align="center">

  **Made with ❤️ for the automation community**

  [Visit n8n](https://n8n.io) • [View on npm](https://www.npmjs.com/package/n8n-nodes-keephub) • [GitHub Repo](https://github.com/RetailInTouch/n8n-nodes-keephub)

  </div>

ai_documentation_summary:
  {"purpose":"Provides n8n workflow access to the Keephub API so you can manage users, create and distribute content, and automate employee engagement tasks and forms from within n8n.","capabilities":["User: Get by ID","User: Find by Login Name","User: Find by Group","User: Find by Orgunit","Content: Create (news, forms, manuals, etc.)","Content: Delete","Content: Get by ID","Content: Update by ID","Content: Find by Content Pool","Content: Find by Group"],"authentication":"Bearer Token (API token) or Login Credentials (username & password) with optional custom token endpoint; credentials include Client URL and optional language","commonUseCases":["Fetch user details to enrich or route workflow data (by ID, login name, group, or org unit)","Programmatically create, update or delete content (announcements, forms, manuals) in Keephub","Distribute or filter content for specific groups or organizational units with sorting/pagination","Automate employee communications by integrating Keephub content creation into workflow triggers","Sync Keephub users or content with other systems (HR, CMS, ticketing) via n8n workflows"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-parseur.parseur
package_name: n8n-nodes-parseur
display_name: Parseur
description: Interact with Parseur to upload text or files
category: Development
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: parseur
author_github_url: https://github.com/parseur/parseur-n8n-node.git
npm_package_name: n8n-nodes-parseur
npm_version: 0.0.4
community_fetched_at: 2026-02-19T14:41:52.365Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "uploadFile",
      "options": [
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload a file to a mailbox",
          "description": "Upload a file to a mailbox"
        },
        {
          "name": "Upload Text",
          "value": "uploadText",
          "action": "Upload a text html document to a mailbox",
          "description": "Upload a text/HTML document to a mailbox"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload a file to a mailbox",
      "description": "Upload a file to a mailbox"
    },
    {
      "name": "Upload Text",
      "value": "uploadText",
      "action": "Upload a text html document to a mailbox",
      "description": "Upload a text/HTML document to a mailbox"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    }
  ]

npm_readme:
  # Parseur n8n Node

  > 🧩 Official n8n Node to interact with [Parseur](https://parseur.com): receive events, upload text or upload files.

  [![npm version](https://badge.fury.io/js/n8n-nodes-parseur.svg)](https://badge.fury.io/js/n8n-nodes-parseur)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  [About](#about)  
  [Operations](#operations)  
  [Installation](#installation)  
  [Credentials](#credentials)  
  [Compatibility](#compatibility)  
  [Resources](#resources)  
  [Credit](#credit)  
  [License](#license)  


  ## About

  **Parseur** is a powerful no-code data extraction platform that helps you turn emails, PDFs, and other documents into structured data.

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

  ✅ Trigger workflows when documents or tables are processed (via webhook)  
  ✅ Upload new documents as text (via API)  
  ✅ Upload files to a parser (via API)

  ## Operations

  - Upload File: send binary files (PDF, EML, etc.) to a Mailbox
  - Upload Text: send plain or HTML content as a document to a Mailbox
  - Supports webhook events from Parseur:

    | Event                          | Type        | Description                          |
    |--------------------------------|-------------|--------------------------------------|
    | `document.processed`           | document    | Document processed successfully      |
    | `document.processed.flattened` | document    | Document processed as flat data      |
    | `document.template_needed`     | document    | Processing failed (template needed)  |
    | `document.export_failed`       | document    | Export failed                        |
    | `table.processed`              | table       | A table field row was processed      |
    | `table.processed.flattened`    | table       | A table field row (flattened)        |


  ## Installation

  ### Install from npm

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

  ### Install from source

  1. Install dependencies

  ```bash
  brew install pnpm
  pnpm setup
  source ~/.zshrc
  ```

  2. Clone and build the node

  ```bash
  git clone https://github.com/parseur/parseur-n8n-node <parseur-n8n-node>
  cd <parseur-n8n-node>
  pnpm install
  pnpm build
  ```

  3. Set up a local n8n instance

  ```bash
  mkdir <n8n>
  cd <n8n>
  pnpm init
  pnpm add sqlite3
  pnpm approve-builds  # Needed for sqlite3 to complete install
  pnpm add n8n
  pnpm approve-builds  # Needed for n8n to complete install (select all packages, confirm and press Enter)
  pnpm exec n8n
  ```

  4. Link the Parseur node to n8n

  ```bash
  cd ~/.n8n
  mkdir -p custom
  cd custom
  pnpm init
  pnpm link <parseur-n8n-node>
  ```

  5. Restart n8n and you will see Parseur Trigger available.

  ```bash
  cd <n8n>
  pnpm exec n8n
  ```

  ## Credentials

  To connect n8n with your Parseur account, you’ll need two values: an **API Key** and a **Webhook Token**.

  ### API Key

  Get your API key in the [Parseur account settings](https://app.parseur.com/account).  
  This key is required to authenticate API requests to the Parseur platform.

  1. Log in to your [Parseur](https://app.parseur.com/login).
  2. Navigate to **Account**
  3. Copy your **API Key**.

  In n8n:

  - Click **“Add Credential”** and search for **"Parseur API"**.
  - Paste your API Key into the **API Key** field.

  ### Webhook Token

  The **Webhook Token** is used to verify that incoming webhook requests (e.g. from n8n to Parseur) are legitimate.

  You can generate a secure random token using a service like [uuidgenerator.net](https://www.uuidgenerator.net/), or generate one yourself using a tool or script of your choice.

  1. Go to [uuidgenerator.net](https://www.uuidgenerator.net/).
  2. Copy a generated UUID or token string.
  3. Paste it into the **Webhook Token** field in your Parseur credential in n8n.

  This token will be expected in the HTTP header `X-Parseur-Token` of all webhook requests.

  ## Compatibility

  Compatible with n8n v1.91.2.

  ## Resources

  - [Parseur](https://parseur.com) — Document processing & data extraction
  - [n8n](https://n8n.io) — Workflow automation

  ## Version history

  #### v0.0.1
  Initial release

  ## Contributing

  We welcome contributions and ideas!

  Please [open an issue](https://github.com/parseur/parseur-n8n-node/issues) or [submit a pull request](https://github.com/parseur/parseur-n8n-node/pulls) if you want to improve this node.

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Interact with Parseur to upload documents (files or text) for parsing and to trigger n8n workflows from Parseur webhook events.","capabilities":["Trigger workflows from Parseur webhook events (document and table events)","Upload binary files (PDF, EML, etc.) to a Parseur Mailbox via API","Upload plain text or HTML content as a document to a Parseur Mailbox via API","Validate incoming webhooks using a Webhook Token (expects X-Parseur-Token header)","Receive specific events: document.processed, document.processed.flattened, document.template_needed, document.export_failed, table.processed, table.processed.flattened"],"authentication":"API Key required for API requests; Webhook Token required to verify incoming webhook requests (token sent in X-Parseur-Token header).","commonUseCases":["Automatically trigger workflows when Parseur finishes processing a document","Ingest emails, PDFs, or other files into Parseur from other apps or storage (upload file)","Send plain text or HTML content to Parseur for extraction (upload text)","Handle row-level table events to process tabular data as it arrives","Detect processing failures (template needed or export failed) and kick off remediation steps"],"limitations":["Compatible with n8n v1.91.2 (as documented)","Initial release (v0.0.1); README documents only upload and webhook operations — additional Parseur API features are not documented in this node README"],"relatedNodes":[]}


node_type: n8n-nodes-tallyforms.tallyTrigger
package_name: n8n-nodes-tallyforms
display_name: Tally Trigger
description: Starts the workflow on a Tally form submission
category: Community
development_style: declarative
version: 1,2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: wouterds
author_github_url: https://github.com/tallyforms/
npm_package_name: n8n-nodes-tallyforms
npm_version: 1.3.1
community_fetched_at: 2026-02-19T14:41:52.366Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  # n8n trigger for Tally submissions

  This is an n8n community node that lets you trigger n8n workflows when your Tally form receives a new submission. You will be able to work with the submission data on trigger.

  ## Installation

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

  ## Usage

  1. Create an API key on https://tally.so/settings/api-keys
  2. Create the Tally Trigger
  3. Create a credential for the Tally Trigger using your API key
  4. Select the form for which you want to trigger workflows on submission

  ## Developers

  For instructions on testing this node on a local n8n instance for development purposes, see https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/

ai_documentation_summary:
  {"purpose":"Starts an n8n workflow when a selected Tally form receives a new submission, passing the submission data into the workflow.","capabilities":["Trigger workflows on new Tally form submissions","Expose full submission data to downstream nodes","Allow selecting which Tally form to monitor","Use an API key credential to authorize access to the Tally account"],"authentication":"API key required","commonUseCases":["Send notifications (email/Slack) when a form is submitted","Insert new form submissions into a database or Google Sheets","Create CRM contacts or leads from form submissions","Send confirmation or follow-up emails to respondents","Start multi-step automations based on submission data"],"limitations":["Only triggers on new submissions (no mention of edits or deletes)","Requires manual creation of an API key credential in n8n","README does not document real-time guarantees, retry behavior, or duplicate handling","No built-in advanced filtering or field-mapping features described","Attachment/file handling is not documented in the README"],"relatedNodes":[]}


node_type: n8n-nodes-vikunja.vikunja
package_name: n8n-nodes-vikunja
display_name: Vikunja
description: Get data from Vikunja's API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: kolaente
author_github_url: https://github.com/go-vikunja/n8n-vikunja-nodes.git
npm_package_name: n8n-nodes-vikunja
npm_version: 0.4.1
community_fetched_at: 2026-02-19T14:41:52.368Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "task",
      "options": [
        {
          "name": "Label",
          "value": "label"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Team",
          "value": "team"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add a Comment",
          "value": "addComment",
          "action": "Add a comment",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/comments",
              "method": "PUT"
            }
          },
          "description": "Add a comment to a task"
        },
        {
          "name": "Add a Label",
          "value": "addLabel",
          "action": "Add a label",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/labels",
              "method": "PUT"
            }
          },
          "description": "Add a label to a task"
        },
        {
          "name": "Add a Reaction",
          "value": "addReaction",
          "action": "Add a reaction",
          "routing": {
            "request": {
              "url": "=/{{$parameter.reactionKind}}/{{$parameter.reactionEntityID}}/reactions",
              "method": "PUT"
            }
          },
          "description": "Add a reaction to a task or comment"
        },
        {
          "name": "Add a Relation",
          "value": "addRelation",
          "action": "Add a relation",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/relations",
              "method": "PUT"
            }
          },
          "description": "Add a relation to a task"
        },
        {
          "name": "Assign a User to a Task",
          "value": "assignUser",
          "action": "Assign a user",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/assignees",
              "method": "PUT"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.taskProject}}/tasks",
              "method": "PUT"
            }
          },
          "description": "Create a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a task"
        },
        {
          "name": "Delete a Comment",
          "value": "deleteComment",
          "action": "Delete a comment",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/comments/{{$parameter.commentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing comment on a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "GET"
            }
          },
          "description": "Get a task"
        },
        {
          "name": "Get All Comments",
          "value": "getAllComments",
          "action": "Get all comments",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/comments",
              "method": "GET"
            }
          },
          "description": "Fetch all comments on a task"
        },
        {
          "name": "Get All Labels",
          "value": "getAllLabelsOnTask",
          "action": "Get all labels",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/labels",
              "method": "GET"
            }
          },
          "description": "Fetch all labels on a task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.taskProject}}/tasks",
              "method": "GET"
            }
          },
          "description": "Get many tasks"
        },
        {
          "name": "Remove a Label From a Task",
          "value": "removeLabel",
          "action": "Remove a label",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/labels/{{$parameter.taskLabel}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Remove a Reaction",
          "value": "removeReaction",
          "action": "Remove a reaction",
          "routing": {
            "request": {
              "url": "=/{{$parameter.reactionKind}}/{{$parameter.reactionEntityID}}/reactions/delete",
              "method": "POST"
            }
          },
          "description": "Remove a reaction from a task or comment"
        },
        {
          "name": "Remove a Relation",
          "value": "removeRelation",
          "action": "Remove a relation",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/relations/{{$parameter.relationKind}}/{{$parameter.otherTaskId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove an existing relation on a task"
        },
        {
          "name": "Remove an Assigned User From a Task",
          "value": "unassignUser",
          "action": "Unassign a user",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/assignees/{{$parameter.userId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}",
              "method": "POST"
            }
          },
          "description": "Update a task"
        },
        {
          "name": "Update a Comment",
          "value": "updateComment",
          "action": "Update a comment",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/comments/{{$parameter.commentId}}",
              "method": "POST"
            }
          },
          "description": "Update an existing comment on a task"
        },
        {
          "name": "Update Task Position",
          "value": "updateTaskPosition",
          "action": "Update the task position",
          "routing": {
            "request": {
              "url": "=/tasks/{{$parameter.taskId}}/position",
              "method": "POST"
            }
          },
          "description": "Update the position of a task on a view"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add a Team",
          "value": "addTeam",
          "action": "Add a team",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/teams",
              "method": "PUT"
            }
          },
          "description": "Add a team to a project"
        },
        {
          "name": "Add a User",
          "value": "addUser",
          "action": "Add a user",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/users",
              "method": "PUT"
            }
          },
          "description": "Add a user to a project"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "routing": {
            "request": {
              "url": "=/projects",
              "method": "PUT"
            }
          },
          "description": "Create a project"
        },
        {
          "name": "Create a Kanban Bucket",
          "value": "createBucket",
          "action": "Create a bucket",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets",
              "method": "PUT"
            }
          },
          "description": "Create a kanban bucket for a view"
        },
        {
          "name": "Create a Link Share",
          "value": "createLinkShare",
          "action": "Create a link share",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/shares",
              "method": "PUT"
            }
          },
          "description": "Create Link Share for a project"
        },
        {
          "name": "Create a Project View",
          "value": "createProjectView",
          "action": "Create a project view",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views",
              "method": "PUT"
            }
          },
          "description": "Create a view in a project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a project"
        },
        {
          "name": "Delete a Kanban Bucket",
          "value": "deleteBucket",
          "action": "Delete a bucket",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets/{{$parameter.bucketId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a kanban bucket from a view"
        },
        {
          "name": "Delete a Link Share",
          "value": "deleteLinkShare",
          "action": "Delete a link share",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/shares/{{$parameter.linkShareId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a link share from a project"
        },
        {
          "name": "Delete a Project View",
          "value": "deleteProjectView",
          "action": "Delete a project view",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a project view from a project"
        },
        {
          "name": "Duplicate",
          "value": "duplicate",
          "action": "Duplicate a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/duplicate",
              "method": "PUT"
            }
          },
          "description": "Duplicate a project"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}",
              "method": "GET"
            }
          },
          "description": "Get a project"
        },
        {
          "name": "Get All Link Shares",
          "value": "getAllLinkShares",
          "action": "Get all link shares",
          "routing": {
            "request": {
              "url": "=/project/{{$parameter.project}}/shares",
              "method": "GET"
            }
          },
          "description": "Fetch all linkShares on a project"
        },
        {
          "name": "Get All Project Views",
          "value": "getAllProjectViews",
          "action": "Get all views",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views",
              "method": "GET"
            }
          },
          "description": "Fetch all views which are associated to this project"
        },
        {
          "name": "Get All Teams",
          "value": "getAllTeams",
          "action": "Get all teams",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/teams",
              "method": "GET"
            }
          },
          "description": "Fetch all teams who have access to a project"
        },
        {
          "name": "Get All Users",
          "value": "getAllUsers",
          "action": "Get all users",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/users",
              "method": "GET"
            }
          },
          "description": "Fetch all users who have access to a project"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many projects",
          "routing": {
            "request": {
              "url": "=/projects",
              "method": "GET"
            }
          },
          "description": "Get many projects"
        },
        {
          "name": "Remove a Team From a Project",
          "value": "removeTeam",
          "action": "Remove a team",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/teams/{{$parameter.teamId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Remove a User From a Project",
          "value": "removeUser",
          "action": "Remove a user",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/users/{{$parameter.userId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}",
              "method": "POST"
            }
          },
          "description": "Update a project"
        },
        {
          "name": "Update a Kanban Bucket",
          "value": "updateBucket",
          "action": "Update a bucket",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets/{{$parameter.bucketId}}",
              "method": "POST"
            }
          },
          "description": "Update a kanban bucket in a view"
        },
        {
          "name": "Update a Project View",
          "value": "updateProjectView",
          "action": "Update a project view",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Update a Team's Permissions on a Project",
          "value": "updateTeam",
          "action": "Update a team s permissions on a project a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/teams/{{$parameter.teamId}}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Update a User's Permissions on a Project",
          "value": "updateUser",
          "action": "Update a user s permissions on a project a project",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.project}}/users/{{$parameter.userId}}",
              "method": "POST"
            }
          }
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a label",
          "routing": {
            "request": {
              "url": "=/labels",
              "method": "PUT"
            }
          },
          "description": "Create a label"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a label",
          "routing": {
            "request": {
              "url": "=/labels/{{$parameter.label}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a label"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a label",
          "routing": {
            "request": {
              "url": "=/labels/{{$parameter.label}}",
              "method": "GET"
            }
          },
          "description": "Get a label"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many labels",
          "routing": {
            "request": {
              "url": "=/labels",
              "method": "GET"
            }
          },
          "description": "Get many labels"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a label",
          "routing": {
            "request": {
              "url": "=/labels/{{$parameter.label}}",
              "method": "POST"
            }
          },
          "description": "Update a label"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "label"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.webhookProject}}/webhooks",
              "method": "PUT"
            }
          },
          "description": "Create a webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.webhookProject}}/webhooks/{{$parameter.webhook}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a webhook"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhooks",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.webhookProject}}/webhooks",
              "method": "GET"
            }
          },
          "description": "Get many webhooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "routing": {
            "request": {
              "url": "=/projects/{{$parameter.webhookProject}}/webhooks/{{$parameter.webhook}}",
              "method": "POST"
            }
          },
          "description": "Update a webhook"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add a User",
          "value": "addUser",
          "action": "Add a user",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}/members",
              "method": "PUT"
            }
          },
          "description": "Add a user to a team"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a team",
          "routing": {
            "request": {
              "url": "=/teams",
              "method": "PUT"
            }
          },
          "description": "Create a team"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a team",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a team"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a team",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}",
              "method": "GET"
            }
          },
          "description": "Get a team"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many teams",
          "routing": {
            "request": {
              "url": "=/teams",
              "method": "GET"
            }
          },
          "description": "Get many teams"
        },
        {
          "name": "Remove a User From a Team",
          "value": "removeUser",
          "action": "Remove a user",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}/members/{{$parameter.userId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Toggle a User's Admin Status in a Team",
          "value": "updateUser",
          "action": "Toggle admin status",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}/members/{{$parameter.userId}}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a team",
          "routing": {
            "request": {
              "url": "=/teams/{{$parameter.team}}",
              "method": "POST"
            }
          },
          "description": "Update a team"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "team"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add a Comment",
      "value": "addComment",
      "action": "Add a comment",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/comments",
          "method": "PUT"
        }
      },
      "description": "Add a comment to a task"
    },
    {
      "name": "Add a Label",
      "value": "addLabel",
      "action": "Add a label",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/labels",
          "method": "PUT"
        }
      },
      "description": "Add a label to a task"
    },
    {
      "name": "Add a Reaction",
      "value": "addReaction",
      "action": "Add a reaction",
      "routing": {
        "request": {
          "url": "=/{{$parameter.reactionKind}}/{{$parameter.reactionEntityID}}/reactions",
          "method": "PUT"
        }
      },
      "description": "Add a reaction to a task or comment"
    },
    {
      "name": "Add a Relation",
      "value": "addRelation",
      "action": "Add a relation",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/relations",
          "method": "PUT"
        }
      },
      "description": "Add a relation to a task"
    },
    {
      "name": "Assign a User to a Task",
      "value": "assignUser",
      "action": "Assign a user",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/assignees",
          "method": "PUT"
        }
      }
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.taskProject}}/tasks",
          "method": "PUT"
        }
      },
      "description": "Create a task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a task"
    },
    {
      "name": "Delete a Comment",
      "value": "deleteComment",
      "action": "Delete a comment",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/comments/{{$parameter.commentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing comment on a task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "GET"
        }
      },
      "description": "Get a task"
    },
    {
      "name": "Get All Comments",
      "value": "getAllComments",
      "action": "Get all comments",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/comments",
          "method": "GET"
        }
      },
      "description": "Fetch all comments on a task"
    },
    {
      "name": "Get All Labels",
      "value": "getAllLabelsOnTask",
      "action": "Get all labels",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/labels",
          "method": "GET"
        }
      },
      "description": "Fetch all labels on a task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.taskProject}}/tasks",
          "method": "GET"
        }
      },
      "description": "Get many tasks"
    },
    {
      "name": "Remove a Label From a Task",
      "value": "removeLabel",
      "action": "Remove a label",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/labels/{{$parameter.taskLabel}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Remove a Reaction",
      "value": "removeReaction",
      "action": "Remove a reaction",
      "routing": {
        "request": {
          "url": "=/{{$parameter.reactionKind}}/{{$parameter.reactionEntityID}}/reactions/delete",
          "method": "POST"
        }
      },
      "description": "Remove a reaction from a task or comment"
    },
    {
      "name": "Remove a Relation",
      "value": "removeRelation",
      "action": "Remove a relation",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/relations/{{$parameter.relationKind}}/{{$parameter.otherTaskId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove an existing relation on a task"
    },
    {
      "name": "Remove an Assigned User From a Task",
      "value": "unassignUser",
      "action": "Unassign a user",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/assignees/{{$parameter.userId}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}",
          "method": "POST"
        }
      },
      "description": "Update a task"
    },
    {
      "name": "Update a Comment",
      "value": "updateComment",
      "action": "Update a comment",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/comments/{{$parameter.commentId}}",
          "method": "POST"
        }
      },
      "description": "Update an existing comment on a task"
    },
    {
      "name": "Update Task Position",
      "value": "updateTaskPosition",
      "action": "Update the task position",
      "routing": {
        "request": {
          "url": "=/tasks/{{$parameter.taskId}}/position",
          "method": "POST"
        }
      },
      "description": "Update the position of a task on a view"
    },
    {
      "name": "Add a Team",
      "value": "addTeam",
      "action": "Add a team",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/teams",
          "method": "PUT"
        }
      },
      "description": "Add a team to a project"
    },
    {
      "name": "Add a User",
      "value": "addUser",
      "action": "Add a user",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/users",
          "method": "PUT"
        }
      },
      "description": "Add a user to a project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "routing": {
        "request": {
          "url": "=/projects",
          "method": "PUT"
        }
      },
      "description": "Create a project"
    },
    {
      "name": "Create a Kanban Bucket",
      "value": "createBucket",
      "action": "Create a bucket",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets",
          "method": "PUT"
        }
      },
      "description": "Create a kanban bucket for a view"
    },
    {
      "name": "Create a Link Share",
      "value": "createLinkShare",
      "action": "Create a link share",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/shares",
          "method": "PUT"
        }
      },
      "description": "Create Link Share for a project"
    },
    {
      "name": "Create a Project View",
      "value": "createProjectView",
      "action": "Create a project view",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views",
          "method": "PUT"
        }
      },
      "description": "Create a view in a project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a project"
    },
    {
      "name": "Delete a Kanban Bucket",
      "value": "deleteBucket",
      "action": "Delete a bucket",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets/{{$parameter.bucketId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a kanban bucket from a view"
    },
    {
      "name": "Delete a Link Share",
      "value": "deleteLinkShare",
      "action": "Delete a link share",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/shares/{{$parameter.linkShareId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a link share from a project"
    },
    {
      "name": "Delete a Project View",
      "value": "deleteProjectView",
      "action": "Delete a project view",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a project view from a project"
    },
    {
      "name": "Duplicate",
      "value": "duplicate",
      "action": "Duplicate a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/duplicate",
          "method": "PUT"
        }
      },
      "description": "Duplicate a project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}",
          "method": "GET"
        }
      },
      "description": "Get a project"
    },
    {
      "name": "Get All Link Shares",
      "value": "getAllLinkShares",
      "action": "Get all link shares",
      "routing": {
        "request": {
          "url": "=/project/{{$parameter.project}}/shares",
          "method": "GET"
        }
      },
      "description": "Fetch all linkShares on a project"
    },
    {
      "name": "Get All Project Views",
      "value": "getAllProjectViews",
      "action": "Get all views",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views",
          "method": "GET"
        }
      },
      "description": "Fetch all views which are associated to this project"
    },
    {
      "name": "Get All Teams",
      "value": "getAllTeams",
      "action": "Get all teams",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/teams",
          "method": "GET"
        }
      },
      "description": "Fetch all teams who have access to a project"
    },
    {
      "name": "Get All Users",
      "value": "getAllUsers",
      "action": "Get all users",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/users",
          "method": "GET"
        }
      },
      "description": "Fetch all users who have access to a project"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many projects",
      "routing": {
        "request": {
          "url": "=/projects",
          "method": "GET"
        }
      },
      "description": "Get many projects"
    },
    {
      "name": "Remove a Team From a Project",
      "value": "removeTeam",
      "action": "Remove a team",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/teams/{{$parameter.teamId}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Remove a User From a Project",
      "value": "removeUser",
      "action": "Remove a user",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/users/{{$parameter.userId}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}",
          "method": "POST"
        }
      },
      "description": "Update a project"
    },
    {
      "name": "Update a Kanban Bucket",
      "value": "updateBucket",
      "action": "Update a bucket",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}/buckets/{{$parameter.bucketId}}",
          "method": "POST"
        }
      },
      "description": "Update a kanban bucket in a view"
    },
    {
      "name": "Update a Project View",
      "value": "updateProjectView",
      "action": "Update a project view",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/views/{{$parameter.view}}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Update a Team's Permissions on a Project",
      "value": "updateTeam",
      "action": "Update a team s permissions on a project a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/teams/{{$parameter.teamId}}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Update a User's Permissions on a Project",
      "value": "updateUser",
      "action": "Update a user s permissions on a project a project",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.project}}/users/{{$parameter.userId}}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a label",
      "routing": {
        "request": {
          "url": "=/labels",
          "method": "PUT"
        }
      },
      "description": "Create a label"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a label",
      "routing": {
        "request": {
          "url": "=/labels/{{$parameter.label}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a label"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a label",
      "routing": {
        "request": {
          "url": "=/labels/{{$parameter.label}}",
          "method": "GET"
        }
      },
      "description": "Get a label"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many labels",
      "routing": {
        "request": {
          "url": "=/labels",
          "method": "GET"
        }
      },
      "description": "Get many labels"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a label",
      "routing": {
        "request": {
          "url": "=/labels/{{$parameter.label}}",
          "method": "POST"
        }
      },
      "description": "Update a label"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.webhookProject}}/webhooks",
          "method": "PUT"
        }
      },
      "description": "Create a webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.webhookProject}}/webhooks/{{$parameter.webhook}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a webhook"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many webhooks",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.webhookProject}}/webhooks",
          "method": "GET"
        }
      },
      "description": "Get many webhooks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "routing": {
        "request": {
          "url": "=/projects/{{$parameter.webhookProject}}/webhooks/{{$parameter.webhook}}",
          "method": "POST"
        }
      },
      "description": "Update a webhook"
    },
    {
      "name": "Add a User",
      "value": "addUser",
      "action": "Add a user",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}/members",
          "method": "PUT"
        }
      },
      "description": "Add a user to a team"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a team",
      "routing": {
        "request": {
          "url": "=/teams",
          "method": "PUT"
        }
      },
      "description": "Create a team"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a team",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a team"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a team",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}",
          "method": "GET"
        }
      },
      "description": "Get a team"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many teams",
      "routing": {
        "request": {
          "url": "=/teams",
          "method": "GET"
        }
      },
      "description": "Get many teams"
    },
    {
      "name": "Remove a User From a Team",
      "value": "removeUser",
      "action": "Remove a user",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}/members/{{$parameter.userId}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Toggle a User's Admin Status in a Team",
      "value": "updateUser",
      "action": "Toggle admin status",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}/members/{{$parameter.userId}}",
          "method": "POST"
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a team",
      "routing": {
        "request": {
          "url": "=/teams/{{$parameter.team}}",
          "method": "POST"
        }
      },
      "description": "Update a team"
    }
  ]

npm_readme:
  # n8n-nodes-vikunja

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

  Vikunja is an open-source, self-hostable to-do and productivity application.
  Check out [our website](https://vikunja.io/) for more information.

  [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)  
  * [Development](#development)
  * [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 all operations supported by Vikunja API tokens.
  You can see a full list of possible actions when creating a token in Vikunja.

  It also allows you to trigger n8n workflows by Vikunja webhooks.

  ## Credentials

  The only supported authentication method for this node are API tokens.
  On your Vikunja instance, head over to *Settings > API Tokens* and create a new token.

  In n8n, create credentials as you usually would.
  Enter the API token created previously and the API url.

  ## Compatibility

  Tested with n8n Version 1.91.3.

  ## Development

  You need npm and NodeJS installed.

  * Install dependencies with `npm i`
  * Build the node with `npm run build`
  * Check for lint errors with `npm run lint` and fix them with `npm run lintfix`
  * To release a new version in the npm registry, run `npm publish`
  * To test the node, build the node with `npm run build`, then while in the project directory run `export N8N_CUSTOM_EXTENSIONS=$PWD` and start n8n with the `n8n` command. You should now be able to find the node when searching for it.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Provides access to Vikunja's API from n8n workflows: perform Vikunja operations (manage to-dos and related resources) and trigger workflows from Vikunja webhooks.","capabilities":["Call any Vikunja REST API endpoint allowed by an API token (create, read, update, delete resources)","Manage tasks (create/update/complete/list) and related resources such as lists, projects, labels/tags, comments and users (as exposed by the Vikunja API)","Trigger n8n workflows from Vikunja webhooks","Use the node to perform any operation permitted by a Vikunja API token"],"authentication":"API key required (Vikunja API token + Vikunja instance URL)","commonUseCases":["Automate creation and updates of tasks from other apps","Sync tasks and project data between Vikunja and other systems","Trigger workflows in n8n when Vikunja sends webhook events (task created/updated/completed)","Programmatic management or bulk updates of lists, projects, labels or users","Export or back up Vikunja data via automated workflows"],"limitations":["Only API token authentication is supported (no OAuth2 or other auth methods)","Operations are limited to what the Vikunja API and the token permissions allow","Community node (not an official n8n core node) — compatibility/testing noted for n8n v1.91.3"],"relatedNodes":[]}


node_type: n8n-nodes-pagepixels-screenshots.pagePixelsScreenshots
package_name: n8n-nodes-pagepixels-screenshots
display_name: PagePixels Screenshots
description: Capture website screenshots using the PagePixels API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: pagepixels
author_github_url: https://github.com/PagePixels/
npm_package_name: n8n-nodes-pagepixels-screenshots
npm_version: 1.0.0
community_fetched_at: 2026-02-19T14:41:52.369Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "screenshot",
      "options": [
        {
          "name": "Screenshot",
          "value": "screenshot"
        },
        {
          "name": "Metadata",
          "value": "metadata"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "quickSnap",
      "options": [
        {
          "name": "AI Analysis Screenshot",
          "value": "aiAnalysisScreenshot",
          "action": "Take a screenshot and analyze it with AI",
          "routing": {
            "request": {
              "qs": {
                "analyze_image_with_ai": true
              },
              "url": "/snap",
              "method": "POST"
            }
          },
          "description": "Capture a web page screenshot and run AI analysis with a custom prompt"
        },
        {
          "name": "Quick Snap",
          "value": "quickSnap",
          "action": "Take a screenshot of a web page",
          "routing": {
            "request": {
              "url": "/snap",
              "method": "POST"
            }
          },
          "description": "Capture an instant screenshot from a URL"
        },
        {
          "name": "Real Location Screenshot",
          "value": "realLocationScreenshot",
          "action": "Capture a screenshot from a real geographic location",
          "routing": {
            "request": {
              "url": "/snap",
              "method": "POST"
            }
          },
          "description": "Capture screenshots using residential IPs within a chosen location"
        },
        {
          "name": "Snap HTML",
          "value": "snapHtml",
          "action": "Take a screenshot of custom HTML",
          "routing": {
            "request": {
              "url": "/snap_html",
              "method": "POST"
            }
          },
          "description": "Render supplied HTML and capture it as an image"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "screenshot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listRealLocations",
      "options": [
        {
          "name": "List Real Locations",
          "value": "listRealLocations",
          "action": "List real locations",
          "routing": {
            "request": {
              "url": "/real_locations",
              "method": "GET"
            }
          },
          "description": "Retrieve the available residential proxy locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "metadata"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "AI Analysis Screenshot",
      "value": "aiAnalysisScreenshot",
      "action": "Take a screenshot and analyze it with AI",
      "routing": {
        "request": {
          "qs": {
            "analyze_image_with_ai": true
          },
          "url": "/snap",
          "method": "POST"
        }
      },
      "description": "Capture a web page screenshot and run AI analysis with a custom prompt"
    },
    {
      "name": "Quick Snap",
      "value": "quickSnap",
      "action": "Take a screenshot of a web page",
      "routing": {
        "request": {
          "url": "/snap",
          "method": "POST"
        }
      },
      "description": "Capture an instant screenshot from a URL"
    },
    {
      "name": "Real Location Screenshot",
      "value": "realLocationScreenshot",
      "action": "Capture a screenshot from a real geographic location",
      "routing": {
        "request": {
          "url": "/snap",
          "method": "POST"
        }
      },
      "description": "Capture screenshots using residential IPs within a chosen location"
    },
    {
      "name": "Snap HTML",
      "value": "snapHtml",
      "action": "Take a screenshot of custom HTML",
      "routing": {
        "request": {
          "url": "/snap_html",
          "method": "POST"
        }
      },
      "description": "Render supplied HTML and capture it as an image"
    },
    {
      "name": "List Real Locations",
      "value": "listRealLocations",
      "action": "List real locations",
      "routing": {
        "request": {
          "url": "/real_locations",
          "method": "GET"
        }
      },
      "description": "Retrieve the available residential proxy locations"
    }
  ]

npm_readme:
  # n8n-nodes-pagepixels-screenshots

  This n8n community node lets you trigger the PagePixels Screenshots API directly from your workflows. Capture high-fidelity website screenshots, render custom HTML, request real location captures (from countries and states around the world), and pair each image with AI-powered analysis, no custom HTTP node required.

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

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

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation, then install this package with:

  ```bash
  npm install n8n-nodes-pagepixels-screenshots
  ```

  Restart n8n and the node will appear in the editor.

  ## Operations

  All operations return the raw PagePixels response, including the screenshot asset URLs, embed links, job IDs, and AI metadata when available.

  - **Quick Snap** – Capture an instant screenshot from any public URL.
  - **Snap HTML** – Render supplied HTML (with optional CSS/JS injection) and capture the output.
  - **Real Location Screenshot** – Capture a page through PagePixels’ residential proxy network (countries, regions, and major cities).
  - **AI Analysis Screenshot** – Take a screenshot and run an AI visual analysis using your custom prompt.

  Each operation exposes the full set of optional PagePixels parameters — viewport size, wait conditions, multi-step actions, ad/cookie blocking, geolocation overrides, headers, cookies, caching, and more.

  ## Credentials

  Configure one of the two supported authentication strategies in n8n.

  ### API key

  1. Sign in to [PagePixels](https://pagepixels.com) and create an API key in the dashboard.
  2. Add the **PagePixels API** credential in n8n and paste the key.
  3. Leave “Use Bearer Prefix” enabled unless your key must be sent in plain text.
  4. (Optional) Provide extra headers in the node if you need to override the default `Authorization: Bearer` header.

  ### OAuth2

  1. Register an OAuth app by contacting support for production credentials.
  2. In n8n, create a **PagePixels OAuth2 API** credential.
  3. Use `https://pagepixels.com/oauth/authorize` as the authorization URL and `https://pagepixels.com/oauth/token` as the access token URL (defaults are pre-filled).
  4. Enter your client ID and client secret, then complete the OAuth handshake when prompted in a workflow.

  ## Compatibility

  Compatible with n8n v1.60.0 or later.

  ## Usage

  1. Drop the **PagePixels Screenshots** node into your workflow and select the desired operation.
  2. Choose the authentication method and credential.
  3. Provide the required fields (`URL`, `HTML Content`, `AI Prompt`, or `Proxy Location`, depending on the operation).
  4. Expand **Options** to set advanced rendering controls (multi-step actions, viewport, selectors, blocking flags, etc.).
  5. Execute the workflow to receive the screenshot metadata, including direct download links and analysis output.

  Tip: Chain the output into an **HTTP Request**, **Webhook**, or **Drive** node to archive images, notify teams, or trigger downstream automations.

  ## Resources

  - [PagePixels Screenshots API documentation](https://pagepixels.com/app/screenshots-api-documentation)
  - [PagePixels support](https://pagepixels.com/support)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"Expose the PagePixels Screenshots API inside n8n workflows to capture high-fidelity website screenshots (from URLs or rendered HTML), perform real-location captures via residential proxies, and run AI-powered visual analysis.","capabilities":["Quick Snap: instant screenshot from a public URL","Snap HTML: render provided HTML (with optional CSS/JS injection) and capture output","Real Location Screenshot: capture pages via PagePixels residential proxy network (countries, regions, major cities)","AI Analysis Screenshot: capture a screenshot and run AI visual analysis with a custom prompt","Full PagePixels parameter support: viewport sizing, wait conditions, multi-step actions, selectors, ad/cookie blocking, geolocation overrides, headers, cookies, caching, etc.","Returns raw PagePixels response including screenshot asset URLs, embed links, job IDs, and AI metadata","Supports sending extra/custom headers and overriding the default Authorization header"],"authentication":"API key (Bearer token, 'Use Bearer Prefix' enabled by default) or OAuth2 (authorize via PagePixels OAuth endpoints)","commonUseCases":["Automated website screenshot capture for monitoring or reporting","Render and capture dynamic or custom HTML snippets (e.g., emails, widgets) as images","Location-specific testing and QA using residential proxy captures from specific countries/regions/cities","AI-powered visual analysis for accessibility checks, content detection, or QA feedback","Visual regression monitoring and periodic snapshot archives"],"limitations":["Requires a PagePixels account and credentials (API key or OAuth2); OAuth production credentials require contacting PagePixels support","Node requires n8n v1.60.0 or later","Returns raw PagePixels responses — additional parsing or handling may be required in workflows","Operational limits (rate limits, quotas, costs) are governed by PagePixels and not handled by the node (check PagePixels docs/pricing)"],"relatedNodes":["HTTP Request","Webhook","Drive"]}


node_type: n8n-nodes-vikunja.vikunjaTrigger
package_name: n8n-nodes-vikunja
display_name: Vikunja Trigger
description: Starts the workflow when Vikunja events occur
category: Productivity
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: kolaente
author_github_url: https://github.com/go-vikunja/n8n-vikunja-nodes.git
npm_package_name: n8n-nodes-vikunja
npm_version: 0.4.1
community_fetched_at: 2026-02-19T14:41:52.370Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  # n8n-nodes-vikunja

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

  Vikunja is an open-source, self-hostable to-do and productivity application.
  Check out [our website](https://vikunja.io/) for more information.

  [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)  
  * [Development](#development)
  * [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 all operations supported by Vikunja API tokens.
  You can see a full list of possible actions when creating a token in Vikunja.

  It also allows you to trigger n8n workflows by Vikunja webhooks.

  ## Credentials

  The only supported authentication method for this node are API tokens.
  On your Vikunja instance, head over to *Settings > API Tokens* and create a new token.

  In n8n, create credentials as you usually would.
  Enter the API token created previously and the API url.

  ## Compatibility

  Tested with n8n Version 1.91.3.

  ## Development

  You need npm and NodeJS installed.

  * Install dependencies with `npm i`
  * Build the node with `npm run build`
  * Check for lint errors with `npm run lint` and fix them with `npm run lintfix`
  * To release a new version in the npm registry, run `npm publish`
  * To test the node, build the node with `npm run build`, then while in the project directory run `export N8N_CUSTOM_EXTENSIONS=$PWD` and start n8n with the `n8n` command. You should now be able to find the node when searching for it.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Starts n8n workflows in response to events from a Vikunja instance (via webhooks) and exposes operations supported by Vikunja API tokens for use in workflows.","capabilities":["Trigger workflows on Vikunja webhook events","Perform Vikunja API operations permitted by API tokens (supports all actions available when creating a token)"],"authentication":"API token required (provide Vikunja API token and the API URL in n8n credentials)","commonUseCases":["Start workflows when tasks or lists change in Vikunja (created, updated, completed)","Integrate Vikunja events with other services (notifications, logging, cross-app automation)","Automate follow-up actions based on received Vikunja webhook events"],"limitations":["Only API token authentication is supported (no OAuth2)","Functionality is limited to operations allowed by Vikunja API tokens","Tested with n8n version 1.91.3 — compatibility with other n8n versions is not guaranteed"],"relatedNodes":["Webhook","HTTP Request","Other Vikunja nodes (API action nodes)"]}


node_type: n8n-nodes-supadata.supadata
package_name: n8n-nodes-supadata
display_name: Supadata
description: Access Supadata API to fetch video metadata, transcripts, and web data from multiple platforms
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: rafalzawadzki
author_github_url: https://github.com/supadata-ai/
npm_package_name: n8n-nodes-supadata
npm_version: 0.3.1
community_fetched_at: 2026-02-19T14:41:52.371Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "media",
      "options": [
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "YouTube",
          "value": "youtube"
        },
        {
          "name": "Web",
          "value": "webScrape"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMetadata",
      "options": [
        {
          "name": "Get Metadata",
          "value": "getMetadata",
          "action": "Get metadata",
          "description": "Get metadata of a video from multiple platforms (YouTube, TikTok, Instagram, Twitter)"
        },
        {
          "name": "Get Transcript",
          "value": "getTranscript",
          "action": "Get transcript",
          "description": "Get the transcript of a video from multiple platforms (YouTube, TikTok, etc.)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getChannel",
      "options": [
        {
          "name": "Get Channel",
          "value": "getChannel",
          "action": "Get channel details",
          "description": "Get details of a YouTube channel"
        },
        {
          "name": "Get Channel Videos",
          "value": "getChannelVideos",
          "action": "Get channel videos",
          "description": "Get videos of a YouTube channel"
        },
        {
          "name": "Get Playlist",
          "value": "getPlaylist",
          "action": "Get playlist details",
          "description": "Get details of a YouTube playlist"
        },
        {
          "name": "Get Playlist Videos",
          "value": "getPlaylistVideos",
          "action": "Get playlist videos",
          "description": "Get videos of a YouTube playlist"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "youtube"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeUrl",
      "options": [
        {
          "name": "Scrape URL",
          "value": "scrapeUrl",
          "action": "Scrape data from a URL",
          "description": "Scrape data from a URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webScrape"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Metadata",
      "value": "getMetadata",
      "action": "Get metadata",
      "description": "Get metadata of a video from multiple platforms (YouTube, TikTok, Instagram, Twitter)"
    },
    {
      "name": "Get Transcript",
      "value": "getTranscript",
      "action": "Get transcript",
      "description": "Get the transcript of a video from multiple platforms (YouTube, TikTok, etc.)"
    },
    {
      "name": "Get Channel",
      "value": "getChannel",
      "action": "Get channel details",
      "description": "Get details of a YouTube channel"
    },
    {
      "name": "Get Channel Videos",
      "value": "getChannelVideos",
      "action": "Get channel videos",
      "description": "Get videos of a YouTube channel"
    },
    {
      "name": "Get Playlist",
      "value": "getPlaylist",
      "action": "Get playlist details",
      "description": "Get details of a YouTube playlist"
    },
    {
      "name": "Get Playlist Videos",
      "value": "getPlaylistVideos",
      "action": "Get playlist videos",
      "description": "Get videos of a YouTube playlist"
    },
    {
      "name": "Scrape URL",
      "value": "scrapeUrl",
      "action": "Scrape data from a URL",
      "description": "Scrape data from a URL"
    }
  ]

npm_readme:
  # n8n-nodes-supadata

  This is an n8n community node that allows you to integrate Supadata into your n8n workflows.

  Supadata is a service that provides tools for extracting and analyzing data from YouTube videos, channels, and web pages. With this node, you can easily retrieve video details, transcripts, channel information, and scrape web content directly within your n8n workflows.

  Supadata Website: [https://supadata.ai](https://supadata.ai)

  [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 -->  
  [Usage](#usage) <!-- delete if not using this section -->  
  [Resources](#resources)

  ## Installation

  Community Node Installation

  - Go to Settings > Community Nodes
  - Select Install
  - Enter n8n-nodes-supadata in the input field
  - Click Install

  Manual Installation

  - To install this node manually

  ```bash
  npm install n8n-nodes-supadata
  ```

  ## Operations

  - Get Video Metadata: Retrieve details about a YouTube video.
  - Get Transcript: Fetch the transcript of a YouTube video.
  - Get Channel Metadata: Retrieve information about a YouTube channel.
  - Get Channel Videos: Fetch a list of videos from a specific YouTube channel.
  - Get Playlist Metadata: Retrieve information about a YouTube playlist.
  - Get Playlist Videos: Fetch a list of videos from a specific YouTube playlist.
  - Get URL Content: Extract data from a web page.

  ## Credentials

  To use this node, you need to authenticate with Supadata using an API key. Follow these steps:

  - Sign up for an account with Supadata and obtain your API key.
  - Add the API key to the Supadata node in n8n credentials.

  ## Usage

  1. Create a new workflow in n8n.
  2. Add a Supadata node to your workflow.
  3. Authenticate using your Supadata API key via n8n’s credentials interface.
  4. Select the action you want to perform, and enter the required fields.
  5. Execute the node.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Supadata API Documentation](https://docs.supadata.ai)

  ## License

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

ai_documentation_summary:
  {"purpose":"Provides access to the Supadata API from n8n to retrieve YouTube video/channel/playlist metadata, transcripts, and to extract content from web pages for use in automation workflows.","capabilities":["Get Video Metadata - retrieve details about a YouTube video","Get Transcript - fetch a YouTube video's transcript","Get Channel Metadata - retrieve information about a YouTube channel","Get Channel Videos - list videos from a specific YouTube channel","Get Playlist Metadata - retrieve information about a YouTube playlist","Get Playlist Videos - list videos in a specific YouTube playlist","Get URL Content - extract/scrape data from a web page"],"authentication":"API key required","commonUseCases":["Fetch video metadata and feed results into downstream processing or databases","Retrieve transcripts for NLP tasks such as summarization, sentiment analysis, or indexing","Aggregate channel or playlist video lists for monitoring or content pipelines","Scrape web page content to extract articles, metadata, or text for analysis","Enrich records in CRMs or CMSs with video/channel metadata and transcripts"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-placid.placid
package_name: n8n-nodes-placid
display_name: Placid
description: Generate images, PDFs, and videos via Placid's API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: placidapp
author_github_url: https://github.com/placidapp/
npm_package_name: n8n-nodes-placid
npm_version: 0.1.6
community_fetched_at: 2026-02-19T14:41:52.373Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Video",
          "value": "video"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Other",
          "value": "other"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an image from a template",
          "description": "Generate a new image from a template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an image by ID",
          "description": "Retrieve an existing image by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an image by ID",
          "description": "Delete an existing image by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a PDF from a template",
          "description": "Generate a new PDF from a template"
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge multiple PDF files",
          "description": "Merge multiple existing PDFs into one"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a PDF by ID",
          "description": "Retrieve an existing PDF by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a PDF by ID",
          "description": "Delete an existing PDF by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a video from a template",
          "description": "Generate a new video from a template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a video by ID",
          "description": "Retrieve an existing video by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a video by ID",
          "description": "Delete an existing video by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a template",
          "description": "Create a new template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a template by ID",
          "description": "Delete an existing template by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template by ID",
          "description": "Retrieve an existing template by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many templates",
          "description": "Retrieve multiple templates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a template",
          "description": "Update an existing template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadMedia",
      "options": [
        {
          "name": "Upload Media",
          "value": "uploadMedia",
          "action": "Upload media files",
          "description": "Upload media files to Placid storage for use in templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "other"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an image from a template",
      "description": "Generate a new image from a template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an image by ID",
      "description": "Retrieve an existing image by ID"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an image by ID",
      "description": "Delete an existing image by ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a PDF from a template",
      "description": "Generate a new PDF from a template"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge multiple PDF files",
      "description": "Merge multiple existing PDFs into one"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a PDF by ID",
      "description": "Retrieve an existing PDF by ID"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a PDF by ID",
      "description": "Delete an existing PDF by ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a video from a template",
      "description": "Generate a new video from a template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a video by ID",
      "description": "Retrieve an existing video by ID"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a video by ID",
      "description": "Delete an existing video by ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a template",
      "description": "Create a new template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a template by ID",
      "description": "Delete an existing template by ID"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template by ID",
      "description": "Retrieve an existing template by ID"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many templates",
      "description": "Retrieve multiple templates"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a template",
      "description": "Update an existing template"
    },
    {
      "name": "Upload Media",
      "value": "uploadMedia",
      "action": "Upload media files",
      "description": "Upload media files to Placid storage for use in templates"
    }
  ]

npm_readme:
  ![Placid n8n Integration](https://placid.app/assets/n8n/github-header-n8n.jpg)

  # n8n-nodes-placid

  This is an n8n community node. It lets you use [Placid API](https://placid.app) in your n8n workflows.

  Placid is a powerful API service for automated image, PDF, and video generation from custom templates. Create dynamic visual content at scale with simple API calls.

  [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

  ### Quick Install
  ```bash
  npm install n8n-nodes-placid
  ```

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

  ### Complete Setup Guide  
  📖 **New to Placid + n8n?** Check out our comprehensive [Placid n8n Setup Guide](https://placid.app/help/n8n-setup-guide) with step-by-step instructions, examples, and best practices for:
  - Setting up your Placid project with n8n integration
  - Creating dynamic templates for images, PDFs, and videos  
  - Installing and configuring the node
  - Mapping data to template layers
  - Testing and completing your workflows

  ## Operations

  ### Image Operations
  - **Create Image** - Generate images from Placid templates with dynamic data
  - **Get Image** - Retrieve image information and download URLs
  - **Delete Image** - Delete generated images from your Placid account

  ### PDF Operations  
  - **Create PDF** - Generate PDFs from Placid templates with dynamic data
  - **Get PDF** - Retrieve PDF information and download URLs
  - **Delete PDF** - Delete generated PDFs from your Placid account

  ### Video Operations
  - **Create Video** - Generate videos from Placid templates with support for multiple clips and audio
  - **Get Video** - Retrieve video information and download URLs
  - **Delete Video** - Delete generated videos from your Placid account

  ### Template Operations
  - **Create Template** - Create new Placid templates
  - **Get Template** - Retrieve a specific template by ID
  - **Get Many Templates** - List all templates with optional filtering
  - **Update Template** - Update existing template properties
  - **Delete Template** - Delete templates from your Placid account

  ### Other Operations
  - **Upload Media** - Upload media files to Placid storage for use in templates

  ## Credentials

  To use this node, you'll need:

  1. **Placid Account**: Sign up at [placid.app](https://placid.app)
  2. **API Key**: Get your API key from your Placid dashboard
  3. **Authentication Setup**: 
     - In n8n, create new credentials of type "Placid API"
     - Enter your Placid API key

  ## Compatibility

  - **Minimum n8n version**: 0.208.0
  - **Node.js version**: >=20.15
  - **Tested with**: n8n 1.x.x

  ## Usage

  ### Configuration Modes
  The Placid node offers two configuration modes for maximum flexibility:

  **🎯 Simple Mode (Recommended)**  
  - User-friendly interface with dropdowns and form fields
  - Dynamic template layer detection - template layers automatically become input fields
  - Support for binary file uploads (images, videos, PDFs)
  - Perfect for most use cases

  **⚙️ Advanced Mode**  
  - Direct JSON configuration for complex scenarios
  - Full control over API payload structure  
  - Support for multi-clip videos and advanced layer configurations
  - Ideal for developers and complex automations

  ### Key Features

  **📁 Binary File Upload**  
  Upload files directly from n8n binary data:
  - Images (JPG, PNG, GIF, WebP) for image and picture layers
  - Videos (MP4) for video layers and video generation
  - Automatic upload to Placid storage with instant URL generation

  **🎬 Multi-Clip Videos**  
  Create sophisticated videos:
  - Combine multiple templates into single videos  
  - Add audio tracks with trimming controls
  - Support for image arrays and slideshow effects
  - Layer animations and transitions

  **🔄 Dynamic Template Integration**  
  - Template layers automatically appear as configurable fields
  - Support for all layer types: text, images, shapes, barcodes, ratings
  - Custom properties for advanced styling
  - Real-time template validation

  ### Quick Start Example
  1. **Choose Resource**: Select "Image", "PDF", "Video", "Template", or "Other"
  2. **Select Operation**: Pick "Create", "Get", "Delete", etc.  
  3. **Pick Template**: Choose from your Placid templates
  4. **Configure Layers**: Use the simple UI or JSON mode
  5. **Add Data**: Map your n8n workflow data to template fields
  6. **Execute**: Generate your creative asset

  For detailed examples and walkthroughs, see the [📖 Placid n8n Setup Guide](https://placid.app/help/n8n-setup-guide).

  ## Resources

  ### Getting Started
  * [📖 Placid n8n Setup Guide](https://placid.app/help/n8n-setup-guide) - Complete walkthrough with examples
  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ### API Documentation  
  * [Placid API Documentation](https://placid.app/docs/2.0/introduction)
  * [Placid Image API](https://placid.app/docs/2.0/rest/images)
  * [Placid PDF API](https://placid.app/docs/2.0/rest/pdfs)  
  * [Placid Video API](https://placid.app/docs/2.0/rest/videos)
  * [Placid Templates API](https://placid.app/docs/2.0/rest/templates)

  ### Support & Community
  * [📝 Report Issues](https://github.com/placidapp/n8n-nodes-placid/issues)
  * [💬 Get Help](https://placid.app/help) - Contact Placid support
  * [🔗 Repository](https://github.com/placidapp/n8n-nodes-placid)

  ## Version history

  ### 0.1.6 (Current)
  - **New PDF Merge Operation**
  - Merge multiple PDFs into a single document with mixed URL/binary source support
  - Simple and Advanced configuration modes for flexibility
  - **Security Improvements**
  - Sanitized filenames in multipart headers to prevent injection attacks
  - Added randomness to multipart boundaries to prevent collisions
  - **Bug Fixes**
  - Validate whitespace-only URLs in simple mode
  - Validate URLs in advanced mode PDF merge configuration
  - Show last polled status in timeout error messages
  - Fixed multipart body handling for media uploads

  ### 0.1.5
  - **Error Handling Enhancement** 🛡️
  - Added ContinueOnFail support to allow workflows to continue execution even when individual operations encounter errors
  - Improved error reporting with standardized NodeOperationError across all operations for better debugging
  - **Compatibility Update** 🔄
  - Updated authentication method to use latest n8n API for improved reliability

  ### 0.1.4
  - **Item Tracking Fix** 🔧
  - Added pairedItem to all operation returns to enable proper input-output tracking and data lineage in n8n workflows

  ### 0.1.3
  - **Bug Fixes** 🔧
  - Fixed property field mapping for shape layer colors (background_color, border_color)
  - Fixed text layer property mappings (text_color, alt_text_color, font, alt_font)
  - Fixed rating/barcode "Value" field label collision
  - Improved layer property handling across all resources

  ### 0.1.2
  - **n8n Cloud Verification Fix** 🔧
  - Fixed ESLint violations by replacing `setTimeout` with n8n's `sleep` helper
  - Ensures compatibility with n8n cloud verification requirements

  ### 0.1.1
  - **Documentation improvements** 📚
  - Added comprehensive usage examples and feature documentation
  - Added reference to [Placid n8n Setup Guide](https://placid.app/help/n8n-setup-guide)
  - Enhanced installation instructions with npm command
  - Documented binary file upload capabilities
  - Added support and community links

  ### 0.1.0
  - **First stable release** 🎉
  - Image, PDF, and video generation from Placid templates
  - Template management (CRUD operations)
  - Media upload functionality
  - Dynamic template field generation
  - API key authentication
  - Production ready

  ### 0.0.1-beta.1
  - Initial beta release
   

ai_documentation_summary:
  {"purpose":"An n8n community node that integrates with the Placid API to generate and manage images, PDFs, and videos from templates, allowing automated dynamic visual content creation within n8n workflows.","capabilities":["Create Image (generate from Placid templates with dynamic data)","Get Image (retrieve info and download URLs)","Delete Image","Create PDF (generate from templates with dynamic data)","Get PDF (retrieve info and download URLs)","Delete PDF","Create Video (support for multi-clip videos, audio, trimming)","Get Video (retrieve info and download URLs)","Delete Video","Create Template"],"authentication":"API key required (create 'Placid API' credentials in n8n and enter your Placid API key)","commonUseCases":["Generate dynamic images (e.g., social cards, thumbnails, personalized graphics) from workflow data","Produce PDFs (invoices, reports, labels) from templates with mapped data","Assemble multi-clip videos with dynamic clips, images and audio for marketing or notifications","Upload and manage media assets in Placid storage for reuse in templates","Programmatically create, update, list, and delete Placid templates as part of CI/CD or content pipelines"],"limitations":["Requires a Placid account and API key (no OAuth or alternative auth methods mentioned)","Compatibility requirements: minimum n8n version 0.208.0 and Node.js >= 20.15 (tested with n8n 1.x.x)"],"relatedNodes":["Image","PDF","Video","Template","Other (Upload Media)"]}


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

updated_at: 2026-02-19 14:41:52
author_name: bcharleson
author_github_url: https://github.com/Instantly-ai/
npm_package_name: n8n-nodes-instantly
npm_version: 0.1.7543
community_fetched_at: 2026-02-19T14:41:52.374Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Analytics",
          "value": "analytics"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Lead",
          "value": "lead"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a campaign",
          "description": "Create a campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a campaign",
          "description": "Delete a campaign"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a campaign",
          "description": "Get a campaign"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many campaigns",
          "description": "Get many campaigns"
        },
        {
          "name": "Launch",
          "value": "launch",
          "action": "Launch a campaign",
          "description": "Launch (activate) a campaign"
        },
        {
          "name": "Pause",
          "value": "pause",
          "action": "Pause a campaign",
          "description": "Pause a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a campaign",
          "description": "Update a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add Lead to Campaign",
          "value": "addToCampaign",
          "action": "Add lead to campaign",
          "description": "Create a lead and add to campaign"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "description": "Create a lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "description": "Delete a lead"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "description": "Get a lead"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many leads",
          "description": "Get many leads"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "description": "Update a lead"
        },
        {
          "name": "Update Interest Status",
          "value": "updateInterestStatus",
          "action": "Update lead interest status",
          "description": "Update lead interest status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many Accounts",
          "value": "getMany",
          "action": "Get many email accounts",
          "description": "Get many email accounts"
        },
        {
          "name": "Get Single Account",
          "value": "get",
          "action": "Get a single email account",
          "description": "Get a single email account by email address"
        },
        {
          "name": "Pause Account",
          "value": "pause",
          "action": "Pause an email account",
          "description": "Pause an email account to stop sending"
        },
        {
          "name": "Resume Account",
          "value": "resume",
          "action": "Resume an email account",
          "description": "Resume a paused email account"
        },
        {
          "name": "Create Account",
          "value": "create",
          "action": "Create an email account",
          "description": "Create a new email account"
        },
        {
          "name": "Delete Account",
          "value": "deleteAccount",
          "action": "Delete an email account",
          "description": "Delete an email account"
        },
        {
          "name": "Enable Warmup",
          "value": "enableWarmup",
          "action": "Enable account warmup",
          "description": "Enable warmup for an email account"
        },
        {
          "name": "Disable Warmup",
          "value": "disableWarmup",
          "action": "Disable account warmup",
          "description": "Disable warmup for an email account"
        },
        {
          "name": "Update Account",
          "value": "update",
          "action": "Update an email account",
          "description": "Update account settings and details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCampaignAnalytics",
      "options": [
        {
          "name": "Get Campaign Analytics",
          "value": "getCampaignAnalytics",
          "action": "Get campaign analytics",
          "description": "Get analytics for a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analytics"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a campaign",
      "description": "Create a campaign"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a campaign",
      "description": "Delete a campaign"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a campaign",
      "description": "Get a campaign"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many campaigns",
      "description": "Get many campaigns"
    },
    {
      "name": "Launch",
      "value": "launch",
      "action": "Launch a campaign",
      "description": "Launch (activate) a campaign"
    },
    {
      "name": "Pause",
      "value": "pause",
      "action": "Pause a campaign",
      "description": "Pause a campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a campaign",
      "description": "Update a campaign"
    },
    {
      "name": "Add Lead to Campaign",
      "value": "addToCampaign",
      "action": "Add lead to campaign",
      "description": "Create a lead and add to campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "description": "Create a lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "description": "Delete a lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "description": "Get a lead"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many leads",
      "description": "Get many leads"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "description": "Update a lead"
    },
    {
      "name": "Update Interest Status",
      "value": "updateInterestStatus",
      "action": "Update lead interest status",
      "description": "Update lead interest status"
    },
    {
      "name": "Get Many Accounts",
      "value": "getMany",
      "action": "Get many email accounts",
      "description": "Get many email accounts"
    },
    {
      "name": "Get Single Account",
      "value": "get",
      "action": "Get a single email account",
      "description": "Get a single email account by email address"
    },
    {
      "name": "Pause Account",
      "value": "pause",
      "action": "Pause an email account",
      "description": "Pause an email account to stop sending"
    },
    {
      "name": "Resume Account",
      "value": "resume",
      "action": "Resume an email account",
      "description": "Resume a paused email account"
    },
    {
      "name": "Create Account",
      "value": "create",
      "action": "Create an email account",
      "description": "Create a new email account"
    },
    {
      "name": "Delete Account",
      "value": "deleteAccount",
      "action": "Delete an email account",
      "description": "Delete an email account"
    },
    {
      "name": "Enable Warmup",
      "value": "enableWarmup",
      "action": "Enable account warmup",
      "description": "Enable warmup for an email account"
    },
    {
      "name": "Disable Warmup",
      "value": "disableWarmup",
      "action": "Disable account warmup",
      "description": "Disable warmup for an email account"
    },
    {
      "name": "Update Account",
      "value": "update",
      "action": "Update an email account",
      "description": "Update account settings and details"
    },
    {
      "name": "Get Campaign Analytics",
      "value": "getCampaignAnalytics",
      "action": "Get campaign analytics",
      "description": "Get analytics for a campaign"
    }
  ]

npm_readme:
  # n8n-nodes-instantly

  This is an n8n community node for integrating with the [Instantly](https://instantly.ai) API v2. It provides comprehensive access to Instantly's email outreach platform, allowing you to manage campaigns, accounts, leads, and analytics directly from n8n workflows.

  ## Installation

  ### Community Nodes (Recommended)

  For users on n8n v0.187.0+, install directly through the n8n interface:

  1. Go to **Settings > Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-instantly`
  4. Click **Download**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-instantly
  ```

  ## Quick Setup

  1. **Get API Key**: Go to [Instantly Dashboard](https://app.instantly.ai) → Settings → Integrations → API
  2. **Add Node**: In n8n, search for "Instantly" in the node palette
  3. **Configure Credentials**: Enter your Instantly API key
  4. **Select Operation**: Choose from the available resources and operations below

  ## Usage Examples

  ### Create and Launch a Campaign
  1. **Create Campaign**: Set up your email sequences and targeting
  2. **Add Leads**: Import or create leads for your campaign
  3. **Launch Campaign**: Activate your campaign to start sending emails

  ### Account Management Workflow
  1. **Create Account**: Add new email accounts with SMTP settings
  2. **Enable Warmup**: Start the warmup process for new accounts
  3. **Monitor Status**: Check account health and sending limits
  4. **Pause/Resume**: Control account activity as needed

  ### Lead Management Process
  1. **Import Leads**: Create leads with custom variables
  2. **Assign to Campaigns**: Add leads to specific email campaigns
  3. **Track Engagement**: Monitor lead responses and interest levels
  4. **Update Status**: Manage lead lifecycle and follow-up actions

  ## Supported Operations

  ### 📧 **Campaign Management**
  - **Create Campaign**: Create new email campaigns with sequences and variants
  - **Get Campaign**: Retrieve campaign details by ID
  - **Get Many Campaigns**: List all campaigns with pagination
  - **Update Campaign**: Modify campaign settings and content
  - **Delete Campaign**: Remove campaigns
  - **Launch Campaign**: Start campaign execution
  - **Pause Campaign**: Pause running campaigns

  ### 👤 **Account Management**
  - **Create Account**: Add new email accounts with SMTP configuration
  - **Get Account**: Retrieve account details by email
  - **Get Many Accounts**: List all email accounts
  - **Update Account**: Modify account settings and limits
  - **Delete Account**: Remove email accounts
  - **Pause Account**: Stop account from sending emails
  - **Resume Account**: Reactivate paused accounts
  - **Enable Warmup**: Start email warmup process ✨
  - **Disable Warmup**: Stop email warmup process ✨

  ### 🎯 **Lead Management**
  - **Create Lead**: Add new leads with custom variables and data
  - **Get Lead**: Retrieve detailed lead information by ID
  - **Get Many Leads**: List leads with advanced filtering and pagination
  - **Update Lead**: Modify lead details, status, and custom variables
  - **Delete Lead**: Remove leads from your database
  - **Add Lead to Campaign**: Create and assign leads to specific campaigns
  - **Update Interest Status**: Manage lead engagement and interest levels

  ### 📊 **Analytics & Reporting**
  - **Get Campaign Analytics**: Retrieve comprehensive campaign performance metrics and statistics

  ### 📬 **Unibox Email Management**
  - **Get Many Unibox Messages**: List inbox messages with advanced filtering (search, campaign, account, read status, email type, lead, sort)
  - **Get Unibox Message**: Retrieve single message details by ID
  - **Update Unibox Message**: Modify message properties and metadata
  - **Delete Unibox Message**: Remove messages from inbox
  - **Get Unread Count**: Count unread messages in inbox
  - **Mark Thread as Read**: Mark entire email thread as read
  - **Reply to Unibox Message**: Send email replies directly from n8n

  ## Key Features

  🚀 **Full API v2 Support**: Complete integration with Instantly's latest API
  📊 **Comprehensive Operations**: 31 operations across campaigns, accounts, leads, analytics, and email management
  ⚡ **Advanced Account Management**: Full warmup control and SMTP configuration
  🎯 **Campaign Control**: Launch, pause, and manage email campaigns with precision
  📈 **Lead Management**: Complete lead lifecycle management and campaign assignment
  📬 **Email Management**: Unified inbox with thread management, filtering, and reply capabilities
  🔄 **Pagination Support**: Handle large datasets efficiently with built-in pagination
  ⚡ **Robust Error Handling**: Detailed error feedback and validation
  🎯 **Resource Locators**: Intuitive account and campaign selection interface
  📊 **Bulk Operations**: Manage multiple accounts and leads simultaneously
  🔒 **Secure Integration**: API key-based authentication with proper credential management

  ## Requirements

  - n8n v0.187.0 or higher
  - Instantly account with API access (Hypergrowth plan or above)
  - Valid Instantly API key

  ## Resources

  - [Instantly API Documentation](https://developer.instantly.ai/api/v2)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [GitHub Repository](https://github.com/Instantly-ai/n8n-nodes-instantly)

  ## Support

  - **GitHub Issues**: [Report bugs or request features](https://github.com/Instantly-ai/n8n-nodes-instantly/issues)
  - **Email**: brandon@instantly.ai

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Provides n8n integration with the Instantly API v2 to manage email outreach workflows — create and control campaigns, manage accounts and leads, access analytics, and interact with a unified inbox from n8n.","capabilities":["Create, retrieve, list (with pagination), update, and delete email campaigns","Launch and pause campaigns","Create, retrieve, list, update, delete, pause and resume email accounts","Configure SMTP settings and control account warmup (enable/disable warmup)","Create, retrieve, list (with filtering & pagination), update, and delete leads","Add leads to campaigns and update lead interest/engagement status","Fetch campaign analytics and performance metrics","Unibox email management: list messages (advanced filtering), get message, update message, delete message, get unread count, mark thread as read, reply to messages","Bulk operations for managing multiple accounts and leads","Resource locator helpers for intuitive account and campaign selection"],"authentication":"API key required (Instantly API key). Requires Instantly account with API access (Hypergrowth plan or above).","commonUseCases":["Create, populate (add leads), and launch email outreach campaigns from n8n","Provision and manage sending accounts including SMTP and warmup control","Import and manage lead lists, assign leads to campaigns, and update engagement status","Monitor campaign performance and retrieve analytics for reporting","Manage inbox messages and reply to leads directly from n8n workflows"],"limitations":["Requires n8n v0.187.0 or higher","Requires an Instantly account with API access (Hypergrowth plan or above)","Authentication limited to API key-based access (no OAuth2 mentioned)"],"relatedNodes":[]}


node_type: n8n-nodes-veed.veed
package_name: n8n-nodes-veed
display_name: VEED AI Video API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: dmytrobaltak
author_github_url: https://github.com/veedstudio/
npm_package_name: n8n-nodes-veed
npm_version: 1.2.4
community_fetched_at: 2026-02-19T14:41:52.375Z
ai_summary_generated_at: 2026-02-19 16:43:57
description:
  Generate AI talking videos from an image and audio file using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and ai avatars directly in your n8n workflows.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "fabric",
      "options": [
        {
          "name": "Fabric",
          "value": "fabric",
          "description": "Generate talking head videos"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Generate Video",
          "value": "generateVideo",
          "action": "Generate a video using fabric model",
          "description": "Generate a talking head video from image and audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fabric"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Video",
      "value": "generateVideo",
      "action": "Generate a video using fabric model",
      "description": "Generate a talking head video from image and audio"
    }
  ]

npm_readme:
  # n8n-nodes-veed

  Generate AI talking videos from images and audio using the Veed Fabric API. Automate creation of realistic talking videos, animation videos and AI avatars directly in your n8n workflows.

  ## Features

  - **Fabric Video Generation**: Create AI-powered talking head videos from images and audio
  - Powered by [fal.ai](https://fal.ai)
  - Support for multiple model versions (Standard & Fast)
  - Real-time progress tracking via streaming status updates
  - Configurable timeouts

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in n8n
  2. Search for `veed`
  3. Click **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-veed
  ```

  ## Prerequisites

  - A fal.ai account ([sign up](https://fal.ai))
  - A fal.ai personal API key ([get your key](https://fal.ai/dashboard/keys))
  - n8n version 0.200.0 or higher
  - Node.js 22 or higher

  ## Setup

  1. In n8n, create a new **Fal.ai API** credential
  2. Paste your personal API key
  3. Add the **VEED AI Video API** node to your workflow

  ## Usage

  ### Fabric Video Generation

  Generate realistic talking head videos from a still image and audio file.

  #### Parameters

  **Image URL** (required)

  - Portrait image URL for the talking head
  - Best results: Front-facing photos, clear facial features
  - Supported formats: JPG, PNG, WebP

  **Audio URL** (required)

  - Speech audio URL for lip sync
  - Supported formats: MP3, WAV, M4A, AAC

  **Model Version**

  - **Fabric 1.0**: Lower price
  - **Fabric 1.0 Fast**: Faster generation, higher price

  **Resolution**

  - `480p`: Faster generation
  - `720p`: Higher quality

  **Aspect Ratio**

  - `16:9`: Landscape (YouTube, presentations)
  - `9:16`: Portrait (TikTok, Instagram Stories, Reels)
  - `1:1`: Square (Instagram Feed, LinkedIn)

  #### Options (Advanced)

  **Timeout** (default: 10 minutes)

  - Maximum time to wait for generation
  - Recommended: 10+ minutes for longer videos, 15+ for 720p
  - Range: 1-60 minutes
  - Note: The node uses fal.ai's streaming API for real-time status updates

  ## 🎬 Showcase Workflows

  > **Note:** These workflow examples are available in the repository for local development/testing only. They are not included in the published npm package.

  Ready-to-use workflow templates demonstrating the Veed Fabric node in complete pipelines:

  ### 1. **Simple Text-to-Video** (Beginner-Friendly)

  A minimal workflow to test the Veed Fabric node with pre-made assets.

  **What it does:**

  - Uses demo image and audio URLs
  - Generates a talking head video using Fabric Fast model
  - Shows generation progress and results
  - Formats output with video URL and generation time

  **Import:** `dev-workflow-examples/simple-text-to-video.json`

  ---

  ### 2. **Complete Text-to-Video Ad Generator** (Advanced)

  Full automated pipeline from text prompt to social media post.

  **What it does:**

  ```
  Text Prompt ("animated bear advertising sunglasses")
      ↓
  🤖 OpenAI GPT-4o-mini → Generates ad script + character description
      ↓
  🎨 OpenAI DALL-E 3 → Creates character image
      ↓
  🎙️ StreamElements TTS → Converts script to voice (FREE)
      ↓
  🎬 Veed Fabric → Generates talking head video
      ↓
  🐦 Twitter/X → Posts video with caption
  ```

  **Import:** `dev-workflow-examples/text-to-video-showcase.json`

  **Services used:**

  - 💰 **OpenAI GPT-4o-mini** ($5 free trial, ~$0.01/video) - Script generation
  - 💰 **OpenAI DALL-E 3** ($5 free trial, ~$0.04/image) - Image generation
  - ✅ **StreamElements TTS** (FREE, no API key needed) - Text-to-speech
  - 💰 **fal.ai** (Pay-per-use, ~$0.08-0.20/second) - Video generation
  - ✅ **Twitter/X API** (FREE tier) - Social posting

  ---

  ### 💡 Quick Start with Showcase Workflows

  > **Prerequisites:** These workflows are only available when running the node in development mode. See [Development](#development) section below for setup instructions.

  1. **Import a workflow:**

     ```
     n8n (localhost:5678) → Workflows → Import from File → Select JSON from dev-workflow-examples/
     ```

  2. **Set up credentials:**
     - **Simple workflow:** Only fal.ai API key required
     - **Advanced workflow:** OpenAI API key, Twitter OAuth2 credentials, fal.ai API key

  3. **Customize:**
     - **Simple:** Replace imageUrl and audioUrl in "📝 Set Demo Image & Audio" node
     - **Advanced:** Change adPrompt in "📝 Set Ad Concept" node
     - Adjust video settings (resolution, aspect ratio)

  4. **Execute and wait:**
     - Click "Test Workflow" button
     - Watch progress in execution logs

  5. **Use your video:**
     - Get video URL from output
     - Download and use in your content
     - Automatically posted to Twitter (advanced workflow)

  ## Performance

  - **Generation time**: Depending on audio length and video resolution
  - **Progress updates**: Real-time progress shown in execution logs
  - **Timeout handling**: Configurable timeout with clear error messages

  ## Troubleshooting

  Having issues? See the [Troubleshooting Guide](docs/TROUBLESHOOTING.md) for detailed solutions to common problems:

  - Authentication errors
  - Generation timeouts
  - Invalid URL errors
  - Rate limits
  - Network issues
  - And more...

  ## Compatibility

  - **n8n**: 0.200.0+
  - **Node.js**: 22+
  - **Supported platforms**: Linux, macOS, Windows

  ## Resources

  - [Veed Fabric Model on fal.ai](https://fal.ai/models/veed/fabric-1.0)
  - [Fabric Playground](https://fal.ai/models/veed/fabric-1.0/playground)
  - [fal.ai Documentation](https://docs.fal.ai)
  - [Report Issues](https://github.com/veedstudio/n8n-nodes-veed/issues)
  - [n8n Community Forum](https://community.n8n.io)

  ## Development

  ### Build

  ```bash
  pnpm build
  ```

  ### Test

  ```bash
  pnpm test          # Run all tests
  pnpm test:watch    # Watch mode
  pnpm test:coverage # Coverage report
  ```

  ### Local Development

  ```bash
  pnpm dev  # Starts n8n with your node at localhost:5678
  ```

  For detailed testing instructions, see [docs/TESTING.md](docs/TESTING.md)

  ## Contributing

  Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Run `pnpm lint:fix`
  6. Submit a pull request

  ### n8n Community Node Restrictions

  When contributing, be aware of n8n's community node restrictions:

  - **❌ No `setTimeout` or `setInterval`**: These global timers are not allowed.
  - **✅ Required properties**: All nodes must have `usableAsTool` property
  - **✅ Credentials**: Must have `icon` and `test` properties

  ## License

  MIT

  ## Support

  For issues and questions:

  - [GitHub Issues](https://github.com/veedstudio/n8n-nodes-veed/issues)
  - [n8n Community Forum](https://community.n8n.io)

  ---

ai_documentation_summary:
  {"purpose":"Generate AI talking-head videos and animated avatars by combining a portrait image and an audio file using the Veed (Veed Fabric) API (via fal.ai) directly inside n8n workflows.","capabilities":["Generate AI-powered talking-head videos from an image URL and an audio URL","Choose model version (Fabric 1.0 or Fabric 1.0 Fast)","Configure output resolution (480p, 720p) and aspect ratio (16:9, 9:16, 1:1)","Real-time progress tracking via fal.ai streaming status updates","Configurable generation timeout (1–60 minutes; default 10 minutes)","Accepts images in JPG/PNG/WebP and audio in MP3/WAV/M4A/AAC","Returns video URL and generation metadata (e.g., generation time)","Designed to be integrated into automated pipelines (can be combined with TTS, image-generation, and social posting nodes)"],"authentication":"API key required (fal.ai personal API key configured via a 'Fal.ai API' credential)","commonUseCases":["Create lip-synced talking-head videos from a portrait image and speech audio","Automated text-to-video pipelines (script → TTS → image → Veed Fabric video)","Generate social media-ready videos (ads, short vertical/horizontal posts) with specified aspect ratio and resolution","Produce AI avatars or animated short videos for marketing, tutorials, or notifications","Batch or scheduled video generation with progress monitoring and timeout control"],"limitations":["Requires a fal.ai account and personal API key (pay-per-use pricing applies)","Assets must be provided as publicly accessible image/audio URLs (no built-in file upload in-node)","Supported image formats limited to JPG, PNG, WebP; audio limited to MP3, WAV, M4A, AAC","Showcase workflow examples are available only in development mode and not included in the published npm package","n8n must be version 0.200.0+ and Node.js 22+"],"relatedNodes":["Fal.ai API (credential used by the node)","OpenAI (GPT / DALL·E) — used in showcase pipelines for script and image generation","StreamElements TTS (or other TTS nodes) — used for generating speech audio","Twitter/X node (or other social-posting nodes) — used in showcase for posting generated videos"]}


node_type: @nskha/n8n-nodes-scrappey.scrappey
package_name: @nskha/n8n-nodes-scrappey
display_name: Scrappey
description: Make advanced web requests with anti-bot protection bypass using Scrappey API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: automations-project
author_github_url: https://github.com/Automations-Project/n8n-nodes-scrappey.git
npm_package_name: @nskha/n8n-nodes-scrappey
npm_version: 0.3.13
community_fetched_at: 2026-02-19T14:41:52.376Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  ![Banner](.github/assets/banner.webp)

  # Scrappey n8n Node

  [![CI](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/ci.yml/badge.svg)](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/ci.yml)
  [![Release](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/release.yml/badge.svg)](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/release.yml)
  [![Security Scan](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/security.yml/badge.svg)](https://github.com/Automations-Project/n8n-nodes-scrappey/actions/workflows/security.yml)
  [![npm version](https://img.shields.io/npm/v/@nskha/n8n-nodes-scrappey?logo=npm)](https://www.npmjs.com/package/@nskha/n8n-nodes-scrappey)
  [![npm downloads](https://img.shields.io/npm/dm/@nskha/n8n-nodes-scrappey?logo=npm)](https://www.npmjs.com/package/@nskha/n8n-nodes-scrappey)
  [![n8n Node version](https://img.shields.io/github/package-json/v/Automations-Project/n8n-nodes-scrappey?logo=n8n&label=n8n%20node)](https://github.com/Automations-Project/n8n-nodes-scrappey)
  [![n8n compatibility](https://img.shields.io/github/v/release/n8n-io/n8n?logo=n8n&label=)](https://n8n.io)
  [![Node.js compatibility](https://img.shields.io/node/v/@nskha/n8n-nodes-scrappey?logo=node.js)](https://nodejs.org)
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.5%2B-blue?logo=typescript)](https://www.typescriptlang.org)
  [![Dependencies](https://img.shields.io/librariesio/release/npm/@nskha/n8n-nodes-scrappey?logo=dependabot)](https://libraries.io/npm/@nskha%2Fn8n-nodes-scrappey)
  [![License](https://img.shields.io/github/license/Automations-Project/n8n-nodes-scrappey)](LICENSE.md)

  [![GitHub stars](https://img.shields.io/github/stars/Automations-Project/n8n-nodes-scrappey?style=social)](https://github.com/Automations-Project/n8n-nodes-scrappey/stargazers)
  [![GitHub forks](https://img.shields.io/github/forks/Automations-Project/n8n-nodes-scrappey?style=social)](https://github.com/Automations-Project/n8n-nodes-scrappey/network)
  [![GitHub issues](https://img.shields.io/github/issues/Automations-Project/n8n-nodes-scrappey)](https://github.com/Automations-Project/n8n-nodes-scrappey/issues)
  [![Last commit](https://img.shields.io/github/last-commit/Automations-Project/n8n-nodes-scrappey)](https://github.com/Automations-Project/n8n-nodes-scrappey/commits)

  > 🚀 **Advanced web scraping and anti-bot bypass node for n8n workflows**

  A powerful n8n community node that integrates with the [Scrappey.com API](https://scrappey.com) to provide advanced web scraping capabilities with built-in anti-bot protection bypass. Perfect for automating data extraction from protected websites, handling CAPTCHAs, and managing complex browser interactions.

  ## ✨ Key Features

  ### 🛠️ **Three Operation Modes**

  1. **Request Builder** - Create fully customized HTTP/browser requests with granular control
  2. **HTTP Auto-Retry** - Automatically retry failed HTTP requests through Scrappey's anti-bot network
  3. **Browser Auto-Retry** - Advanced browser-based retry with full anti-bot protection

  ### 🔒 **Anti-Bot Protection Bypass**

  - **Cloudflare** challenge solving
  - **Datadome** bypass capabilities
  - **hCaptcha & reCAPTCHA** automatic solving
  - **JavaScript-heavy websites** full browser simulation
  - **Mouse movement simulation** for enhanced stealth

  ### 🌍 **Advanced Proxy Management**

  - **Residential proxies** with country targeting
  - **Datacenter proxies** for fast requests
  - **Mobile proxies** for mobile-specific content
  - **Custom proxy** support (SOCKS4/5, HTTP/HTTPS)
  - **150+ countries** available for geo-targeting

  ### ⚙️ **Flexible Configuration**

  - **Multiple request types**: Standard HTTP, Browser, Patched Chrome
  - **Custom headers & cookies** with field-based or JSON input
  - **Session management** for maintaining state across requests
  - **POST/PUT/PATCH support** with body or form parameters
  - **CSS selector waiting** for dynamic content
  - **XHR/Fetch interception** for API data extraction

  ## 🚀 Installation

  ### Method 1: n8n Community Nodes (Recommended)

  1. Open your n8n instance
  2. Go to **Settings** → **Community Nodes**
  3. Enter: `@automations-project/n8n-nodes-scrappey`
  4. Click **Install**

  ### Method 2: Manual Installation

  ```bash
  # Using npm
  npm install @automations-project/n8n-nodes-scrappey

  # Using pnpm
  pnpm add @automations-project/n8n-nodes-scrappey

  # Using yarn
  yarn add @automations-project/n8n-nodes-scrappey
  ```

  ### Method 3: Development Installation

  ```bash
  # Clone the repository
  git clone https://github.com/Automations-Project/n8n-nodes-scrappey.git
  cd n8n-nodes-scrappey

  # Install dependencies
  pnpm install

  # Build the node
  pnpm run build

  # Link for development
  pnpm run start:dev
  ```

  ## 🔧 Configuration

  ### 1. Set Up Scrappey API Credentials

  1. Sign up at [Scrappey.com](/#) to get your API key.
  2. In n8n, create new **Scrappey API** credentials
  3. Enter your API key and optional proxy settings
     > 🎯 **Get Started Free!** Try Scrappey with **750 Direct requests** and **150 Browser requests** at no cost.  
     > [Start your free trial →](https://nodes.n8n.community/scrappey/signup)
     >
     > **Affordable scaling**: For just €100, you can get 600,000 request credits including proxies, captcha etc...

  ### 2. Credential Options

  - **API Key** (required): Your Scrappey.com API key
  - **Custom Proxy** (optional): Your own proxy URL (SOCKS4/5, HTTP/HTTPS)
  - **Whitelisted Domains** (optional): JSON array of allowed domains for enhanced security

  ## 📋 Operation Modes
  ![Operations Types](.github/assets/operations.jpg)
  ### 🛠️ Request Builder (Manual)

  **Primary mode for creating custom requests with full control**

  ```typescript
  // Example configuration options:
  {
    "url": "https://example.com/api/data",
    "httpMethod": "GET",
    "request_type": "Browser", // or "Request", "PatchedChrome"
    "whichProxyToUse": "proxyFromScrappey",
    "proxyType": "residential", // residential, datacenter, mobile
    "customProxyCountry": "UnitedStates",
    "antibot": true,
    "mouseMovements": true,
    "datadome": true
  }
  ```

  **Use Cases:**

  - Complex form submissions with CAPTCHA solving
  - JavaScript-heavy SPA scraping
  - API data extraction with anti-bot protection
  - Multi-step workflows with session management

  ### 🔁 HTTP Auto-Retry

  **Fallback solution for failed n8n HTTP Request nodes**
  ![Banner](.github/assets/example.svg)
  Connect the **error output** (red connector) of a standard HTTP Request node to this operation. It automatically retries the same request through Scrappey's network when blocked by:

  - Cloudflare challenges
  - Rate limiting
  - IP blocks
  - Basic anti-bot measures


  ### 🌐 Browser Auto-Retry

  **Advanced browser-based retry with full anti-bot protection**

  Similar to HTTP Auto-Retry but uses a full browser environment with:

  - Automatic CAPTCHA solving (hCaptcha, reCAPTCHA)
  - Mouse movement simulation
  - Datadome bypass enabled
  - JavaScript execution
  - 3 automatic retries

  ## 💡 Usage Examples

  ### Basic Web Scraping

  ```javascript
  // Request Builder - Simple GET request
  {
    "operation": "requestBuilder",
    "url": "https://httpbin.org/get",
    "httpMethod": "request.get",
    "request_type": "Request"
  }
  ```

  ### Advanced Browser Automation

  ```javascript
  // Browser request with anti-bot protection
  {
    "operation": "requestBuilder",
    "url": "https://protected-site.com",
    "request_type": "Browser",
    "antibot": true,
    "mouseMovements": true,
    "datadome": true,
    "cssSelector": ".content-loaded",
    "proxyType": "residential",
    "customProxyCountry": "UnitedStates"
  }
  ```

  ### Form Submission with CAPTCHA

  ```javascript
  // POST request with CAPTCHA solving
  {
    "operation": "requestBuilder",
    "url": "https://example.com/submit",
    "httpMethod": "request.post",
    "request_type": "Browser",
    "bodyOrParams": "body_used",
    "body_for_request": "{\"name\":\"John\",\"email\":\"john@example.com\"}",
    "antibot": true
  }
  ```

  ### Auto-Retry Fallback

  ```javascript
  // Connect HTTP Request node error output to Scrappey node input
  // Set operation to "httpRequestAutoRetry" or "httpRequestAutoRetryBrowser"
  {
    "operation": "httpRequestAutoRetry",
    "whichProxyToUse": "proxyFromScrappey",
    "proxyType": "residential"
  }
  ```

  ## 🔒 Error Handling

  The node provides detailed error messages for common Scrappey API error codes:

  | Code      | Description        | Solution                            |
  | --------- | ------------------ | ----------------------------------- |
  | CODE-0001 | Server overloaded  | Retry after a few minutes           |
  | CODE-0002 | Cloudflare blocked | Try different proxy or browser mode |
  | CODE-0003 | Too many attempts  | Wait before retrying                |
  | CODE-0004 | Invalid command    | Check request configuration         |
  | CODE-0005 | Tunnel failed      | Retry with different proxy          |

  ## 🏗️ Development

  ### Building from Source

  ```bash
  # Install dependencies
  pnpm install

  # Development build with watch
  pnpm run build:watch

  # Production build
  pnpm run build

  # Linting & formatting
  pnpm run lint
  pnpm run format

  # Type checking
  pnpm run type-check

  # Full validation
  pnpm run validate
  ```

  ### Project Structure

  ```
  n8n-nodes-scrappey/
  ├── nodes/Scrappey/          # Main node implementation
  │   ├── Scrappey.node.ts     # Node definition and execution
  │   ├── execute.ts           # Operation dispatcher
  │   ├── RequestMethods.ts    # HTTP/Browser request handlers
  │   ├── requestBodyBuilder.ts # Request body construction
  │   ├── fields.ts            # Node field definitions
  │   ├── GenericFunctions.ts  # API integration utilities
  │   └── utils.ts             # Helper functions
  ├── credentials/             # Credential definitions
  │   └── ScrappeyApi.credentials.ts
  ├── scripts/                 # Build and deployment scripts
  ├── .github/workflows/       # CI/CD pipelines
  └── dist/                    # Built output
  ```

  ### CI/CD Pipeline

  This project includes a comprehensive CI/CD setup:

  - **Continuous Integration**: Automated testing, linting, and building on every PR
  - **Auto-versioning**: Automatic version bumps based on commit messages
  - **Automated Releases**: Publishes to GitHub Packages and optionally npm
  - **Security Scanning**: CodeQL analysis and dependency auditing
  - **Dependabot**: Automated dependency updates

  #### Commit Message Conventions

  - `feat: description` → Minor version bump
  - `fix: description` → Patch version bump
  - `BREAKING CHANGE` or `[major]` → Major version bump
  - `[skip ci]` or `[skip version]` → Skip automation

  ## 🤝 Contributing

  1. Fork the repository
  2. Create a feature branch: `git checkout -b feature/amazing-feature`
  3. Commit changes: `git commit -m 'feat: add amazing feature'`
  4. Push to branch: `git push origin feature/amazing-feature`
  5. Open a Pull Request

  ## 📄 License

  This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.

  ## 🔗 Links

  - **Scrappey Website**: [https://scrappey.com](https://scrappey.com)
  - **Scrappey Documentation**: [https://wiki.scrappey.com](https://wiki.scrappey.com)
  - **n8n Community**: [https://community.n8n.io](https://community.n8n.io)
  - **GitHub Issues**: [Report bugs or request features](https://github.com/Automations-Project/n8n-nodes-scrappey/issues)
  - **Nskha Discord**: [⚠️Incative community](https://nskha.com/discord)

  ---

  **Made with ❤️ for the n8n community**

ai_documentation_summary:
  {"purpose":"Integrates Scrappey.com into n8n to perform advanced web requests and web scraping with built-in anti-bot protection bypass, enabling automated extraction from protected or JavaScript-heavy sites. It provides multiple request modes and flexible proxy/session configuration to reliably fetch site content and APIs.","capabilities":["Request Builder: build fully custom HTTP/browser requests with granular control","HTTP Auto-Retry: automatically retry failed HTTP requests via Scrappey's anti-bot network","Browser Auto-Retry: full browser-based retry with anti-bot protections","Bypass anti-bot protections: Cloudflare, Datadome, hCaptcha, reCAPTCHA solving","Simulate full browsers and mouse movement for stealth on JS-heavy sites","Multiple request types: Standard HTTP, Browser, Patched Chrome","Advanced proxy management: residential, datacenter, mobile, and custom (SOCKS4/5, HTTP/HTTPS)","Geo-targeting: proxy country selection (150+ countries)","Custom headers & cookies input (field-based or JSON)","Session management for maintaining state across requests"],"authentication":"API key required (Scrappey.com API key). Optional credential fields for custom proxy URL and whitelisted domains.","commonUseCases":["Scraping content from websites protected by Cloudflare/Datadome or captchas","Extracting API responses from JavaScript-heavy pages via XHR/Fetch interception","Geo-targeted scraping using residential/mobile proxies","Automated form submissions or stateful workflows requiring session persistence","Retrying unstable requests automatically through an anti-bot network to increase success rates"],"limitations":[],"relatedNodes":["HTTP Request (n8n)","Function / FunctionItem","Set","SplitInBatches","Webhook"]}


node_type: n8n-nodes-octagon.octagonAgents
package_name: n8n-nodes-octagon
display_name: Octagon
description: Financial AI agents
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: octagonai
author_github_url: https://github.com/OctagonAI/
npm_package_name: n8n-nodes-octagon
npm_version: 1.0.8
community_fetched_at: 2026-02-19T14:41:52.376Z
ai_summary_generated_at: 2026-02-19 16:43:57
npm_readme:
  # Octagon for n8n

  A professional n8n node that integrates with [Octagon's AI Agents API](https://docs.octagonagents.com/) for financial and market research. This node provides access to Octagon's specialized AI agents for analyzing SEC filings, earnings transcripts, stock data, private market intelligence, and more.

  ## Features

  - **🔄 Smart Router Agent**: Octagon Agent automatically routes queries to the most appropriate specialized agent
  - **15 Specialized Agents**: Access to all Octagon's AI agents for different research domains
  - **🔒 Secure Authentication**: Built-in credential management for API keys
  - **📊 Rich Output**: Returns analysis with source citations and metadata
  - **⚡ Simplified Interface**: Clean, professional UI with essential options only
  - **🛡️ Error Handling**: Graceful error handling with detailed error messages

  ## Available Agents

  ### 🔄 **Smart Router (Default)**

  - **Octagon Agent** (`octagon-agent`) - Intelligent router that automatically selects the best specialized agent for your query

  ### 📈 **Public Market Agents**

  - **SEC Filings Agent** (`octagon-sec-agent`) - Analyzes SEC filings data
  - **Transcripts Agent** (`octagon-transcripts-agent`) - Analyzes earnings call transcripts
  - **Stock Data Agent** (`octagon-stock-data-agent`) - Analyzes stock market data
  - **Financials Agent** (`octagon-financials-agent`) - Analyzes financial statements
  - **Holdings Agent** (`octagon-holdings-agent`) - Analyzes institutional ownership and holdings
  - **Crypto Agent** (`octagon-crypto-agent`) - Analyzes cryptocurrency market data

  ### 🏢 **Private Market Agents**

  - **Companies Agent** (`octagon-companies-agent`) - Provides private company information
  - **Funding Agent** (`octagon-funding-agent`) - Analyzes private company funding data
  - **Funds Agent** (`octagon-funds-agent`) - Analyzes private funds
  - **Deals Agent** (`octagon-deals-agent`) - Analyzes M&A and IPO data
  - **Investors Agent** (`octagon-investors-agent`) - Provides investor information
  - **Debts Agent** (`octagon-debts-agent`) - Analyzes private debts, borrowers, and lenders

  ### 🔍 **Research Agents**

  - **Scraper Agent** (`octagon-scraper-agent`) - Extracts data from websites
  - **Deep Research Agent** (`octagon-deep-research-agent`) - Conducts in-depth research

  ## Installation

  ### Prerequisites

  1. **Octagon API Key**: Get your free API key from [Octagon](https://octagonagents.com)
     - Sign up for an account
     - Go to Settings → API Keys
     - Create a new API key

  2. **n8n Installation**: This node requires n8n v0.198.0 or higher

  ### Install in n8n Cloud

  > **Note**: Only the n8n instance owner can install and manage community nodes. The instance owner is the person who sets up and manages user management. All members of an n8n instance can use already installed community nodes in their workflows.

  #### Install a verified community node

  To install the Octagon community node:

  1. **Access the nodes panel**: Go to the Canvas and open the nodes panel (either by selecting '+' or pressing Tab).

  2. **Search for Octagon**: Search for "Octagon" in the node search. If there is a matching verified community node, you will see a **More from the community** section at the bottom of the nodes panel.

  3. **Select the node**: Select the Octagon node you want to install. This takes you to a detailed view of the node, showing all the supported actions.

  4. **Install**: Select **Install**. This will install the node for your instance and enable all members to use it in their workflows.

  5. **Start using**: You can now add the Octagon node to your workflows.

  #### Alternative installation method

  If the node doesn't appear in the Canvas search:

  1. **Go to Settings**: Navigate to **Settings** → **Community nodes**.
  2. **Install a community node**: Click **Install a community node**.
  3. **Enter package name**: Enter the npm package name: `n8n-nodes-octagon`
  4. **Install**: Click **Install** and wait for the installation to complete.
  5. **Verify**: Go to your workflow editor and search for "Octagon" in the nodes panel.

  > **Important**: Community nodes in n8n Cloud are sandboxed and reviewed for security. Installation may take a few minutes to complete.

  #### Uninstall a community node

  To uninstall the Octagon community node:

  1. **Go to Settings**: Navigate to **Settings** → **Community nodes**.
  2. **Find the node**: Locate the Octagon node in your installed community nodes.
  3. **Open options**: Select **Options** (three dots menu) on the node.
  4. **Uninstall**: Select **Uninstall package**.
  5. **Confirm**: Select **Uninstall Package** in the confirmation modal.

  ## Usage

  ### Quick Start

  1. **Add Node**: Search for "Octagon" in n8n workflow
  2. **Configure**:
     - **Add Credentials**: Go to Credentials → "Octagon API"
     - **Agent**: Use "Octagon Agent (Router)" for automatic routing (default)
     - **Query**: Enter your financial research question
  3. **Execute**: Run the workflow to get AI-powered analysis with citations

  ### Node Configuration

  The node interface is clean and simple:

  - **🎯 Agent**: Select from router or 14 specialized agents
  - **💬 Query**: Your research question (supports complex queries)
  - **⚙️ Additional Options**:
    - Include Token Usage (optional)

  ### Example Queries

  #### Universal Queries (using Octagon Agent Router)

  ```
  Tell me about Apple's latest earnings performance
  What's happening with Tesla's stock price?
  Analyze SpaceX's latest funding round
  Compare Microsoft vs Google revenue growth
  ```

  #### Specialized Agent Queries

  ```
  # SEC Filings Agent
  What were Apple's revenue numbers in Q3 2023?
  Analyze Tesla's latest 10-K filing for risk factors

  # Transcripts Agent
  What did Apple's CEO say about iPhone sales in the latest earnings call?
  Analyze management guidance from Tesla's Q4 2023 earnings call

  # Stock Data Agent
  What's the 52-week high and low for AAPL?
  Compare Tesla's stock performance to the S&P 500 this year

  # Companies Agent (Private Market)
  Tell me about Stripe's latest funding round
  What is the current valuation of SpaceX?
  ```

  ### Output Format

  The node returns a JSON object with the following structure:

  ```json
  {
  	"agent": "octagon-agent",
  	"query": "Tell me about Apple's latest earnings",
  	"analysis": "Apple reported strong Q4 2023 results with revenue of $89.5 billion...",
  	"sources": [
  		{
  			"order": 1,
  			"name": "Apple Inc. (10-Q) - 2023-Q4, Page: 10",
  			"url": "https://octagon-sec-filings.s3.amazonaws.com/..."
  		}
  	],
  	"metadata": {
  		"apiType": "responses",
  		"timestamp": "2024-01-15T10:30:00.000Z"
  	},
  	"usage": {
  		"prompt_tokens": 150,
  		"completion_tokens": 800,
  		"total_tokens": 950
  	}
  }
  ```

  ## Best Practices

  1. **🎯 Use the Router**: Start with "Octagon Agent (Router)" - it automatically selects the best specialized agent
  2. **📝 Be Specific**: The more specific your query, the more accurate the response
  3. **🔄 One Task Per Query**: Focus each query on a single analytical task for best results
  4. **📅 Provide Context**: Include relevant context like time periods, specific metrics, or companies
  5. **🔗 Follow Citations**: Always check the source citations for verification

  ## Error Handling

  The node includes comprehensive error handling:

  - **🔑 Authentication Errors**: Invalid API keys, expired tokens
  - **🌐 Network Errors**: Connection issues, timeouts, rate limits
  - **📝 Query Errors**: Malformed or empty queries
  - **🤖 Agent Errors**: Agent-specific errors or limitations

  Errors are returned in a structured format:

  ```json
  {
  	"error": true,
  	"message": "Authentication failed. Please check your API key.",
  	"query": "Your original query",
  	"agent": "octagon-agent",
  	"timestamp": "2024-01-15T10:30:00.000Z"
  }
  ```

  ## Troubleshooting

  ### Common Issues

  1. **Node not appearing**: Restart n8n after installation
  2. **Icon not loading**: Clear browser cache
  3. **Authentication errors**: Verify API key in credentials
  4. **Rate limiting**: Check your Octagon plan limits

  ### Support Channels

  - **📚 Documentation**: [Octagon API Documentation](https://docs.octagonagents.com/)
  - **🐛 Issues**: [GitHub Issues](https://github.com/octagon/octagon-n8n-node/issues)
  - **💬 Support**: Contact Octagon support for API-related questions
  - **📧 Email**: support@octagonagents.com

  ## License

  MIT License - See [LICENSE](LICENSE) file for details.

  ## Contributing

  Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) before submitting pull requests.

  ## Changelog

  See [CHANGELOG.md](CHANGELOG.md) for release history.

  ---

  **⚠️ Note**: This node requires an active Octagon API subscription. Some agents may have usage limits or require premium access. Get started with a free API key at [octagonagents.com](https://octagonagents.com).

ai_documentation_summary:
  {"purpose":"Integrates n8n with Octagon's AI Agents API to provide financial and market research capabilities—letting workflows query specialized AI agents for SEC filings, earnings transcripts, stock and crypto data, private market intelligence, and deep research.","capabilities":["Smart Router Agent that automatically routes queries to the most appropriate specialized agent","Analyze SEC filings (SEC Filings Agent)","Analyze earnings call transcripts (Transcripts Agent)","Analyze stock market data (Stock Data Agent)","Analyze financial statements (Financials Agent)","Analyze institutional ownership and holdings (Holdings Agent)","Analyze cryptocurrency market data (Crypto Agent)","Private company information and funding analysis (Companies, Funding, Funds, Deals, Investors, Debts Agents)","Web data extraction (Scraper Agent)","In-depth research tasks (Deep Research Agent)"],"authentication":"API key required (Octagon API Key via n8n credentials / built-in credential management)","commonUseCases":["Ask high-level financial questions and let the Smart Router pick the best agent","Automated analysis of SEC filings for risk factors, revenue, or disclosures","Summarize and analyze earnings call transcripts and management commentary","Compare company financial metrics or stock performance","Private-market research: company profiles, funding rounds, investors, and deals"],"limitations":["Requires an Octagon API key (sign-up and key creation on Octagon required)","Requires n8n v0.198.0 or higher","In n8n Cloud only the instance owner can install or manage community nodes","Community nodes in n8n Cloud are sandboxed and installation may take several minutes"],"relatedNodes":[]}


node_type: n8n-nodes-hedy.hedy
package_name: n8n-nodes-hedy
display_name: Hedy
description: Interact with Hedy API to retrieve meeting intelligence data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  {
  "type": "main"
  }
  ]

updated_at: 2026-02-19 14:41:52
author_name: julian-hedy
author_github_url: https://github.com/HedyAI/
npm_package_name: n8n-nodes-hedy
npm_version: 1.2.0
community_fetched_at: 2026-02-19T14:41:52.377Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "session",
      "options": [
        {
          "name": "Context",
          "value": "context",
          "description": "Session context operations for AI instructions"
        },
        {
          "name": "Highlight",
          "value": "highlight",
          "description": "Meeting highlight operations"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Meeting session operations"
        },
        {
          "name": "Todo",
          "value": "todo",
          "description": "Todo item operations"
        },
        {
          "name": "Topic",
          "value": "topic",
          "description": "Topic operations for organizing sessions"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a session context",
          "description": "Create a new session context"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a session context",
          "description": "Delete a session context"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session context",
          "description": "Get a specific session context by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many session contexts",
          "description": "Get all session contexts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a session context",
          "description": "Update a session context"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "context"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session",
          "description": "Get a specific session by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sessions",
          "description": "Get multiple sessions"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a highlight",
          "description": "Get a specific highlight by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many highlights",
          "description": "Get multiple highlights"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "highlight"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many todos",
          "description": "Get all todos"
        },
        {
          "name": "Get by Session",
          "value": "getBySession",
          "action": "Get todos by session",
          "description": "Get todos for a specific session"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "todo"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a topic",
          "description": "Get a specific topic by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many topics",
          "description": "Get all topics"
        },
        {
          "name": "Get Topic Sessions",
          "value": "getSessions",
          "action": "Get sessions by topic",
          "description": "Get all sessions for a specific topic"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "topic"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a session context",
      "description": "Create a new session context"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a session context",
      "description": "Delete a session context"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session context",
      "description": "Get a specific session context by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many session contexts",
      "description": "Get all session contexts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a session context",
      "description": "Update a session context"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session",
      "description": "Get a specific session by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sessions",
      "description": "Get multiple sessions"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a highlight",
      "description": "Get a specific highlight by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many highlights",
      "description": "Get multiple highlights"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many todos",
      "description": "Get all todos"
    },
    {
      "name": "Get by Session",
      "value": "getBySession",
      "action": "Get todos by session",
      "description": "Get todos for a specific session"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a topic",
      "description": "Get a specific topic by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many topics",
      "description": "Get all topics"
    },
    {
      "name": "Get Topic Sessions",
      "value": "getSessions",
      "action": "Get sessions by topic",
      "description": "Get all sessions for a specific topic"
    }
  ]

npm_readme:
  # n8n-nodes-hedy

  [![npm version](https://badge.fury.io/js/n8n-nodes-hedy.svg)](https://www.npmjs.com/package/n8n-nodes-hedy)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![n8n Community Node](https://img.shields.io/badge/n8n-Community%20Node-orange)](https://n8n.io)

  This is an n8n community node that lets you integrate [Hedy](https://hedy.bot) - your AI-powered meeting intelligence assistant - into your n8n workflows.

  Hedy helps you be the brightest person in the room by providing real-time transcription, meeting summaries, action items, and intelligent insights from your meetings.

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

  ## 🚀 Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings** > **Community Nodes**
  2. Search for `n8n-nodes-hedy`
  3. Click **Install**

  ### Manual Installation

  ```bash
  # Navigate to your n8n custom nodes folder
  cd ~/.n8n/custom

  # Install the package
  npm install n8n-nodes-hedy
  ```

  ### Docker Installation

  Add the following to your docker-compose.yml:

  ```yaml
  n8n:
    image: n8nio/n8n
    environment:
      - N8N_CUSTOM_EXTENSIONS=n8n-nodes-hedy
  ```

  ## 🔑 Authentication

  1. Get your API key from [Hedy Dashboard](https://app.hedy.bot):
     - Navigate to Settings → API
     - Click "Generate New Key"
     - Copy the key (starts with `hedy_live_`)

  2. In n8n:
     - Go to Credentials
     - Create new "Hedy API" credential
     - Paste your API key
     - Click "Save"

  ## 📦 Nodes Included

  ### Hedy Trigger
  Receives real-time webhook notifications when events occur in Hedy:

  - **Session Created** - When a new meeting session starts
  - **Session Ended** - When a meeting session completes
  - **Highlight Created** - When a highlight is created during a meeting
  - **Todo Exported** - When a todo item is exported

  ### Hedy
  Performs actions and retrieves data from Hedy:

  - **Sessions**
    - Get Session - Retrieve detailed session information
    - Get Many Sessions - List multiple sessions with pagination
    
  - **Highlights**
    - Get Highlight - Retrieve specific highlight details
    - Get Many Highlights - List multiple highlights
    
  - **Todos**
    - Get Many Todos - List all todo items
    - Get Todos by Session - Get todos for a specific session

  ## 🎯 Example Workflows

  ### 1. Meeting Summary to Slack
  Send meeting summaries to Slack when sessions end:

  ```
  [Hedy Trigger: Session Ended]
      → [Hedy: Get Session Details]
      → [Slack: Send Message]
  ```

  ### 2. Highlight Collection to Notion
  Save important highlights to a Notion database:

  ```
  [Hedy Trigger: Highlight Created]
      → [Hedy: Get Highlight Details]
      → [Notion: Create Database Entry]
  ```

  ### 3. Todo Export to Project Management
  Export todos to your project management tool:

  ```
  [Hedy Trigger: Todo Exported]
      → [Jira/Trello/Asana: Create Task]
  ```

  ### 4. Daily Meeting Report
  Generate daily meeting reports:

  ```
  [Schedule Trigger: Daily at 5 PM]
      → [Hedy: Get Many Sessions (today)]
      → [Transform: Format Report]
      → [Email: Send Report]
  ```

  ## 📊 Data Structures

  ### Session Object
  ```json
  {
    "id": "sess_abc123",
    "title": "Team Standup",
    "startTime": "2024-01-10T10:00:00Z",
    "endTime": "2024-01-10T10:30:00Z",
    "duration": 1800,
    "transcript": "Full transcript...",
    "conversations": [...],
    "meeting_minutes": "Meeting notes...",
    "recap": "Summary...",
    "user_todos": [...],
    "topic": {...}
  }
  ```

  ### Highlight Object
  ```json
  {
    "id": "high_xyz789",
    "sessionId": "sess_abc123",
    "timestamp": "2024-01-10T10:15:00Z",
    "title": "Key Decision",
    "rawQuote": "Original quote...",
    "cleanedQuote": "Cleaned quote...",
    "mainIdea": "Core concept...",
    "aiInsights": "Analysis..."
  }
  ```

  ### Todo Object
  ```json
  {
    "id": "todo_123",
    "sessionId": "sess_abc123",
    "text": "Follow up with marketing team",
    "dueDate": "2024-01-15",
    "completed": false,
    "topic": {...}
  }
  ```

  ## ⚙️ Configuration

  ### Webhook Limits
  - Maximum of 10 webhooks per Hedy account
  - Webhooks must use HTTPS URLs
  - Each webhook receives a unique signing secret for security

  ### Pagination
  - Default page size: 50 items
  - Maximum page size: 100 items
  - Supports cursor-based pagination for large datasets

  ### Rate Limiting
  The API follows standard rate limiting practices. If you encounter rate limit errors, implement exponential backoff in your workflows.

  ## 🔒 Security

  ### Webhook Signature Verification
  All webhooks include an `X-Hedy-Signature` header for verification:

  1. The signature is an HMAC SHA-256 hash of the request body
  2. Each webhook has a unique signing secret
  3. Signature verification is enabled by default (recommended)

  ### API Key Security
  - Never share your API key publicly
  - Rotate keys regularly (every 90 days recommended)
  - Use n8n's built-in credential encryption
  - Keys can be revoked instantly from the Hedy dashboard

  ## 🐛 Troubleshooting

  ### Common Issues

  **Webhook Registration Fails**
  - Ensure your n8n instance uses HTTPS
  - Check you haven't exceeded the 10 webhook limit
  - Verify your API key has the necessary permissions

  **No Data Returned**
  - Verify the resource ID exists
  - Check your API key is valid
  - Ensure you have access to the requested resource

  **Signature Verification Fails**
  - Don't modify webhook payloads
  - Ensure signature verification is using the correct secret
  - Check for clock skew between servers

  ## 📚 Resources

  - [Hedy Website](https://hedy.bot)
  - [Hedy API Documentation](https://api.hedy.bot/docs)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Forum](https://community.n8n.io)

  ## 💬 Support

  - **Hedy Support**: support@hedy.bot
  - **API Issues**: api@hedy.bot
  - **n8n Node Issues**: [GitHub Issues](https://github.com/HedyAI/n8n-nodes-hedy/issues)

  ## 🤝 Contributing

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

  1. Fork the repository
  2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
  3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
  4. Push to the branch (`git push origin feature/AmazingFeature`)
  5. Open a Pull Request

  ## 📄 License

  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

  ## 🙏 Acknowledgments

  - Thanks to the n8n team for their excellent workflow automation platform
  - Thanks to the Hedy team for providing comprehensive API documentation
  - Thanks to all contributors and users of this node

  ## 📈 Version History

  See [CHANGELOG.md](CHANGELOG.md) for a list of changes in each version.

  ---

  Made with ❤️ by the Hedy team

ai_documentation_summary:
  {"purpose":"Integrate Hedy (an AI meeting intelligence assistant) with n8n to receive real-time meeting events and retrieve meeting transcripts, summaries, highlights, todos, and other intelligence data.","capabilities":["Receive real-time webhook events (Hedy Trigger) for: Session Created, Session Ended, Highlight Created, Todo Exported","Retrieve session details (Get Session)","List sessions with pagination (Get Many Sessions)","Retrieve highlight details (Get Highlight)","List highlights (Get Many Highlights)","List todo items (Get Many Todos)","Get todos for a specific session (Get Todos by Session)","Access meeting intelligence data such as transcripts, recaps/summaries, meeting minutes, user todos, topics, and AI insights","Support cursor-based pagination and configurable page sizes (default 50, max 100)","Webhook signature verification via HMAC SHA-256 (X-Hedy-Signature header)"],"authentication":"API key required (create 'Hedy API' credential in n8n; API keys start with 'hedy_live_')","commonUseCases":["Send meeting summaries to Slack when sessions end","Save highlights to Notion when a highlight is created","Export todos to project management tools (Jira, Trello, Asana) when todos are exported","Generate daily meeting reports by listing today's sessions and emailing a formatted report"],"limitations":["Maximum of 10 webhooks per Hedy account","Webhooks must use HTTPS URLs","Each webhook has a unique signing secret and signature verification is enabled by default (requires verifying HMAC SHA-256 signature)","Default page size is 50 and maximum page size is 100 (use cursor-based pagination for large datasets)","API rate limits apply; workflows should implement exponential backoff on rate-limit errors"],"relatedNodes":["Hedy Trigger","Hedy","Slack","Notion","Jira"]}


node_type: n8n-nodes-itglue.iTGlue
package_name: n8n-nodes-itglue
display_name: IT Glue
description: Utilize the IT Glue API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: redanthrax
author_github_url: https://github.com/redanthrax/itglue-node.git
npm_package_name: n8n-nodes-itglue
npm_version: 2.1.0
community_fetched_at: 2026-02-19T14:41:52.377Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "organization",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Configuration",
          "value": "configuration"
        },
        {
          "name": "Configuration Interface",
          "value": "configurationInterface"
        },
        {
          "name": "Configuration Status",
          "value": "configurationStatus"
        },
        {
          "name": "Configuration Type",
          "value": "configurationType"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Type",
          "value": "contactType"
        },
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Document Image",
          "value": "documentImage"
        },
        {
          "name": "Document Section",
          "value": "documentSection"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Expiration",
          "value": "expiration"
        },
        {
          "name": "Export",
          "value": "export"
        },
        {
          "name": "Flexible Asset",
          "value": "flexibleAsset"
        },
        {
          "name": "Flexible Asset Field",
          "value": "flexibleAssetField"
        },
        {
          "name": "Flexible Asset Type",
          "value": "flexibleAssetType"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Log",
          "value": "log"
        },
        {
          "name": "Manufacturer",
          "value": "manufacturer"
        },
        {
          "name": "Model",
          "value": "model"
        },
        {
          "name": "Operating System",
          "value": "operatingSystem"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Organization Status",
          "value": "organizationStatus"
        },
        {
          "name": "Organization Type",
          "value": "organizationType"
        },
        {
          "name": "Password",
          "value": "password"
        },
        {
          "name": "Password Category",
          "value": "passwordCategory"
        },
        {
          "name": "Platform",
          "value": "platform"
        },
        {
          "name": "Region",
          "value": "region"
        },
        {
          "name": "Related Item",
          "value": "relatedItem"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "User Metric",
          "value": "userMetric"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete configurations",
          "description": "Delete multiple configurations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update configurations",
          "description": "Update multiple configurations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a configuration",
          "description": "Create a new configuration"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get configurations data",
          "description": "Get data from the Configurations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get configuration by ID",
          "description": "Get a specific configuration by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a configuration",
          "description": "Update an existing configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "configuration"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete contacts",
          "description": "Delete multiple contacts at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update contacts",
          "description": "Update multiple contacts at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a contact",
          "description": "Retrieve a single contact"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many contacts",
          "description": "Retrieve multiple contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update documents",
          "description": "Update multiple documents at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document",
          "description": "Create a new document"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "description": "Delete a document"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get documents",
          "description": "Get all documents"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document by ID",
          "description": "Get a specific document by ID"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a document",
          "description": "Publish a document"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update an existing document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document image",
          "description": "Upload a new document image"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document image",
          "description": "Delete a document image"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document image by ID",
          "description": "Get a specific document image by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentImage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document section",
          "description": "Create a new document section"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document section",
          "description": "Delete a document section"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get document sections",
          "description": "Get all document sections for a document"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document section by ID",
          "description": "Get a specific document section by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document section",
          "description": "Update an existing document section"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentSection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many domains",
          "description": "Get domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Destroy",
          "value": "bulkDestroy",
          "action": "Bulk delete flexible assets",
          "description": "Delete multiple flexible assets at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a flexible asset",
          "description": "Create a new flexible asset"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a flexible asset",
          "description": "Delete a flexible asset"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a flexible asset",
          "description": "Retrieve a single flexible asset"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many flexible assets",
          "description": "Retrieve multiple flexible assets"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a flexible asset",
          "description": "Update an existing flexible asset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "flexibleAsset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete organizations",
          "description": "Delete multiple organizations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update organizations",
          "description": "Update multiple organizations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create organizations data",
          "description": "Create an organization using the Organizations endpoint"
        },
        {
          "name": "Delete",
          "value": "deleteOrganization",
          "action": "Delete an organization",
          "description": "Delete an organization"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get organizations data",
          "description": "Get data from the Organizations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get organization by ID",
          "description": "Get a specific organization by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update organizations data",
          "description": "Update an organization using the Organizations endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete passwords",
          "description": "Delete multiple passwords at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update passwords",
          "description": "Update multiple passwords at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a password",
          "description": "Create a new password"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a password",
          "description": "Delete a password"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a password",
          "description": "Retrieve a single password"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many passwords",
          "description": "Retrieve multiple passwords"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a password",
          "description": "Update an existing password"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "password"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete configurations",
      "description": "Delete multiple configurations at once"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update configurations",
      "description": "Update multiple configurations at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a configuration",
      "description": "Create a new configuration"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get configurations data",
      "description": "Get data from the Configurations endpoint"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get configuration by ID",
      "description": "Get a specific configuration by ID"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a configuration",
      "description": "Update an existing configuration"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete contacts",
      "description": "Delete multiple contacts at once"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update contacts",
      "description": "Update multiple contacts at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a contact",
      "description": "Retrieve a single contact"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many contacts",
      "description": "Retrieve multiple contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update documents",
      "description": "Update multiple documents at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document",
      "description": "Create a new document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "description": "Delete a document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get documents",
      "description": "Get all documents"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document by ID",
      "description": "Get a specific document by ID"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a document",
      "description": "Publish a document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update an existing document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document image",
      "description": "Upload a new document image"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document image",
      "description": "Delete a document image"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document image by ID",
      "description": "Get a specific document image by ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document section",
      "description": "Create a new document section"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document section",
      "description": "Delete a document section"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get document sections",
      "description": "Get all document sections for a document"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document section by ID",
      "description": "Get a specific document section by ID"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document section",
      "description": "Update an existing document section"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many domains",
      "description": "Get domains"
    },
    {
      "name": "Bulk Destroy",
      "value": "bulkDestroy",
      "action": "Bulk delete flexible assets",
      "description": "Delete multiple flexible assets at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a flexible asset",
      "description": "Create a new flexible asset"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a flexible asset",
      "description": "Delete a flexible asset"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a flexible asset",
      "description": "Retrieve a single flexible asset"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many flexible assets",
      "description": "Retrieve multiple flexible assets"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a flexible asset",
      "description": "Update an existing flexible asset"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete organizations",
      "description": "Delete multiple organizations at once"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update organizations",
      "description": "Update multiple organizations at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create organizations data",
      "description": "Create an organization using the Organizations endpoint"
    },
    {
      "name": "Delete",
      "value": "deleteOrganization",
      "action": "Delete an organization",
      "description": "Delete an organization"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get organizations data",
      "description": "Get data from the Organizations endpoint"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get organization by ID",
      "description": "Get a specific organization by ID"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update organizations data",
      "description": "Update an organization using the Organizations endpoint"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete passwords",
      "description": "Delete multiple passwords at once"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update passwords",
      "description": "Update multiple passwords at once"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a password",
      "description": "Create a new password"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a password",
      "description": "Delete a password"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a password",
      "description": "Retrieve a single password"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many passwords",
      "description": "Retrieve multiple passwords"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a password",
      "description": "Update an existing password"
    }
  ]

npm_readme:
  # n8n-nodes-itglue

  An n8n community node for integrating with IT Glue API.

  ## Installation

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

  ```bash
  npm install n8n-nodes-itglue
  ```

  ## Prerequisites

  - IT Glue account with API access
  - API Key from IT Glue
  - Your IT Glue region (US, Europe, or Australia)

  ## Setup

  ### Setting up API Key in IT Glue

  1. Log into your IT Glue instance
  2. Navigate to Account > Settings > API Keys
  3. Create a new API key
  4. Note down the API Key for use in n8n

  ### Configuring Credentials in n8n

  1. **Region**: Select your IT Glue region (api, api.eu, or api.au)
  2. **API Key**: The API key from IT Glue

  ## Supported Operations

  ### [Attachments](./docs/attachments.md)
  Manage file attachments with create, update, and bulk destroy operations for document management.

  ### [Configurations](./docs/configurations.md)
  Complete configuration item management with CRUD operations, bulk updates, and comprehensive filtering for IT asset management.

  ### [Configuration Interfaces](./docs/configuration-interfaces.md)
  Manage network interfaces and connections with full CRUD operations and bulk update capabilities.

  ### [Configuration Statuses](./docs/configuration-statuses.md)
  Manage configuration status definitions with complete CRUD operations for asset lifecycle tracking.

  ### [Configuration Types](./docs/configuration-types.md)
  Manage configuration type definitions with CRUD operations for asset categorization.

  ### [Contacts](./docs/contacts.md)
  Manage contact records with full CRUD operations, bulk updates, and comprehensive contact information management.

  ### [Contact Types](./docs/contact-types.md)
  Manage contact type definitions with CRUD operations for contact categorization.

  ### [Countries](./docs/countries.md)
  Retrieve country information and geographical data with filtering capabilities.

  ### [Documents](./docs/documents.md)
  Complete document management with CRUD operations, bulk updates, and comprehensive document handling.

  ### [Domains](./docs/domains.md)
  Retrieve domain records and DNS-related information with filtering options.

  ### [Expirations](./docs/expirations.md)
  Track asset and license expirations with retrieval and filtering capabilities.

  ### [Flexible Assets](./docs/flexible-assets.md)
  Manage custom flexible asset types with dynamic field structures, supporting full CRUD operations and bulk destroy.

  ### [Flexible Asset Fields](./docs/flexible-asset-fields.md)
  Manage flexible asset field definitions with complete CRUD operations and bulk update capabilities.

  ### [Flexible Asset Types](./docs/flexible-asset-types.md)
  Manage flexible asset type definitions with full CRUD operations for custom asset management.

  ### [Logs](./docs/logs.md)
  Retrieve system logs and audit trail information for monitoring and compliance.

  ### [Operating Systems](./docs/operating-systems.md)
  Retrieve operating system information and specifications with filtering capabilities.

  ### [Organizations](./docs/organizations.md)
  Manage organization records with comprehensive CRUD operations including creation, updates, bulk operations, and deletion with filtering capabilities.

  ### [Organization Statuses](./docs/organization-statuses.md)
  Manage organization status definitions with CRUD operations for organizational lifecycle tracking.

  ### [Organization Types](./docs/organization-types.md)
  Manage organization type definitions with CRUD operations for organizational categorization.

  ### [Passwords](./docs/passwords.md)
  Securely manage password entries with full CRUD operations including creation, updates, retrieval, deletion, and bulk operations with advanced filtering.

  ### [Password Categories](./docs/password-categories.md)
  Manage password category definitions with CRUD operations for password organization.

  ### [Platforms](./docs/platforms.md)
  Retrieve platform and technology information with filtering capabilities.

  ### [Regions](./docs/regions.md)
  Retrieve regional information and geographical data with filtering options.

  ### [Related Items](./docs/related-items.md)
  Manage relationships between different IT Glue resources with CRUD operations and bulk destroy capabilities.

  ### [Users](./docs/users.md)
  Manage user accounts with CRUD operations for user administration.

  ### [User Metrics](./docs/user-metrics.md)
  Retrieve user activity metrics and analytics for monitoring user engagement.

  ## Resources

  - [IT Glue API Documentation](https://api.itglue.com/developer/)
  - [n8n Documentation](https://docs.n8n.io)
  - [Repository](https://github.com/redanthrax/itglue-node)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Provides n8n integration with the IT Glue API to manage IT asset, documentation, user, and password data programmatically within workflows.","capabilities":["CRUD operations for configurations (configuration items) with bulk updates and advanced filtering","Manage attachments: create, update, bulk destroy","Manage configuration interfaces with full CRUD and bulk update","Manage configuration statuses and configuration types (CRUD)","CRUD and bulk operations for contacts and contact types","Retrieve countries, regions, platforms, and operating systems with filtering","CRUD and bulk management for documents and domains with filtering","Retrieve expirations and track asset/license expirations with filtering","Manage flexible assets, flexible asset fields, and flexible asset types (full CRUD and bulk destroy/update where supported)","Retrieve system logs and audit trails"],"authentication":"API key required (must provide IT Glue API Key and select region: api, api.eu, or api.au)","commonUseCases":["Automate creation and updates of configuration items and their interfaces across environments","Sync documents and attachments between IT Glue and other systems or backups","Automate user and organization provisioning and updates","Centralize and automate password/secret management workflows (create, rotate, bulk operations)","Monitor assets and licenses by retrieving expirations and user activity metrics"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-signifycrm.signifyCrm
package_name: n8n-nodes-signifycrm
display_name: SignifyCRM
description: Consume SignifyCRM API
category: Communication
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: signifycrm
author_github_url: https://github.com/serveradmin-git/
npm_package_name: n8n-nodes-signifycrm
npm_version: 0.1.3
community_fetched_at: 2026-02-19T14:41:52.385Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Case",
          "value": "case"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an account",
          "description": "Create an account"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an account",
          "description": "Delete an account"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an account",
          "description": "Get an account"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounts",
          "description": "Get many accounts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an account",
          "description": "Update an account"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "description": "Create a lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "description": "Delete a lead"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "description": "Get a lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads",
          "description": "Get many leads"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "description": "Update a lead"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a opportunity",
          "description": "Create a opportunity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a opportunity",
          "description": "Delete a opportunity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a opportunity",
          "description": "Get a opportunity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many opportunities",
          "description": "Get many opportunities"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a opportunity",
          "description": "Update a opportunity"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a case",
          "description": "Create a case"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a case",
          "description": "Delete a case"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case",
          "description": "Get a case"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many cases",
          "description": "Get many cases"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a case",
          "description": "Update a case"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "case"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "description": "Delete a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "description": "Get a task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks",
          "description": "Get many tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "description": "Update a task"
        },
        {
          "name": "Custom API Call",
          "value": "__CUSTOM_API_CALL__"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "Get many contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update a contact"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an account",
      "description": "Create an account"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an account",
      "description": "Delete an account"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an account",
      "description": "Get an account"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounts",
      "description": "Get many accounts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an account",
      "description": "Update an account"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "description": "Create a lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "description": "Delete a lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "description": "Get a lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "description": "Get many leads"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "description": "Update a lead"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a opportunity",
      "description": "Create a opportunity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a opportunity",
      "description": "Delete a opportunity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a opportunity",
      "description": "Get a opportunity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many opportunities",
      "description": "Get many opportunities"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a opportunity",
      "description": "Update a opportunity"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a case",
      "description": "Create a case"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a case",
      "description": "Delete a case"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case",
      "description": "Get a case"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many cases",
      "description": "Get many cases"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a case",
      "description": "Update a case"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "description": "Delete a task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "description": "Get a task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "description": "Get many tasks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "description": "Update a task"
    },
    {
      "name": "Custom API Call",
      "value": "__CUSTOM_API_CALL__"
    }
  ]

npm_readme:
  # n8n-nodes-signifycrm

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

  SignifyCRM is a powerful CRM platform serving APAC businesses since 2006, helping teams automate sales pipelines, manage marketing campaigns, and streamline customer support.

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

  ```bash
  npm install n8n-nodes-signifycrm
  ```

  ## Operations

  The SignifyCRM node supports the following **resources** and **operations**:

  ### Account
  - **create**: Create a new Account record  
  - **get**: Retrieve an Account by ID  
  - **getAll**: Retrieve multiple Accounts
  - **update**: Update an existing Account  
  - **delete**: Soft-delete an Account  

  ### Contact
  - **create**: Create a new Contact record  
  - **get**: Retrieve a Contact by ID  
  - **getAll**: Retrieve multiple Contacts  
  - **update**: Update an existing Contact  
  - **delete**: Soft-delete a Contact  

  ### Lead
  - **create**: Create a new Lead record  
  - **get**: Retrieve a Lead by ID  
  - **getAll**: Retrieve multiple Leads  
  - **update**: Update an existing Lead  
  - **delete**: Soft-delete a Lead  

  ### Opportunity
  - **create**: Create a new Opportunity record  
  - **get**: Retrieve an Opportunity by ID  
  - **getAll**: Retrieve multiple Opportunities  
  - **update**: Update an existing Opportunity  
  - **delete**: Soft-delete an Opportunity  

  ### Case
  - **create**: Create a new Case record  
  - **get**: Retrieve a Case by ID  
  - **getAll**: Retrieve multiple Cases  
  - **update**: Update an existing Case  
  - **delete**: Soft-delete a Case  

  ### Task
  - **create**: Create a new Task record  
  - **get**: Retrieve a Task by ID  
  - **getAll**: Retrieve multiple Tasks  
  - **update**: Update an existing Task  
  - **delete**: Soft-delete a Task  

  ## Credentials

  To connect your workflows to SignifyCRM, you must create a **SignifyCRM API** credential in n8n.

  ### Prerequisites
  - An active SignifyCRM account (contact your administrator if you don’t have one).  
  - Your SignifyCRM instance URL (e.g. `https://example.signifycrm.com`).  
  - A valid **API Key** issued by your SignifyCRM administrator.  
  - Your SignifyCRM **Username** and **Password**.

  ### Authentication Method
  This node uses SignifyCRM’s REST-API login endpoint (`POST /rest_api/v1/rest/login`) to authenticate on every request. Your API key is sent in the request body along with your login credentials.

  ### How to set up in n8n
  1. In n8n, go to **Settings → Credentials**.  
  2. Click **New Credential** and choose **SignifyCRM API**.  
  3. Enter the following fields:  
     - **Site URL**  
       - The full base URL of your SignifyCRM instance (e.g. `https://example.signifycrm.com`).  
     - **API Key**  
       - Your SignifyCRM API key.  
     - **Username**  
       - Your SignifyCRM username.  
     - **Password**  
       - Your SignifyCRM login password.  
  4. Click **Save**.  
  5. n8n will automatically send a test request to `/rest_api/v1/rest/login`. If the test succeeds, your credential is ready to use.

  For more details on SignifyCRM authentication, refer to the [SignifyCRM API docs](https://support.signifycrm.net/service/api_v1/docs/).

  ## Compatibility

  This node was developed and tested with latest stable n8n release and SignifyCRM API v1.

  ## Usage

  If you’re new to n8n, check out the [Try it out guide](https://docs.n8n.io/try-it-out/) first.

  1. **Add the node**  
     On your workflow canvas click the “+” button and search for **SignifyCRM**.

  2. **Select your credential**  
     In the node’s **Credentials** dropdown, pick the **SignifyCRM API** you created.

  3. **Choose a resource & operation**  
     - **Resource**: e.g. Account, Contact, Lead, Opportunity, Case, or Task  
     - **Operation**: e.g. create, get, getAll, update, delete  

  4. **Fill in the parameters**  
     - Required fields will be marked in red  
     - You can expand **Additional Fields** to set any optional properties  

  5. **Connect to other nodes**  
     - Use an **HTTP Request**, **Set**, or **Function** node before/after to pass data in or handle results  

  6. **Execute the workflow**  
     - Click **Execute Node** (or run the whole workflow) to test  
     - Inspect the output in the node’s **Output** panel

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [SignifyCRM API v1 documentation](https://support.signifycrm.net/service/api_v1/docs/)  
  * [GitHub repository & README](https://github.com/serveradmin-git/n8n-nodes-signifycrm#readme)  

  ## Version history

  - **1.0.0**
    - Initial release  
    - Resources: Account, Contact, Lead, Opportunity, Case, Task  
    - Operations: create · get · getAll · update · delete  
    - Built and tested against n8n latest and SignifyCRM API v1

  ## License

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

ai_documentation_summary:
  {"purpose":"Provides n8n workflow access to the SignifyCRM REST API to create, retrieve, update, list, and soft-delete core CRM records (Account, Contact, Lead, Opportunity, Case, Task).","capabilities":["Account: create, get (by ID), getAll, update, delete (soft-delete)","Contact: create, get (by ID), getAll, update, delete (soft-delete)","Lead: create, get (by ID), getAll, update, delete (soft-delete)","Opportunity: create, get (by ID), getAll, update, delete (soft-delete)","Case: create, get (by ID), getAll, update, delete (soft-delete)","Task: create, get (by ID), getAll, update, delete (soft-delete)","Credential test request during setup (POST /rest_api/v1/rest/login)"],"authentication":"API Key + Username & Password required. The node authenticates by calling SignifyCRM's REST login endpoint (POST /rest_api/v1/rest/login) on every request; the API key is sent in the request body along with login credentials.","commonUseCases":["Create or update Contacts, Leads, Accounts, Opportunities, Cases, or Tasks from other systems or form submissions","Synchronize CRM records between SignifyCRM and external databases or apps","Automate sales pipeline actions (create opportunities, update stages, create follow-up tasks)","Bulk retrieve records for reporting, enrichment, or downstream processing","Create support Cases or Tasks from external ticketing/monitoring systems"],"limitations":["Delete operation performs a soft-delete (not permanent removal)","Node authenticates on every request via the login endpoint — may have performance or rate-limit implications","Only built/tested against SignifyCRM API v1 (no multi-version support mentioned)","No trigger/webhook or real-time event node described; node focuses on CRUD operations","README does not specify pagination, batch import/export, or advanced filtering behaviors"],"relatedNodes":["HTTP Request","Set","Function"]}


node_type: @pdfgeneratorapi/n8n-nodes-pdf-generator-api.pdfGeneratorApi
package_name: @pdfgeneratorapi/n8n-nodes-pdf-generator-api
display_name: PDF Generator API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: bruno-farias-ar
author_github_url: https://github.com/pdfgeneratorapi/n8n-nodes-pdf-generator-api.git
npm_package_name: @pdfgeneratorapi/n8n-nodes-pdf-generator-api
npm_version: 0.4.0
community_fetched_at: 2026-02-19T14:41:52.387Z
ai_summary_generated_at: 2026-02-19 16:43:57
description:
  Generate PDFs, manage templates, convert HTML/URLs to PDF, and perform PDF operations like watermarking, encryption, and optimization

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Asset",
          "value": "asset",
          "description": "Generate QR codes and other assets for use in documents"
        },
        {
          "name": "Conversion",
          "value": "conversion",
          "description": "Convert HTML content or URLs directly to PDF without templates"
        },
        {
          "name": "Document",
          "value": "document",
          "description": "Generate PDFs from templates with data, manage document storage"
        },
        {
          "name": "PDF Service",
          "value": "pdfServices",
          "description": "Process existing PDFs: add watermarks, encrypt, decrypt, optimize, and manage form fields"
        },
        {
          "name": "Template",
          "value": "template",
          "description": "Create, update, and manage PDF templates for document generation"
        },
        {
          "name": "Workspace",
          "value": "workspace",
          "description": "Manage workspaces for organizing templates and users"
        }
      ],
      "description": "Choose the type of PDF operation: generate documents from templates, convert HTML/URLs, process existing PDFs, or manage templates and workspaces",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateQRCode",
      "options": [
        {
          "name": "Generate QR Code",
          "value": "generateQRCode",
          "action": "Generate a QR code image",
          "description": "Generate a QR code image"
        }
      ],
      "displayName": "Asset Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "asset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "htmlToPdf",
      "options": [
        {
          "name": "HTML to PDF",
          "value": "htmlToPdf",
          "action": "Convert HTML content to PDF",
          "description": "Convert HTML content to PDF"
        },
        {
          "name": "URL to PDF",
          "value": "urlToPdf",
          "action": "Convert public URL to PDF",
          "description": "Convert public URL to PDF"
        }
      ],
      "displayName": "Conversion Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "conversion"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document from storage",
          "description": "Delete a document from storage"
        },
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate a PDF document",
          "description": "Generate a PDF document"
        },
        {
          "name": "Generate (Async)",
          "value": "generateAsync",
          "action": "Generate a PDF document asynchronously",
          "description": "Generate a PDF document asynchronously"
        },
        {
          "name": "Generate (Batch + Async)",
          "value": "generateBatchAsync",
          "action": "Generate multiple PDF documents in batch asynchronously",
          "description": "Generate multiple PDF documents in batch asynchronously"
        },
        {
          "name": "Generate (Batch)",
          "value": "generateBatch",
          "action": "Generate multiple PDF documents in batch",
          "description": "Generate multiple PDF documents in batch"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document by public ID",
          "description": "Get a document by public ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List generated documents",
          "description": "List generated documents"
        }
      ],
      "displayName": "Document Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addWatermark",
      "options": [
        {
          "name": "Add Watermark",
          "value": "addWatermark",
          "action": "Add watermark to PDF document",
          "description": "Add text or image watermark to PDF document"
        },
        {
          "name": "Decrypt Document",
          "value": "decrypt",
          "action": "Decrypt encrypted PDF document",
          "description": "Decrypt an encrypted PDF document"
        },
        {
          "name": "Encrypt Document",
          "value": "encrypt",
          "action": "Encrypt PDF document with password",
          "description": "Encrypt a PDF document with password protection"
        },
        {
          "name": "Extract Form Fields",
          "value": "extractFormFields",
          "action": "Extract form fields from PDF document",
          "description": "Extract form fields and their metadata from a PDF document"
        },
        {
          "name": "Fill Form Fields",
          "value": "fillFormFields",
          "action": "Fill form fields in PDF document",
          "description": "Fill form fields in a PDF document with provided data"
        },
        {
          "name": "Optimize Document",
          "value": "optimize",
          "action": "Optimize PDF document size",
          "description": "Optimize PDF document size for better performance"
        }
      ],
      "displayName": "Services Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "pdfServices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Copy",
          "value": "copy",
          "action": "Copy a template",
          "description": "Copy a template"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new template",
          "description": "Create a new template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a template",
          "description": "Delete a template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template by ID",
          "description": "Get a template by ID"
        },
        {
          "name": "Get Data Fields",
          "value": "getDataFields",
          "action": "Get template data fields",
          "description": "Get template data fields"
        },
        {
          "name": "Get Template Schema",
          "value": "getTemplateSchema",
          "action": "Get template JSON schema",
          "description": "Get template JSON schema"
        },
        {
          "name": "List",
          "value": "list",
          "action": "Get all templates",
          "description": "Get all templates"
        },
        {
          "name": "Open Editor",
          "value": "openEditor",
          "action": "Get template editor URL",
          "description": "Get template editor URL"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an existing template",
          "description": "Update an existing template"
        },
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate template configuration",
          "description": "Validate template configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new workspace",
          "description": "Create a new workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a workspace",
          "description": "Delete a workspace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get workspace by identifier",
          "description": "Get workspace by identifier"
        },
        {
          "name": "List",
          "value": "list",
          "action": "Get all workspaces",
          "description": "Get all workspaces"
        }
      ],
      "displayName": "Workspace Operations",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate QR Code",
      "value": "generateQRCode",
      "action": "Generate a QR code image",
      "description": "Generate a QR code image"
    },
    {
      "name": "HTML to PDF",
      "value": "htmlToPdf",
      "action": "Convert HTML content to PDF",
      "description": "Convert HTML content to PDF"
    },
    {
      "name": "URL to PDF",
      "value": "urlToPdf",
      "action": "Convert public URL to PDF",
      "description": "Convert public URL to PDF"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document from storage",
      "description": "Delete a document from storage"
    },
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate a PDF document",
      "description": "Generate a PDF document"
    },
    {
      "name": "Generate (Async)",
      "value": "generateAsync",
      "action": "Generate a PDF document asynchronously",
      "description": "Generate a PDF document asynchronously"
    },
    {
      "name": "Generate (Batch + Async)",
      "value": "generateBatchAsync",
      "action": "Generate multiple PDF documents in batch asynchronously",
      "description": "Generate multiple PDF documents in batch asynchronously"
    },
    {
      "name": "Generate (Batch)",
      "value": "generateBatch",
      "action": "Generate multiple PDF documents in batch",
      "description": "Generate multiple PDF documents in batch"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document by public ID",
      "description": "Get a document by public ID"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List generated documents",
      "description": "List generated documents"
    },
    {
      "name": "Add Watermark",
      "value": "addWatermark",
      "action": "Add watermark to PDF document",
      "description": "Add text or image watermark to PDF document"
    },
    {
      "name": "Decrypt Document",
      "value": "decrypt",
      "action": "Decrypt encrypted PDF document",
      "description": "Decrypt an encrypted PDF document"
    },
    {
      "name": "Encrypt Document",
      "value": "encrypt",
      "action": "Encrypt PDF document with password",
      "description": "Encrypt a PDF document with password protection"
    },
    {
      "name": "Extract Form Fields",
      "value": "extractFormFields",
      "action": "Extract form fields from PDF document",
      "description": "Extract form fields and their metadata from a PDF document"
    },
    {
      "name": "Fill Form Fields",
      "value": "fillFormFields",
      "action": "Fill form fields in PDF document",
      "description": "Fill form fields in a PDF document with provided data"
    },
    {
      "name": "Optimize Document",
      "value": "optimize",
      "action": "Optimize PDF document size",
      "description": "Optimize PDF document size for better performance"
    },
    {
      "name": "Copy",
      "value": "copy",
      "action": "Copy a template",
      "description": "Copy a template"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new template",
      "description": "Create a new template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a template",
      "description": "Delete a template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template by ID",
      "description": "Get a template by ID"
    },
    {
      "name": "Get Data Fields",
      "value": "getDataFields",
      "action": "Get template data fields",
      "description": "Get template data fields"
    },
    {
      "name": "Get Template Schema",
      "value": "getTemplateSchema",
      "action": "Get template JSON schema",
      "description": "Get template JSON schema"
    },
    {
      "name": "List",
      "value": "list",
      "action": "Get all templates",
      "description": "Get all templates"
    },
    {
      "name": "Open Editor",
      "value": "openEditor",
      "action": "Get template editor URL",
      "description": "Get template editor URL"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an existing template",
      "description": "Update an existing template"
    },
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate template configuration",
      "description": "Validate template configuration"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new workspace",
      "description": "Create a new workspace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a workspace",
      "description": "Delete a workspace"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get workspace by identifier",
      "description": "Get workspace by identifier"
    },
    {
      "name": "List",
      "value": "list",
      "action": "Get all workspaces",
      "description": "Get all workspaces"
    }
  ]

npm_readme:
  # n8n-nodes-pdf-generator-api

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

  PDF Generator API is a powerful service that allows you to generate PDFs from templates, convert HTML/URLs to PDF, and perform various PDF operations like watermarking, encryption, optimization, and form field manipulation.

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

  Use the package name: `@pdfgeneratorapi/n8n-nodes-pdf-generator-api`

  ## Operations

  This node supports the following operations organized by resource:

  ### Asset
  - **Generate QR Code** - Generate QR codes with customizable colors and logos
    - Support for base64 and file output formats
    - Optional logo overlay (from URL or base64)
    - Customizable QR code color

  ### Document
  - **Generate** - Generate a PDF document from a template with data
  - **Generate (Async)** - Generate a PDF document asynchronously with callback
  - **Generate (Batch)** - Generate multiple PDF documents in batch
  - **Generate (Batch + Async)** - Generate multiple PDF documents in batch asynchronously
  - **List** - List generated documents stored in the API
  - **Get** - Retrieve a specific document by public ID
  - **Delete** - Delete a document from storage

  ### Template
  - **Create** - Create a new PDF template
  - **Update** - Update an existing template configuration
  - **Get** - Retrieve template configuration
  - **Delete** - Delete a template
  - **List** - List available templates
  - **Copy** - Create a copy of an existing template
  - **Get Data Fields** - Extract data fields used in a template
  - **Get Template Schema** - Get Template JSON Schema for validation
  - **Open Editor** - Get URL to open template editor
  - **Validate** - Validate template configuration

  ### Conversion
  - **HTML to PDF** - Convert HTML content directly to PDF
  - **URL to PDF** - Convert a public URL to PDF

  ### PDF Services
  - **Add Watermark** - Add text or image watermarks to PDF documents
  - **Encrypt Document** - Encrypt PDF documents with password protection
  - **Decrypt Document** - Decrypt encrypted PDF documents
  - **Optimize Document** - Optimize PDF file size for better performance
  - **Extract Form Fields** - Extract form fields and metadata from PDF documents
  - **Fill Form Fields** - Fill form fields in PDF documents with provided data

  ### Workspace
  - **Create** - Create a new workspace for organizing templates
  - **List** - List all workspaces in organization
  - **Get** - Get workspace information
  - **Delete** - Delete a workspace

  ## Credentials

  To use this node, you need to authenticate with PDF Generator API:

  ### Prerequisites
  1. Sign up for a [PDF Generator API account](https://pdfgeneratorapi.com/signup)
  2. Get your API Key and API Secret from Account Settings

  ### Authentication Setup
  1. In n8n, create new credentials for "PDF Generator API"
  2. Enter your **API Key** and **API Secret**

  ### JWT Authentication
  The node automatically handles JWT token generation using your API credentials. Tokens are generated server-side and include:
  - Issuer (iss): Your API Key
  - Subject (sub): Workspace identifier
  - Expiration (exp): Short-lived tokens for security

  ## Compatibility

  - **Minimum n8n version**: 0.199.0
  - **Tested with**: n8n versions 0.199.0+
  - **Node API version**: 1

  ## Usage

  ### QR Code Generation
  1. Select **Resource**: Asset
  2. Select **Operation**: Generate QR Code
  3. Enter the content to encode (URL, text, etc.)
  4. Choose output format (Base64 or File)
  5. Optionally add a logo from URL or base64
  6. Customize QR code color

  ### Basic Document Generation
  1. Select **Resource**: Document
  2. Select **Operation**: Generate
  3. Choose your template from the dropdown
  4. Provide JSON data to merge with the template
  5. Select output format (Base64, URL, Viewer, or File)

  ### HTML to PDF Conversion
  1. Select **Resource**: Conversion
  2. Select **Operation**: HTML to PDF
  3. Enter your HTML content
  4. Configure paper size and orientation
  5. Specify filename and output format

  ### PDF Processing
  - **Watermarking**: Add text or image watermarks with positioning options
  - **Encryption**: Protect PDFs with owner and user passwords
  - **Decryption**: Remove password protection from encrypted PDFs
  - **Optimization**: Reduce file size while maintaining quality
  - **Form Fields**: Extract form field metadata and fill PDF forms with data

  #### Form Fields Operations
  1. **Extract Form Fields**: Analyze PDF forms to discover available fields
  2. **Fill Form Fields**: Populate PDF forms with data

  Example form data:
  ```json
  {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "subscribe": true
  }
  ```

  ### Output Formats
  - **Base64**: Returns PDF as base64 encoded string in JSON
  - **URL**: Returns download URL (files stored for 30 days)
  - **Viewer**: Returns viewer URL for viewing/downloading (files stored for 30 days)
  - **File**: Returns binary PDF data for direct download

  ### Supported Document Formats
  - **PDF**: Full-featured PDF documents
  - **HTML**: HTML documents for web display

  ### Error Handling
  The node includes comprehensive error handling for:
  - Authentication failures
  - Invalid template configurations
  - Missing required parameters
  - API rate limiting
  - Network connectivity issues

  For workflows that should continue on errors, enable "Continue on Fail" in node settings.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [PDF Generator API Documentation](https://docs.pdfgeneratorapi.com)
  * [PDF Generator API Support](https://support.pdfgeneratorapi.com)
  * [Template Editor Guide](https://support.pdfgeneratorapi.com/en/category/components-1ffseaj/)
  * [Expression Language Documentation](https://support.pdfgeneratorapi.com/en/category/expression-language-q203pa/)

  ## Version history

  ### 0.4.0
  - **New**: Added Asset resource with QR code generation
    - Generate QR codes with customizable colors
    - Optional logo overlay support (URL or base64)
    - Base64 and file output formats
  - **New**: Added "Get Template Schema" operation to Template resource
    - Returns Template JSON Schema for validation
  - **New**: Added "Viewer" output format for document generation
    - Available for all document generation operations (sync, async, batch)
    - Returns viewer URL for viewing/downloading PDFs
    - Files stored for 30 days like URL format
  - 🔧 **Improved**: Enhanced output format descriptions and help text

  ### 0.3.0
  - 🔧 **Breaking**: Removed ZIP and XLSX format support
  - 🐛 **Fixed**: Parameter name collisions that caused UI issues with action generation
  - 🔧 **Improved**: File response handling
  - ✨ **New**: JSON parsing helper with consistent error handling across all user inputs
  - 🐛 **Fixed**: MIME type mappings for proper file downloads (PDF, HTML)
  - 🐛 **Fixed**: Resource/operation parameter extraction for proper n8n batch processing
  - 🔧 **Improved**: PDF optimization stats
  - 🛡️ **Security**: Enhanced input validation and error messaging

  ### 0.2.5 & 0.2.6
  - 🧹 **Improved**: Removed debug code
  - 📦 **Optimized**: Improved credentials logic
    
  ### 0.2.3 & 0.2.4
  - 🧹 **Cleanup**: Removed external dependencies

  ### 0.2.2
  - 🧹 **Cleanup**: Removed example nodes and credentials from package
  - 🔧 **Improved**: Build process now only includes production files
  - 📦 **Optimized**: Package structure for better n8n compatibility

  ### 0.2.1
  - 🐛 **Fixed**: Fixed npm publish script in package.json
  - 📝 **Updated**: Package metadata and repository information

  ### 0.2.0
  - ✨ **New**: Added PDF form fields operations
    - Extract Form Fields: Analyze and extract form field metadata
    - Fill Form Fields: Populate PDF forms with data
  - 🐛 **Fixed**: Improved error handling for PDF services operations
  - 📝 **Docs**: Enhanced documentation and examples

  ### 0.1.0
  - 🎉 **Initial Release**: Complete PDF Generator API integration
    - Document generation from templates
    - HTML/URL to PDF conversion
    - PDF processing (watermark, encrypt, decrypt, optimize)
    - Template and workspace management
    - Support for all output formats (Base64, URL, File)
    - Comprehensive error handling and validation 

ai_documentation_summary:
  {"purpose":"Provide PDF generation and processing inside n8n workflows: create PDFs from templates or HTML/URLs, manage templates and workspaces, and perform PDF operations such as watermarking, encryption, optimization, and form-field manipulation.","capabilities":["Generate PDFs from templates (sync, async, batch, batch+async)","Convert HTML to PDF","Convert public URL to PDF","Generate QR codes (base64 or file output, optional logo, color customization)","List, get, and delete generated documents","Create, update, get, delete, list and copy templates","Extract template data fields and retrieve template JSON schema","Open template editor URL and validate template configuration","Add text or image watermarks with positioning","Encrypt and decrypt PDF documents (owner/user passwords)"],"authentication":"API Key and API Secret required (n8n credentials). The node automatically generates short-lived JWT tokens server-side using the provided API Key/Secret.","commonUseCases":["Generate individualized PDFs from templates populated with JSON data (single or batch)","Convert HTML pages or public URLs into downloadable PDFs","Watermark, encrypt, decrypt, or optimize PDFs as part of a document pipeline","Extract or fill PDF form fields for automated form processing","Generate QR codes for embedding in documents or emails"],"limitations":["Files exposed via URL/Viewer are stored for 30 days","URL-to-PDF conversion requires the URL to be publicly accessible","Requires n8n version 0.199.0 or newer","Tokens are short-lived (JWT), which may affect very long-running operations if not using async/batch flows","Subject to API rate limits (specific limits not documented in README)"],"relatedNodes":[]}


node_type: @permitio/n8n-nodes-permitio.permit
package_name: @permitio/n8n-nodes-permitio
display_name: Permit
description: Interact with Permit.io authorization service
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: permit-dev-manager
author_github_url: https://github.com/permitio/n8n-nodes-permitio.git
npm_package_name: @permitio/n8n-nodes-permitio
npm_version: 0.2.3
community_fetched_at: 2026-02-19T14:41:52.388Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "check",
      "options": [
        {
          "name": "Check",
          "value": "check",
          "action": "Check permission",
          "description": "Check if user has permission"
        },
        {
          "name": "Get User Permissions",
          "value": "getUserPermissions",
          "action": "Get user permissions",
          "description": "Get all permissions for a user"
        },
        {
          "name": "Get Authorized Users",
          "value": "getAuthorizedUsers",
          "action": "Get authorized users",
          "description": "Get users authorized for an action"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "string",
      "default": "",
      "required": true,
      "description": "Resource to check access to",
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "operation": [
            "check"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Check",
      "value": "check",
      "action": "Check permission",
      "description": "Check if user has permission"
    },
    {
      "name": "Get User Permissions",
      "value": "getUserPermissions",
      "action": "Get user permissions",
      "description": "Get all permissions for a user"
    },
    {
      "name": "Get Authorized Users",
      "value": "getAuthorizedUsers",
      "action": "Get authorized users",
      "description": "Get users authorized for an action"
    }
  ]

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

  # n8n-nodes-permitio

  An n8n community node for integrating with [Permit.io](https://permit.io) authorization service.
  Permit is a fullstack, plug-and-play application-level authorization solution. This node allows you to check permissions, retrieve user permissions, and get authorized users directly within your n8n workflows.

  ![ABAC Expense Approval System](/assets/permit-n8n-workflow.png)

  ## Features

  - **Check Permissions**: Verify if a user has permission to perform a specific action on a resource
  - **Get User Permissions**: Retrieve all permissions for a specific user across tenants and resources
  - **Get Authorized Users**: Find all users authorized to perform a specific action on a resource type

  ## Installation

  **Install via n8n UI:**

  1. In your n8n workflow editor, click the "+" to add a new node
  2. Search for "Permit" in the node search box
  3. Click on the Permit node in the search results
  4. Click "Install node" button in the Node details panel
  5. Wait for installation to complete
  6. The Permit node will now be available in your workflow

  **Package name:** `@permitio/n8n-nodes-permitio`
  ![Installation Guide](./assets/permit-n8n-installation.gif)

  For alternative installation methods, follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ## Credentials

  To use this node, you need to set up Permit.io API credentials in n8n.

  **Prerequisites:**

  - A [Permit.io account](https://app.permit.io)
  - Your Permit.io API key

  **Setting up credentials:**

  1. In n8n, go to the **Overview** tab in the left sidebar
  2. Click on the **Credentials** tab
  3. Click **"Add first credential"** (or **"Create credential"** if you have existing credentials)
  4. Search for **"Permit"** and select **"Permit API"**
  5. Fill in the required fields:
     - **API Key**: Your Permit.io API key (found in Permit.io dashboard under Settings → API Keys)
     - **PDP URL**: `https://cloudpdp.api.permit.io` (default for cloud PDP)

  **For ABAC and ReBAC policies:**

  - **Local PDP**: If running a self-hosted PDP container, you'll need to expose it publicly (e.g., using ngrok) and use that public URL
  - Example: `https://abc123.ngrok.io` instead of `http://localhost:7766`
  - This provides better performance and supports advanced policy types

  **Getting your API key:**

  1. Log into your [Permit.io dashboard](https://app.permit.io)
  2. Go to Settings → API Keys
  3. Copy your API key and paste it into the n8n credential configuration

  ![Credentials Workflow](./assets/credentials-workflow.gif)

  **Note:** Keep your API key secure and never share it publicly.

  ## Operations

  **Check**

  - Check if a user has permission to perform an action on a resource
  - Supports RBAC, ABAC, and ReBAC policies with automatic attribute extraction
  - Returns boolean permission result with detailed debug information

  _Configuration:_

  - **User:** `{{$node['Webhook'].json.body.employee_email}}`
  - **Action:** `submit`
  - **Resource:** `expense`
  - **Enable ABAC:** ✅ (automatically extracts `expense_amount`, `category`, etc.)

  _Response Sample:_

  ```json
  {
  	"allow": true,
  	"decision": "2024-01-15T10:30:00Z",
  	"debug": {
  		"reason": "User john.employee can submit expense within $2000 limit"
  	}
  }
  ```

  **Get User Permissions**

  - Get all permissions for a specific user
  - Filter by resource types
  - Optional ABAC support for dynamic permissions

  _Configuration:_

  - **User:** `john.employee`
  - **Resource Types:** `expense,document`
  - **Enable ABAC:** ✅

  _Response Sample:_

  ```json
  {
  	"permissions": [
  		{
  			"resource": "expense",
  			"action": "submit",
  			"allowed": true
  		}
  	]
  }
  ```

  **Get Authorized Users**

  - Find all users who can perform a specific action on a resource
  - Useful for approval workflows and delegation
  - Returns list of authorized users with their roles and permissions

  _Configuration:_

  - **Action:** `approve`
  - **Resource Type:** `expense`
  - **Resource Attributes:** `{"expense_amount": 1500, "category": "Travel"}`
  - **Enable ABAC:** ✅

  _Response Sample:_

  ```json
  [
  	{
  		"resource": "expense:*",
  		"tenant": "default",
  		"users": {
  			"taofeek2sure@gmail.com": [
  				{
  					"user": "taofeek2sure@gmail.com",
  					"tenant": "default",
  					"resource": "resourceset_all_5fexpenses",
  					"role": "userset_finance_5fteam"
  				}
  			]
  		}
  	}
  ]
  ```

  ## Basic Usage Example

  ![ABAC Expense Example](/assets/abac-expense-example.png)

  This example shows how to build an ABAC-powered expense approval workflow using the Permit node.

  **Scenario:** Employees submit expenses for approval. The system automatically determines if they can submit based on their spending limits, then routes to authorized approvers.

  **Workflow:**

  1. **Webhook** receives expense submission (`employee_email`, `expense_amount`, `category`)
  2. **Check Permission** with ABAC enabled - automatically extracts expense attributes
  3. **IF node** branches on approval/denial
  4. **TRUE path:** Get Authorized Users → Send Email to approver
  5. **FALSE path:** Return 403 error response

  **Result:**

  - Employee submitting $1500 (within $2000 limit) → Email sent to finance approver
  - Employee submitting $2500 (exceeds limit) → Access denied with detailed error

  This demonstrates how the Permit node enables complex authorization workflows with minimal configuration.

  ## Compatibility

  - **Minimum n8n version**: 1.0+
  - **Node.js**: 20.15+ required
  - **Tested with**: n8n 1.111.0

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Permit.io Documentation](https://docs.permit.io/)
  - [Permit.io API Reference](https://api.permit.io/v2/redoc)
  - [Getting Started with Permit.io](https://docs.permit.io/quickstart/)

  **Authorization Models:**

  - [ABAC Guide - Building Your First ABAC Policy](https://docs.permit.io/how-to/build-policies/abac/building-abac-policy/)
  - [ReBAC Guide - What is ReBAC?](https://docs.permit.io/how-to/build-policies/rebac/overview/)
  - [Create a ReBAC Policy](https://docs.permit.io/overview/create-a-rebac-policy/)

  **Infrastructure & Deployment:**

  - [Terraform Provider Guide](https://docs.permit.io/integrations/infra-as-code/terraform-provider/)
  - [Self-Deployed PDP for ABAC/ReBAC](https://docs.permit.io/concepts/pdp/overview/)
  - [Running Local PDP Container](https://docs.permit.io/overview/connecting-your-app/)

  **API Methods:**

  - [Permit.check() - Permission Checking](https://docs.permit.io/how-to/enforce-permissions/check/)
  - [Get User Permissions API](https://docs.permit.io/how-to/enforce-permissions/user-permissions/)
  - [Get Authorized Users API](https://docs.permit.io/how-to/enforce-permissions/authorized-users/)

  ## License

  [MIT](LICENSE.md)

  ## Contributing

  Contributions are welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository.

  ---

  Built with ❤️ for the n8n community

ai_documentation_summary:
  {"purpose":"Connect n8n workflows to Permit.io to evaluate authorization decisions, retrieve user permissions, and discover authorized users for building RBAC/ABAC/ReBAC-enabled workflows.","capabilities":["Check Permissions: verify whether a user can perform an action on a resource (returns boolean + debug details)","Supports RBAC, ABAC, and ReBAC policies with automatic attribute extraction for ABAC","Get User Permissions: retrieve all permissions for a user, filterable by resource types","Get Authorized Users: find users authorized to perform a specific action on a resource type (supports resource attributes for ABAC)","Configure PDP endpoint (cloud default or custom/self-hosted PDP URL)"],"authentication":"API key required (Permit.io API key). Configure Permit API credentials in n8n and provide PDP URL (default cloud PDP: https://cloudpdp.api.permit.io or custom/self-hosted URL).","commonUseCases":["Authorize actions in workflows (allow/deny checks before performing operations)","ABAC-powered approval workflows (e.g., expense approval routing based on attributes like amount/category)","Retrieve a user's permissions for UI display or audit logging","Find approvers/authorized users for delegation and notification (e.g., send email to approvers)"],"limitations":["Requires a Permit.io account and valid API key to operate","For self-hosted/local PDP (advanced ABAC/ReBAC), the PDP must be publicly reachable from n8n (e.g., via ngrok) to function correctly","Node requires n8n >= 1.0 and Node.js 20.15+ (tested with n8n 1.111.0)"],"relatedNodes":["Webhook","IF","Email (or other notification nodes)"]}


node_type: @mookielianhd/n8n-nodes-instagram.instagram
package_name: @mookielianhd/n8n-nodes-instagram
display_name: Instagram
description: Publish media to Instagram using Facebook Graph API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: mookielian
author_github_url: https://github.com/MookieLian/n8n-nodes-instagram.git
npm_package_name: @mookielianhd/n8n-nodes-instagram
npm_version: 2.5.3
community_fetched_at: 2026-02-19T14:41:52.388Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Auth",
          "value": "auth",
          "description": "Exchange and refresh Instagram access tokens; call /me"
        },
        {
          "name": "Carousel",
          "value": "carousel",
          "description": "Publish a carousel (album) post with up to 10 images or videos"
        },
        {
          "name": "Comment",
          "value": "comments",
          "description": "Moderate comments on Instagram media"
        },
        {
          "name": "IG Hashtag",
          "value": "igHashtag",
          "description": "Search hashtags and fetch top or recent media for a hashtag"
        },
        {
          "name": "IG User",
          "value": "igUser",
          "description": "Read profile and media for an Instagram Business or Creator account"
        },
        {
          "name": "Image",
          "value": "image",
          "description": "Publish image posts to Instagram"
        },
        {
          "name": "Messaging",
          "value": "messaging",
          "description": "Send direct messages via the Instagram Messaging API"
        },
        {
          "name": "Page",
          "value": "page",
          "description": "Work with the connected Facebook Page and its Instagram account"
        },
        {
          "name": "Reel",
          "value": "reels",
          "description": "Publish Reels videos to Instagram"
        },
        {
          "name": "Story",
          "value": "stories",
          "description": "Publish story videos to Instagram"
        }
      ],
      "required": true,
      "description": "Select what you want to do with the Instagram API",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish",
          "description": "Publish the selected media type (image, reel, or story) to Instagram"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image",
            "reels",
            "stories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInstagramAccount",
      "options": [
        {
          "name": "Get Instagram Account",
          "value": "getInstagramAccount",
          "action": "Get instagram account",
          "description": "Get the Instagram business/creator account connected to a Facebook Page"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish",
          "description": "Publish a carousel (album) post with up to 10 images or videos"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "carousel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "deleteComment",
          "action": "Delete a comment",
          "description": "Delete a comment from an Instagram media object"
        },
        {
          "name": "Disable Comments",
          "value": "disableComments",
          "action": "Disable comments on media",
          "description": "Disable comments on an Instagram media object"
        },
        {
          "name": "Enable Comments",
          "value": "enableComments",
          "action": "Enable comments on media",
          "description": "Enable comments on an Instagram media object"
        },
        {
          "name": "Hide",
          "value": "hideComment",
          "action": "Hide a comment",
          "description": "Hide a comment from an Instagram media object"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List comments",
          "description": "List comments on an Instagram media object"
        },
        {
          "name": "Send Private Reply",
          "value": "sendPrivateReply",
          "action": "Send a private reply",
          "description": "Send a private reply message to a commenter using the comment ID"
        },
        {
          "name": "Unhide",
          "value": "unhideComment",
          "action": "Unhide a comment",
          "description": "Unhide a previously hidden comment"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get IG user",
          "description": "Get basic profile information for an Instagram Business or Creator account"
        },
        {
          "name": "Get Media",
          "value": "getMedia",
          "action": "Get media",
          "description": "List media objects owned by an Instagram Business or Creator account"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "igUser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "refreshAccessToken",
      "options": [
        {
          "name": "Exchange Access Token",
          "value": "exchangeAccessToken",
          "action": "Exchange short lived token",
          "description": "Exchange a short-lived Instagram User access token for a long-lived token using the Instagram Platform access token endpoint"
        },
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get me profile",
          "description": "Call the Graph API /me endpoint using the access token from the Instagram API credential"
        },
        {
          "name": "Refresh Access Token",
          "value": "refreshAccessToken",
          "action": "Refresh access token",
          "description": "Refresh a long-lived Instagram User access token using the Instagram Platform refresh endpoint"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auth"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search hashtags",
          "description": "Search for a hashtag by name and return its ID"
        },
        {
          "name": "Get Recent Media",
          "value": "getRecentMedia",
          "action": "Get recent media for hashtag",
          "description": "Get the most recent media tagged with a hashtag"
        },
        {
          "name": "Get Top Media",
          "value": "getTopMedia",
          "action": "Get top media for hashtag",
          "description": "Get the most popular media tagged with a hashtag"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "igHashtag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send direct message",
          "description": "Send a text message to an Instagram user via the Messaging API"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "messaging"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish",
      "description": "Publish the selected media type (image, reel, or story) to Instagram"
    },
    {
      "name": "Get Instagram Account",
      "value": "getInstagramAccount",
      "action": "Get instagram account",
      "description": "Get the Instagram business/creator account connected to a Facebook Page"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish",
      "description": "Publish a carousel (album) post with up to 10 images or videos"
    },
    {
      "name": "Delete",
      "value": "deleteComment",
      "action": "Delete a comment",
      "description": "Delete a comment from an Instagram media object"
    },
    {
      "name": "Disable Comments",
      "value": "disableComments",
      "action": "Disable comments on media",
      "description": "Disable comments on an Instagram media object"
    },
    {
      "name": "Enable Comments",
      "value": "enableComments",
      "action": "Enable comments on media",
      "description": "Enable comments on an Instagram media object"
    },
    {
      "name": "Hide",
      "value": "hideComment",
      "action": "Hide a comment",
      "description": "Hide a comment from an Instagram media object"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List comments",
      "description": "List comments on an Instagram media object"
    },
    {
      "name": "Send Private Reply",
      "value": "sendPrivateReply",
      "action": "Send a private reply",
      "description": "Send a private reply message to a commenter using the comment ID"
    },
    {
      "name": "Unhide",
      "value": "unhideComment",
      "action": "Unhide a comment",
      "description": "Unhide a previously hidden comment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get IG user",
      "description": "Get basic profile information for an Instagram Business or Creator account"
    },
    {
      "name": "Get Media",
      "value": "getMedia",
      "action": "Get media",
      "description": "List media objects owned by an Instagram Business or Creator account"
    },
    {
      "name": "Exchange Access Token",
      "value": "exchangeAccessToken",
      "action": "Exchange short lived token",
      "description": "Exchange a short-lived Instagram User access token for a long-lived token using the Instagram Platform access token endpoint"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get me profile",
      "description": "Call the Graph API /me endpoint using the access token from the Instagram API credential"
    },
    {
      "name": "Refresh Access Token",
      "value": "refreshAccessToken",
      "action": "Refresh access token",
      "description": "Refresh a long-lived Instagram User access token using the Instagram Platform refresh endpoint"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search hashtags",
      "description": "Search for a hashtag by name and return its ID"
    },
    {
      "name": "Get Recent Media",
      "value": "getRecentMedia",
      "action": "Get recent media for hashtag",
      "description": "Get the most recent media tagged with a hashtag"
    },
    {
      "name": "Get Top Media",
      "value": "getTopMedia",
      "action": "Get top media for hashtag",
      "description": "Get the most popular media tagged with a hashtag"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send direct message",
      "description": "Send a text message to an Instagram user via the Messaging API"
    }
  ]

npm_readme:
  # @mookielianhd/n8n-nodes-instagram

  This package adds an Instagram node to n8n so you can publish media to your Instagram Business accounts, moderate comments, and send private replies — all from within your workflows.

  Instagram features are powered by the Facebook/Instagram Graph API and allow programmatic upload of images, reels and stories, plus comment moderation and private replies, for any Instagram Business or Creator account.

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

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

  ## Installation

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

  ## Operations

  The node exposes several resources:

  | Resource | Description |
  | --- | --- |
  | `Image` | Publish a single image with an optional caption. Uses the two-step container → publish flow. Supports alt text, location, user tags, and product tags. |
  | `Reels` | Publish a reel video. Handles container polling until the video is processed before publishing. Supports product tags and **Trial Reels** via `trial_params`. |
  | `Stories` | Publish a story video using the same logic as reels with `media_type=STORIES`. |
  | `Carousel` | Publish a carousel (album) post with up to 10 images and/or videos. The node creates child containers, builds a carousel container, waits for it to be ready, then publishes it. Includes detailed per-item error reporting and progress messages. |
  | `Comments` | List comments on media, hide/unhide or delete individual comments, disable/enable comments on media, and send **private replies** to commenters. |
  | `IG User` | Read basic profile data for an Instagram Business/Creator account and list its media using the IG User Graph API. |
  | `IG Hashtag` | Search for hashtags by name and fetch top or recent media for a hashtag with paging and limit/return-all support. |
  | `Messaging` | Send direct messages (DMs) to Instagram users via the Instagram Messaging API. |
  | `Page` | Given a Facebook Page ID, fetch the connected Instagram Business/Creator account (`instagram_business_account`). |
  | `Auth` | Exchange short-lived Instagram User tokens for long-lived tokens, refresh long-lived tokens, and call the Graph API `/me` endpoint. |

  ## Credentials

  Create an **Instagram API** credential that stores a long-lived Facebook Graph API user access token with at least:

  * `instagram_basic`
  * `pages_show_list`
  * `instagram_content_publish`
  * `pages_read_engagement`
  * `instagram_manage_comments` (or `instagram_business_manage_comments` if using Instagram Login)
  Steps:

  1. Make sure the Instagram account is a Business/Creator account connected to a Facebook Page.  
  2. Use Meta’s Graph Explorer or your own app to generate an access token that includes the scopes listed above.  
  3. Convert it to a long-lived token and paste it into the credential’s **Access Token** field.  
  4. The built-in credential test hits `https://graph.facebook.com/v22.0/me` to confirm the token works.

  ## Compatibility

  - Built and tested against **n8n 2.6.x–2.8.x**.  
  - Declares a peer dependency on **`n8n-workflow >=2.6.1`** (the first secure stream-enabled version suggested by Snyk).  
  - Requires n8n with community nodes enabled (recommended `>=2.x`).  
  - Uses only built-in n8n dependencies, so it is Cloud-compatible.

  ## Usage

  ### Publishing media (Image / Reels / Stories)

  1. Add the **Instagram** node to your workflow and select one of the resources (`Image` / `Reels` / `Stories`).  
  2. Provide the Instagram Business Account ID (the `Node` parameter), media URL and caption.  
  3. The node first creates the media container, polls Graph API until processing completes, then triggers `media_publish`.  
  4. For long-running uploads (large videos), the node uses robust polling and retry logic and surfaces progress via the n8n execution logs (for example, when publishing Reels or Trial Reels).  
  5. Handle any errors returned by the API (rate limits, permissions, validation) via the node’s error output or `Continue On Fail`.

  ### Publishing carousel posts (Carousel)

  1. Add the **Instagram** node and set **Resource** to `Carousel`, **Operation** to `Publish`.  
  2. Provide:
     - `Node` – the IG User ID to publish from.  
     - `Graph API Version` – for example `v24.0`.  
     - `Caption` – the carousel caption.  
     - `Carousel Media` – 2–10 items, each with:
       - `Media Type` – `Image` or `Video`.  
       - `Image URL` or `Video URL` – public URLs Meta can fetch.  
  3. The node:
     - Creates one child container per image/video (`is_carousel_item=true` for each).  
     - Waits for each child container to become ready.  
     - Creates a carousel container (`media_type=CAROUSEL`, `children=<child_ids>`) with the caption.  
     - Waits for the carousel container to be ready, then calls `/{ig-user-id}/media_publish`.  
  4. Errors during any step are annotated with **which child item failed** (for example, “Carousel item 3 (video)…”), making it easier to debug problematic URLs.

  ### Comment moderation and private replies (Comments)

  1. Add the **Instagram** node and set **Resource** to `Comments`.  
  2. Choose an **Operation**:
     - `List` – fetch comments for a given media ID.  
     - `Hide` / `Unhide` / `Delete` – moderate a specific comment by its comment ID.  
     - `Disable Comments` / `Enable Comments` – toggle comments on a media object by its media ID.  
     - `Send Private Reply` – send a private reply message to a commenter using their comment ID.  
  3. Provide the required IDs:
     - `Media ID` for listing comments or enabling/disabling comments.  
     - `Comment ID` for hide/unhide/delete/private reply operations.  
  4. For **Send Private Reply**, also fill in:
     - `Node` – the Instagram professional account ID that owns the commented media.  
     - `Message` – the private reply text that will be sent to the commenter’s inbox/request folder (subject to the 7‑day and messaging window rules defined by Meta).  

  ### Reading IG User profile and media (IG User)

  1. Add the **Instagram** node and set **Resource** to `IG User`.  
  2. Choose an **Operation**:
     - `Get` – fetch basic profile information for an Instagram Business/Creator account (username, name, bio, website, media_count, followers/follows, profile picture URL).  
     - `Get Media` – list media owned by that account, including media type, URLs, caption, permalink, timestamp and username.  
  3. Provide:
     - `Node` – the IG User ID of the professional account you want to read (or `me` if your credential token belongs to that account).  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  

  ### Searching hashtags and fetching hashtag media (IG Hashtag)

  1. Add the **Instagram** node and set **Resource** to `IG Hashtag`.  
  2. Choose an **Operation**:
     - `Search` – look up a hashtag by name and get its global hashtag ID.  
     - `Get Recent Media` – get the most recently published media tagged with a hashtag.  
     - `Get Top Media` – get the most popular media tagged with a hashtag.  
  3. For **Search**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag Name` – the hashtag name, without `#`.  
  4. For **Get Recent Media** / **Get Top Media**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag ID` – the ID returned from the search operation.  
     - `Return All` / `Limit` – choose whether to fetch all available media (within a safety cap) or only up to a limit.  

  ### Sending direct messages (Messaging)

  1. Add the **Instagram** node and set **Resource** to `Messaging`.  
  2. Choose **Operation** `Send Message`.  
  3. Provide:
     - `Node` – the IG professional account ID that will send the message.  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  
     - `Recipient IG User ID` – the Instagram-scoped user ID (IGSID) of the recipient, typically obtained from Messaging webhook events.  
     - `Message Text` – the text body of the direct message.  

  ### Token exchange, refresh and `/me` (Auth)

  1. Add the **Instagram** node and set **Resource** to `Auth`.  
  2. Choose an **Operation**:
     - `Exchange Access Token` – exchange a **short-lived** Instagram User access token for a **long-lived** token.  
     - `Refresh Access Token` – refresh an existing long-lived token using the Instagram Platform refresh endpoint.  
     - `Get Me` – call the Graph API `/me` endpoint using the `instagramApi` credential’s access token.  
  3. For **Exchange Access Token**, provide:
     - `Short-Lived Access Token` – the short-lived token from your login flow.  
     - `App Secret` – the Instagram App Secret from your Meta App Dashboard.  
  4. For **Refresh Access Token**, optionally provide:
     - `Access Token` – the long-lived token to refresh. Leave empty to use the token from the credential.  
  5. For **Get Me**, the node uses a fixed, versioned `/me` URL under the hood and does **not** depend on any UI parameters, so older workflows remain compatible.

  ### Getting the Instagram account for a Facebook Page (Page)

  1. Add the **Instagram** node and set **Resource** to `Page`, **Operation** to `Get Instagram Account`.  
  2. Provide:
     - `Graph API Version` – for example `v24.0`.  
     - `Page ID` – the Facebook Page ID that is linked to your Instagram professional account.  
  3. The node calls:
     - `GET /{page-id}?fields=instagram_business_account`
     and returns the `instagram_business_account` object (including the Instagram User ID) so you can feed it into other resources (Image/Reels/Stories/Carousel/IG User).

  ### Trial Reels (Reels with `trial_params`)

  1. Add the **Instagram** node and set **Resource** to `Reels`, **Operation** to `Publish`.  
  2. Under **Additional Fields**, set **Trial Reel – Graduation Strategy**:
     - `MANUAL` – you will decide in the Instagram app when (or if) to graduate the trial reel.  
     - `SS_PERFORMANCE` – Instagram will automatically graduate the trial reel if it performs well.  
  3. The node sends a `trial_params` JSON object in the create-container request, as documented in the IG User Media reference.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)  
  * [Instagram Graph API - Publishing](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media)  
  * [Video/Reels publishing guide](https://developers.facebook.com/docs/instagram-api/guides/content-publishing/reels/)  
  * [Comment Moderation](https://developers.facebook.com/docs/instagram-platform/comment-moderation)  
  * [Private Replies](https://developers.facebook.com/docs/instagram-platform/private-replies)  
  * [IG User](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user)  
  * [IG Hashtag Search](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag-search/)  
  * [IG Hashtag Recent Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/recent-media/)  
  * [IG Hashtag Top Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/top-media/)  
  * [Instagram Messaging API](https://developers.facebook.com/docs/messenger-platform/instagram/features/)  
  * [Instagram Platform Access Token](https://developers.facebook.com/docs/instagram-platform/reference/access_token/)  
  * [Instagram Platform Refresh Access Token](https://developers.facebook.com/docs/instagram-platform/reference/refresh_access_token/)  
  * [Instagram Platform /me](https://developers.facebook.com/docs/instagram-platform/reference/me/)

  ## Version history

  | Version | Notes |
  | --- | --- |
  | 2.5.1 | Adds Carousel publishing (up to 10 images/videos with per-item error reporting and progress logs), Trial Reels support (`trial_params`), the `Page` resource with **Get Instagram Account** (Page → `instagram_business_account`), streaming-style progress messages for long-running carousel publishes, and multiple small robustness fixes around `/me` and authentication. |
  | 2.4.0 | Adds `IG Hashtag` (search, recent media, top media), `Messaging` (send DMs), and `Auth` helpers for token exchange/refresh and `/me`. |
  | 2.3.0 | Adds `Comments` resource with comment moderation (list/hide/unhide/delete, enable/disable comments) and **Private Replies** support, and an `IG User` resource for reading profile data and listing media. |
  | 2.2.0 | Improved publishing UX, adds alt text, location ID, user tags, and product tags support for media publishing. |
  | 2.1.0 | Stable release of Instagram publishing (Image/Reels/Stories) using the container → publish flow with robust polling and error handling. |
  | 0.1.0 | Initial release with Image, Reels and Stories publishing & built-in container polling. |

ai_documentation_summary:
  {"purpose":"Publish and manage Instagram Business/Creator content and interactions via the Facebook/Instagram Graph API from n8n workflows — including publishing media (images, reels, stories, carousels), moderating comments, sending private replies and DMs, and basic IG user/hashtag operations.","capabilities":["Publish single images with caption, alt text, location, user tags, and product tags (two-step container → publish flow)","Publish reels (video) with container polling until processing completes; supports product tags and Trial Reels via trial_params","Publish stories (video) using the same processing/publish flow as reels (media_type=STORIES)","Publish carousel (album) posts with 2–10 images/videos: create child containers, build carousel container, wait for readiness, then publish; per-item error reporting and progress messages","List, hide/unhide, and delete individual comments","Disable/enable comments on a media item","Send private replies to commenters","Send direct messages (DMs) via the Instagram Messaging API","Read IG User basic profile data and list an account's media via the IG User Graph API","Search hashtags by name and fetch top or recent media for a hashtag with paging and limit/return-all support"],"authentication":"API token required — a long-lived Facebook Graph API user access token stored in an 'Instagram API' credential. Token must include scopes: instagram_basic, pages_show_list, instagram_content_publish, pages_read_engagement, instagram_manage_comments (or instagram_business_manage_comments). The credential test calls /me to validate.","commonUseCases":["Automate publishing of images, reels, stories or carousel posts to Instagram Business/Creator accounts from other systems","Moderate comments on media programmatically (list, hide/unhide, delete) and send private replies to commenters","Send direct messages to Instagram users from workflows","Fetch IG user profile and media lists for reporting or sync","Search hashtags and retrieve top/recent media for content curation or monitoring"],"limitations":["Only supports Instagram Business or Creator accounts connected to a Facebook Page (not personal accounts)","Requires a long-lived Facebook Graph API user access token with specific scopes; missing scopes will prevent operations","Media URLs must be publicly accessible for Meta to fetch (for image/video uploads)","Carousel posts limited to 2–10 items","Subject to Facebook/Instagram Graph API constraints (rate limits, permissions, validation errors); large video processing can be long-running"],"relatedNodes":[]}


node_type: n8n-nodes-lavatop.lavatop
package_name: n8n-nodes-lavatop
display_name: LavaTop
description: Sends data to LavaTop
category: Payments
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: zdadco
author_github_url: https://github.com/zdadco/
npm_package_name: n8n-nodes-lavatop
npm_version: 1.0.2
community_fetched_at: 2026-02-19T14:41:52.389Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "product",
      "options": [
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Report",
          "value": "report"
        },
        {
          "name": "Subscription",
          "value": "subscription"
        },
        {
          "name": "Donate",
          "value": "donate"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Products",
          "value": "getAll",
          "action": "Get products",
          "description": "Get all products"
        },
        {
          "name": "Update Product",
          "value": "update",
          "action": "Update product",
          "description": "Update product by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get invoices",
          "description": "Get all invoices"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get invoice",
          "description": "Get invoice by ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create invoice",
          "description": "Create invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllSales",
      "options": [
        {
          "name": "Get All Sales",
          "value": "getAllSales",
          "action": "Get sales"
        },
        {
          "name": "Get Sales by Product",
          "value": "getAllSalesByProduct",
          "action": "Get sales by product",
          "description": "Get sales by product ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "delete",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a subscription",
          "description": "Delete a subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subscription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a donation link",
          "description": "Get link for donation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "donate"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Products",
      "value": "getAll",
      "action": "Get products",
      "description": "Get all products"
    },
    {
      "name": "Update Product",
      "value": "update",
      "action": "Update product",
      "description": "Update product by ID"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get invoices",
      "description": "Get all invoices"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get invoice",
      "description": "Get invoice by ID"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create invoice",
      "description": "Create invoice"
    },
    {
      "name": "Get All Sales",
      "value": "getAllSales",
      "action": "Get sales"
    },
    {
      "name": "Get Sales by Product",
      "value": "getAllSalesByProduct",
      "action": "Get sales by product",
      "description": "Get sales by product ID"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a subscription",
      "description": "Delete a subscription"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a donation link",
      "description": "Get link for donation"
    }
  ]

npm_readme:
  [![npm](https://img.shields.io/npm/dm/n8n-nodes-lavatop?color=blue&label=downloads)](https://www.npmjs.com/package/n8n-nodes-lavatop)
  [![npm version](https://img.shields.io/npm/v/n8n-nodes-lavatop)](https://www.npmjs.com/package/n8n-nodes-lavatop)
  [![license](https://img.shields.io/npm/l/n8n-nodes-lavatop)](https://github.com/zdadco/n8n-nodes-lavatop/blob/main/LICENSE)
  [![GitHub stars](https://img.shields.io/github/stars/zdadco/n8n-nodes-lavatop)](https://github.com/zdadco/n8n-nodes-lavatop/stargazers)

  # n8n-nodes-lavatop

  This is a n8n community node that provides integration with LavaTop platform for digital product sales and subscriptions.

  [LavaTop](https://app.lava.top/) is a platform for creators to sell digital products, courses, and subscriptions with built-in payment processing and analytics.

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


  ## Installation

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

  ## Operations

  ### Invoice Operations
  - **Create Invoice:** Generate new payment invoices
  - **Get Invoice:** Retrieve invoice details by ID 
  - **Get All Invoices:** List all invoices with filtering options

  ### Product Operations
  - **Get Products:** List available products
  - **Update Product:** Modify product details and pricing

  ### Report Operations
  - **Get All Sales:** Retrieve complete sales reports
  - **Get Sales by Product:** Get sales data for specific products

  ### Subscription Operations
  - **Delete Subscription:** Cancel existing subscriptions

  ### Donate Operations
  - **Get Donate Link:** Generate donation links for creators

  ## Credentials

  To use this node, you need to configure API credentials:
  1. Go to your LavaTop Account Settings 
  2. Generate a new API key 
  3. In n8n:
     1. Add LavaTop credentials 
     2. Enter your API key

  ## Compatibility

  n8n version - 1.86.1

  ## Resources

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

  ## Version history

  ### 1.0.0
  - Basic operations for invoices, products, and subscriptions
  - Support for all LavaTop payment methods

  ### 1.0.2
  - Refactoring logs
  - Change credentials 'apiKey' display name

ai_documentation_summary:
  {"purpose":"Integrates n8n with the LavaTop platform to manage digital product sales, invoices, subscriptions and donation links from workflows.","capabilities":["Create Invoice","Get Invoice by ID","Get All Invoices (with filtering options)","Get Products (list available products)","Update Product (modify details and pricing)","Get All Sales (sales reports)","Get Sales by Product","Delete/Cancel Subscription","Get Donate Link (generate donation links for creators)","Support for all LavaTop payment methods"],"authentication":"API key required","commonUseCases":["Automatically generate and send invoices for purchases","Sync LavaTop sales and revenue data to analytics, databases, or reporting tools","Programmatically update product details and pricing","Cancel subscriptions as part of customer or billing workflows","Create donation links for creators and include them in communications"],"limitations":["Node provides basic operations (invoices, products, subscriptions) per v1.0.0 — advanced LavaTop features may be missing","Requires n8n version 1.86.1 (compatibility noted)","No webhook/trigger-based LavaTop event nodes are documented in the README"],"relatedNodes":[]}


node_type: n8n-nodes-dumplingai.dumplingAi
package_name: n8n-nodes-dumplingai
display_name: Dumpling AI
description: Interact with Dumpling AI APIs (data, web scraping, document conversion, AI, etc.)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-02-19 14:41:52
author_name: dumplingai
author_github_url: https://github.com/dumplingai/
npm_package_name: n8n-nodes-dumplingai
npm_version: 0.1.1
community_fetched_at: 2026-02-19T14:41:52.390Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "dataApi",
      "options": [
        {
          "name": "Data API",
          "value": "dataApi"
        },
        {
          "name": "Web Scraping",
          "value": "webScraping"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getYouTubeTranscript",
      "options": [
        {
          "name": "Get Google Reviews",
          "value": "getGoogleReviews",
          "action": "Get Google Reviews",
          "routing": {
            "request": {
              "url": "/get-google-reviews",
              "body": {
                "cid": "={{ $parameter.inputType === \"cid\" ? $parameter.cid : undefined }}",
                "sortBy": "={{ $parameter.sortBy }}",
                "keyword": "={{ $parameter.inputType === \"keyword\" ? $parameter.keyword : undefined }}",
                "placeId": "={{ $parameter.inputType === \"placeId\" ? $parameter.placeId : undefined }}",
                "reviews": "={{ $parameter.reviews }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Get Google Reviews for a place or business"
        },
        {
          "name": "Get TikTok Transcript",
          "value": "getTikTokTranscript",
          "action": "Get TikTok Transcript",
          "routing": {
            "request": {
              "url": "/get-tiktok-transcript",
              "body": {
                "videoUrl": "={{ $parameter.videoUrl }}",
                "preferredLanguage": "={{ $parameter.preferredLanguage }}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve the transcript from a TikTok video"
        },
        {
          "name": "Get YouTube Transcript",
          "value": "getYouTubeTranscript",
          "action": "Get YouTube Transcript",
          "routing": {
            "request": {
              "url": "/get-youtube-transcript",
              "body": {
                "videoUrl": "={{ $parameter.videoUrl }}",
                "includeTimestamps": "={{ $parameter.includeTimestamps }}",
                "preferredLanguage": "={{ $parameter.preferredLanguage }}",
                "timestampsToCombine": "={{ $parameter.timestampsToCombine }}"
              },
              "method": "POST"
            }
          },
          "description": "Extract the transcript from a specified YouTube video URL"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search Google",
          "routing": {
            "request": {
              "url": "/search",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}",
                "dateRange": "={{ $parameter.dateRange }}",
                "scrapeOptions": {
                  "format": "={{ $parameter.scrapeFormat }}",
                  "cleaned": "={{ $parameter.scrapeCleaned }}"
                },
                "scrapeResults": "={{ $parameter.scrapeResults }}",
                "numResultsToScrape": "={{ $parameter.numResultsToScrape }}"
              },
              "method": "POST"
            }
          },
          "description": "Perform a Google web search with optional content scraping"
        },
        {
          "name": "Search News",
          "value": "searchNews",
          "action": "Search News",
          "routing": {
            "request": {
              "url": "/search-news",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}",
                "dateRange": "={{ $parameter.dateRange }}"
              },
              "method": "POST"
            }
          },
          "description": "Search Google News for articles"
        },
        {
          "name": "Search Places",
          "value": "searchPlaces",
          "action": "Search Places",
          "routing": {
            "request": {
              "url": "/search-places",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}"
              },
              "method": "POST"
            }
          },
          "description": "Search Google Places for businesses and locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeUrl",
      "options": [
        {
          "name": "Scrape URL",
          "value": "scrapeUrl",
          "action": "Scrape URL",
          "routing": {
            "request": {
              "url": "/scrape",
              "body": {
                "url": "={{ $parameter.url }}",
                "format": "={{ $parameter.format }}",
                "cleaned": "={{ $parameter.cleaned }}",
                "renderJs": "={{ $parameter.renderJs }}"
              },
              "method": "POST"
            }
          },
          "description": "Scrape data from a specified URL with formatting options"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webScraping"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Google Reviews",
      "value": "getGoogleReviews",
      "action": "Get Google Reviews",
      "routing": {
        "request": {
          "url": "/get-google-reviews",
          "body": {
            "cid": "={{ $parameter.inputType === \"cid\" ? $parameter.cid : undefined }}",
            "sortBy": "={{ $parameter.sortBy }}",
            "keyword": "={{ $parameter.inputType === \"keyword\" ? $parameter.keyword : undefined }}",
            "placeId": "={{ $parameter.inputType === \"placeId\" ? $parameter.placeId : undefined }}",
            "reviews": "={{ $parameter.reviews }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Get Google Reviews for a place or business"
    },
    {
      "name": "Get TikTok Transcript",
      "value": "getTikTokTranscript",
      "action": "Get TikTok Transcript",
      "routing": {
        "request": {
          "url": "/get-tiktok-transcript",
          "body": {
            "videoUrl": "={{ $parameter.videoUrl }}",
            "preferredLanguage": "={{ $parameter.preferredLanguage }}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve the transcript from a TikTok video"
    },
    {
      "name": "Get YouTube Transcript",
      "value": "getYouTubeTranscript",
      "action": "Get YouTube Transcript",
      "routing": {
        "request": {
          "url": "/get-youtube-transcript",
          "body": {
            "videoUrl": "={{ $parameter.videoUrl }}",
            "includeTimestamps": "={{ $parameter.includeTimestamps }}",
            "preferredLanguage": "={{ $parameter.preferredLanguage }}",
            "timestampsToCombine": "={{ $parameter.timestampsToCombine }}"
          },
          "method": "POST"
        }
      },
      "description": "Extract the transcript from a specified YouTube video URL"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search Google",
      "routing": {
        "request": {
          "url": "/search",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}",
            "dateRange": "={{ $parameter.dateRange }}",
            "scrapeOptions": {
              "format": "={{ $parameter.scrapeFormat }}",
              "cleaned": "={{ $parameter.scrapeCleaned }}"
            },
            "scrapeResults": "={{ $parameter.scrapeResults }}",
            "numResultsToScrape": "={{ $parameter.numResultsToScrape }}"
          },
          "method": "POST"
        }
      },
      "description": "Perform a Google web search with optional content scraping"
    },
    {
      "name": "Search News",
      "value": "searchNews",
      "action": "Search News",
      "routing": {
        "request": {
          "url": "/search-news",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}",
            "dateRange": "={{ $parameter.dateRange }}"
          },
          "method": "POST"
        }
      },
      "description": "Search Google News for articles"
    },
    {
      "name": "Search Places",
      "value": "searchPlaces",
      "action": "Search Places",
      "routing": {
        "request": {
          "url": "/search-places",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}"
          },
          "method": "POST"
        }
      },
      "description": "Search Google Places for businesses and locations"
    },
    {
      "name": "Scrape URL",
      "value": "scrapeUrl",
      "action": "Scrape URL",
      "routing": {
        "request": {
          "url": "/scrape",
          "body": {
            "url": "={{ $parameter.url }}",
            "format": "={{ $parameter.format }}",
            "cleaned": "={{ $parameter.cleaned }}",
            "renderJs": "={{ $parameter.renderJs }}"
          },
          "method": "POST"
        }
      },
      "description": "Scrape data from a specified URL with formatting options"
    }
  ]

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

  # n8n-nodes-dumplingai

  This is an n8n community node that provides integration with [Dumpling AI](https://dumplingai.com) APIs for data extraction, web scraping, document conversion, and AI-powered operations.

  [Dumpling AI](https://dumplingai.com) is a comprehensive API platform that provides various data extraction and AI services including YouTube transcript extraction, TikTok data scraping, web scraping, document conversion, and more.

  ## Installation

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

  ## Credentials

  You must have a Dumpling AI API key to use this node. You can register for a free account to get an API key here:

  https://app.dumplingai.com/register

  Once registered, you can find your API key here:

  https://app.dumplingai.com/api-keys

  Then you'll need to create a credential in n8n for Dumpling AI.

  ## Usage

  Add Dumpling AI to a workflow and configure your operation.

  ### Available Operations

  This node currently supports:

  #### Data API Operations
  - **Get YouTube Transcript** - Extract transcripts from YouTube videos with timestamps and language options
  - **Get TikTok Transcript** - Extract transcripts/captions from TikTok videos
  - **Search (Google Web)** - Perform Google web searches with optional content scraping
  - **Search Places** - Search Google Places for businesses and locations
  - **Search News** - Search Google News for articles
  - **Get Google Reviews** - Extract Google Reviews for businesses using keywords, CID, or Place ID

  #### Web Scraping Operations
  - **Scrape URL** - Extract content from web pages with formatting options

  Additional operations will be added in future releases.

  #### Get YouTube Transcript

  Extract transcripts from YouTube videos with optional timestamps and language preferences.

  ```json
  {
    "videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "includeTimestamps": true,
    "timestampsToCombine": 5,
    "preferredLanguage": "en"
  }
  ```

  #### Get TikTok Transcript

  Extract transcripts/captions from TikTok videos with language preferences.

  ```json
  {
    "videoUrl": "https://www.tiktok.com/@username/video/1234567890",
    "preferredLanguage": "en"
  }
  ```

  #### Search (Google Web)

  Perform Google web searches with optional content scraping of results.

  ```json
  {
    "query": "artificial intelligence trends 2024",
    "country": "US",
    "language": "en",
    "scrapeResults": true,
    "numResultsToScrape": 3,
    "scrapeFormat": "markdown"
  }
  ```

  #### Search Places

  Search Google Places for businesses and locations.

  ```json
  {
    "query": "coffee shops near me",
    "location": "New York, NY",
    "language": "en"
  }
  ```

  #### Search News

  Search Google News for articles and news content.

  ```json
  {
    "query": "climate change",
    "dateRange": "past_week",
    "language": "en"
  }
  ```

  #### Get Google Reviews

  Extract Google Reviews for businesses using different identification methods.

  ```json
  {
    "inputType": "keyword",
    "keyword": "Starbucks Times Square",
    "reviews": 20,
    "sortBy": "newest"
  }
  ```

  #### Scrape URL

  Extract content from web pages with customizable formatting and processing options.

  ```json
  {
    "url": "https://example.com",
    "format": "markdown",
    "cleaned": true,
    "renderJs": true
  }
  ```

  **Output Formats:**
  - **HTML** - Raw HTML content
  - **Markdown** - Clean markdown format  
  - **Screenshot** - Screenshot of the page

  ## API Resources

  This node currently supports the most popular Dumpling AI APIs. If there's an API missing that you would like to use, please let us know at admin@dumplingai.com

  In the meantime, you can also use the [generic HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to construct your requests.

  ### Coming Soon

  - Document Conversion (PDF, Word, Excel, etc.)
  - AI Operations (Agent completions, Knowledge base search, Image generation)
  - Developer Tools (JavaScript/Python code execution)
  - Additional Data APIs (Social media profiles, advanced scraping)

  ## Related Resources

  Dumpling AI's complete API documentation is available here:

  https://docs.dumplingai.com/api-reference/introduction

  You can also find additional tutorials and resources here:

  https://docs.dumplingai.com/guides

  ## Development

  ### Release Flow

  After merging PRs into main, follow these steps to publish a new version:

  ```bash
  # Switch to main branch and ensure it's up to date
  git checkout main
  git pull origin main

  # Bump version (patch, minor, or major)
  npm version patch         # or minor / major

  # Push changes and tags
  git push origin main
  git push origin v$(node -p "require('./package.json').version")
  ```

  The tag push will automatically trigger the GitHub Actions workflow, which will:
  1. Build the package
  2. Check if the version already exists on npm
  3. Publish to npm if it's a new version

  You'll see a ✅ job in the Actions tab and the new version will appear on npm within a minute.

  ## License

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

ai_documentation_summary:
  {"purpose":"Integrate n8n workflows with Dumpling AI APIs to extract data (transcripts, reviews), perform web and news searches, and scrape web content, with planned support for document conversion and AI operations.","capabilities":["Get YouTube Transcript (with optional timestamps, timestamp combining, preferred language)","Get TikTok Transcript (preferred language)","Search (Google Web) with optional result scraping, country/language, number of results, and scrape format (e.g., markdown)","Search Places (Google Places queries by location and language)","Search News (Google News queries with date range and language)","Get Google Reviews (by keyword, CID, or Place ID, with review count and sort options)","Scrape URL (extract page content with options: format HTML/Markdown/Screenshot, cleaned content, render JavaScript)","Output formats supported: HTML, Markdown, Screenshot"],"authentication":"API key required (create Dumpling AI API key and add Dumpling AI credential in n8n)","commonUseCases":["Extract YouTube or TikTok video transcripts for indexing, summarization, or downstream NLP tasks","Scrape web pages and convert content to Markdown or HTML for content pipelines or knowledge bases","Perform Google web searches and optionally scrape top results for research or trend analysis","Search Google Places and Google News to gather location or news-related data","Collect Google Reviews for reputation monitoring, sentiment analysis, or customer insights"],"limitations":["Several features are listed as coming soon (Document Conversion, AI Operations like agent completions and knowledge base search, image generation, developer tools, and additional data APIs) and are not yet available in the node","Not all Dumpling AI APIs are currently exposed; the README suggests using the generic HTTP Request node to call missing endpoints"],"relatedNodes":["HTTP Request (core n8n node)"]}


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

updated_at: 2026-02-19 14:41:52
author_name: actaport.integration
author_github_url: https://github.com/actaport/n8n-nodes-actaport.git
npm_package_name: @actaport/n8n-nodes-actaport
npm_version: 0.1.2
community_fetched_at: 2026-02-19T14:41:52.391Z
ai_summary_generated_at: 2026-02-19 16:43:57
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Additional Information Category",
          "value": "additionalInformationCategory"
        },
        {
          "name": "Case File",
          "value": "caseFile"
        },
        {
          "name": "Collision",
          "value": "collision"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Deadline",
          "value": "deadline"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Document Template",
          "value": "documentTemplate"
        },
        {
          "name": "Expense",
          "value": "expense"
        },
        {
          "name": "Folder",
          "value": "folder"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Note",
          "value": "note"
        },
        {
          "name": "Resubmission",
          "value": "resubmission"
        },
        {
          "name": "RVG Fee",
          "value": "rvg"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Third Party Cost",
          "value": "thirdPartyCost"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get additional information category",
          "routing": {
            "request": {
              "url": "=/v1/zusatzinformation/kategorien/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get additional information categories",
          "routing": {
            "request": {
              "url": "=/v1/zusatzinformation/kategorien",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "additionalInformationCategory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get case files",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/akten",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 50 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve case files"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get case file",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve case file"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create case file",
          "routing": {
            "send": {
              "preSend": []
            },
            "request": {
              "url": "=/v1/akten",
              "method": "POST"
            }
          },
          "description": "Create new case file"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update case file",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update case"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "caseFile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get collision check",
          "routing": {
            "request": {
              "url": "=/v1/kollisionspruefung",
              "method": "GET"
            }
          },
          "description": "Check for collisions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "collision"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "routing": {
            "request": {
              "url": "=/v1/kontakte/{{$parameter.id}}",
              "method": "GET"
            }
          },
          "description": "Retrieves the metadata of a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/kontakte",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieves multiple contacts"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "routing": {
            "request": {
              "url": "=/v1/kontakte",
              "method": "POST"
            }
          },
          "description": "Creates a new contact with the given data"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "routing": {
            "request": {
              "url": "=/v1/kontakte/{{$parameter.id}}",
              "method": "PUT"
            }
          },
          "description": "Updates the data of a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create deadline",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen",
              "method": "POST"
            }
          },
          "description": "Create a new deadline"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get deadlines",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/fristen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many deadlines"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update deadline status",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
              "method": "PUT"
            }
          },
          "description": "Change the status of a deadline"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get deadline",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single deadline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deadline"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create document",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/neu",
              "method": "POST"
            }
          },
          "description": "Create a new document with template if supported. If no template is specified, a blank document will be created."
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download document",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/v1/documents/{{$parameter[\"id\"]}}",
              "method": "GET",
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Download a single document"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get document",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single document"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get documents",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/uebersicht",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many documents"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update document",
          "routing": {
            "request": {
              "url": "=/v1/documents/{{$parameter[\"id\"]}}/metadata",
              "method": "PUT"
            }
          },
          "description": "Update a single document"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload document",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/v1/akten/{{$parameter.laufendeNummer}}/{{$parameter.bezugsJahr}}/dokumente",
              "method": "POST",
              "headers": {
                "Content-Type": "multipart/form-data"
              }
            }
          },
          "description": "Upload a document to a case"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get document template",
          "routing": {
            "request": {
              "url": "=/v1/vorlagen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single document template"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get document templates",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/vorlagen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 50 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many document templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create expense",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen",
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete expense",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get expense",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get expenses",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 50 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update expense",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "expense"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create folder",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner",
              "method": "POST"
            }
          },
          "description": "Create a new folder in a case file"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get folder",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single folder"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get folders",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 50 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve folder structure of a case file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get invoices",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
              },
              "url": "=/v1/rechnungen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 50 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many invoices"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get invoice",
          "routing": {
            "request": {
              "url": "=/v1/rechnungen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create note",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen",
              "method": "POST"
            }
          },
          "description": "Create a new note"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get note",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single note"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get notes",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many notes"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update note",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing note"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "note"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create resubmission",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen",
              "method": "POST"
            }
          },
          "description": "Create a new resubmission"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get resubmission",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single resubmission"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get resubmissions",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/wiedervorlagen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many resubmissions"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update resubmission",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing resubmission"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update resubmission status",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
              "method": "PUT"
            }
          },
          "description": "Change the status of a resubmission"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resubmission"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create rvg fee",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg",
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete rvg fee",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get rvg fee",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get rvg fees",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update rvg fee",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rvg"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create task",
          "routing": {
            "request": {
              "url": "=/v1/aufgaben",
              "method": "POST"
            }
          },
          "description": "Create a new task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get task",
          "routing": {
            "request": {
              "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get tasks",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/aufgaben",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Retrieve many tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update task",
          "routing": {
            "request": {
              "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing task"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update task status",
          "routing": {
            "request": {
              "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
              "method": "PUT"
            }
          },
          "description": "Change the status of a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create third party cost",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen",
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete third party cost",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get third party cost",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get third party costs",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update third party cost",
          "routing": {
            "request": {
              "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "thirdPartyCost"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrent",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/v1/benutzer/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single user"
        },
        {
          "name": "Get Me",
          "value": "getCurrent",
          "action": "Get me",
          "routing": {
            "request": {
              "url": "=/v1/info/me",
              "method": "GET"
            }
          },
          "description": "Get the data of the current authenticated user"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users",
          "routing": {
            "send": {
              "paginate": "={{ $parameter['returnAll'] }}"
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "content"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
              },
              "url": "=/v1/benutzer",
              "method": "GET",
              "arrayFormat": "repeat"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                      "size": "={{ $response.body?.size ?? 100 }}",
                      "sort": "={{ $request.qs?.sort }}",
                      "filter": "={{ $request.qs?.filter }}"
                    }
                  },
                  "continue": "={{ !$response.body?.last }}"
                }
              }
            }
          },
          "description": "Get the data of multiple users"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get additional information category",
      "routing": {
        "request": {
          "url": "=/v1/zusatzinformation/kategorien/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get additional information categories",
      "routing": {
        "request": {
          "url": "=/v1/zusatzinformation/kategorien",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get case files",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/akten",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 50 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve case files"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get case file",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve case file"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create case file",
      "routing": {
        "send": {
          "preSend": []
        },
        "request": {
          "url": "=/v1/akten",
          "method": "POST"
        }
      },
      "description": "Create new case file"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update case file",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update case"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get collision check",
      "routing": {
        "request": {
          "url": "=/v1/kollisionspruefung",
          "method": "GET"
        }
      },
      "description": "Check for collisions"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "routing": {
        "request": {
          "url": "=/v1/kontakte/{{$parameter.id}}",
          "method": "GET"
        }
      },
      "description": "Retrieves the metadata of a contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/kontakte",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieves multiple contacts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "routing": {
        "request": {
          "url": "=/v1/kontakte",
          "method": "POST"
        }
      },
      "description": "Creates a new contact with the given data"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "routing": {
        "request": {
          "url": "=/v1/kontakte/{{$parameter.id}}",
          "method": "PUT"
        }
      },
      "description": "Updates the data of a contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create deadline",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen",
          "method": "POST"
        }
      },
      "description": "Create a new deadline"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get deadlines",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/fristen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many deadlines"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update deadline status",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
          "method": "PUT"
        }
      },
      "description": "Change the status of a deadline"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get deadline",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/fristen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single deadline"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create document",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/neu",
          "method": "POST"
        }
      },
      "description": "Create a new document with template if supported. If no template is specified, a blank document will be created."
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download document",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/v1/documents/{{$parameter[\"id\"]}}",
          "method": "GET",
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Download a single document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get document",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get documents",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/dokumente/uebersicht",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many documents"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update document",
      "routing": {
        "request": {
          "url": "=/v1/documents/{{$parameter[\"id\"]}}/metadata",
          "method": "PUT"
        }
      },
      "description": "Update a single document"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload document",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/v1/akten/{{$parameter.laufendeNummer}}/{{$parameter.bezugsJahr}}/dokumente",
          "method": "POST",
          "headers": {
            "Content-Type": "multipart/form-data"
          }
        }
      },
      "description": "Upload a document to a case"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get document template",
      "routing": {
        "request": {
          "url": "=/v1/vorlagen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single document template"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get document templates",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/vorlagen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 50 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many document templates"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create expense",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen",
          "method": "POST"
        }
      }
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete expense",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get expense",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get expenses",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 50 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update expense",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/eigene-auslagen/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      }
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create folder",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner",
          "method": "POST"
        }
      },
      "description": "Create a new folder in a case file"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get folder",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single folder"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get folders",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/ordner",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 50 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve folder structure of a case file"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get invoices",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 50 : $parameter['size'] }}"
          },
          "url": "=/v1/rechnungen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 50 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many invoices"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get invoice",
      "routing": {
        "request": {
          "url": "=/v1/rechnungen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single invoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create note",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen",
          "method": "POST"
        }
      },
      "description": "Create a new note"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get note",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single note"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get notes",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many notes"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update note",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/notizen/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing note"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create resubmission",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen",
          "method": "POST"
        }
      },
      "description": "Create a new resubmission"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get resubmission",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single resubmission"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get resubmissions",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/wiedervorlagen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many resubmissions"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update resubmission",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing resubmission"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update resubmission status",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/wiedervorlagen/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
          "method": "PUT"
        }
      },
      "description": "Change the status of a resubmission"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create rvg fee",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg",
          "method": "POST"
        }
      }
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete rvg fee",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get rvg fee",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get rvg fees",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update rvg fee",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/rvg/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      }
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create task",
      "routing": {
        "request": {
          "url": "=/v1/aufgaben",
          "method": "POST"
        }
      },
      "description": "Create a new task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get task",
      "routing": {
        "request": {
          "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get tasks",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/aufgaben",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Retrieve many tasks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update task",
      "routing": {
        "request": {
          "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing task"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update task status",
      "routing": {
        "request": {
          "url": "=/v1/aufgaben/{{$parameter[\"id\"]}}/status/{{$parameter[\"status\"]}}",
          "method": "PUT"
        }
      },
      "description": "Change the status of a task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create third party cost",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen",
          "method": "POST"
        }
      }
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete third party cost",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get third party cost",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      }
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get third party costs",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      }
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update third party cost",
      "routing": {
        "request": {
          "url": "=/v1/akten/{{$parameter[\"laufendeNummer\"]}}/{{$parameter[\"bezugsJahr\"]}}/verguetungspositionen/fremde-auslagen/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      }
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/v1/benutzer/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single user"
    },
    {
      "name": "Get Me",
      "value": "getCurrent",
      "action": "Get me",
      "routing": {
        "request": {
          "url": "=/v1/info/me",
          "method": "GET"
        }
      },
      "description": "Get the data of the current authenticated user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many users",
      "routing": {
        "send": {
          "paginate": "={{ $parameter['returnAll'] }}"
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "content"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "size": "={{ $parameter['returnAll'] ? 100 : $parameter['size'] }}"
          },
          "url": "=/v1/benutzer",
          "method": "GET",
          "arrayFormat": "repeat"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body?.number ?? -1) + 1 }}",
                  "size": "={{ $response.body?.size ?? 100 }}",
                  "sort": "={{ $request.qs?.sort }}",
                  "filter": "={{ $request.qs?.filter }}"
                }
              },
              "continue": "={{ !$response.body?.last }}"
            }
          }
        }
      },
      "description": "Get the data of multiple users"
    }
  ]

npm_readme:
  # n8n-nodes-actaport

  ![n8n.io - Workflow Automation](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-logo.png)

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

  Actaport is a cloud-based legal management platform that helps law firms streamline their daily work.

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

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

  ## Installation

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `@actaport/n8n-nodes-actaport` 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

  | Resource                              | Supported Operations                      |
  |---------------------------------------|-------------------------------------------|
  | **Additional Information Categories** | get, getAll                               |
  | **Case File**                         | get, getAll, create, update               |
  | **Collision Check**                   | get                                       |
  | **Contact**                           | get, getAll, create, update               |
  | **Deadline**                          | get, getAll, create, update               |
  | **Document**                          | get, getAll, update, download             |
  | **Document Template**                 | get, getAll                               |
  | **Expense**                           | get, getAll, create, update, delete       |
  | **Folder**                            | get, getAll, create                       |
  | **Invoice**                           | get, getAll                               |
  | **Note**                              | get, getAll, create, update               |
  | **Resubmission**                      | get, getAll, create, update, updateStatus |
  | **RVG Fee**                           | get, getAll, create, update, delete       |
  | **Task**                              | get, getAll, create, update, updateStatus |
  | **Third Party Cost**                  | get, getAll, create, update, delete       |
  | **User**                              | get, getMe, getAll                        |

  ## Credentials

  ### Prerequisites
  1. An active Actaport account. If you don't have one, sign up at [Actaport](https://www.actaport.de/).
  2. API access enabled for your Actaport account. Contact [Actaport support](https://actaport.zendesk.com/hc/de/requests/new) if you need assistance with this step.

  ### Setting up Actaport credentials in n8n
  1. In n8n, locate the **Credentials** section and click on **Create credential**.
  2. Select **Actaport OAuth2 API** from the list.
  3. Fill in your realm once prompted and click on **Connect my account**.
  4. Once redirected to the Actaport login page, enter your Actaport credentials to authorize n8n.
  5. After successful authentication, n8n will store the access token securely for future API requests

  ![img.png](assets/add_credentials.png)
  ![img_1.png](assets/login_prompt.png)
  ![img_2.png](assets/successful_login.png)
  ## Compatibility

  * n8n Nodes API version: 1
  * Node.js: >= 20.15


  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Actaport Homepage](https://www.actaport.de/)
  * [Actaport Developer Documentation](https://api.actaport.de/api-docs)
  * [Actaport REST API Reference](https://api.actaport.de/api-docs/rest-api/reference/public)
  * [Actaport Technical Support](https://www.actaport.de/kontakt/api-anfrage)

  # Version history
  * 0.1.0 - Initial release of the n8n Actaport node, supporting multiple resources and operations (see [Operations
    section](#operations) for details).

ai_documentation_summary:
  {"purpose":"Provide n8n workflow nodes that interact with the Actaport API to manage legal practice data (cases, contacts, documents, tasks, finances, users, etc.).","capabilities":["Additional Information Categories: get, getAll","Case File: get, getAll, create, update","Collision Check: get","Contact: get, getAll, create, update","Deadline: get, getAll, create, update","Document: get, getAll, update, download","Document Template: get, getAll","Expense: get, getAll, create, update, delete","Folder: get, getAll, create","Invoice: get, getAll"],"authentication":"OAuth2 (use the 'Actaport OAuth2 API' credential in n8n; provide realm and authorize via Actaport login; access token stored by n8n)","commonUseCases":["Retrieve and update case files and related metadata","Create and maintain contacts and case participants","Upload, update metadata for, and download case documents","Manage deadlines and tasks (including status updates)","Record and reconcile expenses, invoices, RVG fees, and third-party costs"],"limitations":["Community node — installing unverified community code requires acknowledging associated risks","Requires an Actaport account with API access enabled (contact Actaport support to enable API access)","Several resources are read-only (support only get/getAll) — e.g., Additional Information Categories, Document Template, Collision Check, Invoice (no create/update/delete)","Document creation is not listed (Document supports get, getAll, update, download but not create)","Compatibility requirement: n8n Nodes API v1 and Node.js >= 20.15"],"relatedNodes":[]}


