# nodes

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

updated_at: 2026-03-25 21:19:40
author_name: vikrantgg
author_github_url: https://github.com/Vikrant-Khedkar/
npm_package_name: n8n-nodes-scrapegraphai
npm_version: 0.1.21
community_fetched_at: 2026-03-25T21:19:40.917Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Turn any webpage into usable data in one shot – ScrapegraphAI explores the website and extracts the content you need.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "smartscraper",
      "options": [
        {
          "name": "Agentic Scraper",
          "value": "agenticscraper"
        },
        {
          "name": "Markdownify",
          "value": "markdownify"
        },
        {
          "name": "Scrape",
          "value": "scrape"
        },
        {
          "name": "Search Scraper",
          "value": "searchscraper"
        },
        {
          "name": "Smart Crawler",
          "value": "smartcrawler"
        },
        {
          "name": "Smart Scraper",
          "value": "smartscraper"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute browser automation steps with optional AI extraction",
          "description": "Perform browser interactions like clicking, typing, and navigating, with optional AI-powered data extraction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agenticscraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Autonomously extract live data from any website perfect for e commerce job boards lead capture and more",
          "description": "Autonomously extract live data from any website – perfect for e-commerce, job boards, lead capture and more"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "smartscraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Perform ai powered site wide search and structured data extraction ideal for knowledge retrieval",
          "description": "Perform AI-powered site-wide search and structured data extraction – ideal for knowledge retrieval"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "searchscraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "crawl",
      "options": [
        {
          "name": "Crawl",
          "value": "crawl",
          "action": "Give a single URL – the AI crawler follows internal links to extract structured data across multiple pages",
          "description": "Give a single URL – the AI crawler follows internal links to extract structured data across multiple pages"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get the status and results of a crawl job using its task ID",
          "description": "Get the status and results of a crawl job using its task ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "smartcrawler"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert",
          "value": "convert",
          "action": "Convert a webpage or article to clean markdown useful for blogs dev docs and more",
          "description": "Convert a webpage or article to clean markdown – useful for blogs, dev docs and more"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "markdownify"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape webpage content with optional javascript rendering",
          "description": "Scrape webpage content with optional JavaScript rendering"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scrape"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"execute","name":"Execute","description":"Perform browser interactions like clicking, typing, and navigating, with optional AI-powered data extraction","resource":"agenticscraper"},{"operation":"scrape","name":"Scrape","description":"Autonomously extract live data from any website – perfect for e-commerce, job boards, lead capture and more","resource":"smartscraper"},{"operation":"search","name":"Search","description":"Perform AI-powered site-wide search and structured data extraction – ideal for knowledge retrieval","resource":"searchscraper"},{"operation":"crawl","name":"Crawl","description":"Give a single URL – the AI crawler follows internal links to extract structured data across multiple pages","resource":"smartcrawler"},{"operation":"getStatus","name":"Get Status","description":"Get the status and results of a crawl job using its task ID","resource":"smartcrawler"},{"operation":"convert","name":"Convert","description":"Convert a webpage or article to clean markdown – useful for blogs, dev docs and more","resource":"markdownify"},{"operation":"scrape","name":"Scrape","description":"Scrape webpage content with optional JavaScript rendering","resource":"scrape"}]

npm_readme:
  # n8n-nodes-scrapegraphai

  <p align="center">
    <img src="./nodes/scrapegraphAI.svg" width="250" alt="ScrapegraphAI Logo">
  </p>

  This is the official node for [ScrapegraphAI](https://scrapegraphai.com) for n8n. It allows you to use ScrapegraphAI's powerful web scraping and data extraction capabilities within your n8n workflows.

  ## Installation

  You can install this node in your n8n instance as follows:

  1. Go to **Settings** in your n8n instance
  2. Select the **Community Nodes** tab
  3. Click on **Install**
  4. Enter `n8n-nodes-scrapegraphai` in the "npm package name" field
  5. Click **Install**

  After installation, you will be able to use the ScrapegraphAI nodes in your workflows.

  ## Features

  This node provides several operations to interact with the ScrapegraphAI API:

  - Markdownify - Convert a webpage to markdown
  - Smart Scraper - Extract specific data from a webpage
  - Search Scraper - Extract data from search results

  ## Credentials

  To use this node, you need a ScrapegraphAI API key. You can get one by signing up at [scrapegraphai.com](https://scrapegraphai.com) and visiting your [dashboard](https://dashboard.scrapegraphai.com/dashboard).

  <img width="1360" alt="image" src="https://github.com/user-attachments/assets/c4305f4d-a7bd-445a-a495-a1e0314b4f46" />


  ## Usage

  After adding the node to your workflow, you'll need to:

  1. Create new credentials and enter your ScrapegraphAI API key
  2. Choose the operation you want to perform
  3. Configure the required parameters (e.g., website URL, extraction rules)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node enables web scraping and data extraction by integrating with ScrapegraphAI, allowing users to convert webpages to markdown or extract specific data from websites and search results.","capabilities":["Markdownify - Convert webpages to markdown format","Smart Scraper - Extract specific data from webpages using extraction rules","Search Scraper - Extract data from search engine results"],"authentication":"API key required","commonUseCases":["Extracting structured data from dynamic websites","Converting web content to markdown for documentation","Scraping data from search engine results pages"],"limitations":[],"relatedNodes":[]}


node_type: @joai/n8n-nodes-joai.joai
package_name: @joai/n8n-nodes-joai
display_name: JoAi
description: Send messages as a JoAi agent
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: michavie
author_github_url: https://github.com/JoAiHQ/n8n-nodes.git
npm_package_name: @joai/n8n-nodes-joai
npm_version: 0.3.2
community_fetched_at: 2026-03-25T21:19:40.918Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessageAsUser",
      "options": [
        {
          "name": "Send Message as User",
          "value": "sendMessageAsUser",
          "action": "Send a message as a user to an agent",
          "description": "Send a message as a user to an agent"
        },
        {
          "name": "Send Message as Agent",
          "value": "sendMessageAsAgent",
          "action": "Send a message as an agent to a room",
          "description": "Send a message as an agent to a room"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": false
    }
  ]

operations:
  [
    {
      "name": "Send Message as User",
      "value": "sendMessageAsUser",
      "action": "Send a message as a user to an agent",
      "description": "Send a message as a user to an agent"
    },
    {
      "name": "Send Message as Agent",
      "value": "sendMessageAsAgent",
      "action": "Send a message as an agent to a room",
      "description": "Send a message as an agent to a room"
    }
  ]

npm_readme:
  # @joai/n8n-nodes-joai

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

  This is an n8n community node that provides integration with JoAi (AI Agent Platform). It allows you to send messages as AI agents and receive real-time webhooks for agent events.

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

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

  ## Installation

  Install using npm:
  ```bash
  npm install @joai/n8n-nodes-joai
  ```

  Or via n8n's community nodes interface:
  1. Go to Settings > Community Nodes
  2. Install package: `@joai/n8n-nodes-joai`

  ## Operations

  ### JoAi Node
  - **Send Message**: Send a message as a JoAi agent to a specific room

  ### JoAi Trigger
  - **Webhook Events**: Receive real-time events from JoAi agents
    - Agent Actions
    - Agent Messages
    - User Messages

  ## Credentials

  This node requires JoAi API credentials. You need:

  1. **API Key**: Your JoAi API authentication key
  2. **Base URL**: The base URL for your JoAi API instance (e.g., `https://api.joai.ai`)

  ### Setting up credentials

  1. In n8n, go to **Settings > Credentials**.
  2. Select **Create New**.
  3. Search for **JoAi API** and select it.
  4. Enter your **API Key** and **Base URL**.
  5. Click **Save**.

  ## Compatibility

  - Minimum n8n version: 0.198.0
  - Tested with n8n version: 1.99.1

  ## Usage

  ### Basic Message Sending

  1. Add a **JoAi** node to your workflow
  2. Select **Send Message** operation
  3. Choose your JoAi credentials
  4. Configure the message parameters:
     - **Agent ID**: The UUID of the agent that will send the message
     - **Message**: The content to send
     - **Room** (optional): Room ID to send to
     - **Additional Fields** (optional): Message type and metadata
  5. Execute the workflow

  ### Setting up Webhooks (Automatic)

  1. Add a **JoAi Trigger** node to your workflow
  2. Configure your **JoAi API credentials** (API Key and Base URL)
  3. Enter the **Agent ID** you want to receive webhooks from
  4. Select the **event types** you want to trigger on (Agent Action, Agent Message, User Message)
  5. **Activate the workflow** - webhooks are automatically created in JoAi!
  6. **Test** by triggering an event in JoAi

  The trigger will automatically:
  - ✅ Create webhooks in JoAi when you activate the workflow
  - ✅ Delete webhooks when you deactivate the workflow
  - ✅ Pass all webhook data to the next node in your workflow

  No manual webhook configuration needed!

  ### Example Workflow

  Here's a simple workflow that logs webhook data:

  1. **JoAi Trigger** - Receives webhook from JoAi
  2. **Code Node** - Processes the webhook data:
     ```javascript
     // All webhook data is available in $input.item.json
     const webhookData = $input.item.json;

     return {
       json: {
         event: webhookData.event,
         data: webhookData.data,
         receivedAt: new Date().toISOString()
       }
     };
     ```
  3. **Add other nodes** as needed for your specific use case

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [JoAi API Documentation](https://docs.joai.ai)
  - [GitHub Repository](https://github.com/JoAiHQ/n8n-nodes)

  ## Version history

  ## Support

  If you encounter any issues or have questions:

  1. Check the [GitHub Issues](https://github.com/JoAiHQ/n8n-nodes/issues)
  2. Create a new issue if your problem isn't already reported
  3. Provide as much detail as possible including n8n version, node version, and error messages

  ## Contributing

  Contributions are welcome! Please read our contributing guidelines before submitting pull requests.

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the JoAi AI Agent Platform, allowing users to send messages as agents and receive real-time webhook events for agent actions and messages.","capabilities":["Send messages as a JoAi agent to a specific room","Receive real-time webhook events for Agent Actions","Receive real-time webhook events for Agent Messages","Receive real-time webhook events for User Messages","Automatically create and delete webhooks in JoAi based on workflow activation status"],"authentication":"API Key required (JoAi API Key and Base URL)","commonUseCases":["Automated messaging from AI agents to specific rooms","Real-time monitoring of agent interactions and user messages","Building chatbot workflows with event-driven triggers"],"limitations":["Requires manual installation of the npm package or use of n8n community nodes interface","Minimum n8n version required is 0.198.0","Webhook functionality requires workflow activation to create webhooks in JoAi"],"relatedNodes":["Code Node","Webhook Node","Trigger Node"]}


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-03-25 21:19:40
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-03-25T21:19:40.918Z
ai_summary_generated_at: 2026-03-25 22:51:43
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":"The Scrappey n8n node automates advanced web scraping by integrating with the Scrappey API to perform HTTP requests and browser automation with built-in anti-bot protection bypass capabilities.","capabilities":["Custom HTTP request building with granular control","Automatic retry for failed HTTP requests","Browser-based retry with full anti-bot bypass","Cloudflare challenge solving","hCaptcha and reCAPTCHA automatic solving","Datadome bypass","JavaScript-heavy website simulation","Mouse movement simulation","Residential, datacenter, and mobile proxy support","Geo-targeting across 150+ countries"],"authentication":"API key required","commonUseCases":["Automated data extraction from protected websites","CAPTCHA handling and bypass","Web scraping with anti-bot evasion","API data extraction via XHR/Fetch interception","Geolocation-based content retrieval"],"limitations":["Requires Scrappey API key from Scrappey.com","Free tier limited to 750 direct requests and 150 browser requests","Relies on third-party Scrappey API for actual request execution"],"relatedNodes":["HTTP Request","Webhook","Code","Credentials"]}


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

updated_at: 2026-03-25 21:19:40
author_name: dust-dev
author_github_url: https://github.com/dust-tt/dust-n8n-node.git
npm_package_name: n8n-nodes-dust
npm_version: 0.1.70
community_fetched_at: 2026-03-25T21:19:40.919Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "talkToAssistant",
      "options": [
        {
          "name": "Talk To",
          "value": "talkToAssistant",
          "action": "Talk to an agent",
          "description": "Send a message to an agent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadDocument",
      "options": [
        {
          "name": "Upload",
          "value": "uploadDocument",
          "action": "Upload a document",
          "description": "Upload a document to a data source"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"talkToAssistant","name":"Talk To","description":"Send a message to an agent","resource":"agent"},{"operation":"uploadDocument","name":"Upload","description":"Upload a document to a data source","resource":"document"}]

npm_readme:
  # n8n-nodes-dust

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

  Dust is a platform for creating custom AI agents that combine leading AI models with company knowledge to help teams work better, leveraging RAG technology for accurate, contextual responses.

  [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)  
  [Example Workflow](#example-workflow)  
  [Authentication](#authentication)  
  [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

  - Talk to an Agent
  - Upload a Document

  ## Credentials

  - Dust Workspace ID
  - Dust API Key
  - Dust Region

  ## Compatibility

  - n8n 1.1.1

  ## Usage

  1. **Add the Dust node to your workflow.**
  2. **Select the operation:**
     - _Talk to an Agent_: Send a message to a Dust agent and receive a response.
     - _Upload a Document_: Upload a document to a Dust data source.
  3. **Configure the required parameters:**
     - For "Talk to an Agent": Provide the message and select the agent.
     - For "Upload a Document": Provide Space ID, Data Source Name, Document ID, and Document Content.
  4. **(Optional) Fill in additional fields** for more control (e.g., username, email, timezone, tags, etc.).
  5. **Execute the workflow** to interact with Dust.

  ## Example Workflow

  ### Talk to an Agent

  - **Operation:** Talk to an Agent
  - **Parameters:**
    - Message: `What is the latest update on project X?`
    - Agent: (Select from dropdown)
    - Additional Fields (optional): Username, Email, Timezone

  **Output:**

  ```
  {
    "agentMessage": "Project X is on track for delivery next week.",
    "conversationUrl": "https://dust.tt/w/{workspaceId}/assistant/{conversationId}",
    "userMessage": { ... }
  }
  ```

  ### Upload a Document

  - **Operation:** Upload a Document
  - **Parameters:**
    - Space ID: `your_space_id`
    - Data Source Name: `your_data_source`
    - Document ID: `doc-123`
    - Document Content: `This is the content of the document.`
    - Additional Fields (optional): Title, MIME Type, Source URL, Tags, Async, Light Document Output

  **Output:**

  ```
  {
    "documentId": "doc-123",
    "status": "uploaded"
  }
  ```

  ## Authentication

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

  - **API Key:** Get your API key from your [Dust account settings](https://dust.tt/settings/api).
  - **Workspace ID:** Find your workspace ID in the Dust dashboard URL or settings.
  - **Region:** Select `EU` or `US` depending on your workspace location.

  Add these credentials in n8n under the "Dust API" credential type and reference them in the node.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Dust API Documentation](https://docs.dust.tt/reference/api)

  ## Version history

  - 0.1.1
    - Add SkipToolsValidation + rename assitant to agent
  - 0.1.0
    - Initial release

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with Dust AI agents, allowing users to send messages to agents and upload documents to Dust data sources.","capabilities":["Send messages to Dust agents and receive contextual responses","Upload documents to Dust data sources with RAG technology","Configure agent interactions with optional fields like username, email, timezone, and tags","Support for async document uploads and light document output"],"authentication":"API Key required (Dust API Key, Workspace ID, and Region)","commonUseCases":["Integrating custom AI agents with company knowledge into n8n workflows","Automating document ingestion into Dust for RAG-based responses","Creating chatbots that leverage specific organizational data"],"limitations":["Compatible only with n8n version 1.1.1","Community node status (not official n8n product)"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: n8n-nodes-outgrow.outgrowTrigger
package_name: n8n-nodes-outgrow
display_name: Outgrow Trigger
description: Fetch leads from Outgrow calculators at regular intervals
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: himanshudevgan
author_github_url: https://github.com/deepgaganventurepact/outgrow-n8n.git
npm_package_name: n8n-nodes-outgrow
npm_version: 0.1.10
community_fetched_at: 2026-03-25T21:19:40.919Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Outgrow Trigger Node for n8n

  [![n8n Community Node](https://img.shields.io/badge/n8n-Community%20Node-green.svg)](https://n8n.io/integrations)

  Trigger node that fetches leads from Outgrow calculators at configurable intervals.


  ## Features

  - 🕒 **Polling API**: Checks for new leads at customizable intervals (default: 5 minutes)
  - 📋 **Calculator Selection**: Dynamic dropdown of available calculators
  - 🔔 **Smart Notifications**: Clear "no leads" messages in the UI
  - ⚙️ **Manual Trigger**: Instant API calls for testing

  ## Prerequisites

  - Outgrow account with API access
  - API key from [Outgrow Settings](https://app.outgrow.co/settings/api)

  ## Installation

  1. Add the node to your n8n instance
  2. Configure Outgrow API credentials:
     - Navigate to **Credentials > Add New > Outgrow API**
     - Enter your API key

  ## Node Configuration

  ### Parameters
  | Field               | Required | Description                                                                 |
  |---------------------|----------|-----------------------------------------------------------------------------|
  | **Calculator**      | Yes      | Select which Outgrow calculator to monitor                                  |
  | **Polling Interval**| No       | Frequency (in minutes) to check for new leads (default: 5)                  |




  ## API Documentation
  [Outgrow API Reference](https://support.outgrow.co/docs)

ai_documentation_summary:
  {"purpose":"A trigger node that fetches new leads from Outgrow calculators at configurable intervals or via manual trigger.","capabilities":["Polling API for checking new leads","Configurable polling intervals","Calculator selection","Manual trigger for instant API calls","Smart notifications for no leads"],"authentication":"API key required","commonUseCases":["Automated lead collection from Outgrow calculators","Periodic lead monitoring workflows","Testing API connectivity with manual triggers"],"limitations":["Requires Outgrow account with API access","Uses polling mechanism rather than real-time webhooks"],"relatedNodes":["Outgrow Webhook","n8n-nodes-outgrow.outgrowWebhook"]}


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-03-25 21:19:40
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-03-25T21:19:40.920Z
ai_summary_generated_at: 2026-03-25 22:47:20
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:
  [{"operation":"generateQRCode","name":"Generate QR Code","description":"Generate a QR code image","resource":"asset"},{"operation":"htmlToPdf","name":"HTML to PDF","description":"Convert HTML content to PDF","resource":"conversion"},{"operation":"urlToPdf","name":"URL to PDF","description":"Convert public URL to PDF","resource":"conversion"},{"operation":"delete","name":"Delete","description":"Delete a document from storage","resource":"document"},{"operation":"generate","name":"Generate","description":"Generate a PDF document","resource":"document"},{"operation":"generateAsync","name":"Generate (Async)","description":"Generate a PDF document asynchronously","resource":"document"},{"operation":"generateBatchAsync","name":"Generate (Batch + Async)","description":"Generate multiple PDF documents in batch asynchronously","resource":"document"},{"operation":"generateBatch","name":"Generate (Batch)","description":"Generate multiple PDF documents in batch","resource":"document"},{"operation":"get","name":"Get","description":"Get a document by public ID","resource":"document"},{"operation":"list","name":"List","description":"List generated documents","resource":"document"},{"operation":"addWatermark","name":"Add Watermark","description":"Add text or image watermark to PDF document","resource":"pdfServices"},{"operation":"decrypt","name":"Decrypt Document","description":"Decrypt an encrypted PDF document","resource":"pdfServices"},{"operation":"encrypt","name":"Encrypt Document","description":"Encrypt a PDF document with password protection","resource":"pdfServices"},{"operation":"extractFormFields","name":"Extract Form Fields","description":"Extract form fields and their metadata from a PDF document","resource":"pdfServices"},{"operation":"fillFormFields","name":"Fill Form Fields","description":"Fill form fields in a PDF document with provided data","resource":"pdfServices"},{"operation":"optimize","name":"Optimize Document","description":"Optimize PDF document size for better performance","resource":"pdfServices"},{"operation":"copy","name":"Copy","description":"Copy a template","resource":"template"},{"operation":"create","name":"Create","description":"Create a new template","resource":"template"},{"operation":"delete","name":"Delete","description":"Delete a template","resource":"template"},{"operation":"get","name":"Get","description":"Get a template by ID","resource":"template"},{"operation":"getDataFields","name":"Get Data Fields","description":"Get template data fields","resource":"template"},{"operation":"getTemplateSchema","name":"Get Template Schema","description":"Get template JSON schema","resource":"template"},{"operation":"list","name":"List","description":"Get all templates","resource":"template"},{"operation":"openEditor","name":"Open Editor","description":"Get template editor URL","resource":"template"},{"operation":"update","name":"Update","description":"Update an existing template","resource":"template"},{"operation":"validate","name":"Validate","description":"Validate template configuration","resource":"template"},{"operation":"create","name":"Create","description":"Create a new workspace","resource":"workspace"},{"operation":"delete","name":"Delete","description":"Delete a workspace","resource":"workspace"},{"operation":"get","name":"Get","description":"Get workspace by identifier","resource":"workspace"},{"operation":"list","name":"List","description":"Get all workspaces","resource":"workspace"}]

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":"This n8n community node integrates with PDF Generator API to create PDFs from templates, convert HTML/URLs to PDF, and perform advanced PDF operations like watermarking, encryption, and form manipulation.","capabilities":["Generate PDFs from templates with data merging","Convert HTML content to PDF","Convert public URLs to PDF","Generate QR codes with custom colors and logos","Add text or image watermarks to PDFs","Encrypt and decrypt PDF documents","Optimize PDF file size","Extract and fill form fields in PDFs","Manage PDF templates (create, update, delete, list, copy)","Organize resources into workspaces"],"authentication":"API Key and API Secret required","commonUseCases":["Automated document generation from templates","Converting web pages or HTML content to PDF format","Creating QR codes for marketing materials","Protecting sensitive documents with encryption","Processing and optimizing PDF files in workflows"],"limitations":["Requires separate account on PDF Generator API","URL to PDF conversion only works on public URLs","Files stored via URL/Viewer endpoints expire after 30 days","Minimum n8n version 0.199.0 required","JWT tokens are server-side generated with short expiration"],"relatedNodes":["n8n HTTP Request","n8n Binary File","n8n Code"]}


node_type: n8n-nodes-parsio.parsio
package_name: n8n-nodes-parsio
display_name: Parsio
description: Extract structured data from emails, PDFs, images, and other documents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: andrew_io
author_github_url: https://github.com/parsioio/
npm_package_name: n8n-nodes-parsio
npm_version: 0.1.3
community_fetched_at: 2026-03-25T21:19:40.920Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "importFile",
      "options": [
        {
          "name": "Import Document From File",
          "value": "importFile",
          "action": "Import a binary file into an inbox and extract structured data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a binary file into an inbox and extract structured data"
        },
        {
          "name": "Import Text/HTML Document",
          "value": "importTextHtml",
          "action": "Import a text html document into an inbox and extract structured data",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            }
          },
          "description": "Import a text/html document into an inbox and extract structured data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"importFile","name":"Import Document From File","description":"Import a binary file into an inbox and extract structured data","resource":"document"},{"operation":"importTextHtml","name":"Import Text/HTML Document","description":"Import a text/html document into an inbox and extract structured data","resource":"document"}]

npm_readme:
  # Parsio n8n Node

  > 🧩 Official n8n Node to interact with [Parsio](https://parsio.io): import documents and extract structured data from emails, PDFs, images, and other documents.

  [About](#about)  
  [Operations](#operations)  
  [Credentials](#credentials)  
  [Usage](#usage)  
  [Resources](#resources)

  ## About

  **Parsio** is a powerful document parsing service that extracts structured data from emails, PDFs, images, and other documents using AI and machine learning.

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

  ✅ Import documents into Parsio for parsing  
  ✅ Automatically trigger workflows when documents are parsed  
  ✅ Extract structured data and use it in your automation workflows

  ## Operations

  ### Parsio Actions

  - **Import Document From File**
    - Use when you have a binary file (PDF, image, email attachment, etc.)
    - Example: Send files uploaded to a Google Drive folder to Parsio for data extraction
    - Automatically extracts structured data from the document

  - **Import Text/HTML Document**
    - Use when you have HTML pages, email content, or plain text
    - Example: Parse HTML from a website or email body content
    - Perfect for extracting data from web pages or text-based content

  ### Parsio Trigger

  - **Document Parsed**
    - Automatically starts your workflow when a document is parsed in Parsio
    - Receives the extracted data and passes it to the next node
    - Built-in security to protect your webhook

  ## Credentials

  ### Parsio API Key

  1. Sign in to your [Parsio account](https://app.parsio.io/account)
  2. Go to your account settings
  3. Copy your **API Key**

  In n8n:

  - Click **"Add Credential"** and search for **"Parsio API"**
  - Paste your API Key

  For more information, visit the [Parsio documentation](https://help.parsio.io/).

  ## Usage

  ### Parsio Trigger

  **Quick Start:**

  1. Add the **Parsio Trigger** node to your workflow
  2. Select **"Document Processed"** as the event
  3. Choose the **Inbox** where you want to receive events
  4. Activate your workflow

  That's it! Your workflow will now automatically run whenever a document is parsed in the selected inbox.

  **What happens:**

  - When a document is parsed in your Parsio inbox, the trigger receives the extracted data
  - The data is automatically passed to the next node in your workflow
  - You can use this data in any n8n node (send emails, update databases, create records, etc.)

  **Example Use Cases:**

  - **Email Notifications**: Send an email notification when an invoice is parsed
  - **Data Logging**: Save parsed data to Google Sheets or Airtable
  - **CRM Updates**: Create or update records in your CRM when documents are processed
  - **Approval Workflows**: Route documents for approval based on parsed data

  ### Import Document From File

  1. Select the **Import Document From File** operation
  2. Choose an **Inbox** from the dropdown
  3. Enter the **Document File (Binary)** property name (usually "data")
  4. Optionally add a custom **Filename** or **Additional Metadata**

  **Example workflow:**

  - Read a PDF file → Parsio node → Extract data → Use in next steps

  ### Import Text/HTML Document

  1. Select the **Import Text/HTML Document** operation
  2. Choose an **Inbox** from the dropdown
  3. Enter the **HTML/Text Content** (paste directly or use an expression)
  4. Optionally add a custom **Filename** or **Additional Metadata**

  **Example workflow:**

  - Fetch HTML from a website → Parsio node → Extract data → Process results

  ## Resources

  - [Parsio](https://parsio.io) — Document parsing & data extraction
  - [Parsio Documentation](https://help.parsio.io/) — Help and guides
  - [n8n](https://n8n.io) — Workflow automation platform
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"This n8n node enables the extraction of structured data from emails, PDFs, images, and other documents using the Parsio AI document parsing service.","capabilities":["Import binary documents (PDFs, images, email attachments)","Import text or HTML content","Trigger workflows automatically when documents are parsed","Extract structured data for use in automation workflows"],"authentication":"API Key required","commonUseCases":["Email notifications based on parsed invoice data","Logging parsed data to databases or spreadsheets","Updating CRM records from processed documents","Automating approval workflows based on document content"],"limitations":[],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest","n8n-nodes-base.binaryFile"]}


node_type: @dropinblog/n8n-nodes-dropinblog.dropInBlogTrigger
package_name: @dropinblog/n8n-nodes-dropinblog
display_name: DropInBlog Trigger
description: Starts the workflow when a DropInBlog event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: jason18505
author_github_url: https://github.com/DropInBlog/n8n-nodes-dropinblog.git
npm_package_name: @dropinblog/n8n-nodes-dropinblog
npm_version: 1.0.11
community_fetched_at: 2026-03-25T21:19:40.921Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-dropinblog

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

  DropInBlog is an SEO-friendly blog solution that embeds into any website.

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

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

  ## Installation

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

  ## Operations

  ### DropInBlog Node

  - **Post**
    - **Create** - Create a new blog post with title, content, and optional fields:
      - Status
      - Slug
      - Featured image URL
      - SEO title and description
      - Keyword
      - Author name
      - Category names
    - **Get** - Retrieve a post by its numeric ID or slug
    - **Search** - Search blog posts with optional filters:
      - Status (Draft/Published)
      - Limit

  ### DropInBlog Trigger Node

  - **Post Published** - Triggers when a post is published in your DropInBlog

  ## Credentials

  This node uses OAuth2 authentication with DropInBlog. You'll need to:

  1. Contact [DropInBlog support](https://dropinblog.com/contact/) to request OAuth credentials for your account
  2. Configure the OAuth2 credentials in n8n with the Client ID and Client Secret provided
  3. Complete the OAuth authorization flow

  ## Compatibility

  Tested with n8n version 1.48.0 and above. Requires Node.js 18.10 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [DropInBlog API documentation](https://dropinblog.readme.io/reference/api-reference)
  * [DropInBlog website](https://dropinblog.com)

ai_documentation_summary:
  {"purpose":"The DropInBlog Trigger node starts an n8n workflow automatically when a blog post is published in a DropInBlog account.","capabilities":["Triggers workflow on post publication events","Supports OAuth2 authentication with DropInBlog","Integrates with DropInBlog's blog management system"],"authentication":"OAuth2 required (Client ID and Client Secret obtained via DropInBlog support)","commonUseCases":["Automatically process new blog posts upon publication","Send notifications when content is published","Trigger downstream actions based on blog updates"],"limitations":["Requires manual OAuth credential setup via DropInBlog support","Limited to triggering on post publication events only (no manual trigger operations)"],"relatedNodes":["DropInBlog Post Node","DropInBlog Get Node","DropInBlog Search Node"]}


node_type: @cloudcli-ai/n8n-nodes-cloud-cli.cloudCli
package_name: @cloudcli-ai/n8n-nodes-cloud-cli
display_name: CloudCLI
description: Manage CloudCLI development environments and run AI agents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: simossiteboon
author_github_url: https://github.com/cloudcli-ai/n8n-nodes-cloud-cli.git
npm_package_name: @cloudcli-ai/n8n-nodes-cloud-cli
npm_version: 1.0.9
community_fetched_at: 2026-03-25T21:19:40.921Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "environment",
      "options": [
        {
          "name": "Environment",
          "value": "environment"
        },
        {
          "name": "Agent",
          "value": "agent"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an environment",
          "description": "Create a new development environment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an environment",
          "description": "Delete an environment (must be stopped first)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an environment",
          "description": "Get details of a specific environment"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many environments",
          "description": "Retrieve a list of environments"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start an environment",
          "description": "Start a stopped environment"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop an environment",
          "description": "Stop a running environment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "environment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute an agent",
          "description": "Send a message and execute Claude Code, Cursor, Codex or Gemini agent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"create","name":"Create","description":"Create a new development environment","resource":"environment"},{"operation":"delete","name":"Delete","description":"Delete an environment (must be stopped first)","resource":"environment"},{"operation":"get","name":"Get","description":"Get details of a specific environment","resource":"environment"},{"operation":"list","name":"Get Many","description":"Retrieve a list of environments","resource":"environment"},{"operation":"start","name":"Start","description":"Start a stopped environment","resource":"environment"},{"operation":"stop","name":"Stop","description":"Stop a running environment","resource":"environment"},{"operation":"execute","name":"Execute","description":"Send a message and execute Claude Code, Cursor, Codex or Gemini agent","resource":"agent"}]

npm_readme:
  # n8n-nodes-cloud-cli

  This is an n8n community node for [CloudCLI](https://cloudcli.ai). It lets you manage cloud development environments and run AI coding agents (Claude Code, Cursor, Codex) directly from your n8n workflows.

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

  ## Installation

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

  ## Operations

  ### Environment

  - **Create** - Create a new development environment
  - **Delete** - Delete an environment
  - **Get** - Get details of a specific environment
  - **Get Many** - Retrieve a list of environments
  - **Start** - Start a stopped environment
  - **Stop** - Stop a running environment

  ### Agent

  - **Execute** - Run Claude Code or Cursor agent or Codex on a running environment

  ## Credentials

  You need a CloudCLI API key to use this node. Get your API key from [cloudcli.ai/api-keys](https://cloudcli.ai/api-keys).

  ## Resources

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

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Manages CloudCLI development environments and executes AI coding agents (Claude Code, Cursor, Codex) within n8n workflows.","capabilities":["Create a new development environment","Delete an existing environment","Retrieve details of a specific environment","List all environments","Start a stopped environment","Stop a running environment","Execute Claude Code agent","Execute Cursor agent","Execute Codex agent"],"authentication":"API key required","commonUseCases":["Automate AI-assisted code generation in development workflows","Manage local development environments programmatically","Integrate AI coding agents into CI/CD pipelines"],"limitations":[],"relatedNodes":["n8n HTTP Request node","n8n Code node","n8n GitHub node","n8n Slack node"]}


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

updated_at: 2026-03-25 21:19:40
author_name: jason18505
author_github_url: https://github.com/DropInBlog/n8n-nodes-dropinblog.git
npm_package_name: @dropinblog/n8n-nodes-dropinblog
npm_version: 1.0.11
community_fetched_at: 2026-03-25T21:19:40.921Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post"
        }
      ],
      "description": "The resource to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a post",
          "description": "Create a new blog post"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a post",
          "description": "Get a post by ID or slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search posts",
          "description": "Search blog posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"create","name":"Create","description":"Create a new blog post","resource":"post"},{"operation":"get","name":"Get","description":"Get a post by ID or slug","resource":"post"},{"operation":"search","name":"Search","description":"Search blog posts","resource":"post"}]

npm_readme:
  # n8n-nodes-dropinblog

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

  DropInBlog is an SEO-friendly blog solution that embeds into any website.

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

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

  ## Installation

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

  ## Operations

  ### DropInBlog Node

  - **Post**
    - **Create** - Create a new blog post with title, content, and optional fields:
      - Status
      - Slug
      - Featured image URL
      - SEO title and description
      - Keyword
      - Author name
      - Category names
    - **Get** - Retrieve a post by its numeric ID or slug
    - **Search** - Search blog posts with optional filters:
      - Status (Draft/Published)
      - Limit

  ### DropInBlog Trigger Node

  - **Post Published** - Triggers when a post is published in your DropInBlog

  ## Credentials

  This node uses OAuth2 authentication with DropInBlog. You'll need to:

  1. Contact [DropInBlog support](https://dropinblog.com/contact/) to request OAuth credentials for your account
  2. Configure the OAuth2 credentials in n8n with the Client ID and Client Secret provided
  3. Complete the OAuth authorization flow

  ## Compatibility

  Tested with n8n version 1.48.0 and above. Requires Node.js 18.10 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [DropInBlog API documentation](https://dropinblog.readme.io/reference/api-reference)
  * [DropInBlog website](https://dropinblog.com)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with DropInBlog, an SEO-friendly blog solution, allowing users to create, retrieve, and search blog posts directly within n8n workflows.","capabilities":["Create new blog posts with title, content, status, slug, featured image, SEO metadata, keywords, author, and categories","Retrieve existing blog posts by numeric ID or slug","Search blog posts with optional filters for status and limit","Trigger workflow execution when a post is published in DropInBlog"],"authentication":"OAuth2","commonUseCases":["Automated blog post creation from external data sources","Real-time notifications for new blog posts via webhooks","Scheduling and managing blog content through n8n workflows"],"limitations":["Requires manual OAuth credential setup by contacting DropInBlog support","Limited to n8n versions 1.48.0 and above","Requires Node.js 18.10 or later"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Trigger All"]}


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

updated_at: 2026-03-25 21:19:40
author_name: pgrm
author_github_url: https://github.com/apaleo/n8n-nodes-apaleo.git
npm_package_name: @apaleo/n8n-nodes-apaleo-official
npm_version: 1.0.37
community_fetched_at: 2026-03-25T21:19:40.922Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Availability",
      "options": [
        {
          "name": "Availability",
          "value": "Availability"
        },
        {
          "name": "ReservationAvailability",
          "value": "ReservationAvailability"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "availability-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "Block",
      "options": [
        {
          "name": "Block",
          "value": "Block"
        },
        {
          "name": "BlockAction",
          "value": "BlockActions"
        },
        {
          "name": "Booking",
          "value": "Booking"
        },
        {
          "name": "Group",
          "value": "Group"
        },
        {
          "name": "Offer",
          "value": "Offer"
        },
        {
          "name": "Reservation",
          "value": "Reservation"
        },
        {
          "name": "ReservationAction",
          "value": "ReservationActions"
        },
        {
          "name": "Type",
          "value": "Types"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "Folio",
      "options": [
        {
          "name": "Folio",
          "value": "Folio"
        },
        {
          "name": "FolioAction",
          "value": "FolioActions"
        },
        {
          "name": "FolioPayment",
          "value": "FolioPayments"
        },
        {
          "name": "Invoice",
          "value": "Invoice"
        },
        {
          "name": "InvoiceAction",
          "value": "InvoiceAction"
        },
        {
          "name": "SubLedger",
          "value": "SubLedger"
        },
        {
          "name": "Type",
          "value": "Types"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "Property",
      "options": [
        {
          "name": "Property",
          "value": "Property"
        },
        {
          "name": "Unit",
          "value": "Unit"
        },
        {
          "name": "UnitAttribute",
          "value": "UnitAttribute"
        },
        {
          "name": "UnitGroup",
          "value": "UnitGroup"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "inventory-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "BookingLogs",
      "options": [
        {
          "name": "BookingLog",
          "value": "BookingLogs"
        },
        {
          "name": "FinanceLog",
          "value": "FinanceLogs"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "logs-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "Maintenance",
      "options": [
        {
          "name": "Maintenance",
          "value": "Maintenance"
        },
        {
          "name": "Operation",
          "value": "Operations"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "operations-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "AgeCategory",
      "options": [
        {
          "name": "AgeCategory",
          "value": "AgeCategory"
        },
        {
          "name": "CancellationPolicy",
          "value": "CancellationPolicy"
        },
        {
          "name": "Company",
          "value": "Company"
        },
        {
          "name": "CorporateCode",
          "value": "CorporateCodes"
        },
        {
          "name": "NoShowPolicy",
          "value": "NoShowPolicy"
        },
        {
          "name": "PromoCode",
          "value": "PromoCodes"
        },
        {
          "name": "Rate",
          "value": "Rate"
        },
        {
          "name": "RatePlan",
          "value": "RatePlan"
        },
        {
          "name": "Service",
          "value": "Service"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "Reports",
      "options": [
        {
          "name": "Report",
          "value": "Reports"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "reports-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "CapturePolicies",
      "options": [
        {
          "name": "CapturePolicy",
          "value": "CapturePolicies"
        },
        {
          "name": "CityTax",
          "value": "CityTax"
        },
        {
          "name": "CustomSubAccount",
          "value": "CustomSubAccounts"
        },
        {
          "name": "FeatureSetting",
          "value": "FeatureSettings"
        },
        {
          "name": "InvoiceAddress",
          "value": "InvoiceAddress"
        },
        {
          "name": "Language",
          "value": "Languages"
        },
        {
          "name": "MarketSegment",
          "value": "MarketSegment"
        },
        {
          "name": "PropertySetting",
          "value": "PropertySettings"
        },
        {
          "name": "TimeSliceDefinition",
          "value": "TimeSliceDefinitions"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "HealthCheck",
      "options": [
        {
          "name": "HealthCheck",
          "value": "HealthCheck"
        },
        {
          "name": "Subscription",
          "value": "Subscriptions"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "group": [
            "webhook-v1"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "AvailabilityServicesGet",
      "options": [
        {
          "name": "Get Available Services",
          "value": "AvailabilityServicesGet",
          "action": "Get available services",
          "description": "Get a list of all available services in a property"
        },
        {
          "name": "Get Available Unit Groups",
          "value": "AvailabilityUnit-groupsGet",
          "action": "Get available unit groups",
          "description": "Get a list of all available unit groups in a property"
        },
        {
          "name": "Get Available Units",
          "value": "AvailabilityUnitsGet",
          "action": "Get available units",
          "description": "Get a list of all available units in a property"
        },
        {
          "name": "Update Unit Group Availability",
          "value": "AvailabilityUnit-groupsByIdPatch",
          "action": "Update unit group availability",
          "description": "Allows to modify the unit group availability"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "availability-v1"
          ],
          "resource": [
            "Availability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "AvailabilityReservationsByIdUnitsGet",
      "options": [
        {
          "name": "Get Available Units For Reservation",
          "value": "AvailabilityReservationsByIdUnitsGet",
          "action": "Get available units for reservation",
          "description": "Get a list of all available units for a reservation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "availability-v1"
          ],
          "resource": [
            "ReservationAvailability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingBlocks$countGet",
      "options": [
        {
          "name": "Count Blocks",
          "value": "BookingBlocks$countGet",
          "action": "Count blocks",
          "description": "Returns number of blocks"
        },
        {
          "name": "Create Block",
          "value": "BookingBlocksPost",
          "action": "Create block",
          "description": "Creates a block"
        },
        {
          "name": "Get Block",
          "value": "BookingBlocksByIdGet",
          "action": "Get block",
          "description": "Returns a specific block"
        },
        {
          "name": "List Blocks",
          "value": "BookingBlocksGet",
          "action": "List blocks",
          "description": "Returns a list of blocks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Block"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingBlock-actionsByIdAmendPut",
      "options": [
        {
          "name": "Amend Block",
          "value": "BookingBlock-actionsByIdAmendPut",
          "action": "Amend block",
          "description": "Allow to modify a block"
        },
        {
          "name": "Cancel Block",
          "value": "BookingBlock-actionsByIdCancelPut",
          "action": "Cancel block",
          "description": "Cancel a block"
        },
        {
          "name": "Confirm Block",
          "value": "BookingBlock-actionsByIdConfirmPut",
          "action": "Confirm block",
          "description": "Confirm a block"
        },
        {
          "name": "Release Block",
          "value": "BookingBlock-actionsByIdReleasePut",
          "action": "Release block",
          "description": "Release a block"
        },
        {
          "name": "Wash Block",
          "value": "BookingBlock-actionsByIdWashPut",
          "action": "Wash block",
          "description": "Wash a block"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "BlockActions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingBookingsByIdReservationsPost",
      "options": [
        {
          "name": "Add Reservation To Booking",
          "value": "BookingBookingsByIdReservationsPost",
          "action": "Add reservation to booking",
          "description": "Add one or multiple reservations to an existing booking"
        },
        {
          "name": "Add Reservation To Booking Force",
          "value": "BookingBookingsByIdReservations$forcePost",
          "action": "Add reservation to booking force",
          "description": "Add one or multiple reservations to an existing booking regardless of availability or restrictions"
        },
        {
          "name": "Create Booking",
          "value": "BookingBookingsPost",
          "action": "Create booking",
          "description": "Creates a booking for one or more reservations"
        },
        {
          "name": "Create Booking Force",
          "value": "BookingBookings$forcePost",
          "action": "Create booking force",
          "description": "Creates a booking for one or more reservations regardless of availability or restrictions"
        },
        {
          "name": "Get Booking",
          "value": "BookingBookingsByIdGet",
          "action": "Get booking",
          "description": "Returns a specific booking"
        },
        {
          "name": "List Bookings",
          "value": "BookingBookingsGet",
          "action": "List bookings",
          "description": "Returns a list of all bookings, filtered by the specified parameters"
        },
        {
          "name": "Update Booking",
          "value": "BookingBookingsByIdPatch",
          "action": "Update booking",
          "description": "Allows to modify certain booking properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingGroupsByIdReservationsPost",
      "options": [
        {
          "name": "Add Reservation To Group",
          "value": "BookingGroupsByIdReservationsPost",
          "action": "Add reservation to group",
          "description": "Add one or multiple reservations to an existing group booking using blocked inventory"
        },
        {
          "name": "Create Group",
          "value": "BookingGroupsPost",
          "action": "Create group",
          "description": "Creates a group booking"
        },
        {
          "name": "Get Group",
          "value": "BookingGroupsByIdGet",
          "action": "Get group",
          "description": "Returns a specific group booking"
        },
        {
          "name": "List Groups",
          "value": "BookingGroupsGet",
          "action": "List groups",
          "description": "Returns a list of all group bookings, filtered by the specified parameters"
        },
        {
          "name": "Update Group",
          "value": "BookingGroupsByIdPatch",
          "action": "Update group",
          "description": "Allows to modify certain group booking properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingOffer-indexGet",
      "options": [
        {
          "name": "List Offer Index",
          "value": "BookingOffer-indexGet",
          "action": "List offer index",
          "description": "Returns offers with rates and availabilities for the specified range"
        },
        {
          "name": "List Offers",
          "value": "BookingOffersGet",
          "action": "List offers",
          "description": "Returns offers for one specific stay"
        },
        {
          "name": "List Rate Plan Offers",
          "value": "BookingRate-plan-offersGet",
          "action": "List rate plan offers",
          "description": "Returns offers for a specific rate plan"
        },
        {
          "name": "List Service Offers",
          "value": "BookingService-offersGet",
          "action": "List service offers",
          "description": "Returns service offers for one specific stay"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Offer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingReservations$countGet",
      "options": [
        {
          "name": "Count Reservations",
          "value": "BookingReservations$countGet",
          "action": "Count reservations",
          "description": "Returns the number of reservations fulfilling the criteria specified in the parameters"
        },
        {
          "name": "Get Reservation",
          "value": "BookingReservationsByIdGet",
          "action": "Get reservation",
          "description": "Returns a specific reservation"
        },
        {
          "name": "Get Reservation Offers",
          "value": "BookingReservationsByIdOffersGet",
          "action": "Get reservation offers",
          "description": "Returns offers for one specific reservation"
        },
        {
          "name": "Get Reservation Service Offers",
          "value": "BookingReservationsByIdService-offersGet",
          "action": "Get reservation service offers",
          "description": "Returns service offers for one specific reservation"
        },
        {
          "name": "Get Reservation Services",
          "value": "BookingReservationsByIdServicesGet",
          "action": "Get reservation services",
          "description": "Returns the services booked for a specific reservation"
        },
        {
          "name": "List Reservations",
          "value": "BookingReservationsGet",
          "action": "List reservations",
          "description": "Returns a list of all reservations, filtered by the specified parameters"
        },
        {
          "name": "Remove Service From Reservation",
          "value": "BookingReservationsByIdServicesDelete",
          "action": "Remove service from reservation",
          "description": "Removes a service from a reservation"
        },
        {
          "name": "Update Reservation",
          "value": "BookingReservationsByIdPatch",
          "action": "Update reservation",
          "description": "Allows to modify certain reservation properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Reservation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingReservation-actionsByIdAdd-city-taxPut",
      "options": [
        {
          "name": "Add City Tax",
          "value": "BookingReservation-actionsByIdAdd-city-taxPut",
          "action": "Add city tax",
          "description": "Adds the city tax to a reservation"
        },
        {
          "name": "Amend Reservation",
          "value": "BookingReservation-actionsByIdAmendPut",
          "action": "Amend reservation",
          "description": "Allows you to amend the stay details of a reservation"
        },
        {
          "name": "Amend Reservation Force",
          "value": "BookingReservation-actionsByIdAmend$forcePut",
          "action": "Amend reservation force",
          "description": "Allows you to amend the stay details of a reservation regardless of availability or restrictions"
        },
        {
          "name": "Assign Specific Unit",
          "value": "BookingReservation-actionsByIdAssign-unitByUnitIdPut",
          "action": "Assign specific unit",
          "description": "Assign a specific unit to a reservation"
        },
        {
          "name": "Assign Unit",
          "value": "BookingReservation-actionsByIdAssign-unitPut",
          "action": "Assign unit",
          "description": "Assign a unit to a reservation"
        },
        {
          "name": "Book Service",
          "value": "BookingReservation-actionsByIdBook-servicePut",
          "action": "Book service",
          "description": "Book the service for a specific reservation"
        },
        {
          "name": "Book Service Force",
          "value": "BookingReservation-actionsByIdBook-service$forcePut",
          "action": "Book service force",
          "description": "Book the service for a specific reservation regardless of availability"
        },
        {
          "name": "Cancel Reservation",
          "value": "BookingReservation-actionsByIdCancelPut",
          "action": "Cancel reservation",
          "description": "Cancel a reservation"
        },
        {
          "name": "Check In",
          "value": "BookingReservation-actionsByIdCheckinPut",
          "action": "Check in",
          "description": "Check-in of a reservation"
        },
        {
          "name": "Check Out",
          "value": "BookingReservation-actionsByIdCheckoutPut",
          "action": "Check out",
          "description": "Check-out of a reservation"
        },
        {
          "name": "Mark No Show",
          "value": "BookingReservation-actionsByIdNoshowPut",
          "action": "Mark no show",
          "description": "Set a reservation to No-show"
        },
        {
          "name": "Remove City Tax",
          "value": "BookingReservation-actionsByIdRemove-city-taxPut",
          "action": "Remove city tax",
          "description": "Removes the city tax from a reservation"
        },
        {
          "name": "Revert Check In",
          "value": "BookingReservation-actionsByIdRevert-checkinPut",
          "action": "Revert check in",
          "description": "Reverses the check-in of a reservation"
        },
        {
          "name": "Unassign Units",
          "value": "BookingReservation-actionsByIdUnassign-unitsPut",
          "action": "Unassign units",
          "description": "Unassign units from a reservation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "ReservationActions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "BookingTypesByTypeAllowed-valuesGet",
      "options": [
        {
          "name": "List Allowed Values",
          "value": "BookingTypesByTypeAllowed-valuesGet",
          "action": "List allowed values",
          "description": "Returns a list of values that a field of the specified type can take in the specified country"
        },
        {
          "name": "List Sources",
          "value": "BookingTypesSourcesGet",
          "action": "List sources",
          "description": "Returns a list of supported sources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "booking-v1"
          ],
          "resource": [
            "Types"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceFoliosByIdHead",
      "options": [
        {
          "name": "Check Folio Exists",
          "value": "FinanceFoliosByIdHead",
          "action": "Check folio exists",
          "description": "Check if the folio exists"
        },
        {
          "name": "Count Folios",
          "value": "FinanceFolios$countGet",
          "action": "Count folios",
          "description": "Returns number of folios"
        },
        {
          "name": "Create Folio",
          "value": "FinanceFoliosPost",
          "action": "Create folio",
          "description": "Create additional folios for a reservation, or new external folios"
        },
        {
          "name": "Get Folio",
          "value": "FinanceFoliosByIdGet",
          "action": "Get folio",
          "description": "Returns one folio"
        },
        {
          "name": "List Folios",
          "value": "FinanceFoliosGet",
          "action": "List folios",
          "description": "Returns a list of all folios"
        },
        {
          "name": "Update Folio",
          "value": "FinanceFoliosByIdPatch",
          "action": "Update folio",
          "description": "Allows to modify certain properties of a folio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "Folio"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceFolio-actionsBulk-movePut",
      "options": [
        {
          "name": "Bulk Move Charges",
          "value": "FinanceFolio-actionsBulk-movePut",
          "action": "Bulk move charges",
          "description": "Move multiple charges from one folio to another. Multiple source folios and multiple target folios can be specified."
        },
        {
          "name": "Close Folio",
          "value": "FinanceFolio-actionsByFolioIdClosePut",
          "action": "Close folio",
          "description": "Closes a folio"
        },
        {
          "name": "Correct Folio",
          "value": "FinanceFolio-actionsByFolioIdCorrectPost",
          "action": "Correct folio",
          "description": "Corrects a folio by moving some charges. This operation creates a new folio with the charges from the request. The payment, equal to the sum of charges, is also split to this new folio so that both folios will have 0 balance."
        },
        {
          "name": "Create Bulk Allowances",
          "value": "FinanceFolio-actionsByFolioIdBulk-allowancesPost",
          "action": "Create bulk allowances",
          "description": "Posts allowances for a folio"
        },
        {
          "name": "Create Charge Allowance",
          "value": "FinanceFolio-actionsByFolioIdChargesByChargeIdAllowancesPost",
          "action": "Create charge allowance",
          "description": "Posts an allowance for a charge"
        },
        {
          "name": "Create Folio Allowance",
          "value": "FinanceFolio-actionsByFolioIdAllowancesPost",
          "action": "Create folio allowance",
          "description": "Posts an allowance for a folio"
        },
        {
          "name": "Create Folio Cancellation Fee",
          "value": "FinanceFolio-actionsByFolioIdCancellation-feePost",
          "action": "Create folio cancellation fee",
          "description": "Adds and directly posts a cancellation fee to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added. If a routing instruction is defined for the cancellation fee service type, the fee will be moved to the destination folio."
        },
        {
          "name": "Create Folio Charge",
          "value": "FinanceFolio-actionsByFolioIdChargesPost",
          "action": "Create folio charge",
          "description": "Adds and directly posts a charge to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added."
        },
        {
          "name": "Create Folio No Show Fee",
          "value": "FinanceFolio-actionsByFolioIdNo-show-feePost",
          "action": "Create folio no show fee",
          "description": "Adds and directly posts a no-show fee to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added. If a routing instruction is defined for the no-show fee service type, the fee will be moved to the destination folio."
        },
        {
          "name": "Create Folio Transitory Charge",
          "value": "FinanceFolio-actionsByFolioIdTransitory-chargesPost",
          "action": "Create folio transitory charge",
          "description": "Adds and directly posts a transitory charge to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added."
        },
        {
          "name": "Move All Folio Charges",
          "value": "FinanceFolio-actionsByFolioIdMove-all-chargesPut",
          "action": "Move all folio charges",
          "description": "Move all charges and transitory charges from one folio to another"
        },
        {
          "name": "Move Folio Charges",
          "value": "FinanceFolio-actionsByFolioIdMove-chargesPut",
          "action": "Move folio charges",
          "description": "Move multiple charges, allowances and transitory charges from one folio to another"
        },
        {
          "name": "Move Folio Payments",
          "value": "FinanceFolio-actionsByFolioIdMove-paymentsPut",
          "action": "Move folio payments",
          "description": "Move multiple payments from one guest/booking folio to another"
        },
        {
          "name": "Post Folio Charges",
          "value": "FinanceFolio-actionsByFolioIdPost-chargesPut",
          "action": "Post folio charges",
          "description": "Posts all unposted charges for the whole length of stay"
        },
        {
          "name": "Reopen Folio",
          "value": "FinanceFolio-actionsByFolioIdReopenPut",
          "action": "Reopen folio",
          "description": "Reopens a folio"
        },
        {
          "name": "Split Folio Charge",
          "value": "FinanceFolio-actionsByFolioIdChargesByChargeIdSplitPost",
          "action": "Split folio charge",
          "description": "Splits a charge into two using the percent or amount provided Creates an allowance and two new charges"
        },
        {
          "name": "Split Folio Payment",
          "value": "FinanceFolio-actionsByFolioIdPaymentsByPaymentIdSplitPost",
          "action": "Split folio payment",
          "description": "Splits a payment into two using the percent or amount provided Creates a refund and two new payments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "FolioActions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceFoliosByFolioIdPaymentsByPaymentIdCancelPut",
      "options": [
        {
          "name": "Cancel Payment",
          "value": "FinanceFoliosByFolioIdPaymentsByPaymentIdCancelPut",
          "action": "Cancel payment",
          "description": "Cancels a pending payment link"
        },
        {
          "name": "Create Account Payment",
          "value": "FinanceFoliosByFolioIdPaymentsBy-payment-accountPost",
          "action": "Create account payment",
          "description": "Trigger a payment using the payment account stored on the reservation"
        },
        {
          "name": "Create Auth Payment",
          "value": "FinanceFoliosByFolioIdPaymentsBy-authorizationPost",
          "action": "Create auth payment",
          "description": "Captures a specific amount from a pre-authorization and posts it to the folio"
        },
        {
          "name": "Create Folio Payment",
          "value": "FinanceFoliosByFolioIdPaymentsPost",
          "action": "Create folio payment",
          "description": "Trigger a custom payment for the folio"
        },
        {
          "name": "Create Folio Refund",
          "value": "FinanceFoliosByFolioIdRefundsPost",
          "action": "Create folio refund",
          "description": "Trigger a refund for the folio"
        },
        {
          "name": "Create Payment Link",
          "value": "FinanceFoliosByFolioIdPaymentsBy-linkPost",
          "action": "Create payment link",
          "description": "Creates a link to a payment form where guests can pay"
        },
        {
          "name": "Create Payment Refund",
          "value": "FinanceFoliosByFolioIdPaymentsByPaymentIdRefundsPost",
          "action": "Create payment refund",
          "description": "Trigger a refund for a specific payment"
        },
        {
          "name": "Create Terminal Payment",
          "value": "FinanceFoliosByFolioIdPaymentsBy-terminalPost",
          "action": "Create terminal payment",
          "description": "Trigger a payment on a card terminal for the folio"
        },
        {
          "name": "Get Folio Payment",
          "value": "FinanceFoliosByFolioIdPaymentsByPaymentIdGet",
          "action": "Get folio payment",
          "description": "Get a payment by ID"
        },
        {
          "name": "Get Folio Refund",
          "value": "FinanceFoliosByFolioIdRefundsByRefundIdGet",
          "action": "Get folio refund",
          "description": "Get a refund by ID"
        },
        {
          "name": "List Folio Payments",
          "value": "FinanceFoliosByFolioIdPaymentsGet",
          "action": "List folio payments",
          "description": "Get a list of payments"
        },
        {
          "name": "List Folio Refunds",
          "value": "FinanceFoliosByFolioIdRefundsGet",
          "action": "List folio refunds",
          "description": "Get a list of refunds"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "FolioPayments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceInvoicesPost",
      "options": [
        {
          "name": "Create Invoice",
          "value": "FinanceInvoicesPost",
          "action": "Create invoice",
          "description": "Creates an invoice for one specific folio"
        },
        {
          "name": "Get Invoice",
          "value": "FinanceInvoicesByIdGet",
          "action": "Get invoice",
          "description": "Gets invoice data"
        },
        {
          "name": "Get Invoice Pdf",
          "value": "FinanceInvoicesByIdPdfGet",
          "action": "Get invoice pdf",
          "description": "Gets an invoice PDF file"
        },
        {
          "name": "List Invoice Preview",
          "value": "FinanceInvoicesPreviewGet",
          "action": "List invoice preview",
          "description": "Gets an invoice preview for one specific folio"
        },
        {
          "name": "List Invoice Preview Pdf",
          "value": "FinanceInvoicesPreview-pdfGet",
          "action": "List invoice preview pdf",
          "description": "Gets a preview invoice PDF for one specific folio"
        },
        {
          "name": "List Invoices",
          "value": "FinanceInvoicesGet",
          "action": "List invoices",
          "description": "Gets the list of all invoices (the metadata only, not the files)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "Invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceInvoice-actionsByIdCancelPut",
      "options": [
        {
          "name": "Cancel Invoice",
          "value": "FinanceInvoice-actionsByIdCancelPut",
          "action": "Cancel invoice",
          "description": "Cancels an invoice"
        },
        {
          "name": "Pay Invoice",
          "value": "FinanceInvoice-actionsByIdPayPut",
          "action": "Pay invoice",
          "description": "Marks an invoice as paid"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "InvoiceAction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceAccountsExportPost",
      "options": [
        {
          "name": "Export Accounts",
          "value": "FinanceAccountsExportPost",
          "action": "Export accounts",
          "description": "Returns transactions filtered by timestamp for a property for a given period"
        },
        {
          "name": "Export Accounts Daily",
          "value": "FinanceAccountsExport-dailyPost",
          "action": "Export accounts daily",
          "description": "Returns transactions filtered by date (business day) for a property for a given period"
        },
        {
          "name": "Export Accounts Gross",
          "value": "FinanceAccountsExport-gross-dailyPost",
          "action": "Export accounts gross",
          "description": "Returns gross transactions filtered by date (business day) for a property for a given period"
        },
        {
          "name": "Get Account Aggregate",
          "value": "FinanceAccountsAggregate-dailyPost",
          "action": "Get account aggregate",
          "description": "Aggregates transactions by date (business day) for all accounts and a given period"
        },
        {
          "name": "Get Account Aggregate Pairs",
          "value": "FinanceAccountsAggregate-pairs-dailyPost",
          "action": "Get account aggregate pairs",
          "description": "Aggregates transactions pairs by date (business day) for all accounts and a given period"
        },
        {
          "name": "Get Account By Number",
          "value": "FinanceAccountsByNumberGet",
          "action": "Get account by number",
          "description": "Returns one account"
        },
        {
          "name": "Get Accounts Aggregate",
          "value": "FinanceAccountsAggregatePost",
          "action": "Get accounts aggregate",
          "description": "Aggregates transactions by timestamp for all accounts and a given period"
        },
        {
          "name": "List Account Schema",
          "value": "FinanceAccountsSchemaGet",
          "action": "List account schema",
          "description": "Returns the chart of accounts of the subledger"
        },
        {
          "name": "List Child Accounts",
          "value": "FinanceAccountsChild-accountsGet",
          "action": "List child accounts",
          "description": "Returns a list of child accounts for a specified parent account"
        },
        {
          "name": "List External Accounts",
          "value": "FinanceExternal-accountsGet",
          "action": "List external accounts",
          "description": "Returns a list of external accounts"
        },
        {
          "name": "List Global Accounts",
          "value": "FinanceGlobal-accountsGet",
          "action": "List global accounts",
          "description": "Returns a list of global accounts"
        },
        {
          "name": "List Guest Accounts",
          "value": "FinanceGuest-accountsGet",
          "action": "List guest accounts",
          "description": "Returns a list of guest accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "SubLedger"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "FinanceTypesCurrenciesGet",
      "options": [
        {
          "name": "List Currencies",
          "value": "FinanceTypesCurrenciesGet",
          "action": "List currencies",
          "description": "Returns a list of all currencies"
        },
        {
          "name": "List Payment Methods",
          "value": "FinanceTypesPayment-methodsGet",
          "action": "List payment methods",
          "description": "Returns a list of all supported payment methods"
        },
        {
          "name": "List Service Types",
          "value": "FinanceTypesService-typesGet",
          "action": "List service types",
          "description": "Returns a list of all supported service types"
        },
        {
          "name": "List Vat Types",
          "value": "FinanceTypesVatGet",
          "action": "List vat types",
          "description": "Returns a list of all VAT types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "finance-v1"
          ],
          "resource": [
            "Types"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "InventoryPropertiesPost",
      "options": [
        {
          "name": "Create Property",
          "value": "InventoryPropertiesPost",
          "action": "Create property",
          "description": "Creates a property"
        },
        {
          "name": "Get Property",
          "value": "InventoryPropertiesByIdGet",
          "action": "Get property",
          "description": "Get a property"
        },
        {
          "name": "List Properties",
          "value": "InventoryPropertiesGet",
          "action": "List properties",
          "description": "Get a properties list"
        },
        {
          "name": "Update Property",
          "value": "InventoryPropertiesByIdPatch",
          "action": "Update property",
          "description": "Allows to modify property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "inventory-v1"
          ],
          "resource": [
            "Property"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "InventoryUnitsByIdHead",
      "options": [
        {
          "name": "Check Unit Exists",
          "value": "InventoryUnitsByIdHead",
          "action": "Check unit exists",
          "description": "Check if a unit exists"
        },
        {
          "name": "Count Units",
          "value": "InventoryUnits$countGet",
          "action": "Count units",
          "description": "Returns number of units"
        },
        {
          "name": "Create Multiple Units",
          "value": "InventoryUnitsBulkPost",
          "action": "Create multiple units"
        },
        {
          "name": "Create Unit",
          "value": "InventoryUnitsPost",
          "action": "Create unit",
          "description": "Create a unit"
        },
        {
          "name": "Delete Unit",
          "value": "InventoryUnitsByIdDelete",
          "action": "Delete unit",
          "description": "Delete a unit"
        },
        {
          "name": "Get Unit",
          "value": "InventoryUnitsByIdGet",
          "action": "Get unit",
          "description": "Get a unit"
        },
        {
          "name": "List Units",
          "value": "InventoryUnitsGet",
          "action": "List units",
          "description": "Get a units list"
        },
        {
          "name": "Update Multiple Units",
          "value": "InventoryUnitsPatch",
          "action": "Update multiple units",
          "description": "Allows to patch one or more units"
        },
        {
          "name": "Update Unit",
          "value": "InventoryUnitsByIdPatch",
          "action": "Update unit",
          "description": "Allows to patch unit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "inventory-v1"
          ],
          "resource": [
            "Unit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "InventoryUnit-attributesByIdHead",
      "options": [
        {
          "name": "Check Unit Attribute Exists",
          "value": "InventoryUnit-attributesByIdHead",
          "action": "Check unit attribute exists",
          "description": "Check if a unit attribute exists"
        },
        {
          "name": "Create Unit Attribute",
          "value": "InventoryUnit-attributesPost",
          "action": "Create unit attribute",
          "description": "Create a unit attribute"
        },
        {
          "name": "Get Unit Attribute",
          "value": "InventoryUnit-attributesByIdGet",
          "action": "Get unit attribute",
          "description": "Get unit attribute by id"
        },
        {
          "name": "List Unit Attributes",
          "value": "InventoryUnit-attributesGet",
          "action": "List unit attributes",
          "description": "Get unit attribute list"
        },
        {
          "name": "Update Unit Attribute",
          "value": "InventoryUnit-attributesByIdPatch",
          "action": "Update unit attribute",
          "description": "Allows to modify unit attribute"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "inventory-v1"
          ],
          "resource": [
            "UnitAttribute"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "InventoryUnit-groupsByIdHead",
      "options": [
        {
          "name": "Check Unit Group Exists",
          "value": "InventoryUnit-groupsByIdHead",
          "action": "Check unit group exists",
          "description": "Check if a unit group exists"
        },
        {
          "name": "Count Unit Groups",
          "value": "InventoryUnit-groups$countGet",
          "action": "Count unit groups",
          "description": "Returns number of unit groups"
        },
        {
          "name": "Create Unit Group",
          "value": "InventoryUnit-groupsPost",
          "action": "Create unit group",
          "description": "Create a unit group"
        },
        {
          "name": "Get Unit Group",
          "value": "InventoryUnit-groupsByIdGet",
          "action": "Get unit group",
          "description": "Get a unit group"
        },
        {
          "name": "List Unit Groups",
          "value": "InventoryUnit-groupsGet",
          "action": "List unit groups",
          "description": "Get all unit groups, or all unit groups for a property"
        },
        {
          "name": "Update Unit Group",
          "value": "InventoryUnit-groupsByIdPut",
          "action": "Update unit group",
          "description": "Replace a unit group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "inventory-v1"
          ],
          "resource": [
            "UnitGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "LogsBookingReservationGet",
      "options": [
        {
          "name": "List Reservation Logs",
          "value": "LogsBookingReservationGet",
          "action": "List reservation logs",
          "description": "Returns reservation change log entries sorted by the timestamp"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "logs-v1"
          ],
          "resource": [
            "BookingLogs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "LogsFinanceFolioGet",
      "options": [
        {
          "name": "List Folio Logs",
          "value": "LogsFinanceFolioGet",
          "action": "List folio logs",
          "description": "Returns folio change log entries sorted by the timestamp"
        },
        {
          "name": "List Night Audit Logs",
          "value": "LogsFinanceNight-auditGet",
          "action": "List night audit logs",
          "description": "Returns the night audit logs"
        },
        {
          "name": "List Transaction Export Logs",
          "value": "LogsFinanceTransactions-exportGet",
          "action": "List transaction export logs",
          "description": "Returns the audit log for all accounting exports that have been done"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "logs-v1"
          ],
          "resource": [
            "FinanceLogs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "OperationsMaintenancesByIdHead",
      "options": [
        {
          "name": "Check Maintenance Exists",
          "value": "OperationsMaintenancesByIdHead",
          "action": "Check maintenance exists",
          "description": "Check if a maintenance exists"
        },
        {
          "name": "Count Maintenances",
          "value": "OperationsMaintenances$countGet",
          "action": "Count maintenances",
          "description": "Returns number of maintenances"
        },
        {
          "name": "Create Maintenance",
          "value": "OperationsMaintenancesPost",
          "action": "Create maintenance",
          "description": "Create a new maintenance window"
        },
        {
          "name": "Create Multiple Maintenances",
          "value": "OperationsMaintenancesBulkPost",
          "action": "Create multiple maintenances"
        },
        {
          "name": "Delete Maintenance",
          "value": "OperationsMaintenancesByIdDelete",
          "action": "Delete maintenance",
          "description": "Delete a maintenance"
        },
        {
          "name": "Get Maintenance",
          "value": "OperationsMaintenancesByIdGet",
          "action": "Get maintenance",
          "description": "Get a specific maintenance"
        },
        {
          "name": "List Maintenances",
          "value": "OperationsMaintenancesGet",
          "action": "List maintenances",
          "description": "Get list of maintenances"
        },
        {
          "name": "Update Maintenance",
          "value": "OperationsMaintenancesByIdPatch",
          "action": "Update maintenance",
          "description": "Modify a maintenance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "operations-v1"
          ],
          "resource": [
            "Maintenance"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "OperationsNight-auditPut",
      "options": [
        {
          "name": "Run Night Audit",
          "value": "OperationsNight-auditPut",
          "action": "Run night audit",
          "description": "Performs the night audit for one property"
        },
        {
          "name": "Update Units Condition",
          "value": "OperationsUnits-conditionPut",
          "action": "Update units condition",
          "description": "Change the condition of a unit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "operations-v1"
          ],
          "resource": [
            "Operations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsAge-categoriesPost",
      "options": [
        {
          "name": "Create Age Category",
          "value": "SettingsAge-categoriesPost",
          "action": "Create age category",
          "description": "Create an age category"
        },
        {
          "name": "Get Age Category",
          "value": "SettingsAge-categoriesByIdGet",
          "action": "Get age category",
          "description": "Get an age category"
        },
        {
          "name": "List Age Categories",
          "value": "SettingsAge-categoriesGet",
          "action": "List age categories",
          "description": "Get an age category list"
        },
        {
          "name": "Update Age Category",
          "value": "SettingsAge-categoriesByIdPatch",
          "action": "Update age category",
          "description": "Allows to modify properties of an age category"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "AgeCategory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanCancellation-policiesPost",
      "options": [
        {
          "name": "Create Cancellation Policy",
          "value": "RateplanCancellation-policiesPost",
          "action": "Create cancellation policy",
          "description": "Create a cancellation policy"
        },
        {
          "name": "Get Cancellation Policy",
          "value": "RateplanCancellation-policiesByIdGet",
          "action": "Get cancellation policy",
          "description": "Get a specific cancellation policy"
        },
        {
          "name": "List Cancellation Policies",
          "value": "RateplanCancellation-policiesGet",
          "action": "List cancellation policies",
          "description": "Get all cancellation policies"
        },
        {
          "name": "Update Cancellation Policy",
          "value": "RateplanCancellation-policiesByIdPatch",
          "action": "Update cancellation policy",
          "description": "Allows to modify properties of a cancellation policy"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "CancellationPolicy"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanCompaniesPost",
      "options": [
        {
          "name": "Create Company",
          "value": "RateplanCompaniesPost",
          "action": "Create company",
          "description": "Create a company"
        },
        {
          "name": "Get Company",
          "value": "RateplanCompaniesByIdGet",
          "action": "Get company",
          "description": "Get a company"
        },
        {
          "name": "List Companies",
          "value": "RateplanCompaniesGet",
          "action": "List companies",
          "description": "Get a list of companies"
        },
        {
          "name": "Update Company",
          "value": "RateplanCompaniesByIdPatch",
          "action": "Update company",
          "description": "Modify a company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "Company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanCorporate-codesCodesGet",
      "options": [
        {
          "name": "List Corporate Codes",
          "value": "RateplanCorporate-codesCodesGet",
          "action": "List corporate codes",
          "description": "Returns a list of corporate codes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "CorporateCodes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanNo-show-policiesPost",
      "options": [
        {
          "name": "Create No Show Policy",
          "value": "RateplanNo-show-policiesPost",
          "action": "Create no show policy",
          "description": "Create a no-show policy"
        },
        {
          "name": "Get No Show Policy",
          "value": "RateplanNo-show-policiesByIdGet",
          "action": "Get no show policy",
          "description": "Get a specific no-show policy"
        },
        {
          "name": "List No Show Policies",
          "value": "RateplanNo-show-policiesGet",
          "action": "List no show policies",
          "description": "Get all no-show policies"
        },
        {
          "name": "Update No Show Policy",
          "value": "RateplanNo-show-policiesByIdPatch",
          "action": "Update no show policy",
          "description": "Allows to modify properties of a no-show policy"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "NoShowPolicy"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanPromo-codesCodesGet",
      "options": [
        {
          "name": "List Promo Codes",
          "value": "RateplanPromo-codesCodesGet",
          "action": "List promo codes",
          "description": "Returns a list of promo codes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "PromoCodes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanRate-plansByIdRatesGet",
      "options": [
        {
          "name": "Get Rates",
          "value": "RateplanRate-plansByIdRatesGet",
          "action": "Get rates",
          "description": "Returns a list of rates"
        },
        {
          "name": "Update Multiple Rates",
          "value": "RateplanRatesPatch",
          "action": "Update multiple rates",
          "description": "Allows to patch the rates of multiple rate plans"
        },
        {
          "name": "Update Rates",
          "value": "RateplanRate-plansByIdRatesPut",
          "action": "Update rates",
          "description": "Initializes and changes the rates for the rate plan"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "Rate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanRate-plansPost",
      "options": [
        {
          "name": "Create Rate Plan",
          "value": "RateplanRate-plansPost",
          "action": "Create rate plan",
          "description": "Create a rate plan"
        },
        {
          "name": "Get Rate Plan",
          "value": "RateplanRate-plansByIdGet",
          "action": "Get rate plan",
          "description": "Get a rate plan"
        },
        {
          "name": "List Rate Plans",
          "value": "RateplanRate-plansGet",
          "action": "List rate plans",
          "description": "Get a rate plan list"
        },
        {
          "name": "Update Multiple Rate Plans",
          "value": "RateplanRate-plansPatch",
          "action": "Update multiple rate plans",
          "description": "Allows to patch one or more rate plans"
        },
        {
          "name": "Update Rate Plan",
          "value": "RateplanRate-plansByIdPut",
          "action": "Update rate plan",
          "description": "Replace a rate plan"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "RatePlan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "RateplanServicesPost",
      "options": [
        {
          "name": "Create Service",
          "value": "RateplanServicesPost",
          "action": "Create service",
          "description": "Create a service"
        },
        {
          "name": "Get Service",
          "value": "RateplanServicesByIdGet",
          "action": "Get service",
          "description": "Get a specific service"
        },
        {
          "name": "List Services",
          "value": "RateplanServicesGet",
          "action": "List services",
          "description": "Get all services"
        },
        {
          "name": "Update Service",
          "value": "RateplanServicesByIdPatch",
          "action": "Update service",
          "description": "Modify a service"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "rateplan-v1"
          ],
          "resource": [
            "Service"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ReportsReportsArrivalsGet",
      "options": [
        {
          "name": "List Arrivals Report",
          "value": "ReportsReportsArrivalsGet",
          "action": "List arrivals report",
          "description": "Returns the number of arrivals in a month for a property"
        },
        {
          "name": "List Company Invoices Vat Report",
          "value": "ReportsReportsCompany-invoices-vatGet",
          "action": "List company invoices vat report",
          "description": "Returns the list of company invoices with information on the company and the VAT breakdown"
        },
        {
          "name": "List Ordered Services Report",
          "value": "ReportsReportsOrdered-servicesGet",
          "action": "List ordered services report",
          "description": "List of ordered services"
        },
        {
          "name": "List Property Performance Report",
          "value": "ReportsReportsProperty-performanceGet",
          "action": "List property performance report",
          "description": "Returns the property performance report which includes the ADR and the RevPAR for each business day"
        },
        {
          "name": "List Revenues Report",
          "value": "ReportsReportsRevenuesGet",
          "action": "List revenues report",
          "description": "Returns the revenues report for a property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "reports-v1"
          ],
          "resource": [
            "Reports"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsCapture-policiesByIdGet",
      "options": [
        {
          "name": "Get Capture Policy",
          "value": "SettingsCapture-policiesByIdGet",
          "action": "Get capture policy",
          "description": "Get a specific capture policy"
        },
        {
          "name": "List Capture Policies",
          "value": "SettingsCapture-policiesGet",
          "action": "List capture policies",
          "description": "Get all capture policies"
        },
        {
          "name": "Update Capture Policy",
          "value": "SettingsCapture-policiesByIdPatch",
          "action": "Update capture policy",
          "description": "Allows to modify properties of a capture policy"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "CapturePolicies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsCity-taxPost",
      "options": [
        {
          "name": "Create City Tax",
          "value": "SettingsCity-taxPost",
          "action": "Create city tax",
          "description": "Create a city tax"
        },
        {
          "name": "Get City Tax",
          "value": "SettingsCity-taxByIdGet",
          "action": "Get city tax",
          "description": "Get a specific city tax"
        },
        {
          "name": "List City Taxes",
          "value": "SettingsCity-taxGet",
          "action": "List city taxes",
          "description": "Get all city taxes"
        },
        {
          "name": "Update City Tax",
          "value": "SettingsCity-taxByIdPatch",
          "action": "Update city tax",
          "description": "Allows to modify city tax"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "CityTax"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsSub-accountsByIdHead",
      "options": [
        {
          "name": "Check Sub Account Exists",
          "value": "SettingsSub-accountsByIdHead",
          "action": "Check sub account exists",
          "description": "Check if the sub-account exists"
        },
        {
          "name": "Count Sub Accounts",
          "value": "SettingsSub-accounts$countGet",
          "action": "Count sub accounts",
          "description": "Returns number of sub-accounts"
        },
        {
          "name": "Create Sub Account",
          "value": "SettingsSub-accountsPost",
          "action": "Create sub account",
          "description": "Create a sub-account"
        },
        {
          "name": "Get Sub Account",
          "value": "SettingsSub-accountsByIdGet",
          "action": "Get sub account",
          "description": "Returns one sub-account"
        },
        {
          "name": "List Sub Accounts",
          "value": "SettingsSub-accountsGet",
          "action": "List sub accounts",
          "description": "Returns a list of all sub-accounts"
        },
        {
          "name": "Update Sub Account",
          "value": "SettingsSub-accountsByIdPatch",
          "action": "Update sub account",
          "description": "Allows to modify the name of the sub-account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "CustomSubAccounts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsFeaturesByPropertyIdGet",
      "options": [
        {
          "name": "Get Feature Settings",
          "value": "SettingsFeaturesByPropertyIdGet",
          "action": "Get feature settings",
          "description": "Get feature settings for a property"
        },
        {
          "name": "Update Feature Settings",
          "value": "SettingsFeaturesByPropertyIdPatch",
          "action": "Update feature settings",
          "description": "Allows to modify feature settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "FeatureSettings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsInvoice-addressGet",
      "options": [
        {
          "name": "List Invoice Addresses",
          "value": "SettingsInvoice-addressGet",
          "action": "List invoice addresses",
          "description": "Get invoice addresses"
        },
        {
          "name": "Patch Invoice Addresses",
          "value": "SettingsInvoice-addressPatch",
          "action": "Patch invoice addresses",
          "description": "Change fields in the invoice address of one or more properties"
        },
        {
          "name": "Update Invoice Addresses",
          "value": "SettingsInvoice-addressPut",
          "action": "Update invoice addresses",
          "description": "Create or update invoice addresses for one or more properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "InvoiceAddress"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsLanguagesGet",
      "options": [
        {
          "name": "List Language Settings",
          "value": "SettingsLanguagesGet",
          "action": "List language settings",
          "description": "Get the language settings for the account"
        },
        {
          "name": "Update Language Settings",
          "value": "SettingsLanguagesPut",
          "action": "Update language settings",
          "description": "Replaces the language settings for the account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "Languages"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsMarket-segmentsByIdHead",
      "options": [
        {
          "name": "Check Market Segment Exists",
          "value": "SettingsMarket-segmentsByIdHead",
          "action": "Check market segment exists",
          "description": "Check if a market segment exists"
        },
        {
          "name": "Count Market Segments",
          "value": "SettingsMarket-segments$countGet",
          "action": "Count market segments",
          "description": "Returns number of market segments"
        },
        {
          "name": "Create Market Segment",
          "value": "SettingsMarket-segmentsPost",
          "action": "Create market segment",
          "description": "Create a market segment"
        },
        {
          "name": "Get Market Segment",
          "value": "SettingsMarket-segmentsByIdGet",
          "action": "Get market segment",
          "description": "Get a market segment"
        },
        {
          "name": "List Market Segments",
          "value": "SettingsMarket-segmentsGet",
          "action": "List market segments",
          "description": "Returns a list of all market segments, filtered by the specified parameters"
        },
        {
          "name": "Update Market Segment",
          "value": "SettingsMarket-segmentsByIdPatch",
          "action": "Update market segment",
          "description": "Allows to modify market segment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "MarketSegment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsPropertiesByIdGet",
      "options": [
        {
          "name": "Get Property Settings",
          "value": "SettingsPropertiesByIdGet",
          "action": "Get property settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "PropertySettings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SettingsPropertiesByPropertyIdTime-slice-definitionsPost",
      "options": [
        {
          "name": "Create Time Slice Definition",
          "value": "SettingsPropertiesByPropertyIdTime-slice-definitionsPost",
          "action": "Create time slice definition",
          "description": "Creates a time slice definition"
        },
        {
          "name": "Get Time Slice Definition",
          "value": "SettingsPropertiesByPropertyIdTime-slice-definitionsByIdGet",
          "action": "Get time slice definition",
          "description": "Get a specific time slice definition"
        },
        {
          "name": "List Time Slice Definitions",
          "value": "SettingsPropertiesByPropertyIdTime-slice-definitionsGet",
          "action": "List time slice definitions",
          "description": "Get time slice definitions"
        },
        {
          "name": "Update Time Slice Definition",
          "value": "SettingsPropertiesByPropertyIdTime-slice-definitionsByIdPatch",
          "action": "Update time slice definition",
          "description": "Modifies a specific time slice definition for the property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "settings-v1"
          ],
          "resource": [
            "TimeSliceDefinitions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "PingerPost",
      "options": [
        {
          "name": "Ping",
          "value": "PingerPost",
          "action": "Ping",
          "description": "Health check endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "webhook-v1"
          ],
          "resource": [
            "HealthCheck"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "SubscriptionsPost",
      "options": [
        {
          "name": "Create Subscription",
          "value": "SubscriptionsPost",
          "action": "Create subscription",
          "description": "Creates subscription"
        },
        {
          "name": "Delete Subscription",
          "value": "SubscriptionsByIdDelete",
          "action": "Delete subscription",
          "description": "Deletes subscription"
        },
        {
          "name": "Get Subscription",
          "value": "SubscriptionsByIdGet",
          "action": "Get subscription",
          "description": "Get a subscription"
        },
        {
          "name": "List Subscriptions",
          "value": "SubscriptionsGet",
          "action": "List subscriptions",
          "description": "Get all subscriptions created for the current account and client"
        },
        {
          "name": "Update Subscription",
          "value": "SubscriptionsByIdPut",
          "action": "Update subscription",
          "description": "Updates subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "group": [
            "webhook-v1"
          ],
          "resource": [
            "Subscriptions"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"AvailabilityServicesGet","name":"Get Available Services","description":"Get a list of all available services in a property","resource":"Availability"},{"operation":"AvailabilityUnit-groupsGet","name":"Get Available Unit Groups","description":"Get a list of all available unit groups in a property","resource":"Availability"},{"operation":"AvailabilityUnitsGet","name":"Get Available Units","description":"Get a list of all available units in a property","resource":"Availability"},{"operation":"AvailabilityUnit-groupsByIdPatch","name":"Update Unit Group Availability","description":"Allows to modify the unit group availability","resource":"Availability"},{"operation":"AvailabilityReservationsByIdUnitsGet","name":"Get Available Units For Reservation","description":"Get a list of all available units for a reservation","resource":"ReservationAvailability"},{"operation":"BookingBlocks$countGet","name":"Count Blocks","description":"Returns number of blocks","resource":"Block"},{"operation":"BookingBlocksPost","name":"Create Block","description":"Creates a block","resource":"Block"},{"operation":"BookingBlocksByIdGet","name":"Get Block","description":"Returns a specific block","resource":"Block"},{"operation":"BookingBlocksGet","name":"List Blocks","description":"Returns a list of blocks","resource":"Block"},{"operation":"BookingBlock-actionsByIdAmendPut","name":"Amend Block","description":"Allow to modify a block","resource":"BlockActions"},{"operation":"BookingBlock-actionsByIdCancelPut","name":"Cancel Block","description":"Cancel a block","resource":"BlockActions"},{"operation":"BookingBlock-actionsByIdConfirmPut","name":"Confirm Block","description":"Confirm a block","resource":"BlockActions"},{"operation":"BookingBlock-actionsByIdReleasePut","name":"Release Block","description":"Release a block","resource":"BlockActions"},{"operation":"BookingBlock-actionsByIdWashPut","name":"Wash Block","description":"Wash a block","resource":"BlockActions"},{"operation":"BookingBookingsByIdReservationsPost","name":"Add Reservation To Booking","description":"Add one or multiple reservations to an existing booking","resource":"Booking"},{"operation":"BookingBookingsByIdReservations$forcePost","name":"Add Reservation To Booking Force","description":"Add one or multiple reservations to an existing booking regardless of availability or restrictions","resource":"Booking"},{"operation":"BookingBookingsPost","name":"Create Booking","description":"Creates a booking for one or more reservations","resource":"Booking"},{"operation":"BookingBookings$forcePost","name":"Create Booking Force","description":"Creates a booking for one or more reservations regardless of availability or restrictions","resource":"Booking"},{"operation":"BookingBookingsByIdGet","name":"Get Booking","description":"Returns a specific booking","resource":"Booking"},{"operation":"BookingBookingsGet","name":"List Bookings","description":"Returns a list of all bookings, filtered by the specified parameters","resource":"Booking"},{"operation":"BookingBookingsByIdPatch","name":"Update Booking","description":"Allows to modify certain booking properties","resource":"Booking"},{"operation":"BookingGroupsByIdReservationsPost","name":"Add Reservation To Group","description":"Add one or multiple reservations to an existing group booking using blocked inventory","resource":"Group"},{"operation":"BookingGroupsPost","name":"Create Group","description":"Creates a group booking","resource":"Group"},{"operation":"BookingGroupsByIdGet","name":"Get Group","description":"Returns a specific group booking","resource":"Group"},{"operation":"BookingGroupsGet","name":"List Groups","description":"Returns a list of all group bookings, filtered by the specified parameters","resource":"Group"},{"operation":"BookingGroupsByIdPatch","name":"Update Group","description":"Allows to modify certain group booking properties","resource":"Group"},{"operation":"BookingOffer-indexGet","name":"List Offer Index","description":"Returns offers with rates and availabilities for the specified range","resource":"Offer"},{"operation":"BookingOffersGet","name":"List Offers","description":"Returns offers for one specific stay","resource":"Offer"},{"operation":"BookingRate-plan-offersGet","name":"List Rate Plan Offers","description":"Returns offers for a specific rate plan","resource":"Offer"},{"operation":"BookingService-offersGet","name":"List Service Offers","description":"Returns service offers for one specific stay","resource":"Offer"},{"operation":"BookingReservations$countGet","name":"Count Reservations","description":"Returns the number of reservations fulfilling the criteria specified in the parameters","resource":"Reservation"},{"operation":"BookingReservationsByIdGet","name":"Get Reservation","description":"Returns a specific reservation","resource":"Reservation"},{"operation":"BookingReservationsByIdOffersGet","name":"Get Reservation Offers","description":"Returns offers for one specific reservation","resource":"Reservation"},{"operation":"BookingReservationsByIdService-offersGet","name":"Get Reservation Service Offers","description":"Returns service offers for one specific reservation","resource":"Reservation"},{"operation":"BookingReservationsByIdServicesGet","name":"Get Reservation Services","description":"Returns the services booked for a specific reservation","resource":"Reservation"},{"operation":"BookingReservationsGet","name":"List Reservations","description":"Returns a list of all reservations, filtered by the specified parameters","resource":"Reservation"},{"operation":"BookingReservationsByIdServicesDelete","name":"Remove Service From Reservation","description":"Removes a service from a reservation","resource":"Reservation"},{"operation":"BookingReservationsByIdPatch","name":"Update Reservation","description":"Allows to modify certain reservation properties","resource":"Reservation"},{"operation":"BookingReservation-actionsByIdAdd-city-taxPut","name":"Add City Tax","description":"Adds the city tax to a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdAmendPut","name":"Amend Reservation","description":"Allows you to amend the stay details of a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdAmend$forcePut","name":"Amend Reservation Force","description":"Allows you to amend the stay details of a reservation regardless of availability or restrictions","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdAssign-unitByUnitIdPut","name":"Assign Specific Unit","description":"Assign a specific unit to a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdAssign-unitPut","name":"Assign Unit","description":"Assign a unit to a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdBook-servicePut","name":"Book Service","description":"Book the service for a specific reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdBook-service$forcePut","name":"Book Service Force","description":"Book the service for a specific reservation regardless of availability","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdCancelPut","name":"Cancel Reservation","description":"Cancel a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdCheckinPut","name":"Check In","description":"Check-in of a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdCheckoutPut","name":"Check Out","description":"Check-out of a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdNoshowPut","name":"Mark No Show","description":"Set a reservation to No-show","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdRemove-city-taxPut","name":"Remove City Tax","description":"Removes the city tax from a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdRevert-checkinPut","name":"Revert Check In","description":"Reverses the check-in of a reservation","resource":"ReservationActions"},{"operation":"BookingReservation-actionsByIdUnassign-unitsPut","name":"Unassign Units","description":"Unassign units from a reservation","resource":"ReservationActions"},{"operation":"BookingTypesByTypeAllowed-valuesGet","name":"List Allowed Values","description":"Returns a list of values that a field of the specified type can take in the specified country","resource":"Types"},{"operation":"BookingTypesSourcesGet","name":"List Sources","description":"Returns a list of supported sources","resource":"Types"},{"operation":"FinanceFoliosByIdHead","name":"Check Folio Exists","description":"Check if the folio exists","resource":"Folio"},{"operation":"FinanceFolios$countGet","name":"Count Folios","description":"Returns number of folios","resource":"Folio"},{"operation":"FinanceFoliosPost","name":"Create Folio","description":"Create additional folios for a reservation, or new external folios","resource":"Folio"},{"operation":"FinanceFoliosByIdGet","name":"Get Folio","description":"Returns one folio","resource":"Folio"},{"operation":"FinanceFoliosGet","name":"List Folios","description":"Returns a list of all folios","resource":"Folio"},{"operation":"FinanceFoliosByIdPatch","name":"Update Folio","description":"Allows to modify certain properties of a folio","resource":"Folio"},{"operation":"FinanceFolio-actionsBulk-movePut","name":"Bulk Move Charges","description":"Move multiple charges from one folio to another. Multiple source folios and multiple target folios can be specified.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdClosePut","name":"Close Folio","description":"Closes a folio","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdCorrectPost","name":"Correct Folio","description":"Corrects a folio by moving some charges. This operation creates a new folio with the charges from the request. The payment, equal to the sum of charges, is also split to this new folio so that both folios will have 0 balance.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdBulk-allowancesPost","name":"Create Bulk Allowances","description":"Posts allowances for a folio","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdChargesByChargeIdAllowancesPost","name":"Create Charge Allowance","description":"Posts an allowance for a charge","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdAllowancesPost","name":"Create Folio Allowance","description":"Posts an allowance for a folio","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdCancellation-feePost","name":"Create Folio Cancellation Fee","description":"Adds and directly posts a cancellation fee to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added. If a routing instruction is defined for the cancellation fee service type, the fee will be moved to the destination folio.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdChargesPost","name":"Create Folio Charge","description":"Adds and directly posts a charge to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdNo-show-feePost","name":"Create Folio No Show Fee","description":"Adds and directly posts a no-show fee to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added. If a routing instruction is defined for the no-show fee service type, the fee will be moved to the destination folio.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdTransitory-chargesPost","name":"Create Folio Transitory Charge","description":"Adds and directly posts a transitory charge to the folio. If there are any fees configured for the property, an additional charge for each configured fee will be added.","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdMove-all-chargesPut","name":"Move All Folio Charges","description":"Move all charges and transitory charges from one folio to another","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdMove-chargesPut","name":"Move Folio Charges","description":"Move multiple charges, allowances and transitory charges from one folio to another","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdMove-paymentsPut","name":"Move Folio Payments","description":"Move multiple payments from one guest/booking folio to another","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdPost-chargesPut","name":"Post Folio Charges","description":"Posts all unposted charges for the whole length of stay","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdReopenPut","name":"Reopen Folio","description":"Reopens a folio","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdChargesByChargeIdSplitPost","name":"Split Folio Charge","description":"Splits a charge into two using the percent or amount provided Creates an allowance and two new charges","resource":"FolioActions"},{"operation":"FinanceFolio-actionsByFolioIdPaymentsByPaymentIdSplitPost","name":"Split Folio Payment","description":"Splits a payment into two using the percent or amount provided Creates a refund and two new payments","resource":"FolioActions"},{"operation":"FinanceFoliosByFolioIdPaymentsByPaymentIdCancelPut","name":"Cancel Payment","description":"Cancels a pending payment link","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsBy-payment-accountPost","name":"Create Account Payment","description":"Trigger a payment using the payment account stored on the reservation","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsBy-authorizationPost","name":"Create Auth Payment","description":"Captures a specific amount from a pre-authorization and posts it to the folio","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsPost","name":"Create Folio Payment","description":"Trigger a custom payment for the folio","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdRefundsPost","name":"Create Folio Refund","description":"Trigger a refund for the folio","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsBy-linkPost","name":"Create Payment Link","description":"Creates a link to a payment form where guests can pay","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsByPaymentIdRefundsPost","name":"Create Payment Refund","description":"Trigger a refund for a specific payment","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsBy-terminalPost","name":"Create Terminal Payment","description":"Trigger a payment on a card terminal for the folio","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsByPaymentIdGet","name":"Get Folio Payment","description":"Get a payment by ID","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdRefundsByRefundIdGet","name":"Get Folio Refund","description":"Get a refund by ID","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdPaymentsGet","name":"List Folio Payments","description":"Get a list of payments","resource":"FolioPayments"},{"operation":"FinanceFoliosByFolioIdRefundsGet","name":"List Folio Refunds","description":"Get a list of refunds","resource":"FolioPayments"},{"operation":"FinanceInvoicesPost","name":"Create Invoice","description":"Creates an invoice for one specific folio","resource":"Invoice"},{"operation":"FinanceInvoicesByIdGet","name":"Get Invoice","description":"Gets invoice data","resource":"Invoice"},{"operation":"FinanceInvoicesByIdPdfGet","name":"Get Invoice Pdf","description":"Gets an invoice PDF file","resource":"Invoice"},{"operation":"FinanceInvoicesPreviewGet","name":"List Invoice Preview","description":"Gets an invoice preview for one specific folio","resource":"Invoice"},{"operation":"FinanceInvoicesPreview-pdfGet","name":"List Invoice Preview Pdf","description":"Gets a preview invoice PDF for one specific folio","resource":"Invoice"},{"operation":"FinanceInvoicesGet","name":"List Invoices","description":"Gets the list of all invoices (the metadata only, not the files)","resource":"Invoice"},{"operation":"FinanceInvoice-actionsByIdCancelPut","name":"Cancel Invoice","description":"Cancels an invoice","resource":"InvoiceAction"},{"operation":"FinanceInvoice-actionsByIdPayPut","name":"Pay Invoice","description":"Marks an invoice as paid","resource":"InvoiceAction"},{"operation":"FinanceAccountsExportPost","name":"Export Accounts","description":"Returns transactions filtered by timestamp for a property for a given period","resource":"SubLedger"},{"operation":"FinanceAccountsExport-dailyPost","name":"Export Accounts Daily","description":"Returns transactions filtered by date (business day) for a property for a given period","resource":"SubLedger"},{"operation":"FinanceAccountsExport-gross-dailyPost","name":"Export Accounts Gross","description":"Returns gross transactions filtered by date (business day) for a property for a given period","resource":"SubLedger"},{"operation":"FinanceAccountsAggregate-dailyPost","name":"Get Account Aggregate","description":"Aggregates transactions by date (business day) for all accounts and a given period","resource":"SubLedger"},{"operation":"FinanceAccountsAggregate-pairs-dailyPost","name":"Get Account Aggregate Pairs","description":"Aggregates transactions pairs by date (business day) for all accounts and a given period","resource":"SubLedger"},{"operation":"FinanceAccountsByNumberGet","name":"Get Account By Number","description":"Returns one account","resource":"SubLedger"},{"operation":"FinanceAccountsAggregatePost","name":"Get Accounts Aggregate","description":"Aggregates transactions by timestamp for all accounts and a given period","resource":"SubLedger"},{"operation":"FinanceAccountsSchemaGet","name":"List Account Schema","description":"Returns the chart of accounts of the subledger","resource":"SubLedger"},{"operation":"FinanceAccountsChild-accountsGet","name":"List Child Accounts","description":"Returns a list of child accounts for a specified parent account","resource":"SubLedger"},{"operation":"FinanceExternal-accountsGet","name":"List External Accounts","description":"Returns a list of external accounts","resource":"SubLedger"},{"operation":"FinanceGlobal-accountsGet","name":"List Global Accounts","description":"Returns a list of global accounts","resource":"SubLedger"},{"operation":"FinanceGuest-accountsGet","name":"List Guest Accounts","description":"Returns a list of guest accounts","resource":"SubLedger"},{"operation":"FinanceTypesCurrenciesGet","name":"List Currencies","description":"Returns a list of all currencies","resource":"Types"},{"operation":"FinanceTypesPayment-methodsGet","name":"List Payment Methods","description":"Returns a list of all supported payment methods","resource":"Types"},{"operation":"FinanceTypesService-typesGet","name":"List Service Types","description":"Returns a list of all supported service types","resource":"Types"},{"operation":"FinanceTypesVatGet","name":"List Vat Types","description":"Returns a list of all VAT types","resource":"Types"},{"operation":"InventoryPropertiesPost","name":"Create Property","description":"Creates a property","resource":"Property"},{"operation":"InventoryPropertiesByIdGet","name":"Get Property","description":"Get a property","resource":"Property"},{"operation":"InventoryPropertiesGet","name":"List Properties","description":"Get a properties list","resource":"Property"},{"operation":"InventoryPropertiesByIdPatch","name":"Update Property","description":"Allows to modify property","resource":"Property"},{"operation":"InventoryUnitsByIdHead","name":"Check Unit Exists","description":"Check if a unit exists","resource":"Unit"},{"operation":"InventoryUnits$countGet","name":"Count Units","description":"Returns number of units","resource":"Unit"},{"operation":"InventoryUnitsBulkPost","name":"Create Multiple Units","resource":"Unit"},{"operation":"InventoryUnitsPost","name":"Create Unit","description":"Create a unit","resource":"Unit"},{"operation":"InventoryUnitsByIdDelete","name":"Delete Unit","description":"Delete a unit","resource":"Unit"},{"operation":"InventoryUnitsByIdGet","name":"Get Unit","description":"Get a unit","resource":"Unit"},{"operation":"InventoryUnitsGet","name":"List Units","description":"Get a units list","resource":"Unit"},{"operation":"InventoryUnitsPatch","name":"Update Multiple Units","description":"Allows to patch one or more units","resource":"Unit"},{"operation":"InventoryUnitsByIdPatch","name":"Update Unit","description":"Allows to patch unit","resource":"Unit"},{"operation":"InventoryUnit-attributesByIdHead","name":"Check Unit Attribute Exists","description":"Check if a unit attribute exists","resource":"UnitAttribute"},{"operation":"InventoryUnit-attributesPost","name":"Create Unit Attribute","description":"Create a unit attribute","resource":"UnitAttribute"},{"operation":"InventoryUnit-attributesByIdGet","name":"Get Unit Attribute","description":"Get unit attribute by id","resource":"UnitAttribute"},{"operation":"InventoryUnit-attributesGet","name":"List Unit Attributes","description":"Get unit attribute list","resource":"UnitAttribute"},{"operation":"InventoryUnit-attributesByIdPatch","name":"Update Unit Attribute","description":"Allows to modify unit attribute","resource":"UnitAttribute"},{"operation":"InventoryUnit-groupsByIdHead","name":"Check Unit Group Exists","description":"Check if a unit group exists","resource":"UnitGroup"},{"operation":"InventoryUnit-groups$countGet","name":"Count Unit Groups","description":"Returns number of unit groups","resource":"UnitGroup"},{"operation":"InventoryUnit-groupsPost","name":"Create Unit Group","description":"Create a unit group","resource":"UnitGroup"},{"operation":"InventoryUnit-groupsByIdGet","name":"Get Unit Group","description":"Get a unit group","resource":"UnitGroup"},{"operation":"InventoryUnit-groupsGet","name":"List Unit Groups","description":"Get all unit groups, or all unit groups for a property","resource":"UnitGroup"},{"operation":"InventoryUnit-groupsByIdPut","name":"Update Unit Group","description":"Replace a unit group","resource":"UnitGroup"},{"operation":"LogsBookingReservationGet","name":"List Reservation Logs","description":"Returns reservation change log entries sorted by the timestamp","resource":"BookingLogs"},{"operation":"LogsFinanceFolioGet","name":"List Folio Logs","description":"Returns folio change log entries sorted by the timestamp","resource":"FinanceLogs"},{"operation":"LogsFinanceNight-auditGet","name":"List Night Audit Logs","description":"Returns the night audit logs","resource":"FinanceLogs"},{"operation":"LogsFinanceTransactions-exportGet","name":"List Transaction Export Logs","description":"Returns the audit log for all accounting exports that have been done","resource":"FinanceLogs"},{"operation":"OperationsMaintenancesByIdHead","name":"Check Maintenance Exists","description":"Check if a maintenance exists","resource":"Maintenance"},{"operation":"OperationsMaintenances$countGet","name":"Count Maintenances","description":"Returns number of maintenances","resource":"Maintenance"},{"operation":"OperationsMaintenancesPost","name":"Create Maintenance","description":"Create a new maintenance window","resource":"Maintenance"},{"operation":"OperationsMaintenancesBulkPost","name":"Create Multiple Maintenances","resource":"Maintenance"},{"operation":"OperationsMaintenancesByIdDelete","name":"Delete Maintenance","description":"Delete a maintenance","resource":"Maintenance"},{"operation":"OperationsMaintenancesByIdGet","name":"Get Maintenance","description":"Get a specific maintenance","resource":"Maintenance"},{"operation":"OperationsMaintenancesGet","name":"List Maintenances","description":"Get list of maintenances","resource":"Maintenance"},{"operation":"OperationsMaintenancesByIdPatch","name":"Update Maintenance","description":"Modify a maintenance","resource":"Maintenance"},{"operation":"OperationsNight-auditPut","name":"Run Night Audit","description":"Performs the night audit for one property","resource":"Operations"},{"operation":"OperationsUnits-conditionPut","name":"Update Units Condition","description":"Change the condition of a unit","resource":"Operations"},{"operation":"SettingsAge-categoriesPost","name":"Create Age Category","description":"Create an age category","resource":"AgeCategory"},{"operation":"SettingsAge-categoriesByIdGet","name":"Get Age Category","description":"Get an age category","resource":"AgeCategory"},{"operation":"SettingsAge-categoriesGet","name":"List Age Categories","description":"Get an age category list","resource":"AgeCategory"},{"operation":"SettingsAge-categoriesByIdPatch","name":"Update Age Category","description":"Allows to modify properties of an age category","resource":"AgeCategory"},{"operation":"RateplanCancellation-policiesPost","name":"Create Cancellation Policy","description":"Create a cancellation policy","resource":"CancellationPolicy"},{"operation":"RateplanCancellation-policiesByIdGet","name":"Get Cancellation Policy","description":"Get a specific cancellation policy","resource":"CancellationPolicy"},{"operation":"RateplanCancellation-policiesGet","name":"List Cancellation Policies","description":"Get all cancellation policies","resource":"CancellationPolicy"},{"operation":"RateplanCancellation-policiesByIdPatch","name":"Update Cancellation Policy","description":"Allows to modify properties of a cancellation policy","resource":"CancellationPolicy"},{"operation":"RateplanCompaniesPost","name":"Create Company","description":"Create a company","resource":"Company"},{"operation":"RateplanCompaniesByIdGet","name":"Get Company","description":"Get a company","resource":"Company"},{"operation":"RateplanCompaniesGet","name":"List Companies","description":"Get a list of companies","resource":"Company"},{"operation":"RateplanCompaniesByIdPatch","name":"Update Company","description":"Modify a company","resource":"Company"},{"operation":"RateplanCorporate-codesCodesGet","name":"List Corporate Codes","description":"Returns a list of corporate codes","resource":"CorporateCodes"},{"operation":"RateplanNo-show-policiesPost","name":"Create No Show Policy","description":"Create a no-show policy","resource":"NoShowPolicy"},{"operation":"RateplanNo-show-policiesByIdGet","name":"Get No Show Policy","description":"Get a specific no-show policy","resource":"NoShowPolicy"},{"operation":"RateplanNo-show-policiesGet","name":"List No Show Policies","description":"Get all no-show policies","resource":"NoShowPolicy"},{"operation":"RateplanNo-show-policiesByIdPatch","name":"Update No Show Policy","description":"Allows to modify properties of a no-show policy","resource":"NoShowPolicy"},{"operation":"RateplanPromo-codesCodesGet","name":"List Promo Codes","description":"Returns a list of promo codes","resource":"PromoCodes"},{"operation":"RateplanRate-plansByIdRatesGet","name":"Get Rates","description":"Returns a list of rates","resource":"Rate"},{"operation":"RateplanRatesPatch","name":"Update Multiple Rates","description":"Allows to patch the rates of multiple rate plans","resource":"Rate"},{"operation":"RateplanRate-plansByIdRatesPut","name":"Update Rates","description":"Initializes and changes the rates for the rate plan","resource":"Rate"},{"operation":"RateplanRate-plansPost","name":"Create Rate Plan","description":"Create a rate plan","resource":"RatePlan"},{"operation":"RateplanRate-plansByIdGet","name":"Get Rate Plan","description":"Get a rate plan","resource":"RatePlan"},{"operation":"RateplanRate-plansGet","name":"List Rate Plans","description":"Get a rate plan list","resource":"RatePlan"},{"operation":"RateplanRate-plansPatch","name":"Update Multiple Rate Plans","description":"Allows to patch one or more rate plans","resource":"RatePlan"},{"operation":"RateplanRate-plansByIdPut","name":"Update Rate Plan","description":"Replace a rate plan","resource":"RatePlan"},{"operation":"RateplanServicesPost","name":"Create Service","description":"Create a service","resource":"Service"},{"operation":"RateplanServicesByIdGet","name":"Get Service","description":"Get a specific service","resource":"Service"},{"operation":"RateplanServicesGet","name":"List Services","description":"Get all services","resource":"Service"},{"operation":"RateplanServicesByIdPatch","name":"Update Service","description":"Modify a service","resource":"Service"},{"operation":"ReportsReportsArrivalsGet","name":"List Arrivals Report","description":"Returns the number of arrivals in a month for a property","resource":"Reports"},{"operation":"ReportsReportsCompany-invoices-vatGet","name":"List Company Invoices Vat Report","description":"Returns the list of company invoices with information on the company and the VAT breakdown","resource":"Reports"},{"operation":"ReportsReportsOrdered-servicesGet","name":"List Ordered Services Report","description":"List of ordered services","resource":"Reports"},{"operation":"ReportsReportsProperty-performanceGet","name":"List Property Performance Report","description":"Returns the property performance report which includes the ADR and the RevPAR for each business day","resource":"Reports"},{"operation":"ReportsReportsRevenuesGet","name":"List Revenues Report","description":"Returns the revenues report for a property","resource":"Reports"},{"operation":"SettingsCapture-policiesByIdGet","name":"Get Capture Policy","description":"Get a specific capture policy","resource":"CapturePolicies"},{"operation":"SettingsCapture-policiesGet","name":"List Capture Policies","description":"Get all capture policies","resource":"CapturePolicies"},{"operation":"SettingsCapture-policiesByIdPatch","name":"Update Capture Policy","description":"Allows to modify properties of a capture policy","resource":"CapturePolicies"},{"operation":"SettingsCity-taxPost","name":"Create City Tax","description":"Create a city tax","resource":"CityTax"},{"operation":"SettingsCity-taxByIdGet","name":"Get City Tax","description":"Get a specific city tax","resource":"CityTax"},{"operation":"SettingsCity-taxGet","name":"List City Taxes","description":"Get all city taxes","resource":"CityTax"},{"operation":"SettingsCity-taxByIdPatch","name":"Update City Tax","description":"Allows to modify city tax","resource":"CityTax"},{"operation":"SettingsSub-accountsByIdHead","name":"Check Sub Account Exists","description":"Check if the sub-account exists","resource":"CustomSubAccounts"},{"operation":"SettingsSub-accounts$countGet","name":"Count Sub Accounts","description":"Returns number of sub-accounts","resource":"CustomSubAccounts"},{"operation":"SettingsSub-accountsPost","name":"Create Sub Account","description":"Create a sub-account","resource":"CustomSubAccounts"},{"operation":"SettingsSub-accountsByIdGet","name":"Get Sub Account","description":"Returns one sub-account","resource":"CustomSubAccounts"},{"operation":"SettingsSub-accountsGet","name":"List Sub Accounts","description":"Returns a list of all sub-accounts","resource":"CustomSubAccounts"},{"operation":"SettingsSub-accountsByIdPatch","name":"Update Sub Account","description":"Allows to modify the name of the sub-account","resource":"CustomSubAccounts"},{"operation":"SettingsFeaturesByPropertyIdGet","name":"Get Feature Settings","description":"Get feature settings for a property","resource":"FeatureSettings"},{"operation":"SettingsFeaturesByPropertyIdPatch","name":"Update Feature Settings","description":"Allows to modify feature settings","resource":"FeatureSettings"},{"operation":"SettingsInvoice-addressGet","name":"List Invoice Addresses","description":"Get invoice addresses","resource":"InvoiceAddress"},{"operation":"SettingsInvoice-addressPatch","name":"Patch Invoice Addresses","description":"Change fields in the invoice address of one or more properties","resource":"InvoiceAddress"},{"operation":"SettingsInvoice-addressPut","name":"Update Invoice Addresses","description":"Create or update invoice addresses for one or more properties","resource":"InvoiceAddress"},{"operation":"SettingsLanguagesGet","name":"List Language Settings","description":"Get the language settings for the account","resource":"Languages"},{"operation":"SettingsLanguagesPut","name":"Update Language Settings","description":"Replaces the language settings for the account","resource":"Languages"},{"operation":"SettingsMarket-segmentsByIdHead","name":"Check Market Segment Exists","description":"Check if a market segment exists","resource":"MarketSegment"},{"operation":"SettingsMarket-segments$countGet","name":"Count Market Segments","description":"Returns number of market segments","resource":"MarketSegment"},{"operation":"SettingsMarket-segmentsPost","name":"Create Market Segment","description":"Create a market segment","resource":"MarketSegment"},{"operation":"SettingsMarket-segmentsByIdGet","name":"Get Market Segment","description":"Get a market segment","resource":"MarketSegment"},{"operation":"SettingsMarket-segmentsGet","name":"List Market Segments","description":"Returns a list of all market segments, filtered by the specified parameters","resource":"MarketSegment"},{"operation":"SettingsMarket-segmentsByIdPatch","name":"Update Market Segment","description":"Allows to modify market segment","resource":"MarketSegment"},{"operation":"SettingsPropertiesByIdGet","name":"Get Property Settings","resource":"PropertySettings"},{"operation":"SettingsPropertiesByPropertyIdTime-slice-definitionsPost","name":"Create Time Slice Definition","description":"Creates a time slice definition","resource":"TimeSliceDefinitions"},{"operation":"SettingsPropertiesByPropertyIdTime-slice-definitionsByIdGet","name":"Get Time Slice Definition","description":"Get a specific time slice definition","resource":"TimeSliceDefinitions"},{"operation":"SettingsPropertiesByPropertyIdTime-slice-definitionsGet","name":"List Time Slice Definitions","description":"Get time slice definitions","resource":"TimeSliceDefinitions"},{"operation":"SettingsPropertiesByPropertyIdTime-slice-definitionsByIdPatch","name":"Update Time Slice Definition","description":"Modifies a specific time slice definition for the property","resource":"TimeSliceDefinitions"},{"operation":"PingerPost","name":"Ping","description":"Health check endpoint","resource":"HealthCheck"},{"operation":"SubscriptionsPost","name":"Create Subscription","description":"Creates subscription","resource":"Subscriptions"},{"operation":"SubscriptionsByIdDelete","name":"Delete Subscription","description":"Deletes subscription","resource":"Subscriptions"},{"operation":"SubscriptionsByIdGet","name":"Get Subscription","description":"Get a subscription","resource":"Subscriptions"},{"operation":"SubscriptionsGet","name":"List Subscriptions","description":"Get all subscriptions created for the current account and client","resource":"Subscriptions"},{"operation":"SubscriptionsByIdPut","name":"Update Subscription","description":"Updates subscription","resource":"Subscriptions"}]

npm_readme:
  # n8n-nodes-apaleo

  ![Apaleo Logo](nodes/Apaleo/apaleo.svg)

  This package provides n8n nodes to interact with the [Apaleo API](https://docs.apaleo.com/), allowing you to automate workflows with Apaleo's property management system.

  ## Features

  This integration provides two nodes:

  - **Apaleo**: Perform operations on over 40 Apaleo resources including accounts, reservations, properties, and more
  - **Apaleo Trigger**: Receive webhook events from Apaleo to trigger workflows

  ## Prerequisites

  - [n8n](https://n8n.io/) (version 1.0.0 or later)
  - Apaleo account with API credentials (Client ID and Client Secret)
  - Node.js (version 20.15 or later)

  ## Installation

  ### In n8n Desktop / Self-hosted

  1. Go to **Settings > Community Nodes**
  2. Click on **Install**
  3. Enter `n8n-nodes-apaleo` in the **Enter npm package name** field
  4. Click on **Install**

  ### Manual Installation

  1. Clone this repository:
     ```
     git clone https://github.com/apaleo/n8n-nodes-apaleo.git
     ```
  2. Navigate to the project directory:
     ```
     cd n8n-nodes-apaleo
     ```
  3. Install dependencies:
     ```
     npm install
     ```
  4. Build the package:
     ```
     npm run build
     ```
  5. Link to your n8n installation:
     ```
     npm link
     ```
  6. In your n8n installation directory:
     ```
     npm link n8n-nodes-apaleo
     ```

  ## Credentials

  To use the Apaleo nodes, you need to set up credentials:

  1. In n8n, go to **Credentials**
  2. Click on **Create New**
  3. Search for "Apaleo OAuth2 API"
  4. Enter your Apaleo Client ID and Client Secret
  5. Save the credentials

  ## Usage

  ### Apaleo Node

  The Apaleo node allows you to interact with the following resources:

  #### Property Management
  - **Property**: Manage hotel properties, including details, settings, and configurations
  - **Unit**: Handle individual room/unit operations and information
  - **UnitGroup**: Manage groups of units with similar characteristics
  - **UnitAttribute**: Work with attributes that define unit features and amenities
  - **PropertySettings**: Configure property-specific settings and preferences
  - **PropertyActions**: Perform specific actions on properties

  #### Reservation Management
  - **Reservation**: Create, retrieve, and manage guest reservations
  - **ReservationActions**: Execute specific actions on reservations (check-in, check-out, etc.)
  - **ReservationAvailability**: Check availability for specific reservation scenarios
  - **Block**: Manage room blocks for groups and events
  - **BlockActions**: Perform actions on blocks (create, modify, cancel)
  - **Booking**: Handle booking operations across the system
  - **Group**: Manage group reservations and associated data

  #### Financial Operations
  - **Folio**: Access and manage guest folios containing charges and payments
  - **FolioActions**: Perform specific actions on folios
  - **FolioPayments**: Handle payment operations within folios
  - **Invoice**: Create, retrieve, and manage invoices
  - **InvoiceAction**: Execute specific actions on invoices
  - **SubLedger**: Access financial sub-ledger information
  - **CapturePolicies**: Manage payment capture policies
  - **CustomSubAccounts**: Work with custom financial sub-accounts

  #### Rate and Pricing
  - **Rate**: Manage rate information and pricing
  - **RatePlan**: Configure and manage rate plans
  - **Offer**: Handle special offers and promotions
  - **PromoCodes**: Manage promotional codes for special rates
  - **CorporateCodes**: Handle corporate rate codes and agreements
  - **CancellationPolicy**: Configure and manage cancellation policies
  - **NoShowPolicy**: Set up and manage no-show policies

  #### Account Management
  - **Account**: Manage account information and settings
  - **AccountActions**: Perform specific actions on accounts
  - **Company**: Handle company account information and relationships

  #### Reporting and Logs
  - **Reports**: Access various system reports
  - **BookingLogs**: View logs of booking-related activities
  - **FinanceLogs**: Access logs of financial transactions and changes
  - **Operations**: Perform operational tasks and reporting

  #### Additional Resources
  - **Availability**: Check general availability across properties
  - **Types**: Access system type definitions
  - **UiIntegrations**: Manage UI integration settings
  - **Maintenance**: Handle maintenance-related operations
  - **AgeCategory**: Manage age categories for guests
  - **CityTax**: Configure and manage city tax settings
  - **FeatureSettings**: Adjust feature-specific settings
  - **InvoiceAddress**: Manage invoice address information
  - **Languages**: Configure language settings
  - **MarketSegment**: Manage market segment definitions
  - **TimeSliceDefinitions**: Configure time slice settings
  - **HealthCheck**: Verify system health and connectivity
  - **Subscriptions**: Manage API event subscriptions

  For each resource, you can select from available operations like GET, POST, PUT, DELETE, etc. based on the Apaleo API capabilities.

  ### Apaleo Trigger Node

  Use this node to start workflows when specific events occur in Apaleo, such as:

  - Reservation created, modified, or canceled
  - Check-in or check-out completed
  - Payment processed or refunded
  - Folio or invoice created or updated
  - Property settings changed
  - Rate plan or availability updates
  - And many more events from the Apaleo system

  The trigger node works by subscribing to Apaleo's webhook events, allowing your n8n workflows to react in real-time to changes in your Apaleo environment.

  ## Development

  If you want to contribute or modify the nodes:

  1. Clone the repository
  2. Install dependencies:
     ```
     npm install
     ```
  3. Start development mode:
     ```
     npm run dev
     ```
  4. Make your changes
  5. Build the package:
     ```
     npm run build
     ```
  6. Test your changes locally

  ## License

  [MIT](LICENSE.md)

  ## About Apaleo

  [Apaleo](https://apaleo.com/) is a cloud-based property management system (PMS) that provides APIs for the hospitality industry, allowing seamless integration with various hotel systems and services.

ai_documentation_summary:
  {"purpose":"This n8n node package enables automation with Apaleo's property management system by providing nodes to interact with over 40 API resources and trigger workflows on system events.","capabilities":["Access and manage hotel properties, units, and unit groups","Create, retrieve, and manage guest reservations","Handle financial operations including folios, invoices, and payments","Manage rate plans, offers, and promotional codes","Monitor account settings and company information","Access system reports and activity logs","Check availability across properties","Configure UI integrations and maintenance settings","Receive webhook events for real-time workflow triggers"],"authentication":"OAuth2 API (Client ID and Client Secret)","commonUseCases":["Automate hotel reservation workflows","Trigger notifications on payment changes","Sync property data between systems","Generate reports based on booking activity","Automate check-in/check-out processes"],"limitations":["Requires n8n version 1.0.0 or later","Requires Node.js version 20.15 or later for manual installation","Requires valid Apaleo API credentials"],"relatedNodes":["Apaleo Trigger","Apaleo","Webhook","HTTP Request"]}


node_type: n8n-nodes-quicknode.quicknodeRpc
package_name: n8n-nodes-quicknode
display_name: Quicknode RPC
description: Interact with blockchain via Quicknode RPC
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: mcastilla
author_github_url: https://github.com/quiknode-labs/n8n.git
npm_package_name: n8n-nodes-quicknode
npm_version: 0.1.4
community_fetched_at: 2026-03-25T21:19:40.926Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get the balance of an address",
          "description": "Get the balance of an address"
        },
        {
          "name": "Get Block Number",
          "value": "getBlockNumber",
          "action": "Get the current block number",
          "description": "Get the current block number"
        },
        {
          "name": "Get Block",
          "value": "getBlock",
          "action": "Get block information",
          "description": "Get block information by number or hash"
        },
        {
          "name": "Get Transaction",
          "value": "getTransaction",
          "action": "Get transaction details",
          "description": "Get transaction details by hash"
        },
        {
          "name": "Get Transaction Receipt",
          "value": "getTransactionReceipt",
          "action": "Get transaction receipt",
          "description": "Get transaction receipt by hash"
        },
        {
          "name": "Get Transaction Count",
          "value": "getTransactionCount",
          "action": "Get transaction count for address",
          "description": "Get the number of transactions sent from an address"
        },
        {
          "name": "Get Code",
          "value": "getCode",
          "action": "Get code at address",
          "description": "Get the code at a specific address (for smart contracts)"
        },
        {
          "name": "Get Gas Price",
          "value": "getGasPrice",
          "action": "Get current gas price",
          "description": "Get the current gas price"
        },
        {
          "name": "Estimate Gas",
          "value": "estimateGas",
          "action": "Estimate gas for transaction",
          "description": "Estimate gas for a transaction"
        },
        {
          "name": "Call",
          "value": "call",
          "action": "Execute read-only call",
          "description": "Execute a call without creating a transaction"
        },
        {
          "name": "Custom RPC",
          "value": "customRpc",
          "action": "Execute custom RPC method",
          "description": "Execute a custom RPC method"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get the balance of an address",
      "description": "Get the balance of an address"
    },
    {
      "name": "Get Block Number",
      "value": "getBlockNumber",
      "action": "Get the current block number",
      "description": "Get the current block number"
    },
    {
      "name": "Get Block",
      "value": "getBlock",
      "action": "Get block information",
      "description": "Get block information by number or hash"
    },
    {
      "name": "Get Transaction",
      "value": "getTransaction",
      "action": "Get transaction details",
      "description": "Get transaction details by hash"
    },
    {
      "name": "Get Transaction Receipt",
      "value": "getTransactionReceipt",
      "action": "Get transaction receipt",
      "description": "Get transaction receipt by hash"
    },
    {
      "name": "Get Transaction Count",
      "value": "getTransactionCount",
      "action": "Get transaction count for address",
      "description": "Get the number of transactions sent from an address"
    },
    {
      "name": "Get Code",
      "value": "getCode",
      "action": "Get code at address",
      "description": "Get the code at a specific address (for smart contracts)"
    },
    {
      "name": "Get Gas Price",
      "value": "getGasPrice",
      "action": "Get current gas price",
      "description": "Get the current gas price"
    },
    {
      "name": "Estimate Gas",
      "value": "estimateGas",
      "action": "Estimate gas for transaction",
      "description": "Estimate gas for a transaction"
    },
    {
      "name": "Call",
      "value": "call",
      "action": "Execute read-only call",
      "description": "Execute a call without creating a transaction"
    },
    {
      "name": "Custom RPC",
      "value": "customRpc",
      "action": "Execute custom RPC method",
      "description": "Execute a custom RPC method"
    }
  ]

npm_readme:
  # n8n-nodes-quicknode

  This is an n8n community node for interacting with blockchain networks via [Quicknode](https://www.quicknode.com/) RPC endpoints.

  ## Features

  - **10 Built-in RPC Operations**:
    - Get Balance - Check ETH/token balance of any address
    - Get Block Number - Get the latest block number
    - Get Block - Retrieve block details by number or hash
    - Get Transaction - Fetch transaction details
    - Get Transaction Receipt - Get transaction receipt with logs
    - Get Transaction Count - Get nonce for an address
    - Get Code - Check if an address is a contract
    - Get Gas Price - Current network gas price
    - Estimate Gas - Estimate gas for a transaction
    - Call - Execute read-only smart contract calls

  - **Custom RPC Support** - Call any JSON-RPC method not listed above
  - **Multi-network Support** - Works with any EVM-compatible chain
  - **Human-readable Results** - Automatic conversion of hex values to decimal/ETH

  ## Installation

  ### Community Nodes (Recommended)

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

  ### Manual Installation

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

  ## Prerequisites

  1. Create a [Quicknode account](https://www.quicknode.com/)
  2. Create an endpoint for your desired network (Ethereum, Polygon, etc.)
  3. Copy your endpoint URL (it includes authentication)

  ## Configuration

  ### Credentials

  1. In n8n, go to **Credentials > New**
  2. Search for "Quicknode API"
  3. Enter your Quicknode endpoint URL
  4. Select your network (for reference only)

  Your endpoint URL should look like:
  ```
  https://your-endpoint-name.quiknode.pro/your-token-here/
  ```

  ## Local Development

  ### Setup

  ```bash
  # Clone the repository
  git clone https://github.com/quiknode-labs/n8n.git
  cd n8n

  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Link for local testing
  npm link
  ```

  ### Testing with n8n

  ```bash
  # In your n8n installation directory
  cd ~/.n8n
  npm link n8n-nodes-quicknode

  # Start n8n
  n8n start
  ```

  Or use Docker:

  ```bash
  docker run -it --rm \
    --name n8n \
    -p 5678:5678 \
    -v ~/.n8n:/home/node/.n8n \
    -v $(pwd):/home/node/.n8n/nodes/n8n-nodes-quicknode \
    n8nio/n8n
  ```

  ### Development Commands

  ```bash
  npm run dev      # Watch mode for TypeScript
  npm run build    # Full production build
  npm run lint     # Run ESLint
  npm run format   # Format with Prettier
  ```

  ## Usage Examples

  ### Get ETH Balance

  1. Add the **Quicknode RPC** node
  2. Select **Get Balance** operation
  3. Enter an Ethereum address
  4. Execute to get balance in Wei and ETH

  ### Read Smart Contract

  1. Add the **Quicknode RPC** node
  2. Select **Call** operation
  3. Enter the contract address in "To Address"
  4. Enter the encoded function call in "Data"
  5. Execute to get the result

  ### Custom RPC Method

  1. Add the **Quicknode RPC** node
  2. Select **Custom RPC** operation
  3. Enter the RPC method (e.g., `eth_getLogs`)
  4. Enter parameters as JSON array
  5. Execute

  ## Supported Networks

  Any Quicknode-supported EVM network:
  - Ethereum (Mainnet, Sepolia, Goerli)
  - Polygon (Mainnet, Mumbai)
  - Arbitrum One
  - Optimism
  - Base
  - BSC
  - Avalanche C-Chain
  - And more...

  ## Error Handling

  The node includes:
  - Address validation (0x + 40 hex chars)
  - Transaction hash validation (0x + 64 hex chars)
  - Block tag validation
  - Proper RPC error propagation
  - Continue on fail support

  ## License

  MIT

  ## Resources

  - [Quicknode Documentation](https://www.quicknode.com/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables blockchain interactions via Quicknode RPC endpoints, supporting built-in operations and custom JSON-RPC calls across EVM-compatible networks.","capabilities":["Get Balance - Check ETH/token balance of any address","Get Block Number - Retrieve latest block number","Get Block - Fetch block details by number or hash","Get Transaction - Fetch transaction details","Get Transaction Receipt - Get transaction receipt with logs","Get Transaction Count - Get nonce for an address","Get Code - Check if an address is a contract","Get Gas Price - Get current network gas price","Estimate Gas - Estimate gas for a transaction","Call - Execute read-only smart contract calls"],"authentication":"API key required (via Quicknode endpoint URL containing authentication token)","commonUseCases":["Checking ETH or token balances of addresses","Reading smart contract data via read-only calls","Fetching transaction details and receipts","Estimating gas costs for transactions","Interacting with custom blockchain APIs"],"limitations":["Requires a paid Quicknode account and endpoint URL","Limited to EVM-compatible networks supported by Quicknode","Custom RPC methods must be manually specified"],"relatedNodes":["n8n-nodes-webhook.webhook","n8n-nodes-quicknode.quicknodeRpc"]}


node_type: n8n-nodes-umich-tdx.umichTdx
package_name: n8n-nodes-umich-tdx
display_name: UMich TDX
description: Connect to UMich TDX
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: cpuzzuol
author_github_url: https://github.com/umich-its-ai/
npm_package_name: n8n-nodes-umich-tdx
npm_version: 1.0.5
community_fetched_at: 2026-03-25T21:19:40.926Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "ticketSearch",
      "options": [
        {
          "name": "Ticket Search",
          "value": "ticketSearch"
        },
        {
          "name": "Ticket Creation",
          "value": "ticketCreation"
        },
        {
          "name": "Ticket Modification",
          "value": "ticketModification"
        },
        {
          "name": "User Lookup",
          "value": "userLookup"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTicketById",
      "options": [
        {
          "name": "Get Ticket by ID",
          "value": "getTicketById",
          "action": "Get a single TDX ticket",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a single TDX ticket by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createTicket",
      "options": [
        {
          "name": "Create Ticket",
          "value": "createTicket",
          "action": "Create a new TDX ticket",
          "routing": {
            "send": {
              "preSend": [
                null,
                null,
                null
              ]
            },
            "request": {
              "method": "POST"
            }
          },
          "description": "Create a new TDX ticket"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketCreation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addCommentToTicket",
      "options": [
        {
          "name": "Add Comment to Ticket",
          "value": "addCommentToTicket",
          "action": "Add a comment to a TDX ticket",
          "routing": {
            "send": {
              "preSend": [
                null,
                null
              ]
            },
            "request": {
              "method": "POST"
            }
          },
          "description": "Add a comment to a TDX ticket"
        },
        {
          "name": "Add Ticket Contact",
          "value": "addTicketContact",
          "action": "Add a contact to a TDX ticket",
          "routing": {
            "send": {
              "preSend": [
                null,
                null
              ]
            },
            "request": {
              "method": "POST"
            }
          },
          "description": "Add a contact to a TDX ticket"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticketModification"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findUidByUniqname",
      "options": [
        {
          "name": "Find UID by Uniqname",
          "value": "findUidByUniqname",
          "action": "Find TDX UID by Uniqname",
          "routing": {
            "send": {
              "preSend": [
                null,
                null
              ]
            },
            "request": {
              "url": "=people/search",
              "method": "GET"
            }
          },
          "description": "Find a user's internal TDX UID by their U-M Uniqname"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userLookup"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"getTicketById","name":"Get Ticket by ID","description":"Get a single TDX ticket by ID","resource":"ticketSearch"},{"operation":"createTicket","name":"Create Ticket","description":"Create a new TDX ticket","resource":"ticketCreation"},{"operation":"addCommentToTicket","name":"Add Comment to Ticket","description":"Add a comment to a TDX ticket","resource":"ticketModification"},{"operation":"addTicketContact","name":"Add Ticket Contact","description":"Add a contact to a TDX ticket","resource":"ticketModification"},{"operation":"findUidByUniqname","name":"Find UID by Uniqname","description":"Find a user's internal TDX UID by their U-M Uniqname","resource":"userLookup"}]

npm_readme:
  # n8n-nodes-umich-tdx

  This is an n8n community node that provides integration with the University of Michigan (UMich) TeamDynamix (TDX) API. It enables you to interact with UMich TDX services directly from your n8n workflows, including ticket creation, modification, search, and user lookup operations.

  The UMich TDX API is a service that allows programmatic access to TeamDynamix ticket management functionality for University of Michigan systems.

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

  ## Table of Contents

  [Installation](#installation)  
  [Credentials](#credentials)  
  [Resources and Operations](#resources-and-operations)  
  [Validation and Security](#validation-and-security)  
  [Test vs Production Environment](#test-vs-production-environment)  
  [Usage Examples](#usage-examples)  
  [Compatibility](#compatibility)  
  [Resources](#resources)  

  ## Installation

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

  In summary:
  1. Install the package in your n8n instance
  2. Restart n8n
  3. The "UMich TDX" node will be available in the node palette

  ## Credentials

  To use this node, you need to set up OAuth2 credentials with the U-M API Directory.

  ### Prerequisites

  1. **U-M API Directory Account**: You need access to the [U-M API Directory](https://dir.api.it.umich.edu/) or alternatively the [U-M Test API Directory](https://dir-test.api.it.umich.edu).
  2. **API Application**: Create an application in the U-M API Directory with the `tdxticket` scope
  3. **API Key and Secret**: Obtain your API Key (Client ID) and API Secret (Client Secret) from your application

  ### Setting Up Credentials

  1. In n8n, add a new credential of type "UMich TDX OAuth2 API"
  2. Configure the following fields:
     - **Environment**: Choose either "Test" or "Production" (see [Test vs Production Environment](#test-vs-production-environment) below)
     - **App ID**: Your TeamDynamix App ID (numeric value)
     - **API Key**: The "Key" value from your app in the U-M API Directory
     - **API Secret**: The "Secret" value from your app in the U-M API Directory
  3. Click "Connect my account" to authenticate
  4. The credentials will automatically handle OAuth2 token management

  ### Credential Fields

  | Field | Description | Required |
  |-------|-------------|----------|
  | Environment | Choose between Test or Production environment | Yes |
  | App ID | Your TeamDynamix App ID (numeric) | Yes |
  | API Key | Client ID from U-M API Directory | Yes |
  | API Secret | Client Secret from U-M API Directory | Yes |

  ## Resources and Operations

  The UMich TDX node supports four main resources, each with specific operations:

  ### 1. Ticket Search

  Search and retrieve ticket information from TDX.

  #### Operations

  - **Get Ticket by ID**: Retrieve a single TDX ticket by its ID
    - **Parameters**:
      - `Ticket ID` (required): The numeric ID of the ticket to retrieve

  ### 2. Ticket Creation

  Create new tickets in TDX.

  #### Operations

  - **Create Ticket**: Create a new TDX ticket
    - **Required Parameters**:
      - `Title`: The title of the ticket (max 500 characters)
      - `Body`: The description/body of the ticket (max 2000 characters)
      - `Requestor`: Email address of the requestor (must be a valid `@umich.edu` email)
      - `Service ID`: The service ID that the ticket is related to (numeric)
    - **Optional Parameters**:
      - `Responsible Group ID`: The responsible group ID to assign the ticket to (numeric)
    - **Additional Fields** (optional):
      - `Apply Defaults`: Whether to apply default values for unspecified properties (default: `true`)
      - `Enable Notify Reviewer`: Whether reviewer notifications should be enabled (default: `false`)
      - `Notify Requestor`: Whether the requestor should be notified on ticket creation (default: `false`)
      - `Notify Responsible`: Whether responsible resources should be notified (default: `false`)
      - `Allow Requestor Creation`: Whether to create a requestor if not found (default: `true`)
      - `Prefer Requestor Account and Priority`: Use requestor's default account/priority (default: `false`)
    - **Hidden Parameters** (automatically set):
      - `Source ID`: Set to `8` (Systems) by default
      - `Status ID`: Set to `0` by default

  ### 3. Ticket Modification

  Modify existing tickets in TDX.

  #### Operations

  - **Add Comment to Ticket**: Add a comment to an existing TDX ticket
    - **Parameters**:
      - `Ticket ID` (required): The ID of the ticket to modify (numeric)
      - `New Comment` (required): The comment text to add (max 2000 characters)

  - **Add Ticket Contact**: Add a contact (user) to a TDX ticket
    - **Parameters**:
      - `Ticket ID` (required): The ID of the ticket to modify (numeric)
      - `TDX User UID` (required): The internal TDX UID of the user to assign (alphanumeric)

  ### 4. User Lookup

  Look up user information in TDX.

  #### Operations

  - **Find UID by Uniqname**: Find a user's internal TDX UID by their U-M Uniqname
    - **Parameters**:
      - `U-M Uniqname` (required): The uniqname to search for (3-8 lowercase letters only)

  ## Validation and Security

  The node includes comprehensive validation measures to ensure data integrity and security:

  ### Input Validation

  1. **Email Validation**:
     - Must be a valid email format
     - **Must be a `@umich.edu` email address** (enforced)
     - Used for: Requestor Email

  2. **Uniqname Validation**:
     - Must be 3-8 characters long
     - Must contain only lowercase letters
     - Used for: User Lookup operations

  3. **UID Validation**:
     - Must be alphanumeric (letters, numbers, dots, hyphens, underscores)
     - Prevents path traversal attacks
     - Used for: Contact UID, Ticket ID

  4. **Numeric ID Validation**:
     - Must be numeric only
     - Used for: Service ID, Responsible Group ID, Status ID, Source ID, Ticket ID

  5. **Text Length Validation**:
     - **Title**: Maximum 500 characters
     - **Description/Body**: Maximum 2000 characters
     - **Comments**: Maximum 2000 characters
     - Prevents DoS attacks from excessively large payloads

  6. **Source ID Validation**:
     - Only allows specific source IDs
     - Currently only allows `8` (Systems)
     - Can be expanded in the future

  ### Security Features

  - **Path Traversal Protection**: URL path segments are validated to prevent directory traversal attacks (`../`, query strings, etc.)
  - **OAuth2 Authentication**: All requests use secure OAuth2 bearer token authentication
  - **Input Sanitization**: All user inputs are validated before being sent to the API
  - **Environment Isolation**: Test and production environments are completely separate

  ## Test vs Production Environment

  The node supports both Test and Production environments. The environment is selected when configuring credentials.

  ### Test Environment

  - **Base URL**: `https://gw-test.api.it.umich.edu/um/it`
  - **Token URL**: `https://gw-test.api.it.umich.edu/um/oauth2/token`
  - **Use Case**: Development, testing, and experimentation
  - **Data**: Separate from production data

  ### Production Environment

  - **Base URL**: `https://gw.api.it.umich.edu/um/it`
  - **Token URL**: `https://gw.api.it.umich.edu/um/oauth2/token`
  - **Use Case**: Live production workflows
  - **Data**: Real production TDX data

  ### Switching Environments

  To switch between environments:
  1. Create separate credentials for Test and Production
  2. Or update your existing credentials and change the "Environment" field
  3. The node will automatically use the correct API endpoints based on your credential configuration

  **Important**: Always test your workflows in the Test environment before using Production credentials.

  ## Usage Examples

  ### Example 1: Create a Ticket

  1. Add a "UMich TDX" node to your workflow
  2. Select Resource: "Ticket Creation"
  3. Select Operation: "Create Ticket"
  4. Fill in:
     - Title: "Example Ticket"
     - Body: "This is an example ticket created via n8n"
     - Requestor: "user@umich.edu"
     - Service ID: "31"
     - Responsible Group ID: "944" (optional)
  5. Configure additional fields as needed
  6. Execute the workflow

  ### Example 2: Look Up User and Add to Ticket

  1. First node: "User Lookup" → "Find UID by Uniqname"
     - Enter uniqname: "jdoe"
  2. Second node: "Ticket Modification" → "Add Ticket Contact"
     - Ticket ID: "12345"
     - TDX User UID: Use the UID from the first node's output

  ### Example 3: Get Ticket and Add Comment

  1. First node: "Ticket Search" → "Get Ticket by ID"
     - Ticket ID: "12345"
  2. Second node: "Ticket Modification" → "Add Comment to Ticket"
     - Ticket ID: "12345"
     - New Comment: "Status update from automated workflow"

  ## Compatibility

  - **Minimum n8n version**: Compatible with n8n workflow API version 1
  - **Node.js**: Compatible with Node.js versions supported by n8n
  - **TypeScript**: Built with TypeScript 5.9.2

  ## Resources

  ### Documentation

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [U-M API Directory - TDX Ticket API Documentation](https://dir.api.it.umich.edu/docs/tdxticket/1/overview)
  - [TeamDynamix API Documentation](https://solutions.teamdynamix.com/TDWebApi/Home/type/TeamDynamix.Api.Tickets.Ticket)
  - [U-M API Directory](https://dir.api.it.umich.edu/)

  ### Finding IDs

  - **Service ID**: Found in the JSON response when retrieving a ticket via "Ticket Search"
  - **Responsible Group ID**: In TDX, go to the create ticket form, search for groups in the Responsible field, click "View" under the profile, and find the "Group ID" in the upper-left portion of the page
  - **TDX User UID**: Found in the JSON response when using "User Lookup" → "Find UID by Uniqname"

  ### Support

  For issues, questions, or contributions, please refer to the repository:
  - **Repository**: [n8n-umich-tdx](https://github.com/cpuzzuol/n8n-umich-tdx)
  - **Author**: Chris Puzzuoli (cpuzzuol@umich.edu)

  ---

  **Note**: This node is designed specifically for University of Michigan TeamDynamix integration. All email addresses must be `@umich.edu` addresses, and you must have appropriate access to the U-M API Directory to use this node.

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the University of Michigan TeamDynamix (TDX) API to manage ticket operations including creation, modification, search, and user lookup.","capabilities":["Create TDX tickets with customizable parameters","Modify existing tickets by adding comments","Modify existing tickets by adding contacts","Search and retrieve tickets by ID","Lookup user UIDs by U-M Uniqname","OAuth2 authentication with U-M API Directory","Support for both Test and Production environments"],"authentication":"OAuth2 (U-M API Directory with tdxticket scope)","commonUseCases":["Automating IT support ticket creation in UMich systems","Integrating UMich service requests into n8n workflows","Looking up user IDs for automated ticket assignments","Managing service tickets programmatically"],"limitations":["Requires specific U-M API Directory account access","Requestor email must be a valid @umich.edu address","Uniqname must be 3-8 lowercase letters only","Limited to UMich-specific email domains for requestors","Requires manual setup of API application with tdxticket scope"],"relatedNodes":["n8n-nodes-base.oauth2","n8n-nodes-base.httpRequest","n8n-nodes-base.email"]}


node_type: @restream/n8n-nodes-restream.restream
package_name: @restream/n8n-nodes-restream
display_name: Restream
description: Access Restream Events, Recordings, and Clips using the Restream API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: mturusov
author_github_url: https://github.com/restreamio/n8n-nodes-restream.git
npm_package_name: @restream/n8n-nodes-restream
npm_version: 0.2.0
community_fetched_at: 2026-03-25T21:19:40.927Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "clipProject",
      "options": [
        {
          "name": "Event",
          "value": "event"
        },
        {
          "name": "Event Recording",
          "value": "eventRecording"
        },
        {
          "name": "Clip Project",
          "value": "clipProject"
        },
        {
          "name": "Clip",
          "value": "clip"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getHistory",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "routing": {
            "request": {
              "url": "=/v2/user/events/{{$parameter.eventId}}",
              "method": "GET"
            }
          },
          "description": "Get a single event by ID"
        },
        {
          "name": "Get History",
          "value": "getHistory",
          "action": "Get event history",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/user/events/history",
              "method": "GET"
            }
          },
          "description": "Get a list of finished and missed events"
        },
        {
          "name": "Get In Progress",
          "value": "getInProgress",
          "action": "Get in progress events",
          "routing": {
            "request": {
              "url": "/v2/user/events/in-progress",
              "method": "GET"
            }
          },
          "description": "Get a list of currently in-progress events"
        },
        {
          "name": "Get Upcoming",
          "value": "getUpcoming",
          "action": "Get upcoming events",
          "routing": {
            "request": {
              "url": "/v2/user/events/upcoming",
              "method": "GET"
            }
          },
          "description": "Get a list of upcoming events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get recordings for an event",
          "routing": {
            "request": {
              "url": "=/v2/user/events/{{$parameter.eventId}}/recordings",
              "method": "GET"
            }
          },
          "description": "Get many recordings (video and audio) for a specific event"
        },
        {
          "name": "Get Download URL",
          "value": "getDownloadUrl",
          "action": "Get a download URL for a recording",
          "routing": {
            "request": {
              "url": "=/v2/user/events/{{$parameter.eventId}}/recordings/download-url",
              "method": "POST"
            }
          },
          "description": "Generate a temporary download URL for a specific recording file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "eventRecording"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many clip projects",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "projects"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/user/clips/projects",
              "method": "GET"
            }
          },
          "description": "Get a list of many clip projects for the authenticated user"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a clip project",
          "routing": {
            "request": {
              "url": "=/v2/user/clips/projects/{{$parameter.projectId}}",
              "method": "GET"
            }
          },
          "description": "Get a single clip project with its clips and posted clips"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clipProject"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "download",
      "options": [
        {
          "name": "Get Download URL",
          "value": "download",
          "action": "Get a download URL for a clip",
          "routing": {
            "request": {
              "url": "=/v2/user/clips/{{$parameter.clipId}}/download",
              "method": "GET"
            }
          },
          "description": "Get a temporary download URL for a specific clip"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clip"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"get","name":"Get","description":"Get a single event by ID","resource":"event"},{"operation":"getHistory","name":"Get History","description":"Get a list of finished and missed events","resource":"event"},{"operation":"getInProgress","name":"Get In Progress","description":"Get a list of currently in-progress events","resource":"event"},{"operation":"getUpcoming","name":"Get Upcoming","description":"Get a list of upcoming events","resource":"event"},{"operation":"getAll","name":"Get Many","description":"Get many recordings (video and audio) for a specific event","resource":"eventRecording"},{"operation":"getDownloadUrl","name":"Get Download URL","description":"Generate a temporary download URL for a specific recording file","resource":"eventRecording"},{"operation":"getAll","name":"Get Many","description":"Get a list of many clip projects for the authenticated user","resource":"clipProject"},{"operation":"get","name":"Get","description":"Get a single clip project with its clips and posted clips","resource":"clipProject"},{"operation":"download","name":"Get Download URL","description":"Get a temporary download URL for a specific clip","resource":"clip"}]

npm_readme:
  # @restream/n8n-nodes-restream

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

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

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

  ## Installation

  Go to your **n8n** > **Settings** > **Community nodes** and install:

  ```
  @restream/n8n-nodes-restream
  ```

  For more details, see the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

  ## Operations

  - Event
      - Get an event by ID
      - Get event history (finished and missed events)
      - Get in-progress events
      - Get upcoming events
  - Event Recording
      - Get recordings for an event
      - Get a download URL for a recording
  - Clip Project
      - Get many clip projects
      - Get a clip project
  - Clip
      - Get a download URL for a clip

  ## Credentials

  This node uses OAuth2 authentication.

  1. Go to the [Restream Developer Portal](https://developers.restream.io/) and create a new application.
  2. Copy the **Client ID** and **Client Secret** into your n8n Restream OAuth2 credential.
  3. From n8n, copy the **OAuth Redirect URL** and paste it into your Restream application's redirect URI settings.

  ## Compatibility

  Tested with n8n@2.7.4.

  ## Upgrading

  ### v0.2.0 — Event and Recording endpoints

  This version adds new OAuth2 scopes (`stream.default.read` and `storage.default.read`) required for the new Event and Event Recording operations. **Existing users must reconnect their Restream OAuth2 credentials** to grant these new permissions:

  1. Open your n8n credentials page.
  2. Find your Restream OAuth2 credential.
  3. Click **Reconnect** to re-authorize with the updated scopes.

  Existing Clip and Clip Project operations are unaffected and will continue to work without reconnecting.

  ## Resources

  * [Restream API documentation](https://developers.restream.io/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of Restream platform features by allowing access to events, recordings, clips, and clip projects via the Restream API.","capabilities":["Get an event by ID","Get event history (finished and missed events)","Get in-progress events","Get upcoming events","Get recordings for an event","Get a download URL for a recording","Get many clip projects","Get a clip project","Get a download URL for a clip"],"authentication":"OAuth2 (requires Client ID, Client Secret, and OAuth Redirect URL configuration)","commonUseCases":["Automating event monitoring and retrieval","Scheduling and managing live streaming clips","Automating content archiving and download workflows","Integrating Restream data into broader n8n automation pipelines"],"limitations":["Requires reconnection of OAuth2 credentials after upgrading to v0.2.0 to grant new scopes","Limited to read-only operations (no creation, deletion, or modification of events/clips)"],"relatedNodes":["n8n HTTP Request node","n8n Webhook node","n8n Code node"]}


node_type: n8n-nodes-neo.neo
package_name: n8n-nodes-neo
display_name: docunite® NEO
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: patrickpenn
author_github_url: https://github.com/docunite/neo-n8n-node.git
npm_package_name: n8n-nodes-neo
npm_version: 0.1.9
community_fetched_at: 2026-03-25T21:19:40.928Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Manage documents and use AI features with the docunite® NEO API. Supports upload, OCR extraction, classification, enrichment, chat and more. Perfect for automated document processing and intelligent data extraction.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Entity",
          "value": "entity"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get balance",
          "description": "Retrieve the credit balance of the current tenant"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get usage",
          "description": "Retrieve usage data with daily, monthly, and yearly breakdowns"
        },
        {
          "name": "Get Usage With Process Steps",
          "value": "getUsageWithProcessSteps",
          "action": "Get usage with process steps",
          "description": "Retrieve detailed usage information with process step breakdowns"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload document",
          "description": "Upload and process documents"
        },
        {
          "name": "Get document",
          "value": "get",
          "action": "Get document",
          "description": "Get a document by ID"
        },
        {
          "name": "Get document batch",
          "value": "getBatch",
          "action": "Get batch documents",
          "description": "Get documents by correlation ID f.e. extracted attachments from a document"
        },
        {
          "name": "Get Document PDF Blob",
          "value": "getBlob",
          "action": "Get document blob",
          "description": "Get a PDF version of the document blob"
        },
        {
          "name": "Get Document Original Blob",
          "value": "getBlobOriginal",
          "action": "Get original blob",
          "description": "Get a original version of the document blob"
        },
        {
          "name": "Get Document OCR",
          "value": "getContent",
          "action": "Get OCR content",
          "description": "Get document OCR content"
        },
        {
          "name": "Get Document Markdown",
          "value": "getMarkdown",
          "action": "Get markdown content",
          "description": "Get document markdown content"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete documents",
          "description": "Delete documents"
        },
        {
          "name": "Chat",
          "value": "chat",
          "action": "Chat with documents",
          "description": "Chat with documents using AI"
        },
        {
          "name": "Classify",
          "value": "classify",
          "action": "Classify documents",
          "description": "Classify documents"
        },
        {
          "name": "Enrichment",
          "value": "enrichment",
          "action": "Enrich documents",
          "description": "Initiate document enrichment"
        },
        {
          "name": "Extraction",
          "value": "extraction",
          "action": "OCR documents",
          "description": "Extract OCR from documents"
        },
        {
          "name": "Split",
          "value": "split",
          "action": "Split documents",
          "description": "Split documents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create entity",
          "description": "Create a new entity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete entity",
          "description": "Delete an entity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get entity",
          "description": "Get an entity by ID"
        },
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all entities",
          "description": "Get all entities"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update entity",
          "description": "Update an entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create webhook",
          "description": "Create a new webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete webhook",
          "description": "Delete a webhook"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get webhook",
          "description": "Get a webhook by ID"
        },
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all webhooks",
          "description": "Get all webhooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update webhook",
          "description": "Update a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"getBalance","name":"Get Balance","description":"Retrieve the credit balance of the current tenant","resource":"account"},{"operation":"getUsage","name":"Get Usage","description":"Retrieve usage data with daily, monthly, and yearly breakdowns","resource":"account"},{"operation":"getUsageWithProcessSteps","name":"Get Usage With Process Steps","description":"Retrieve detailed usage information with process step breakdowns","resource":"account"},{"operation":"upload","name":"Upload","description":"Upload and process documents","resource":"document"},{"operation":"get","name":"Get document","description":"Get a document by ID","resource":"document"},{"operation":"getBatch","name":"Get document batch","description":"Get documents by correlation ID f.e. extracted attachments from a document","resource":"document"},{"operation":"getBlob","name":"Get Document PDF Blob","description":"Get a PDF version of the document blob","resource":"document"},{"operation":"getBlobOriginal","name":"Get Document Original Blob","description":"Get a original version of the document blob","resource":"document"},{"operation":"getContent","name":"Get Document OCR","description":"Get document OCR content","resource":"document"},{"operation":"getMarkdown","name":"Get Document Markdown","description":"Get document markdown content","resource":"document"},{"operation":"delete","name":"Delete","description":"Delete documents","resource":"document"},{"operation":"chat","name":"Chat","description":"Chat with documents using AI","resource":"document"},{"operation":"classify","name":"Classify","description":"Classify documents","resource":"document"},{"operation":"enrichment","name":"Enrichment","description":"Initiate document enrichment","resource":"document"},{"operation":"extraction","name":"Extraction","description":"Extract OCR from documents","resource":"document"},{"operation":"split","name":"Split","description":"Split documents","resource":"document"},{"operation":"create","name":"Create","description":"Create a new entity","resource":"entity"},{"operation":"delete","name":"Delete","description":"Delete an entity","resource":"entity"},{"operation":"get","name":"Get","description":"Get an entity by ID","resource":"entity"},{"operation":"getAll","name":"Get All","description":"Get all entities","resource":"entity"},{"operation":"update","name":"Update","description":"Update an entity","resource":"entity"},{"operation":"create","name":"Create","description":"Create a new webhook","resource":"webhook"},{"operation":"delete","name":"Delete","description":"Delete a webhook","resource":"webhook"},{"operation":"get","name":"Get","description":"Get a webhook by ID","resource":"webhook"},{"operation":"getAll","name":"Get All","description":"Get all webhooks","resource":"webhook"},{"operation":"update","name":"Update","description":"Update a webhook","resource":"webhook"}]

npm_readme:
  # n8n-nodes-neo

  This is an n8n Community Node for integrating the **docunite® NEO API** by [docunite.com](https://docunite.com/neo).

  **docunite® NEO** is an intelligent document management platform with AI-powered classification, extraction, and processing. This node allows you to use all docunite® NEO API features directly in your n8n workflows.

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

  ## 🚀 Installation

  ### For n8n Cloud Users

  **Note**: This community node will be available in n8n Cloud after it has been verified by n8n. We have submitted it for verification and will update this section once approved.

  Once verified, you will be able to install it directly from the n8n node panel.

  ### For Self-hosted n8n Instances

  You can install this node manually on your self-hosted n8n instance (requires n8n v0.187+):

  #### Option 1: Using Community Nodes Feature

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

  After installation, the docunite® NEO node will be available in your n8n instance.

  #### Option 2: Manual Installation

  For self-hosted n8n instances, you can also install the node manually:

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

  Restart n8n for the changes to take effect.

  ## 🔑 Credentials

  To use the docunite® NEO node, you need:

  1. **API Key**: Your docunite® NEO API Key
  2. **Base URL**: Defaults to `https://api.docunite.ai`

  ### Setting up Credentials

  1. Go to **Credentials > New**
  2. Search for "docunite® NEO API"
  3. Enter your API Key
  4. Save the credentials

  ## 📚 Nodes

  This package provides two nodes:

  ### 1. **docunite® NEO** (Regular Node)
  The main node for API operations.

  ### 2. **docunite® NEO Trigger** (Trigger Node)
  Automatically starts workflows when docunite® NEO sends events.

  ## 📚 Operations

  The **docunite® NEO** node supports the following resources and operations:

  ### 📊 Account Management

  - **Get Balance**: Retrieve credit balance
  - **Get Usage**: Retrieve usage statistics (daily, monthly, yearly)
  - **Get Usage With Process Steps**: Detailed usage information with process step breakdown

  ### 📄 Document Management

  - **Upload**: Upload and process documents
    - Supports automatic classification
    - Intelligent document splitting
    - Custom prompts
    - Optional original path storage
  - **Get**: Retrieve document by ID
  - **Get Batch**: Retrieve documents by correlation ID (e.g., extracted attachments)
  - **Get Document PDF Blob**: Get a PDF version of the document
  - **Get Document Original Blob**: Get the original version of the document
  - **Get Document OCR**: Get document OCR content
  - **Get Document Markdown**: Get document markdown content
  - **Delete**: Delete single document
  - **Chat**: Chat with a document using AI
    - Supports custom prompts
    - Optional chat history
  - **Classify**: Classify documents
    - Custom prompt support
    - Batch processing with file IDs
  - **Enrichment**: Initiate document enrichment
    - Batch processing with file IDs
  - **Extraction**: Extract OCR from documents
    - Batch processing with file IDs
  - **Split**: Split documents into multiple parts
    - Batch processing with file IDs

  ### 🏢 Entity Management

  - **Get All**: Retrieve all entities
  - **Get**: Retrieve entity by ID
  - **Create**: Create new entity
  - **Update**: Update entity
  - **Delete**: Delete entity

  ### 🔔 Webhook Management

  - **Get All**: Retrieve all webhooks
  - **Get**: Retrieve webhook by ID
  - **Create**: Create new webhook
  - **Update**: Update webhook
  - **Delete**: Delete webhook

  ## 💻 Usage Examples

  ### Example 1: Upload and Classify a Document

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "document",
          "operation": "upload",
          "entityId": "your-entity-id",
          "binaryPropertyName": "data",
          "classify": true,
          "splitDocuments": false
        },
        "name": "docunite® NEO - Upload Document",
        "type": "n8n-nodes-neo.neo",
        "credentials": {
          "neoApi": "docunite® NEO API Credentials"
        }
      }
    ]
  }
  ```

  ### Example 2: Chat with a Document

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "document",
          "operation": "chat",
          "documentId": "document-id-here",
          "prompt": "What are the key points in this document?"
        },
        "name": "docunite® NEO - Chat with Document",
        "type": "n8n-nodes-neo.neo",
        "credentials": {
          "neoApi": "docunite® NEO API Credentials"
        }
      }
    ]
  }
  ```

  ### Example 3: Classify Multiple Documents

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "document",
          "operation": "classify",
          "fileIds": "[\"file-id-1\", \"file-id-2\"]",
          "promptId": "your-classification-prompt-id"
        },
        "name": "docunite® NEO - Classify Documents",
        "type": "n8n-nodes-neo.neo",
        "credentials": {
          "neoApi": "docunite® NEO API Credentials"
        }
      }
    ]
  }
  ```

  ### Example 4: Manage Entities

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "entity",
          "operation": "create",
          "entityName": "My Project"
        },
        "name": "docunite® NEO - Create Entity",
        "type": "n8n-nodes-neo.neo",
        "credentials": {
          "neoApi": "docunite® NEO API Credentials"
        }
      }
    ]
  }
  ```

  ### Example 5: Extract OCR from Documents

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "document",
          "operation": "extraction",
          "fileIds": "[\"file-id-1\", \"file-id-2\"]"
        },
        "name": "docunite® NEO - Extract OCR",
        "type": "n8n-nodes-neo.neo",
        "credentials": {
          "neoApi": "docunite® NEO API Credentials"
        }
      }
    ]
  }
  ```

  ## 🔔 docunite® NEO Trigger Node

  The **docunite® NEO Trigger** node automatically starts your workflow when NEO sends events.

  ### Features

  - ✅ Automatic webhook registration when activating workflow
  - ✅ Automatic webhook removal when deactivating workflow
  - ✅ Event type filtering (EXTRACTION, CLASSIFICATION, ENRICHMENT)
  - ✅ Secret validation via x-neo-secret header
  - ✅ Test mode support with "Listen for Test Event"
  - ✅ No generic webhook setup required

  ### Configuration

  1. Add the **docunite® NEO Trigger** node to your workflow
  2. Configure credentials (docunite® NEO API)
  3. Select event types to listen for
  4. Set a webhook name
  5. Choose a secret for authentication
  6. Activate the workflow → Webhook is automatically registered in NEO

  ### Test Mode

  Click "Listen for Test Event" to get a test webhook URL. You must manually register this URL in NEO for testing. Secret validation is automatically disabled in test mode.

  ### Production Mode

  When you activate the workflow, the webhook is automatically registered in NEO with the production URL. The webhook is removed when you deactivate the workflow.

  ## 📖 API Documentation

  The complete API documentation can be found at:
  - Swagger UI: [https://api.docunite.ai/](https://api.docunite.ai/)
  - Swagger JSON: [https://api.docunite.ai/swagger.json](https://api.docunite.ai/swagger.json)

  ## 🛠️ Compatibility

  - Tested with n8n v0.187.0+
  - Node.js 18.17.0+
  - n8n-workflow 1.0.0+

  ## 📝 License

  [MIT](LICENSE.md)

  ## 🤝 Support

  For questions or issues:
  - GitHub Issues: [https://github.com/docunite/neo-n8n-node/issues](https://github.com/docunite/neo-n8n-node/issues)
  - docunite Support: [support@docunite.com](mailto:support@docunite.com)

  ## 🔗 Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [docunite.com Website](https://docunite.com)
  - [docunite® NEO API Documentation](https://api.docunite.ai/)

  ## 🌟 Features

  - ✅ Full docunite® NEO API integration for core resources
  - ✅ **NEO Trigger Node** - Automatic workflow starts on NEO events
  - ✅ Account Management (Balance & Usage tracking)
  - ✅ Document Management (Upload, Processing, Chat, OCR, etc.)
  - ✅ Entity Management (Full CRUD operations)
  - ✅ Webhook Management (Full CRUD operations)
  - ✅ API Key authentication
  - ✅ Comprehensive error handling
  - ✅ Binary Data support (Upload/Download)
  - ✅ AI-powered document processing and chat
  - ✅ Batch operations support
  - ✅ Automatic webhook registration and cleanup

  ## 📦 Version History

  ### 0.1.0 (Initial Release)
  - Full integration of core docunite® NEO API endpoints
  - Account Management (Balance, Usage, Usage with Process Steps)
  - Document Management (Upload, Get, Chat, Classify, Enrichment, Extraction, Split, etc.)
  - Entity Management (CRUD operations)
  - Webhook Management (CRUD operations)

  ## 👨‍💻 Development

  If you want to contribute to development:

  ```bash
  # Clone repository
  git clone https://github.com/docunite/neo-n8n-node.git
  cd neo-n8n-node

  # Install dependencies
  npm install

  # Build
  npm run build

  # Link to local n8n instance
  npm link
  ```

  Start n8n in development mode:

  ```bash
  n8n start
  ```

  ## ⚠️ Important Notes

  - File uploads use Binary Data from n8n workflows
  - Chat operations support streaming responses
  - All JSON parameters can be set dynamically via n8n expressions
  - Document processing operations support batch processing with file IDs

  ---

  Developed with ❤️ for the n8n community by [docunite GmbH](https://docunite.com)

ai_documentation_summary:
  {"purpose":"This n8n node integrates with the docunite® NEO API to automate document processing tasks including upload, OCR extraction, classification, enrichment, and AI-powered document chat.","capabilities":["Document upload with automatic classification and intelligent splitting","OCR extraction and text retrieval from documents","Document classification with custom prompts","Document enrichment and data extraction","AI-powered document chat and Q&A","Entity management (create, update, delete, retrieve)","Webhook management and event triggering","Usage statistics and balance tracking","Batch processing for multiple documents","PDF and original blob retrieval"],"authentication":"API Key required","commonUseCases":["Automated invoice processing and data extraction","Contract review and clause identification","Document indexing and search optimization","Automated customer support document Q&A","Compliance document classification"],"limitations":["Community node status may affect availability in n8n Cloud until verified","Requires n8n v0.187+ for manual installation","Base URL defaults to https://api.docunite.ai"],"relatedNodes":["docunite® NEO Trigger","HTTP Request","Code"]}


node_type: n8n-nodes-postproxy.postProxy
package_name: n8n-nodes-postproxy
display_name: PostProxy
description: Publish and schedule posts across multiple social media platforms
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: dmitrysereda
author_github_url: https://github.com/postproxy/
npm_package_name: n8n-nodes-postproxy
npm_version: 0.2.8
community_fetched_at: 2026-03-25T21:19:40.928Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Profile",
          "value": "profile"
        },
        {
          "name": "Profile Group",
          "value": "profileGroup"
        }
      ],
      "description": "The resource to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a post",
          "description": "Create and publish or schedule a post"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a post",
          "description": "Delete a post"
        },
        {
          "name": "Get Post Details",
          "value": "get",
          "action": "Get post details",
          "description": "Get a post by ID"
        },
        {
          "name": "List Posts",
          "value": "getMany",
          "action": "List posts",
          "description": "Get many posts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a post",
          "description": "Update a post"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a draft post",
          "description": "Publish a draft post"
        }
      ],
      "description": "The operation to perform",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Profile Details",
          "value": "get",
          "action": "Get profile details",
          "description": "Get a profile by ID"
        },
        {
          "name": "List Profiles",
          "value": "getMany",
          "action": "List profiles",
          "description": "Get many profiles"
        }
      ],
      "description": "The operation to perform",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "profile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "List Profile Groups",
          "value": "getMany",
          "action": "List profile groups",
          "description": "Get many profile groups"
        }
      ],
      "description": "The operation to perform",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "profileGroup"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"create","name":"Create","description":"Create and publish or schedule a post","resource":"post"},{"operation":"delete","name":"Delete","description":"Delete a post","resource":"post"},{"operation":"get","name":"Get Post Details","description":"Get a post by ID","resource":"post"},{"operation":"getMany","name":"List Posts","description":"Get many posts","resource":"post"},{"operation":"update","name":"Update","description":"Update a post","resource":"post"},{"operation":"publish","name":"Publish","description":"Publish a draft post","resource":"post"},{"operation":"get","name":"Get Profile Details","description":"Get a profile by ID","resource":"profile"},{"operation":"getMany","name":"List Profiles","description":"Get many profiles","resource":"profile"},{"operation":"getMany","name":"List Profile Groups","description":"Get many profile groups","resource":"profileGroup"}]

npm_readme:
  # n8n-nodes-postproxy

  Community n8n node for the PostProxy API.

  PostProxy provides a unified API to publish and schedule posts across multiple social media platforms (X/Twitter, Facebook, Instagram, etc.) with built-in retries, quota handling, and per-account status tracking.

  ## What is PostProxy?

  PostProxy is a unified API that simplifies social media content publishing by:
  - **Unified API**: Post to multiple platforms (X, Facebook, Instagram, etc.) through a single interface
  - **Built-in Scheduling**: Schedule posts for future publishing with automatic timezone handling
  - **Error Management**: Automatic retries and quota management - PostProxy handles rate limits and retries automatically
  - **Per-Account Status Tracking**: Get detailed status for each account when publishing to multiple accounts

  ## Features

  - **List Profile Groups**: Get all your profile groups to organize your social media profiles
  - **List Profiles**: Get all connected social media profiles across all platforms with pagination
  - **Get Profile Details**: Get detailed information about a specific profile (including `expires_at` and `post_count`)
  - **Create Posts**: Publish posts to multiple profiles via profile groups
  - **Get Post Details**: Get detailed information about a specific post with platform-specific status and insights
  - **List Posts**: Get all your posts with full pagination support (`page`, `per_page`, `total`)
  - **Update Posts**: Update post content and scheduled time
  - **Delete Posts**: Delete posts by ID
  - **Media Support**: Attach images or videos to your posts via URLs
  - **Platform Parameters**: Pass platform-specific parameters (e.g., alt text, captions) when creating posts
  - **Scheduled Publishing**: Schedule posts for specific dates and times
  - **Post Status Tracking**: Track post status (`pending`, `processed`, `draft`) and platform-specific statuses
  - **Insights**: Access platform insights (impressions, engagement) when available
  - **Error Handling**: Comprehensive error handling with request ID logging

  ## Requirements

  - n8n v1.0.0 or higher
  - PostProxy API key (see [Getting Started](#getting-started))

  ## Installation

  ### For n8n Cloud or Self-hosted

  ```bash
  npm install n8n-nodes-postproxy
  ```

  After installation, restart n8n. The PostProxy node will appear in the node list under "Transform" category.

  ### For n8n Desktop

  1. Open n8n Desktop
  2. Go to Settings → Community Nodes
  3. Click "Install a community node"
  4. Enter: `n8n-nodes-postproxy`
  5. Click "Install"

  ## Getting Started

  ### 1. Get Your PostProxy API Key

  1. Sign up at [postproxy.dev](https://postproxy.dev)
  2. Navigate to your account settings
  3. Generate or copy your API key
  4. For detailed instructions, see the [PostProxy Authentication documentation](https://postproxy.dev/getting-started/authentication/)

  ### 2. Configure Credentials in n8n

  1. Add a PostProxy node to your workflow
  2. Click on "Credential to connect with" → "Create New Credential"
  3. Enter your PostProxy API key
  4. Save the credential

  ### 3. Use the Node

  #### List Profile Groups

  1. Add a PostProxy node
  2. Select **Resource**: Profile Group
  3. Select **Operation**: List Profile Groups
  4. Execute the node to see all your profile groups

  #### List Profiles

  1. Add a PostProxy node
  2. Select **Resource**: Profile
  3. Select **Operation**: List Profiles
  4. Execute the node to see all connected social media profiles

  #### Create a Post

  1. Add a PostProxy node
  2. Select **Resource**: Post
  3. Select **Operation**: Create
  4. Choose **Publish Type**:
     - **Publish now**: Post immediately
     - **Schedule**: Set a specific date and time
  5. Fill in:
     - **Profile Group**: Select the profile group to publish to
     - **Profile**: Select one or more profiles from the group
     - **Content**: The text content of your post
     - **Media URLs** (optional): URLs of images or videos to attach
     - **Publish At** (if scheduled): The date and time to publish
  6. Execute the node

  #### Get Post Details

  1. Add a PostProxy node
  2. Select **Resource**: Post
  3. Select **Operation**: Get Post Details
  4. Enter the **Post ID**
  5. Execute to get detailed information about the post

  #### List Posts

  1. Add a PostProxy node
  2. Select **Resource**: Post
  3. Select **Operation**: List Posts
  4. Choose whether to **Return All** posts or set a **Limit**
  5. Execute to get a list of your posts

  ## Examples

  ### Example 1: Simple Post

  Create a simple text post to profiles in a group:

  ```json
  {
    "resource": "post",
    "operation": "create",
    "publishType": "publish_now",
    "profileGroup": "zbNFmz",
    "profiles": ["yqWUvR", "y7dU5N"],
    "content": "Hello from n8n! 🚀",
    "media": []
  }
  ```

  **Note**: IDs are now alphanumeric strings (e.g., `"zbNFmz"`, `"yqWUvR"`), not numeric.

  ### Example 2: Scheduled Post with Media

  Schedule a post with an image for multiple profiles:

  ```json
  {
    "resource": "post",
    "operation": "create",
    "publishType": "schedule",
    "publish_at": "2024-12-25T10:00:00Z",
    "profileGroup": "zbNFmz",
    "profiles": ["yqWUvR"],
    "content": "Check out our new product!",
    "media": ["https://example.com/image.jpg"]
  }
  ```

  ### Example 3: Post with Platform Parameters

  Create a post with platform-specific parameters:

  ```json
  {
    "resource": "post",
    "operation": "create",
    "publishType": "publish_now",
    "profileGroup": "zbNFmz",
    "profiles": ["yqWUvR"],
    "content": "Check out our new product!",
    "media": ["https://example.com/image.jpg"],
    "platformParams": "{\"alt_text\": \"Product image description\"}"
  }
  ```

  ### Example 4: List Posts with Pagination

  Get a list of your posts with pagination:

  ```json
  {
    "resource": "post",
    "operation": "getMany",
    "returnAll": false,
    "limit": 10,
    "page": 0,
    "per_page": 10
  }
  ```

  **Response includes**:
  - `total`: Total number of posts
  - `page`: Current page number (0-indexed)
  - `per_page`: Items per page
  - `data`: Array of posts with fields: `id`, `content`, `status`, `draft`, `scheduled_at`, `created_at`, `platforms` (with `network`, `status`, `params`, `attempted_at`, `insights`)

  ### Example 5: Get Post Details

  Get details of a specific post:

  ```json
  {
    "resource": "post",
    "operation": "get",
    "postId": "NWLtbA",
    "simplify": true
  }
  ```

  **Response fields**:
  - `id`: Post ID (alphanumeric string)
  - `content`: Post content
  - `status`: Post status (`pending`, `processed`, etc.)
  - `draft`: Whether post is a draft
  - `scheduled_at`: Scheduled publish time (if scheduled)
  - `created_at`: Creation timestamp
  - `platforms`: Array with platform-specific information including `network`, `status`, `params`, `attempted_at`, and `insights`

  ## Understanding Profile Groups

  PostProxy organizes your social media profiles into groups. This allows you to:
  - **Publish to multiple platforms at once** by selecting a group
  - **Organize profiles by campaign, client, or purpose** for better management
  - **Easily manage which profiles receive each post** with granular control

  When creating a post, you first select a Profile Group, then choose one or more Profiles from that group. This two-step approach gives you flexibility while maintaining organization.

  For more details on selecting profiles, see [Choosing Account IDs](docs/choosing-account-ids.md).

  ## Workflow Examples

  ### RSS Feed → PostProxy

  1. **RSS Feed Read** node: Fetch latest articles
  2. **Code** node: Extract title and link
  3. **PostProxy** node (List Profile Groups): Get your profile groups
  4. **PostProxy** node (Create Post): Create post with article title and link, selecting profile group and profiles

  ### Airtable → PostProxy

  1. **Airtable Trigger** node: Watch for new rows
  2. **PostProxy** node (Create Post): Create post from Airtable data
     - Store profile group ID in Airtable
     - Map profile selections from Airtable columns
  3. **Airtable Update** node: Mark row as published with post ID

  ### Webhook Queue → Scheduled Posts

  1. **Webhook** node: Receive post requests (including profile group and profile IDs)
  2. **PostProxy** node (Create Post): Create scheduled post with data from webhook
  3. **Response** node: Return post status and post ID

  ### Profile Discovery Workflow

  1. **PostProxy** node (List Profile Groups): Get all profile groups
  2. **PostProxy** node (List Profiles): Get all available profiles
  3. **Code** node: Filter profiles by platform (e.g., only Twitter/X profiles)
  4. **PostProxy** node (Create Post): Create posts for filtered profiles

  For more detailed examples, see the [examples/](examples/) directory.

  ## Documentation

  - [Choosing Account IDs](docs/choosing-account-ids.md) - How to select the right accounts for your posts
  - [Scheduling Posts](docs/scheduling-posts.md) - Understanding immediate vs scheduled publishing

  ## Rate Limits and Processing

  PostProxy automatically manages rate limits and retries for you. When you create a post:

  - If rate limits are hit, PostProxy will queue the post and publish it when quota is available
  - Posts may show as "pending" or "processing" initially - this is normal
  - PostProxy handles retries automatically, so you don't need to worry about temporary failures

  The node returns the full API response, including per-platform statuses in the `platforms` array, so you can see the status of each platform's publication.

  ### Post Status Values

  - **`pending`**: Post is queued and waiting to be published
  - **`processed`**: Post has been processed (may be published or failed)
  - **`draft`**: Post is saved as a draft

  ### Platform Status Values (in `platforms` array)

  - **`pending`**: Platform-specific publication is pending
  - **`published`**: Successfully published to the platform
  - **`failed`**: Publication failed (check error details if available)

  ### Response Structure

  Posts now include:
  - `platforms`: Array of platform-specific information with `network`, `status`, `params`, `attempted_at`, and `insights` (when available)
  - `draft`: Boolean indicating if post is a draft
  - `status`: Overall post status
  - `insights`: Platform insights (impressions, engagement) when available from the platform

  ## Error Handling

  The node provides clear error messages for common issues:

  - **Invalid API Key**: Clear error message with request ID
  - **Network Issues**: Helpful messages for connection problems
  - **API Errors**: Detailed error messages from PostProxy API (4xx/5xx)
  - **Request Timeouts**: Automatic timeout handling (30 seconds)

  All errors include request IDs when available for easier debugging.

  ## Support

  - **Documentation**: [PostProxy API Docs](https://postproxy.dev/getting-started/overview/)
  - **Issues**: Report bugs in the GitHub repository
  - **SLA**: Best effort support
  - **API Version**: Compatible with PostProxy API v1

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community n8n node that connects to the PostProxy API to publish and schedule posts across multiple social media platforms (X/Twitter, Facebook, Instagram) with unified management and automatic error handling.","capabilities":["Publish posts to multiple social media platforms via a single interface","Schedule posts for future publishing with automatic timezone handling","List and manage profile groups and social media profiles","Create posts with text content and media attachments (images/videos via URLs)","Update and delete existing posts by ID","Retrieve detailed post information including platform-specific status and insights","Handle platform-specific parameters (e.g., alt text, captions)","Automatic retries and quota management for rate limits","Track per-account status and post status (pending, processed, draft)","Pagination support for listing posts and profiles"],"authentication":"API key required (PostProxy API key)","commonUseCases":["Automated social media content publishing across multiple accounts","Scheduled social media campaigns with time-based publishing","Centralized management of posts across X, Facebook, and Instagram","Monitoring post performance and status across platforms","Batch posting to multiple profile groups simultaneously"],"limitations":["Community node (may not be maintained by n8n core team)","Requires external PostProxy API account and key","Media must be provided via URLs (no direct file upload)","Platform-specific parameters require JSON formatting in platformParams field"],"relatedNodes":["HTTP Request","Set","Split In Batches","Wait Until"]}


node_type: n8n-nodes-lettr.lettr
package_name: n8n-nodes-lettr
display_name: Lettr
description: Interact with Lettr transactional email APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: tlapi
author_github_url: https://github.com/lettr-com/lettr-n8n.git
npm_package_name: n8n-nodes-lettr
npm_version: 0.1.3
community_fetched_at: 2026-03-25T21:19:40.929Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an email request",
          "description": "Get an email request by ID"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a transactional email",
          "description": "Send a transactional email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many domains",
          "description": "Get all sending domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many templates",
          "description": "Get all templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhooks",
          "description": "Get all webhooks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"get","name":"Get","description":"Get an email request by ID","resource":"email"},{"operation":"send","name":"Send","description":"Send a transactional email","resource":"email"},{"operation":"getAll","name":"Get Many","description":"Get all sending domains","resource":"domain"},{"operation":"getAll","name":"Get Many","description":"Get all templates","resource":"template"},{"operation":"getAll","name":"Get Many","description":"Get all webhooks","resource":"webhook"}]

npm_readme:
  # n8n-nodes-lettr

  This package provides a verified-style n8n community node for [Lettr](https://docs.lettr.com).

  ## Logo

  - Source logo file (edit this): `assets/logo.svg`
  - n8n node icon file (auto-generated from source on build): `nodes/Lettr/lettr.svg`

  To apply your custom SVG logo:

  ```bash
  npm run sync:logo
  npm run build
  ```

  ## Supported resources and operations

  - **Email**
    - Send
    - Get
  - **Domain**
    - Get Many
  - **Template**
    - Get Many
  - **Webhook**
    - Get Many

  ## Credentials

  Use a Lettr API key from your Lettr account.

  - Credential type: `Lettr API`
  - Auth header: `Authorization: Bearer <api_key>`

  ## Build

  ```bash
  npm install
  npm run build
  ```

  ## Local n8n install

  ```bash
  npm install /absolute/path/to/n8n-nodes-lettr
  ```

  Then restart n8n.

  ## Notes for community verification

  - Uses official Lettr REST endpoints at `https://app.lettr.com/api`
  - Includes credential test call (`GET /domains`)
  - Includes pagination controls for list operations
  - Runtime has no third-party dependencies

  ## API references used

  - [Lettr API introduction](https://docs.lettr.com/api-reference/introduction)
  - [Send email](https://docs.lettr.com/api-reference/emails/send-email)
  - [Get email request](https://docs.lettr.com/api-reference/emails/get-email-request-details)
  - [List domains](https://docs.lettr.com/api-reference/domains/get-sending-domains)
  - [List templates](https://docs.lettr.com/api-reference/templates/get-all-email-templates)
  - [List webhooks](https://docs.lettr.com/api-reference/webhooks/get-all-webhooks)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with Lettr's transactional email APIs to manage email sending, domains, templates, and webhooks.","capabilities":["Send transactional emails","Retrieve email request details","List sending domains","List email templates","List webhooks","Supports pagination for list operations","Includes credential test functionality"],"authentication":"API key required (Bearer token in Authorization header)","commonUseCases":["Automated transactional email workflows","Email template management","Domain verification and management","Webhook configuration for email events"],"limitations":["Community node (unofficial)","No third-party runtime dependencies"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


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

updated_at: 2026-03-25 21:19:40
author_name: bookoly
author_github_url: https://github.com/bookoly/n8n-node.git
npm_package_name: n8n-nodes-bookoly
npm_version: 1.0.19
community_fetched_at: 2026-03-25T21:19:40.929Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sound",
      "options": [
        {
          "name": "Sound",
          "value": "sound"
        },
        {
          "name": "Speech",
          "value": "speech"
        },
        {
          "name": "Speech Dialogue",
          "value": "speech_dialogue"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Transcription",
          "value": "transcript"
        },
        {
          "name": "Video",
          "value": "video"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "combineSounds",
      "options": [
        {
          "name": "Combine Sounds",
          "value": "combineSounds",
          "action": "Combine sounds",
          "description": "Merge multiple sound files into a single seamless audio track"
        },
        {
          "name": "Get a Specific Sound",
          "value": "getSound",
          "action": "Get a sound",
          "description": "Fetches sound data from the API using the sound ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sound"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createSpeech",
      "options": [
        {
          "name": "Create a Speech Synthesis",
          "value": "createSpeech",
          "action": "Create a speech synthesis",
          "description": "Synthesizes a text into speech"
        },
        {
          "name": "Get a Specific Speech",
          "value": "getSpeech",
          "action": "Get a speech",
          "description": "Fetches speech data from the API using the speech ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createSpeechDialogue",
      "options": [
        {
          "name": "Create a Speech Dialogue",
          "value": "createSpeechDialogue",
          "action": "Create a speech dialogue",
          "description": "Generate a conversation between multiple AI voices from text"
        },
        {
          "name": "Get a Specific Speech Dialogue",
          "value": "getSpeechDialogue",
          "action": "Get a speech dialogue",
          "description": "Fetches speech dialogue data from the API using the speech dialogue ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech_dialogue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateSubtitleFile",
      "options": [
        {
          "name": "Generate a Subtitle File",
          "value": "generateSubtitleFile",
          "action": "Generate a subtitle file",
          "description": "Generate subtitle files in multiple formats from a video or audio URL"
        },
        {
          "name": "Get a Specific Subtitle File",
          "value": "getSubtitleFile",
          "action": "Get a subtitle file",
          "description": "Fetches subtitle file data from the API using the subtitle file ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createTranscript",
      "options": [
        {
          "name": "Transcribe Audio or Video",
          "value": "createTranscript",
          "action": "Transcribe audio or video",
          "description": "Transcribe your audio or video files into clear, accurate text with timestamps"
        },
        {
          "name": "Get a Specific Transcription",
          "value": "getTranscript",
          "action": "Get a transcription",
          "description": "Fetches transcript data from the API using the transcript ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcript"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Add Audio to a Video",
          "value": "addAudioToVideo",
          "action": "Add audio to a video",
          "description": "Seamlessly add audio tracks to your video"
        },
        {
          "name": "Add Audio with Subtitles to a Video",
          "value": "addAudioWithSubtitlesToVideo",
          "action": "Add audio with subtitles to a video",
          "description": "Adds audio to your video and automatically generates and adds subtitles from the audio"
        },
        {
          "name": "Add Subtitles to a Video",
          "value": "addSubtitlesToVideo",
          "action": "Add subtitles to a video",
          "description": "Automatically generates and adds subtitles to your video"
        },
        {
          "name": "Add Subtitles to a Video From a File",
          "value": "addSubtitlesToVideoFromFile",
          "action": "Add subtitles to a video from a file",
          "description": "Automatically generates and adds subtitles to your video"
        },
        {
          "name": "Add Watermark to a Video",
          "value": "addWatermarkToVideo",
          "action": "Add a watermark to a video",
          "description": "Places an image as a watermark on the video at specified coordinates"
        },
        {
          "name": "Blur a Video",
          "value": "blurVideo",
          "action": "Blur a video",
          "description": "Apply a blur effect to a specific area of a video"
        },
        {
          "name": "Clip a Video",
          "value": "clipVideo",
          "action": "Clip a video",
          "description": "Extract a clip from a video using a start time and duration"
        },
        {
          "name": "Create a Slideshow",
          "value": "createSlideshow",
          "action": "Create a slideshow",
          "description": "Creates a video slideshow from images, videos, or a combination of both"
        },
        {
          "name": "Crop a Video",
          "value": "cropVideo",
          "action": "Crop a video",
          "description": "Crops the video to a specific area using custom coordinates and dimensions"
        },
        {
          "name": "Extract Audio From a Video",
          "value": "extractAudioFromVideo",
          "action": "Extract audio from a video",
          "description": "Separates and saves the audio track from a video file"
        },
        {
          "name": "Frame a Video",
          "value": "frameVideo",
          "action": "Frame a video",
          "description": "Extract a single frame from a video at a specified timestamp and save it as an image"
        },
        {
          "name": "Generate a Video",
          "value": "generateVideo",
          "action": "Generate a video",
          "description": "Create a video from images and video clips, generate and add a voice-over with automated subtitles, and integrate background music"
        },
        {
          "name": "Get a Specific Video",
          "value": "getVideo",
          "action": "Get a video",
          "description": "Fetches video data from the API using the video ID"
        },
        {
          "name": "Mute a Video",
          "value": "muteVideo",
          "action": "Mute a video",
          "description": "Mute the video's audio by reducing the volume to zero"
        },
        {
          "name": "Overlay Videos",
          "value": "overlayVideos",
          "action": "Overlay videos",
          "description": "Overlay one video on top of another at a specified position"
        },
        {
          "name": "Rotate a Video",
          "value": "rotateVideo",
          "action": "Rotate a video",
          "description": "Rotate a video by 90, 180, or 270 degrees clockwise"
        },
        {
          "name": "Scale a Video",
          "value": "scaleVideo",
          "action": "Scale a video",
          "description": "Scale a video to different dimensions with various scaling modes"
        },
        {
          "name": "Split a Video Into Scenes",
          "value": "splitVideoIntoScenes",
          "action": "Split a video into scenes",
          "description": "Automatically divide a video into multiple segments based on scene detection or fixed intervals"
        },
        {
          "name": "Stack Videos",
          "value": "stackVideos",
          "action": "Stack videos",
          "description": "Stack two videos together horizontally or vertically"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"combineSounds","name":"Combine Sounds","description":"Merge multiple sound files into a single seamless audio track","resource":"sound"},{"operation":"getSound","name":"Get a Specific Sound","description":"Fetches sound data from the API using the sound ID","resource":"sound"},{"operation":"createSpeech","name":"Create a Speech Synthesis","description":"Synthesizes a text into speech","resource":"speech"},{"operation":"getSpeech","name":"Get a Specific Speech","description":"Fetches speech data from the API using the speech ID","resource":"speech"},{"operation":"createSpeechDialogue","name":"Create a Speech Dialogue","description":"Generate a conversation between multiple AI voices from text","resource":"speech_dialogue"},{"operation":"getSpeechDialogue","name":"Get a Specific Speech Dialogue","description":"Fetches speech dialogue data from the API using the speech dialogue ID","resource":"speech_dialogue"},{"operation":"generateSubtitleFile","name":"Generate a Subtitle File","description":"Generate subtitle files in multiple formats from a video or audio URL","resource":"file"},{"operation":"getSubtitleFile","name":"Get a Specific Subtitle File","description":"Fetches subtitle file data from the API using the subtitle file ID","resource":"file"},{"operation":"createTranscript","name":"Transcribe Audio or Video","description":"Transcribe your audio or video files into clear, accurate text with timestamps","resource":"transcript"},{"operation":"getTranscript","name":"Get a Specific Transcription","description":"Fetches transcript data from the API using the transcript ID","resource":"transcript"},{"operation":"addAudioToVideo","name":"Add Audio to a Video","description":"Seamlessly add audio tracks to your video","resource":"video"},{"operation":"addAudioWithSubtitlesToVideo","name":"Add Audio with Subtitles to a Video","description":"Adds audio to your video and automatically generates and adds subtitles from the audio","resource":"video"},{"operation":"addSubtitlesToVideo","name":"Add Subtitles to a Video","description":"Automatically generates and adds subtitles to your video","resource":"video"},{"operation":"addSubtitlesToVideoFromFile","name":"Add Subtitles to a Video From a File","description":"Automatically generates and adds subtitles to your video","resource":"video"},{"operation":"addWatermarkToVideo","name":"Add Watermark to a Video","description":"Places an image as a watermark on the video at specified coordinates","resource":"video"},{"operation":"blurVideo","name":"Blur a Video","description":"Apply a blur effect to a specific area of a video","resource":"video"},{"operation":"clipVideo","name":"Clip a Video","description":"Extract a clip from a video using a start time and duration","resource":"video"},{"operation":"createSlideshow","name":"Create a Slideshow","description":"Creates a video slideshow from images, videos, or a combination of both","resource":"video"},{"operation":"cropVideo","name":"Crop a Video","description":"Crops the video to a specific area using custom coordinates and dimensions","resource":"video"},{"operation":"extractAudioFromVideo","name":"Extract Audio From a Video","description":"Separates and saves the audio track from a video file","resource":"video"},{"operation":"frameVideo","name":"Frame a Video","description":"Extract a single frame from a video at a specified timestamp and save it as an image","resource":"video"},{"operation":"generateVideo","name":"Generate a Video","description":"Create a video from images and video clips, generate and add a voice-over with automated subtitles, and integrate background music","resource":"video"},{"operation":"getVideo","name":"Get a Specific Video","description":"Fetches video data from the API using the video ID","resource":"video"},{"operation":"muteVideo","name":"Mute a Video","description":"Mute the video's audio by reducing the volume to zero","resource":"video"},{"operation":"overlayVideos","name":"Overlay Videos","description":"Overlay one video on top of another at a specified position","resource":"video"},{"operation":"rotateVideo","name":"Rotate a Video","description":"Rotate a video by 90, 180, or 270 degrees clockwise","resource":"video"},{"operation":"scaleVideo","name":"Scale a Video","description":"Scale a video to different dimensions with various scaling modes","resource":"video"},{"operation":"splitVideoIntoScenes","name":"Split a Video Into Scenes","description":"Automatically divide a video into multiple segments based on scene detection or fixed intervals","resource":"video"},{"operation":"stackVideos","name":"Stack Videos","description":"Stack two videos together horizontally or vertically","resource":"video"}]

npm_readme:
  # n8n-nodes-bookoly

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

  bookoly is a service that makes it easy to create, edit, and process your content automatically.
  With bookoly, you can generate slideshows, add subtitles, create voice-overs, split videos into multiple scenes, and 
  a lot more — all through a simple API.

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

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

  ## Installation

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

  ## Operations

  ### 🎞️ Video

  * **Add Audio to a Video** – Add background music or a voice-over to a video.
  * **Add Audio with Subtitles to a Video** – Add a voice-over and automatically generate and add subtitles from the audio.
  * **Add Subtitles to a Video** – Automatically generate subtitles from the video’s audio and insert them into the file.
  * **Add Subtitles to a Video from a File** – Import and embed an external subtitle file (e.g. `.srt`, `.ass`) into a video.
  * **Add Watermark to a Video** – Overlay an image or text watermark onto a video.
  * **Blur a Video** – Apply a blur effect to the entire video or selected regions.
  * **Clip a Video** – Extract a specific section of a video by start time and duration.
  * **Create a Slideshow** – Generate a slideshow video from multiple images and video clips.
  * **Crop a Video** – Trim away unwanted edges of a video by defining crop dimensions.
  * **Extract Audio from a Video** – Save the audio track of a video as a separate sound file.
  * **Frame a Video** – Capture a single image from a video at the desired timestamp.
  * **Generate a Video** – Create a video from images and video clips with a voice-over and subtitles.
  * **Mute a Video** – Set the volume of a video to 0%.
  * **Overlay Videos** – Overlay one video on top of another at a specified position with customizable scale and offset.
  * **Rotate a Video** – Rotate a video by 90, 180, or 270 degrees.
  * **Scale a Video** – Scale videos to different dimensions using various scaling modes (fit, fill, exact, etc.).
  * **Split a Video into Scenes** – Split a video by automatic scene detection, fixed time intervals, or equal segments.
  * **Stack Videos** – Stack two videos together horizontally or vertically.

  ### 🎙️️ Speech

  * **Create a Speech Synthesis** – Convert text into a natural-sounding speech with AI.

  ### 🗣️ Speech Dialogue

  * **Create a Speech Dialogue** – Generate a conversation between multiple AI voices.

  ### 📜 Transcript

  * **Transcribe Media** – Automatically transcribe the audio from a video or audio file.

  ### 🎼 Sound

  * **Combine Sounds** – Merge two or more audio files into a single track.

  ### 📂 File

  * **Generate a Subtitle File** – Create a subtitle file (e.g. `.srt`, `.vtt`) from a video or audio file.

  ## Credentials

  To use the bookoly node, you need an API token:

  1. Sign up for an account at [bookoly](https://bookoly.com).
  2. Open your profile from the left menu and scroll down to the API Tokens section.
  3. Create a new API token. 
     * Enable all permissions.
     * (Optional) Set an expiration date.
  4. Copy the token and store it in a safe place.
  5. In n8n, create new credentials for bookoly and paste your token.

  ## Compatibility

  * Minimum n8n version: 1.106.3
  * Tested with: n8n 1.106.3+
  * Known issues: None at this time.

  ## Usage

  Once installed, you can add the bookoly node to your workflow to automate content generation and processing.

  📺 To see all examples in action check out the full bookoly YouTube tutorial [playlist](https://www.youtube.com/playlist?list=PLaZXufV_18nEQ_P79pD3ccuR8xQwjcJqu)

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

  ## Resources

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

  ## Version history

  1.0.19
  * Added 'Stack Videos' operation to stack two videos horizontally or vertically.
  * Added 'Overlay Videos' operation to overlay one video on top of another with position, scale, and offset options.
  * Added 'Scale a Video' operation with multiple scaling modes (scale to width/height, fit, fill, exact, keep aspect ratio).
  * Removed 'Create a Sound Effect' operation.

  1.0.18
  * Add the voice option 'None' for speech synthesis

  1.0.17
  * Enhanced speech synthesis with 38 premium AI voices for more natural and diverse text-to-speech output.

  1.0.16
  * Fix type for subtitle text case

  1.0.15
  * Performance improvements and bug fixes

  1.0.14
  * Replace hardcoded default values with enums

  1.0.13
  * Minor performance improvements

  1.0.12
  * Minor performance improvements and bug fixes 

  1.0.11
  * Improved the 'Generate a Video' node for more flexibility.
  * Added punctuation and text case options for subtitles.
  * Added mute option for scenes.
  * Added transitions that can be used between scenes.

  1.0.10
  * Handle errors with continueOnFail

  1.0.9
  * Added 'Create a speech dialogue' action.
  * Updated 'Combine sounds' action, to expect JSON input for Audio.

  1.0.8
  * Update youtube playlist url in readme.

  1.0.7
  * Refine video clip parameters for clarity.

  1.0.6
  * Change scenes type from fixedCollection to json.

  1.0.5
  * Make the bookoly node usable as a tool.

  1.0.4
  * Initial release with support for all bookoly operations.

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of video, audio, and speech processing tasks by interfacing with the Bookoly API.","capabilities":["Add audio or voice-over to videos","Generate and add subtitles to videos","Create slideshows from images and video clips","Extract audio from videos","Perform speech synthesis (text-to-speech)","Generate speech dialogues with multiple AI voices","Transcribe audio from media files","Combine and edit audio files","Apply video effects (blur, watermark, rotate, scale)","Split videos into scenes"],"authentication":"API token required","commonUseCases":["Automated video editing for social media content","Creating voice-over videos from text","Generating subtitles for video content","Producing slideshow presentations","Audio file merging and processing"],"limitations":["Requires a paid account with API token from Bookoly","Some features may require premium voices or permissions"],"relatedNodes":["n8n-nodes-core.code","n8n-nodes-core.httpRequest","n8n-nodes-core.waitUntil"]}


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

updated_at: 2026-03-25 21:19:40
author_name: agnitas
author_github_url: https://github.com/agnitas-org/n8n-nodes-openemm.git
npm_package_name: @openemm/n8n-nodes-openemm
npm_version: 0.3.2
community_fetched_at: 2026-03-25T21:19:40.930Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "mailing",
      "options": [
        {
          "name": "Mailing",
          "value": "mailing"
        },
        {
          "name": "Mailing Content",
          "value": "content"
        },
        {
          "name": "Recipient",
          "value": "recipient"
        },
        {
          "name": "Mailing List",
          "value": "mailinglist"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Copy",
          "value": "copy",
          "action": "Copy mailing",
          "description": "Copy mailing"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create mailing",
          "description": "Create mailing"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete mailing",
          "description": "Delete mailing"
        },
        {
          "name": "Get",
          "value": "read",
          "action": "Get mailing",
          "description": "Get mailing"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send mailing",
          "description": "Send mailing"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update mailing",
          "description": "Update mailing"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mailing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "read",
      "options": [
        {
          "name": "Get",
          "value": "read",
          "action": "Get mailing content",
          "description": "Get mailing content"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update mailing content",
          "description": "Update mailing content"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete mailing content",
          "description": "Delete mailing content"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "content"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create mailing list"
        },
        {
          "name": "Get Recipient Binding",
          "value": "getBinding",
          "action": "Get recipient binding"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mailinglist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get",
          "value": "read",
          "action": "Get recipient",
          "description": "Get recipient"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create recipient",
          "description": "Create recipient"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update recipient",
          "description": "Update profile and binding data of recipient"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete recipient",
          "description": "Delete recipient"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recipient"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"copy","name":"Copy","description":"Copy mailing","resource":"mailing"},{"operation":"create","name":"Create","description":"Create mailing","resource":"mailing"},{"operation":"delete","name":"Delete","description":"Delete mailing","resource":"mailing"},{"operation":"read","name":"Get","description":"Get mailing","resource":"mailing"},{"operation":"send","name":"Send","description":"Send mailing","resource":"mailing"},{"operation":"update","name":"Update","description":"Update mailing","resource":"mailing"},{"operation":"read","name":"Get","description":"Get mailing content","resource":"content"},{"operation":"update","name":"Update","description":"Update mailing content","resource":"content"},{"operation":"delete","name":"Delete","description":"Delete mailing content","resource":"content"},{"operation":"create","name":"Create","resource":"mailinglist"},{"operation":"getBinding","name":"Get Recipient Binding","resource":"mailinglist"},{"operation":"read","name":"Get","description":"Get recipient","resource":"recipient"},{"operation":"create","name":"Create","description":"Create recipient","resource":"recipient"},{"operation":"update","name":"Update","description":"Update profile and binding data of recipient","resource":"recipient"},{"operation":"delete","name":"Delete","description":"Delete recipient","resource":"recipient"}]

npm_readme:
  # @openemm/n8n-nodes-openemm

  These are OpenEMM community nodes for n8n. They let you use OpenEMM in your n8n workflows.

  [OpenEMM](https://www.agnitas.de/openemm-wiki/) is a web based enterprise application for email and marketing automation. It is used for automated email communication with customers, leads, members and employees. It can be operated via a web browser or in headless mode via its SOAP or REST API. OpenEMM is published under open source license [APGLv3](https://www.gnu.org/licenses/agpl-3.0.html).

  [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)
  [History](#history)


  ## Installation

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


  ## Operations

  The OpenEMM community nodes are extended from time to time. You can find the up-to-date functionality of all triggers and actions along with input and output parameters in the [OpenEMM Wiki](https://wiki-iframe.agnitas.de/doku.php?id=integration-apis).


  ## Credentials

  The OpenEMM community nodes use the REST API of OpenEMM for its action nodes and the callback API (webhooks) of OpenEMM for trigger nodes. Create credentials in n8n for the REST API so that an n8n workflow can access your OpenEMM instance. Copy the webhook URLs generated by n8n into the settings of the events in your OpenEMM instance so that OpenEMM can trigger workflows in n8n.


  ## Compatibility

  To be able to use all triggers and actions provided by the OpenEMM community nodes for n8n you have to use at least version 25.11 of OpenEMM.


  ## Usage

  Use the trigger nodes to receive event data from OpenEMM like mail openings, link clicks or profile field changes (via OpenEMM's callback API/webhooks).
  Use the action nodes to send data to OpenEMM like mailing or recipient data or to initiate an action like sending out a mailing (via OpenEMM's REST API).


  ## Resources
  * [OpenEMM integrations documenation](https://wiki-iframe.agnitas.de/doku.php?id=start#integrations)
  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)


  ## History

  0.3.0 update license to MIT
  0.2.0 initial public release

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with OpenEMM, an enterprise email and marketing automation platform, allowing workflows to trigger on events and send actions via API.","capabilities":["Receive event triggers via OpenEMM callback API/webhooks (e.g., mail openings, link clicks, profile changes)","Send data to OpenEMM via REST API (e.g., mailing, recipient data, initiate actions)","Support for both SOAP and REST API interactions with OpenEMM"],"authentication":"API key required (REST API credentials in n8n; webhook URLs configured in OpenEMM)","commonUseCases":["Automated email marketing campaigns","Lead tracking and engagement monitoring","Customer communication automation","Event-driven workflow triggers (opens, clicks, profile updates)"],"limitations":["Requires OpenEMM version 25.11 or higher to use all triggers and actions","Limited to REST API and callback API (webhooks) for integration"],"relatedNodes":["HTTP Request","Webhook","Email"]}


node_type: @a700/n8n-nodes-agent700.agent700Agent
package_name: @a700/n8n-nodes-agent700
display_name: Agent700 Agent
description: Send context to any trusted agent within Agent700 via our API
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: a700
author_github_url: https://github.com/Agent700-ai/Agent700-n8n.git
npm_package_name: @a700/n8n-nodes-agent700
npm_version: 1.2.2
community_fetched_at: 2026-03-25T21:19:40.931Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message to agent",
          "description": "Send a message to an agent. Uses POST /api/chat with messages[]. Optionally include an Agent ID."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"sendMessage","name":"Send Message","description":"Send a message to an agent. Uses POST /api/chat with messages[]. Optionally include an Agent ID.","resource":"chat"}]

npm_readme:
  # Agent700 n8n Custom Nodes

  Production-ready custom n8n nodes for integrating with the Agent700 API. These nodes provide seamless authentication, chat interactions, context management, and more.

  ## Table of Contents

  - [Installation](#installation)
  - [Authentication](#authentication)
  - [Node Documentation](#node-documentation)
  - [Workflow Examples](#workflow-examples)
  - [Best Practices](#best-practices)
  - [Troubleshooting](#troubleshooting)

  ## Installation

  ### Install from npm (recommended for production)

  Install the package in your n8n instance (or in your n8n project if using embedded nodes):

  ```bash
  npm install @a700/n8n-nodes-agent700
  ```

  - **Package:** [@a700/n8n-nodes-agent700](https://www.npmjs.com/package/@a700/n8n-nodes-agent700)
  - Restart n8n after installing. The nodes appear as **Agent700 Agent** and **Agent700 Context Library**.

  ### Prerequisites

  - n8n installed and running
  - Node.js 18+ and npm
  - Agent700 account credentials

  ### Build from source (optional)

  To build and run from the repository:

  ```bash
  git clone https://github.com/Agent700-ai/Agent700-n8n.git
  cd Agent700-n8n
  npm install
  npm run build
  ```

  This compiles TypeScript to JavaScript in the `dist/` folder.

  ### Manual installation (Docker / custom path)

  Choose the installation method that matches your n8n setup:

  #### Option 1: Docker Setup (Recommended for Testing)

  If you're using Docker Compose, you have two options:

  **Option A: Volume Mount (Recommended)**

  1. Update your `docker-compose.yml` to mount the built package:
     ```yaml
     volumes:
       - ./n8n-data:/home/node/.n8n/data
       - ./Agent700-n8n:/home/node/.n8n/custom/Agent700-n8n
     ```

  2. Restart your containers:
     ```bash
     docker-compose down
     docker-compose up -d
     ```

  3. Install dependencies inside the container:
     ```bash
     docker exec <CONTAINER_NAME> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"
     ```

  **Option B: Copy into Container**

  1. Find your n8n container:
     ```bash
     docker ps | grep n8n
     ```

  2. Copy the built package into the container:
     ```bash
     docker cp Agent700-n8n <CONTAINER_NAME>:/home/node/.n8n/custom/
     ```

  3. Install dependencies inside container:
     ```bash
     docker exec <CONTAINER_NAME> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"
     ```

  4. Restart container:
     ```bash
     docker restart <CONTAINER_NAME>
     ```

  #### Option 2: Local n8n Installation (Non-Docker)

  If you have n8n installed locally (not in Docker):

  1. Copy to n8n custom directory:
     ```bash
     # Find your n8n custom directory (usually ~/.n8n/custom)
     cp -r Agent700-n8n ~/.n8n/custom/
     
     # Install production dependencies
     cd ~/.n8n/custom/Agent700-n8n
     npm install --production
     ```

  2. Set environment variable (if needed):
     ```bash
     export N8N_CUSTOM_EXTENSIONS=~/.n8n/custom
     ```

  3. Restart n8n:
     ```bash
     # If running as service
     systemctl restart n8n
     
     # Or if running manually
     n8n start
     ```

  #### Option 3: Using npm link (For Development)

  For active development with hot reloading:

  1. Build and link your package:
     ```bash
     cd Agent700-n8n
     npm install
     npm run build
     npm link
     ```

  2. Link in n8n directory:
     ```bash
     # If n8n is installed globally
     cd $(npm root -g)/n8n
     npm link @a700/n8n-nodes-agent700
     
     # Or if n8n is in a specific directory
     cd /path/to/n8n
     npm link @a700/n8n-nodes-agent700
     ```

  3. Restart n8n

  **Note:** After making code changes, rebuild (`npm run build`) and restart n8n for changes to take effect.

  ### Verify Installation

  After installation, verify everything works:

  1. **Check nodes appear in n8n UI:**
     - Open n8n interface (typically `http://localhost:5678`)
     - Create a new workflow
     - Search for "Agent700" - you should see all nodes available:
       - Agent700 Agent
       - Agent700 Context Library

  3. **Check n8n logs for errors:**
     ```bash
     # Docker
     docker logs <CONTAINER_NAME>
     
     # Local
     n8n start --log-level=debug
     ```

  ### Troubleshooting Installation

  **Nodes don't appear:**
  - Verify `dist/` folder exists and contains `.node.js` files
  - Check `package.json` has correct `n8n.nodes` array
  - Ensure file permissions are correct (Docker: check container user permissions)
  - Restart n8n after installation
  - Check n8n logs for specific error messages

  **Dependencies missing:**
  - Run `npm install --production` in the custom nodes directory
  - For Docker: `docker exec <CONTAINER> sh -c "cd /home/node/.n8n/custom/Agent700-n8n && npm install --production"`

  **Build errors:**
  - Ensure TypeScript is installed: `npm install`
  - Check for TypeScript errors: `npm run build`
  - Verify Node.js version is 18+

  ## Authentication

  ### How Authentication Works

  All Agent700 nodes authenticate using an **App Password** configured directly in the node parameters. Nodes automatically handle authentication on each request - no manual token copying needed!

  ### Setting Up Authentication

  1. **Get your App Password** from the Agent700 web interface
     - Format: `app_a7_` followed by 32 characters
     - Example: `app_a7_12345678901234567890123456789012`

  2. **Configure in Node Parameters:**
     - **Base URL**: `https://api.agent700.ai` (default)
     - **App Password**: Your app password token (required)
     - Nodes automatically use this to obtain access tokens

  ### Authentication Flow

  1. Node sends App Password to `/api/auth/app-login`
  2. API returns an access token
  3. Node uses Bearer token for all subsequent API calls
  4. Token is obtained fresh for each execution

  ## Node Documentation

  ### 1. Agent700 Agent

  **Purpose**: Send messages to agents and get structured responses

  **Key Features:**
  - Auto-authenticates using App Password
  - Agent ID via manual entry
  - Simplify output option for cleaner responses
  - Full n8n UX guidelines compliance

  **Parameters:**
  - **Base URL**: `https://api.agent700.ai` (default)
  - **App Password** (required): Your Agent700 app password token
  - **Resource**: Chat (single resource)
  - **Operation**: Send Message
  - **Agent ID** (optional): Enter the Agent UUID manually
  - **Message** (required): Your message to send
  - **Simplify** (default: true): Return simplified output with key fields only

  **Output (Simplified):**
  ```json
  {
    "response": "Agent response",
    "finish_reason": "stop",
    "scrubbed_message": "...",
    "error": null,
    "prompt_tokens": 100,
    "completion_tokens": 50
  }
  ```

  **Output (Full):**
  Returns complete API response with all fields.

  **Example:**
  ```
  1. Add "Agent700 Agent" node
  2. Enter App Password
  3. Enter Agent ID (UUID from Agent700 web interface)
  4. Enter message: "What is AI?"
  5. Enable Simplify for cleaner output (optional)
  6. Execute
  ```

  ### 2. Agent700 Context Library

  **Purpose**: Manage alignment data (key-value storage) with encryption at rest

  **Key Features:**
  - Full CRUD operations following n8n vocabulary
  - Pattern matching and query operations
  - JSON construction from patterns
  - Auto-authenticates using App Password

  **Resource**: Entry

  **Operations:**
  - **Get**: Retrieve a single entry by key
  - **Get Many**: List all entries
  - **Create**: Create a new entry
  - **Update**: Update an existing entry (with optional key renaming)
  - **Upsert**: Create or update an entry (upsert)
  - **Delete**: Delete an entry (returns `{ deleted: true, key }`)
  - **Query**: List key/value pairs matching a pattern
  - **Query + Construct**: Construct JSON from pattern matches using a template

  **Example (Upsert):**
  ```
  1. Add "Agent700 Context Library" node
  2. Enter App Password
  3. Resource: Entry
  4. Operation: "Upsert"
  5. Key: "user_preference"
  6. Value: {"theme": "dark_mode"}
  7. Execute
  ```

  **Example (Delete):**
  ```
  1. Operation: "Delete"
  2. Key: "old_key"
  3. Returns: { "deleted": true, "key": "old_key" }
  ```


  ## Workflow Examples

  ### Example 1: Simple Chat Workflow

  **Use Case**: One-off questions, simple Q&A

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → Send message
     - Enter App Password
     - Select Agent ID
     - Message: "What is machine learning?"
  3. **Display Response** → Show result

  **Node Flow:**
  ```
  Manual Trigger → Agent700 Agent → Display Response
  ```

  **When to Use:**
  - Quick questions
  - Single message interactions
  - No conversation history needed

  ---

  ### Example 2: Chat with Conversation Context

  **Use Case**: Multi-turn conversations, follow-up questions

  **Note**: Conversation context feature is not available in v2. For multi-turn conversations, manually include previous messages in your prompt or use the Context Library to store conversation history.

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → First message
     - Enter App Password
     - Select Agent ID
     - Message: "Explain quantum computing"
  3. **Agent700 Agent** → Follow-up
     - Include previous context in message
     - Message: "Based on your previous explanation, how does it differ from classical computing?"
  4. **Display Response** → Show result

  **Node Flow:**
  ```
  Manual Trigger → Agent700 Agent → Agent700 Agent (with context) → Display
  ```

  ---

  ### Example 3: URL Evaluation Workflow

  **Use Case**: Content analysis, privacy policy scanning, URL validation

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Get URLs** → Retrieve URLs (from Context Library or input)
  3. **Split in Batches** → Process one at a time
  4. **Agent700 Agent** → Evaluate each URL
     - Message: "Analyze this URL for privacy concerns: {{$json.url}}"
  5. **Save Results** → Store in Context Library
  6. **Aggregate** → Combine all evaluations

  **Node Flow:**
  ```
  Trigger → Get URLs → Split → Chat → Save → Aggregate
  ```

  **Advanced Version:**
  ```
  Trigger → Context Library (List) → Loop → Chat → Context Library (Upsert) → Summary
  ```

  ---

  ### Example 4: Context Library Management Workflow

  **Use Case**: Dynamic context injection, data-driven conversations

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Context Library** → List all data
     - Operation: "List All Data"
  3. **Process Data** → Filter/transform as needed
  4. **Agent700 Context Library** → Upsert new data
     - Operation: "Upsert Data"
     - Key: "user_context"
     - Value: "{{$json.processed_data}}"
  5. **Agent700 Agent** → Use context in conversation
     - Message: "Based on this context: {{$json.user_context}}, answer my question"

  **Node Flow:**
  ```
  Trigger → Context Library (List) → Process → Context Library (Upsert) → Chat
  ```

  ---

  ### Example 8: Error Handling Workflow

  **Use Case**: Production workflows, reliability-critical applications

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Agent700 Agent** → Attempt chat
  3. **Error Handler** → Catch errors
  4. **Retry Logic** → Retry on failure (with delay)
  5. **Fallback Response** → Use cached/default response if all retries fail

  **Node Flow:**
  ```
  Trigger → Chat → Error Handler → Retry → Fallback
  ```

  **Implementation Tips:**
  - Use "Continue on Fail" option in nodes
  - Implement retry with exponential backoff
  - Cache successful responses for fallback

  ---

  ### Example 9: Batch Processing Workflow

  **Use Case**: Bulk operations, data processing pipelines

  **Steps:**
  1. **Manual Trigger** → Start workflow
  2. **Get Items** → Retrieve items to process (from Context Library, database, etc.)
  3. **Split in Batches** → Process in batches
  4. **Agent700 Agent** → Process each item
     - Message: "Process this item: {{$json.item}}"
  5. **Aggregate Results** → Combine all results
  6. **Save** → Store aggregated results

  **Node Flow:**
  ```
  Trigger → Get Items → Split → Chat (per item) → Aggregate → Save
  ```

  **Performance Tips:**
  - Process in parallel batches
  - Use Continue on Fail for individual items
  - Aggregate results efficiently


  ## Best Practices

  ### When to Use Which Node

  - **Agent Node**: Regular chat interactions, sending messages to agents
  - **Context Library Node**: Data storage, context injection, pattern matching

  ### Authentication Management

  1. **Use App Passwords**
     - Required for all nodes
     - Can be revoked individually
     - Better audit trail
     - Format: `app_a7_` + 32 characters

  2. **Store App Passwords Securely**
     - Use n8n's parameter encryption
     - Never hard-code in workflows
     - Rotate app passwords regularly
     - Consider using n8n environment variables for sensitive values

  3. **One App Password Per Environment**
     - Separate app passwords for dev/staging/prod
     - Use different Agent IDs per environment

  ### Error Handling

  1. **Enable Continue on Fail**
     - For batch processing
     - When individual failures shouldn't stop workflow

  2. **Implement Retry Logic**
     - For transient errors (network, timeouts)
     - Use exponential backoff

  3. **Log Errors Properly**
     - Use n8n's error handling
     - Store error details in Context Library for debugging

  ### Performance Tips

  1. **Message Context**
     - Include previous messages manually in prompts when needed
     - Use Context Library to store conversation history
     - Limit context size to avoid token limits

  2. **Batch Processing**
     - Process items in parallel when possible
     - Use Split in Batches node
     - Aggregate results efficiently

  3. **Caching**
     - Cache agent configs in Context Library
     - Cache frequently accessed data
     - Use workflow static data for session management

  ### Security

  1. **SSL/TLS Configuration**
     - Use "Strict SSL" in production
     - Only disable for development/testing

  2. **Token Management**
     - Tokens auto-refresh via credentials

  3. **Data Privacy**
     - Be careful with PII in messages
     - Use Context Library encryption features
     - Review scrubbed_message in responses

  ## Troubleshooting

  ### Common Issues

  #### Authentication Fails

  **Symptoms:**
  - "Authentication failed" errors
  - 401 Unauthorized responses
  - "App login did not return accessToken" errors

  **Solutions:**
  1. Verify App Password is correct (format: `app_a7_` + 32 chars)
  2. Check API Base URL is correct (`https://api.agent700.ai`)
  3. Verify App Password is valid in Agent700 web interface
  4. Try creating a new app password
  5. Check network connectivity
  6. Ensure App Password parameter is set in node (not empty)

  #### Node Not Appearing

  **Symptoms:**
  - Can't find Agent700 nodes in n8n

  **Solutions:**
  1. Verify installation path is correct (see [Installation](#installation) section)
  2. Check `dist/` folder exists and contains compiled `.node.js` files
  3. Verify `package.json` n8n.nodes array matches actual file paths
  4. Check file permissions (Docker: ensure container user can read files)
  5. Restart n8n after installation
  6. Check n8n logs for errors: `docker logs <CONTAINER>` or `n8n start --log-level=debug`
  7. Verify TypeScript compiled successfully (`npm run build`)
  8. For Docker: Ensure volume mount path is correct in `docker-compose.yml`
  9. Install dependencies: `npm install --production` in the custom nodes directory

  #### Agent ID Not Found

  **Symptoms:**
  - "Agent not found" errors

  **Solutions:**
  1. Verify the Agent UUID is correct (copy from Agent700 web interface)
  2. Verify App Password is correct and has access to the agent
  3. Check you have access to agents in Agent700 account
  4. Verify API Base URL is correct

  #### API Errors

  **Symptoms:**
  - 4xx/5xx HTTP errors
  - "API Error" messages

  **Solutions:**
  1. Check error details in node output
  2. Verify Agent UUID is correct
  3. Check API rate limits
  4. Review API documentation for endpoint changes
  5. Enable Continue on Fail to see detailed errors

  #### SSL/TLS Issues

  **Symptoms:**
  - Certificate errors
  - Connection refused

  **Solutions:**
  1. Use "Strict SSL" in production
  2. Check API Base URL uses HTTPS
  3. Verify certificate is valid
  4. Only use "Allow Self-Signed" for development

  ### Debugging Tips

  1. **Check Node Output**
     - Look at `json` output for error details
     - Check `status` field for operation results

  2. **Enable Continue on Fail**
     - See what errors occur
     - Don't stop workflow on first error

  3. **Use Context Library for Logging**
     - Store debug information
     - Track workflow execution

  4. **Test Individual Nodes**
     - Test each node separately
     - Verify credentials work
     - Check API connectivity

  ### Getting Help

  1. **Check n8n Logs**
     - Look for error messages
     - Check execution logs

  2. **Review API Documentation**
     - Agent700 API docs
     - n8n node development docs

  3. **Test with Simple Workflow**
     - Start with basic chat
     - Add complexity gradually

  ## Workflow Templates

  Ready-to-use workflow templates are available in the `workflows/` folder:

  - `simple-chat.json` - Basic chat workflow
  - `chat-with-context.json` - Conversation context example
  - `url-evaluation.json` - URL evaluation workflow
  - `context-library-management.json` - Context Library operations
  - `error-handling.json` - Error handling example
  - `batch-processing.json` - Batch processing workflow

  **Note**: Workflow templates from v1 may need updates for v2:
  - Replace credential references with App Password parameter
  - Update node type names (`agent700Chat` → `agent700Agent`)
  - Update operation names in Context Library node

  **To import:**
  1. In n8n, go to **Workflows** → **Import from File**
  2. Select the JSON file from `workflows/` folder
  3. Configure App Password in each node
  4. Update Agent IDs if needed
  5. Execute and customize

  ## License

  MIT License - see LICENSE file for details.

  ## Support

  - Check n8n documentation for general n8n issues
  - Review Agent700 API documentation for API-specific issues
  - Create issues in the repository for bugs or feature requests

ai_documentation_summary:
  {"purpose":"This n8n node enables communication with the Agent700 AI platform by sending context to trusted agents via their API and receiving structured responses.","capabilities":["Send messages to Agent700 agents","Receive structured responses from agents","Manage context libraries","Auto-authentication using App Password","Simplify output formatting","API token refresh per execution"],"authentication":"App Password required (format: app_a7_ + 32 characters)","commonUseCases":["Integrating AI agents into n8n workflows","Automated customer support routing","Context-aware data processing","API-driven chatbot interactions"],"limitations":["Requires manual App Password configuration","Base URL must be manually set (default: https://api.agent700.ai)","Requires npm installation or custom node deployment"],"relatedNodes":["Agent700 Context Library","Generic HTTP Request","Function Item"]}


node_type: n8n-nodes-belakeai.belakeAi
package_name: n8n-nodes-belakeai
display_name: Belake.ai
description: Belake.ai API operations
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: rique29
author_github_url: https://github.com/belakeaiservicos/
npm_package_name: n8n-nodes-belakeai
npm_version: 1.0.7
community_fetched_at: 2026-03-25T21:19:40.932Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Chat",
          "value": "chat"
        },
        {
          "name": "Datasource",
          "value": "datasource"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Language Model",
          "value": "languageModel"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Agents",
      "options": [
        {
          "name": "Get Agent by ID",
          "value": "Get Agent by ID",
          "action": "Get agent by id"
        },
        {
          "name": "Get Agents",
          "value": "Get Agents",
          "action": "Get agents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Send Message",
      "options": [
        {
          "name": "Get Chat by ID",
          "value": "Get Chat by ID",
          "action": "Get chat by id"
        },
        {
          "name": "Get Chats",
          "value": "Get Chats",
          "action": "Get chats"
        },
        {
          "name": "Send Message",
          "value": "Send Message",
          "action": "Send message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Datasources",
      "options": [
        {
          "name": "Get Datasource by ID",
          "value": "Get Datasource by ID",
          "action": "Get datasource by id"
        },
        {
          "name": "Get Datasources",
          "value": "Get Datasources",
          "action": "Get datasources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "datasource"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Groups",
      "options": [
        {
          "name": "Get Group by ID",
          "value": "Get Group by ID",
          "action": "Get group by id"
        },
        {
          "name": "Get Groups",
          "value": "Get Groups",
          "action": "Get groups"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Language Models",
      "options": [
        {
          "name": "Get Language Model by ID",
          "value": "Get Language Model by ID",
          "action": "Get language model by id"
        },
        {
          "name": "Get Language Models",
          "value": "Get Language Models",
          "action": "Get language models"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "languageModel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Get Workspaces",
      "options": [
        {
          "name": "Get Workspace by ID",
          "value": "Get Workspace by ID",
          "action": "Get workspace by id"
        },
        {
          "name": "Get Workspaces",
          "value": "Get Workspaces",
          "action": "Get workspaces"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"Get Agent by ID","name":"Get Agent by ID","resource":"agent"},{"operation":"Get Agents","name":"Get Agents","resource":"agent"},{"operation":"Get Chat by ID","name":"Get Chat by ID","resource":"chat"},{"operation":"Get Chats","name":"Get Chats","resource":"chat"},{"operation":"Send Message","name":"Send Message","resource":"chat"},{"operation":"Get Datasource by ID","name":"Get Datasource by ID","resource":"datasource"},{"operation":"Get Datasources","name":"Get Datasources","resource":"datasource"},{"operation":"Get Group by ID","name":"Get Group by ID","resource":"group"},{"operation":"Get Groups","name":"Get Groups","resource":"group"},{"operation":"Get Language Model by ID","name":"Get Language Model by ID","resource":"languageModel"},{"operation":"Get Language Models","name":"Get Language Models","resource":"languageModel"},{"operation":"Get Workspace by ID","name":"Get Workspace by ID","resource":"workspace"},{"operation":"Get Workspaces","name":"Get Workspaces","resource":"workspace"}]

npm_readme:
  # n8n-nodes-belakeai

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

  Belake.ai is an AI platform that provides intelligent agents, chat interactions, data source management, group organization, language model integration, and workspace management to enhance your automation workflows.

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

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

  ## Installation

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

  ## Operations

  ### Agent

  * **Get Agent by ID** - Retrieves detailed information about a specific agent using its identifier
  * **Get Agents** - Retrieves a list of all available agents

  ### Chat

  * **Get Chat by ID** - Retrieves a specific chat conversation using its identifier
  * **Get Chats** - Retrieves a list of all chats
  * **Send Message** - Sends a message to AI agents, with support for multiple agents, language specification, optional chat continuation, and chat visibility control

  ### Datasource

  * **Get Datasource by ID** - Retrieves detailed information about a specific datasource using its identifier
  * **Get Datasources** - Retrieves a list of all available datasources

  ### Group

  * **Get Group by ID** - Retrieves detailed information about a specific group using its identifier
  * **Get Groups** - Retrieves a list of all groups

  ### Language Model

  * **Get Language Model by ID** - Retrieves detailed information about a specific language model using its identifier
  * **Get Language Models** - Retrieves a list of all available language models

  ### Workspace

  * **Get Workspace by ID** - Retrieves detailed information about a specific workspace using its identifier
  * **Get Workspaces** - Retrieves a list of all workspaces

  ## Credentials

  To use this node, you need to authenticate with Belake.ai using API key authentication.

  ### Prerequisites

  1. **Belake.ai Account**: You need an active Belake.ai account. If you don't have one, sign up at [https://www.belake.ai/](https://www.belake.ai/)
  2. **Backend URL**: Your Belake.ai backend instance URL (e.g., `https://[instance].belake.ai`). All API routes use the `/v1` prefix automatically.
  3. **API Key**: Obtain your API key from the Belake.ai portal

  ### Authentication Method

  **API Key Authentication** - This node uses API key-based authentication where:

  * You provide your Backend URL and API Key in the credential configuration
  * The credentials securely store your API key (no HTTP requests are made at credential level)
  * When executing a workflow, the node automatically exchanges your API key for a bearer token using n8n's built-in HTTP helpers
  * The bearer token is then used for all subsequent API requests within that execution
  * Authentication is handled transparently on each workflow execution

  ### Setting Up Credentials

  1. In n8n, create a new credential and select "Belake API"
  2. Enter your **Backend URL** (must include protocol, e.g., `https://[your-instance].belake.ai`)
  3. Enter your **API Key** from the Belake.ai portal
  4. Click "Test" to verify your credentials work correctly
  5. Save the credential

  For detailed credential setup instructions, see the [credentials documentation](credentials/README.md).

  ## Compatibility

  This node requires n8n version 1.0.0 or higher. It has been tested with n8n versions 1.0.0 and above.

  The node uses the n8n Nodes API version 1 with strict mode enabled.

  ### Technical Implementation

  * **Credentials**: Store API key and backend URL without making HTTP requests (compliant with n8n best practices)
  * **Authentication**: Token exchange is performed at node execution time using `this.helpers.httpRequest()`
  * **Request Handling**: Declarative operations map with centralized authentication helper
  * **Type Safety**: Full TypeScript support with `IDataObject` types (no `any` types)
  * **Error Handling**: Proper error handling with support for "Continue on Fail" mode

  ## Usage

  ### Basic Workflow Example

  A common use case is to send a message to AI agents and process the response:

  1. Add a Belake.ai node to your workflow
  2. Select your Belake API credentials
  3. Choose the **Chat** resource and **Send Message** operation
  4. Configure the message parameters:

     * **Message**: The message content to send
     * **Agent IDs**: Array of agent IDs to send the message to
     * **Language**: Language code (default: `pt-br`)
     * **Chat ID** (optional): For continuing an existing conversation
     * **Hide Chat**: Boolean to control chat visibility in response
  5. Execute the workflow

  ### Retrieving Information

  To retrieve information about available resources:

  1. Select the appropriate resource (Agent, Chat, Datasource, Group, Language Model, or Workspace)
  2. Choose **Get [Resource]s** to list all available items
  3. Use **Get [Resource] by ID** to retrieve specific item details using its identifier
  4. Many operations accept an optional **Workspace ID** to filter results by workspace

  ### Best Practices

  * Use descriptive names for your credentials to distinguish between different Belake.ai instances or environments
  * Store sensitive information like API keys securely
  * Handle errors appropriately in your workflows
  * Use the chat continuation feature (Chat ID) to maintain conversation context across multiple messages

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Belake.ai homepage](https://www.belake.ai/)
  * [Belake.ai API credentials documentation](credentials/README.md)

  ## Version history

  * **v1.0.3** - API v1 routes and Workspace resource (current)
    * Migrated all API endpoints to `/v1` prefix
    * Replaced Department resource with Group resource
    * Added Workspace resource with Get Workspace by ID and Get Workspaces operations
    * Workspace ID field available across resources for filtering

  * **v1.0.2** - Architecture improvements
    * Refactored authentication to comply with n8n best practices
    * Moved token exchange from credentials to node execution
    * Implemented declarative operations map for cleaner code
    * Enhanced type safety (removed `any` types)
    * Improved error handling and code maintainability

  * **v1.0.1** - Repository updates
    * Renamed repository references and added lint file

  * **v1.0.0** - First release
    * Support for Agent, Chat, Datasource, Department, and Language Model resources
    * API key authentication
    * Operations for retrieving and managing Belake.ai resources
    * Chat message sending with multi-agent support and language specification

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Belake.ai, an AI platform for managing agents, chats, datasources, groups, language models, and workspaces within automation workflows.","capabilities":["Retrieve agent information by ID or list all agents","Retrieve chat information by ID or list all chats","Send messages to AI agents with language specification and chat continuation support","Retrieve datasource information by ID or list all datasources","Retrieve group information by ID or list all groups","Retrieve language model information by ID or list all language models","Retrieve workspace information by ID or list all workspaces","Filter resource queries by workspace ID","Control chat visibility in responses"],"authentication":"API Key Authentication","commonUseCases":["Sending messages to AI agents for chat interactions","Managing and listing AI agents, chats, and workspaces","Retrieving configuration details for datasources, groups, and language models","Maintaining conversation context using chat continuation"],"limitations":["Requires an active Belake.ai account and backend instance URL","Requires n8n version 1.0.0 or higher","Only read operations (Get) and message sending (Send Message) are documented; other CRUD operations may not be available"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.credential"]}


node_type: @contaazul/n8n-nodes-contaazul.contaAzul
package_name: @contaazul/n8n-nodes-contaazul
display_name: Conta Azul API
description: Allows making requests to the Conta Azul API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: contaazul-admin
author_github_url: https://github.com/ContaAzul/n8n-nodes-contaazul.git
npm_package_name: @contaazul/n8n-nodes-contaazul
npm_version: 0.3.22
community_fetched_at: 2026-03-25T21:19:40.932Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getAllServices",
      "options": [
        {
          "name": "Create Person",
          "value": "createPerson"
        },
        {
          "name": "Create Product",
          "value": "createProduct"
        },
        {
          "name": "Create Sale",
          "value": "createSale"
        },
        {
          "name": "Create Service",
          "value": "createService"
        },
        {
          "name": "Search Categories",
          "value": "getCategories"
        },
        {
          "name": "Search Cost Centers",
          "value": "getCostCenters"
        },
        {
          "name": "Search Expenses By Filter",
          "value": "getExpensesByFilter"
        },
        {
          "name": "Search Financial Accounts",
          "value": "getFinancialAccounts"
        },
        {
          "name": "Search Installment By ID",
          "value": "getInstallmentById"
        },
        {
          "name": "Search Person By ID",
          "value": "getPersonById"
        },
        {
          "name": "Search Persons By Filter",
          "value": "getPersonsByFilter"
        },
        {
          "name": "Search Product By ID",
          "value": "getProductById"
        },
        {
          "name": "Search Products By Filter",
          "value": "getProductsByFilter"
        },
        {
          "name": "Search Revenues By Filter",
          "value": "getRevenuesByFilter"
        },
        {
          "name": "Search Sale By ID",
          "value": "getSaleById"
        },
        {
          "name": "Search Sales By Filter",
          "value": "getSalesByFilter"
        },
        {
          "name": "Search Service By ID",
          "value": "getServiceById"
        },
        {
          "name": "Search Services By Filter",
          "value": "getAllServices"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Person",
      "value": "createPerson"
    },
    {
      "name": "Create Product",
      "value": "createProduct"
    },
    {
      "name": "Create Sale",
      "value": "createSale"
    },
    {
      "name": "Create Service",
      "value": "createService"
    },
    {
      "name": "Search Categories",
      "value": "getCategories"
    },
    {
      "name": "Search Cost Centers",
      "value": "getCostCenters"
    },
    {
      "name": "Search Expenses By Filter",
      "value": "getExpensesByFilter"
    },
    {
      "name": "Search Financial Accounts",
      "value": "getFinancialAccounts"
    },
    {
      "name": "Search Installment By ID",
      "value": "getInstallmentById"
    },
    {
      "name": "Search Person By ID",
      "value": "getPersonById"
    },
    {
      "name": "Search Persons By Filter",
      "value": "getPersonsByFilter"
    },
    {
      "name": "Search Product By ID",
      "value": "getProductById"
    },
    {
      "name": "Search Products By Filter",
      "value": "getProductsByFilter"
    },
    {
      "name": "Search Revenues By Filter",
      "value": "getRevenuesByFilter"
    },
    {
      "name": "Search Sale By ID",
      "value": "getSaleById"
    },
    {
      "name": "Search Sales By Filter",
      "value": "getSalesByFilter"
    },
    {
      "name": "Search Service By ID",
      "value": "getServiceById"
    },
    {
      "name": "Search Services By Filter",
      "value": "getAllServices"
    }
  ]

npm_readme:
  # n8n-nodes-contaazul

  This is an n8n community node that allows integration with the Conta Azul API in your workflows.

  Conta Azul is a business management platform that offers solutions for financial control, sales, products, services, and customer management. This node allows you to automate operations such as sales searches, product creation, customer management, and financial queries.

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

  [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

  ### Services

  - **Search service by filter**: Lists services with text search filters and pagination
  - **Search service by ID**: Gets details of a specific service
  - **Create service**: Creates a new service

  ### Sales

  - **Search sale by filter**: Lists sales with text search filters and pagination
  - **Search sale by ID**: Gets details of a specific sale
  - **Create sale**: Creates a new sale with items, customer, and payment method

  ### People - Customers/Suppliers

  - **Search people by filter**: Lists customer/supplier people with search filters
  - **Search person by ID**: Gets details of a specific person
  - **Create person**: Creates a new customer/supplier person

  ### Products

  - **Search products by filter**: Lists products with search filters
  - **Search product by id** : Get details of a specific product
  - **Create product**: Creates a new product

  ### Financial

  - **Search financial accounts**: Lists all financial accounts
  - **Search revenues by filter**: Lists revenues with filters
  - **Search expenses by filter**: Lists expenses with filters
  - **Search installment by ID**: Gets details of a specific installment
  - **Search categories**: Lists all available categories
  - **Search cost centers**: Lists all cost centers

  ## Credentials

  To use this node, you need a Conta Azul account and configure OAuth2 credentials.

  ### Prerequisites

  1. Have an active Conta Azul account
  2. Access the Conta Azul developer panel
  3. Create an application to get the Client ID and Client Secret

  ### Credential Configuration

  1. In n8n, go to **Settings** > **Credentials**
  2. Click **Add Credential**
  3. Select **Conta Azul OAuth2 API**
  4. Fill in the fields:
     - **Client ID**: Your Conta Azul Client ID
     - **Client Secret**: Your Conta Azul Client Secret
     - **Scope**: `openid profile aws.cognito.signin.user.admin` (default)
     - **Auth URL**: `https://auth.contaazul.com/oauth2/authorize` (default)
     - **Token URL**: `https://auth.contaazul.com/oauth2/token` (default)
  5. Click **Save** and authorize the application

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested versions**: 1.0.0, 1.1.0, 1.2.0
  - **Node.js**: >=20.15

  ## Usage

  ### Example: Search Recent Sales

  1. Add the **Conta Azul** node to your workflow
  2. Configure credentials
  3. Select the **Search sale by filter** operation
  4. Configure search parameters (optional)
  5. Execute the workflow

  ### Example: Create a New Sale

  1. Add the **Conta Azul** node to your workflow
  2. Configure credentials
  3. Select the **Create sale** operation
  4. Fill in required data:
     - Customer ID
     - Payment method
     - Sale items
  5. Execute the workflow

  ### Example: Sync Products

  1. Use the **Conta Azul** node with **Search products by filter** operation
  2. Connect with other nodes to process data
  3. Use webhooks for automatic synchronization

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Conta Azul API Documentation](https://developers.contaazul.com/guide)
  - [Conta Azul Developer Portal](https://developers-portal.contaazul.com)
  - [Try n8n](https://docs.n8n.io/try-it-out/)

  ## Version History

  ### v0.3.2

  - Fixed n8n-workflow dependency configuration
  - Removed postinstall script
  - Removed resolutions and overrides
  - Updated to latest n8n-workflow version

  ### v0.3.1

  - Initial implementation of the node
  - Support for basic operations: search services, sales, people, products, categories, cost centers, and financial
  - Integration with Conta Azul OAuth2

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of financial and business operations by connecting to the Conta Azul API for managing sales, customers, products, and financial data.","capabilities":["Search services by filter or ID","Create new services","Search sales by filter or ID","Create new sales with items, customer, and payment method","Search customers/suppliers by filter or ID","Create new customer/supplier records","Search products by filter or ID","Create new products","Search financial accounts","Search revenues and expenses by filter"],"authentication":"OAuth2","commonUseCases":["Automating sales data retrieval and creation","Managing customer and supplier records","Synchronizing product catalogs","Tracking financial accounts, revenues, and expenses","Automating financial reporting workflows"],"limitations":["Requires an active Conta Azul account and developer panel access","Requires manual configuration of OAuth2 credentials (Client ID and Secret)","Minimum n8n version requirement is 1.0.0"],"relatedNodes":["HTTP Request","Webhook","Function Item"]}


node_type: @alphainsiderinc/n8n-nodes-alphainsider.alphaInsider
package_name: @alphainsiderinc/n8n-nodes-alphainsider
display_name: AlphaInsider
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: alphainsider
author_github_url: https://github.com/AlphaInsider/n8n-nodes-alphainsider.git
npm_package_name: @alphainsiderinc/n8n-nodes-alphainsider
npm_version: 1.4.3
community_fetched_at: 2026-03-25T21:19:40.933Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Open Marketplace for Trading Strategies. Follow top crypto & stock strategies in real-time. Automate trades by connecting your broker or exchange. Split capital across multiple strategies.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "websockets",
      "options": [
        {
          "name": "Websockets",
          "value": "websockets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "subscribe",
      "options": [
        {
          "name": "Subscribe",
          "value": "subscribe",
          "action": "Subscribe to websocket channels",
          "description": "Subscribe to real-time websocket events from AlphaInsider"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "websockets"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"subscribe","name":"Subscribe","description":"Subscribe to real-time websocket events from AlphaInsider","resource":"websockets"}]

npm_readme:
  # n8n-nodes-alphainsider

  This is an n8n community node package that provides:

  - **AlphaInsider** trigger node with selectable actions (including websocket triggers)
  - **AlphaInsider API** credentials used by the trigger

  [Installation](#installation)
  [Credentials](#credentials)
  [Usage](#usage)
  [Resources](#resources)
  [Support](#support)

  ## Installation

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

  ## Credentials

  1. Log in to [AlphaInsider](https://alphainsider.com).
  2. Open [Settings -> Developers](https://alphainsider.com/settings/developers).
  3. Generate an API key.
  4. In n8n, create **AlphaInsider API** credentials and paste your API key.

  n8n validates credentials with a `POST https://alphainsider.com/api/verifyToken` request.

  ## Usage

  Use the **AlphaInsider** trigger node to subscribe to realtime updates from `wss://alphainsider.com/ws`.

  1. Add **AlphaInsider** to your workflow.
  2. Select your **AlphaInsider API** credentials.
  3. Choose **Action Sub-Label** = `Websockets`.
  4. Choose **Action** = `Trigger`.
  5. Enter channels (comma-separated or newline-separated).
  6. Activate the workflow.

  ### Subscription Payload

  ```json
  {
    "event": "subscribe",
    "payload": {
      "channels": ["wsOrders:<STRATEGY_ID>"],
      "token": "<YOUR_API_KEY>"
    }
  }
  ```

  ### Channel Examples

  - `wsStockPrice:AAPL:NASDAQ`
  - `wsStrategyValue:<STRATEGY_ID>`
  - `wsOrders:<STRATEGY_ID>`
  - `wsPositions:<STRATEGY_ID>`
  - `wsTimelines:<STRATEGY_ID>`
  - `wsBotStatus:<BOT_ID>`
  - `wsBotAllocations:<BOT_ID>`
  - `wsBotActivities:<BOT_ID>`

  ### Notes

  - Enable **Emit Lifecycle Events** for connection/subscription diagnostics.
  - Enable **Debug Logging** to add websocket diagnostics to n8n logs.
  - Control events (for example `subscribe`, `error`, `connected`) are not emitted as data items.
  - Only `ws...` data events for subscribed channels are emitted.
  - In manual/test mode, lifecycle events are suppressed to avoid early completion.

  ## Resources

  - [AlphaInsider Platform](https://alphainsider.com)
  - [AlphaInsider API Docs](https://api.alphainsider.com)
  - [AlphaInsider Websocket Docs](https://api.alphainsider.com/resources/websockets)
  - [n8n Docs](https://docs.n8n.io/)

  ## Support

  - [GitHub Issues](https://github.com/AlphaInsider/n8n-nodes-alphainsider/issues)
  - [AlphaInsider Support](https://alphainsider.com/contact)

ai_documentation_summary:
  {"purpose":"This node enables real-time monitoring of AlphaInsider trading strategies by subscribing to WebSocket channels for stock prices, strategy values, orders, positions, and bot activities.","capabilities":["Trigger node for real-time WebSocket updates","Subscribe to multiple strategy channels","Monitor stock prices (e.g., AAPL:NASDAQ)","Track strategy values and positions","Monitor bot status, allocations, and activities","Emit lifecycle events for diagnostics","Support for manual/test mode"],"authentication":"API key required","commonUseCases":["Real-time trading strategy monitoring","Automated trade execution based on strategy signals","Capital allocation across multiple strategies","Bot activity tracking and management"],"limitations":["Lifecycle events (subscribe, error, connected) are not emitted as data items","Only data events for subscribed channels are emitted","Manual/test mode suppresses lifecycle events to prevent early completion"],"relatedNodes":["n8n Webhook node","n8n Code node","n8n HTTP Request node"]}


node_type: @demografix/n8n-nodes-genderize.demografixGenderize
package_name: @demografix/n8n-nodes-genderize
display_name: Genderize
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: demografix
author_github_url: https://github.com/DemografixGenderize/n8n-nodes-genderize.git
npm_package_name: @demografix/n8n-nodes-genderize
npm_version: 1.1.0
community_fetched_at: 2026-03-25T21:19:40.933Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Get gender prediction for a given name using the Genderize.io API (100 free requests/day without API key, more with subscription)

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getGender",
      "options": [
        {
          "name": "Get Gender",
          "value": "getGender",
          "action": "Get gender prediction for a name",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { ...($response.body), \"rateLimit\": { \"limit\": $response.headers[\"x-rate-limit-limit\"], \"remaining\": $response.headers[\"x-rate-limit-remaining\"], \"reset\": $response.headers[\"x-rate-limit-reset\"] } } }}"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "name": "={{$parameter.name}}",
                "country_id": "={{$parameter.country_id || undefined}}"
              },
              "url": "",
              "method": "GET"
            }
          },
          "description": "Get the predicted gender for a given first name"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Gender",
      "value": "getGender",
      "action": "Get gender prediction for a name",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { ...($response.body), \"rateLimit\": { \"limit\": $response.headers[\"x-rate-limit-limit\"], \"remaining\": $response.headers[\"x-rate-limit-remaining\"], \"reset\": $response.headers[\"x-rate-limit-reset\"] } } }}"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "name": "={{$parameter.name}}",
            "country_id": "={{$parameter.country_id || undefined}}"
          },
          "url": "",
          "method": "GET"
        }
      },
      "description": "Get the predicted gender for a given first name"
    }
  ]

npm_readme:
  # @demografix/n8n-nodes-genderize

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

  Genderize.io is a gender prediction API that infers gender based on first names using statistical analysis. 

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

  ## Operations

  - **Get Gender**: Predict the gender for a given first name with probability score

  ## Credentials

  ### Free Tier (No Authentication Required)
  You can start using this node immediately without any credentials. The free tier provides:
  - **100 requests per day** per IP address
  - No signup required
  - No API key needed

  ### Paid Tier (API Key Required)
  For higher request volumes, you can subscribe to a paid plan at [genderize.io](https://genderize.io) with various tier options for increased rate limits.

  **Setting up credentials:**
  1. Sign up at [genderize.io](https://genderize.io)
  2. Subscribe to a paid plan to receive your API key
  3. In n8n, create new "Genderize API" credentials
  4. Enter your API key
  5. Test the credentials to verify they work

  ## Compatibility

  This node is built using n8n's declarative style and requires n8n version 1.0 or later.

  ## Usage

  ### Basic Example
  1. Add the "Genderize" node to your workflow
  2. Enter a first name (e.g., "Peter", "Sarah", "Alex")
  3. Execute the node

  ### Response Data
  The node returns the following data:
  - `name`: The name that was queried
  - `gender`: Predicted gender ("male", "female", or null)
  - `probability`: Confidence score (0-1, where 1 is 100% confident)
  - `count`: Number of data samples used for this prediction
  - `rateLimit.limit`: Total requests allowed in current period
  - `rateLimit.remaining`: Requests remaining in current period
  - `rateLimit.reset`: Unix timestamp when rate limit resets

  ### Tips
  - Names with probability close to 0.5 indicate unisex names with less certainty
  - The API supports diacritics and non-Latin alphabets
  - Use the `rateLimit` data to monitor your API usage and avoid hitting limits

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Genderize.io official website](https://genderize.io)
  - [Genderize.io API documentation](https://genderize.io/documentation)

ai_documentation_summary:
  {"purpose":"Predicts the gender of a given first name using the Genderize.io API, returning the predicted gender, confidence probability, and usage statistics.","capabilities":["Predict gender from first names","Return probability score (0-1)","Support diacritics and non-Latin alphabets","Track rate limits and remaining requests","Return sample count used for prediction"],"authentication":"None for free tier (100 requests/day); API key required for paid tiers","commonUseCases":["Data anonymization workflows","User profile enrichment","Demographic analysis","Privacy-preserving data processing"],"limitations":["Free tier limited to 100 requests per day per IP address","No signup required for free tier but limited by rate limits","Paid tier requires subscription to Genderize.io"],"relatedNodes":["n8n HTTP Request node","n8n Set node","n8n Split In Batches node"]}


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-03-25 21:19:40
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-03-25T21:19:40.934Z
ai_summary_generated_at: 2026-03-25 22:51:43
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":"This n8n community node enables interaction with the Parseur platform to upload text or files for document processing and receive webhook events when documents or tables are processed.","capabilities":["Upload binary files (PDF, EML, etc.) to a Mailbox","Upload plain text or HTML content as a document","Receive webhook events for document processing completion","Receive webhook events for table field row processing","Handle document processing failure events requiring templates","Handle document export failure events"],"authentication":"API Key required for API requests; Webhook Token (UUID) required for verifying incoming webhook requests via X-Parseur-Token header","commonUseCases":["Automated document data extraction from emails and PDFs","Triggering workflows when documents are successfully processed","Converting unstructured documents into structured data for downstream processing"],"limitations":["Compatible only with n8n v1.91.2","Requires manual setup of credentials including API Key and Webhook Token","Webhook verification requires generating and managing a separate UUID token"],"relatedNodes":["n8n-nodes-parseur.parseur"]}


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

updated_at: 2026-03-25 21:19:40
author_name: bryantgillespie
author_github_url: https://github.com/directus/n8n-nodes-directus.git
npm_package_name: @directus/n8n-nodes-directus
npm_version: 1.0.3
community_fetched_at: 2026-03-25T21:19:40.934Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "item",
      "options": [
        {
          "name": "Item",
          "value": "item"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "File",
          "value": "file"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an item",
          "description": "Create a new item"
        },
        {
          "name": "Create (Raw JSON)",
          "value": "createRaw",
          "action": "Create an item with raw JSON",
          "description": "Create a new item using raw JSON data"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an item",
          "description": "Delete an item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an item",
          "description": "Get a single item"
        },
        {
          "name": "Get (Raw JSON)",
          "value": "getRaw",
          "action": "Get an item with raw JSON",
          "description": "Get a single item using raw JSON query parameters"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many items",
          "description": "Get many items from a collection"
        },
        {
          "name": "Get Many (Raw JSON)",
          "value": "getAllRaw",
          "action": "Get many items with raw JSON",
          "description": "Get many items using raw JSON query parameters"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an item",
          "description": "Update an existing item"
        },
        {
          "name": "Update (Raw JSON)",
          "value": "updateRaw",
          "action": "Update an item with raw JSON",
          "description": "Update an existing item using raw JSON data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "item"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "invite",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a user",
          "description": "Delete a user"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "description": "Get a single user"
        },
        {
          "name": "Get (Raw JSON)",
          "value": "getRaw",
          "action": "Get a user with raw JSON",
          "description": "Get a single user using raw JSON query parameters"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users",
          "description": "Get many users"
        },
        {
          "name": "Get Many (Raw JSON)",
          "value": "getAllRaw",
          "action": "Get many users with raw JSON",
          "description": "Get many users using raw JSON query parameters"
        },
        {
          "name": "Invite User",
          "value": "invite",
          "action": "Invite a user",
          "description": "Invite a new user via email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user",
          "description": "Update an existing user"
        },
        {
          "name": "Update (Raw JSON)",
          "value": "updateRaw",
          "action": "Update a user with raw JSON",
          "description": "Update an existing user using raw JSON data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "import",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a file",
          "description": "Delete a file"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a file",
          "description": "Get a single file"
        },
        {
          "name": "Get (Raw JSON)",
          "value": "getRaw",
          "action": "Get a file with raw JSON",
          "description": "Get a single file using raw JSON query parameters"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many files",
          "description": "Get many files"
        },
        {
          "name": "Get Many (Raw JSON)",
          "value": "getAllRaw",
          "action": "Get many files with raw JSON",
          "description": "Get many files using raw JSON query parameters"
        },
        {
          "name": "Import a File",
          "value": "import",
          "action": "Import a file from URL",
          "description": "Import a file from a URL"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a file",
          "description": "Update file metadata"
        },
        {
          "name": "Update (Raw JSON)",
          "value": "updateRaw",
          "action": "Update a file with raw JSON",
          "description": "Update file metadata using raw JSON data"
        },
        {
          "name": "Upload a File",
          "value": "upload",
          "action": "Upload a file",
          "description": "Upload a file using binary data from a previous node"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"create","name":"Create","description":"Create a new item","resource":"item"},{"operation":"createRaw","name":"Create (Raw JSON)","description":"Create a new item using raw JSON data","resource":"item"},{"operation":"delete","name":"Delete","description":"Delete an item","resource":"item"},{"operation":"get","name":"Get","description":"Get a single item","resource":"item"},{"operation":"getRaw","name":"Get (Raw JSON)","description":"Get a single item using raw JSON query parameters","resource":"item"},{"operation":"getAll","name":"Get Many","description":"Get many items from a collection","resource":"item"},{"operation":"getAllRaw","name":"Get Many (Raw JSON)","description":"Get many items using raw JSON query parameters","resource":"item"},{"operation":"update","name":"Update","description":"Update an existing item","resource":"item"},{"operation":"updateRaw","name":"Update (Raw JSON)","description":"Update an existing item using raw JSON data","resource":"item"},{"operation":"delete","name":"Delete","description":"Delete a user","resource":"user"},{"operation":"get","name":"Get","description":"Get a single user","resource":"user"},{"operation":"getRaw","name":"Get (Raw JSON)","description":"Get a single user using raw JSON query parameters","resource":"user"},{"operation":"getAll","name":"Get Many","description":"Get many users","resource":"user"},{"operation":"getAllRaw","name":"Get Many (Raw JSON)","description":"Get many users using raw JSON query parameters","resource":"user"},{"operation":"invite","name":"Invite User","description":"Invite a new user via email","resource":"user"},{"operation":"update","name":"Update","description":"Update an existing user","resource":"user"},{"operation":"updateRaw","name":"Update (Raw JSON)","description":"Update an existing user using raw JSON data","resource":"user"},{"operation":"delete","name":"Delete","description":"Delete a file","resource":"file"},{"operation":"get","name":"Get","description":"Get a single file","resource":"file"},{"operation":"getRaw","name":"Get (Raw JSON)","description":"Get a single file using raw JSON query parameters","resource":"file"},{"operation":"getAll","name":"Get Many","description":"Get many files","resource":"file"},{"operation":"getAllRaw","name":"Get Many (Raw JSON)","description":"Get many files using raw JSON query parameters","resource":"file"},{"operation":"import","name":"Import a File","description":"Import a file from a URL","resource":"file"},{"operation":"update","name":"Update","description":"Update file metadata","resource":"file"},{"operation":"updateRaw","name":"Update (Raw JSON)","description":"Update file metadata using raw JSON data","resource":"file"},{"operation":"upload","name":"Upload a File","description":"Upload a file using binary data from a previous node","resource":"file"}]

npm_readme:
  # n8n-nodes-directus

  A comprehensive n8n community node package for integrating with Directus CMS.

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

  ### Package Name

  The package is published as `@directus/n8n-nodes-directus` on npm.

  ### From npm (when published)

  ```bash
  npm install @directus/n8n-nodes-directus
  ```

  ## Usage

  ### Getting Started

  1. **Install the package** (when published):

     ```bash
     npm install @directus/n8n-nodes-directus

     # Or using pnpm
     pnpm add @directus/n8n-nodes-directus
     ```

  2. **Configure credentials** in n8n:
     - Add your Directus URL (e.g., `https://your-directus.app`)
     - Add your Directus API token with appropriate permissions

  3. **Use the nodes** in your workflows:
     - **Directus Node**: For CRUD operations on items, users, and files
     - **Directus Trigger Node**: For webhook-based automation

  ### Available Operations

  #### Directus Node

  - **Items**:
    - Create, Create (Raw JSON)
    - Get, Get (Raw JSON)
    - Get Many, Get Many (Raw JSON)
    - Update, Update (Raw JSON)
    - Delete
  - **Users**:
    - Invite
    - Get, Get (Raw JSON)
    - Get Many, Get Many (Raw JSON) with Simplify option
    - Update, Update (Raw JSON)
    - Delete
  - **Files**:
    - Upload a File (using binary data from a previous node)
    - Import a File (from a URL)
    - Get, Get (Raw JSON)
    - Get Many, Get Many (Raw JSON) with Simplify option
    - Update, Update (Raw JSON)
    - Delete

  #### Directus Trigger Node

  - **Item Events**: Trigger on create, update, delete operations in collections
  - **User Events**: Trigger on user creation, updates, and deletions
  - **File Events**: Trigger on file uploads and updates

  ## Features

  - **Dynamic Field Loading**: Automatically loads available collections and fields from your Directus instance
  - **Smart Field Processing**: Handles complex field types and relationships
  - **Simplify Option**: Returns essential fields only for Users and Files "Get Many" operations
  - **Raw JSON Operations**: Full support for raw JSON data/query parameters for advanced use cases (available for all CRUD operations)
  - **Robust Error Handling**: Comprehensive error handling with detailed error messages
  - **Webhook Management**: Automatic webhook creation and cleanup for trigger nodes
  - **Type Safety**: Full TypeScript support with proper type definitions
  - **UX Compliance**: Follows n8n community node UX guidelines with proper naming and placeholders

  ## Credentials

  ### Directus API

  Configure your Directus instance connection:

  - **Directus URL**: Your Directus instance URL (e.g., `https://your-directus.app`)
  - **Token**: Your Directus API token with appropriate permissions

  ## Compatibility

  - **Directus Cloud**: Fully supported
  - **Self-hosted Directus**: Fully supported
  - **Directus Versions**: Compatible with Directus 10.0+

  ## Development

  This project uses the official n8n-node CLI tool for development and follows n8n community node standards.

  ### Prerequisites

  - **Node.js 22+**
  - **npm 10+**
  - **Directus instance** for testing (cloud or self-hosted)
  - **ngrok** (for webhook testing) - install from [ngrok.com](https://ngrok.com/)

  ### Setup

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

  # Install dependencies
  npm install

  # Build the project
  npm run build
  ```

  ### Quick Start

  1. **Start n8n with your node loaded**:

     ```bash
     npm run dev:n8n
     ```

     This will:
     - Link your custom node to n8n
     - Start n8n development server
     - Make your Directus nodes available in n8n

  2. **Access n8n**: Open http://localhost:5678 in your browser

  3. **Configure credentials**:
     - Add your Directus API credentials
     - Test the connection

  4. **Create workflows**: Use the Directus nodes in your workflows

  ### Testing

  #### Webhook Testing (Requires ngrok)

  For testing the **Directus Trigger** node, you need to expose n8n via a public URL since Directus cannot reach localhost:

  1. **Install ngrok** (if not already installed):

     ```bash
     # macOS with Homebrew
     brew install ngrok

     # Or download from https://ngrok.com/
     ```

  2. **Start n8n** (in one terminal):

     ```bash
     npm run dev:n8n
     ```

  3. **Start ngrok** (in another terminal):

     ```bash
     ngrok http 5678
     ```

     This will give you a public URL like `https://abc123.ngrok-free.dev`

  4. **Create a webhook workflow**:
     - Add a **Directus Trigger** node
     - Configure the trigger (resource, event, collection)
     - Activate the workflow
     - Copy the webhook URL from n8n

  5. **Update Directus webhook**:
     - In Directus, go to **Settings → Flows**
     - Find the created flow and edit it
     - Replace `localhost:5678` with your ngrok URL
     - Save the flow

  6. **Test the webhook**:
     - Create/update items in Directus
     - Check if the webhook triggers in n8n

  **Note**: The manual URL replacement step is required because Directus cannot reach localhost URLs directly.

  ### Getting Help

  - Check the [GitHub Issues](https://github.com/directus/n8n-nodes-directus/issues) for known problems
  - Run `pnpm test` to verify everything works
  - Use `pnpm test:coverage` to see test coverage

  ## Contributing

  We welcome feedback and suggestions! Please help us improve this community node:

  ### Reporting Issues

  - **Bug Reports**: Use the [GitHub Issues](https://github.com/directus/n8n-nodes-directus/issues) page to report bugs
  - **Feature Requests**: Submit enhancement ideas through GitHub Issues
  - **Documentation**: Help improve our documentation by reporting unclear sections

  ### Issue Guidelines

  When reporting issues, please provide:

  - Detailed description of the problem or feature request
  - Steps to reproduce (for bugs)
  - Expected vs actual behavior
  - Your Directus version and n8n version
  - Any relevant error messages or logs

  ### Code Contributions

  While we appreciate community interest, we maintain this node internally to ensure:

  - Consistent code quality and style
  - Proper testing and validation
  - Alignment with Directus and n8n best practices
  - Timely maintenance and updates

  If you have specific code improvements or bug fixes, please:

  1. **Open an issue first** describing the problem or improvement
  2. **Wait for our team to review** and potentially implement the change
  3. **Provide detailed information** to help us understand the requirement

  This approach ensures the node remains reliable, well-tested, and follows n8n community node verification guidelines.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [Directus API Documentation](https://directus.io/docs/api)

  ## License

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

  ## Support

  For issues and questions:

  - [GitHub Issues](https://github.com/directus/n8n-nodes-directus/issues)
  - [Directus Community](https://community.directus.io/)
  - [n8n Community](https://community.n8n.io/)

ai_documentation_summary:
  {"purpose":"A community node package for integrating with Directus CMS, enabling CRUD operations on items, users, and files, as well as webhook-based automation.","capabilities":["Create items, users, and files","Retrieve single items with raw JSON support","Retrieve multiple items with raw JSON support","Update items, users, and files","Delete items, users, and files","Upload files using binary data","Import files from URLs","Invite users","Get many users/files with simplify option","Trigger on item events (create, update, delete)"],"authentication":"Directus API token with appropriate permissions","commonUseCases":["Automating content management workflows in Directus","Triggering actions in n8n when Directus data changes","Syncing data between Directus and other systems","File management automation (upload/import)"],"limitations":["Requires npm 10+ for installation","Node.js 22+ required for development","Webhook testing requires ngrok to expose n8n to Directus","Manual URL replacement needed in Directus flows for ngrok testing"],"relatedNodes":["n8n HTTP Request node","n8n Webhook node","n8n File node"]}


node_type: n8n-nodes-postfast.postFast
package_name: n8n-nodes-postfast
display_name: PostFast - Social Media Management
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-03-25 21:19:40
author_name: peturgeorgievv
author_github_url: https://github.com/peturgeorgievv/
npm_package_name: n8n-nodes-postfast
npm_version: 0.1.18
community_fetched_at: 2026-03-25T21:19:40.935Z
ai_summary_generated_at: 2026-03-25 22:51:43
description:
  Schedule and manage social media posts across Facebook, Instagram, TikTok, Twitter/X, LinkedIn, YouTube, and Pinterest

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "socialPost",
      "options": [
        {
          "name": "File",
          "value": "file",
          "description": "Manage file uploads"
        },
        {
          "name": "Social Account",
          "value": "socialAccount",
          "description": "Manage social media accounts"
        },
        {
          "name": "Social Post",
          "value": "socialPost",
          "description": "Create and manage social media posts"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUploadUrl",
      "options": [
        {
          "name": "Get Upload URL",
          "value": "getUploadUrl",
          "action": "Get upload URL",
          "description": "Generate pre-signed URLs for uploading media files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all social accounts",
          "description": "Get all connected social media accounts"
        },
        {
          "name": "Get Pinterest Boards",
          "value": "getPinterestBoards",
          "action": "Get Pinterest boards",
          "description": "Get Pinterest boards for a connected account"
        },
        {
          "name": "Get YouTube Playlists",
          "value": "getYoutubePlaylists",
          "action": "Get YouTube playlists",
          "description": "Get YouTube playlists for a connected account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "socialAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create social posts",
          "description": "Create and schedule one or more social media posts"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete social post",
          "description": "Delete a scheduled or failed post"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get analytics",
          "description": "Fetch published posts with their latest performance metrics"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many social posts",
          "description": "Query and paginate social posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "socialPost"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [{"operation":"getUploadUrl","name":"Get Upload URL","description":"Generate pre-signed URLs for uploading media files","resource":"file"},{"operation":"getAll","name":"Get All","description":"Get all connected social media accounts","resource":"socialAccount"},{"operation":"getPinterestBoards","name":"Get Pinterest Boards","description":"Get Pinterest boards for a connected account","resource":"socialAccount"},{"operation":"getYoutubePlaylists","name":"Get YouTube Playlists","description":"Get YouTube playlists for a connected account","resource":"socialAccount"},{"operation":"create","name":"Create","description":"Create and schedule one or more social media posts","resource":"socialPost"},{"operation":"delete","name":"Delete","description":"Delete a scheduled or failed post","resource":"socialPost"},{"operation":"getAnalytics","name":"Get Analytics","description":"Fetch published posts with their latest performance metrics","resource":"socialPost"},{"operation":"getMany","name":"Get Many","description":"Query and paginate social posts","resource":"socialPost"}]

npm_readme:
  # n8n-nodes-postfast

  This is an n8n community node for [PostFast](https://postfa.st) - a comprehensive social media management and scheduling platform. It allows you to create, manage, and schedule posts across multiple social media channels directly from your n8n workflows.

  **Node Name in n8n:** PostFast - Social Media Management

  ## Features

  - 🚀 **Multi-Platform Support**: Facebook, Instagram, TikTok, Twitter/X, LinkedIn, YouTube, Pinterest
  - 📸 **Media Management**: Upload images and videos with pre-signed S3 URLs
  - 📅 **Advanced Scheduling**: Schedule posts using UTC timestamps (ISO 8601 format)
  - 🎯 **Platform-Specific Controls**: Reels, Stories, Shorts, Carousels, Drafts
  - 🔍 **Smart Filtering**: Query posts by platform, status, and date ranges
  - 📊 **Pagination Support**: Handle large datasets efficiently
  - 🔐 **Secure Authentication**: API key-based authentication

  ## Installation

  ### In n8n (Recommended)

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

  ### Manual Installation

  ```bash
  npm install n8n-nodes-postfast
  ```

  ## Authentication

  To use this node, you'll need:

  1. **PostFast API Key**:
     - Log in to your PostFast account
     - Navigate to Settings → API Keys
     - Create a new API key
     - Copy the key (you won't be able to see it again)

  2. **Add Credentials in n8n**:
     - In n8n, go to Credentials
     - Create new "PostFast API" credentials
     - Enter your API key

  ## Resources & Operations

  ### 📁 File Resource

  #### Get Upload URL
  Generate pre-signed S3 URLs for uploading media files.

  **Parameters:**
  - **Content Type**: MIME type (image/jpeg, image/png, image/gif, video/mp4, video/quicktime, application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation)
  - **Count**: Number of URLs to generate (1-10)

  **Limits:**
  - Max file size: 250 MB (video), 10 MB (image)
  - Rate limit: 150 requests per day

  **Usage Example:**
  1. Use this operation to get S3 upload URLs
  2. Upload your files directly to S3 using the signed URLs
  3. Use the returned `key` in your social posts

  ---

  ### 👥 Social Account Resource

  #### Get All
  Retrieve all connected social media accounts for your workspace.

  **Returns:**
  - Account IDs (needed for posting)
  - Platform types
  - Account names and handles
  - Connection status

  **Rate limit:** 90 requests per hour

  #### Get Pinterest Boards
  Retrieve Pinterest boards for a connected Pinterest account. Use the returned `boardId` in the `Pinterest Board ID` control when creating Pinterest posts.

  **Parameters:**
  - **Social Media Account ID**: ID of the connected Pinterest account (from Get All)

  **Rate limit:** 90 requests per hour

  #### Get YouTube Playlists
  Retrieve YouTube playlists for a connected YouTube account. Use the returned `playlistId` in the `YouTube Playlist ID` control when creating YouTube posts.

  **Parameters:**
  - **Social Media Account ID**: ID of the connected YouTube account (from Get All)

  **Rate limit:** 90 requests per hour

  ---

  ### 📝 Social Post Resource

  #### Create Post
  Create and schedule posts with platform-specific features.

  **Core Parameters:**
  - **Platform**: Facebook, Instagram, TikTok, Twitter/X, LinkedIn, YouTube, Pinterest
  - **Social Media Account ID**: From Social Account > Get All
  - **Content**: Post text with emoji support
  - **Scheduled At**: ISO 8601 datetime
  - **Media Items**: Images/videos with S3 keys
  - **First Comment**: Automatic first comment posted ~10 seconds after publish (supported on X, Instagram, Facebook, YouTube, and Threads)

  **Platform-Specific Controls:**

  **X (Twitter):**
  - Community ID for posting to X Communities
  - Quote Tweet URL for quoting tweets with commentary
  - Retweet URL for retweeting without changes

  **Facebook:**
  - Content Types: Post, Reel, Story
  - Reels collaborators
  - Multi-image support

  **Instagram:**
  - Publish Types: Timeline, Story, Reel
  - Grid posting option
  - Collaborators
  - Carousel support (up to 10 items)

  **TikTok:**
  - Privacy: Public, Mutual Friends, Only Me
  - Allow Comments/Duet/Stitch
  - Draft mode
  - Brand Organic / Brand Content flags
  - Auto-add music
  - Carousel posts (2-35 images)

  **YouTube:**
  - Title, Privacy (Public, Private, Unlisted)
  - Tags, Category ID
  - Shorts support
  - Made for Kids (COPPA) flag
  - Playlist ID (from Social Account > Get YouTube Playlists)

  **LinkedIn:**
  - Document attachments (PDF, DOC, DOCX, PPT, PPTX)
  - Attachment title

  **Pinterest:**
  - Board ID (required, from Social Account > Get Pinterest Boards)
  - Destination link URL
  - Content parsing: first line → title, remaining → description
  - Carousel pins (2-5 static images)

  #### Get Many Posts
  Query and filter your scheduled posts with advanced options.

  **Filter Options:**
  - **Platforms**: Filter by one or more platforms
  - **Statuses**: DRAFT, SCHEDULED, PUBLISHED, FAILED
  - **Date Range**: From/To dates (ISO 8601)
  - **Pagination**: Page-based navigation

  **Return Options:**
  - Return all results (auto-pagination)
  - Limit results (1-50 per page)

  **Response Includes:**
  - Post content and media
  - Scheduling information
  - Publishing status
  - Error messages (for failed posts)
  - Platform-specific metadata

  #### Delete Post
  Remove scheduled or failed posts.

  **Parameters:**
  - **Post ID**: Unique identifier of the post

  **Rate limit:** 160 requests per hour

  ## Workflow Examples

  ### 1. Content Calendar Automation
  ```
  Notion Database → PostFast (Create) → Multiple Platforms
  ```
  Pull content from Notion and schedule across all platforms.

  ### 2. Media Processing Pipeline
  ```
  Dropbox → Image Processing → PostFast (Get Upload URL) → S3 Upload → PostFast (Create)
  ```
  Process images and videos before posting.

  ### 3. Failed Post Recovery
  ```
  Schedule Trigger → PostFast (Get Many: status=FAILED) → Error Handler → Retry/Notify
  ```
  Monitor and handle failed posts automatically.

  ### 4. Cross-Platform Campaign
  ```
  RSS Feed → AI Content Generator → PostFast (Create: Multiple Platforms)
  ```
  Generate and distribute content across all channels.

  ## Rate Limits

  **Global Limits (per API key):**
  - 60 requests per minute
  - 150 requests per 5 minutes
  - 300 requests per hour
  - 1000 requests per day

  **Endpoint-Specific:**
  - File uploads: 150/day
  - Post creation: 75/day
  - Post queries: 90/hour
  - Post deletion: 160/hour

  ## Error Handling

  The node provides detailed error messages for common scenarios:

  - `401`: Invalid API key
  - `404`: Resource not found (check IDs)
  - `429`: Rate limit exceeded
  - `400`: Invalid parameters

  ## Platform Requirements

  - **Node.js**: v18.0.0 or higher
  - **n8n**: v1.0.0 or higher
  - **API Key**: PostFast workspace API key

  ## Advanced Features

  ### Batch Operations
  Process multiple items in a single workflow execution for efficiency.

  ### Error Recovery
  Built-in error handling with detailed messages for debugging.

  ### Pagination Handling
  Automatic pagination when fetching all results.

  ### Media Validation
  Automatic MIME type detection and size validation.

  ## Development

  ### Setup
  ```bash
  git clone https://github.com/peturgeorgievv/n8n-nodes-postfast.git
  cd n8n-nodes-postfast
  npm install
  ```

  ### Testing
  ```bash
  npm run dev     # Start development server
  npm run build   # Build for production
  npm run lint    # Check code quality
  ```

  ### Publishing
  ```bash
  npm login
  npm publish --access public
  ```

  ## Support

  - **Documentation**: [PostFast API Docs](https://api.postfa.st/docs)
  - **Issues**: [GitHub Issues](https://github.com/peturgeorgievv/n8n-nodes-postfast/issues)
  - **Community**: [n8n Community Forum](https://community.n8n.io)
  - **Developer Support**: [me@peturgeorgievv.com](mailto:me@peturgeorgievv.com)

  ## License

  [MIT](LICENSE)

  ## Contributing

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

  ## Changelog

  ### v0.1.0
  - Initial release with full PostFast API support
  - Multi-platform posting capabilities
  - Advanced filtering and pagination
  - Media upload management
  - Platform-specific controls for all major social networks

ai_documentation_summary:
  {"purpose":"This n8n community node enables scheduling and management of social media posts across multiple platforms including Facebook, Instagram, TikTok, Twitter/X, LinkedIn, YouTube, and Pinterest.","capabilities":["Create and schedule posts across 7+ social platforms","Upload and manage media with pre-signed S3 URLs","Support for platform-specific features (Reels, Stories, Shorts, Carousels, Drafts)","Advanced scheduling with UTC timestamps (ISO 8601 format)","Query and filter posts by platform, status, and date ranges","Pagination support for large datasets","Automatic first comment posting on supported platforms","Retrieve connected social media accounts","Retrieve Pinterest boards and YouTube playlists"],"authentication":"API key required (PostFast API key stored in n8n Credentials)","commonUseCases":["Automated content calendar management across multiple platforms","Media processing pipeline before posting","Failed post monitoring and recovery workflows","Cross-platform social media scheduling from a single workflow"],"limitations":["Rate limits apply (150 requests/day for uploads, 90/hour for account queries, 160/hour for post operations)","File size limits: 250 MB for videos, 10 MB for images","Requires external S3 upload step for media files","Some platform-specific features may not be available on all accounts or regions","First comment feature only supported on X, Instagram, Facebook, YouTube, and Threads"],"relatedNodes":["S3 Upload","Notion Database","Dropbox","Error Handler","Schedule Trigger"]}


