# nodes

node_type: @calcslive/n8n-nodes-calcslive.calcsLive
package_name: @calcslive/n8n-nodes-calcslive
display_name: CalcsLive Calculator
description: Execute unit-aware calculations using CalcsLive articles
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: e3d
author_github_url: https://github.com/calcslive/n8n-nodes-calcslive.git
npm_package_name: @calcslive/n8n-nodes-calcslive
npm_version: 0.1.15
community_fetched_at: 2026-07-14T14:40:33.535Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "calculation",
      "options": [
        {
          "name": "Calculation",
          "value": "calculation"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a calculation",
          "description": "Run a calculation using the specified inputs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "calculation"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a calculation",
      "description": "Run a calculation using the specified inputs",
      "resource": "calculation"
    }
  ]

npm_readme:
  # n8n-nodes-calcslive

  <img src="https://www.calcslive.com/favicon.ico" alt="CalcsLive Logo" width="90">  

   **Plug-and-Play Unit-Aware Multi-Step Calculations to your n8n**
   
  [CalcsLive](https://www.calcslive.com) calculations feature unit-awareness and pure symbolic equations to enable you to THINK in Physics without distraction in handling units. [`@calcslive/n8n-nodes-calcslive`](https://www.npmjs.com/package/@calcslive/n8n-nodes-calcslive) brings in the power and elegance to your n8n ecosystem.  

  Specifically for AI integration, it empowers AI agents with calculation accuracy and automatic handling of 540+ units across 64+ categories.

  > **🚧 MVP Release**: This is our early release focused on core unit-aware calculation functionality. We're actively improving the node and welcome your feedback to help shape future features! [Share your thoughts](https://github.com/calcslive/n8n-nodes-calcslive/issues) or reach out at don.wen@calcslive.com

  ## 🚀 Quick Start

  ### Installation
  1. Open your n8n instance
  2. Go to **Settings** → **Community Nodes** 
  3. Enter `@calcslive/n8n-nodes-calcslive` and click **Install**
  4. Create your **CalcsLive API** credentials with your API key for 'n8n Integration'

  ### First Calculation (5 minutes)
  1. **Create a simple calculation** at [CalcsLive](https://www.calcslive.com) and note the Article ID
  2. Add the **CalcsLive Calculator** node to your workflow
  3. Enter your Article ID and choose **Enhanced Mode** for guided setup
  4. Add input values and watch the unit-aware magic happen! 🎯

  **💡 Pro Tip**: Start with a simple unit conversion calc (see example below) to experience the power!

  ## 📸 Demo Workflow

  ![n8n CalcsLive Demo Workflow](assets/demo-workflow.png)

  *Example n8n workflow showing CalcsLive nodes performing unit-aware calculations: speed calculation, cylinder volume, and chained mass calculation using a Merge node to combine volume output with density input.*

  ### 🎥 Video Demonstration

  **[Watch the Complete Demo on YouTube →](https://www.youtube.com/watch?v=xC4iFwNkIQs)**
  *"n8n + CalcsLive → Plug-and-Play Unit-Aware Calculations"*

  This video walkthrough demonstrates:
  - 🚀 Installation and setup in n8n
  - 🎯 Creating CalcsLive calculations from scratch
  - 🔗 Building unit-aware workflow integrations
  - ⚡ Real-time calculation chaining between nodes
  - 📊 Handling complex multi-step engineering calculations

  ### Supporting Calculations

  The demo workflow uses these CalcsLive calculations:

  | Calculation | Article ID | Description |
  |-------------|---------|-------------|
  | **Speed Calculator** [(Link)](https://www.calcslive.com/editor/3M6P9TF5P-3XA) | `3M6P9TF5P-3XA` | Distance/time → speed with unit conversion |
  | **Cylinder Volume** [(Link)](https://www.calcslive.com/editor/3M6P9TF5P-3XA) | `3M6P9TF5P-3XA` | Diameter/height → volume calculation |
  | **Mass Calculator** [(Link)](https://www.calcslive.com/editor/3M6PBGU7S-3CA) | `3M6PBGU7S-3CA` | Volume + Density → Mass (chained calculation) |

  ### 🧩 Why Separate Calculations? The Composability Advantage

  **Question**: Why create a separate mass calculator when the first calculation already includes mass calculation?

  **Answer**: This demonstrates CalcsLive's **composable architecture** - a key design principle that unlocks powerful workflow patterns:

  🔗 **Calculation Chaining**: 
  - Calc1 outputs volume → Calc2 uses that volume as input
  - n8n expressions seamlessly bridge: `{{$json.volume_result}}`

  ♻️ **Reusability at Scale**:
  - One mass calc works with ANY volume calculation
  - Cylinder volume + Mass calc = Cylinder mass
  - Box volume + Mass calc = Box mass  
  - Sphere volume + Mass calc = Sphere mass

  🎯 **Result**: Instead of creating separate mass calculations for every shape, you build **modular, reusable calculation components** that combine in endless ways. This is the power of composable engineering in n8n workflows!

  ### 📥 Import Ready-to-Use Template

  Want to try this workflow instantly? Download and import our template:

  **[📥 Download Demo Workflow](assets/n8n-template-submission.json)** *(Right-click → Save As)*

  **Import Instructions:**
  1. In n8n: **Workflows** → **Import from File**
  2. Upload `n8n-template-submission.json`
  3. **Set up credentials** (you'll be prompted):
     - **CalcsLive API**: Add your API key from [CalcsLive Account](https://www.calcslive.com/account)
  4. **Execute** and watch the unit-aware magic! ✨

  The template includes a **Merge node** that combines Volume calculation output with Density input, demonstrating how to chain calculations that require data from multiple sources.

  ## ✨ Why CalcsLive? The Plug-and-Play Revolution!

  ### **🔌 Plug-and-Play Power**
  CalcsLive transforms n8n workflows with **zero-configuration unit awareness**. Simply plug the CalcsLive node between any two nodes and instantly bridge different unit systems, calculations, or data formats.

  ### **🚀 n8n Expressions + Unit Awareness = Game Changer**
  When you use n8n expressions (`{{$json.data}}`) with CalcsLive, your workflow data becomes **unit-aware**:
  - **Dynamic Values**: `{{$json.temperature}}` → Automatic °C to °F conversion
  - **Smart Bridging**: Any node → CalcsLive → Any node with proper units  
  - **Zero Code**: No manual conversion formulas or complex calculations needed

  ### **Before vs After Comparison**
  ```javascript
  // ❌ Before: Manual unit conversion nightmare
  const distanceKm = 150;
  const timeHours = 2;  
  const speedKmH = distanceKm / timeHours; // = 75 km/h
  // Need mph? Write more conversion code...
  const speedMph = speedKmH * 0.621371; // = 46.6 mph
  ```

  ```json
  // ✅ With CalcsLive: Plug-and-play unit-aware workflows
  {
    "inputs": {
      "D": { "value": "{{$json.distance}}", "unit": "km" },
      "t": { "value": "{{$json.time}}", "unit": "h" }
    },
    "outputs": {
      "s": { "unit": "mph" }
    }
  }
  // Result: Perfect unit conversion with n8n expression data! 🎯
  ```

  ## 🎯 Real-World Use Cases

  ### **🔌 Plug-and-Play Benefits for n8n Ecosystem**

  **🎯 Instant Unit Bridging**: Drop CalcsLive between any nodes to bridge unit mismatches
  - Google Sheets (metric) → CalcsLive → US Database (imperial) ✨
  - IoT Sensors (various units) → CalcsLive → Normalized Dashboard 📊
  - API Response (°C) → CalcsLive → Email Alert (°F) 📧

  **🚀 Zero Configuration**: No complex setup, just plug and play
  - Create calc once → Use everywhere in your workflows
  - n8n expressions work seamlessly with unit awareness
  - Dynamic data flows get automatic unit intelligence

  **⚡ Workflow Superpowers**: Transform ordinary workflows into unit-aware automation
  - **Before**: 5 nodes + custom code for unit conversion
  - **After**: 1 CalcsLive node with automatic unit handling
  - **Result**: Cleaner workflows, fewer errors, more reliability

  ## 🔧 Configuration Modes

  ### **Enhanced Mode** (Recommended) 🌟
  User-friendly interface with:
  - **Dropdown Selectors**: Choose input/output quantities from article
  - **Auto-Discovery**: Automatically loads available parameters
  - **Default Values**: Pre-populated with article defaults
  - **Unit Validation**: Visual feedback for valid units
  - **Smart Tooltips**: Contextual help for each parameter

  ### **Legacy Mode** (Advanced Users)
  Direct JSON input for:
  - **Power Users**: Full control over request structure  
  - **Custom Integrations**: Programmatic parameter generation
  - **Dynamic Workflows**: Expression-based parameter building

  ## 📋 Step-by-Step Guide

  ### **Step 1: Get Your API Key**
  1. Visit [CalcsLive](https://www.calcslive.com) and create an account
  2. Go to **Account** → **API Keys** 
  3. Generate a new API key for n8n integration
  4. Note your subscription tier limits (Free: 100 calls/month after trial)

  > **📦 npm Package**: [`@calcslive/n8n-nodes-calcslive`](https://www.npmjs.com/package/@calcslive/n8n-nodes-calcslive)

  ### **Step 2: Configure Credentials**
  1. In n8n: **Credentials** → **Create New** → **CalcsLive API**
  2. Enter your API key from Step 1
  3. Base URL: `https://www.calcslive.com` (default)

  ### **Step 3: Create Your Calculation Articles**
  **Security Note**: CalcsLive's n8n integration API is designed so users can only use their own public calculation articles in the CalcsLive node. You can create your own articles and use them in your node easily following the examples.

  1. Visit [CalcsLive](https://www.calcslive.com) and create your calculation
  2. Define your Physical Quantities (PQs) and mathematical relationships  
  3. Save your calculation and **find the Article ID in the URL**
     - Example URL: `https://www.calcslive.com/editor/3M5NVUCGW-3TA`
     - Article ID: `3M5NVUCGW-3TA` (the part after `/editor/`)

  **Demo Article IDs** (for reference only - create your own for actual use):
  - `3M6P9TF5P-3XA` - Speed & Cylinder Volume Calculator
  - `3M6PBGU7S-3CA` - Mass Calculator (Volume × Density)

  ### **Step 4: Configure Your Node**

  #### **Enhanced Mode Setup:**
  1. **Article ID**: Enter your chosen calculation ID
  2. **Input Physical Quantities**: Click "Add Input PQ"
     - Select parameter from dropdown
     - Enter value (or use expression)
     - Specify unit (optional - uses article default)
  3. **Output Physical Quantities**: Click "Add Output PQ" 
     - Select desired output parameter
     - Specify preferred unit for results

  #### **Legacy Mode Setup:**
  ```json
  {
    "articleId": "3M5NVUCGW-3TA",
    "inputs": {
      "D": { "value": 150, "unit": "km" },
      "t": { "value": 2, "unit": "h" }
    },
    "outputs": {
      "s": { "unit": "mph" }
    }
  }
  ```

  #### **Note**
  For input PQs and output PQs in your article, when they are not used in your node, input values and units in the article will be used to perform the calculations for your node.

  It is recommended to include all input and out PQs available from the article in your node, to allow flexibility in use for both upstream and downstream nodes.

  ## 💡 Workflow Examples

  ### **Example 1: Simple Unit Conversion (Perfect for Getting Started!)**
  **Step 1**: Create a calc in CalcsLive frontend with 2 PQs:
  - `PQ0 = 2 m` (input quantity) 
  - `PQ1 = PQ0 cm` (output - just unit conversion)

  **Step 2**: Use in n8n workflow as a plug-and-play unit converter:
  ```
  Data Source → CalcsLive Calculator → Next Node
  ```
  ```json
  {
    "articleId": "YOUR-ARTICLE-ID",
    "inputs": {
      "PQ0": { "value": "{{$json.length_meters}}", "unit": "m" }
    },
    "outputs": {
      "PQ1": { "unit": "cm" }
    }
  }
  ```
  **🎯 Result**: Automatic m → cm conversion! Refer to [Interactive Units Database](https://www.calcslive.com/help/units-reference#interactive-units-database) for all units and categories CalcsLive support. The CalcsLive node becomes a **unit-aware bridge** between any two nodes in your workflow.

  ### **Example 2: IoT Sensor Processing with n8n Expressions**
  ```
  IoT Sensor → CalcsLive Calculator → Database
  ```
  **🚀 Game-Changer**: When you use n8n expressions (like `{{$json.temperature}}`) with CalcsLive, your data gets **unit-awareness superpowers**!
  ```json
  {
    "inputs": {
      "temp_c": { "value": "{{$json.temperature}}", "unit": "°C" }
    },
    "outputs": {
      "temp_f": { "unit": "°F" }
    }
  }
  ```

  ### **Example 3: Batch Spreadsheet Processing**
  ```
  Google Sheets → CalcsLive Calculator → Email Report
  ```
  **Use Case**: Process engineering data with n8n expressions passing spreadsheet values directly to unit-aware calculations

  ### **Example 4: Real-time Monitoring Dashboard**
  ```
  Webhook → CalcsLive Calculator → InfluxDB → Grafana
  ```
  **Use Case**: Monitor manufacturing equipment with unit-normalized metrics using dynamic n8n expressions

  ### **Example 5: Compliance Reporting**
  ```
  Database Query → CalcsLive Calculator → PDF Generator → Email
  ```
  **Use Case**: Generate regulatory reports with region-appropriate units

  ## 📊 Understanding Node Output

  ### **Success Response Structure**
  ```json
  {
    "success": true,
    "articleId": "3M5NVUCGW-3TA",
    "inputs": {
      "D": {
        "symbol": "D",
        "value": 150,
        "unit": "km", 
        "baseValue": 150000,
        "baseUnit": "m",
        "description": "Distance"
      }
    },
    "outputs": {
      "s": {
        "symbol": "s",
        "value": 46.6,
        "unit": "mph",
        "baseValue": 20.83,
        "baseUnit": "m/s", 
        "expression": "D/t",
        "description": "Speed"
      }
    },
    "_metadata": {
      "executionTime": "2025-09-03T17:30:00.000Z",
      "processingTimeMs": 45
    }
  }
  ```

  ### **Key Output Fields**
  - **`value`** & **`unit`**: Your requested result with specified units
  - **`expression`**: Mathematical formula used for calculation
  - **`description`**: Human-readable parameter description

  ## 🚨 Error Handling & Troubleshooting

  ### **Common Error Messages**

  | Error Code | Message | Solution |
  |------------|---------|----------|
  | **401** | Invalid API Key | Check your CalcsLive API credentials |
  | **404** | Article Not Found | Verify article ID exists and is public |
  | **400** | Invalid Input Format | Check JSON structure and unit syntax |
  | **429** | Rate Limit Exceeded | Wait or upgrade subscription tier |
  | **500** | Server Error | Temporary CalcsLive service issue |

  ### **Best Practices**
  - **Cache Article Metadata**: Use Set nodes to avoid repeated validation calls  
  - **Error Boundaries**: Add error handling for calculation failures
  - **Unit Validation**: Test unit compatibility before production deployment
  - **Rate Limiting**: Monitor API usage in high-frequency workflows

  ### **Debugging Tips**
  1. **Enable Node Debugging**: Check console logs for detailed request/response info
  2. **Test Articles**: Use demo article IDs for initial testing
  3. **Unit Checking**: Verify unit spelling - case sensitive! (`km` not `KM`)
  4. **Expression Validation**: Check that symbols match article definitions

  ## 🔧 Advanced Configuration

  ### **Dynamic Parameters with Expressions**
  ```json
  {
    "inputs": {
      "pressure": { 
        "value": "{{$json.sensor_pressure}}", 
        "unit": "{{$json.sensor_unit || 'Pa'}}" 
      }
    }
  }
  ```

  ### **Conditional Output Units**
  ```json
  {
    "outputs": {
      "temperature": { 
        "unit": "{{$json.region === 'US' ? '°F' : '°C'}}" 
      }
    }
  }
  ```

  ### **Batch Processing Pattern**
  ```javascript
  // Split incoming array → CalcsLive Calculator → Merge results
  ```

  ## 🌍 Units & Categories

  CalcsLive supports **64+ unit categories** with **540+ units**! 

  📖 **Complete Reference**: Visit [CalcsLive Units Reference](https://www.calcslive.com/help/units-reference) for the interactive browser with search functionality and complete unit listings.

  ## 📚 API Reference

  ### **Node Parameters**

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `articleId` | string | ✅ | CalcsLive calculation article identifier |
  | `configMode` | enum | ✅ | "enhanced" or "legacy" configuration mode |
  | `inputPQs` | array | 📋 | Enhanced mode: Physical quantity inputs |
  | `outputPQs` | array | ⚪ | Enhanced mode: Desired outputs with units |
  | `inputs` | JSON | 📋 | Legacy mode: Direct JSON input structure |  
  | `outputs` | JSON | ⚪ | Legacy mode: Direct JSON output specification |

  **Legend**: ✅ Required, 📋 Required in respective mode, ⚪ Optional

  ### **Input PQ Structure (Enhanced Mode)**
  ```json
  {
    "symbol": "D",          // Parameter symbol from article
    "value": 150,           // Numeric value
    "unit": "km"            // Unit specification (optional)
  }
  ```

  ### **Output PQ Structure (Enhanced Mode)**
  ```json
  {
    "symbol": "s",          // Output parameter symbol  
    "unit": "mph"           // Desired output unit
  }
  ```

  ## 🔗 Integration Examples

  ### **Google Sheets Integration**
  ```
  Google Sheets Trigger → CalcsLive Calculator → Google Sheets Update
  ```
  Process engineering data with automatic unit normalization.

  ### **Discord/Slack Bot**
  ```
  Discord Trigger → CalcsLive Calculator → Discord Response
  ```
  Create calculation bots for engineering teams.

  ### **Database ETL Pipeline** 
  ```
  Database → CalcsLive Calculator → Transform → Data Warehouse
  ```
  Standardize units across diverse data sources.

  ### **Monitoring & Alerting**
  ```
  Sensor API → CalcsLive Calculator → Condition → Email Alert
  ```
  Calculate safety thresholds with proper unit handling.

  ## 🆘 Support & Community

  - **📖 Documentation**: [CalcsLive Docs](https://www.calcslive.com/docs)
  - **🔧 API Reference**: [CalcsLive API Docs](https://www.calcslive.com/docs/api) 
  - **🐛 Bug Reports**: [GitHub Issues](https://github.com/calcslive/n8n-nodes-calcslive/issues)
  - **💬 Community**: [n8n Community Forum](https://community.n8n.io)
  - **📧 Direct Support**: don.wen@calcslive.com

  ## 🤝 Contributing

  We welcome contributions! Here's how to get involved:

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

  ### **Development Setup**
  ```bash
  git clone https://github.com/calcslive/n8n-nodes-calcslive.git
  cd n8n-nodes-calcslive
  npm install
  npm run build
  npm link

  # In your n8n directory
  npm link n8n-nodes-calcslive
  n8n start
  ```

  ## 📋 Version History

  ### **0.1.15** - n8n Community Compliance
  - ✅ Proper credential authentication with `authenticate` method
  - ✅ Uses `httpRequestWithAuthentication` for secure API calls
  - ✅ Added `pairedItem` for proper n8n item linking
  - ✅ Implemented `continueOnFail` support
  - ✅ Workflow template with Merge node for chained calculations
  - ✅ Removed all console.log statements
  - ✅ Passes n8n security scan

  ### **0.1.0** - MVP Release
  - ✅ Enhanced and Legacy configuration modes
  - ✅ Automatic unit conversion system
  - ✅ Comprehensive error handling
  - ✅ API key authentication
  - ✅ Input/output parameter discovery

  ### **Roadmap**
  - **0.2.0**: Batch processing optimizations
  - **0.3.0**: Cached metadata for improved performance  
  - **0.4.0**: Visual calculation builder interface
  - **1.0.0**: Production release with full test coverage

  ## 📜 License

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

  ## 🌟 About CalcsLive

  CalcsLive transforms how engineers and technical professionals handle calculations by embedding unit-aware mathematics directly into documents and workflows. Founded on the principle that calculations should be as easy as writing text, CalcsLive bridges the gap between mathematical rigor and practical usability.

  **Visit [CalcsLive](https://www.calcslive.com) to explore the full platform!**

  ---

  *Made with ❤️ by the CalcsLive team. Empowering engineers through intelligent calculations.*

ai_documentation_summary:
  {"purpose":"Executes unit-aware, multi-step calculations using CalcsLive articles within n8n workflows, enabling automatic unit conversion and symbolic equation solving.","capabilities":["Unit-aware calculations across 540+ units and 64+ categories","Symbolic equation solving","Multi-step calculation chaining","Integration with n8n expressions ({{$json}})","Support for Enhanced Mode guided setup","Composable calculation architecture"],"authentication":"API key required","commonUseCases":["Physics calculations (speed, volume, mass)","Unit conversions between different systems","Engineering calculations requiring multiple inputs","AI agent workflows needing precise numerical outputs"],"limitations":["MVP release with core functionality only","Requires pre-created CalcsLive articles for calculations"],"relatedNodes":["n8n Merge Node","n8n Code Node","n8n HTTP Request Node"]}


node_type: n8n-nodes-supermetrics.supermetrics
package_name: n8n-nodes-supermetrics
display_name: Supermetrics
description: Query marketing data using Supermetrics
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: dev-info-supermetrics
author_github_url: https://github.com/supermetrics-public/n8n_connector.git
npm_package_name: n8n-nodes-supermetrics
npm_version: 0.1.21
community_fetched_at: 2026-07-14T14:40:33.536Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Supermetrics node for n8n

  With Supermetrics, you can use data from 50+ sources like Facebook Ads or Google Analytics right inside your workflows (source list to be expanded to 200+ soon).

  - List Data Sources - Lists the sources available via Supermetrics. For example, LinkedIn Ads and YouTube are data sources.
  - List Fields - Lists the fields available for a data source. For example, some of the fields available for LinkedIn Ads are Campaign Name and Cost.
  - List Accounts - Lists the accounts you have access to within a data source. Eg. for LinkedIn Ads, this lists your advertising accounts.
  - Get Data - Runs a query for getting data fron the selected source, using your selection of accounts and fields, and possible other parameters such as the date range.

  ## Requirements

  - A valid Supermetrics API **license** and **API key**.
  - https://supermetrics.com/products/api
    https://supermetrics.com/docs/product-api-authentication

  ## Installation - n8n Cloud

  We are waiting for n8n to verify our node. Before then, it cannot be installed to the cloud version of n8n.

  ## Installation - Self-hosted n8n (GUI — easiest)

  If you run n8n yourself (local, desktop, server, or Docker) you can install the Supermetrics node in the UI:

  1. Open n8n → Settings → Community Nodes → Install.

  2. Enter the npm package name: "n8n-nodes-supermetrics" (Optionally pin a version, e.g. @1.2.3.)

  3. Confirm the risks prompt and click Install.

  4. Restart n8n if prompted.

  Note that installing from npm via the GUI is only available to self-hosted instance owners/admins.

  ## Installation - Self-hosted n8n (Docker/CLI — manual)

  Use this when the GUI isn’t available (e.g. queue mode) or for private/automated setups:

  Enter the container shell (replace n8n with your container name):

    ```bash
    docker exec -it n8n sh
    ```

  Create the nodes folder (if needed) and go there:

     ```bash
     mkdir -p ~/.n8n/nodes
     cd ~/.n8n/nodes
     ```


  Install the package from npm:

     ```bash
     npm i n8n-nodes-supermetrics
     ```

  Restart n8n so it loads the new node.

ai_documentation_summary:
  {"purpose":"This n8n node allows querying marketing data from 50+ sources (expanding to 200+) directly within workflows, including operations like listing data sources, fields, and accounts, as well as retrieving specific data.","capabilities":["List available data sources","List available fields for a data source","List accessible accounts for a data source","Query and retrieve data based on selected sources, accounts, fields, and date ranges"],"authentication":"API key required (valid Supermetrics API license and key needed)","commonUseCases":["Integrating Facebook Ads and Google Analytics data into n8n workflows","Automating marketing data retrieval with specific date ranges","Accessing LinkedIn Ads and YouTube advertising data"],"limitations":["Not available in n8n Cloud version (waiting for verification)","Limited to 50+ data sources currently (expanding to 200+)","Requires manual installation on self-hosted instances via npm or Docker"],"relatedNodes":[]}


node_type: n8n-nodes-newscatcher-catchall-pernode.newscatcher
package_name: n8n-nodes-newscatcher-catchall-pernode
display_name: Newscatcher CatchAll
description: Submit and pull CatchAll jobs from Newscatcher
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: chintan.newscatcherapi
author_github_url: https://github.com/Newscatcher/
npm_package_name: n8n-nodes-newscatcher-catchall-pernode
npm_version: 0.1.42
community_fetched_at: 2026-07-14T14:40:33.537Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "job",
      "options": [
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Monitor",
          "value": "monitor"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "submit",
      "options": [
        {
          "name": "Submit",
          "value": "submit",
          "action": "Submit a job",
          "description": "Create a job with query/context/schema"
        },
        {
          "name": "Initialize",
          "value": "initialize",
          "action": "Initialize a job",
          "description": "Initialize a job with query/context/schema"
        },
        {
          "name": "Pull",
          "value": "pull",
          "action": "Pull job results",
          "description": "Fetch results by job_id"
        },
        {
          "name": "Get Status",
          "value": "status",
          "action": "Check job status",
          "description": "Get the status of a job by job_id"
        },
        {
          "name": "List User Jobs",
          "value": "listUserJobs",
          "action": "List user jobs",
          "description": "Returns all jobs created by the authenticated user"
        },
        {
          "name": "Continue",
          "value": "continue",
          "action": "Continue a job",
          "description": "Continue an existing job to process more records beyond the initial limit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a monitor",
          "description": "Create a monitor based on an existing reference job"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List monitors",
          "description": "List all monitors for this API key"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get monitor details",
          "description": "Get full details and records for a monitor"
        },
        {
          "name": "List Jobs",
          "value": "listJobs",
          "action": "List jobs for a monitor",
          "description": "List jobs created by a given monitor"
        },
        {
          "name": "Enable",
          "value": "enable",
          "action": "Enable a monitor",
          "description": "Enable a monitor by monitor_id"
        },
        {
          "name": "Disable",
          "value": "disable",
          "action": "Disable a monitor",
          "description": "Disable a monitor by monitor_id"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monitor"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Submit",
      "value": "submit",
      "action": "Submit a job",
      "description": "Create a job with query/context/schema",
      "resource": "job"
    },
    {
      "name": "Initialize",
      "value": "initialize",
      "action": "Initialize a job",
      "description": "Initialize a job with query/context/schema",
      "resource": "job"
    },
    {
      "name": "Pull",
      "value": "pull",
      "action": "Pull job results",
      "description": "Fetch results by job_id",
      "resource": "job"
    },
    {
      "name": "Get Status",
      "value": "status",
      "action": "Check job status",
      "description": "Get the status of a job by job_id",
      "resource": "job"
    },
    {
      "name": "List User Jobs",
      "value": "listUserJobs",
      "action": "List user jobs",
      "description": "Returns all jobs created by the authenticated user",
      "resource": "job"
    },
    {
      "name": "Continue",
      "value": "continue",
      "action": "Continue a job",
      "description": "Continue an existing job to process more records beyond the initial limit",
      "resource": "job"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a monitor",
      "description": "Create a monitor based on an existing reference job",
      "resource": "monitor"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List monitors",
      "description": "List all monitors for this API key",
      "resource": "monitor"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get monitor details",
      "description": "Get full details and records for a monitor",
      "resource": "monitor"
    },
    {
      "name": "List Jobs",
      "value": "listJobs",
      "action": "List jobs for a monitor",
      "description": "List jobs created by a given monitor",
      "resource": "monitor"
    },
    {
      "name": "Enable",
      "value": "enable",
      "action": "Enable a monitor",
      "description": "Enable a monitor by monitor_id",
      "resource": "monitor"
    },
    {
      "name": "Disable",
      "value": "disable",
      "action": "Disable a monitor",
      "description": "Disable a monitor by monitor_id",
      "resource": "monitor"
    }
  ]

npm_readme:
  # n8n-nodes-newscatcher-catchall-pernode

  n8n community node for [Newscatcher CatchAll](https://catchall.newscatcherapi.com/) API integration. This node allows you to submit jobs, retrieve results, manage monitors, and receive real-time webhook triggers from Newscatcher CatchAll.

  ## Features

  - **Job Management**: Submit jobs, pull results, and check job status
  - **Monitor Management**: Create, list, enable, disable monitors, and retrieve monitor details
  - **Webhook Trigger**: Real-time trigger node for monitor results
  - **Per-node API Key**: Simple authentication with API key stored directly in the node (not encrypted)

  ## Installation

  ### For n8n Cloud

  1. Go to **Settings → Community Nodes → Install**
  2. Enter: `n8n-nodes-newscatcher-catchall-pernode`
  3. Click **Install**

  ### For Self-Hosted n8n

  ```bash
  npm install n8n-nodes-newscatcher-catchall-pernode
  ```

  ## Authentication

  Enter your Newscatcher API key directly in the node's **API Key** field. The API key is stored as a node setting (not encrypted). Get your API key from [Newscatcher](https://newscatcherapi.com/).

  ## Nodes

  ### Newscatcher CatchAll

  Main node for interacting with the Newscatcher CatchAll API.

  #### Resources

  **Job**
  - **Submit**: Create a new CatchAll job with query, context, and schema
  - **Pull**: Retrieve results for a completed job by job ID
  - **Get Status**: Check the status of a job by job ID

  **Monitor**
  - **Create**: Create a new monitor based on an existing reference job
  - **List**: List all monitors for your API key
  - **Get**: Get full details and records for a specific monitor
  - **List Jobs**: List all jobs created by a specific monitor
  - **Enable**: Enable a monitor by monitor ID
  - **Disable**: Disable a monitor by monitor ID

  #### Example: Submit a Job

  1. Add the **Newscatcher CatchAll** node to your workflow
  2. Select **Resource**: `Job`
  3. Select **Operation**: `Submit`
  4. Enter your **API Key**
  5. Fill in:
     - **Query**: "Tech company earnings this quarter"
     - **Context**: (Optional) "Focus on revenue and profit margins"
     - **Schema**: (Optional) "Company [NAME] earned [REVENUE] in [QUARTER]"
  6. Execute the workflow

  The node returns a job ID that you can use with the **Pull** or **Get Status** operations.

  #### Example: Create a Monitor

  1. Add the **Newscatcher CatchAll** node to your workflow
  2. Select **Resource**: `Monitor`
  3. Select **Operation**: `Create`
  4. Enter your **API Key**
  5. Fill in:
     - **Reference Job ID**: An existing job ID to base the monitor on
     - **Schedule**: "every day at 12 PM UTC"
     - **Webhook URL**: Your webhook endpoint URL
     - **Webhook Method**: POST or GET
     - **Webhook Headers/Params/Auth**: (Optional) JSON configuration
  6. Execute the workflow

  ### Newscatcher CatchAll Trigger

  Webhook trigger node that activates when a monitor has new results.

  #### Setup

  1. Add the **Newscatcher CatchAll Trigger** node to your workflow
  2. Enter your **API Key**
  3. Select a **Monitor** from the dropdown (monitors are loaded from your API)
  4. Activate the workflow

  When the selected monitor has new results, Newscatcher will POST the data to the webhook URL, and your workflow will be triggered automatically.

  ## Development

  ### Local Development

  ```bash
  # Install dependencies
  npm install

  # Build the project
  npm run build

  # Lint the code
  npx @n8n/scan-community-package n8n-nodes-newscatcher-catchall-pernode
  ```

  ### Project Structure

  ```
  src/
    nodes/
      Newscatcher/
        Newscatcher.node.ts              # Main node
        NewscatcherCatchAllTrigger.node.ts # Trigger node
        newscatcher-new.png              # Node icon
  ```

  ## API Documentation

  For detailed API documentation, visit:
  - [Newscatcher CatchAll API](https://catchall.newscatcherapi.com/)
  - [Newscatcher Documentation](https://newscatcherapi.com/docs)

  ## License

  MIT

  ## Support

  - **Issues**: [GitHub Issues](https://github.com/Newscatcher/n8n-nodes-newscatcher-catchall-pernode/issues)
  - **Repository**: [GitHub](https://github.com/Newscatcher/n8n-nodes-newscatcher-catchall-pernode)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Newscatcher CatchAll API to submit monitoring jobs, retrieve results, manage monitors, and receive real-time webhook triggers.","capabilities":["Submit CatchAll jobs with query, context, and schema","Pull results for completed jobs by job ID","Check job status by job ID","Create monitors based on reference jobs","List, enable, disable, and retrieve details for monitors","List jobs created by specific monitors","Real-time webhook trigger on new monitor results"],"authentication":"API key required (stored as unencrypted node setting)","commonUseCases":["Automated news monitoring and alerting","Real-time data collection from news sources","Scheduled job execution with webhook notifications"],"limitations":["API key is stored as an unencrypted node setting"],"relatedNodes":["Newscatcher CatchAll Trigger"]}


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-07-14 14:40:33
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-07-14T14:40:33.538Z
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:
  [
    {
      "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.",
      "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-tiiny-host.tiiny
package_name: n8n-nodes-tiiny-host
display_name: Tiiny Host
description: Manage sites on Tiiny Host
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: tiinyhost
author_github_url: https://github.com/Tiiny-Host/n8n-node.git
npm_package_name: n8n-nodes-tiiny-host
npm_version: 0.1.15
community_fetched_at: 2026-07-14T14:40:33.539Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Site",
          "value": "create",
          "action": "Create a site",
          "description": "Upload a new file to create a site on Tiiny"
        },
        {
          "name": "Create Site from HTML",
          "value": "createHtml",
          "action": "Create a site from HTML",
          "description": "Create a new site from raw HTML content"
        },
        {
          "name": "Update Site",
          "value": "update",
          "action": "Update a site",
          "description": "Update an existing site on Tiiny"
        },
        {
          "name": "Update Site from HTML",
          "value": "updateHtml",
          "action": "Update a site from HTML",
          "description": "Update an existing site using raw HTML content"
        },
        {
          "name": "Delete Site",
          "value": "delete",
          "action": "Delete a site",
          "description": "Delete a site from Tiiny"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Site",
      "value": "create",
      "action": "Create a site",
      "description": "Upload a new file to create a site on Tiiny"
    },
    {
      "name": "Create Site from HTML",
      "value": "createHtml",
      "action": "Create a site from HTML",
      "description": "Create a new site from raw HTML content"
    },
    {
      "name": "Update Site",
      "value": "update",
      "action": "Update a site",
      "description": "Update an existing site on Tiiny"
    },
    {
      "name": "Update Site from HTML",
      "value": "updateHtml",
      "action": "Update a site from HTML",
      "description": "Update an existing site using raw HTML content"
    },
    {
      "name": "Delete Site",
      "value": "delete",
      "action": "Delete a site",
      "description": "Delete a site from Tiiny"
    }
  ]

npm_readme:
  # n8n-nodes-tiiny-host

  This is an n8n community node that lets you use [Tiiny Host](https://tiiny.host) in your n8n workflows.

  Tiiny Host is the simplest way to share your static website. Upload your HTML, PDF, or ZIP files and get an instant live link in seconds!

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

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

  ## Installation

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

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in n8n
  2. Select **Install a community node**
  3. Enter `n8n-nodes-tiiny-host` in the npm Package Name
  4. Agree to the risks and select **Install**

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

  ### Manual Installation

  To get started, install the package in your n8n root directory:

  ```bash
  npm install n8n-nodes-tiiny-host
  ```

  For Docker-based deployments, add the following line before the font installation command in your [n8n Dockerfile](https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/Dockerfile):

  ```dockerfile
  RUN cd /usr/local/lib/node_modules/n8n && npm install n8n-nodes-tiiny-host
  ```

  ## Operations

  The Tiiny Host node supports the following operations:

  ### Create Site

  - Upload HTML, PDF, or ZIP files to create a new site
  - Optionally set a custom subdomain
  - Enable password protection for your site
  - Choose from available domain suffixes

  ### Update Site

  - Update an existing site with new files
  - Maintains the same URL while replacing the content
  - Automatically removes old files before uploading new ones
  - Update password protection settings

  ### Delete Site

  - Permanently delete a site from Tiiny Host
  - Removes all associated files and data

  ## Credentials

  To use this node, you need a Tiiny Host API key. You can obtain your API key from your [Tiiny Host account settings](https://tiiny.host/manage/accoun).

  ### Setting up credentials in n8n:

  1. Go to **Credentials** in n8n
  2. Click **Create New** and select **Tiiny API**
  3. Enter your API key from Tiiny Host
  4. Click **Save**

  ## Compatibility

  - Minimum n8n version: **1.0.0**
  - Tested against n8n version: **1.68.0**

  ## Usage

  ### Example: Upload a Website

  1. Add a **Read Binary File** node to read your HTML file or ZIP archive
  2. Add the **Tiiny** node
  3. Select the **Create Site** operation
  4. Configure:
     - **Binary Property**: `data` (or your binary property name)
     - **Subdomain** (optional): Your desired subdomain
     - **Domain Suffix**: Select from available options
     - **Password Protected**: Enable if needed
  5. Execute the workflow
  6. The node will return the live URL of your site

  ### Example: Update an Existing Site

  1. Get the binary file you want to upload (using **Read Binary File** or **HTTP Request** node)
  2. Add the **Tiiny** node
  3. Select the **Update Site** operation
  4. Configure:
     - **Site Link**: The full URL of the site to update (e.g., `my-site.tiiny.site`)
     - **Binary Property**: The name of the binary property containing your file
     - **Password Protected**: Update protection settings if needed
  5. Execute the workflow
  6. Your site will be updated with the new content

  ### Example: Delete a Site

  1. Add the **Tiiny** node
  2. Select the **Delete Site** operation
  3. Configure:
     - **Site Link**: The full URL of the site to delete (e.g., `my-site.tiiny.site`)
  4. Execute the workflow
  5. The site will be permanently deleted

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Tiiny Host](https://tiiny.host)
  - [Tiiny Host Documentation](https://tiiny.host/docs)
  - [Tiiny Host API Documentation](https://tiiny.host/api)

  ## Support

  If you have any issues or questions:

  - Check the [n8n forum](https://community.n8n.io/)
  - Visit [Tiiny Host support](https://tiiny.host/support)
  - Open an issue on [GitHub](https://github.com/Tiiny-Host/n8n-node/issues)

  ## License

  [MIT](LICENSE.md)

  ## Version History

  ### 0.1.0

  - Initial release
  - Create, Update, and Delete site operations
  - API key authentication
  - Password protection support
  - Custom subdomain and domain suffix support

ai_documentation_summary:
  {"purpose":"A community n8n node that manages static website hosting on Tiiny Host, allowing users to create, update, and delete hosted sites with instant live links.","capabilities":["Create new sites by uploading HTML, PDF, or ZIP files","Update existing sites with new file content","Permanently delete hosted sites","Set custom subdomains","Enable password protection for sites","Select from available domain suffixes","Maintain existing URLs during updates"],"authentication":"API key required (Tiiny Host API key)","commonUseCases":["Quickly share static websites or documents via a live link","Automate website deployment workflows","Manage temporary project hosting","Securely share sensitive documents with password protection"],"limitations":["Requires a Tiiny Host account and API key","Limited to static file hosting (HTML, PDF, ZIP)","Community node (may have less support than official nodes)","Minimum n8n version 1.0.0 required"],"relatedNodes":["Read Binary File","HTTP Request","Wait","If","Set"]}


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

updated_at: 2026-07-14 14:40:33
author_name: legnext
author_github_url: https://github.com/legnext-ai/
npm_package_name: n8n-nodes-legnext
npm_version: 0.1.0
community_fetched_at: 2026-07-14T14:40:33.540Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Image",
          "value": "image"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Video",
          "value": "video"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get account balance",
          "routing": {
            "request": {
              "url": "../account/balance",
              "method": "GET"
            }
          },
          "description": "Retrieve account balance information including credits and points"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "imagine",
      "options": [
        {
          "name": "Blend",
          "value": "blend",
          "action": "Blend",
          "routing": {
            "request": {
              "url": "/blend",
              "method": "POST"
            }
          },
          "description": "Blend 2-5 images together. Returns a new Job ID."
        },
        {
          "name": "Describe",
          "value": "describe",
          "action": "Describe",
          "routing": {
            "request": {
              "url": "/describe",
              "method": "POST"
            }
          },
          "description": "Generate text descriptions and prompts from an image. Returns a new Job ID."
        },
        {
          "name": "Imagine",
          "value": "imagine",
          "action": "Imagine",
          "routing": {
            "request": {
              "url": "/diffusion",
              "method": "POST"
            }
          },
          "description": "Generates a 2x2 image grid from a prompt. Returns the Job ID."
        },
        {
          "name": "Outpaint",
          "value": "outpaint",
          "action": "Outpaint",
          "routing": {
            "request": {
              "url": "/outpaint",
              "method": "POST"
            }
          },
          "description": "Generate an image in a specified direction with a scale ratio. Returns a new Job ID."
        },
        {
          "name": "Pan",
          "value": "pan",
          "action": "Pan extend canvas",
          "routing": {
            "request": {
              "url": "/pan",
              "method": "POST"
            }
          },
          "description": "Extend the image canvas in a specified direction with a scale ratio. Returns a new Job ID."
        },
        {
          "name": "Reroll",
          "value": "reroll",
          "action": "Reroll",
          "routing": {
            "request": {
              "url": "/reroll",
              "method": "POST"
            }
          },
          "description": "Regenerate images using the same prompt from a previous job. Returns a new Job ID."
        },
        {
          "name": "Shorten",
          "value": "shorten",
          "action": "Shorten",
          "routing": {
            "request": {
              "url": "/shorten",
              "method": "POST"
            }
          },
          "description": "Analyze and shorten a prompt to its key elements. Returns a new Job ID."
        },
        {
          "name": "Upscale",
          "value": "upscale",
          "action": "Upscale",
          "routing": {
            "request": {
              "url": "/upscale",
              "method": "POST"
            }
          },
          "description": "Upscale one of the grid images from a previous job. Returns a new Job ID."
        },
        {
          "name": "Variation",
          "value": "variation",
          "action": "Variation",
          "routing": {
            "request": {
              "url": "/variation",
              "method": "POST"
            }
          },
          "description": "Create variations of a selected image, optionally with a remix prompt. Returns a new Job ID."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get job status",
          "routing": {
            "request": {
              "url": "=/job/{{$parameter.jobId}}",
              "method": "GET"
            }
          },
          "description": "Fetch the status and result of a job by its ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "videoDiffusion",
      "options": [
        {
          "name": "Extend Video",
          "value": "extendVideo",
          "action": "Extend video",
          "routing": {
            "request": {
              "url": "/extend-video",
              "method": "POST"
            }
          },
          "description": "Extend existing videos with seamless continuation and motion. Returns a new Job ID."
        },
        {
          "name": "Upscale Video",
          "value": "upscaleVideo",
          "action": "Upscale video",
          "routing": {
            "request": {
              "url": "/video-upscale",
              "method": "POST"
            }
          },
          "description": "Enhance video resolution and quality using AI upscaling technology. Returns a new Job ID."
        },
        {
          "name": "Video Diffusion",
          "value": "videoDiffusion",
          "action": "Video diffusion",
          "routing": {
            "request": {
              "url": "/video-diffusion",
              "method": "POST"
            }
          },
          "description": "Generate dynamic videos from text prompts or existing images. Returns a new Job ID."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get account balance",
      "routing": {
        "request": {
          "url": "../account/balance",
          "method": "GET"
        }
      },
      "description": "Retrieve account balance information including credits and points",
      "resource": "account"
    },
    {
      "name": "Blend",
      "value": "blend",
      "action": "Blend",
      "routing": {
        "request": {
          "url": "/blend",
          "method": "POST"
        }
      },
      "description": "Blend 2-5 images together. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Describe",
      "value": "describe",
      "action": "Describe",
      "routing": {
        "request": {
          "url": "/describe",
          "method": "POST"
        }
      },
      "description": "Generate text descriptions and prompts from an image. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Imagine",
      "value": "imagine",
      "action": "Imagine",
      "routing": {
        "request": {
          "url": "/diffusion",
          "method": "POST"
        }
      },
      "description": "Generates a 2x2 image grid from a prompt. Returns the Job ID.",
      "resource": "image"
    },
    {
      "name": "Outpaint",
      "value": "outpaint",
      "action": "Outpaint",
      "routing": {
        "request": {
          "url": "/outpaint",
          "method": "POST"
        }
      },
      "description": "Generate an image in a specified direction with a scale ratio. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Pan",
      "value": "pan",
      "action": "Pan extend canvas",
      "routing": {
        "request": {
          "url": "/pan",
          "method": "POST"
        }
      },
      "description": "Extend the image canvas in a specified direction with a scale ratio. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Reroll",
      "value": "reroll",
      "action": "Reroll",
      "routing": {
        "request": {
          "url": "/reroll",
          "method": "POST"
        }
      },
      "description": "Regenerate images using the same prompt from a previous job. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Shorten",
      "value": "shorten",
      "action": "Shorten",
      "routing": {
        "request": {
          "url": "/shorten",
          "method": "POST"
        }
      },
      "description": "Analyze and shorten a prompt to its key elements. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Upscale",
      "value": "upscale",
      "action": "Upscale",
      "routing": {
        "request": {
          "url": "/upscale",
          "method": "POST"
        }
      },
      "description": "Upscale one of the grid images from a previous job. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Variation",
      "value": "variation",
      "action": "Variation",
      "routing": {
        "request": {
          "url": "/variation",
          "method": "POST"
        }
      },
      "description": "Create variations of a selected image, optionally with a remix prompt. Returns a new Job ID.",
      "resource": "image"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get job status",
      "routing": {
        "request": {
          "url": "=/job/{{$parameter.jobId}}",
          "method": "GET"
        }
      },
      "description": "Fetch the status and result of a job by its ID",
      "resource": "job"
    },
    {
      "name": "Extend Video",
      "value": "extendVideo",
      "action": "Extend video",
      "routing": {
        "request": {
          "url": "/extend-video",
          "method": "POST"
        }
      },
      "description": "Extend existing videos with seamless continuation and motion. Returns a new Job ID.",
      "resource": "video"
    },
    {
      "name": "Upscale Video",
      "value": "upscaleVideo",
      "action": "Upscale video",
      "routing": {
        "request": {
          "url": "/video-upscale",
          "method": "POST"
        }
      },
      "description": "Enhance video resolution and quality using AI upscaling technology. Returns a new Job ID.",
      "resource": "video"
    },
    {
      "name": "Video Diffusion",
      "value": "videoDiffusion",
      "action": "Video diffusion",
      "routing": {
        "request": {
          "url": "/video-diffusion",
          "method": "POST"
        }
      },
      "description": "Generate dynamic videos from text prompts or existing images. Returns a new Job ID.",
      "resource": "video"
    }
  ]

npm_readme:
  # n8n-nodes-legnext

  ![Legnext](https://i.ibb.co/Lzgsg5dY/image.png)

  This is an n8n community node that integrates [Legnext AI](https://legnext.ai) into your n8n workflows. Legnext AI is a powerful API service for AI-powered image and video generation using Midjourney models, enabling you to create stunning visuals and dynamic videos directly from your automation workflows.

  With the Legnext node, you can generate images from text prompts, create variations, upscale images, blend multiple images together, generate videos, and much more—all through a simple, declarative API interface.

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

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

  ## Installation

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

  To install the Legnext node:
  1. Go to **Settings** → **Community nodes** in your n8n instance
  2. Search for `n8n-nodes-legnext`
  3. Click **Install**

  ## Operations

  The Legnext node provides four main resources with comprehensive operations:

  ### 🖼️ Image Resource
  Generate and manipulate images using Midjourney models:
  - **Blend** - Blend 2-5 images together seamlessly
  - **Describe** - Generate text descriptions and prompts from images
  - **Imagine** - Generate a 2x2 image grid from text prompts
  - **Outpaint** - Extend images in specified directions
  - **Pan** - Extend the image canvas with scale ratio
  - **Reroll** - Regenerate images using the same prompt
  - **Shorten** - Analyze and shorten prompts to key elements
  - **Upscale** - Upscale images from generated grids
  - **Variation** - Create variations of selected images with optional remix prompts

  ### 🎬 Video Resource
  Create and enhance dynamic videos:
  - **Extend Video** - Extend existing videos with seamless continuation
  - **Upscale Video** - Enhance video resolution and quality using AI
  - **Video Diffusion** - Generate dynamic videos from text prompts or images

  ### 📋 Job Resource
  Monitor and manage your generation tasks:
  - **Get Job** - Retrieve the status and results of any generation job

  ### 💰 Account Resource
  Manage your Legnext account:
  - **Get Balance** - Check your account balance and usage

  ## Credentials

  To use the Legnext node, you need to authenticate with your Legnext API key:

  1. Create a free account at [Legnext AI](https://legnext.ai)
  2. Navigate to your API settings to generate an API key
  3. In n8n, add new credentials for **Legnext API**
  4. Enter your API key
  5. Test the connection to ensure it works

  ## Usage

  ### Basic Workflow Example

  Here's a simple example of generating an image and upscaling it:

  1. **Imagine Operation**: Generate a 2x2 grid of images
     - Resource: `Image`
     - Operation: `Imagine`
     - Text Prompt: `"A beautiful sunset over snow mountains"`

  2. **Get Job Operation**: Wait for the job to complete
     - Resource: `Job`
     - Operation: `Get Job`
     - Job ID: `{{ $json.job_id }}`

  3. **Upscale Operation**: Upscale your favorite image
     - Resource: `Image`
     - Operation: `Upscale`
     - Job ID: `{{ $json.job_id }}`
     - Image Number: `0` (first image in the grid)

  ### Webhook Integration

  All operations support optional webhook callbacks. Add a callback URL to receive notifications when tasks complete:

  ```
  callback: https://your-webhook-endpoint.com/notify
  ```

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Legnext API Documentation](https://docs.legnext.ai)
  * [Legnext Website](https://legnext.ai)
  * [GitHub Repository](https://github.com/legnext-ai/n8n-nodes-legnext)

  ## License

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

  ## Support

  For support, please:
  - Open an issue on [GitHub](https://github.com/legnext-ai/n8n-nodes-legnext/issues)
  - Contact Legnext support at [Legnext AI](https://legnext.ai)
  - Join the n8n community forum for general n8n questions

  ---

  Made with ❤️ by the Legnext team

ai_documentation_summary:
  {"purpose":"The Legnext n8n node integrates with the Legnext AI API to generate and manipulate images and videos using Midjourney models directly within n8n workflows.","capabilities":["Generate images from text prompts (Imagine)","Create image variations (Variation)","Blend multiple images together (Blend)","Upscale images and videos (Upscale)","Extend video content (Extend Video)","Generate dynamic videos from text or images (Video Diffusion)","Analyze images to generate text descriptions (Describe)","Extend images in specified directions (Outpaint)","Regenerate images with same prompt (Reroll)","Shorten text prompts to key elements (Shorten)"],"authentication":"API key required","commonUseCases":["Automated content creation for social media","Workflow-based image generation and editing","Video production automation","Prompt optimization and analysis","Account management and monitoring"],"limitations":["Requires a separate Legnext AI account and API key","Depends on external Legnext API availability and rate limits","Webhook support is optional and requires external endpoint configuration"],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.httpRequest","n8n-nodes-core.waitUntil"]}


node_type: n8n-nodes-fishaudio.fishaudio
package_name: n8n-nodes-fishaudio
display_name: Fish Audio
description: Use Fish Audio for text-to-speech and voice generation
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: twango
author_github_url: https://github.com/fishaudio/fish-audio-n8n.git
npm_package_name: n8n-nodes-fishaudio
npm_version: 0.4.0
community_fetched_at: 2026-07-14T14:40:33.541Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "speech",
      "options": [
        {
          "name": "Speech",
          "value": "speech",
          "description": "Text-to-speech and speech-to-text conversion"
        },
        {
          "name": "Voice Model",
          "value": "voiceModel",
          "description": "Manage voice models for cloning"
        },
        {
          "name": "Account",
          "value": "account",
          "description": "Account information and credits"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate speech from text",
          "description": "Convert text to speech using Fish Audio TTS"
        },
        {
          "name": "Transcribe",
          "value": "transcribe",
          "action": "Transcribe audio to text",
          "description": "Convert audio to text using Fish Audio ASR"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a voice model",
          "description": "Create a new voice model from audio samples"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a voice model",
          "description": "Delete an existing voice model"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a voice model",
          "description": "Retrieve details of a voice model"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List voice models",
          "description": "List available voice models"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceModel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCredits",
      "options": [
        {
          "name": "Get Credits",
          "value": "getCredits",
          "action": "Get API credit balance",
          "description": "Get your current Fish Audio API credit balance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate speech from text",
      "description": "Convert text to speech using Fish Audio TTS",
      "resource": "speech"
    },
    {
      "name": "Transcribe",
      "value": "transcribe",
      "action": "Transcribe audio to text",
      "description": "Convert audio to text using Fish Audio ASR",
      "resource": "speech"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a voice model",
      "description": "Create a new voice model from audio samples",
      "resource": "voiceModel"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a voice model",
      "description": "Delete an existing voice model",
      "resource": "voiceModel"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a voice model",
      "description": "Retrieve details of a voice model",
      "resource": "voiceModel"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List voice models",
      "description": "List available voice models",
      "resource": "voiceModel"
    },
    {
      "name": "Get Credits",
      "value": "getCredits",
      "action": "Get API credit balance",
      "description": "Get your current Fish Audio API credit balance",
      "resource": "account"
    }
  ]

npm_readme:
  ![n8n.png](.github/assets/n8n.png)

  # n8n-nodes-fishaudio

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-fishaudio)](https://www.npmjs.com/package/n8n-nodes-fishaudio)
  [![License](https://img.shields.io/github/license/fishaudio/fish-audio-n8n)](https://github.com/fishaudio/fish-audio-n8n/blob/main/LICENSE)

  This is an n8n community node for [Fish Audio](https://fish.audio) - a platform for text-to-speech, speech-to-text, and voice cloning.

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

  ## Installation

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

  ## Operations

  ### Speech

  | Operation      | Description                                          |
  |----------------|------------------------------------------------------|
  | **Generate**   | Convert text to speech using Fish Audio's TTS models |
  | **Transcribe** | Convert speech to text using Fish Audio's ASR        |

  ### Voice Model

  | Operation  | Description                                 |
  |------------|---------------------------------------------|
  | **List**   | List available voice models                 |
  | **Get**    | Get details of a specific voice model       |
  | **Create** | Create a new voice model from audio samples |
  | **Delete** | Delete a voice model                        |

  ### Account

  | Operation       | Description                   |
  |-----------------|-------------------------------|
  | **Get Credits** | Check your API credit balance |

  ## Credentials

  To use this node, you need a Fish Audio API key:

  1. Create an account at [fish.audio](https://fish.audio)
  2. Navigate to [API Keys](https://fish.audio/app/api-keys) in your dashboard
  3. Generate a new API key
  4. Add the API key to your n8n credentials

  ## Resources

  - [Fish Audio](https://fish.audio)
  - [Fish Audio API Documentation](https://docs.fish.audio)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"This n8n node enables text-to-speech generation, speech-to-text transcription, and voice model management via the Fish Audio API.","capabilities":["Text-to-speech (TTS) generation","Speech-to-text (ASR) transcription","List available voice models","Retrieve details of specific voice models","Create new voice models from audio samples","Delete existing voice models","Check API credit balance"],"authentication":"API key required","commonUseCases":["Automated voiceovers for videos or podcasts","Transcribing audio files or meetings","Custom voice cloning for branding","Monitoring API usage and credit limits"],"limitations":[],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-httpRequest"]}


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

updated_at: 2026-07-14 14:40:33
author_name: splch
author_github_url: https://github.com/splch/
npm_package_name: n8n-nodes-anytype
npm_version: 0.2.2
community_fetched_at: 2026-07-14T14:40:33.542Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "object",
      "options": [
        {
          "name": "List",
          "value": "list"
        },
        {
          "name": "Member",
          "value": "member"
        },
        {
          "name": "Object",
          "value": "object"
        },
        {
          "name": "Property",
          "value": "property"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Space",
          "value": "space"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Type",
          "value": "type"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "globalSearch",
      "options": [
        {
          "name": "Search Globally",
          "value": "globalSearch",
          "action": "Search objects across all spaces",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/search",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Search objects across all spaces"
        },
        {
          "name": "Search in Space",
          "value": "spaceSearch",
          "action": "Search objects within a space",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/search",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Search objects within a specific space"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many spaces",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/spaces",
              "method": "GET"
            }
          },
          "description": "Get many spaces"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a space",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "space"
                  }
                }
              ]
            },
            "request": {
              "url": "/spaces",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Create a space"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a space",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "space"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}",
              "method": "GET"
            }
          },
          "description": "Get a space"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a space",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "space"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}",
              "body": "={{$parameter.body}}",
              "method": "PATCH"
            }
          },
          "description": "Update a space"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "space"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getViews",
      "options": [
        {
          "name": "Add Objects",
          "value": "addObjects",
          "action": "Add objects to a list",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/objects",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Add objects to a list (collection)"
        },
        {
          "name": "Remove Object",
          "value": "removeObject",
          "action": "Remove an object from a list",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/objects/{{$parameter.objectId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove an object from a list (collection)"
        },
        {
          "name": "Get Views",
          "value": "getViews",
          "action": "Get list views",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/views",
              "method": "GET"
            }
          },
          "description": "Get views for a list"
        },
        {
          "name": "Get Objects",
          "value": "getObjects",
          "action": "Get objects in a list view",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/views/{{$parameter.viewId}}/objects",
              "method": "GET"
            }
          },
          "description": "Get objects in a list view"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "list"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List members",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/members",
              "method": "GET"
            }
          },
          "description": "List members in a space"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a member",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "member"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/members/{{$parameter.memberId}}",
              "method": "GET"
            }
          },
          "description": "Get a single member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "member"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an object",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "object"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/objects",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Create a new object in a space"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an object",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete (archive) an object"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an object",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "object"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
              "method": "GET"
            }
          },
          "description": "Get a single object"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List objects",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/objects",
              "method": "GET"
            }
          },
          "description": "List objects in a space"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an object",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "object"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
              "body": "={{$parameter.body}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing object"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "object"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a property",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "property"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Create a new property"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a property",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a property"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a property",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "property"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
              "method": "GET"
            }
          },
          "description": "Get a single property"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List properties",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties",
              "method": "GET"
            }
          },
          "description": "List properties in a space"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a property",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "property"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
              "body": "={{$parameter.body}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "property"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tag",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "tag"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Create a new tag"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a tag",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a tag"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a tag",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "tag"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
              "method": "GET"
            }
          },
          "description": "Get a single tag"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List tags",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags",
              "method": "GET"
            }
          },
          "description": "List tags in a space"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tag",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "tag"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
              "body": "={{$parameter.body}}",
              "method": "PATCH"
            }
          },
          "description": "Update a tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "type"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types",
              "body": "={{$parameter.body}}",
              "method": "POST"
            }
          },
          "description": "Create a new type"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a type",
          "routing": {
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a type"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "type"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
              "method": "GET"
            }
          },
          "description": "Get a single type"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types",
              "method": "GET"
            }
          },
          "description": "List types in a space"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "type"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
              "body": "={{$parameter.body}}",
              "method": "PATCH"
            }
          },
          "description": "Update a type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "type"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List templates",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}/templates",
              "method": "GET"
            }
          },
          "description": "List templates for a type"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "template"
                  }
                }
              ]
            },
            "request": {
              "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}/templates/{{$parameter.templateId}}",
              "method": "GET"
            }
          },
          "description": "Get a single template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search Globally",
      "value": "globalSearch",
      "action": "Search objects across all spaces",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/search",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Search objects across all spaces",
      "resource": "search"
    },
    {
      "name": "Search in Space",
      "value": "spaceSearch",
      "action": "Search objects within a space",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/search",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Search objects within a specific space",
      "resource": "search"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many spaces",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/spaces",
          "method": "GET"
        }
      },
      "description": "Get many spaces",
      "resource": "space"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a space",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "space"
              }
            }
          ]
        },
        "request": {
          "url": "/spaces",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Create a space",
      "resource": "space"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a space",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "space"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}",
          "method": "GET"
        }
      },
      "description": "Get a space",
      "resource": "space"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a space",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "space"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}",
          "body": "={{$parameter.body}}",
          "method": "PATCH"
        }
      },
      "description": "Update a space",
      "resource": "space"
    },
    {
      "name": "Add Objects",
      "value": "addObjects",
      "action": "Add objects to a list",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/objects",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Add objects to a list (collection)",
      "resource": "list"
    },
    {
      "name": "Remove Object",
      "value": "removeObject",
      "action": "Remove an object from a list",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/objects/{{$parameter.objectId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove an object from a list (collection)",
      "resource": "list"
    },
    {
      "name": "Get Views",
      "value": "getViews",
      "action": "Get list views",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/views",
          "method": "GET"
        }
      },
      "description": "Get views for a list",
      "resource": "list"
    },
    {
      "name": "Get Objects",
      "value": "getObjects",
      "action": "Get objects in a list view",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/lists/{{$parameter.listId}}/views/{{$parameter.viewId}}/objects",
          "method": "GET"
        }
      },
      "description": "Get objects in a list view",
      "resource": "list"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List members",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/members",
          "method": "GET"
        }
      },
      "description": "List members in a space",
      "resource": "member"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a member",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "member"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/members/{{$parameter.memberId}}",
          "method": "GET"
        }
      },
      "description": "Get a single member",
      "resource": "member"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an object",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "object"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/objects",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Create a new object in a space",
      "resource": "object"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an object",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete (archive) an object",
      "resource": "object"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an object",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "object"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
          "method": "GET"
        }
      },
      "description": "Get a single object",
      "resource": "object"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List objects",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/objects",
          "method": "GET"
        }
      },
      "description": "List objects in a space",
      "resource": "object"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an object",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "object"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/objects/{{$parameter.objectId}}",
          "body": "={{$parameter.body}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing object",
      "resource": "object"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a property",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "property"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Create a new property",
      "resource": "property"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a property",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a property",
      "resource": "property"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a property",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "property"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
          "method": "GET"
        }
      },
      "description": "Get a single property",
      "resource": "property"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List properties",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties",
          "method": "GET"
        }
      },
      "description": "List properties in a space",
      "resource": "property"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a property",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "property"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}",
          "body": "={{$parameter.body}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing property",
      "resource": "property"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tag",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "tag"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Create a new tag",
      "resource": "tag"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a tag",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a tag",
      "resource": "tag"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a tag",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "tag"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
          "method": "GET"
        }
      },
      "description": "Get a single tag",
      "resource": "tag"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List tags",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags",
          "method": "GET"
        }
      },
      "description": "List tags in a space",
      "resource": "tag"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tag",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "tag"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/properties/{{$parameter.propertyId}}/tags/{{$parameter.tagId}}",
          "body": "={{$parameter.body}}",
          "method": "PATCH"
        }
      },
      "description": "Update a tag",
      "resource": "tag"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "type"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types",
          "body": "={{$parameter.body}}",
          "method": "POST"
        }
      },
      "description": "Create a new type",
      "resource": "type"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a type",
      "routing": {
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a type",
      "resource": "type"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "type"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
          "method": "GET"
        }
      },
      "description": "Get a single type",
      "resource": "type"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types",
          "method": "GET"
        }
      },
      "description": "List types in a space",
      "resource": "type"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "type"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}",
          "body": "={{$parameter.body}}",
          "method": "PATCH"
        }
      },
      "description": "Update a type",
      "resource": "type"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List templates",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}/templates",
          "method": "GET"
        }
      },
      "description": "List templates for a type",
      "resource": "template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "template"
              }
            }
          ]
        },
        "request": {
          "url": "=/spaces/{{$parameter.spaceId}}/types/{{$parameter.typeId}}/templates/{{$parameter.templateId}}",
          "method": "GET"
        }
      },
      "description": "Get a single template",
      "resource": "template"
    }
  ]

npm_readme:
  # n8n-nodes-anytype

  An n8n community node for the **Anytype API**.

  https://github.com/user-attachments/assets/59b52a17-696c-450f-8836-d1d068232488

  It supports the official Anytype API resources:

  - Search (Global and Space search)
  - Spaces
  - Lists
  - Members
  - Objects
  - Properties
  - Tags
  - Types
  - Templates

  ## Installation

  Follow the n8n community nodes installation guide.

  ## Credentials

  Create **Anytype API** credentials in n8n:

  - **Base URL**:
    - Default: `http://127.0.0.1:31009/v1`
    - Change if your Anytype API is exposed elsewhere.
  - **API Version**:
    - Default: `2025-11-08`
    - Sent as the `Anytype-Version` header.
  - **API Key**:
    - A token you pass as `Authorization: Bearer <token>`.

  ### How to get an API key (outside this node)

  Generate the API key with Anytype's official auth flow, then paste it into the n8n credential:

  1) Create an auth challenge (`POST /auth/challenges`) with your app name
  2) Check Anytype Desktop for the 4-digit code
  3) Create the API key (`POST /auth/api_keys`) with the challenge ID and code

  See Anytype docs: https://developers.anytype.io/docs/reference/2025-11-08/create-api-key/

  ## Notes on pagination

  Most “Get Many” endpoints return:
  ```json
  { "data": [...], "pagination": { "offset": 0, "limit": 100, "has_more": true, "total": 123 } }
  ````

  This node automatically returns only the `data` array as n8n items when using “Get Many”.

  If you need the full raw response (including `pagination`) or unsupported endpoints, use n8n's
  **HTTP Request** node with your Anytype base URL, `Anytype-Version` header, and Bearer API key.

  ## Operations

  ### Search

  * Search objects across all spaces
  * Search objects within a space

  ### Spaces

  * Get Many
  * Create
  * Get
  * Update

  ### Lists

  * Add objects to list
  * Remove object from list
  * Get list views
  * Get objects in list

  ### Members

  * Get Many
  * Get

  ### Objects

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Properties

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Tags

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Types

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Templates

  * Get Many
  * Get

  ## Resources

  * n8n community nodes ([documentation](https://docs.n8n.io/integrations/community-nodes/))
  * Anytype developer docs ([API reference](https://developers.anytype.io/docs/reference))

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Anytype API to manage data such as spaces, lists, objects, properties, tags, types, and templates.","capabilities":["Search objects globally or within a specific space","Manage spaces (create, get, update, list)","Manage lists (add/remove objects, get views and contents)","Manage members","Manage objects (create, get, update, delete)","Manage properties (create, get, update, delete)","Manage tags (create, get, update, delete)","Manage types (create, get, update, delete)","Manage templates (get many, get)","Automatic handling of pagination for 'Get Many' endpoints"],"authentication":"API Key required (Bearer token via 'Authorization' header)","commonUseCases":["Automating data extraction from Anytype into n8n workflows","Synchronizing Anytype data with external systems","Creating or updating Anytype objects programmatically"],"limitations":["Returns only the 'data' array for paginated 'Get Many' endpoints; full response including pagination metadata requires the HTTP Request node"],"relatedNodes":["HTTP Request"]}


node_type: n8n-nodes-chatwork.chatwork
package_name: n8n-nodes-chatwork
display_name: Chatwork
description: Retrieve data from Chatwork API.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: hoangdv
author_github_url: https://github.com/hoangsetup/
npm_package_name: n8n-nodes-chatwork
npm_version: 3.0.1
community_fetched_at: 2026-07-14T14:40:33.543Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Me",
          "value": "Me",
          "description": "Used to access your account information"
        },
        {
          "name": "My",
          "value": "My",
          "description": "Used to access your data on the account"
        },
        {
          "name": "Contact",
          "value": "Contact",
          "description": "Used to access the list of your contacts"
        },
        {
          "name": "Room",
          "value": "Room",
          "description": "Used to access information such as messages, members, files, and tasks associated to a specific conversation. The conversation can be Group chat, Direct chat, or My chat."
        },
        {
          "name": "Incoming Request",
          "value": "IncomingRequest",
          "description": "Used to access the list of contact requests you have received"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Contacts",
          "value": "get",
          "action": "Get the contact list",
          "routing": {
            "request": {
              "url": "/contacts",
              "method": "GET"
            }
          },
          "description": "Get the contact list"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Account Information",
          "value": "get",
          "action": "Get your account information",
          "routing": {
            "request": {
              "url": "/me",
              "method": "GET"
            }
          },
          "description": "Get your account information"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Me"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "status",
      "options": [
        {
          "name": "Get Status",
          "value": "status",
          "action": "Get unread messages unread to messages and unfinished tasks count",
          "routing": {
            "request": {
              "url": "/my/status",
              "method": "GET"
            }
          },
          "description": "Get unread messages, unread To messages, and unfinished tasks count"
        },
        {
          "name": "Get Tasks",
          "value": "tasks",
          "action": "Get the list of all unfinished tasks",
          "routing": {
            "request": {
              "url": "/my/tasks",
              "method": "GET"
            }
          },
          "description": "Get the list of all unfinished tasks"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "My"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Get All Rooms",
          "value": "getAll",
          "routing": {
            "request": {
              "url": "/rooms",
              "method": "GET"
            }
          },
          "description": "Retrieve all rooms the user belongs to"
        },
        {
          "name": "Create Room",
          "value": "create",
          "routing": {
            "request": {
              "url": "/rooms",
              "method": "POST"
            }
          },
          "description": "Create a new chat room"
        },
        {
          "name": "Get Room Detail",
          "value": "getDetail",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve detailed information about a specific room"
        },
        {
          "name": "Update Room",
          "value": "updateInfo",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update room name, description, or icon"
        },
        {
          "name": "Leave or Delete Room",
          "value": "leaveOrDelete",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Leave the room or delete it (admin only)"
        },
        {
          "name": "Get Members",
          "value": "getMembers",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/members",
              "method": "GET"
            }
          },
          "description": "Get all members of the room"
        },
        {
          "name": "Change Members",
          "value": "changeMembers",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/members",
              "method": "PUT"
            }
          },
          "description": "Change room members and roles"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "routing": {
            "request": {
              "qs": {
                "force": 1
              },
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages",
              "method": "GET"
            }
          },
          "description": "Get messages from the room"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a message to the specified room"
        },
        {
          "name": "Get Message",
          "value": "getMessage",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a specific message by ID"
        },
        {
          "name": "Update Message",
          "value": "updateMessage",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a message in the room"
        },
        {
          "name": "Delete Message",
          "value": "deleteMessage",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a message in the room"
        },
        {
          "name": "Get Tasks",
          "value": "getTasks",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks",
              "method": "GET"
            }
          },
          "description": "Get tasks in the room"
        },
        {
          "name": "Create Task",
          "value": "createTask",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks",
              "method": "POST"
            }
          },
          "description": "Create a task in the room"
        },
        {
          "name": "Get Task Detail",
          "value": "getTaskDetail",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks/{{$parameter[\"taskId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific task in the room"
        },
        {
          "name": "Update Task Status",
          "value": "updateTaskStatus",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks/{{$parameter[\"taskId\"]}}/status",
              "method": "PUT"
            }
          },
          "description": "Change the completion status of a task"
        },
        {
          "name": "Get Files",
          "value": "getFiles",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/files",
              "method": "GET"
            }
          },
          "description": "Get the list of files in the room"
        },
        {
          "name": "Get File Detail",
          "value": "getFile",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/files/{{$parameter[\"fileId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a file in the room"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/files",
              "method": "POST",
              "headers": {
                "accept": "application/json",
                "content-type": "multipart/form-data"
              }
            }
          },
          "description": "Upload a new file to the room"
        },
        {
          "name": "Mark as Read",
          "value": "markAsRead",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/read",
              "method": "PUT"
            }
          },
          "description": "Mark messages in the room as read"
        },
        {
          "name": "Mark as Unread",
          "value": "markAsUnread",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/unread",
              "method": "PUT"
            }
          },
          "description": "Mark message in the room as unread"
        },
        {
          "name": "Get Invite Link",
          "value": "getInviteLink",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
              "method": "GET"
            }
          },
          "description": "Get invite link for the room"
        },
        {
          "name": "Create Invite Link",
          "value": "createInviteLink",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
              "method": "POST"
            }
          },
          "description": "Create invite link for the room"
        },
        {
          "name": "Delete Invite Link",
          "value": "deleteInviteLink",
          "routing": {
            "request": {
              "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
              "method": "DELETE"
            }
          },
          "description": "Delete invite link for the room"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Room"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get all incoming requests",
          "routing": {
            "request": {
              "url": "/incoming_requests",
              "method": "GET"
            }
          },
          "description": "Get the list of contact requests the user has received"
        },
        {
          "name": "Approve",
          "value": "approve",
          "action": "Approve an incoming request",
          "routing": {
            "request": {
              "url": "=/incoming_requests/{{$parameter[\"requestId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Approve a contact request the user has received"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an incoming request",
          "routing": {
            "request": {
              "url": "=/incoming_requests/{{$parameter[\"requestId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Decline a contact request the user has received"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "IncomingRequest"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Contacts",
      "value": "get",
      "action": "Get the contact list",
      "routing": {
        "request": {
          "url": "/contacts",
          "method": "GET"
        }
      },
      "description": "Get the contact list",
      "resource": "Contact"
    },
    {
      "name": "Get Account Information",
      "value": "get",
      "action": "Get your account information",
      "routing": {
        "request": {
          "url": "/me",
          "method": "GET"
        }
      },
      "description": "Get your account information",
      "resource": "Me"
    },
    {
      "name": "Get Status",
      "value": "status",
      "action": "Get unread messages unread to messages and unfinished tasks count",
      "routing": {
        "request": {
          "url": "/my/status",
          "method": "GET"
        }
      },
      "description": "Get unread messages, unread To messages, and unfinished tasks count",
      "resource": "My"
    },
    {
      "name": "Get Tasks",
      "value": "tasks",
      "action": "Get the list of all unfinished tasks",
      "routing": {
        "request": {
          "url": "/my/tasks",
          "method": "GET"
        }
      },
      "description": "Get the list of all unfinished tasks",
      "resource": "My"
    },
    {
      "name": "Get All Rooms",
      "value": "getAll",
      "routing": {
        "request": {
          "url": "/rooms",
          "method": "GET"
        }
      },
      "description": "Retrieve all rooms the user belongs to",
      "resource": "Room"
    },
    {
      "name": "Create Room",
      "value": "create",
      "routing": {
        "request": {
          "url": "/rooms",
          "method": "POST"
        }
      },
      "description": "Create a new chat room",
      "resource": "Room"
    },
    {
      "name": "Get Room Detail",
      "value": "getDetail",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve detailed information about a specific room",
      "resource": "Room"
    },
    {
      "name": "Update Room",
      "value": "updateInfo",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update room name, description, or icon",
      "resource": "Room"
    },
    {
      "name": "Leave or Delete Room",
      "value": "leaveOrDelete",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Leave the room or delete it (admin only)",
      "resource": "Room"
    },
    {
      "name": "Get Members",
      "value": "getMembers",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/members",
          "method": "GET"
        }
      },
      "description": "Get all members of the room",
      "resource": "Room"
    },
    {
      "name": "Change Members",
      "value": "changeMembers",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/members",
          "method": "PUT"
        }
      },
      "description": "Change room members and roles",
      "resource": "Room"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "routing": {
        "request": {
          "qs": {
            "force": 1
          },
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages",
          "method": "GET"
        }
      },
      "description": "Get messages from the room",
      "resource": "Room"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a message to the specified room",
      "resource": "Room"
    },
    {
      "name": "Get Message",
      "value": "getMessage",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a specific message by ID",
      "resource": "Room"
    },
    {
      "name": "Update Message",
      "value": "updateMessage",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a message in the room",
      "resource": "Room"
    },
    {
      "name": "Delete Message",
      "value": "deleteMessage",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/{{$parameter[\"messageId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a message in the room",
      "resource": "Room"
    },
    {
      "name": "Get Tasks",
      "value": "getTasks",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks",
          "method": "GET"
        }
      },
      "description": "Get tasks in the room",
      "resource": "Room"
    },
    {
      "name": "Create Task",
      "value": "createTask",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks",
          "method": "POST"
        }
      },
      "description": "Create a task in the room",
      "resource": "Room"
    },
    {
      "name": "Get Task Detail",
      "value": "getTaskDetail",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks/{{$parameter[\"taskId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific task in the room",
      "resource": "Room"
    },
    {
      "name": "Update Task Status",
      "value": "updateTaskStatus",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/tasks/{{$parameter[\"taskId\"]}}/status",
          "method": "PUT"
        }
      },
      "description": "Change the completion status of a task",
      "resource": "Room"
    },
    {
      "name": "Get Files",
      "value": "getFiles",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/files",
          "method": "GET"
        }
      },
      "description": "Get the list of files in the room",
      "resource": "Room"
    },
    {
      "name": "Get File Detail",
      "value": "getFile",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/files/{{$parameter[\"fileId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a file in the room",
      "resource": "Room"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/files",
          "method": "POST",
          "headers": {
            "accept": "application/json",
            "content-type": "multipart/form-data"
          }
        }
      },
      "description": "Upload a new file to the room",
      "resource": "Room"
    },
    {
      "name": "Mark as Read",
      "value": "markAsRead",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/read",
          "method": "PUT"
        }
      },
      "description": "Mark messages in the room as read",
      "resource": "Room"
    },
    {
      "name": "Mark as Unread",
      "value": "markAsUnread",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/messages/unread",
          "method": "PUT"
        }
      },
      "description": "Mark message in the room as unread",
      "resource": "Room"
    },
    {
      "name": "Get Invite Link",
      "value": "getInviteLink",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
          "method": "GET"
        }
      },
      "description": "Get invite link for the room",
      "resource": "Room"
    },
    {
      "name": "Create Invite Link",
      "value": "createInviteLink",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
          "method": "POST"
        }
      },
      "description": "Create invite link for the room",
      "resource": "Room"
    },
    {
      "name": "Delete Invite Link",
      "value": "deleteInviteLink",
      "routing": {
        "request": {
          "url": "=/rooms/{{$parameter[\"roomId\"]}}/link",
          "method": "DELETE"
        }
      },
      "description": "Delete invite link for the room",
      "resource": "Room"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get all incoming requests",
      "routing": {
        "request": {
          "url": "/incoming_requests",
          "method": "GET"
        }
      },
      "description": "Get the list of contact requests the user has received",
      "resource": "IncomingRequest"
    },
    {
      "name": "Approve",
      "value": "approve",
      "action": "Approve an incoming request",
      "routing": {
        "request": {
          "url": "=/incoming_requests/{{$parameter[\"requestId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Approve a contact request the user has received",
      "resource": "IncomingRequest"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an incoming request",
      "routing": {
        "request": {
          "url": "=/incoming_requests/{{$parameter[\"requestId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Decline a contact request the user has received",
      "resource": "IncomingRequest"
    }
  ]

npm_readme:
  # n8n-nodes-chatwork

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

  **ChatWork** is a business chat platform that provides messaging, task management, file sharing, and team collaboration features via a REST 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.

  After installation, restart n8n to load the ChatWork node.

  ## Operations

  This node supports the following ChatWork API operations:

  ### Me
  - Get account information

  ### My
  - Get status (unread counts, tasks)
  - Get tasks assigned to the authenticated user

  ### Contacts
  - Get contact list

  ### Incoming Requests

  - List incoming requests
  - Approve request
  - Decline request

  ### Rooms
  - Get all rooms
  - Get room details
  - Create a room
  - Update room information
  - Leave or delete a room
  - Get room members
  - Change associated members
  - Get messages
  - Send a message
  - Get message details
  - Update a message
  - Delete a message
  - Mark as Read
  - Mark as unread
  - Get tasks
  - Create a task
  - Update task status
  - Get task details
  - Get files
  - Get file details (with optional temporary download URL)
  - Upload file
  - Get invite link
  - Create invite link
  - Delete invite link

  ## Webhook Trigger

  This package provides a **Chatwork Trigger** node that allows n8n workflows to receive events from Chatwork via webhooks.

  ### Supported Events

  The trigger node listens to incoming Chatwork webhook events and routes them to different outputs:

  | Event Type        | Output          |
  |-------------------|-----------------|
  | `mention_to_me`   | Mention To Me   |
  | `message_created` | Message Created |
  | `message_updated` | Message Updated |

  ### Webhook Security

  Chatwork signs webhook requests using an HMAC-SHA256 signature.

  The Chatwork Trigger node supports **optional signature verification** using one or more webhook tokens:

  - Signature header: `x-chatworkwebhooksignature`
  - Hash algorithm: HMAC-SHA256
  - Secret key: Base64-decoded webhook token

  > Signature verification can be disabled for local development and testing.


  Each output can be connected independently in your workflow.

  ### Development Notes

  - The workflow must be **active** for webhooks to be registered
  - Webhooks will return `404 – unknown webhook` if the workflow is inactive
  - Signature verification should be disabled when testing with manual `curl` requests

  ### Known Limitations

  - Webhook events are currently processed **as-is**
  - Duplicate or replayed webhook events are **not yet deduplicated**
  - Replay protection and idempotency will be added in a future release

  ## Credentials

  This node requires a **ChatWork API Token**.

  ### Prerequisites
  - A ChatWork account
  - An API token generated from your ChatWork account settings

  ### Setup
  1. In n8n, go to **Credentials**
  2. Create new credentials of type **ChatWork API**
  3. Paste your ChatWork API token
  4. Save the credentials and select them in the ChatWork node

  Authentication is handled via the `X-ChatWorkToken` request header.

  ## Compatibility

  - **Minimum n8n version**: 1.x
  - **Tested with**: n8n 1.x (community nodes API v1)

  This node uses the new **routing-based request system** introduced in n8n v1. Older n8n versions are not supported.

  ## Usage

  Most operations are straightforward and map directly to ChatWork API endpoints.

  Notes:
  - Boolean options such as *Create download URL* control optional API query parameters.

  If you are new to n8n, see the [Try it out](https://docs.n8n.io/try-it-out/) guide to get started.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [ChatWork API Documentation (PDF)](https://download.chatwork.com/ChatWork_API_Documentation.pdf)

  ## Version history

  ### 2.0.0
  - Migrated to n8n routing-based request structure
  - Improved Room operations
  - Fixed message sending with multipart/form-data
  - General refactoring and cleanup

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the ChatWork business chat platform, allowing users to retrieve data, manage tasks, communicate, and handle file operations via its REST API.","capabilities":["Retrieve account information","Get user status and assigned tasks","Manage contact lists","Handle incoming requests (approve/decline)","Manage rooms (create, update, delete, leave)","Send, retrieve, and update messages","Manage tasks (create, update status, get details)","Handle file operations (upload, download, get details)","Generate and manage invite links","Receive webhook events (mention_to_me, message_created, message_updated)"],"authentication":"API Token required (ChatWork API Token stored in credentials, sent via X-ChatWorkToken header)","commonUseCases":["Automated task management in ChatWork","Automated messaging and notifications","File sharing workflows","Incoming request approval automation","Webhook-based event processing for mentions or messages"],"limitations":["Webhook events are processed as-is without deduplication","Replay protection and idempotency for webhooks are not yet implemented","Requires n8n version 1.x or higher","Signature verification must be disabled for manual curl testing"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.webhook"]}


node_type: @trustify-da/n8n-nodes-dependency-analytics.dependencyAnalytics
package_name: @trustify-da/n8n-nodes-dependency-analytics
display_name: Dependency Analytics
description: Get data from Dependency Analytics API
category: Community
development_style: declarative
version: 2
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: adva_oren
author_github_url: https://github.com/trustification/n8n-nodes-dependency-analytics.git
npm_package_name: @trustify-da/n8n-nodes-dependency-analytics
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:33.544Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "vulnerability",
      "options": [
        {
          "name": "SBOM",
          "value": "sbom"
        },
        {
          "name": "Vulnerability",
          "value": "vulnerability"
        },
        {
          "name": "Advisory",
          "value": "advisory"
        }
      ],
      "description": "Choose which Trustify resource to work with. This affects available operations and fields.",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get sbom",
          "description": "Retrieve an sbom"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many sboms",
          "description": "Retrieve a list of sboms"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sbom"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get vulnerability",
          "description": "Retrieve a vulnerability"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many vulnerabilities",
          "description": "Retrieve a list of vulnerabilities"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vulnerability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get advisory",
          "description": "Retrieve an advisory"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many advisories",
          "description": "Retrieve a list of advisories"
        },
        {
          "name": "Analyze",
          "value": "analyze",
          "action": "Analyze advisories",
          "description": "Analyze advisories from purls or an SBOM"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "advisory"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get sbom",
      "description": "Retrieve an sbom",
      "resource": "sbom"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many sboms",
      "description": "Retrieve a list of sboms",
      "resource": "sbom"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get vulnerability",
      "description": "Retrieve a vulnerability",
      "resource": "vulnerability"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many vulnerabilities",
      "description": "Retrieve a list of vulnerabilities",
      "resource": "vulnerability"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get advisory",
      "description": "Retrieve an advisory",
      "resource": "advisory"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many advisories",
      "description": "Retrieve a list of advisories",
      "resource": "advisory"
    },
    {
      "name": "Analyze",
      "value": "analyze",
      "action": "Analyze advisories",
      "description": "Analyze advisories from purls or an SBOM",
      "resource": "advisory"
    }
  ]

npm_readme:
  [![ci](https://github.com/trustification/n8n-nodes-dependency-analytics/actions/workflows/ci.yaml/badge.svg)](https://github.com/trustification/n8n-nodes-dependency-analytics/actions/workflows/ci.yaml)
  [![codecov](https://codecov.io/gh/trustification/n8n-nodes-dependency-analytics/graph/badge.svg?token=WIH8MUMZ7T)](https://codecov.io/gh/trustification/n8n-nodes-dependency-analytics)
  # n8n-nodes-dependency-analytics

  This is an [n8n](https://n8n.io/) community node for [Red Hat Dependency Analytics](https://github.com/trustification).

  Dependency Analytics helps organizations explore the relationships between applications, dependencies, and vulnerabilities by consuming and managing:

  - **Software Bill of Materials (SBOMs)**
  - **Vulnerability Exploitability eXchange (VEX)** data
  - **Vendor advisories** from vulnerability databases

  It is designed for **DevSecOps teams and developers** to better understand and reduce organizational risk exposure.

  [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

  This node provides three operation groups that mirror the Dependency Analytics API:

  **SBOM operations**

  - **Get SBOM** - Retrieve metadata for a single SBOM by its SHA (supports `sha256:`, `sha384:`, `sha512:` prefixes).
  - **Get Many SBOMs** - List SBOMs in your instance with optional limit/sorting.

  **Advisory operations**

  - **Get Advisory** - Fetch a specific advisory (includes identifiers, issuer, dates, and CVE links where available).
  - **Get Many Advisories** - List advisories with optional sorting.
  - **Analyze** - Resolve advisories for supplied packages:
    - From **PURLs**: send one or more PURLs and receive advisories per package.
    - From an **SBOM SHA**: look up the SBOM, then return advisories associated with that SBOM.

  **Vulnerability operations**

  - **Get Vulnerability** - Retrieve a single vulnerability record (e.g., by CVE).
  - **Get Many Vulnerabilities** - List vulnerability records with optional sorting.

  ### Sorting and limits

  - List-style operations accept multiple sort rules; they are applied in order after the items are fetched.
  - Supported sort fields:
    - `SBOMs (Get Many)`: published, name, packages (count), size
    - `Advisories (Get Many)`: published, title, size
    - `Advisories (Analyze)`: published, title, average score, average severity (Critical > High > Medium > Low > None > Unknown)
    - `Vulnerabilities (Get Many)`: published, title, average severity, average score
  - The `Limit` option caps results (default 50, minimum 1). 

  ### Output modes

  - `Simplified` (default): minimal, stable shape for each resource to keep payloads small.
  - `Raw`: returns the API response as-is (use when you need every field).
  - `Selected Fields`: pick the properties you want; identifiers are always included.
  - Tip: When chaining nodes or using AI tools, prefer `Simplified` or a narrow `Selected Fields` set to avoid oversized items.


  ## Credentials

  This node supports Client Credentials OAuth2 type for authenticating with Red Hat Dependency Analytics.

  ### RHTPA Client Credentials

  - Use when connecting to RHTPA cloud services
  - Required parameters: (Provided by the RHTPA team upon request)
    - Client ID
    - Client Secret

  ### Trustify Client Credentials

  - Use when connecting to:
    - On premise Trustify instance
    - Local development
  - It requires that in your SSO provider a confidential client exists
    - The Trustify instance accepts this client id
    - The Trustify instance can map the client or scope to the necessary permissions

  For more information refer to the [Trustify - OIDC Docs](https://github.com/guacsec/trustify/blob/main/docs/oidc.md)

  > **Note:** If you are running n8n locally and see the error *"The connection cannot be established, this usually occurs due to an incorrect host (domain) value"*, try:
  > ```bash
  > export NODE_TLS_REJECT_UNAUTHORIZED=0
  > n8n start
  > ```



  ## Usage

  1. Add the Dependency Analytics node to your n8n workflow

  2. Select an operation (e.g., “List SBOMs”)

  3. Provide required inputs (e.g., SBOM SHA)

  4. Run the workflow and process the results

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Dependency Analytics GitHub](https://github.com/trustification)
  * [Trustify Documantation](https://docs.guac.sh/trustify/)

ai_documentation_summary:
  {"purpose":"A n8n community node that retrieves and analyzes data from Red Hat Dependency Analytics, including SBOMs, advisories, and vulnerabilities.","capabilities":["Retrieve SBOM metadata by SHA","List SBOMs with sorting and pagination","Fetch specific advisories","List advisories with sorting","Resolve advisories from PURLs","Resolve advisories from SBOM SHA","Retrieve specific vulnerability records","List vulnerability records with sorting","Apply sorting rules (e.g., by severity, score, title)","Control output mode (Simplified, Raw, Selected Fields)"],"authentication":"OAuth2 (Client Credentials)","commonUseCases":["DevSecOps risk exposure analysis","Dependency vulnerability scanning","SBOM management and compliance","VEX (Vulnerability Exploitability eXchange) data retrieval","Vendor advisory monitoring"],"limitations":["Requires specific OAuth2 setup (Client Credentials) for both cloud and on-premise instances","Local n8n execution may require disabling TLS verification for certain connection issues","Default limit is 50 items per list operation","Output payload size can be large if 'Raw' mode is used without field selection"],"relatedNodes":["HTTP Request","OAuth2 Authentication","JSON to JSON","Split In Batches"]}


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

updated_at: 2026-07-14 14:40:33
author_name: reothor
author_github_url: https://github.com/frodehus/
npm_package_name: n8n-nodes-msdefender
npm_version: 1.8.5
community_fetched_at: 2026-07-14T14:40:33.545Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "advancedQuery",
      "options": [
        {
          "name": "Advanced Query",
          "value": "advancedQuery"
        },
        {
          "name": "Alert",
          "value": "defenderAlert"
        },
        {
          "name": "Exposure Score",
          "value": "exposure"
        },
        {
          "name": "Indicator",
          "value": "indicator"
        },
        {
          "name": "Investigation",
          "value": "investigation"
        },
        {
          "name": "Machine",
          "value": "machine"
        },
        {
          "name": "Machine Action",
          "value": "machineAction"
        },
        {
          "name": "Recommendation",
          "value": "recommendation"
        },
        {
          "name": "Remediation",
          "value": "remediation"
        },
        {
          "name": "Software",
          "value": "software"
        },
        {
          "name": "Vulnerability",
          "value": "vulnerability"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAlerts",
      "options": [
        {
          "name": "Get Alert",
          "value": "getAlertById",
          "action": "Get a security alert",
          "description": "Get a security alert by ID"
        },
        {
          "name": "List Alerts",
          "value": "listAlerts",
          "action": "List security alerts",
          "routing": {
            "request": {
              "url": "/api/alerts",
              "method": "GET"
            }
          },
          "description": "List security alerts"
        },
        {
          "name": "Update Alert",
          "value": "updateAlert",
          "action": "Update a security alert",
          "description": "Update the status or classification of a security alert"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "defenderAlert"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllMachines",
      "options": [
        {
          "name": "Add Or Remove Tag",
          "value": "addOrRemoveTag",
          "action": "Add or remove tag on a machine",
          "description": "Adds or removes a tag from a specified machine ID"
        },
        {
          "name": "Find By Tag",
          "value": "findByTag",
          "action": "Find machines by tag",
          "description": "Retrieves a list of machines associated with a specific tag"
        },
        {
          "name": "Get Many",
          "value": "getAllMachines",
          "action": "Get many machines",
          "routing": {
            "request": {
              "url": "/api/machines",
              "method": "GET"
            }
          },
          "description": "Retrieve many machines"
        },
        {
          "name": "Get Security Recommendations",
          "value": "getSecurityRecommendations",
          "action": "Get security recommendations for a machine",
          "description": "Retrieves security recommendations for a specified machine ID"
        },
        {
          "name": "List Software",
          "value": "listSoftware",
          "action": "List software on a machine",
          "description": "Retrieves a collection of installed software related to a given machine ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "machine"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "run",
      "options": [
        {
          "name": "Run",
          "value": "run",
          "action": "Run advanced query",
          "routing": {
            "request": {
              "url": "/api/advancedqueries/run",
              "method": "POST"
            }
          },
          "description": "Run advanced query using KQL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "advancedQuery"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "currentExposureScore",
      "options": [
        {
          "name": "Current Exposure Score",
          "value": "currentExposureScore",
          "action": "Get current exposure score",
          "routing": {
            "request": {
              "url": "/api/exposureScore",
              "method": "GET"
            }
          },
          "description": "Get the exposure score"
        },
        {
          "name": "Get By Machine Groups",
          "value": "getByMachineGroups",
          "action": "Get many exposure scores",
          "routing": {
            "request": {
              "url": "/api/exposureScore/ByMachineGroups",
              "method": "GET"
            }
          },
          "description": "Retrieve exposure scores by machine groups"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "exposure"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllInvestigations",
      "options": [
        {
          "name": "Get All Investigations",
          "value": "getAllInvestigations",
          "action": "Get all investigations",
          "routing": {
            "request": {
              "url": "/api/investigations",
              "method": "GET"
            }
          },
          "description": "Retrieve all investigations"
        },
        {
          "name": "Get Investigation By ID",
          "value": "getInvestigationById",
          "action": "Get an investigation by ID",
          "routing": {
            "request": {
              "url": "=/api/investigations/{{ $parameter.investigationId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a specific investigation by its ID"
        },
        {
          "name": "Start Investigation",
          "value": "startInvestigation",
          "action": "Start an investigation on a machine",
          "description": "Initiate an investigation on a specified machine"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "investigation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "isolate",
      "options": [
        {
          "name": "Cancel Machine Action",
          "value": "cancelMachineAction",
          "action": "Cancel machine action",
          "description": "Cancel an already launched machine action that isn't yet in final state"
        },
        {
          "name": "Isolate Machine",
          "value": "isolate",
          "action": "Isolate a machine",
          "description": "Isolate a machine from the network"
        },
        {
          "name": "List Machine Actions",
          "value": "listMachineActions",
          "action": "List actions for a machine",
          "routing": {
            "request": {
              "url": "/api/machineactions",
              "method": "GET"
            }
          },
          "description": "List actions for a machine"
        },
        {
          "name": "Offboard Machine",
          "value": "offboardMachine",
          "action": "Offboard a machine",
          "description": "Offboard a machine from Microsoft Defender for Endpoint"
        },
        {
          "name": "Remove From Isolation",
          "value": "removeFromIsolation",
          "action": "Remove a machine from isolation",
          "description": "Remove a machine from isolation"
        },
        {
          "name": "Run Antivirus Scan",
          "value": "runAntivirusScan",
          "action": "Run an antivirus scan on a machine",
          "description": "Run an antivirus scan on a machine"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "machineAction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllVulnerabilities",
      "options": [
        {
          "name": "Get By CVE",
          "value": "getByCve",
          "action": "Get vulnerability by CVE ID",
          "description": "Retrieve vulnerability details by CVE ID"
        },
        {
          "name": "Get By Machine And Software",
          "value": "getByMachineAndSoftware",
          "action": "Get vulnerabilities by machine and software",
          "routing": {
            "request": {
              "url": "/api/vulnerabilities/machinesVulnerabilities",
              "method": "GET"
            }
          },
          "description": "Retrieve vulnerabilities affecting a specific software on a specific machine"
        },
        {
          "name": "Get Many",
          "value": "getAllVulnerabilities",
          "action": "Get many vulnerabilities",
          "routing": {
            "request": {
              "url": "/api/vulnerabilities",
              "method": "GET"
            }
          },
          "description": "Retrieve many vulnerabilities"
        },
        {
          "name": "Get Machines By CVE",
          "value": "getMachinesByCve",
          "action": "Get machines affected by CVE ID",
          "description": "Retrieves a list of devices affected by a vulnerability"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vulnerability"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllRecommendations",
      "options": [
        {
          "name": "Get All Recommendations",
          "value": "getAllRecommendations",
          "action": "Get all recommendations",
          "routing": {
            "request": {
              "url": "/api/recommendations/",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Machines By Recommendation",
          "value": "getMachinesByRecommendation",
          "action": "Get machines by recommendation",
          "description": "Get machines linked to a specific recommendation by ID"
        },
        {
          "name": "Get Recommendation by ID",
          "value": "getRecommendationById",
          "action": "Get a recommendation by ID",
          "description": "Get a specific recommendation by ID"
        },
        {
          "name": "Get Recommendation By Software",
          "value": "getRecommendationBySoftware",
          "action": "Get recommendation by software",
          "description": "Retrieves a security recommendation related to a specific software"
        },
        {
          "name": "Get Vulnerabilities by Recommendation",
          "value": "getVulnerabilitiesByRecommendation",
          "action": "Get vulnerabilities by recommendation",
          "description": "Get vulnerabilities linked to a specific recommendation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recommendation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "remediationActivities",
      "options": [
        {
          "name": "Get Remediation Activities",
          "value": "remediationActivities",
          "action": "Get remediation activities",
          "routing": {
            "request": {
              "url": "/api/remediationtasks/",
              "method": "GET"
            }
          },
          "description": "Get all remediation activities"
        },
        {
          "name": "Get Remediation Activity",
          "value": "remediationActivityId",
          "action": "Get a remediation activity",
          "description": "Get a specific remediation activity by ID"
        },
        {
          "name": "Get Exposed Devices by Remediation",
          "value": "getExposedDevicesByRemediation",
          "action": "Get exposed devices by remediation activity",
          "description": "Get devices exposed in a specific remediation activity by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "remediation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllSoftware",
      "options": [
        {
          "name": "Get All Software",
          "value": "getAllSoftware",
          "action": "Get all software",
          "routing": {
            "request": {
              "url": "/api/software",
              "method": "GET"
            }
          },
          "description": "Retrieves the organization software inventory"
        },
        {
          "name": "Get Machines By Software",
          "value": "getMachinesBySoftware",
          "action": "Get machines by software",
          "description": "Retrieves machines that have a specific software installed"
        },
        {
          "name": "Get Missing KBs By Software",
          "value": "getMissingKBsBySoftware",
          "action": "Get missing kbs by software",
          "description": "Retrieves missing KBs (security updates) for a specific software item"
        },
        {
          "name": "Get Software By ID",
          "value": "getSoftwareById",
          "action": "Get software by ID",
          "description": "Retrieves a specific software item by ID"
        },
        {
          "name": "Get Software Version Distribution",
          "value": "getSoftwareVersionDistribution",
          "action": "Get software version distribution",
          "description": "Retrieves the version distribution for a specific software item"
        },
        {
          "name": "Get Vulnerabilities By Software",
          "value": "getVulnerabilitiesBySoftware",
          "action": "Get vulnerabilities by software",
          "description": "Retrieves vulnerabilities associated with a specific software item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "software"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllIndicators",
      "options": [
        {
          "name": "Get All",
          "value": "getAllIndicators",
          "action": "Get all indicators",
          "routing": {
            "request": {
              "url": "/api/indicators",
              "method": "GET"
            }
          },
          "description": "Retrieve all indicators"
        },
        {
          "name": "Submit Indicator",
          "value": "submitIndicator",
          "action": "Submit a new indicator",
          "routing": {
            "request": {
              "url": "/api/indicators",
              "method": "POST"
            }
          },
          "description": "Create a new indicator in Microsoft Defender"
        },
        {
          "name": "Delete Indicator",
          "value": "deleteIndicator",
          "action": "Delete an indicator",
          "description": "Remove an existing indicator from Microsoft Defender"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "indicator"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Alert",
      "value": "getAlertById",
      "action": "Get a security alert",
      "description": "Get a security alert by ID",
      "resource": "defenderAlert"
    },
    {
      "name": "List Alerts",
      "value": "listAlerts",
      "action": "List security alerts",
      "routing": {
        "request": {
          "url": "/api/alerts",
          "method": "GET"
        }
      },
      "description": "List security alerts",
      "resource": "defenderAlert"
    },
    {
      "name": "Update Alert",
      "value": "updateAlert",
      "action": "Update a security alert",
      "description": "Update the status or classification of a security alert",
      "resource": "defenderAlert"
    },
    {
      "name": "Add Or Remove Tag",
      "value": "addOrRemoveTag",
      "action": "Add or remove tag on a machine",
      "description": "Adds or removes a tag from a specified machine ID",
      "resource": "machine"
    },
    {
      "name": "Find By Tag",
      "value": "findByTag",
      "action": "Find machines by tag",
      "description": "Retrieves a list of machines associated with a specific tag",
      "resource": "machine"
    },
    {
      "name": "Get Many",
      "value": "getAllMachines",
      "action": "Get many machines",
      "routing": {
        "request": {
          "url": "/api/machines",
          "method": "GET"
        }
      },
      "description": "Retrieve many machines",
      "resource": "machine"
    },
    {
      "name": "Get Security Recommendations",
      "value": "getSecurityRecommendations",
      "action": "Get security recommendations for a machine",
      "description": "Retrieves security recommendations for a specified machine ID",
      "resource": "machine"
    },
    {
      "name": "List Software",
      "value": "listSoftware",
      "action": "List software on a machine",
      "description": "Retrieves a collection of installed software related to a given machine ID",
      "resource": "machine"
    },
    {
      "name": "Run",
      "value": "run",
      "action": "Run advanced query",
      "routing": {
        "request": {
          "url": "/api/advancedqueries/run",
          "method": "POST"
        }
      },
      "description": "Run advanced query using KQL",
      "resource": "advancedQuery"
    },
    {
      "name": "Current Exposure Score",
      "value": "currentExposureScore",
      "action": "Get current exposure score",
      "routing": {
        "request": {
          "url": "/api/exposureScore",
          "method": "GET"
        }
      },
      "description": "Get the exposure score",
      "resource": "exposure"
    },
    {
      "name": "Get By Machine Groups",
      "value": "getByMachineGroups",
      "action": "Get many exposure scores",
      "routing": {
        "request": {
          "url": "/api/exposureScore/ByMachineGroups",
          "method": "GET"
        }
      },
      "description": "Retrieve exposure scores by machine groups",
      "resource": "exposure"
    },
    {
      "name": "Get All Investigations",
      "value": "getAllInvestigations",
      "action": "Get all investigations",
      "routing": {
        "request": {
          "url": "/api/investigations",
          "method": "GET"
        }
      },
      "description": "Retrieve all investigations",
      "resource": "investigation"
    },
    {
      "name": "Get Investigation By ID",
      "value": "getInvestigationById",
      "action": "Get an investigation by ID",
      "routing": {
        "request": {
          "url": "=/api/investigations/{{ $parameter.investigationId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a specific investigation by its ID",
      "resource": "investigation"
    },
    {
      "name": "Start Investigation",
      "value": "startInvestigation",
      "action": "Start an investigation on a machine",
      "description": "Initiate an investigation on a specified machine",
      "resource": "investigation"
    },
    {
      "name": "Cancel Machine Action",
      "value": "cancelMachineAction",
      "action": "Cancel machine action",
      "description": "Cancel an already launched machine action that isn't yet in final state",
      "resource": "machineAction"
    },
    {
      "name": "Isolate Machine",
      "value": "isolate",
      "action": "Isolate a machine",
      "description": "Isolate a machine from the network",
      "resource": "machineAction"
    },
    {
      "name": "List Machine Actions",
      "value": "listMachineActions",
      "action": "List actions for a machine",
      "routing": {
        "request": {
          "url": "/api/machineactions",
          "method": "GET"
        }
      },
      "description": "List actions for a machine",
      "resource": "machineAction"
    },
    {
      "name": "Offboard Machine",
      "value": "offboardMachine",
      "action": "Offboard a machine",
      "description": "Offboard a machine from Microsoft Defender for Endpoint",
      "resource": "machineAction"
    },
    {
      "name": "Remove From Isolation",
      "value": "removeFromIsolation",
      "action": "Remove a machine from isolation",
      "description": "Remove a machine from isolation",
      "resource": "machineAction"
    },
    {
      "name": "Run Antivirus Scan",
      "value": "runAntivirusScan",
      "action": "Run an antivirus scan on a machine",
      "description": "Run an antivirus scan on a machine",
      "resource": "machineAction"
    },
    {
      "name": "Get By CVE",
      "value": "getByCve",
      "action": "Get vulnerability by CVE ID",
      "description": "Retrieve vulnerability details by CVE ID",
      "resource": "vulnerability"
    },
    {
      "name": "Get By Machine And Software",
      "value": "getByMachineAndSoftware",
      "action": "Get vulnerabilities by machine and software",
      "routing": {
        "request": {
          "url": "/api/vulnerabilities/machinesVulnerabilities",
          "method": "GET"
        }
      },
      "description": "Retrieve vulnerabilities affecting a specific software on a specific machine",
      "resource": "vulnerability"
    },
    {
      "name": "Get Many",
      "value": "getAllVulnerabilities",
      "action": "Get many vulnerabilities",
      "routing": {
        "request": {
          "url": "/api/vulnerabilities",
          "method": "GET"
        }
      },
      "description": "Retrieve many vulnerabilities",
      "resource": "vulnerability"
    },
    {
      "name": "Get Machines By CVE",
      "value": "getMachinesByCve",
      "action": "Get machines affected by CVE ID",
      "description": "Retrieves a list of devices affected by a vulnerability",
      "resource": "vulnerability"
    },
    {
      "name": "Get All Recommendations",
      "value": "getAllRecommendations",
      "action": "Get all recommendations",
      "routing": {
        "request": {
          "url": "/api/recommendations/",
          "method": "GET"
        }
      },
      "resource": "recommendation"
    },
    {
      "name": "Get Machines By Recommendation",
      "value": "getMachinesByRecommendation",
      "action": "Get machines by recommendation",
      "description": "Get machines linked to a specific recommendation by ID",
      "resource": "recommendation"
    },
    {
      "name": "Get Recommendation by ID",
      "value": "getRecommendationById",
      "action": "Get a recommendation by ID",
      "description": "Get a specific recommendation by ID",
      "resource": "recommendation"
    },
    {
      "name": "Get Recommendation By Software",
      "value": "getRecommendationBySoftware",
      "action": "Get recommendation by software",
      "description": "Retrieves a security recommendation related to a specific software",
      "resource": "recommendation"
    },
    {
      "name": "Get Vulnerabilities by Recommendation",
      "value": "getVulnerabilitiesByRecommendation",
      "action": "Get vulnerabilities by recommendation",
      "description": "Get vulnerabilities linked to a specific recommendation by ID",
      "resource": "recommendation"
    },
    {
      "name": "Get Remediation Activities",
      "value": "remediationActivities",
      "action": "Get remediation activities",
      "routing": {
        "request": {
          "url": "/api/remediationtasks/",
          "method": "GET"
        }
      },
      "description": "Get all remediation activities",
      "resource": "remediation"
    },
    {
      "name": "Get Remediation Activity",
      "value": "remediationActivityId",
      "action": "Get a remediation activity",
      "description": "Get a specific remediation activity by ID",
      "resource": "remediation"
    },
    {
      "name": "Get Exposed Devices by Remediation",
      "value": "getExposedDevicesByRemediation",
      "action": "Get exposed devices by remediation activity",
      "description": "Get devices exposed in a specific remediation activity by ID",
      "resource": "remediation"
    },
    {
      "name": "Get All Software",
      "value": "getAllSoftware",
      "action": "Get all software",
      "routing": {
        "request": {
          "url": "/api/software",
          "method": "GET"
        }
      },
      "description": "Retrieves the organization software inventory",
      "resource": "software"
    },
    {
      "name": "Get Machines By Software",
      "value": "getMachinesBySoftware",
      "action": "Get machines by software",
      "description": "Retrieves machines that have a specific software installed",
      "resource": "software"
    },
    {
      "name": "Get Missing KBs By Software",
      "value": "getMissingKBsBySoftware",
      "action": "Get missing kbs by software",
      "description": "Retrieves missing KBs (security updates) for a specific software item",
      "resource": "software"
    },
    {
      "name": "Get Software By ID",
      "value": "getSoftwareById",
      "action": "Get software by ID",
      "description": "Retrieves a specific software item by ID",
      "resource": "software"
    },
    {
      "name": "Get Software Version Distribution",
      "value": "getSoftwareVersionDistribution",
      "action": "Get software version distribution",
      "description": "Retrieves the version distribution for a specific software item",
      "resource": "software"
    },
    {
      "name": "Get Vulnerabilities By Software",
      "value": "getVulnerabilitiesBySoftware",
      "action": "Get vulnerabilities by software",
      "description": "Retrieves vulnerabilities associated with a specific software item",
      "resource": "software"
    },
    {
      "name": "Get All",
      "value": "getAllIndicators",
      "action": "Get all indicators",
      "routing": {
        "request": {
          "url": "/api/indicators",
          "method": "GET"
        }
      },
      "description": "Retrieve all indicators",
      "resource": "indicator"
    },
    {
      "name": "Submit Indicator",
      "value": "submitIndicator",
      "action": "Submit a new indicator",
      "routing": {
        "request": {
          "url": "/api/indicators",
          "method": "POST"
        }
      },
      "description": "Create a new indicator in Microsoft Defender",
      "resource": "indicator"
    },
    {
      "name": "Delete Indicator",
      "value": "deleteIndicator",
      "action": "Delete an indicator",
      "description": "Remove an existing indicator from Microsoft Defender",
      "resource": "indicator"
    }
  ]

npm_readme:
  # n8n-nodes-msdefender

  [![CI](https://github.com/FrodeHus/n8n-nodes-msdefender/actions/workflows/ci.yml/badge.svg)](https://github.com/FrodeHus/n8n-nodes-msdefender/actions/workflows/ci.yml)

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

  Microsoft Defender is a comprehensive security solution that helps protect your devices and data from threats.
  This node allows you to interact with the Microsoft Defender API to perform various security operations, such as managing devices, retrieving threat intelligence, and more.

  For a some background, visit [I made a n8n node for Microsoft Defender](https://www.frodehus.dev/i-made-a-n8n-node-for-microsoft-defender/).

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

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

  ## Installation

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

  ## Operations

  ### Defender for Endpoint

  - Advanced Query: Run advanced queries against Microsoft Defender.
  - Alert: Manage and retrieve information about security alerts.
    - Get Many: Retrieve many alerts.
    - Get By ID: Retrieve a specific alert by its ID.
    - Update Alert: Update the properties of a specific alert.
  - Remediation: Manage and retrieve information about remediation activities.
    - Get Remediation Activities: Retrieve all remediation activities.
    - Get Remediation Activity: Retrieve a specific remediation activity by ID.
    - Get Devices By Remediation Activity: Retrieve devices exposed in a specific remediation activity by ID
  - Machine: Manage and retrieve information about devices.
    - Add Or Remove Tag For Machine
    - Find By Tag
    - Get Many: Retrieve many machines.
    - Get Security Recommendations For Machine
    - List Installed Software For Machine
  - Exposure
    - Get Current Exposure Score
    - Get Exposure Score By Machine Groups.
  - Machine Actions
    - Isolate Machine
    - Release Machine from Isolation
    - List Machine Actions
    - Offboard Machine
    - Cancel Machine Action
    - Run Antivirus Scan
  - Vulnerability
    - Get All Vulnerabilities
    - Get Machines By CVE
    - Get By Machine And Software
  - Investigation
    - Get All Investigations
    - Get Investigation By ID
    - Start Investigation on Machine
  - Indicator
    - Get All Indicators
    - Submit Indicator
    - Delete Indicator
  - Recommendation
    - Get Security Recommendations
    - Get Security Recommendation By ID
    - Get Machines By Security Recommendation
    - Get Vulnerabilities By Security Recommendation
    - Get Recommendations By Software
  - Software
    - Get All Software
    - Get Software By ID
    - Get Software Version Distribution
    - Get Machines By Software
    - Get Vulnerabilities By Software
    - Get Missing KBs By Software

  ### Defender XDR

  - Incident: Manage and retrieve information about security incidents.
    - Get Many: Retrieve many incidents.
    - Get By ID: Retrieve a specific incident by its ID.
    - Update Incident: Update the properties of a specific incident.

  ## Triggers

  - Microsoft Defender for Endpoint Trigger
    - Polling trigger for alerts created or updated
  - Microsoft Defender XDR Trigger
    - Polling trigger for incidents created or updated

  ## Credentials

  To use this node, you need to set up an Entra ID (Azure AD) application and obtain the necessary credentials to access the Microsoft Defender API.

  1. Register an application in the [Azure Portal](https://portal.azure.com/).
  2. Assign the required API application permissions to the application for Microsoft Defender (WindowsDefenderATP).
      - `AdvancedQuery.Read.All`
      - `Machine.ReadWrite.All`
      - `Score.Read.All`
      - `Machine.Isolate`
      - `Vulnerability.Read.All`
      - `SecurityRecommendation.Read.All`
      - `Machine.Scan`
      - `Machine.Offboard`
  3. Assign the required API application permissions to the application for Microsoft Defender XDR (Microsoft Threat Protection).
      - `Incidents.ReadWrite.All`
  4. Grant admin consent for the permissions.
  5. Generate a client secret for the application.
  6. Note down the Application (client) ID, Directory (tenant) ID, and client secret.


  When configuring the Microsoft Defender node in n8n, use the following credentials:

  - **Client ID**: The Application (client) ID from your Azure AD application.
  - **Client Secret**: The client secret generated for your Azure AD application.
  - **Access Token URL**: `https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token`

  There are two separate credentials for Microsoft Defender and Microsoft Defender XDR, so be sure to set up both if you plan to use both nodes.

  You can re-use the same Azure AD application for both credentials, just ensure it has the necessary permissions assigned for each API.

  If you added permissions to your Azure AD application, remember to re-grant admin consent and update the credentials in n8n.

  ## Compatibility

  Tested with recent n8n 2.x releases. Older versions may work, but are not guaranteed.

  ## Usage

  [Try it out](https://docs.n8n.io/try-it-out/)

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Microsoft Defender for Endpoint API documentation](https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/apis-intro?view=o365-worldwide)
  - [Microsoft Defender XDR API documentation](https://learn.microsoft.com/en-us/microsoft-365/security/defender/api-overview?view=o365-worldwide)

  ## Version history

  [Changelog](./CHANGELOG.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Microsoft Defender API to perform security operations such as managing devices, retrieving threat intelligence, and handling incidents.","capabilities":["Advanced Query execution","Security alert management (retrieve, update)","Remediation activity management","Device management (tags, isolation, offboarding, scanning)","Vulnerability management (CVE-based, software-based)","Investigation initiation and retrieval","Threat indicator submission and deletion","Security recommendation retrieval","Software inventory and version distribution","Incident management (Defender XDR)"],"authentication":"OAuth2 via Entra ID (Azure AD) application with Client ID, Client Secret, and Access Token URL","commonUseCases":["Automated security alert monitoring and response","Device isolation and remediation workflows","Vulnerability scanning and patch tracking","Threat intelligence collection and indicator submission","Security incident management and investigation"],"limitations":["Requires separate credential setups for Defender for Endpoint and Defender XDR","Admin consent must be granted in Azure AD for all permissions","Permissions must be explicitly assigned for both WindowsDefenderATP and Microsoft Threat Protection APIs","Older n8n versions may not be fully compatible"],"relatedNodes":["Microsoft Entra ID OAuth2 node","HTTP Request node","Wait node (for polling triggers)"]}


node_type: @ainoflow/n8n-nodes-ainoflow.ainoflowConvert
package_name: @ainoflow/n8n-nodes-ainoflow
display_name: Ainoflow Convert
description: Extract text or convert to PDF from documents, images, and audio (OCR & transcription)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: dmitrijz
author_github_url: https://github.com/ainova-systems/n8n-nodes-ainoflow.git
npm_package_name: @ainoflow/n8n-nodes-ainoflow
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:33.546Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert File",
          "value": "convert",
          "action": "Convert file to text or PDF",
          "description": "Extract text or convert to PDF from document, image, or audio"
        },
        {
          "name": "Get Result",
          "value": "getResult",
          "action": "Get result",
          "description": "Get result of conversion job"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Convert File",
      "value": "convert",
      "action": "Convert file to text or PDF",
      "description": "Extract text or convert to PDF from document, image, or audio"
    },
    {
      "name": "Get Result",
      "value": "getResult",
      "action": "Get result",
      "description": "Get result of conversion job"
    }
  ]

npm_readme:
  # n8n-nodes-ainoflow

  n8n community nodes for [Ainoflow](https://ainoflow.io) API services.

  ## Nodes

  | Node | Description |
  |------|-------------|
  | **Ainoflow Convert** | Extract text or convert to PDF from documents, images, and audio (OCR & transcription) |
  | **Ainoflow Files** | Store and manage binary files in object storage |
  | **Ainoflow Storage** | Store and retrieve JSON documents in key-value storage |

  ## Installation

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

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

  ## Credentials

  All nodes use the shared **Ainoflow API** credential:

  | Field | Description |
  |-------|-------------|
  | API Key | Your Ainoflow API key |
  | Base URL | API endpoint (default: `https://api.ainoflow.io`) |

  ## Ainoflow Convert

  Extract text or convert to PDF from documents, images, and audio files.

  ### Operations

  | Operation | Description |
  |-----------|-------------|
  | **Convert File** | Extract text or convert to PDF from document, image, or audio |
  | **Get Result** | Get result of conversion job |

  ### Input Sources

  - **Binary Data** - File from previous node
  - **URL** - Download from URL

  ### Response Modes

  | Mode | Behavior |
  |------|----------|
  | Direct | Wait and return content inline |
  | Persisted | Wait and return download URLs |
  | Polling | Return job ID immediately |
  | Webhook | Notify webhook URL when complete |

  ### Models

  | Model | Use Case |
  |-------|----------|
  | Auto | Auto-select based on file type (recommended) |
  | PaddleOCR | OCR for images |
  | Tesseract | OCR for PDFs |
  | Whisper (tiny/small/base) | Audio transcription |

  ### Supported Formats

  - **Documents:** PDF, JPEG, PNG, TIFF, BMP, WebP, GIF, DOC(X), XLS(X), PPT(X), ODT, TXT, RTF
  - **Audio:** WAV, MP3, M4A, MP4, WebM, OGG, FLAC, AAC, Opus

  ### Languages

  60 languages supported including: English, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Russian, Ukrainian, Chinese (Simplified/Traditional), Japanese, Korean, Arabic, and more.

  ## Ainoflow Files

  Manage binary files in object storage.

  ### Resources & Operations

  **File:**
  | Operation | Description |
  |-----------|-------------|
  | Create | Upload new file (auto-generated key) |
  | Create or Replace | Upload file with explicit key (upsert) |
  | Download | Download file content |
  | Delete | Delete file |
  | Get URL | Get pre-signed download URL |
  | Get Metadata | Get file metadata |
  | Get Many | List files in category |

  **Category:**
  | Operation | Description |
  |-----------|-------------|
  | Get Many | List categories with file counts |

  ### Input Sources (Create/Replace)

  - **Binary Data** - File from previous node
  - **URL** - Server downloads from URL

  ### Features

  - Categories for organizing files
  - Pre-signed URLs with configurable expiry
  - TTL support via `expiresAt`
  - Max file size: 100MB

  ## Ainoflow Storage

  Store and retrieve JSON documents.

  ### Resources & Operations

  **Record:**
  | Operation | Description |
  |-----------|-------------|
  | Create | Create new record (fails if exists) |
  | Create or Replace | Create or replace record (upsert) |
  | Update | Partial update via JSON Merge Patch (RFC 7386) |
  | Get | Retrieve record by key |
  | Delete | Delete record |
  | Get Metadata | Get record metadata without content |
  | Get Many | List records in category |

  **Category:**
  | Operation | Description |
  |-----------|-------------|
  | Get Many | List categories with record counts |

  ### Data Input

  - **Using Fields Below** - Key/value pairs with expression support
  - **Using JSON** - Direct JSON object or array

  ### Features

  - Categories for organizing records
  - TTL support via `expiresAt` or `expiresMs`
  - JSON Merge Patch for partial updates
  - Max record size: 10MB

  ## Development

  ### Prerequisites

  - Node.js v20.19+ to v24 (v22 LTS recommended)
  - npm

  ### Commands

  ```bash
  npm install        # Install dependencies
  npm run dev        # Run n8n with hot reload
  npm run build      # Production build
  npm run lint       # Check for issues
  npm run lint:fix   # Auto-fix issues
  ```

  ## Resources

  - [Ainoflow Platform](https://ainoflow.io) - Document conversion, file storage, and JSON storage APIs
  - [Ainova Systems](https://www.ainovasystems.com/) - Custom n8n nodes, workflow development, and AI automation solutions
  - [GitHub Repository](https://github.com/ainova-systems/n8n-nodes-ainoflow)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md) - Copyright 2026 Ainova Systems

ai_documentation_summary:
  {"purpose":"The Ainoflow Convert node extracts text from documents, images, and audio files using OCR and transcription, or converts files to PDF format.","capabilities":["Extract text from PDFs, images (JPEG, PNG, TIFF, BMP, WebP, GIF), and documents (DOCX, XLSX, PPTX, ODT, TXT, RTF)","Transcribe audio files (WAV, MP3, M4A, MP4, WebM, OGG, FLAC, AAC, Opus)","Convert files to PDF format","Support for 60+ languages","Multiple response modes: Direct, Persisted, Polling, Webhook","Model selection: Auto, PaddleOCR, Tesseract, Whisper (tiny/small/base)","Input from binary data or URL sources"],"authentication":"API Key required (shared credential with Base URL)","commonUseCases":["Extracting text from scanned documents or images","Transcribing audio recordings to text","Converting various file formats to PDF","Processing multilingual documents and audio"],"limitations":["Requires Ainoflow API key and subscription for usage","No specific limitations mentioned in README for the Convert node itself"],"relatedNodes":["Ainoflow Files","Ainoflow Storage"]}


node_type: @soniox/n8n-nodes-soniox.soniox
package_name: @soniox/n8n-nodes-soniox
display_name: Soniox
description: Create Soniox transcriptions and fetch results
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ambroz-soniox
author_github_url: https://github.com/soniox/n8n-nodes-soniox.git
npm_package_name: @soniox/n8n-nodes-soniox
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.547Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcription",
      "options": [
        {
          "name": "Transcription",
          "value": "transcription"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a transcription"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete transcription and or file"
        },
        {
          "name": "Get Results",
          "value": "getResults",
          "action": "Get transcription results"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcription"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a transcription",
      "resource": "transcription"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete transcription and or file",
      "resource": "transcription"
    },
    {
      "name": "Get Results",
      "value": "getResults",
      "action": "Get transcription results",
      "resource": "transcription"
    }
  ]

npm_readme:
  # @soniox/n8n-nodes-soniox

  This is an n8n community node for [Soniox](https://soniox.com), providing speech-to-text transcription capabilities in your n8n workflows.

  Soniox offers state-of-the-art speech recognition with support for multiple languages, speaker diarization, and real-time transcription.

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

  ## Installation

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

  **Quick install:**

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

  ## Operations

  ### Transcription

  - **Create** - Create a new transcription job from an audio file
    - Supports binary file upload, audio URL, or previously uploaded file ID
    - Optional: Wait for completion and return results
    - Optional: Configure webhook for async notifications

  - **Get Results** - Retrieve transcription results
    - Fetch status and transcript for a given transcription ID
    - Optional: Wait for completion if still processing

  ## Credentials

  To use this node, you need a Soniox API key:

  1. Go to [Soniox Console](https://console.soniox.com/)
  2. Navigate to API Keys and create a new key
  3. In n8n, create new credentials of type **Soniox API**
  4. Enter your API key

  ## Features

  - **Multiple audio sources**: Upload binary files, provide URLs, or use pre-uploaded file IDs
  - **Language detection**: Automatic language identification or specify language hints
  - **Speaker diarization**: Identify and separate different speakers
  - **Translation**: One-way or two-way translation support
  - **Flexible output**: Get full transcript with metadata or text-only
  - **Async support**: Use webhooks for long-running transcriptions
  - **Custom context**: Improve accuracy with domain-specific vocabulary

  ## Usage Examples

  ### Basic Transcription

  1. Add a **Soniox** node to your workflow
  2. Select **Create** operation
  3. Choose your audio source (Binary File, URL, or File ID)
  4. Enable **Wait for Completion** to get results immediately
  5. Execute the workflow

  ### Webhook-Based Async Flow

  1. Create a transcription with **Wait for Completion** disabled
  2. Configure a **Webhook URL** pointing to an n8n Webhook trigger
  3. When transcription completes, Soniox calls your webhook
  4. Use a second **Soniox** node with **Get Results** to fetch the transcript

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested with n8n versions: 1.x, 2.x

  ## Resources

  - [Soniox n8n Integration Guide](https://soniox.com/docs/stt/integrations/n8n)
  - [Soniox Documentation](https://soniox.com/docs/)
  - [Soniox API Reference](https://soniox.com/docs/stt/api-reference)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## Support

  - For Soniox API issues: [support@soniox.com](mailto:support@soniox.com)
  - For node issues: [GitHub Issues](https://github.com/soniox/n8n-nodes-soniox/issues)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that creates speech-to-text transcriptions via Soniox and retrieves their results, supporting multiple languages, speaker diarization, and translation.","capabilities":["Create transcription jobs from binary files, audio URLs, or file IDs","Retrieve transcription status and results by ID","Automatic or manual language detection","Speaker diarization to identify different speakers","One-way and two-way translation","Async transcription via webhooks","Custom context for domain-specific vocabulary","Flexible output formats (full transcript with metadata or text-only)"],"authentication":"API key required (Soniox API key)","commonUseCases":["Automated meeting note generation","Voice-to-text content creation","Audio file processing pipelines","Real-time transcription workflows","Speaker identification in interviews"],"limitations":["Requires valid Soniox API key and account","Async transcription requires additional webhook configuration","Minimum n8n version 1.0.0 required"],"relatedNodes":["Webhook","Binary File","HTTP Request","Wait"]}


node_type: @voice-ai-labs/n8n-nodes-voice-ai.voiceAi
package_name: @voice-ai-labs/n8n-nodes-voice-ai
display_name: Voice AI
description: Interact with Voice.ai text-to-speech and voice management API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: klotayvai
author_github_url: https://github.com/voice-ai/n8n-nodes-voice-ai.git
npm_package_name: @voice-ai-labs/n8n-nodes-voice-ai
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:33.548Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "speech",
      "options": [
        {
          "name": "Speech",
          "value": "speech"
        },
        {
          "name": "Voice",
          "value": "voice"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "textToSpeech",
      "options": [
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "action": "Convert text to speech",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/speech",
              "method": "POST",
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Converts text into speech and returns audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "speech"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create (Clone)",
          "value": "create",
          "action": "Create a voice",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/clone-voice",
              "method": "POST",
              "headers": {
                "Content-Type": "multipart/form-data"
              }
            }
          },
          "description": "Create a new voice by cloning from an audio file"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a voice",
          "routing": {
            "request": {
              "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a voice"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a voice",
          "routing": {
            "request": {
              "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a voice by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many voices",
          "routing": {
            "request": {
              "url": "/voices",
              "method": "GET"
            }
          },
          "description": "Get many voices"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a voice",
          "routing": {
            "request": {
              "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a voice metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Text to Speech",
      "value": "textToSpeech",
      "action": "Convert text to speech",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/speech",
          "method": "POST",
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Converts text into speech and returns audio",
      "resource": "speech"
    },
    {
      "name": "Create (Clone)",
      "value": "create",
      "action": "Create a voice",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/clone-voice",
          "method": "POST",
          "headers": {
            "Content-Type": "multipart/form-data"
          }
        }
      },
      "description": "Create a new voice by cloning from an audio file",
      "resource": "voice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a voice",
      "routing": {
        "request": {
          "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a voice",
      "resource": "voice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a voice",
      "routing": {
        "request": {
          "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a voice by ID",
      "resource": "voice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many voices",
      "routing": {
        "request": {
          "url": "/voices",
          "method": "GET"
        }
      },
      "description": "Get many voices",
      "resource": "voice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a voice",
      "routing": {
        "request": {
          "url": "={{\"/voice/\" + $parameter[\"voiceId\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a voice metadata",
      "resource": "voice"
    }
  ]

npm_readme:
  # @voice-ai-labs/n8n-nodes-voice-ai

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

  Voice.ai is a text-to-speech and voice cloning API that enables you to generate realistic speech from text and create custom voice models.

  [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

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

  Alternatively, you can install it via the n8n Community Nodes interface or using npm:

  ```bash
  npm install @voice-ai-labs/n8n-nodes-voice-ai
  ```

  ## Operations

  ### Speech
  - **Text to Speech**: Convert text into realistic speech audio

  ### Voice
  - **Get Many**: Retrieve a list of available voices
  - **Get**: Get details of a specific voice by ID
  - **Create (Clone)**: Clone a voice from an audio file
  - **Update**: Update voice metadata
  - **Delete**: Delete a voice

  ## Credentials

  To use this node, you need a Voice.ai API key.

  ### How to get your API key:

  1. Sign up for a Voice.ai account at [https://voice.ai](https://voice.ai)
  2. Navigate to your developer dashboard
  3. Generate an API key
  4. Copy the API key

  ### Setting up credentials in n8n:

  1. In n8n, go to **Credentials** > **New**
  2. Search for "Voice AI API"
  3. Enter your API key in the "API Key" field
  4. Click **Save**

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with**: n8n 2.4.6

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Voice.ai API Documentation](https://voice.ai/docs/api-reference)
  * [Voice.ai Homepage](https://voice.ai)

  ## Version history

  ### 1.0.0
  - Initial release
  - Text-to-speech conversion with customizable parameters
  - Voice management operations (list, get, create, update, delete)
  - Voice cloning from audio files

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Voice.ai API to perform text-to-speech conversion and manage voice models, including cloning and updating.","capabilities":["Text to Speech conversion","Retrieve list of available voices","Get details of a specific voice by ID","Clone a voice from an audio file","Update voice metadata","Delete a voice"],"authentication":"API key required","commonUseCases":["Automated voiceovers for video content","Voice cloning for personalized audio responses","Text-to-speech automation in marketing workflows"],"limitations":["Requires a separate Voice.ai account and API key","Voice cloning requires an audio file input"],"relatedNodes":["n8n HTTP Request","n8n File"]}


node_type: @preyproject/n8n-nodes-prey.prey
package_name: @preyproject/n8n-nodes-prey
display_name: Prey
description: Manage devices and account data in Prey
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: luisra51
author_github_url: https://github.com/prey/n8n-nodes-prey.git
npm_package_name: @preyproject/n8n-nodes-prey
npm_version: 0.1.2
community_fetched_at: 2026-07-14T14:40:33.549Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "device",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Automation",
          "value": "automation"
        },
        {
          "name": "Device",
          "value": "device"
        },
        {
          "name": "Label",
          "value": "label"
        },
        {
          "name": "Mass Action",
          "value": "massAction"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Zone",
          "value": "zone"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccountSummary",
      "options": [
        {
          "name": "Get Account Summary",
          "value": "getAccountSummary",
          "action": "Get account summary",
          "routing": {
            "request": {
              "url": "/account",
              "method": "GET"
            }
          },
          "description": "Get account information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccountSummary",
      "options": [
        {
          "name": "Get Account Summary",
          "value": "getAccountSummary",
          "action": "Get account summary",
          "routing": {
            "request": {
              "url": "/account",
              "method": "GET"
            }
          },
          "description": "Get account information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "List Users",
          "value": "listUsers",
          "action": "List users",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "users"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "List users in the account"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get a user by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "List Users",
          "value": "listUsers",
          "action": "List users",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "users"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/users",
              "method": "GET"
            }
          },
          "description": "List users in the account"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get a user by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDevices",
      "options": [
        {
          "name": "Get Device",
          "value": "getDevice",
          "action": "Get a device",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}",
              "method": "GET"
            }
          },
          "description": "Get a device by ID"
        },
        {
          "name": "Get Device Location History",
          "value": "getDeviceLocationHistory",
          "action": "Get device location history",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "enabled": "={{$parameter.locationFormat === \"csv\"}}",
                  "properties": {
                    "destinationProperty": "data"
                  }
                },
                {
                  "type": "rootProperty",
                  "enabled": "={{$parameter.locationFormat !== \"csv\"}}",
                  "properties": {
                    "property": "latest_locations"
                  }
                }
              ]
            },
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/location_activity{{$parameter.locationFormat === \"csv\" ? \".csv\" : \"\"}}",
              "method": "GET"
            }
          },
          "description": "Get device location history (JSON or CSV)"
        },
        {
          "name": "Get Device Report",
          "value": "getDeviceReport",
          "action": "Get a device report",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/reports/{{$parameter.reportId}}",
              "method": "GET"
            }
          },
          "description": "Get a single report for a device"
        },
        {
          "name": "Get Device Reports",
          "value": "getDeviceReports",
          "action": "Get device reports",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "reports"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "=/devices/{{$parameter.deviceId}}/reports",
              "method": "GET"
            }
          },
          "description": "List reports for a device"
        },
        {
          "name": "List Devices",
          "value": "listDevices",
          "action": "List devices",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "devices"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/devices",
              "method": "GET"
            }
          },
          "description": "List devices in the account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDevices",
      "options": [
        {
          "name": "Get Device",
          "value": "getDevice",
          "action": "Get a device",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}",
              "method": "GET"
            }
          },
          "description": "Get a device by ID"
        },
        {
          "name": "Get Device Location History",
          "value": "getDeviceLocationHistory",
          "action": "Get device location history",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "enabled": "={{$parameter.locationFormat === \"csv\"}}",
                  "properties": {
                    "destinationProperty": "data"
                  }
                },
                {
                  "type": "rootProperty",
                  "enabled": "={{$parameter.locationFormat !== \"csv\"}}",
                  "properties": {
                    "property": "latest_locations"
                  }
                }
              ]
            },
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/location_activity{{$parameter.locationFormat === \"csv\" ? \".csv\" : \"\"}}",
              "method": "GET"
            }
          },
          "description": "Get device location history (JSON or CSV)"
        },
        {
          "name": "Get Device Report",
          "value": "getDeviceReport",
          "action": "Get a device report",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/reports/{{$parameter.reportId}}",
              "method": "GET"
            }
          },
          "description": "Get a single report for a device"
        },
        {
          "name": "Get Device Reports",
          "value": "getDeviceReports",
          "action": "Get device reports",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "reports"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "=/devices/{{$parameter.deviceId}}/reports",
              "method": "GET"
            }
          },
          "description": "List reports for a device"
        },
        {
          "name": "List Devices",
          "value": "listDevices",
          "action": "List devices",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "devices"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/devices",
              "method": "GET"
            }
          },
          "description": "List devices in the account"
        },
        {
          "name": "Trigger Device Action",
          "value": "triggerDeviceAction",
          "action": "Trigger a device action",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/action",
              "body": {
                "command": "={{$parameter.actionCommand}}",
                "options": "={{$parameter.actionOptions}}",
                "action_name": "={{$parameter.deviceAction}}"
              },
              "json": true,
              "method": "PUT"
            }
          },
          "description": "Trigger alarm, alert, or lock on a device"
        },
        {
          "name": "Set Device Status (Missing/Recovered)",
          "value": "setDeviceStatus",
          "action": "Set device status",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}/missing",
              "body": {
                "missing": "={{$parameter.missingStatus === \"missing\"}}"
              },
              "json": true,
              "method": "PUT"
            }
          },
          "description": "Mark a device as missing or recovered"
        },
        {
          "name": "Delete Device",
          "value": "deleteDevice",
          "action": "Delete a device",
          "routing": {
            "request": {
              "url": "=/devices/{{$parameter.deviceId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a device from the fleet"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listLabels",
      "options": [
        {
          "name": "List Labels",
          "value": "listLabels",
          "action": "List labels",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "labels"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/labels",
              "method": "GET"
            }
          },
          "description": "List labels in the account"
        },
        {
          "name": "Get Label",
          "value": "getLabel",
          "action": "Get a label",
          "routing": {
            "request": {
              "url": "=/labels/{{$parameter.labelId}}",
              "method": "GET"
            }
          },
          "description": "Get a label by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "label"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listLabels",
      "options": [
        {
          "name": "List Labels",
          "value": "listLabels",
          "action": "List labels",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "labels"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/labels",
              "method": "GET"
            }
          },
          "description": "List labels in the account"
        },
        {
          "name": "Get Label",
          "value": "getLabel",
          "action": "Get a label",
          "routing": {
            "request": {
              "url": "=/labels/{{$parameter.labelId}}",
              "method": "GET"
            }
          },
          "description": "Get a label by ID"
        },
        {
          "name": "Create Label",
          "value": "createLabel",
          "action": "Create a label",
          "routing": {
            "request": {
              "url": "/labels",
              "body": {
                "name": "={{$parameter.labelName}}",
                "devices": "={{$parameter.labelDevices}}"
              },
              "json": true,
              "method": "POST"
            }
          },
          "description": "Create a new label"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "label"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listZones",
      "options": [
        {
          "name": "List Zones",
          "value": "listZones",
          "action": "List zones",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "zones"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/zones",
              "method": "GET"
            }
          },
          "description": "List zones in the account"
        },
        {
          "name": "Get Zone",
          "value": "getZone",
          "action": "Get a zone",
          "routing": {
            "request": {
              "url": "=/zones/{{$parameter.zoneId}}",
              "method": "GET"
            }
          },
          "description": "Get a zone by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zone"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listZones",
      "options": [
        {
          "name": "List Zones",
          "value": "listZones",
          "action": "List zones",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "zones"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/zones",
              "method": "GET"
            }
          },
          "description": "List zones in the account"
        },
        {
          "name": "Get Zone",
          "value": "getZone",
          "action": "Get a zone",
          "routing": {
            "request": {
              "url": "=/zones/{{$parameter.zoneId}}",
              "method": "GET"
            }
          },
          "description": "Get a zone by ID"
        },
        {
          "name": "Create Zone",
          "value": "createZone",
          "action": "Create a zone",
          "routing": {
            "request": {
              "url": "/zones",
              "body": {
                "name": "={{$parameter.zoneName}}",
                "color": "={{$parameter.zoneColor}}",
                "radius": "={{$parameter.zoneRadius}}",
                "devices": "={{$parameter.zoneDevices}}",
                "latitude": "={{$parameter.zoneLatitude}}",
                "longitude": "={{$parameter.zoneLongitude}}"
              },
              "json": true,
              "method": "POST"
            }
          },
          "description": "Create a control zone"
        },
        {
          "name": "Update Zone",
          "value": "updateZone",
          "action": "Update a zone",
          "routing": {
            "request": {
              "url": "=/zones/{{$parameter.zoneId}}",
              "body": {
                "name": "={{$parameter.zoneName}}",
                "color": "={{$parameter.zoneColor}}",
                "radius": "={{$parameter.zoneRadius}}",
                "latitude": "={{$parameter.zoneLatitude}}",
                "longitude": "={{$parameter.zoneLongitude}}",
                "add_devices": "={{$parameter.zoneAddDevices}}",
                "remove_devices": "={{$parameter.zoneRemoveDevices}}",
                "removed_actions": "={{$parameter.zoneRemovedActions}}"
              },
              "json": true,
              "method": "PUT"
            }
          },
          "description": "Update a control zone"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zone"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAutomations",
      "options": [
        {
          "name": "List Automations",
          "value": "listAutomations",
          "action": "List automations",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "automations"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/automations",
              "method": "GET"
            }
          },
          "description": "List automations in the account"
        },
        {
          "name": "Get Automation",
          "value": "getAutomation",
          "action": "Get an automation",
          "routing": {
            "request": {
              "url": "=/automations/{{$parameter.automationId}}",
              "method": "GET"
            }
          },
          "description": "Get an automation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listAutomations",
      "options": [
        {
          "name": "List Automations",
          "value": "listAutomations",
          "action": "List automations",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "automations"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/automations",
              "method": "GET"
            }
          },
          "description": "List automations in the account"
        },
        {
          "name": "Get Automation",
          "value": "getAutomation",
          "action": "Get an automation",
          "routing": {
            "request": {
              "url": "=/automations/{{$parameter.automationId}}",
              "method": "GET"
            }
          },
          "description": "Get an automation by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "automation"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listMassActions",
      "options": [
        {
          "name": "List Mass Actions",
          "value": "listMassActions",
          "action": "List mass actions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "mass_actions"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/mass_actions",
              "method": "GET"
            }
          },
          "description": "List mass actions in the account"
        },
        {
          "name": "Get Mass Action",
          "value": "getMassAction",
          "action": "Get a mass action",
          "routing": {
            "request": {
              "url": "=/mass_actions/{{$parameter.massActionId}}",
              "method": "GET"
            }
          },
          "description": "Get a mass action by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "massAction"
          ],
          "permissionLevel": [
            "read"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listMassActions",
      "options": [
        {
          "name": "List Mass Actions",
          "value": "listMassActions",
          "action": "List mass actions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "mass_actions"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "page": 1
              },
              "url": "/mass_actions",
              "method": "GET"
            }
          },
          "description": "List mass actions in the account"
        },
        {
          "name": "Get Mass Action",
          "value": "getMassAction",
          "action": "Get a mass action",
          "routing": {
            "request": {
              "url": "=/mass_actions/{{$parameter.massActionId}}",
              "method": "GET"
            }
          },
          "description": "Get a mass action by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "massAction"
          ],
          "permissionLevel": [
            "write"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Account Summary",
      "value": "getAccountSummary",
      "action": "Get account summary",
      "routing": {
        "request": {
          "url": "/account",
          "method": "GET"
        }
      },
      "description": "Get account information",
      "resource": "account"
    },
    {
      "name": "Get Account Summary",
      "value": "getAccountSummary",
      "action": "Get account summary",
      "routing": {
        "request": {
          "url": "/account",
          "method": "GET"
        }
      },
      "description": "Get account information",
      "resource": "account"
    },
    {
      "name": "List Users",
      "value": "listUsers",
      "action": "List users",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "users"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "List users in the account",
      "resource": "user"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get a user by ID",
      "resource": "user"
    },
    {
      "name": "List Users",
      "value": "listUsers",
      "action": "List users",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "users"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/users",
          "method": "GET"
        }
      },
      "description": "List users in the account",
      "resource": "user"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get a user by ID",
      "resource": "user"
    },
    {
      "name": "Get Device",
      "value": "getDevice",
      "action": "Get a device",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}",
          "method": "GET"
        }
      },
      "description": "Get a device by ID",
      "resource": "device"
    },
    {
      "name": "Get Device Location History",
      "value": "getDeviceLocationHistory",
      "action": "Get device location history",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "enabled": "={{$parameter.locationFormat === \"csv\"}}",
              "properties": {
                "destinationProperty": "data"
              }
            },
            {
              "type": "rootProperty",
              "enabled": "={{$parameter.locationFormat !== \"csv\"}}",
              "properties": {
                "property": "latest_locations"
              }
            }
          ]
        },
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/location_activity{{$parameter.locationFormat === \"csv\" ? \".csv\" : \"\"}}",
          "method": "GET"
        }
      },
      "description": "Get device location history (JSON or CSV)",
      "resource": "device"
    },
    {
      "name": "Get Device Report",
      "value": "getDeviceReport",
      "action": "Get a device report",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/reports/{{$parameter.reportId}}",
          "method": "GET"
        }
      },
      "description": "Get a single report for a device",
      "resource": "device"
    },
    {
      "name": "Get Device Reports",
      "value": "getDeviceReports",
      "action": "Get device reports",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "reports"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "=/devices/{{$parameter.deviceId}}/reports",
          "method": "GET"
        }
      },
      "description": "List reports for a device",
      "resource": "device"
    },
    {
      "name": "List Devices",
      "value": "listDevices",
      "action": "List devices",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "devices"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/devices",
          "method": "GET"
        }
      },
      "description": "List devices in the account",
      "resource": "device"
    },
    {
      "name": "Get Device",
      "value": "getDevice",
      "action": "Get a device",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}",
          "method": "GET"
        }
      },
      "description": "Get a device by ID",
      "resource": "device"
    },
    {
      "name": "Get Device Location History",
      "value": "getDeviceLocationHistory",
      "action": "Get device location history",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "enabled": "={{$parameter.locationFormat === \"csv\"}}",
              "properties": {
                "destinationProperty": "data"
              }
            },
            {
              "type": "rootProperty",
              "enabled": "={{$parameter.locationFormat !== \"csv\"}}",
              "properties": {
                "property": "latest_locations"
              }
            }
          ]
        },
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/location_activity{{$parameter.locationFormat === \"csv\" ? \".csv\" : \"\"}}",
          "method": "GET"
        }
      },
      "description": "Get device location history (JSON or CSV)",
      "resource": "device"
    },
    {
      "name": "Get Device Report",
      "value": "getDeviceReport",
      "action": "Get a device report",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/reports/{{$parameter.reportId}}",
          "method": "GET"
        }
      },
      "description": "Get a single report for a device",
      "resource": "device"
    },
    {
      "name": "Get Device Reports",
      "value": "getDeviceReports",
      "action": "Get device reports",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "reports"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "=/devices/{{$parameter.deviceId}}/reports",
          "method": "GET"
        }
      },
      "description": "List reports for a device",
      "resource": "device"
    },
    {
      "name": "List Devices",
      "value": "listDevices",
      "action": "List devices",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "devices"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/devices",
          "method": "GET"
        }
      },
      "description": "List devices in the account",
      "resource": "device"
    },
    {
      "name": "Trigger Device Action",
      "value": "triggerDeviceAction",
      "action": "Trigger a device action",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/action",
          "body": {
            "command": "={{$parameter.actionCommand}}",
            "options": "={{$parameter.actionOptions}}",
            "action_name": "={{$parameter.deviceAction}}"
          },
          "json": true,
          "method": "PUT"
        }
      },
      "description": "Trigger alarm, alert, or lock on a device",
      "resource": "device"
    },
    {
      "name": "Set Device Status (Missing/Recovered)",
      "value": "setDeviceStatus",
      "action": "Set device status",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}/missing",
          "body": {
            "missing": "={{$parameter.missingStatus === \"missing\"}}"
          },
          "json": true,
          "method": "PUT"
        }
      },
      "description": "Mark a device as missing or recovered",
      "resource": "device"
    },
    {
      "name": "Delete Device",
      "value": "deleteDevice",
      "action": "Delete a device",
      "routing": {
        "request": {
          "url": "=/devices/{{$parameter.deviceId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a device from the fleet",
      "resource": "device"
    },
    {
      "name": "List Labels",
      "value": "listLabels",
      "action": "List labels",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "labels"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/labels",
          "method": "GET"
        }
      },
      "description": "List labels in the account",
      "resource": "label"
    },
    {
      "name": "Get Label",
      "value": "getLabel",
      "action": "Get a label",
      "routing": {
        "request": {
          "url": "=/labels/{{$parameter.labelId}}",
          "method": "GET"
        }
      },
      "description": "Get a label by ID",
      "resource": "label"
    },
    {
      "name": "List Labels",
      "value": "listLabels",
      "action": "List labels",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "labels"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/labels",
          "method": "GET"
        }
      },
      "description": "List labels in the account",
      "resource": "label"
    },
    {
      "name": "Get Label",
      "value": "getLabel",
      "action": "Get a label",
      "routing": {
        "request": {
          "url": "=/labels/{{$parameter.labelId}}",
          "method": "GET"
        }
      },
      "description": "Get a label by ID",
      "resource": "label"
    },
    {
      "name": "Create Label",
      "value": "createLabel",
      "action": "Create a label",
      "routing": {
        "request": {
          "url": "/labels",
          "body": {
            "name": "={{$parameter.labelName}}",
            "devices": "={{$parameter.labelDevices}}"
          },
          "json": true,
          "method": "POST"
        }
      },
      "description": "Create a new label",
      "resource": "label"
    },
    {
      "name": "List Zones",
      "value": "listZones",
      "action": "List zones",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "zones"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/zones",
          "method": "GET"
        }
      },
      "description": "List zones in the account",
      "resource": "zone"
    },
    {
      "name": "Get Zone",
      "value": "getZone",
      "action": "Get a zone",
      "routing": {
        "request": {
          "url": "=/zones/{{$parameter.zoneId}}",
          "method": "GET"
        }
      },
      "description": "Get a zone by ID",
      "resource": "zone"
    },
    {
      "name": "List Zones",
      "value": "listZones",
      "action": "List zones",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "zones"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/zones",
          "method": "GET"
        }
      },
      "description": "List zones in the account",
      "resource": "zone"
    },
    {
      "name": "Get Zone",
      "value": "getZone",
      "action": "Get a zone",
      "routing": {
        "request": {
          "url": "=/zones/{{$parameter.zoneId}}",
          "method": "GET"
        }
      },
      "description": "Get a zone by ID",
      "resource": "zone"
    },
    {
      "name": "Create Zone",
      "value": "createZone",
      "action": "Create a zone",
      "routing": {
        "request": {
          "url": "/zones",
          "body": {
            "name": "={{$parameter.zoneName}}",
            "color": "={{$parameter.zoneColor}}",
            "radius": "={{$parameter.zoneRadius}}",
            "devices": "={{$parameter.zoneDevices}}",
            "latitude": "={{$parameter.zoneLatitude}}",
            "longitude": "={{$parameter.zoneLongitude}}"
          },
          "json": true,
          "method": "POST"
        }
      },
      "description": "Create a control zone",
      "resource": "zone"
    },
    {
      "name": "Update Zone",
      "value": "updateZone",
      "action": "Update a zone",
      "routing": {
        "request": {
          "url": "=/zones/{{$parameter.zoneId}}",
          "body": {
            "name": "={{$parameter.zoneName}}",
            "color": "={{$parameter.zoneColor}}",
            "radius": "={{$parameter.zoneRadius}}",
            "latitude": "={{$parameter.zoneLatitude}}",
            "longitude": "={{$parameter.zoneLongitude}}",
            "add_devices": "={{$parameter.zoneAddDevices}}",
            "remove_devices": "={{$parameter.zoneRemoveDevices}}",
            "removed_actions": "={{$parameter.zoneRemovedActions}}"
          },
          "json": true,
          "method": "PUT"
        }
      },
      "description": "Update a control zone",
      "resource": "zone"
    },
    {
      "name": "List Automations",
      "value": "listAutomations",
      "action": "List automations",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "automations"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/automations",
          "method": "GET"
        }
      },
      "description": "List automations in the account",
      "resource": "automation"
    },
    {
      "name": "Get Automation",
      "value": "getAutomation",
      "action": "Get an automation",
      "routing": {
        "request": {
          "url": "=/automations/{{$parameter.automationId}}",
          "method": "GET"
        }
      },
      "description": "Get an automation by ID",
      "resource": "automation"
    },
    {
      "name": "List Automations",
      "value": "listAutomations",
      "action": "List automations",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "automations"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/automations",
          "method": "GET"
        }
      },
      "description": "List automations in the account",
      "resource": "automation"
    },
    {
      "name": "Get Automation",
      "value": "getAutomation",
      "action": "Get an automation",
      "routing": {
        "request": {
          "url": "=/automations/{{$parameter.automationId}}",
          "method": "GET"
        }
      },
      "description": "Get an automation by ID",
      "resource": "automation"
    },
    {
      "name": "List Mass Actions",
      "value": "listMassActions",
      "action": "List mass actions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "mass_actions"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/mass_actions",
          "method": "GET"
        }
      },
      "description": "List mass actions in the account",
      "resource": "massAction"
    },
    {
      "name": "Get Mass Action",
      "value": "getMassAction",
      "action": "Get a mass action",
      "routing": {
        "request": {
          "url": "=/mass_actions/{{$parameter.massActionId}}",
          "method": "GET"
        }
      },
      "description": "Get a mass action by ID",
      "resource": "massAction"
    },
    {
      "name": "List Mass Actions",
      "value": "listMassActions",
      "action": "List mass actions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "mass_actions"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "page": 1
          },
          "url": "/mass_actions",
          "method": "GET"
        }
      },
      "description": "List mass actions in the account",
      "resource": "massAction"
    },
    {
      "name": "Get Mass Action",
      "value": "getMassAction",
      "action": "Get a mass action",
      "routing": {
        "request": {
          "url": "=/mass_actions/{{$parameter.massActionId}}",
          "method": "GET"
        }
      },
      "description": "Get a mass action by ID",
      "resource": "massAction"
    }
  ]

npm_readme:
  # n8n-nodes-prey

  This is an n8n community node that lets you work with the Prey Developer API 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)
  [Usage notes](#usage-notes)
  [Compatibility](#compatibility)
  [Resources](#resources)

  ## Installation

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

  ## Operations

  - Account
    - Get account
  - Users
    - List users
    - Get user
  - Devices
    - List devices
    - Get device
    - Get device location history (JSON or CSV)
    - List device reports
    - Get device report
    - Trigger device action (alarm/alert/lock)
    - Set device status (missing/recovered)
    - Delete device
  - Labels
    - List labels
    - Get label
    - Create label
  - Zones
    - List zones
    - Get zone
    - Create zone
    - Update zone
  - Automations
    - List automations
    - Get automation
  - Mass Actions
    - List mass actions
    - Get mass action

  ## Credentials

  This node uses API Key authentication.

  ### API Key

  1. Go to Prey Control Panel → Settings → Developer API.
  2. Create an API key (you can set permissions and expiration).
  3. Use the API key in the Prey API credential inside n8n.

  Note: Creating API keys requires a Personal, Business, or Education plan.

  The credential includes a Permission Level field (Read-only or Read & Write) to hide write operations when the key is read-only.

  ## Usage notes

  - The Prey Developer API is currently in **Beta** and has fewer write endpoints than read ones.
  - Rate limits are per API key:
    - 2 requests/second
    - 60 requests/minute
    - 10,000 requests/hour

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Prey Developer API (Swagger)](https://api.preyproject.com)
  * [Prey API help article](https://help.preyproject.com/article/308-what-can-i-use-the-prey-api-for)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by interacting with the Prey Developer API to manage devices, accounts, users, labels, zones, and automations.","capabilities":["Retrieve account information","List and retrieve user details","List, retrieve, and delete devices","Retrieve device location history in JSON or CSV format","List, retrieve, and trigger device reports","Trigger device actions (alarm, alert, lock)","Set device status (missing or recovered)","Manage labels (list, retrieve, create)","Manage zones (list, retrieve, create, update)","Manage automations (list, retrieve)"],"authentication":"API Key","commonUseCases":["Automating device locking or alarming based on scheduled events","Tracking device location history for security monitoring","Managing user access and permissions across devices","Creating and updating device zones for organizational management","Triggering mass actions on multiple devices simultaneously"],"limitations":["Prey Developer API is currently in Beta","Fewer write endpoints compared to read endpoints","Rate limits of 2 requests/second, 60 requests/minute, and 10,000 requests/hour per API key","API key creation requires Personal, Business, or Education plan"],"relatedNodes":["n8n HTTP Request","n8n Code Node"]}


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-07-14 14:40:33
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-07-14T14:40:33.550Z
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: @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-07-14 14:40:33
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-07-14T14:40:33.551Z
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:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an environment",
      "description": "Create a new development environment",
      "resource": "environment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an environment",
      "description": "Delete an environment (must be stopped first)",
      "resource": "environment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an environment",
      "description": "Get details of a specific environment",
      "resource": "environment"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many environments",
      "description": "Retrieve a list of environments",
      "resource": "environment"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start an environment",
      "description": "Start a stopped environment",
      "resource": "environment"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop an environment",
      "description": "Stop a running environment",
      "resource": "environment"
    },
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute an agent",
      "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: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudAiModelHub
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (AI Model Hub)
description: Interact with IONOS Cloud AI Model Hub API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-07-14T14:40:33.552Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "collection",
      "options": [
        {
          "name": "Collection",
          "value": "collection",
          "description": "Manage document collections in a vector database"
        },
        {
          "name": "Document",
          "value": "document",
          "description": "Manage documents in collections"
        },
        {
          "name": "Model",
          "value": "model",
          "description": "Browse and call foundation models"
        },
        {
          "name": "OpenAI Compatible",
          "value": "openai",
          "description": "Use OpenAI-compatible API endpoints"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a collection",
          "description": "Create a new document collection"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a collection",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a collection and all its documents"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a collection",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}",
              "method": "GET"
            }
          },
          "description": "Get a collection by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many collections",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/collections",
              "method": "GET"
            }
          },
          "description": "Retrieve many stored document collections"
        },
        {
          "name": "Query",
          "value": "query",
          "action": "Query a collection",
          "description": "Search a collection for related content"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a collection",
          "description": "Update collection details and metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "collection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add documents to collection",
          "description": "Add documents to a collection"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a document from a collection"
        },
        {
          "name": "Delete All",
          "value": "deleteAll",
          "action": "Delete all documents",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}/documents",
              "method": "DELETE"
            }
          },
          "description": "Delete all documents from a collection"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document",
          "routing": {
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}",
              "method": "GET"
            }
          },
          "description": "Get document details"
        },
        {
          "name": "Get Chunks",
          "value": "getChunks",
          "action": "Get document chunks",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}/chunks",
              "method": "GET"
            }
          },
          "description": "Get document chunks details"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many documents",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "=/collections/{{$parameter.collectionId}}/documents",
              "method": "GET"
            }
          },
          "description": "Get the list of documents stored in a collection"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update a document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many models",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/models",
              "method": "GET"
            }
          },
          "description": "Retrieve available AI models"
        },
        {
          "name": "Predict",
          "value": "predict",
          "action": "Predict with model",
          "description": "Send a request to an AI model and receive the result"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "model"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "chatCompletion",
      "options": [
        {
          "name": "Chat Completion",
          "value": "chatCompletion",
          "action": "Create chat completion",
          "routing": {
            "request": {
              "url": "=/v1/chat/completions",
              "method": "POST",
              "baseURL": "https://openai.inference.de-txl.ionos.com"
            }
          },
          "description": "Create chat completions using OpenAI-compatible API"
        },
        {
          "name": "Completion",
          "value": "completion",
          "action": "Create completion",
          "routing": {
            "request": {
              "url": "=/v1/completions",
              "method": "POST",
              "baseURL": "https://openai.inference.de-txl.ionos.com"
            }
          },
          "description": "Create text completions using OpenAI-compatible API"
        },
        {
          "name": "Create Embeddings",
          "value": "embeddings",
          "action": "Create embeddings",
          "routing": {
            "request": {
              "url": "=/v1/embeddings",
              "method": "POST",
              "baseURL": "https://openai.inference.de-txl.ionos.com"
            }
          },
          "description": "Create embedding vectors from text"
        },
        {
          "name": "Generate Image",
          "value": "generateImage",
          "action": "Generate image",
          "routing": {
            "request": {
              "url": "=/v1/images/generations",
              "method": "POST",
              "baseURL": "https://openai.inference.de-txl.ionos.com"
            }
          },
          "description": "Generate images from text prompts"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many models",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/models",
              "method": "GET",
              "baseURL": "https://openai.inference.de-txl.ionos.com"
            }
          },
          "description": "List available models in OpenAI-compatible format"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "openai"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a collection",
      "description": "Create a new document collection",
      "resource": "collection"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a collection",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a collection and all its documents",
      "resource": "collection"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a collection",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}",
          "method": "GET"
        }
      },
      "description": "Get a collection by ID",
      "resource": "collection"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many collections",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/collections",
          "method": "GET"
        }
      },
      "description": "Retrieve many stored document collections",
      "resource": "collection"
    },
    {
      "name": "Query",
      "value": "query",
      "action": "Query a collection",
      "description": "Search a collection for related content",
      "resource": "collection"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a collection",
      "description": "Update collection details and metadata",
      "resource": "collection"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add documents to collection",
      "description": "Add documents to a collection",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a document from a collection",
      "resource": "document"
    },
    {
      "name": "Delete All",
      "value": "deleteAll",
      "action": "Delete all documents",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}/documents",
          "method": "DELETE"
        }
      },
      "description": "Delete all documents from a collection",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document",
      "routing": {
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}",
          "method": "GET"
        }
      },
      "description": "Get document details",
      "resource": "document"
    },
    {
      "name": "Get Chunks",
      "value": "getChunks",
      "action": "Get document chunks",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}/documents/{{$parameter.documentId}}/chunks",
          "method": "GET"
        }
      },
      "description": "Get document chunks details",
      "resource": "document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many documents",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "=/collections/{{$parameter.collectionId}}/documents",
          "method": "GET"
        }
      },
      "description": "Get the list of documents stored in a collection",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update a document",
      "resource": "document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many models",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/models",
          "method": "GET"
        }
      },
      "description": "Retrieve available AI models",
      "resource": "model"
    },
    {
      "name": "Predict",
      "value": "predict",
      "action": "Predict with model",
      "description": "Send a request to an AI model and receive the result",
      "resource": "model"
    },
    {
      "name": "Chat Completion",
      "value": "chatCompletion",
      "action": "Create chat completion",
      "routing": {
        "request": {
          "url": "=/v1/chat/completions",
          "method": "POST",
          "baseURL": "https://openai.inference.de-txl.ionos.com"
        }
      },
      "description": "Create chat completions using OpenAI-compatible API",
      "resource": "openai"
    },
    {
      "name": "Completion",
      "value": "completion",
      "action": "Create completion",
      "routing": {
        "request": {
          "url": "=/v1/completions",
          "method": "POST",
          "baseURL": "https://openai.inference.de-txl.ionos.com"
        }
      },
      "description": "Create text completions using OpenAI-compatible API",
      "resource": "openai"
    },
    {
      "name": "Create Embeddings",
      "value": "embeddings",
      "action": "Create embeddings",
      "routing": {
        "request": {
          "url": "=/v1/embeddings",
          "method": "POST",
          "baseURL": "https://openai.inference.de-txl.ionos.com"
        }
      },
      "description": "Create embedding vectors from text",
      "resource": "openai"
    },
    {
      "name": "Generate Image",
      "value": "generateImage",
      "action": "Generate image",
      "routing": {
        "request": {
          "url": "=/v1/images/generations",
          "method": "POST",
          "baseURL": "https://openai.inference.de-txl.ionos.com"
        }
      },
      "description": "Generate images from text prompts",
      "resource": "openai"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many models",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/models",
          "method": "GET",
          "baseURL": "https://openai.inference.de-txl.ionos.com"
        }
      },
      "description": "List available models in OpenAI-compatible format",
      "resource": "openai"
    }
  ]

npm_readme:
  <div align="center">

  <img src="./credentials/ionos.svg" alt="IONOS Cloud" height="80" />&nbsp;&nbsp;&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://n8n.io/brandguidelines/logo-white.svg"><source media="(prefers-color-scheme: light)" srcset="https://n8n.io/brandguidelines/logo-dark.svg"><img src="https://n8n.io/brandguidelines/logo-dark.svg" alt="n8n" height="80" /></picture>

  # n8n Nodes for IONOS Cloud

  [![npm version](https://img.shields.io/npm/v/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![License](https://img.shields.io/npm/l/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/blob/master/LICENSE)
  [![npm downloads](https://img.shields.io/npm/dm/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![n8n](https://img.shields.io/badge/n8n-community-blue.svg)](https://n8n.io)
  ![Official](https://img.shields.io/badge/IONOS%20Cloud-Official-00BFFF.svg)

  **Official IONOS Cloud n8n community nodes**

  Automate your cloud infrastructure, DNS, CDN, certificates, and AI workflows with [n8n](https://n8n.io/)

  [Installation](#installation) • [Operations](#operations) • [Credentials](#credentials) • [Usage](#usage) • [Examples](#common-patterns) • [Resources](#resources)

  </div>

  ---

  ## Overview

  This is the **official** n8n community node package for IONOS Cloud, developed and maintained by the IONOS Cloud team. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  The package provides comprehensive integration with key IONOS Cloud services, enabling you to automate infrastructure provisioning, certificate management, DNS operations, CDN distribution, and AI-powered workflows directly from n8n.

  ## Included Nodes

  This package provides seven separate nodes for different IONOS Cloud services:

  1. **IONOS Cloud (Infrastructure)** - Core infrastructure management
  2. **IONOS Cloud (Certificate Manager)** - SSL/TLS certificate management  
  3. **IONOS Cloud (Cloud DNS)** - Domain name system management
  4. **IONOS Cloud (CDN)** - Content delivery network management
  5. **IONOS Cloud (AI Model Hub)** - AI model inference and RAG capabilities
  6. **IONOS Cloud Chat Model** ⚡ - LangChain sub-node for n8n's AI Agent (language model)
  7. **IONOS Cloud Embeddings** ⚡ - LangChain sub-node for n8n's AI Agent (text embeddings)

  ---

  ## Getting Started

  ### Prerequisites

  Before you begin, you will need:

  1. A [IONOS Cloud account](https://www.ionos.com/enterprise-cloud/signup)
  2. A Cloud API Bearer token ([learn how to generate tokens](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager))
  3. n8n installed (version 2.1.5 or higher)

  ### Installation

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

  #### Quick Installation Steps

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

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

  ## Operations

  ### Overview

  | Node | Resources | Operations | Description |
  |------|-----------|------------|-------------|
  | **Infrastructure** | 21 | 153 | Complete infrastructure management (compute, networking, storage, Kubernetes) |
  | **Certificate Manager** | 3 | 15 | SSL/TLS certificate lifecycle management with ACME support |
  | **Cloud DNS** | 7 | 28 | DNS zones, records (15 types), DNSSEC, zone transfers |
  | **CDN** | 2 | 7 | Content delivery with custom routing and geo-restrictions |
  | **AI Model Hub** | 4 | 20 | Foundation model inference, RAG capabilities, and OpenAI-compatible API |
  | **Chat Model** ⚡ | — | supplyData | LangChain chat model sub-node for n8n AI Agent |
  | **Embeddings** ⚡ | — | supplyData | LangChain embeddings sub-node for n8n AI Agent |

  > ⚡ **Sub-nodes**: The Chat Model and Embeddings nodes are LangChain sub-nodes that plug into n8n's built-in AI nodes (AI Agent, AI Chain, Vector Stores, etc.) rather than operating as standalone workflow nodes.

  > **✨ v1.0.2**: Patch release with enhanced subresource support for load balancers, NAT gateways, security groups, and target groups. Added request monitoring capabilities.


  <details>
  <summary><b>Infrastructure - Detailed Operations</b></summary>

  #### Account & Global Resources (12 operations)
  - **Contract** (1): Get Many
  - **Location** (2): Get, Get Many
  - **Image** (2): Get, Get Many  
  - **IP Block** (4): Create, Delete, Get, Get Many
  - **Request** (3): Get, Get All, Get Status

  #### Core Infrastructure (10 operations)
  - **Datacenter** (5): Create, Delete, Get, Get Many, Update
  - **LAN** (5): Create, Delete, Get, Get Many, Update

  #### Compute Resources (41 operations)
  - **Server** (21): Attach/Detach CDROM/Volume, Create, Delete, Get (+ CDROM/CDROMs/Volume/Volumes/Remote Console/Token), Get Many, Reboot, Resume, Start, Stop, Suspend, Update, Upgrade
  - **Volume** (6): Create, Create Snapshot, Delete, Get, Get Many, Update
  - **Snapshot** (4): Delete, Get, Get Many, Update
  - **NIC** (5): Create, Delete, Get, Get Many, Update
  - **Firewall Rule** (5): Create, Delete, Get, Get Many, Update

  #### Kubernetes (11 operations)
  - **Kubernetes Cluster** (6): Create, Delete, Get, Get Many, Get Kubeconfig, Update
  - **Node Pool** (5): Create, Delete, Get, Get Many, Update

  #### Networking (34 operations)
  - **Private Cross-Connect** (5): Create, Delete, Get, Get Many, Update
  - **Load Balancer** (9): Attach/Detach NIC, Create, Delete, Get (+ Balanced NIC/NICs), Get Many, Update
  - **Network Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources
  - **Application Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources with HTTP rules
  - **Target Group** (5): Create, Delete, Get, Get Many, Update
    - Enhanced with location and protocolVersion properties
  - **NAT Gateway** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Rules subresources

  #### Security (5 operations)
  - **Security Group** (5): Create, Delete, Get, Get Many, Update
    - Full support for Rules subresource with comprehensive rule properties

  </details>

  <details>
  <summary><b>Certificate Manager - Detailed Operations</b></summary>

  #### Certificate Resource (5 operations)
  Upload and manage SSL/TLS certificates manually with full chain and private key support.
  - Create, Delete, Get, Get Many, Update

  #### AutoCertificate Resource (5 operations)
  Configure automatic certificate renewal via ACME providers (Let's Encrypt, etc.).
  - Create, Delete, Get, Get Many, Update
  - **Key Algorithms**: RSA (2048/4096), ECDSA (256/384)
  - **Features**: Subject Alternative Names (SANs), common name, provider selection

  #### Provider Resource (5 operations)
  Configure ACME certificate providers with External Account Binding (EAB) support.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>Cloud DNS - Detailed Operations</b></summary>

  #### Zone Resource (5 operations)
  Manage primary DNS zones.
  - Create, Delete, Get, Get Many, Update

  #### Record Resource (5 operations)
  Manage DNS records with 15 supported types: A, AAAA, ALIAS, CAA, CNAME, DS, HTTPS, MX, NS, SMIMEA, SRV, SSHFP, SVCB, TLSA, TXT
  - Create, Delete, Get, Get Many, Update

  #### SecondaryZone Resource (7 operations)
  Secondary zones with AXFR (zone transfer) support.
  - Create, Delete, Get, Get Many, Update, AXFR Get, AXFR Start

  #### ZoneFile Resource (2 operations)
  Import/export zones in BIND format (RFC 1035).
  - Get (export), Update (import)

  #### Quota Resource (1 operation)
  View DNS resource usage and limits.
  - Get

  #### DNSSEC Resource (3 operations)
  Enable and manage DNSSEC for zones.
  - Create (enable), Delete (disable), Get

  #### ReverseRecord Resource (5 operations)
  Manage reverse DNS (PTR) records for IPv4/IPv6.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>CDN - Detailed Operations</b></summary>

  #### Distribution Resource (5 operations)
  Configure CDN distributions with custom routing rules.
  - Create, Delete, Get, Get Many, Update
  - **Features**: Domain routing, SSL/TLS integration, HTTP/HTTPS schemes, geo-restrictions, upstream origins

  #### Ip Resource (2 operations)
  Get CDN edge server IPs for origin whitelisting.
  - Get, Get Many

  </details>

  <details>
  <summary><b>AI Model Hub - Detailed Operations</b></summary>

  #### Model Resource (2 operations)
  Browse and invoke foundation models for AI inference.
  - Get Many (list available models), Predict (run inference)
  - **Features**: RAG support via collection queries, custom model options, streaming responses

  #### Collection Resource (6 operations)
  Manage vector database collections for document storage and retrieval.
  - Create, Delete, Get, Get Many, Update, Query
  - **Features**: Chunking strategies (sentence/fixed/recursive), embedding models, database types (chromadb/pgvector), semantic search

  #### Document Resource (7 operations)
  Manage documents within collections for RAG applications.
  - Add, Delete, Delete All, Get, Get Many, Get Chunks, Update
  - **Features**: Base64 content encoding, metadata management, chunk retrieval, batch operations

  #### OpenAI Compatible Resource (5 operations)
  Use OpenAI-compatible API endpoints for standardized AI interactions.

  **Chat Completion** - Create chat completions with message history
  - Supports system, user, and assistant message roles
  - Parameters: model, messages (required), temperature, top_p, max_tokens, max_completion_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, response_format, tools, tool_choice, user
  - Compatible with OpenAI chat completion API format

  **Completion** - Simple text completion
  - Parameters: model, prompt (required), temperature, top_p, max_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, user
  - Compatible with OpenAI completion API format

  **Create Embeddings** - Generate vector embeddings from text
  - Parameters: model (default: BAAI/bge-large-en-v1.5), input (single text or comma-separated multiple texts)
  - Returns embedding vectors for semantic search and similarity

  **Generate Image** - Text-to-image generation
  - Parameters: model (default: black-forest-labs/FLUX.1-schnell), prompt (required), n, size (1024x1024, 1024x1792, 1792x1024), response_format (b64_json), user
  - Generates images from text descriptions

  **Get Many** - List available models
  - Returns all models in OpenAI-compatible format
  - Shows model capabilities and availability

  **API Endpoint**: `https://openai.inference.de-txl.ionos.com` (path: `/v1/*`)

  **Features**: Full OpenAI API compatibility, drop-in replacement for OpenAI in existing workflows, comprehensive parameter support

  > **Note:** Model dropdowns are populated dynamically from the IONOS API at runtime (`GET /v1/models`). When models are added or retired, the dropdown lists update automatically without requiring a node update.

  </details>

  ---

  ## Credentials

  All nodes in this package share a single credential type: **IONOS Cloud API**

  Authentication uses the [Cloud API Bearer token](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager).

  The same token works across all IONOS Cloud services (Infrastructure, Certificate Manager, DNS, CDN, and AI Model Hub).

  ## Compatibility

  Tested against n8n version 2.1.5+

  ## Usage

  ### Authentication
  1. Create new credentials in n8n and select "IONOS Cloud API"
  2. Provide your API token (generated from IONOS Cloud Console)
  3. The same credential works for all five nodes

  ### Using the Nodes

  #### Infrastructure
  * Add the "IONOS Cloud (Infrastructure)" node to your workflow
  * Select the resource (e.g., Server, Volume, Datacenter)
  * Choose the operation and configure the required fields

  #### Certificate Manager
  * Add the "IONOS Cloud (Certificate Manager)" node to your workflow
  * Select the resource (Certificate, AutoCertificate, or Provider)
  * Configure certificate properties, domains, and ACME providers

  #### DNS
  * Add the "IONOS Cloud (Cloud DNS)" node to your workflow
  * Select the resource (Zone, Record, SecondaryZone, etc.)
  * Configure DNS zones, records, and DNSSEC settings

  #### CDN
  * Add the "IONOS Cloud (CDN)" node to your workflow
  * Select the resource (Distribution or Ip)
  * Configure CDN distributions with routing rules and upstream origins

  #### AI Model Hub
  * Add the "IONOS Cloud (AI Model Hub)" node to your workflow
  * Select the resource (Model, Collection, Document, or OpenAI Compatible)
  * **Model**: AI inference with native IONOS API
  * **Collection**: Vector database management for RAG
  * **Document**: Manage documents in collections
  * **OpenAI Compatible**: Use OpenAI-compatible endpoints (chat, completions, embeddings, images)

  #### AI Agent Integration (Chat Model & Embeddings Sub-Nodes)

  The **IONOS Cloud Chat Model** and **IONOS Cloud Embeddings** are LangChain sub-nodes that integrate with n8n's built-in AI nodes.

  **Chat Model** — Use IONOS AI Model Hub as the LLM brain for the AI Agent:
  1. Add an **AI Agent** node to your workflow
  2. Click **+** on the AI Agent's **Language Model** input
  3. Select **IONOS Cloud Chat Model**
  4. Choose your credential and pick a model from the auto-populated dropdown
  5. The agent now uses IONOS AI Model Hub for all LLM reasoning

  **Embeddings** — Use IONOS AI Model Hub for text embeddings in RAG pipelines:
  1. Add an **In-Memory Vector Store** (or any vector store node)
  2. Click **+** on the vector store's **Embedding** input
  3. Select **IONOS Cloud Embeddings**
  4. Choose your credential and pick an embedding model

  **Example: AI Agent with RAG**
  ```
  Chat Trigger → AI Agent
                   ├── Language Model: IONOS Cloud Chat Model
                   ├── Memory: Window Buffer Memory
                   └── Tool: Vector Store Tool
                                └── In-Memory Vector Store (Load)
                                         └── Embedding: IONOS Cloud Embeddings
  ```

  > **Note:** The model dropdowns are populated dynamically from the IONOS API at runtime. Both sub-nodes reuse the same **IONOS Cloud API** credential as all other nodes in this package.

  ### Common Patterns

  **Automated SSL Certificate Deployment:**
  1. Use Certificate Manager to create an AutoCertificate
  2. Use CDN node to create a Distribution referencing the certificate ID
  3. Automate certificate renewal with n8n scheduling

  **Infrastructure Provisioning:**
  1. Use Infrastructure node to create Datacenter, Server, and Volume
  2. Use DNS node to create Zone and A/AAAA Records pointing to server IPs
  3. Use Certificate Manager to provision SSL certificates for domains

  **DNS Management:**
  1. Use DNS Zone resource to create zones
  2. Use Record resource to manage DNS records (A, CNAME, MX, TXT, etc.)
  3. Use DNSSEC resource to enable DNSSEC signing
  4. Use ReverseRecord for PTR records

  **AI-Powered Applications with RAG:**
  1. Use AI Model Hub Collection resource to create a vector database
  2. Use Document resource to add knowledge base documents
  3. Use Model Predict operation with collection query for context-aware responses
  4. Automate document updates and model inference in workflows

  **OpenAI-Compatible AI Integration:**
  1. Use OpenAI Compatible Chat Completion for conversational AI
  2. Use Create Embeddings for semantic search and similarity
  3. Use Generate Image for text-to-image generation
  4. Drop-in replacement for OpenAI API in existing n8n workflows

  **AI Agent with IONOS Cloud (native n8n AI integration):**
  1. Use IONOS Cloud Chat Model as the language model for n8n's AI Agent
  2. Use IONOS Cloud Embeddings with Vector Stores for RAG pipelines
  3. Combine with Window Buffer Memory for conversational context
  4. Add Vector Store Tool to give the agent access to your knowledge base
  5. See `examples/ionos-ai-agent-workflow.json` for a ready-to-import workflow

  ### Avoiding Rate Limits

  The IONOS AI Model Hub API enforces rate limits (300 requests/min, 5 requests/sec with a burst of 10). When a node receives multiple input items (e.g., from a preceding "Get All" operation), n8n executes the node once per item, which can trigger `429 Too Many Requests` errors.

  To prevent this, configure **batching** in the node's **Settings** tab:

  1. Open the AI Model Hub node and go to the **Settings** tab
  2. Under **Request Options**, click **Add Option** and select **Batching**
  3. Set **Items per Batch** to `2` (or lower)
  4. Set **Batch Interval (ms)** to `1000` (or higher)

  This ensures n8n processes only a few items at a time with a delay between batches, staying within the API rate limits.

  > **Tip:** If your workflow only needs a single API call (e.g., one Chat Completion), use a **Limit** node before the AI Model Hub node to reduce the input to 1 item.

  ## API Endpoints

  Each node connects to:

  - **Infrastructure**: `https://api.ionos.com/cloudapi/v6/`
  - **Certificate Manager**: `https://certificate-manager.de-fra.ionos.com`
  - **Cloud DNS**: `https://dns.de-fra.ionos.com`
  - **CDN**: `https://cdn.de-fra.ionos.com`
  - **AI Model Hub (Inference API)**: `https://inference.de-txl.ionos.com`
  - **AI Model Hub (OpenAI Compatible API)**: `https://openai.inference.de-txl.ionos.com`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [IONOS Cloud Documentation](https://docs.ionos.com/cloud)
  * [Infrastructure API Documentation](https://api.ionos.com/docs/cloud/v6/)
  * [Certificate Manager API Documentation](https://api.ionos.com/docs/certmanager/v2/)
  * [Cloud DNS API Documentation](https://api.ionos.com/docs/dns/v1/)
  * [CDN API Documentation](https://api.ionos.com/docs/cdn/v1/)
  * [AI Model Hub API Documentation](https://api.ionos.com/docs/inference-modelhub/v1/)
  * [AI Model Hub OpenAI-compatible API Documentation](https://api.ionos.com/docs/inference-openai/v1/)

  ## Contributing

  We welcome contributions! If you find a bug or have a feature request:

  1. Check the [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues) to see if it's already been reported
  2. Open a new issue with a clear description and reproduction steps
  3. For feature requests, explain the use case and expected behavior

  ### Development

  To contribute code:

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

  ## License

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

  ## Support

  - 📖 [Documentation](https://docs.ionos.com/cloud)
  - 💬 [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues)
  - 🌐 [IONOS Cloud](https://www.ionos.com/cloud)
  - 📧 [Support](https://docs.ionos.com/cloud/support/general-information/contact-information)

  ---

  <div align="center">

  Made with ❤️ by the IONOS Cloud team

  </div>

ai_documentation_summary:
  {"purpose":"The IONOS Cloud (AI Model Hub) node enables interaction with the IONOS Cloud AI Model Hub API for foundation model inference, RAG capabilities, and OpenAI-compatible API operations.","capabilities":["Foundation model inference","RAG (Retrieval-Augmented Generation) capabilities","OpenAI-compatible API interface","AI model management","Text generation and completion","Model parameter configuration"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Integrating IONOS AI models into n8n workflows","Building RAG-based applications with IONOS models","Automating AI-powered content generation","Connecting n8n AI agents to IONOS model inference"],"limitations":["Requires IONOS Cloud account and API Bearer token setup","Requires n8n version 2.1.5 or higher","Limited to IONOS Cloud AI Model Hub services only"],"relatedNodes":["IONOS Cloud (Infrastructure)","IONOS Cloud (Certificate Manager)","IONOS Cloud (Cloud DNS)","IONOS Cloud (CDN)","IONOS Cloud Chat Model"]}


node_type: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudCdn
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (CDN)
description: Interact with IONOS Cloud CDN API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-07-14T14:40:33.553Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "distribution",
      "options": [
        {
          "name": "Distribution",
          "value": "distribution"
        },
        {
          "name": "Ip",
          "value": "ips"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create distribution",
          "routing": {
            "request": {
              "url": "/distributions",
              "method": "POST"
            }
          },
          "description": "Create a new distribution"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a distribution"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "GET"
            }
          },
          "description": "Get a distribution by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many distributions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/distributions",
              "method": "GET"
            }
          },
          "description": "Retrieve many distributions"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "PUT"
            }
          },
          "description": "Update a distribution"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "distribution"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get edge server IP info",
          "routing": {
            "request": {
              "url": "=/ips/{{$parameter.ipId}}",
              "method": "GET"
            }
          },
          "description": "Get edge server IP information by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many edge server i ps",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/ips",
              "method": "GET"
            }
          },
          "description": "Retrieve many edge server IPs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ips"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create distribution",
      "routing": {
        "request": {
          "url": "/distributions",
          "method": "POST"
        }
      },
      "description": "Create a new distribution",
      "resource": "distribution"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a distribution",
      "resource": "distribution"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "GET"
        }
      },
      "description": "Get a distribution by ID",
      "resource": "distribution"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many distributions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/distributions",
          "method": "GET"
        }
      },
      "description": "Retrieve many distributions",
      "resource": "distribution"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "PUT"
        }
      },
      "description": "Update a distribution",
      "resource": "distribution"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get edge server IP info",
      "routing": {
        "request": {
          "url": "=/ips/{{$parameter.ipId}}",
          "method": "GET"
        }
      },
      "description": "Get edge server IP information by ID",
      "resource": "ips"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many edge server i ps",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/ips",
          "method": "GET"
        }
      },
      "description": "Retrieve many edge server IPs",
      "resource": "ips"
    }
  ]

npm_readme:
  <div align="center">

  <img src="./credentials/ionos.svg" alt="IONOS Cloud" height="80" />&nbsp;&nbsp;&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://n8n.io/brandguidelines/logo-white.svg"><source media="(prefers-color-scheme: light)" srcset="https://n8n.io/brandguidelines/logo-dark.svg"><img src="https://n8n.io/brandguidelines/logo-dark.svg" alt="n8n" height="80" /></picture>

  # n8n Nodes for IONOS Cloud

  [![npm version](https://img.shields.io/npm/v/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![License](https://img.shields.io/npm/l/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/blob/master/LICENSE)
  [![npm downloads](https://img.shields.io/npm/dm/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![n8n](https://img.shields.io/badge/n8n-community-blue.svg)](https://n8n.io)
  ![Official](https://img.shields.io/badge/IONOS%20Cloud-Official-00BFFF.svg)

  **Official IONOS Cloud n8n community nodes**

  Automate your cloud infrastructure, DNS, CDN, certificates, and AI workflows with [n8n](https://n8n.io/)

  [Installation](#installation) • [Operations](#operations) • [Credentials](#credentials) • [Usage](#usage) • [Examples](#common-patterns) • [Resources](#resources)

  </div>

  ---

  ## Overview

  This is the **official** n8n community node package for IONOS Cloud, developed and maintained by the IONOS Cloud team. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  The package provides comprehensive integration with key IONOS Cloud services, enabling you to automate infrastructure provisioning, certificate management, DNS operations, CDN distribution, and AI-powered workflows directly from n8n.

  ## Included Nodes

  This package provides seven separate nodes for different IONOS Cloud services:

  1. **IONOS Cloud (Infrastructure)** - Core infrastructure management
  2. **IONOS Cloud (Certificate Manager)** - SSL/TLS certificate management  
  3. **IONOS Cloud (Cloud DNS)** - Domain name system management
  4. **IONOS Cloud (CDN)** - Content delivery network management
  5. **IONOS Cloud (AI Model Hub)** - AI model inference and RAG capabilities
  6. **IONOS Cloud Chat Model** ⚡ - LangChain sub-node for n8n's AI Agent (language model)
  7. **IONOS Cloud Embeddings** ⚡ - LangChain sub-node for n8n's AI Agent (text embeddings)

  ---

  ## Getting Started

  ### Prerequisites

  Before you begin, you will need:

  1. A [IONOS Cloud account](https://www.ionos.com/enterprise-cloud/signup)
  2. A Cloud API Bearer token ([learn how to generate tokens](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager))
  3. n8n installed (version 2.1.5 or higher)

  ### Installation

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

  #### Quick Installation Steps

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

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

  ## Operations

  ### Overview

  | Node | Resources | Operations | Description |
  |------|-----------|------------|-------------|
  | **Infrastructure** | 21 | 153 | Complete infrastructure management (compute, networking, storage, Kubernetes) |
  | **Certificate Manager** | 3 | 15 | SSL/TLS certificate lifecycle management with ACME support |
  | **Cloud DNS** | 7 | 28 | DNS zones, records (15 types), DNSSEC, zone transfers |
  | **CDN** | 2 | 7 | Content delivery with custom routing and geo-restrictions |
  | **AI Model Hub** | 4 | 20 | Foundation model inference, RAG capabilities, and OpenAI-compatible API |
  | **Chat Model** ⚡ | — | supplyData | LangChain chat model sub-node for n8n AI Agent |
  | **Embeddings** ⚡ | — | supplyData | LangChain embeddings sub-node for n8n AI Agent |

  > ⚡ **Sub-nodes**: The Chat Model and Embeddings nodes are LangChain sub-nodes that plug into n8n's built-in AI nodes (AI Agent, AI Chain, Vector Stores, etc.) rather than operating as standalone workflow nodes.

  > **✨ v1.0.2**: Patch release with enhanced subresource support for load balancers, NAT gateways, security groups, and target groups. Added request monitoring capabilities.


  <details>
  <summary><b>Infrastructure - Detailed Operations</b></summary>

  #### Account & Global Resources (12 operations)
  - **Contract** (1): Get Many
  - **Location** (2): Get, Get Many
  - **Image** (2): Get, Get Many  
  - **IP Block** (4): Create, Delete, Get, Get Many
  - **Request** (3): Get, Get All, Get Status

  #### Core Infrastructure (10 operations)
  - **Datacenter** (5): Create, Delete, Get, Get Many, Update
  - **LAN** (5): Create, Delete, Get, Get Many, Update

  #### Compute Resources (41 operations)
  - **Server** (21): Attach/Detach CDROM/Volume, Create, Delete, Get (+ CDROM/CDROMs/Volume/Volumes/Remote Console/Token), Get Many, Reboot, Resume, Start, Stop, Suspend, Update, Upgrade
  - **Volume** (6): Create, Create Snapshot, Delete, Get, Get Many, Update
  - **Snapshot** (4): Delete, Get, Get Many, Update
  - **NIC** (5): Create, Delete, Get, Get Many, Update
  - **Firewall Rule** (5): Create, Delete, Get, Get Many, Update

  #### Kubernetes (11 operations)
  - **Kubernetes Cluster** (6): Create, Delete, Get, Get Many, Get Kubeconfig, Update
  - **Node Pool** (5): Create, Delete, Get, Get Many, Update

  #### Networking (34 operations)
  - **Private Cross-Connect** (5): Create, Delete, Get, Get Many, Update
  - **Load Balancer** (9): Attach/Detach NIC, Create, Delete, Get (+ Balanced NIC/NICs), Get Many, Update
  - **Network Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources
  - **Application Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources with HTTP rules
  - **Target Group** (5): Create, Delete, Get, Get Many, Update
    - Enhanced with location and protocolVersion properties
  - **NAT Gateway** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Rules subresources

  #### Security (5 operations)
  - **Security Group** (5): Create, Delete, Get, Get Many, Update
    - Full support for Rules subresource with comprehensive rule properties

  </details>

  <details>
  <summary><b>Certificate Manager - Detailed Operations</b></summary>

  #### Certificate Resource (5 operations)
  Upload and manage SSL/TLS certificates manually with full chain and private key support.
  - Create, Delete, Get, Get Many, Update

  #### AutoCertificate Resource (5 operations)
  Configure automatic certificate renewal via ACME providers (Let's Encrypt, etc.).
  - Create, Delete, Get, Get Many, Update
  - **Key Algorithms**: RSA (2048/4096), ECDSA (256/384)
  - **Features**: Subject Alternative Names (SANs), common name, provider selection

  #### Provider Resource (5 operations)
  Configure ACME certificate providers with External Account Binding (EAB) support.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>Cloud DNS - Detailed Operations</b></summary>

  #### Zone Resource (5 operations)
  Manage primary DNS zones.
  - Create, Delete, Get, Get Many, Update

  #### Record Resource (5 operations)
  Manage DNS records with 15 supported types: A, AAAA, ALIAS, CAA, CNAME, DS, HTTPS, MX, NS, SMIMEA, SRV, SSHFP, SVCB, TLSA, TXT
  - Create, Delete, Get, Get Many, Update

  #### SecondaryZone Resource (7 operations)
  Secondary zones with AXFR (zone transfer) support.
  - Create, Delete, Get, Get Many, Update, AXFR Get, AXFR Start

  #### ZoneFile Resource (2 operations)
  Import/export zones in BIND format (RFC 1035).
  - Get (export), Update (import)

  #### Quota Resource (1 operation)
  View DNS resource usage and limits.
  - Get

  #### DNSSEC Resource (3 operations)
  Enable and manage DNSSEC for zones.
  - Create (enable), Delete (disable), Get

  #### ReverseRecord Resource (5 operations)
  Manage reverse DNS (PTR) records for IPv4/IPv6.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>CDN - Detailed Operations</b></summary>

  #### Distribution Resource (5 operations)
  Configure CDN distributions with custom routing rules.
  - Create, Delete, Get, Get Many, Update
  - **Features**: Domain routing, SSL/TLS integration, HTTP/HTTPS schemes, geo-restrictions, upstream origins

  #### Ip Resource (2 operations)
  Get CDN edge server IPs for origin whitelisting.
  - Get, Get Many

  </details>

  <details>
  <summary><b>AI Model Hub - Detailed Operations</b></summary>

  #### Model Resource (2 operations)
  Browse and invoke foundation models for AI inference.
  - Get Many (list available models), Predict (run inference)
  - **Features**: RAG support via collection queries, custom model options, streaming responses

  #### Collection Resource (6 operations)
  Manage vector database collections for document storage and retrieval.
  - Create, Delete, Get, Get Many, Update, Query
  - **Features**: Chunking strategies (sentence/fixed/recursive), embedding models, database types (chromadb/pgvector), semantic search

  #### Document Resource (7 operations)
  Manage documents within collections for RAG applications.
  - Add, Delete, Delete All, Get, Get Many, Get Chunks, Update
  - **Features**: Base64 content encoding, metadata management, chunk retrieval, batch operations

  #### OpenAI Compatible Resource (5 operations)
  Use OpenAI-compatible API endpoints for standardized AI interactions.

  **Chat Completion** - Create chat completions with message history
  - Supports system, user, and assistant message roles
  - Parameters: model, messages (required), temperature, top_p, max_tokens, max_completion_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, response_format, tools, tool_choice, user
  - Compatible with OpenAI chat completion API format

  **Completion** - Simple text completion
  - Parameters: model, prompt (required), temperature, top_p, max_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, user
  - Compatible with OpenAI completion API format

  **Create Embeddings** - Generate vector embeddings from text
  - Parameters: model (default: BAAI/bge-large-en-v1.5), input (single text or comma-separated multiple texts)
  - Returns embedding vectors for semantic search and similarity

  **Generate Image** - Text-to-image generation
  - Parameters: model (default: black-forest-labs/FLUX.1-schnell), prompt (required), n, size (1024x1024, 1024x1792, 1792x1024), response_format (b64_json), user
  - Generates images from text descriptions

  **Get Many** - List available models
  - Returns all models in OpenAI-compatible format
  - Shows model capabilities and availability

  **API Endpoint**: `https://openai.inference.de-txl.ionos.com` (path: `/v1/*`)

  **Features**: Full OpenAI API compatibility, drop-in replacement for OpenAI in existing workflows, comprehensive parameter support

  > **Note:** Model dropdowns are populated dynamically from the IONOS API at runtime (`GET /v1/models`). When models are added or retired, the dropdown lists update automatically without requiring a node update.

  </details>

  ---

  ## Credentials

  All nodes in this package share a single credential type: **IONOS Cloud API**

  Authentication uses the [Cloud API Bearer token](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager).

  The same token works across all IONOS Cloud services (Infrastructure, Certificate Manager, DNS, CDN, and AI Model Hub).

  ## Compatibility

  Tested against n8n version 2.1.5+

  ## Usage

  ### Authentication
  1. Create new credentials in n8n and select "IONOS Cloud API"
  2. Provide your API token (generated from IONOS Cloud Console)
  3. The same credential works for all five nodes

  ### Using the Nodes

  #### Infrastructure
  * Add the "IONOS Cloud (Infrastructure)" node to your workflow
  * Select the resource (e.g., Server, Volume, Datacenter)
  * Choose the operation and configure the required fields

  #### Certificate Manager
  * Add the "IONOS Cloud (Certificate Manager)" node to your workflow
  * Select the resource (Certificate, AutoCertificate, or Provider)
  * Configure certificate properties, domains, and ACME providers

  #### DNS
  * Add the "IONOS Cloud (Cloud DNS)" node to your workflow
  * Select the resource (Zone, Record, SecondaryZone, etc.)
  * Configure DNS zones, records, and DNSSEC settings

  #### CDN
  * Add the "IONOS Cloud (CDN)" node to your workflow
  * Select the resource (Distribution or Ip)
  * Configure CDN distributions with routing rules and upstream origins

  #### AI Model Hub
  * Add the "IONOS Cloud (AI Model Hub)" node to your workflow
  * Select the resource (Model, Collection, Document, or OpenAI Compatible)
  * **Model**: AI inference with native IONOS API
  * **Collection**: Vector database management for RAG
  * **Document**: Manage documents in collections
  * **OpenAI Compatible**: Use OpenAI-compatible endpoints (chat, completions, embeddings, images)

  #### AI Agent Integration (Chat Model & Embeddings Sub-Nodes)

  The **IONOS Cloud Chat Model** and **IONOS Cloud Embeddings** are LangChain sub-nodes that integrate with n8n's built-in AI nodes.

  **Chat Model** — Use IONOS AI Model Hub as the LLM brain for the AI Agent:
  1. Add an **AI Agent** node to your workflow
  2. Click **+** on the AI Agent's **Language Model** input
  3. Select **IONOS Cloud Chat Model**
  4. Choose your credential and pick a model from the auto-populated dropdown
  5. The agent now uses IONOS AI Model Hub for all LLM reasoning

  **Embeddings** — Use IONOS AI Model Hub for text embeddings in RAG pipelines:
  1. Add an **In-Memory Vector Store** (or any vector store node)
  2. Click **+** on the vector store's **Embedding** input
  3. Select **IONOS Cloud Embeddings**
  4. Choose your credential and pick an embedding model

  **Example: AI Agent with RAG**
  ```
  Chat Trigger → AI Agent
                   ├── Language Model: IONOS Cloud Chat Model
                   ├── Memory: Window Buffer Memory
                   └── Tool: Vector Store Tool
                                └── In-Memory Vector Store (Load)
                                         └── Embedding: IONOS Cloud Embeddings
  ```

  > **Note:** The model dropdowns are populated dynamically from the IONOS API at runtime. Both sub-nodes reuse the same **IONOS Cloud API** credential as all other nodes in this package.

  ### Common Patterns

  **Automated SSL Certificate Deployment:**
  1. Use Certificate Manager to create an AutoCertificate
  2. Use CDN node to create a Distribution referencing the certificate ID
  3. Automate certificate renewal with n8n scheduling

  **Infrastructure Provisioning:**
  1. Use Infrastructure node to create Datacenter, Server, and Volume
  2. Use DNS node to create Zone and A/AAAA Records pointing to server IPs
  3. Use Certificate Manager to provision SSL certificates for domains

  **DNS Management:**
  1. Use DNS Zone resource to create zones
  2. Use Record resource to manage DNS records (A, CNAME, MX, TXT, etc.)
  3. Use DNSSEC resource to enable DNSSEC signing
  4. Use ReverseRecord for PTR records

  **AI-Powered Applications with RAG:**
  1. Use AI Model Hub Collection resource to create a vector database
  2. Use Document resource to add knowledge base documents
  3. Use Model Predict operation with collection query for context-aware responses
  4. Automate document updates and model inference in workflows

  **OpenAI-Compatible AI Integration:**
  1. Use OpenAI Compatible Chat Completion for conversational AI
  2. Use Create Embeddings for semantic search and similarity
  3. Use Generate Image for text-to-image generation
  4. Drop-in replacement for OpenAI API in existing n8n workflows

  **AI Agent with IONOS Cloud (native n8n AI integration):**
  1. Use IONOS Cloud Chat Model as the language model for n8n's AI Agent
  2. Use IONOS Cloud Embeddings with Vector Stores for RAG pipelines
  3. Combine with Window Buffer Memory for conversational context
  4. Add Vector Store Tool to give the agent access to your knowledge base
  5. See `examples/ionos-ai-agent-workflow.json` for a ready-to-import workflow

  ### Avoiding Rate Limits

  The IONOS AI Model Hub API enforces rate limits (300 requests/min, 5 requests/sec with a burst of 10). When a node receives multiple input items (e.g., from a preceding "Get All" operation), n8n executes the node once per item, which can trigger `429 Too Many Requests` errors.

  To prevent this, configure **batching** in the node's **Settings** tab:

  1. Open the AI Model Hub node and go to the **Settings** tab
  2. Under **Request Options**, click **Add Option** and select **Batching**
  3. Set **Items per Batch** to `2` (or lower)
  4. Set **Batch Interval (ms)** to `1000` (or higher)

  This ensures n8n processes only a few items at a time with a delay between batches, staying within the API rate limits.

  > **Tip:** If your workflow only needs a single API call (e.g., one Chat Completion), use a **Limit** node before the AI Model Hub node to reduce the input to 1 item.

  ## API Endpoints

  Each node connects to:

  - **Infrastructure**: `https://api.ionos.com/cloudapi/v6/`
  - **Certificate Manager**: `https://certificate-manager.de-fra.ionos.com`
  - **Cloud DNS**: `https://dns.de-fra.ionos.com`
  - **CDN**: `https://cdn.de-fra.ionos.com`
  - **AI Model Hub (Inference API)**: `https://inference.de-txl.ionos.com`
  - **AI Model Hub (OpenAI Compatible API)**: `https://openai.inference.de-txl.ionos.com`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [IONOS Cloud Documentation](https://docs.ionos.com/cloud)
  * [Infrastructure API Documentation](https://api.ionos.com/docs/cloud/v6/)
  * [Certificate Manager API Documentation](https://api.ionos.com/docs/certmanager/v2/)
  * [Cloud DNS API Documentation](https://api.ionos.com/docs/dns/v1/)
  * [CDN API Documentation](https://api.ionos.com/docs/cdn/v1/)
  * [AI Model Hub API Documentation](https://api.ionos.com/docs/inference-modelhub/v1/)
  * [AI Model Hub OpenAI-compatible API Documentation](https://api.ionos.com/docs/inference-openai/v1/)

  ## Contributing

  We welcome contributions! If you find a bug or have a feature request:

  1. Check the [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues) to see if it's already been reported
  2. Open a new issue with a clear description and reproduction steps
  3. For feature requests, explain the use case and expected behavior

  ### Development

  To contribute code:

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

  ## License

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

  ## Support

  - 📖 [Documentation](https://docs.ionos.com/cloud)
  - 💬 [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues)
  - 🌐 [IONOS Cloud](https://www.ionos.com/cloud)
  - 📧 [Support](https://docs.ionos.com/cloud/support/general-information/contact-information)

  ---

  <div align="center">

  Made with ❤️ by the IONOS Cloud team

  </div>

ai_documentation_summary:
  {"purpose":"This node enables interaction with the IONOS Cloud CDN API to manage content delivery network resources within n8n workflows.","capabilities":["Content delivery network configuration","Custom routing setup","Geo-restriction management","CDN resource monitoring","CDN status checks"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Automating CDN configuration for web applications","Managing geo-based content delivery restrictions","Monitoring CDN performance and status"],"limitations":["Limited to 2 resources and 7 operations as specified in the overview table"],"relatedNodes":["IONOS Cloud (Infrastructure)","IONOS Cloud (Certificate Manager)","IONOS Cloud (Cloud DNS)","IONOS Cloud (AI Model Hub)","IONOS Cloud Chat Model"]}


node_type: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudCertificateManager
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (Certificate Manager)
description: Interact with IONOS Cloud Certificate Manager API v2
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-07-14T14:40:33.554Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "certificate",
      "options": [
        {
          "name": "Certificate",
          "value": "certificate",
          "description": "Manage SSL/TLS certificates"
        },
        {
          "name": "Auto Certificate",
          "value": "autoCertificate",
          "description": "Manage auto-renewable certificates"
        },
        {
          "name": "Provider",
          "value": "provider",
          "description": "Manage certificate providers"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a certificate",
          "routing": {
            "request": {
              "url": "/certificates",
              "method": "POST"
            }
          },
          "description": "Create a certificate"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a certificate",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/certificates/{{$parameter.certificateId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a certificate"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a certificate",
          "routing": {
            "request": {
              "url": "=/certificates/{{$parameter.certificateId}}",
              "method": "GET"
            }
          },
          "description": "Get a certificate"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many certificates",
          "routing": {
            "request": {
              "url": "/certificates",
              "method": "GET"
            }
          },
          "description": "Get many certificates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a certificate",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/certificates/{{$parameter.certificateId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a certificate"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "certificate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an auto certificate",
          "routing": {
            "request": {
              "url": "/auto-certificates",
              "method": "POST"
            }
          },
          "description": "Create an auto certificate"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an auto certificate",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an auto certificate"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an auto certificate",
          "routing": {
            "request": {
              "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
              "method": "GET"
            }
          },
          "description": "Get an auto certificate"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many auto certificates",
          "routing": {
            "request": {
              "url": "/auto-certificates",
              "method": "GET"
            }
          },
          "description": "Get many auto certificates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an auto certificate",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an auto certificate"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "autoCertificate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a provider",
          "routing": {
            "request": {
              "url": "/providers",
              "method": "POST"
            }
          },
          "description": "Create a provider"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a provider",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/providers/{{$parameter.providerId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a provider"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a provider",
          "routing": {
            "request": {
              "url": "=/providers/{{$parameter.providerId}}",
              "method": "GET"
            }
          },
          "description": "Get a provider"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many providers",
          "routing": {
            "request": {
              "url": "/providers",
              "method": "GET"
            }
          },
          "description": "Get many providers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a provider",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/providers/{{$parameter.providerId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a provider"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "provider"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a certificate",
      "routing": {
        "request": {
          "url": "/certificates",
          "method": "POST"
        }
      },
      "description": "Create a certificate",
      "resource": "certificate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a certificate",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/certificates/{{$parameter.certificateId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a certificate",
      "resource": "certificate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a certificate",
      "routing": {
        "request": {
          "url": "=/certificates/{{$parameter.certificateId}}",
          "method": "GET"
        }
      },
      "description": "Get a certificate",
      "resource": "certificate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many certificates",
      "routing": {
        "request": {
          "url": "/certificates",
          "method": "GET"
        }
      },
      "description": "Get many certificates",
      "resource": "certificate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a certificate",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/certificates/{{$parameter.certificateId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a certificate",
      "resource": "certificate"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an auto certificate",
      "routing": {
        "request": {
          "url": "/auto-certificates",
          "method": "POST"
        }
      },
      "description": "Create an auto certificate",
      "resource": "autoCertificate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an auto certificate",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an auto certificate",
      "resource": "autoCertificate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an auto certificate",
      "routing": {
        "request": {
          "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
          "method": "GET"
        }
      },
      "description": "Get an auto certificate",
      "resource": "autoCertificate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many auto certificates",
      "routing": {
        "request": {
          "url": "/auto-certificates",
          "method": "GET"
        }
      },
      "description": "Get many auto certificates",
      "resource": "autoCertificate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an auto certificate",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/auto-certificates/{{$parameter.autoCertificateId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an auto certificate",
      "resource": "autoCertificate"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a provider",
      "routing": {
        "request": {
          "url": "/providers",
          "method": "POST"
        }
      },
      "description": "Create a provider",
      "resource": "provider"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a provider",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/providers/{{$parameter.providerId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a provider",
      "resource": "provider"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a provider",
      "routing": {
        "request": {
          "url": "=/providers/{{$parameter.providerId}}",
          "method": "GET"
        }
      },
      "description": "Get a provider",
      "resource": "provider"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many providers",
      "routing": {
        "request": {
          "url": "/providers",
          "method": "GET"
        }
      },
      "description": "Get many providers",
      "resource": "provider"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a provider",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/providers/{{$parameter.providerId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a provider",
      "resource": "provider"
    }
  ]

npm_readme:
  <div align="center">

  <img src="./credentials/ionos.svg" alt="IONOS Cloud" height="80" />&nbsp;&nbsp;&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://n8n.io/brandguidelines/logo-white.svg"><source media="(prefers-color-scheme: light)" srcset="https://n8n.io/brandguidelines/logo-dark.svg"><img src="https://n8n.io/brandguidelines/logo-dark.svg" alt="n8n" height="80" /></picture>

  # n8n Nodes for IONOS Cloud

  [![npm version](https://img.shields.io/npm/v/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![License](https://img.shields.io/npm/l/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/blob/master/LICENSE)
  [![npm downloads](https://img.shields.io/npm/dm/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![n8n](https://img.shields.io/badge/n8n-community-blue.svg)](https://n8n.io)
  ![Official](https://img.shields.io/badge/IONOS%20Cloud-Official-00BFFF.svg)

  **Official IONOS Cloud n8n community nodes**

  Automate your cloud infrastructure, DNS, CDN, certificates, and AI workflows with [n8n](https://n8n.io/)

  [Installation](#installation) • [Operations](#operations) • [Credentials](#credentials) • [Usage](#usage) • [Examples](#common-patterns) • [Resources](#resources)

  </div>

  ---

  ## Overview

  This is the **official** n8n community node package for IONOS Cloud, developed and maintained by the IONOS Cloud team. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  The package provides comprehensive integration with key IONOS Cloud services, enabling you to automate infrastructure provisioning, certificate management, DNS operations, CDN distribution, and AI-powered workflows directly from n8n.

  ## Included Nodes

  This package provides seven separate nodes for different IONOS Cloud services:

  1. **IONOS Cloud (Infrastructure)** - Core infrastructure management
  2. **IONOS Cloud (Certificate Manager)** - SSL/TLS certificate management  
  3. **IONOS Cloud (Cloud DNS)** - Domain name system management
  4. **IONOS Cloud (CDN)** - Content delivery network management
  5. **IONOS Cloud (AI Model Hub)** - AI model inference and RAG capabilities
  6. **IONOS Cloud Chat Model** ⚡ - LangChain sub-node for n8n's AI Agent (language model)
  7. **IONOS Cloud Embeddings** ⚡ - LangChain sub-node for n8n's AI Agent (text embeddings)

  ---

  ## Getting Started

  ### Prerequisites

  Before you begin, you will need:

  1. A [IONOS Cloud account](https://www.ionos.com/enterprise-cloud/signup)
  2. A Cloud API Bearer token ([learn how to generate tokens](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager))
  3. n8n installed (version 2.1.5 or higher)

  ### Installation

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

  #### Quick Installation Steps

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

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

  ## Operations

  ### Overview

  | Node | Resources | Operations | Description |
  |------|-----------|------------|-------------|
  | **Infrastructure** | 21 | 153 | Complete infrastructure management (compute, networking, storage, Kubernetes) |
  | **Certificate Manager** | 3 | 15 | SSL/TLS certificate lifecycle management with ACME support |
  | **Cloud DNS** | 7 | 28 | DNS zones, records (15 types), DNSSEC, zone transfers |
  | **CDN** | 2 | 7 | Content delivery with custom routing and geo-restrictions |
  | **AI Model Hub** | 4 | 20 | Foundation model inference, RAG capabilities, and OpenAI-compatible API |
  | **Chat Model** ⚡ | — | supplyData | LangChain chat model sub-node for n8n AI Agent |
  | **Embeddings** ⚡ | — | supplyData | LangChain embeddings sub-node for n8n AI Agent |

  > ⚡ **Sub-nodes**: The Chat Model and Embeddings nodes are LangChain sub-nodes that plug into n8n's built-in AI nodes (AI Agent, AI Chain, Vector Stores, etc.) rather than operating as standalone workflow nodes.

  > **✨ v1.0.2**: Patch release with enhanced subresource support for load balancers, NAT gateways, security groups, and target groups. Added request monitoring capabilities.


  <details>
  <summary><b>Infrastructure - Detailed Operations</b></summary>

  #### Account & Global Resources (12 operations)
  - **Contract** (1): Get Many
  - **Location** (2): Get, Get Many
  - **Image** (2): Get, Get Many  
  - **IP Block** (4): Create, Delete, Get, Get Many
  - **Request** (3): Get, Get All, Get Status

  #### Core Infrastructure (10 operations)
  - **Datacenter** (5): Create, Delete, Get, Get Many, Update
  - **LAN** (5): Create, Delete, Get, Get Many, Update

  #### Compute Resources (41 operations)
  - **Server** (21): Attach/Detach CDROM/Volume, Create, Delete, Get (+ CDROM/CDROMs/Volume/Volumes/Remote Console/Token), Get Many, Reboot, Resume, Start, Stop, Suspend, Update, Upgrade
  - **Volume** (6): Create, Create Snapshot, Delete, Get, Get Many, Update
  - **Snapshot** (4): Delete, Get, Get Many, Update
  - **NIC** (5): Create, Delete, Get, Get Many, Update
  - **Firewall Rule** (5): Create, Delete, Get, Get Many, Update

  #### Kubernetes (11 operations)
  - **Kubernetes Cluster** (6): Create, Delete, Get, Get Many, Get Kubeconfig, Update
  - **Node Pool** (5): Create, Delete, Get, Get Many, Update

  #### Networking (34 operations)
  - **Private Cross-Connect** (5): Create, Delete, Get, Get Many, Update
  - **Load Balancer** (9): Attach/Detach NIC, Create, Delete, Get (+ Balanced NIC/NICs), Get Many, Update
  - **Network Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources
  - **Application Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources with HTTP rules
  - **Target Group** (5): Create, Delete, Get, Get Many, Update
    - Enhanced with location and protocolVersion properties
  - **NAT Gateway** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Rules subresources

  #### Security (5 operations)
  - **Security Group** (5): Create, Delete, Get, Get Many, Update
    - Full support for Rules subresource with comprehensive rule properties

  </details>

  <details>
  <summary><b>Certificate Manager - Detailed Operations</b></summary>

  #### Certificate Resource (5 operations)
  Upload and manage SSL/TLS certificates manually with full chain and private key support.
  - Create, Delete, Get, Get Many, Update

  #### AutoCertificate Resource (5 operations)
  Configure automatic certificate renewal via ACME providers (Let's Encrypt, etc.).
  - Create, Delete, Get, Get Many, Update
  - **Key Algorithms**: RSA (2048/4096), ECDSA (256/384)
  - **Features**: Subject Alternative Names (SANs), common name, provider selection

  #### Provider Resource (5 operations)
  Configure ACME certificate providers with External Account Binding (EAB) support.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>Cloud DNS - Detailed Operations</b></summary>

  #### Zone Resource (5 operations)
  Manage primary DNS zones.
  - Create, Delete, Get, Get Many, Update

  #### Record Resource (5 operations)
  Manage DNS records with 15 supported types: A, AAAA, ALIAS, CAA, CNAME, DS, HTTPS, MX, NS, SMIMEA, SRV, SSHFP, SVCB, TLSA, TXT
  - Create, Delete, Get, Get Many, Update

  #### SecondaryZone Resource (7 operations)
  Secondary zones with AXFR (zone transfer) support.
  - Create, Delete, Get, Get Many, Update, AXFR Get, AXFR Start

  #### ZoneFile Resource (2 operations)
  Import/export zones in BIND format (RFC 1035).
  - Get (export), Update (import)

  #### Quota Resource (1 operation)
  View DNS resource usage and limits.
  - Get

  #### DNSSEC Resource (3 operations)
  Enable and manage DNSSEC for zones.
  - Create (enable), Delete (disable), Get

  #### ReverseRecord Resource (5 operations)
  Manage reverse DNS (PTR) records for IPv4/IPv6.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>CDN - Detailed Operations</b></summary>

  #### Distribution Resource (5 operations)
  Configure CDN distributions with custom routing rules.
  - Create, Delete, Get, Get Many, Update
  - **Features**: Domain routing, SSL/TLS integration, HTTP/HTTPS schemes, geo-restrictions, upstream origins

  #### Ip Resource (2 operations)
  Get CDN edge server IPs for origin whitelisting.
  - Get, Get Many

  </details>

  <details>
  <summary><b>AI Model Hub - Detailed Operations</b></summary>

  #### Model Resource (2 operations)
  Browse and invoke foundation models for AI inference.
  - Get Many (list available models), Predict (run inference)
  - **Features**: RAG support via collection queries, custom model options, streaming responses

  #### Collection Resource (6 operations)
  Manage vector database collections for document storage and retrieval.
  - Create, Delete, Get, Get Many, Update, Query
  - **Features**: Chunking strategies (sentence/fixed/recursive), embedding models, database types (chromadb/pgvector), semantic search

  #### Document Resource (7 operations)
  Manage documents within collections for RAG applications.
  - Add, Delete, Delete All, Get, Get Many, Get Chunks, Update
  - **Features**: Base64 content encoding, metadata management, chunk retrieval, batch operations

  #### OpenAI Compatible Resource (5 operations)
  Use OpenAI-compatible API endpoints for standardized AI interactions.

  **Chat Completion** - Create chat completions with message history
  - Supports system, user, and assistant message roles
  - Parameters: model, messages (required), temperature, top_p, max_tokens, max_completion_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, response_format, tools, tool_choice, user
  - Compatible with OpenAI chat completion API format

  **Completion** - Simple text completion
  - Parameters: model, prompt (required), temperature, top_p, max_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, user
  - Compatible with OpenAI completion API format

  **Create Embeddings** - Generate vector embeddings from text
  - Parameters: model (default: BAAI/bge-large-en-v1.5), input (single text or comma-separated multiple texts)
  - Returns embedding vectors for semantic search and similarity

  **Generate Image** - Text-to-image generation
  - Parameters: model (default: black-forest-labs/FLUX.1-schnell), prompt (required), n, size (1024x1024, 1024x1792, 1792x1024), response_format (b64_json), user
  - Generates images from text descriptions

  **Get Many** - List available models
  - Returns all models in OpenAI-compatible format
  - Shows model capabilities and availability

  **API Endpoint**: `https://openai.inference.de-txl.ionos.com` (path: `/v1/*`)

  **Features**: Full OpenAI API compatibility, drop-in replacement for OpenAI in existing workflows, comprehensive parameter support

  > **Note:** Model dropdowns are populated dynamically from the IONOS API at runtime (`GET /v1/models`). When models are added or retired, the dropdown lists update automatically without requiring a node update.

  </details>

  ---

  ## Credentials

  All nodes in this package share a single credential type: **IONOS Cloud API**

  Authentication uses the [Cloud API Bearer token](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager).

  The same token works across all IONOS Cloud services (Infrastructure, Certificate Manager, DNS, CDN, and AI Model Hub).

  ## Compatibility

  Tested against n8n version 2.1.5+

  ## Usage

  ### Authentication
  1. Create new credentials in n8n and select "IONOS Cloud API"
  2. Provide your API token (generated from IONOS Cloud Console)
  3. The same credential works for all five nodes

  ### Using the Nodes

  #### Infrastructure
  * Add the "IONOS Cloud (Infrastructure)" node to your workflow
  * Select the resource (e.g., Server, Volume, Datacenter)
  * Choose the operation and configure the required fields

  #### Certificate Manager
  * Add the "IONOS Cloud (Certificate Manager)" node to your workflow
  * Select the resource (Certificate, AutoCertificate, or Provider)
  * Configure certificate properties, domains, and ACME providers

  #### DNS
  * Add the "IONOS Cloud (Cloud DNS)" node to your workflow
  * Select the resource (Zone, Record, SecondaryZone, etc.)
  * Configure DNS zones, records, and DNSSEC settings

  #### CDN
  * Add the "IONOS Cloud (CDN)" node to your workflow
  * Select the resource (Distribution or Ip)
  * Configure CDN distributions with routing rules and upstream origins

  #### AI Model Hub
  * Add the "IONOS Cloud (AI Model Hub)" node to your workflow
  * Select the resource (Model, Collection, Document, or OpenAI Compatible)
  * **Model**: AI inference with native IONOS API
  * **Collection**: Vector database management for RAG
  * **Document**: Manage documents in collections
  * **OpenAI Compatible**: Use OpenAI-compatible endpoints (chat, completions, embeddings, images)

  #### AI Agent Integration (Chat Model & Embeddings Sub-Nodes)

  The **IONOS Cloud Chat Model** and **IONOS Cloud Embeddings** are LangChain sub-nodes that integrate with n8n's built-in AI nodes.

  **Chat Model** — Use IONOS AI Model Hub as the LLM brain for the AI Agent:
  1. Add an **AI Agent** node to your workflow
  2. Click **+** on the AI Agent's **Language Model** input
  3. Select **IONOS Cloud Chat Model**
  4. Choose your credential and pick a model from the auto-populated dropdown
  5. The agent now uses IONOS AI Model Hub for all LLM reasoning

  **Embeddings** — Use IONOS AI Model Hub for text embeddings in RAG pipelines:
  1. Add an **In-Memory Vector Store** (or any vector store node)
  2. Click **+** on the vector store's **Embedding** input
  3. Select **IONOS Cloud Embeddings**
  4. Choose your credential and pick an embedding model

  **Example: AI Agent with RAG**
  ```
  Chat Trigger → AI Agent
                   ├── Language Model: IONOS Cloud Chat Model
                   ├── Memory: Window Buffer Memory
                   └── Tool: Vector Store Tool
                                └── In-Memory Vector Store (Load)
                                         └── Embedding: IONOS Cloud Embeddings
  ```

  > **Note:** The model dropdowns are populated dynamically from the IONOS API at runtime. Both sub-nodes reuse the same **IONOS Cloud API** credential as all other nodes in this package.

  ### Common Patterns

  **Automated SSL Certificate Deployment:**
  1. Use Certificate Manager to create an AutoCertificate
  2. Use CDN node to create a Distribution referencing the certificate ID
  3. Automate certificate renewal with n8n scheduling

  **Infrastructure Provisioning:**
  1. Use Infrastructure node to create Datacenter, Server, and Volume
  2. Use DNS node to create Zone and A/AAAA Records pointing to server IPs
  3. Use Certificate Manager to provision SSL certificates for domains

  **DNS Management:**
  1. Use DNS Zone resource to create zones
  2. Use Record resource to manage DNS records (A, CNAME, MX, TXT, etc.)
  3. Use DNSSEC resource to enable DNSSEC signing
  4. Use ReverseRecord for PTR records

  **AI-Powered Applications with RAG:**
  1. Use AI Model Hub Collection resource to create a vector database
  2. Use Document resource to add knowledge base documents
  3. Use Model Predict operation with collection query for context-aware responses
  4. Automate document updates and model inference in workflows

  **OpenAI-Compatible AI Integration:**
  1. Use OpenAI Compatible Chat Completion for conversational AI
  2. Use Create Embeddings for semantic search and similarity
  3. Use Generate Image for text-to-image generation
  4. Drop-in replacement for OpenAI API in existing n8n workflows

  **AI Agent with IONOS Cloud (native n8n AI integration):**
  1. Use IONOS Cloud Chat Model as the language model for n8n's AI Agent
  2. Use IONOS Cloud Embeddings with Vector Stores for RAG pipelines
  3. Combine with Window Buffer Memory for conversational context
  4. Add Vector Store Tool to give the agent access to your knowledge base
  5. See `examples/ionos-ai-agent-workflow.json` for a ready-to-import workflow

  ### Avoiding Rate Limits

  The IONOS AI Model Hub API enforces rate limits (300 requests/min, 5 requests/sec with a burst of 10). When a node receives multiple input items (e.g., from a preceding "Get All" operation), n8n executes the node once per item, which can trigger `429 Too Many Requests` errors.

  To prevent this, configure **batching** in the node's **Settings** tab:

  1. Open the AI Model Hub node and go to the **Settings** tab
  2. Under **Request Options**, click **Add Option** and select **Batching**
  3. Set **Items per Batch** to `2` (or lower)
  4. Set **Batch Interval (ms)** to `1000` (or higher)

  This ensures n8n processes only a few items at a time with a delay between batches, staying within the API rate limits.

  > **Tip:** If your workflow only needs a single API call (e.g., one Chat Completion), use a **Limit** node before the AI Model Hub node to reduce the input to 1 item.

  ## API Endpoints

  Each node connects to:

  - **Infrastructure**: `https://api.ionos.com/cloudapi/v6/`
  - **Certificate Manager**: `https://certificate-manager.de-fra.ionos.com`
  - **Cloud DNS**: `https://dns.de-fra.ionos.com`
  - **CDN**: `https://cdn.de-fra.ionos.com`
  - **AI Model Hub (Inference API)**: `https://inference.de-txl.ionos.com`
  - **AI Model Hub (OpenAI Compatible API)**: `https://openai.inference.de-txl.ionos.com`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [IONOS Cloud Documentation](https://docs.ionos.com/cloud)
  * [Infrastructure API Documentation](https://api.ionos.com/docs/cloud/v6/)
  * [Certificate Manager API Documentation](https://api.ionos.com/docs/certmanager/v2/)
  * [Cloud DNS API Documentation](https://api.ionos.com/docs/dns/v1/)
  * [CDN API Documentation](https://api.ionos.com/docs/cdn/v1/)
  * [AI Model Hub API Documentation](https://api.ionos.com/docs/inference-modelhub/v1/)
  * [AI Model Hub OpenAI-compatible API Documentation](https://api.ionos.com/docs/inference-openai/v1/)

  ## Contributing

  We welcome contributions! If you find a bug or have a feature request:

  1. Check the [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues) to see if it's already been reported
  2. Open a new issue with a clear description and reproduction steps
  3. For feature requests, explain the use case and expected behavior

  ### Development

  To contribute code:

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

  ## License

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

  ## Support

  - 📖 [Documentation](https://docs.ionos.com/cloud)
  - 💬 [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues)
  - 🌐 [IONOS Cloud](https://www.ionos.com/cloud)
  - 📧 [Support](https://docs.ionos.com/cloud/support/general-information/contact-information)

  ---

  <div align="center">

  Made with ❤️ by the IONOS Cloud team

  </div>

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the IONOS Cloud Certificate Manager API v2 for SSL/TLS certificate lifecycle management.","capabilities":["Create SSL/TLS certificates","Delete SSL/TLS certificates","Get certificate details","List certificates","Update certificates","ACME protocol support","Certificate validation"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Automating SSL certificate provisioning for web servers","Managing certificate expiration and renewal workflows","Integrating certificate management into CI/CD pipelines","Automating domain secure configuration"],"limitations":["Requires IONOS Cloud account and API token setup","Requires n8n version 2.1.5 or higher","Part of community nodes (may require acceptance of risks)"],"relatedNodes":["IONOS Cloud (Infrastructure)","IONOS Cloud (Cloud DNS)","IONOS Cloud (CDN)","IONOS Cloud (AI Model Hub)","IONOS Cloud Chat Model"]}


