# nodes

node_type: n8n-nodes-leadtable.leadTableTrigger
package_name: n8n-nodes-leadtable
display_name: LeadTable Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: rjsebening
author_github_url: https://github.com/rjsebening/
npm_package_name: n8n-nodes-leadtable
npm_version: 1.0.15
community_fetched_at: 2026-07-14T14:40:34.235Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Trigger workflows on LeadTable events - Integration with LeadTable API (powered by agentur-systeme.de)

npm_readme:
  # n8n-nodes-leadtable

  ![LeadTable Node](https://img.shields.io/badge/n8n-community--node-FF6D5A)  
  ![Version](https://img.shields.io/badge/version-1.0.0-blue)  
  ![License](https://img.shields.io/badge/license-MIT-green)

  A professional n8n custom node for seamless integration with the LeadTable API. Automate your lead-management workflows with full CRUD operations and real-time webhook support.

  ## What is n8n?

  n8n is an easy-to-use workflow automation tool that connects different apps and services, like LeadTable.  
  By creating "workflows" between apps, you can automate many manual tasks – saving you and your team valuable time.

  ## ⚖️ Legal Notice

  This Community Node uses the public LeadTable API and is **not affiliated with, endorsed, or sponsored by LeadTable**.  
  All trademarks are the property of their respective owners.

  **Note**: This is a community-developed Node for the LeadTable API. For official support, please contact LeadTable directly.

  ## 🚀 Overview

  This n8n custom node enables full integration with LeadTable — a leading lead-management platform. From automatic lead creation to real-time notifications on status changes, you can automate the entire lead lifecycle without writing a single line of code.

  ## ✨ Key Features

  ### 📊 **Full Lead Management**

  - **Create Lead**: Create new leads with custom data fields
  - **Get Lead**: Retrieve detailed lead information with flexible formatting options
  - **Update Lead**: Dynamic question–answer system for updating lead data
  - **Search Lead**: Powerful email-based search
  - **File Upload**: Attach documents and files directly to leads

  ### ⚡ **Real-Time Automation**

  - **Webhook Trigger**: Instantly react to lead events
  - **Multi-Level Webhooks**: Agency-, customer-, and campaign-specific triggers
  - **Event Types**: New leads, status changes, data updates
  - **Auto Lead Details**: Intelligent enrichment of webhook payloads

  ### 🏢 **Comprehensive Account Management**

  - **Customer Management**: List all customers with pagination
  - **Campaign Management**: Fetch campaigns per customer
  - **Hierarchical Structure**: Agency → Customer → Campaign → Leads

  ### 🔐 **Secure API Integration**

  - **Dual Authentication**: API key + email verification
  - **Connection Test**: Automatic authentication check
  - **Error Handling**: Robust handling with informative messages

  ## 📦 Installation

  ### Requirements

  - n8n version 1.0.0 or higher
  - Active LeadTable account with a valid API key

  ## 🔧 Configuration

  ### Installation in n8n

  This node can be installed using the **Community Nodes** feature in n8n.

  1. Open your n8n instance
  2. Go to **Settings → Community Nodes → Install**
  3. Enter one of the following package names:

  #### Variant 1 – Scoped (personal scope)

  ```

  @rjsebening/n8n-nodes-leadtable

  ```

  #### Variant 2 – Unscoped (default)

  ```

  n8n-nodes-leadtable

  ```

  Both packages contain the same code. The scoped version exists to avoid name conflicts with future official packages.

  4. Restart n8n → the node is available

  ### Set Up API Credentials

  1.  In n8n, go to **Credentials** → **Create New**
  2.  Search for **“LeadTable API”**
  3.  Enter your credentials:
      - **API Key**: Your LeadTable API key
      - **Email**: Your LeadTable account email
      - **Base URL**: `https://api.lead-table.com/api/v3/external`

  ### Obtain Your API Key

  1.  Log in to LeadTable
  2.  Navigate to **Settings** → **API**
  3.  Generate a new API key
  4.  Copy the key and your account email

  ### LeadTable Node (Manual Actions)

  #### **Lead Management**

  Action

  Description

  **Create Lead**

  Create a new lead in a campaign with custom data

  **Get Lead**

  Load lead details (optional: plain-text description)

  **Update Lead**

  Modify lead information via a Q&A flow

  **Update Description**

  Edit only the lead description

  **Search by Email**

  Find leads by email address (with pagination)

  **List by Campaign**

  Load all leads for a campaign (with pagination)

  **Attach File**

  Upload a file and link it to a lead

  #### **Account Management**

  Action

  Description

  **List All Customers**

  Full customer list (with pagination)

  **List All Campaigns**

  Load campaigns for a specific customer

  #### **Webhook Management**

  Action

  Description

  **Register Webhook**

  Register a webhook for events (multi-level)

  **Remove Webhook**

  Delete a registered webhook

  **Fetch Webhook Events**

  Retrieve pending events (polling)

  #### **Authentication**

  Action

  Description

  **Test Authentication**

  Verify API connection and credentials

  ### LeadTable Trigger (Automatic Events)

  #### **Event Types**

  - **New Lead Created**: Fired whenever a new lead is created
  - **Lead Status Changed**: Fired on status transitions
  - **Lead Updated**: Fired on any data change

  #### **Webhook Levels**

  - **Agency (Global)**: Events from all campaigns in the agency
  - **Customer**: Events from all campaigns of a specific customer
  - **Table (Campaign)**: Events only from a specific campaign

  #### **Advanced Features**

  - **Include Lead Details**: Automatically load full lead info
  - **Automatic Webhook Management**: Register on activation, remove on deactivation
  - **Real-Time Processing**: Immediate event handling without delay

  ## 📖 Examples

  -   Automatically create deals in your CRM when a new LeadTable lead comes in
      
  -   Notify your sales team on Slack or Teams instantly
      
  -   Enrich leads with external data before passing them on
      
  -   Build complete onboarding pipelines triggered by LeadTable 

  ## 🌍 Why this matters

  LeadTable helps agencies get the most from campaigns.  
  But **without proper automation, leads often get stuck in spreadsheets or inboxes**.

  This node changes that.  
  It connects LeadTable with your systems — making sure **every lead is processed, followed up, and monetized automatically**.

  ## 📬 About the Author

  I’m [Rezk Jörg Sebening](https://github.com/rjsebening) – Business Automation Expert (DACH).  
  I build automation systems & n8n nodes that free agencies, coaches, and consultants from manual work.

  👉 Follow me on GitHub to stay updated with new DACH-focused integrations.


  ## 📋 Disclaimer

  This unofficial community Node is **not affiliated with, supported, or sponsored by LeadTable**.  
  It only provides an interface to the publicly available LeadTable API under its terms of use.

  **Important Notes:**

  - This Node is developed and maintained by the community
  - For issues with the LeadTable API itself, please contact official LeadTable support
  - All LeadTable trademarks and logos belong to LeadTable
  - This Node only acts as a connector to the public API

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when specific events occur in LeadTable (new leads, status changes, data updates) and provides full CRUD operations for lead management.","capabilities":["Webhook trigger on new lead creation","Webhook trigger on lead status changes","Webhook trigger on lead data updates","Multi-level webhook support (Agency, Customer, Campaign)","Create new leads with custom data fields","Retrieve detailed lead information","Update lead data via dynamic question-answer system","Search leads by email address","Attach files/documents to leads","List all customers with pagination"],"authentication":"API key + email verification","commonUseCases":["Automatically create deals in CRM when a new LeadTable lead arrives","Instantly notify sales teams on Slack or Teams","Enrich leads with external data before passing to other systems","Build complete onboarding pipelines triggered by LeadTable","Automate lead lifecycle management without manual intervention"],"limitations":["Community-developed node, not officially affiliated with or endorsed by LeadTable","Official support must be contacted directly with LeadTable","Requires n8n version 1.0.0 or higher","Requires active LeadTable account with valid API key"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest","n8n-nodes-base.email","n8n-nodes-base.slack","n8n-nodes-base.teams"]}


node_type: n8n-nodes-rd.rdStationCrm
package_name: n8n-nodes-rd
display_name: RD Station CRM
description: Interact with RD Station CRM
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: thiagozf
author_github_url: https://github.com/ResultadosDigitais/
npm_package_name: n8n-nodes-rd
npm_version: 0.0.6
community_fetched_at: 2026-07-14T14:40:34.236Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "deals",
      "options": [
        {
          "name": "Company",
          "value": "companies"
        },
        {
          "name": "Contact",
          "value": "contacts"
        },
        {
          "name": "Deal",
          "value": "deals"
        },
        {
          "name": "Metadata (Config)",
          "value": "metadata"
        },
        {
          "name": "Product",
          "value": "products"
        },
        {
          "name": "Task",
          "value": "tasks"
        },
        {
          "name": "Webhook",
          "value": "webhooks"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a deal"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List deals"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a deal"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deals"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List contacts"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact by ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List companies"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a company by ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a company"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "companies"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List tasks"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task by ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tasks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List products"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "products"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a webhook by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List webhooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhooks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPipelines",
      "options": [
        {
          "name": "Get Pipelines",
          "value": "getPipelines",
          "action": "List pipelines and stages"
        },
        {
          "name": "Get Custom Fields",
          "value": "getCustomFields",
          "action": "List deal custom fields"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "List active users"
        },
        {
          "name": "Get Deal Sources",
          "value": "getDealSources",
          "action": "List deal sources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "metadata"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a deal",
      "resource": "deals"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List deals",
      "resource": "deals"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a deal",
      "resource": "deals"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List contacts",
      "resource": "contacts"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact by ID",
      "resource": "contacts"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "resource": "contacts"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "resource": "contacts"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List companies",
      "resource": "companies"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a company by ID",
      "resource": "companies"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a company",
      "resource": "companies"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a company",
      "resource": "companies"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List tasks",
      "resource": "tasks"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task by ID",
      "resource": "tasks"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "resource": "tasks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "resource": "tasks"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List products",
      "resource": "products"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "resource": "products"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "resource": "products"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "resource": "products"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "resource": "webhooks"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "resource": "webhooks"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a webhook by ID",
      "resource": "webhooks"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List webhooks",
      "resource": "webhooks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "resource": "webhooks"
    },
    {
      "name": "Get Pipelines",
      "value": "getPipelines",
      "action": "List pipelines and stages",
      "resource": "metadata"
    },
    {
      "name": "Get Custom Fields",
      "value": "getCustomFields",
      "action": "List deal custom fields",
      "resource": "metadata"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "List active users",
      "resource": "metadata"
    },
    {
      "name": "Get Deal Sources",
      "value": "getDealSources",
      "action": "List deal sources",
      "resource": "metadata"
    }
  ]

npm_readme:
  # n8n-nodes-rd

  Community node to integrate n8n with **RD Station**.

  This package adds two nodes to n8n:

  - **RD Station CRM**: read/write operations for CRM resources.
  - **RD Station CRM Trigger**: trigger workflows from RD Station CRM webhook events.

  ## Implemented resources

  | Resource                  | Operations                                                    |
  | ------------------------- | ------------------------------------------------------------- |
  | Deals                     | Create, Get Many, Update                                      |
  | Contacts                  | Get Many, Get, Create, Update                                 |
  | Companies (Organizations) | Get Many, Get, Create, Update                                 |
  | Tasks                     | Get Many, Get, Create, Update                                 |
  | Products                  | Get Many, Get, Create, Update                                 |
  | Webhooks                  | Create, Delete, Get, Get Many, Update                         |
  | Metadata (Config)         | Get Pipelines, Get Custom Fields, Get Users, Get Deal Sources |

  ### `RD Station CRM Trigger` events

  - `crm_contact_created`
  - `crm_contact_updated`
  - `crm_deal_created`
  - `crm_deal_updated`
  - `crm_organization_created`
  - `crm_organization_updated`

  ## Authentication

  Credential: **RD Station CRM (OAuth2)**.

  - Supports **Staging** and **Production** environments.
  - OAuth2 URLs are automatically adjusted based on the selected environment.
  - API base URL used by the node:
    - Production: `https://api.rd.services/crm/v2`
    - Staging: `https://api-staging.rd.services/crm/v2`

  Official API documentation:

  - <https://developers.rdstation.com/reference>

  ## Installation

  In n8n (Community Nodes):

  1. Go to **Settings** > **Community Nodes**.
  2. Click **Install**.
  3. Enter the package name: `n8n-nodes-rdstation-crm`.
  4. Complete installation and reload the editor if needed.

  ## Quick start

  ### 1) List contacts

  - Node: `RD Station CRM`
  - Resource: `Contact`
  - Operation: `Get Many`
  - Optional: apply RDQL filters (name, email, date, custom field, etc.)

  ### 2) Create deal

  - Node: `RD Station CRM`
  - Resource: `Deal`
  - Operation: `Create`
  - Minimum fields: `Name`, `Owner ID`

  ### 3) Trigger workflow on deal update

  - Node: `RD Station CRM Trigger`
  - Event: `Deal Updated`
  - Optional: configure `Authentication Header` + `Authentication Key`

  ## Filters, pagination, and validations

  - List operations support `Return All`, `Limit`, and `Page Size`.
  - Resources use field-based RDQL filters (including custom fields by slug when applicable).
  - Primary entity IDs (deals, contacts, companies, products, etc.) are validated as **24-hex**.
  - Webhook IDs in the `Webhook` resource are validated as **UUID**.
  - In webhook settings, `Authentication Header` and `Authentication Key` must be provided together.
  - For `Deal > Create`, the allowed creation status is `ongoing`.

  ## Local development

  ```bash
  npm install
  npm run build
  npm run dev
  npm run lint
  ```

  ## Quality and publishing (Verified Community Node checklist)

  Based on the community node publishing reference and n8n ecosystem guidelines, this package should maintain:

  1. **Code transparency**
     - Public GitHub repository.
     - Clear, auditable node source code and README.
  2. **Package identity**
     - Package name following the community node pattern (`n8n-nodes-*`).
     - Consistent metadata in `package.json` (keywords, license, nodes, credentials).
  3. **Documentation**
     - README with credentials, operations, examples, and limitations.
  4. **Quality**
     - Run local linting and review before publishing.
     - (Optional) community package scanner:

       ```bash
       npx @n8n/scan-community-package n8n-nodes-rdstation-crm
       ```

  5. **Submission**
     - Publish to npm and submit via the n8n Creator Portal with the correct links.

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"Enables read/write operations for RD Station CRM resources (Deals, Contacts, Companies, Tasks, Products, Webhooks) and triggers workflows on CRM events.","capabilities":["Create CRM resources (Deals, Contacts, Companies, Tasks, Products, Webhooks)","Retrieve CRM resources (Get, Get Many)","Update CRM resources","Delete CRM resources (Webhooks)","Apply RDQL filters for list operations","Support pagination (Return All, Limit, Page Size)","Trigger workflows on CRM events (Contact/Deal/Organization created or updated)","Validate primary entity IDs (24-hex format)","Support Staging and Production environments"],"authentication":"OAuth2","commonUseCases":["List and filter CRM contacts using RDQL","Create new deals with specific status","Automate workflows when deals or contacts are updated","Manage CRM organizations and tasks","Sync data between n8n and RD Station CRM"],"limitations":["Deal creation is restricted to 'ongoing' status only","Primary entity IDs must be 24-hex characters","Webhook IDs must be UUIDs","Authentication Header and Key must be provided together for webhooks"],"relatedNodes":["n8n-nodes-rd.rdStationCrmTrigger","n8n-nodes-rd.rdStationCrm"]}


node_type: n8n-nodes-rd.rdStationCrmTrigger
package_name: n8n-nodes-rd
display_name: RD Station CRM Trigger
description: Starts the workflow when a selected RD Station CRM event happens
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: thiagozf
author_github_url: https://github.com/ResultadosDigitais/
npm_package_name: n8n-nodes-rd
npm_version: 0.0.6
community_fetched_at: 2026-07-14T14:40:34.237Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-rd

  Community node to integrate n8n with **RD Station**.

  This package adds two nodes to n8n:

  - **RD Station CRM**: read/write operations for CRM resources.
  - **RD Station CRM Trigger**: trigger workflows from RD Station CRM webhook events.

  ## Implemented resources

  | Resource                  | Operations                                                    |
  | ------------------------- | ------------------------------------------------------------- |
  | Deals                     | Create, Get Many, Update                                      |
  | Contacts                  | Get Many, Get, Create, Update                                 |
  | Companies (Organizations) | Get Many, Get, Create, Update                                 |
  | Tasks                     | Get Many, Get, Create, Update                                 |
  | Products                  | Get Many, Get, Create, Update                                 |
  | Webhooks                  | Create, Delete, Get, Get Many, Update                         |
  | Metadata (Config)         | Get Pipelines, Get Custom Fields, Get Users, Get Deal Sources |

  ### `RD Station CRM Trigger` events

  - `crm_contact_created`
  - `crm_contact_updated`
  - `crm_deal_created`
  - `crm_deal_updated`
  - `crm_organization_created`
  - `crm_organization_updated`

  ## Authentication

  Credential: **RD Station CRM (OAuth2)**.

  - Supports **Staging** and **Production** environments.
  - OAuth2 URLs are automatically adjusted based on the selected environment.
  - API base URL used by the node:
    - Production: `https://api.rd.services/crm/v2`
    - Staging: `https://api-staging.rd.services/crm/v2`

  Official API documentation:

  - <https://developers.rdstation.com/reference>

  ## Installation

  In n8n (Community Nodes):

  1. Go to **Settings** > **Community Nodes**.
  2. Click **Install**.
  3. Enter the package name: `n8n-nodes-rdstation-crm`.
  4. Complete installation and reload the editor if needed.

  ## Quick start

  ### 1) List contacts

  - Node: `RD Station CRM`
  - Resource: `Contact`
  - Operation: `Get Many`
  - Optional: apply RDQL filters (name, email, date, custom field, etc.)

  ### 2) Create deal

  - Node: `RD Station CRM`
  - Resource: `Deal`
  - Operation: `Create`
  - Minimum fields: `Name`, `Owner ID`

  ### 3) Trigger workflow on deal update

  - Node: `RD Station CRM Trigger`
  - Event: `Deal Updated`
  - Optional: configure `Authentication Header` + `Authentication Key`

  ## Filters, pagination, and validations

  - List operations support `Return All`, `Limit`, and `Page Size`.
  - Resources use field-based RDQL filters (including custom fields by slug when applicable).
  - Primary entity IDs (deals, contacts, companies, products, etc.) are validated as **24-hex**.
  - Webhook IDs in the `Webhook` resource are validated as **UUID**.
  - In webhook settings, `Authentication Header` and `Authentication Key` must be provided together.
  - For `Deal > Create`, the allowed creation status is `ongoing`.

  ## Local development

  ```bash
  npm install
  npm run build
  npm run dev
  npm run lint
  ```

  ## Quality and publishing (Verified Community Node checklist)

  Based on the community node publishing reference and n8n ecosystem guidelines, this package should maintain:

  1. **Code transparency**
     - Public GitHub repository.
     - Clear, auditable node source code and README.
  2. **Package identity**
     - Package name following the community node pattern (`n8n-nodes-*`).
     - Consistent metadata in `package.json` (keywords, license, nodes, credentials).
  3. **Documentation**
     - README with credentials, operations, examples, and limitations.
  4. **Quality**
     - Run local linting and review before publishing.
     - (Optional) community package scanner:

       ```bash
       npx @n8n/scan-community-package n8n-nodes-rdstation-crm
       ```

  5. **Submission**
     - Publish to npm and submit via the n8n Creator Portal with the correct links.

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow automatically when specific events occur in an RD Station CRM account, such as new or updated contacts, deals, or organizations.","capabilities":["Monitor for CRM contact creation events","Monitor for CRM contact update events","Monitor for CRM deal creation events","Monitor for CRM deal update events","Monitor for CRM organization creation events","Monitor for CRM organization update events","Support Staging and Production environments","Configure authentication headers and keys for webhook events"],"authentication":"OAuth2 (RD Station CRM Credential)","commonUseCases":["Automatically create tasks when a new deal is created","Send notifications when a contact is updated","Trigger email sequences upon deal creation","Sync CRM data to other systems on real-time events"],"limitations":["Only supports specific webhook events (contact/deal/organization create and update)","Deal creation requires specific status 'ongoing'","Primary entity IDs must be validated as 24-hex format","Webhook IDs must be validated as UUID format"],"relatedNodes":["RD Station CRM (Read/Write Operations)"]}


node_type: n8n-nodes-zai.zaiImage
package_name: n8n-nodes-zai
display_name: Z.ai Image
description: Generate images using Z.ai models (CogView-4, GLM-Image)
category: AI
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ali_shan806
author_github_url: https://github.com/AliShan85/
npm_package_name: n8n-nodes-zai
npm_version: 0.3.0
community_fetched_at: 2026-07-14T14:40:34.239Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-zai

  n8n community node for integrating [Z.ai](https://open.bigmodel.cn/) (GLM) models into your workflows. Provides AI chat completions with streaming support and image generation using GLM-Image and CogView-4 models.

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

  ## Included Nodes

  | Node          | Description |
  |---------------|-------------|
  | **Z.ai Chat** | AI chat completions with GLM language models (streaming, web search, safety settings) |
  | **Z.ai Image** | Generate images from text prompts using GLM-Image and CogView-4 models |

  Both nodes share the same **Zai API** credential.

  ## Installation

  ### Using npm

  ```bash
  npm install n8n-nodes-zai
  ```

  ### In n8n

  1. Go to **Settings** > **Community Nodes**
  2. Click **Add** and search for `n8n-nodes-zai`
  3. Click **Install**

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

  ## Credentials

  To use these nodes, you need a Z.ai API key:

  1. Visit [Z.ai Open Platform](https://open.bigmodel.cn/)
  2. Sign up for an account
  3. Navigate to **API Keys** section
  4. Create a new API key
  5. In n8n, create a new **Zai API** credential and paste your API key

  **Note**: The Z.ai API provides free tiers for Flash models, making it easy to get started without costs.

  ---

  ## Z.ai Chat

  AI chat completions using Z.ai's GLM language models. Designed to work with n8n's AI Agent and Basic LLM Chain nodes.

  ### Supported Models

  - **GLM-4.5** - Mixture-of-Experts model for AI agents
  - **GLM-4.5-Flash** - Free tier for agentic tasks
  - **GLM-4.5-Air** - Lightweight model
  - **GLM-4.6** - 200K context window for long conversations
  - **GLM-4.7** - Flagship model with strong coding capabilities (default)
  - **GLM-4.7-Flash** - Free tier with latest features
  - **GLM-4.7-FlashX** - Ultra-fast model for low-latency applications
  - **GLM-4-32B-0414-128K** - 128K context for long documents
  - **GLM-5** - Latest generation flagship for complex reasoning
  - **GLM-5-Code** - Specialized for advanced software development
  - **GLM-5-Turbo** - High-performance with speed and reasoning balance
  - **CodeGeeX** - Specialized model for coding tasks

  ### Parameters

  **Model**: Select which GLM model to use (default: GLM-4.7)

  **Built-in Tools:**
  - **Web Search**: Enable the model to search the web for current information
    - **Search Context Size**: Amount of context for search (low/medium/high)
    - **Allowed Domains**: Restrict search to specific domains (comma-separated)

  **Options:**
  - **Temperature**: Control randomness (0.0 - 2.0, default: 0.7)
  - **Max Tokens**: Maximum tokens in the response (default: 4096)
  - **Top P**: Nucleus sampling parameter (0.0 - 1.0, default: 1.0)
  - **Top K**: Remove low probability responses (-1 to disable, 0-32, default: -1)
  - **Safety Settings**: Configure content moderation filters
    - **Categories**: Harassment, Hate Speech, Sexually Explicit, Dangerous Content
    - **Thresholds**: Block Low and Above, Block Medium and Above, Block Only High, Block None
  - **Timeout**: Request timeout in milliseconds (default: 0, no timeout)

  ---

  ## Z.ai Image

  Generate images from text prompts using Z.ai's image generation models.

  ### Supported Models

  - **GLM-Image** - High-quality image generation (default)
  - **CogView-4** - Fast image generation

  ### Parameters

  **Model**: Select which image model to use (default: GLM-Image)

  **Prompt**: Text description of the image to generate (required)

  **Size**: Resolution presets differ per model:

  | GLM-Image | CogView-4 |
  |-----------|-----------|
  | 1280 x 1280 (default) | 1024 x 1024 (default) |
  | 1568 x 1056 | 768 x 1344 |
  | 1056 x 1568 | 864 x 1152 |
  | 1472 x 1088 | 1344 x 768 |
  | 1088 x 1472 | 1152 x 864 |
  | 1728 x 960 | 1440 x 720 |
  | 960 x 1728 | 720 x 1440 |
  | Custom | Custom |

  **Custom Dimensions:**
  - GLM-Image: 1024-2048px, must be a multiple of 32
  - CogView-4: 512-2048px, must be a multiple of 16

  **Options:**
  - **Quality**: HD (more detailed, ~20s) or Standard (faster, ~5-10s)
  - **User ID**: End-user identifier for abuse prevention (6-128 characters)
  - **File Name**: Custom file name for the output image
  - **Timeout**: Request timeout in milliseconds (default: 0, no timeout)

  ### Output

  Each generated image is returned as binary data (viewable in n8n) with the following metadata:

  | Field | Description |
  |-------|-------------|
  | `model` | Model used for generation |
  | `prompt` | Text prompt submitted |
  | `size` | Image resolution |
  | `created` | Unix timestamp of creation |
  | `url` | Temporary image URL (expires after 30 days) |
  | `contentFilter` | Content safety information |
  | `fileName` | Output file name |

  ---

  ## Usage Examples

  ### AI Agent Chat

  Connect the **Z.ai Chat Model** node to an AI Agent or Basic LLM Chain in n8n. Select a model, configure options, and let the agent handle conversations.

  ### Free Tier Usage

  Use **GLM-4.5-Flash** or **GLM-4.7-Flash** for free AI-powered text generation.

  ### Coding Tasks

  Use **CodeGeeX**, **GLM-4.7**, or **GLM-5-Code** for code generation, debugging, and explanation.

  ### Web Search Integration

  Enable the **Web Search** built-in tool on the Chat Model node to give the model access to current information. Configure search context size and restrict to specific domains.

  ### Image Generation

  Use the **Z.ai Image** node with a text prompt to generate images. Output is binary data that can be passed to downstream nodes for saving, emailing, or further processing.

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with**: n8n 1.60.0+

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Z.ai API Documentation](https://open.bigmodel.cn/dev/api)
  * [Z.ai Platform](https://open.bigmodel.cn/)
  * [n8n Community Forum](https://community.n8n.io/)

  ## License

  [MIT](LICENSE.md)

  ## Contributing

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

  ## Support

  If you encounter any issues or have questions:
  - Open an issue on [GitHub](https://github.com/AliShan85/ZAiChatNode/issues)
  - Visit the [n8n Community Forum](https://community.n8n.io/)

  ## Author

  Ali Shan (aliishann806@gmail.com)

ai_documentation_summary:
  {"purpose":"The Z.ai Image node generates images from text prompts using Z.ai's GLM-Image and CogView-4 models within n8n workflows.","capabilities":["Text-to-image generation using GLM-Image model","Text-to-image generation using CogView-4 model","Custom image resolution support (multiple presets and custom dimensions)","Quality selection (HD or Standard)","Binary image output for downstream processing","Content safety filtering","Custom filename assignment","User ID tracking for abuse prevention"],"authentication":"Zai API credential (API key required)","commonUseCases":["Generating marketing or social media images from text descriptions","Creating visual assets for content creation workflows","Producing custom illustrations or graphics","Generating images for AI agent responses"],"limitations":["Free tier available but may have usage limits","HD quality takes longer (~20s) compared to Standard (~5-10s)","Output images are temporary URLs that expire after 30 days","Custom dimensions have specific pixel constraints (GLM-Image: multiples of 32, CogView-4: multiples of 16)","User ID must be 6-128 characters"],"relatedNodes":["Z.ai Chat","AI Agent","Basic LLM Chain","Binary File Node","HTTP Request"]}


node_type: n8n-nodes-zai.zaiChat
package_name: n8n-nodes-zai
display_name: Z.ai Chat
description: Converse with Zai AI language models
category: assistant
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "ai_languageModel"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ali_shan806
author_github_url: https://github.com/AliShan85/
npm_package_name: n8n-nodes-zai
npm_version: 0.3.0
community_fetched_at: 2026-07-14T14:40:34.239Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-zai

  n8n community node for integrating [Z.ai](https://open.bigmodel.cn/) (GLM) models into your workflows. Provides AI chat completions with streaming support and image generation using GLM-Image and CogView-4 models.

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

  ## Included Nodes

  | Node          | Description |
  |---------------|-------------|
  | **Z.ai Chat** | AI chat completions with GLM language models (streaming, web search, safety settings) |
  | **Z.ai Image** | Generate images from text prompts using GLM-Image and CogView-4 models |

  Both nodes share the same **Zai API** credential.

  ## Installation

  ### Using npm

  ```bash
  npm install n8n-nodes-zai
  ```

  ### In n8n

  1. Go to **Settings** > **Community Nodes**
  2. Click **Add** and search for `n8n-nodes-zai`
  3. Click **Install**

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

  ## Credentials

  To use these nodes, you need a Z.ai API key:

  1. Visit [Z.ai Open Platform](https://open.bigmodel.cn/)
  2. Sign up for an account
  3. Navigate to **API Keys** section
  4. Create a new API key
  5. In n8n, create a new **Zai API** credential and paste your API key

  **Note**: The Z.ai API provides free tiers for Flash models, making it easy to get started without costs.

  ---

  ## Z.ai Chat

  AI chat completions using Z.ai's GLM language models. Designed to work with n8n's AI Agent and Basic LLM Chain nodes.

  ### Supported Models

  - **GLM-4.5** - Mixture-of-Experts model for AI agents
  - **GLM-4.5-Flash** - Free tier for agentic tasks
  - **GLM-4.5-Air** - Lightweight model
  - **GLM-4.6** - 200K context window for long conversations
  - **GLM-4.7** - Flagship model with strong coding capabilities (default)
  - **GLM-4.7-Flash** - Free tier with latest features
  - **GLM-4.7-FlashX** - Ultra-fast model for low-latency applications
  - **GLM-4-32B-0414-128K** - 128K context for long documents
  - **GLM-5** - Latest generation flagship for complex reasoning
  - **GLM-5-Code** - Specialized for advanced software development
  - **GLM-5-Turbo** - High-performance with speed and reasoning balance
  - **CodeGeeX** - Specialized model for coding tasks

  ### Parameters

  **Model**: Select which GLM model to use (default: GLM-4.7)

  **Built-in Tools:**
  - **Web Search**: Enable the model to search the web for current information
    - **Search Context Size**: Amount of context for search (low/medium/high)
    - **Allowed Domains**: Restrict search to specific domains (comma-separated)

  **Options:**
  - **Temperature**: Control randomness (0.0 - 2.0, default: 0.7)
  - **Max Tokens**: Maximum tokens in the response (default: 4096)
  - **Top P**: Nucleus sampling parameter (0.0 - 1.0, default: 1.0)
  - **Top K**: Remove low probability responses (-1 to disable, 0-32, default: -1)
  - **Safety Settings**: Configure content moderation filters
    - **Categories**: Harassment, Hate Speech, Sexually Explicit, Dangerous Content
    - **Thresholds**: Block Low and Above, Block Medium and Above, Block Only High, Block None
  - **Timeout**: Request timeout in milliseconds (default: 0, no timeout)

  ---

  ## Z.ai Image

  Generate images from text prompts using Z.ai's image generation models.

  ### Supported Models

  - **GLM-Image** - High-quality image generation (default)
  - **CogView-4** - Fast image generation

  ### Parameters

  **Model**: Select which image model to use (default: GLM-Image)

  **Prompt**: Text description of the image to generate (required)

  **Size**: Resolution presets differ per model:

  | GLM-Image | CogView-4 |
  |-----------|-----------|
  | 1280 x 1280 (default) | 1024 x 1024 (default) |
  | 1568 x 1056 | 768 x 1344 |
  | 1056 x 1568 | 864 x 1152 |
  | 1472 x 1088 | 1344 x 768 |
  | 1088 x 1472 | 1152 x 864 |
  | 1728 x 960 | 1440 x 720 |
  | 960 x 1728 | 720 x 1440 |
  | Custom | Custom |

  **Custom Dimensions:**
  - GLM-Image: 1024-2048px, must be a multiple of 32
  - CogView-4: 512-2048px, must be a multiple of 16

  **Options:**
  - **Quality**: HD (more detailed, ~20s) or Standard (faster, ~5-10s)
  - **User ID**: End-user identifier for abuse prevention (6-128 characters)
  - **File Name**: Custom file name for the output image
  - **Timeout**: Request timeout in milliseconds (default: 0, no timeout)

  ### Output

  Each generated image is returned as binary data (viewable in n8n) with the following metadata:

  | Field | Description |
  |-------|-------------|
  | `model` | Model used for generation |
  | `prompt` | Text prompt submitted |
  | `size` | Image resolution |
  | `created` | Unix timestamp of creation |
  | `url` | Temporary image URL (expires after 30 days) |
  | `contentFilter` | Content safety information |
  | `fileName` | Output file name |

  ---

  ## Usage Examples

  ### AI Agent Chat

  Connect the **Z.ai Chat Model** node to an AI Agent or Basic LLM Chain in n8n. Select a model, configure options, and let the agent handle conversations.

  ### Free Tier Usage

  Use **GLM-4.5-Flash** or **GLM-4.7-Flash** for free AI-powered text generation.

  ### Coding Tasks

  Use **CodeGeeX**, **GLM-4.7**, or **GLM-5-Code** for code generation, debugging, and explanation.

  ### Web Search Integration

  Enable the **Web Search** built-in tool on the Chat Model node to give the model access to current information. Configure search context size and restrict to specific domains.

  ### Image Generation

  Use the **Z.ai Image** node with a text prompt to generate images. Output is binary data that can be passed to downstream nodes for saving, emailing, or further processing.

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with**: n8n 1.60.0+

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Z.ai API Documentation](https://open.bigmodel.cn/dev/api)
  * [Z.ai Platform](https://open.bigmodel.cn/)
  * [n8n Community Forum](https://community.n8n.io/)

  ## License

  [MIT](LICENSE.md)

  ## Contributing

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

  ## Support

  If you encounter any issues or have questions:
  - Open an issue on [GitHub](https://github.com/AliShan85/ZAiChatNode/issues)
  - Visit the [n8n Community Forum](https://community.n8n.io/)

  ## Author

  Ali Shan (aliishann806@gmail.com)

ai_documentation_summary:
  {"purpose":"The Z.ai Chat node enables AI chat completions using Z.ai's GLM language models with streaming support, web search capabilities, and configurable safety settings.","capabilities":["Text generation with multiple GLM models (GLM-4.5, GLM-4.7, GLM-5, CodeGeeX)","Streaming responses","Web search integration with domain restrictions","Configurable safety filters for harassment, hate speech, and dangerous content","Temperature, max tokens, and top-p/top-k parameter control","Image generation using GLM-Image and CogView-4 models","Custom image resolution and quality settings","Binary output for images"],"authentication":"API key required (Zai API credential)","commonUseCases":["AI agent conversations","Code generation and debugging","Web research and information retrieval","Image generation from text prompts","Free tier usage with Flash models"],"limitations":["Free tier limited to Flash models only","Image URLs expire after 30 days","Minimum n8n version 1.0.0 required"],"relatedNodes":["AI Agent","Basic LLM Chain","Z.ai Image","Zai API credential"]}


node_type: n8n-nodes-peek-pro.peekProTrigger
package_name: n8n-nodes-peek-pro
display_name: Peek Pro Trigger
description: Starts the workflow when Peek Pro event occur (e.g., new bookings)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: peektravel
author_github_url: https://github.com/peek-travel/
npm_package_name: n8n-nodes-peek-pro
npm_version: 0.4.1
community_fetched_at: 2026-07-14T14:40:34.240Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-peek-pro

  An n8n community node that allows interacting with the Peek Pro booking software.

  ## Installation

  In your n8n instance:

  1. Go to Settings → Community Nodes.
  2. Add the following package: `n8n-nodes-peek-pro`

  ## Credentials

  This node requires an API key.
  Peek Pro customers can obtain their API key from the Peek Pro n8n app.

  To configure it in n8n:

  1. Go to Credentials → New
  2. Select Peek Pro API
  3. Enter your API key
  4. Save

  ## Features

  This package supports:

  - Webhook-style triggers for new or updated bookings
  - Notification triggers for signed waivers
  - Pulling booking information
  - Accessing back-office calendar data
  - Retrieving guest information

  ## Usage

  1. Add a Peek Pro node to your workflow
  2. Select an operation such as booking retrieval or event subscription
  3. Choose or create your Peek Pro API credentials
  4. Configure the required fields
  5. Execute the node to verify everything is working

  ## Requirements

  - Available for all current Peek Pro customers
  - API key is available via the Peek Pro n8n app

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This node integrates n8n with Peek Pro booking software. It can start workflows on Peek Pro events and also retrieve booking, guest, and calendar-related data.","capabilities":["Webhook-style triggers for new bookings","Webhook-style triggers for updated bookings","Notification triggers for signed waivers","Pull booking information","Access back-office calendar data","Retrieve guest information"],"authentication":"API key required (Peek Pro API credentials)","commonUseCases":["Start an automation when a new booking is created in Peek Pro","Trigger workflows when a waiver is signed","Sync booking, guest, or calendar data into another system"],"limitations":["Requires a Peek Pro API key obtained from the Peek Pro n8n app","Available only for current Peek Pro customers"],"relatedNodes":[]}


node_type: n8n-nodes-open5e.open5e
package_name: n8n-nodes-open5e
display_name: Open5e
description: Access D&D 5e SRD content from the Open5e API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: garritfra
author_github_url: https://github.com/garritfra/
npm_package_name: n8n-nodes-open5e
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:34.241Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "monster",
      "options": [
        {
          "name": "Armor",
          "value": "armor"
        },
        {
          "name": "Background",
          "value": "background"
        },
        {
          "name": "Class",
          "value": "class"
        },
        {
          "name": "Condition",
          "value": "condition"
        },
        {
          "name": "Feat",
          "value": "feat"
        },
        {
          "name": "Magic Item",
          "value": "magicItem"
        },
        {
          "name": "Monster",
          "value": "monster"
        },
        {
          "name": "Plane",
          "value": "plane"
        },
        {
          "name": "Race",
          "value": "race"
        },
        {
          "name": "Section",
          "value": "section"
        },
        {
          "name": "Spell",
          "value": "spell"
        },
        {
          "name": "Weapon",
          "value": "weapon"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many monsters",
          "routing": {
            "request": {
              "url": "/v1/monsters",
              "method": "GET"
            }
          },
          "description": "Get many monsters from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a monster",
          "routing": {
            "request": {
              "url": "=/v1/monsters/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single monster by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search monsters",
          "routing": {
            "request": {
              "url": "/v1/monsters",
              "method": "GET"
            }
          },
          "description": "Search for monsters by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "monster"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many spells",
          "routing": {
            "request": {
              "url": "/v2/spells",
              "method": "GET"
            }
          },
          "description": "Get many spells from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a spell",
          "routing": {
            "request": {
              "url": "=/v2/spells/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single spell by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search spells",
          "routing": {
            "request": {
              "url": "/v2/spells",
              "method": "GET"
            }
          },
          "description": "Search for spells by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "spell"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many magic items",
          "routing": {
            "request": {
              "url": "/v1/magicitems",
              "method": "GET"
            }
          },
          "description": "Get many magic items from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a magic item",
          "routing": {
            "request": {
              "url": "=/v1/magicitems/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single magic item by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search magic items",
          "routing": {
            "request": {
              "url": "/v1/magicitems",
              "method": "GET"
            }
          },
          "description": "Search for magic items by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "magicItem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many weapons",
          "routing": {
            "request": {
              "url": "/v2/weapons",
              "method": "GET"
            }
          },
          "description": "Get many weapons from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a weapon",
          "routing": {
            "request": {
              "url": "=/v2/weapons/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single weapon by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search weapons",
          "routing": {
            "request": {
              "url": "/v2/weapons",
              "method": "GET"
            }
          },
          "description": "Search for weapons by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "weapon"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many armor",
          "routing": {
            "request": {
              "url": "/v2/armor",
              "method": "GET"
            }
          },
          "description": "Get many armor from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get armor",
          "routing": {
            "request": {
              "url": "=/v2/armor/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single armor by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search armor",
          "routing": {
            "request": {
              "url": "/v2/armor",
              "method": "GET"
            }
          },
          "description": "Search for armor by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "armor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many feats",
          "routing": {
            "request": {
              "url": "/v2/feats",
              "method": "GET"
            }
          },
          "description": "Get many feats from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a feat",
          "routing": {
            "request": {
              "url": "=/v2/feats/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single feat by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search feats",
          "routing": {
            "request": {
              "url": "/v2/feats",
              "method": "GET"
            }
          },
          "description": "Search for feats by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many conditions",
          "routing": {
            "request": {
              "url": "/v2/conditions",
              "method": "GET"
            }
          },
          "description": "Get many conditions from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a condition",
          "routing": {
            "request": {
              "url": "=/v2/conditions/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single condition by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search conditions",
          "routing": {
            "request": {
              "url": "/v2/conditions",
              "method": "GET"
            }
          },
          "description": "Search for conditions by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "condition"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many races",
          "routing": {
            "request": {
              "url": "/v1/races",
              "method": "GET"
            }
          },
          "description": "Get many races from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a race",
          "routing": {
            "request": {
              "url": "=/v1/races/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single race by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search races",
          "routing": {
            "request": {
              "url": "/v1/races",
              "method": "GET"
            }
          },
          "description": "Search for races by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "race"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many classs",
          "routing": {
            "request": {
              "url": "/v1/classes",
              "method": "GET"
            }
          },
          "description": "Get many classs from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a class",
          "routing": {
            "request": {
              "url": "=/v1/classes/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single class by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search classs",
          "routing": {
            "request": {
              "url": "/v1/classes",
              "method": "GET"
            }
          },
          "description": "Search for classs by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "class"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many backgrounds",
          "routing": {
            "request": {
              "url": "/v2/backgrounds",
              "method": "GET"
            }
          },
          "description": "Get many backgrounds from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a background",
          "routing": {
            "request": {
              "url": "=/v2/backgrounds/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single background by key"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search backgrounds",
          "routing": {
            "request": {
              "url": "/v2/backgrounds",
              "method": "GET"
            }
          },
          "description": "Search for backgrounds by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "background"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many planes",
          "routing": {
            "request": {
              "url": "/v1/planes",
              "method": "GET"
            }
          },
          "description": "Get many planes from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a plane",
          "routing": {
            "request": {
              "url": "=/v1/planes/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single plane by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search planes",
          "routing": {
            "request": {
              "url": "/v1/planes",
              "method": "GET"
            }
          },
          "description": "Search for planes by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plane"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many sections",
          "routing": {
            "request": {
              "url": "/v1/sections",
              "method": "GET"
            }
          },
          "description": "Get many sections from the Open5e API"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a section",
          "routing": {
            "request": {
              "url": "=/v1/sections/{{$parameter.identifier}}",
              "method": "GET"
            }
          },
          "description": "Get a single section by slug"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search sections",
          "routing": {
            "request": {
              "url": "/v1/sections",
              "method": "GET"
            }
          },
          "description": "Search for sections by name or description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "section"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many monsters",
      "routing": {
        "request": {
          "url": "/v1/monsters",
          "method": "GET"
        }
      },
      "description": "Get many monsters from the Open5e API",
      "resource": "monster"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a monster",
      "routing": {
        "request": {
          "url": "=/v1/monsters/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single monster by slug",
      "resource": "monster"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search monsters",
      "routing": {
        "request": {
          "url": "/v1/monsters",
          "method": "GET"
        }
      },
      "description": "Search for monsters by name or description",
      "resource": "monster"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many spells",
      "routing": {
        "request": {
          "url": "/v2/spells",
          "method": "GET"
        }
      },
      "description": "Get many spells from the Open5e API",
      "resource": "spell"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a spell",
      "routing": {
        "request": {
          "url": "=/v2/spells/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single spell by key",
      "resource": "spell"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search spells",
      "routing": {
        "request": {
          "url": "/v2/spells",
          "method": "GET"
        }
      },
      "description": "Search for spells by name or description",
      "resource": "spell"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many magic items",
      "routing": {
        "request": {
          "url": "/v1/magicitems",
          "method": "GET"
        }
      },
      "description": "Get many magic items from the Open5e API",
      "resource": "magicItem"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a magic item",
      "routing": {
        "request": {
          "url": "=/v1/magicitems/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single magic item by slug",
      "resource": "magicItem"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search magic items",
      "routing": {
        "request": {
          "url": "/v1/magicitems",
          "method": "GET"
        }
      },
      "description": "Search for magic items by name or description",
      "resource": "magicItem"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many weapons",
      "routing": {
        "request": {
          "url": "/v2/weapons",
          "method": "GET"
        }
      },
      "description": "Get many weapons from the Open5e API",
      "resource": "weapon"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a weapon",
      "routing": {
        "request": {
          "url": "=/v2/weapons/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single weapon by key",
      "resource": "weapon"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search weapons",
      "routing": {
        "request": {
          "url": "/v2/weapons",
          "method": "GET"
        }
      },
      "description": "Search for weapons by name or description",
      "resource": "weapon"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many armor",
      "routing": {
        "request": {
          "url": "/v2/armor",
          "method": "GET"
        }
      },
      "description": "Get many armor from the Open5e API",
      "resource": "armor"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get armor",
      "routing": {
        "request": {
          "url": "=/v2/armor/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single armor by key",
      "resource": "armor"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search armor",
      "routing": {
        "request": {
          "url": "/v2/armor",
          "method": "GET"
        }
      },
      "description": "Search for armor by name or description",
      "resource": "armor"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many feats",
      "routing": {
        "request": {
          "url": "/v2/feats",
          "method": "GET"
        }
      },
      "description": "Get many feats from the Open5e API",
      "resource": "feat"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a feat",
      "routing": {
        "request": {
          "url": "=/v2/feats/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single feat by key",
      "resource": "feat"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search feats",
      "routing": {
        "request": {
          "url": "/v2/feats",
          "method": "GET"
        }
      },
      "description": "Search for feats by name or description",
      "resource": "feat"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many conditions",
      "routing": {
        "request": {
          "url": "/v2/conditions",
          "method": "GET"
        }
      },
      "description": "Get many conditions from the Open5e API",
      "resource": "condition"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a condition",
      "routing": {
        "request": {
          "url": "=/v2/conditions/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single condition by key",
      "resource": "condition"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search conditions",
      "routing": {
        "request": {
          "url": "/v2/conditions",
          "method": "GET"
        }
      },
      "description": "Search for conditions by name or description",
      "resource": "condition"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many races",
      "routing": {
        "request": {
          "url": "/v1/races",
          "method": "GET"
        }
      },
      "description": "Get many races from the Open5e API",
      "resource": "race"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a race",
      "routing": {
        "request": {
          "url": "=/v1/races/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single race by slug",
      "resource": "race"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search races",
      "routing": {
        "request": {
          "url": "/v1/races",
          "method": "GET"
        }
      },
      "description": "Search for races by name or description",
      "resource": "race"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many classs",
      "routing": {
        "request": {
          "url": "/v1/classes",
          "method": "GET"
        }
      },
      "description": "Get many classs from the Open5e API",
      "resource": "class"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a class",
      "routing": {
        "request": {
          "url": "=/v1/classes/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single class by slug",
      "resource": "class"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search classs",
      "routing": {
        "request": {
          "url": "/v1/classes",
          "method": "GET"
        }
      },
      "description": "Search for classs by name or description",
      "resource": "class"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many backgrounds",
      "routing": {
        "request": {
          "url": "/v2/backgrounds",
          "method": "GET"
        }
      },
      "description": "Get many backgrounds from the Open5e API",
      "resource": "background"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a background",
      "routing": {
        "request": {
          "url": "=/v2/backgrounds/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single background by key",
      "resource": "background"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search backgrounds",
      "routing": {
        "request": {
          "url": "/v2/backgrounds",
          "method": "GET"
        }
      },
      "description": "Search for backgrounds by name or description",
      "resource": "background"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many planes",
      "routing": {
        "request": {
          "url": "/v1/planes",
          "method": "GET"
        }
      },
      "description": "Get many planes from the Open5e API",
      "resource": "plane"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a plane",
      "routing": {
        "request": {
          "url": "=/v1/planes/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single plane by slug",
      "resource": "plane"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search planes",
      "routing": {
        "request": {
          "url": "/v1/planes",
          "method": "GET"
        }
      },
      "description": "Search for planes by name or description",
      "resource": "plane"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many sections",
      "routing": {
        "request": {
          "url": "/v1/sections",
          "method": "GET"
        }
      },
      "description": "Get many sections from the Open5e API",
      "resource": "section"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a section",
      "routing": {
        "request": {
          "url": "=/v1/sections/{{$parameter.identifier}}",
          "method": "GET"
        }
      },
      "description": "Get a single section by slug",
      "resource": "section"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search sections",
      "routing": {
        "request": {
          "url": "/v1/sections",
          "method": "GET"
        }
      },
      "description": "Search for sections by name or description",
      "resource": "section"
    }
  ]

npm_readme:
  # n8n-nodes-open5e

  [![NPM Version](https://img.shields.io/npm/v/n8n-nodes-open5e)](https://www.npmjs.com/package/n8n-nodes-open5e)


  This is an n8n community node that lets you access D&D 5th edition SRD content from the [Open5e API](https://api.open5e.com) in your n8n workflows.

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

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

  ## Installation

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

  ### Manual Installation

  ```bash
  npm install n8n-nodes-open5e
  ```

  ## Operations

  The Open5e node provides access to 12 different D&D 5e resources through the Open5e API. Each resource supports three operations:

  - **Get Many**: Retrieve multiple items with optional filters and pagination
  - **Get**: Retrieve a single item by its identifier (slug or key)
  - **Search**: Search for items by name or description

  ## Credentials

  **No credentials required!** The Open5e API is completely free and public. No API key or authentication is needed.

  ## Compatibility

  - Minimum n8n version: unknown - the node was developed and tested on n8n 2.7, but should be compatible with earlier versions as well
  - Tested with n8n version: 2.7

  ## Usage

  ### Resources

  The node provides access to the following D&D 5e resources:

  1. **Monsters** - Creatures and NPCs
  2. **Spells** - Magic spells
  3. **Magic Items** - Magical equipment
  4. **Weapons** - Weapon stats
  5. **Armor** - Armor types and stats
  6. **Feats** - Character feats
  7. **Conditions** - Status conditions
  8. **Races** - Player character races
  9. **Classes** - Player character classes
  10. **Backgrounds** - Character backgrounds
  11. **Planes** - Planes of existence
  12. **Sections** - Rules and lore sections

  ### Example Workflows

  #### 1. Random Encounter Generator

  Create random encounters by fetching monsters filtered by challenge rating:

  1. Add an Open5e node to your workflow
  2. Select Resource: **Monster**
  3. Select Operation: **Get Many**
  4. In **Filters**, add:
     - Challenge Rating: `5`
     - Document Source: `wotc-srd`
  5. Toggle **Return All** ON to get all matching monsters
  6. Connect to a Function node to randomly select 3-5 monsters
  7. Format the output as needed (Discord message, email, etc.)

  #### 2. Spell Lookup Bot

  Build a Discord bot that looks up spell information:

  1. Use a Discord Trigger node to listen for commands
  2. Add a Function node to extract the spell name from the command
  3. Add an Open5e node:
     - Resource: **Spell**
     - Operation: **Search**
     - Search Term: `={{ $json.spellName }}`
  4. Add a Function node to format the spell details
  5. Send the formatted spell info back to Discord

  #### 3. Item Database Search

  Search for magic items and weapons by name:

  1. Add an HTTP Request trigger or Form trigger to accept search queries
  2. Add an Open5e node:
     - Resource: **Magic Item** (or **Weapon**)
     - Operation: **Search**
     - Search Term: `={{ $json.query }}`
     - Limit: `10`
  3. Format and return the results

  ### Filters and Options

  #### Common Filters (All Resources)

  - **Document Source** (`document__slug`): Filter by source book
    - Examples: `wotc-srd` (official SRD), `tob` (Tome of Beasts), `cc` (Creature Codex)
  - **Ordering**: Sort results
    - Options: `name` (A-Z), `-name` (Z-A)

  #### Resource-Specific Filters

  **Monsters:**
  - Challenge Rating: e.g., `5`, `1/2`, `0`
  - Type: e.g., `dragon`, `humanoid`, `undead`
  - Size: Tiny, Small, Medium, Large, Huge, Gargantuan

  **Spells:**
  - Level: 0-9 (0 = cantrip)
  - School: e.g., `evocation`, `abjuration`, `necromancy`
  - Class: e.g., `wizard`, `cleric`, `druid`

  **Weapons & Armor:**
  - Category: e.g., `simple`, `martial` (weapons); `light`, `medium`, `heavy` (armor)

  **Magic Items:**
  - Type: e.g., `weapon`, `armor`, `wondrous item`
  - Rarity: `common`, `uncommon`, `rare`, `very rare`, `legendary`

  ### Pagination

  - **Return All**: When enabled, automatically fetches all pages of results
  - **Limit**: When Return All is off, specify how many results to return (1-100)

  The node automatically handles pagination by following the API's `next` links.

  ## Resources

  - [Open5e API Documentation](https://api.open5e.com)
  - [Open5e Website](https://open5e.com)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## Limitations

  ### Global Search Not Supported

  The Open5e API's global search endpoint (`/v1/search/`) returns HTML instead of JSON, so it is not supported by this node. Use the Search operation on individual resources instead.

  ### Self-Hosted Instances Not Supported

  The node only connects to the public Open5e API at `api.open5e.com`. Self-hosted Open5e instances are not supported in v1.

  ### Advanced Filtering

  Only the most commonly used filters are exposed in the node UI. For advanced filtering needs, use the HTTP Request node directly with the Open5e API.

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Run in development mode
  npm run dev

  # Lint the code
  npm run lint

  # Fix linting issues
  npm run lint:fix
  ```

  ## License

  [MIT](https://github.com/garritfra/n8n-nodes-open5e/blob/main/LICENSE.md)

  ## Contributing

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

  ## Support

  - Report issues at: https://github.com/garritfra/n8n-nodes-open5e/issues
  - Join the n8n community: https://community.n8n.io/

ai_documentation_summary:
  {"purpose":"This n8n community node allows users to access D&D 5th edition SRD content from the Open5e API, enabling workflow automation for game content retrieval.","capabilities":["Retrieve multiple items with filters and pagination (Get Many)","Retrieve single items by identifier (Get)","Search items by name or description (Search)","Access 12 different D&D 5e resources including monsters, spells, magic items, weapons, armor, feats, conditions, races, classes, backgrounds, planes, and sections","Filter by document source (e.g., wotc-srd, tome of beasts)","Filter by resource-specific attributes (e.g., challenge rating, spell school, item rarity)","Sort results by name (A-Z or Z-A)","Handle pagination automatically or via limit parameter"],"authentication":"None","commonUseCases":["Random encounter generator for tabletop gaming","Spell lookup bot for Discord or other chat platforms","Magic item and weapon database search","Character creation assistance tools","Game master resource lookup"],"limitations":["Global search endpoint not supported (returns HTML instead of JSON)","Only supports public Open5e API instance; self-hosted instances not supported","Limited filtering options in UI; advanced filtering requires HTTP Request node","Minimum n8n version compatibility unknown (tested on 2.7)"],"relatedNodes":["HTTP Request","Function","Discord Trigger","Discord Webhook","Form Trigger"]}


node_type: n8n-nodes-comdirect.comdirect
package_name: n8n-nodes-comdirect
display_name: comdirect
description: Read accounts, depots and PostBox documents from comdirect
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: garritfra
author_github_url: https://github.com/garritfra/
npm_package_name: n8n-nodes-comdirect
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:34.242Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "account",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Depot",
          "value": "depot"
        },
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalances",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get balance for one account",
          "routing": {
            "request": {
              "url": "=/api/banking/v2/accounts/{{$parameter.accountId.value || $parameter.accountId}}/balances",
              "method": "GET"
            }
          },
          "description": "Get the balance for a single account by account ID"
        },
        {
          "name": "Get Many Balances",
          "value": "getBalances",
          "action": "Get balances for all accounts",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/banking/clients/user/v2/accounts/balances",
              "method": "GET"
            }
          },
          "description": "Get balances for all accounts linked to your customer profile"
        },
        {
          "name": "Get Many Transactions",
          "value": "getTransactions",
          "action": "Get transactions for one account",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/banking/v1/accounts/{{$parameter.accountId.value || $parameter.accountId}}/transactions",
              "method": "GET"
            }
          },
          "description": "Get transactions (Kontoumsätze) for a single account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get all depots",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/brokerage/clients/user/v3/depots",
              "method": "GET"
            }
          },
          "description": "List all depots linked to your customer profile"
        },
        {
          "name": "Get Many Positions",
          "value": "getPositions",
          "action": "Get positions for a depot",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/positions",
              "method": "GET"
            }
          },
          "description": "Get all positions held in a depot"
        },
        {
          "name": "Get Position",
          "value": "getPosition",
          "action": "Get a single position",
          "routing": {
            "request": {
              "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/positions/{{$parameter.positionId}}",
              "method": "GET"
            }
          },
          "description": "Get a single position by depot and position ID"
        },
        {
          "name": "Get Many Transactions",
          "value": "getTransactions",
          "action": "Get transactions for a depot",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/transactions",
              "method": "GET"
            }
          },
          "description": "Get transactions (Depotumsätze) for a single depot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "depot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many documents",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "values"
                  }
                }
              ]
            },
            "request": {
              "url": "/api/messages/clients/user/v2/documents",
              "method": "GET"
            }
          },
          "description": "List documents in your PostBox"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document as binary",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/api/messages/v2/documents/{{$parameter.documentId}}",
              "method": "GET",
              "headers": {
                "Accept": "application/pdf"
              },
              "encoding": "arraybuffer",
              "returnFullResponse": true
            }
          },
          "description": "Download a single document as binary data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get balance for one account",
      "routing": {
        "request": {
          "url": "=/api/banking/v2/accounts/{{$parameter.accountId.value || $parameter.accountId}}/balances",
          "method": "GET"
        }
      },
      "description": "Get the balance for a single account by account ID",
      "resource": "account"
    },
    {
      "name": "Get Many Balances",
      "value": "getBalances",
      "action": "Get balances for all accounts",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "/api/banking/clients/user/v2/accounts/balances",
          "method": "GET"
        }
      },
      "description": "Get balances for all accounts linked to your customer profile",
      "resource": "account"
    },
    {
      "name": "Get Many Transactions",
      "value": "getTransactions",
      "action": "Get transactions for one account",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/banking/v1/accounts/{{$parameter.accountId.value || $parameter.accountId}}/transactions",
          "method": "GET"
        }
      },
      "description": "Get transactions (Kontoumsätze) for a single account",
      "resource": "account"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get all depots",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "/api/brokerage/clients/user/v3/depots",
          "method": "GET"
        }
      },
      "description": "List all depots linked to your customer profile",
      "resource": "depot"
    },
    {
      "name": "Get Many Positions",
      "value": "getPositions",
      "action": "Get positions for a depot",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/positions",
          "method": "GET"
        }
      },
      "description": "Get all positions held in a depot",
      "resource": "depot"
    },
    {
      "name": "Get Position",
      "value": "getPosition",
      "action": "Get a single position",
      "routing": {
        "request": {
          "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/positions/{{$parameter.positionId}}",
          "method": "GET"
        }
      },
      "description": "Get a single position by depot and position ID",
      "resource": "depot"
    },
    {
      "name": "Get Many Transactions",
      "value": "getTransactions",
      "action": "Get transactions for a depot",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "=/api/brokerage/v3/depots/{{$parameter.depotId.value || $parameter.depotId}}/transactions",
          "method": "GET"
        }
      },
      "description": "Get transactions (Depotumsätze) for a single depot",
      "resource": "depot"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many documents",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "values"
              }
            }
          ]
        },
        "request": {
          "url": "/api/messages/clients/user/v2/documents",
          "method": "GET"
        }
      },
      "description": "List documents in your PostBox",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document as binary",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/api/messages/v2/documents/{{$parameter.documentId}}",
          "method": "GET",
          "headers": {
            "Accept": "application/pdf"
          },
          "encoding": "arraybuffer",
          "returnFullResponse": true
        }
      },
      "description": "Download a single document as binary data",
      "resource": "document"
    }
  ]

npm_readme:
  # n8n-nodes-comdirect

  This is an n8n community node. It lets you read accounts, depots and PostBox documents from [comdirect](https://www.comdirect.de/) in your n8n workflows.

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


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

  ## Installation

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

  ## Operations

  - **Account**
  	- Get Balance — single account by ID
  	- Get Many Balances — all linked accounts
  	- Get Many Transactions — with date and direction filters, paged
  - **Depot**
  	- Get Many — list all depots
  	- Get Many Positions — positions held in a depot
  	- Get Position — single position by depot + position ID
  	- Get Many Transactions — with WKN/ISIN and date filters, paged
  - **Document** (PostBox)
  	- Get Many — list documents
  	- Get — download a single document as binary PDF

  Order placement, quote requests, instrument lookup and aggregated reports are out of scope for v0.1.

  ## Credentials

  This node uses a single **comdirect API** credential.

  ### Prerequisites

  1. **Register for API access** at [comdirect's developer portal](https://www.comdirect.de/cms/kontakt-zugaenge-api.html). comdirect issues you a personal `client_id` and `client_secret`.
  2. **Activate photoTAN-Push** on your comdirect account. This node only supports photoTAN-Push because it's the only TAN method that doesn't require typing a code mid-flow. SMS-TAN and manual photoTAN are not supported.

  ### Setup

  In n8n, create a new **comdirect API** credential with:

  - **Client ID** / **Client Secret** — from the developer portal
  - **Zugangsnummer** — your 8-digit comdirect customer number
  - **PIN** — your 6-digit online-banking PIN

  When you save the credential, comdirect sends a photoTAN-Push notification to your phone. **Open the comdirect photoTAN app and approve the request within ~50 seconds.** Once approved, the credential persists the resulting session tokens and your subsequent workflow runs are unattended.

  ### Refresh window

  comdirect's session tokens have a sliding 20-minute idle expiry: every authenticated request resets the timer. Workflows that fire more often than every 20 minutes will never trigger a re-bootstrap. If the window does lapse (long idle period, n8n restart with stale tokens, etc.), the node will surface a clear error — re-open and re-save the credential to re-authenticate via photoTAN-Push.

  ## Compatibility

  Compatible with n8n 1.60.0 or later.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [comdirect REST API portal](https://www.comdirect.de/cms/kontakt-zugaenge-api.html)
  - [comdirect REST API specification (PDF)](https://kunde.comdirect.de/cms/media/comdirect_REST_API_Dokumentation.pdf)

ai_documentation_summary:
  {"purpose":"Reads financial data from comdirect accounts, depots, and PostBox documents within n8n workflows.","capabilities":["Get balance for a single account by ID","Get balances for all linked accounts","Get transactions with date and direction filters (paginated)","List all depots","Get positions held in a depot","Get a single position by depot and position ID","Get transactions with WKN/ISIN and date filters (paginated)","List PostBox documents","Download a single PostBox document as binary PDF"],"authentication":"API key with photoTAN-Push (requires Client ID, Client Secret, Zugangsnummer, and PIN)","commonUseCases":["Automated account balance monitoring","Portfolio position tracking","Automated document retrieval from PostBox","Financial transaction reporting"],"limitations":["Order placement is not supported","Quote requests are not supported","Instrument lookup is not supported","Aggregated reports are not supported","Only photoTAN-Push authentication is supported (SMS-TAN and manual photoTAN are not supported)"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.binaryFile"]}


node_type: n8n-nodes-voico.voico
package_name: n8n-nodes-voico
display_name: Voico
description: AI Voice Agent — Make outbound AI calls, get call details and transcripts
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: voico.ai
author_github_url: https://github.com/Yashpai777/
npm_package_name: n8n-nodes-voico
npm_version: 0.1.18
community_fetched_at: 2026-07-14T14:40:34.243Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "makeCall",
      "options": [
        {
          "name": "Make Call",
          "value": "makeCall",
          "description": "Schedule an outbound AI call"
        },
        {
          "name": "Get Call",
          "value": "getCall",
          "description": "Get details of a specific call"
        },
        {
          "name": "Get Transcript",
          "value": "getTranscript",
          "description": "Get transcript of a completed call"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Make Call",
      "value": "makeCall",
      "description": "Schedule an outbound AI call"
    },
    {
      "name": "Get Call",
      "value": "getCall",
      "description": "Get details of a specific call"
    },
    {
      "name": "Get Transcript",
      "value": "getTranscript",
      "description": "Get transcript of a completed call"
    }
  ]

npm_readme:
  ﻿# n8n-nodes-voico

  This is an n8n community node that integrates [Voico.ai](https://voico.ai) AI voice agents into your n8n workflows. Schedule outbound AI calls, retrieve call details, and fetch full transcripts directly from your automations.

  ## Installation

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

  ## Operations

  The Voico node supports three operations:

  - **Make Call** - Schedule an outbound AI voice call to any phone number using a configured Voico agent
  - **Get Call** - Retrieve the details and status of a specific call by its Call ID
  - **Get Transcript** - Fetch the full conversation transcript of a completed call

  ## Credentials

  You need a Voico API key to use this node.

  1. Sign up at [platform.voico.ai](https://platform.voico.ai)
  2. Generate an API key from your dashboard
  3. In n8n, create new Voico API credentials and paste the key

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n v1.x

  ## Usage

  ### Make Call

  To schedule an outbound AI call, provide:

  - **Phone Number** - The destination number with country code (e.g. +919999999999)
  - **Agent ID** - Your Voico Agent ID from the Agents page
  - **First Message** (optional) - The opening message the agent says when picking up
  - **Prompt Override** (optional) - A specific prompt to override the agent prompt for this call
  - **Scheduled Time** (optional) - ISO 8601 datetime to schedule the call. Leave empty to call in 1 minute

  The node returns a job_id which can be used to retrieve call details and transcripts.

  ### Get Call

  Provide the Call ID returned from a Make Call operation to retrieve the call status, duration, and metadata.

  ### Get Transcript

  Provide the Call ID to retrieve the full conversation transcript once the call is complete.

  ## Resources

  - [Voico Documentation](https://platform.voico.ai/docs)
  - [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node integrates Voico.ai AI voice agents to schedule outbound AI calls, retrieve call details, and fetch conversation transcripts directly within n8n workflows.","capabilities":["Schedule outbound AI voice calls to phone numbers","Retrieve call details and status by Call ID","Fetch full conversation transcripts of completed calls","Configure opening messages for AI agents","Override agent prompts for specific calls","Schedule calls with custom ISO 8601 datetime"],"authentication":"API key required","commonUseCases":["Automated customer outreach campaigns","Appointment reminders via AI voice","Lead qualification through automated calls","Post-call analytics and transcript storage"],"limitations":["Requires separate Voico.ai account and API key","Minimum n8n version 1.0.0 required","Call scheduling requires Voico agent configuration"],"relatedNodes":["n8n-nodes-voico.voico","n8n-nodes-voico.voico.make-call","n8n-nodes-voico.voico.get-call","n8n-nodes-voico.voico.get-transcript"]}


node_type: @momentum-labs/n8n-nodes-1lookup.oneLookup
package_name: @momentum-labs/n8n-nodes-1lookup
display_name: 1Lookup
description: Validate and enrich email, phone, IP, domain, and search intent data with 1Lookup
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ali-dev111
author_github_url: https://github.com/GroupX-ai/1Lookup-N8N.git
npm_package_name: @momentum-labs/n8n-nodes-1lookup
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.244Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "IP",
          "value": "ip"
        },
        {
          "name": "Phone",
          "value": "phone"
        },
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Append Email",
          "value": "append",
          "action": "Append email to a contact"
        },
        {
          "name": "Enrich Email",
          "value": "enrich",
          "action": "Enrich email from a name and domain"
        },
        {
          "name": "Look Up Contact by Email",
          "value": "lookupContact",
          "action": "Look up contact by email"
        },
        {
          "name": "Validate Email",
          "value": "validate",
          "action": "Validate an email address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "lookup",
      "options": [
        {
          "name": "Look Up Contact by IP",
          "value": "lookupContact",
          "action": "Look up contact by IP"
        },
        {
          "name": "Look Up IP Address",
          "value": "lookup",
          "action": "Look up an IP address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ip"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Append Phone",
          "value": "append",
          "action": "Append phone to a contact"
        },
        {
          "name": "Check Phone for Spam",
          "value": "checkSpam",
          "action": "Check a phone number for spam"
        },
        {
          "name": "Find Mobile",
          "value": "findMobile",
          "action": "Find a mobile number"
        },
        {
          "name": "HLR Lookup",
          "value": "hlrLookup",
          "action": "Run HLR lookup"
        },
        {
          "name": "Look Up Contact by Phone",
          "value": "lookupContact",
          "action": "Look up contact by phone"
        },
        {
          "name": "MNP Lookup",
          "value": "mnpLookup",
          "action": "Run MNP lookup"
        },
        {
          "name": "Number Type Lookup",
          "value": "ntLookup",
          "action": "Look up number type"
        },
        {
          "name": "Scrub Phone",
          "value": "scrub",
          "action": "Scrub a phone number"
        },
        {
          "name": "Validate Phone",
          "value": "validate",
          "action": "Validate a phone number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phone"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "analyzeSeo",
      "options": [
        {
          "name": "Analyze Domain SEO",
          "value": "analyzeSeo",
          "action": "Analyze domain SEO"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "lookupIntent",
      "options": [
        {
          "name": "Look Up Search Intent",
          "value": "lookupIntent",
          "action": "Look up search intent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Append Email",
      "value": "append",
      "action": "Append email to a contact",
      "resource": "email"
    },
    {
      "name": "Enrich Email",
      "value": "enrich",
      "action": "Enrich email from a name and domain",
      "resource": "email"
    },
    {
      "name": "Look Up Contact by Email",
      "value": "lookupContact",
      "action": "Look up contact by email",
      "resource": "email"
    },
    {
      "name": "Validate Email",
      "value": "validate",
      "action": "Validate an email address",
      "resource": "email"
    },
    {
      "name": "Look Up Contact by IP",
      "value": "lookupContact",
      "action": "Look up contact by IP",
      "resource": "ip"
    },
    {
      "name": "Look Up IP Address",
      "value": "lookup",
      "action": "Look up an IP address",
      "resource": "ip"
    },
    {
      "name": "Append Phone",
      "value": "append",
      "action": "Append phone to a contact",
      "resource": "phone"
    },
    {
      "name": "Check Phone for Spam",
      "value": "checkSpam",
      "action": "Check a phone number for spam",
      "resource": "phone"
    },
    {
      "name": "Find Mobile",
      "value": "findMobile",
      "action": "Find a mobile number",
      "resource": "phone"
    },
    {
      "name": "HLR Lookup",
      "value": "hlrLookup",
      "action": "Run HLR lookup",
      "resource": "phone"
    },
    {
      "name": "Look Up Contact by Phone",
      "value": "lookupContact",
      "action": "Look up contact by phone",
      "resource": "phone"
    },
    {
      "name": "MNP Lookup",
      "value": "mnpLookup",
      "action": "Run MNP lookup",
      "resource": "phone"
    },
    {
      "name": "Number Type Lookup",
      "value": "ntLookup",
      "action": "Look up number type",
      "resource": "phone"
    },
    {
      "name": "Scrub Phone",
      "value": "scrub",
      "action": "Scrub a phone number",
      "resource": "phone"
    },
    {
      "name": "Validate Phone",
      "value": "validate",
      "action": "Validate a phone number",
      "resource": "phone"
    },
    {
      "name": "Analyze Domain SEO",
      "value": "analyzeSeo",
      "action": "Analyze domain SEO",
      "resource": "domain"
    },
    {
      "name": "Look Up Search Intent",
      "value": "lookupIntent",
      "action": "Look up search intent",
      "resource": "search"
    }
  ]

npm_readme:
  # @momentum-labs/n8n-nodes-1lookup

  Use 1Lookup in n8n workflows to validate, enrich, and risk-score email addresses, phone numbers, IP addresses, and domains.

  This package provides a community node for the [1Lookup](https://1lookup.io) API. It is built for fraud prevention, lead enrichment, contact verification, order review, and data-quality automation workflows.

  ## Features

  - Validate email addresses before adding them to a CRM, list, or outbound workflow.
  - Validate, classify, scrub, and spam-check phone numbers.
  - Run HLR, MNP, and Number Type lookups for phone intelligence.
  - Find mobile numbers from profile URLs, work emails, or personal emails.
  - Append missing email or phone data from contact identity fields.
  - Enrich work emails from a person's name and company domain.
  - Reverse lookup contact details from an email address, phone number, or IP address.
  - Analyze domain SEO authority, backlinks, traffic, and related domain intelligence signals.
  - Look up search intent data for a query.
  - Return full API responses or simplified `data` payloads for easier downstream mapping.
  - Use the node as an n8n AI tool where supported.

  ## Installation

  ### n8n Community Nodes UI

  1. Open your n8n instance.
  2. Go to **Settings** > **Community Nodes**.
  3. Select **Install**.
  4. Enter this package name:

  ```text
  @momentum-labs/n8n-nodes-1lookup
  ```

  5. Confirm the installation and restart n8n if your environment requires it.

  ### Self-Hosted npm Install

  If your n8n setup installs community nodes through npm, install the package from your n8n environment:

  ```bash
  npm install @momentum-labs/n8n-nodes-1lookup
  ```

  Then restart n8n so it can discover the node.

  ## Credentials

  The node uses a `1Lookup API` credential.

  1. Sign in to the [1Lookup Dashboard](https://app.1lookup.io/dashboard).
  2. Copy your API key.
  3. In n8n, create a new `1Lookup API` credential.
  4. Paste the API key and save.
  5. Use the built-in credential test to verify the connection.

  The credential sends the API key using the supported authorization header:

  ```text
  Authorization: Bearer <api_key>
  ```

  ## Available Operations

  The package includes one `1Lookup` node with grouped resources.


  | Resource | Operation                | Required input                                                     | API route                         |
  | -------- | ------------------------ | ------------------------------------------------------------------ | --------------------------------- |
  | Email    | Validate Email           | Email                                                              | `/api/v1/email`                   |
  | Email    | Append Email             | First Name, Last Name, Address, City, ZIP Code                     | `/api/v1/email-append`            |
  | Email    | Enrich Email             | Company Domain and either First/Last Name, Full Name, or Name      | `/api/v1/email-enrichment`        |
  | Email    | Look Up Contact by Email | Email                                                              | `/api/v1/reverse-email-append`    |
  | Phone    | Validate Phone           | Phone Number                                                       | `/api/v1/phone`                   |
  | Phone    | Check Phone for Spam     | Phone Number                                                       | `/api/v1/phone-spam`              |
  | Phone    | HLR Lookup               | Phone Number                                                       | `/api/v1/hlr-lookup`              |
  | Phone    | MNP Lookup               | Phone Number                                                       | `/api/v1/mnp-lookup`              |
  | Phone    | Number Type Lookup       | Phone Number                                                       | `/api/v1/nt-lookup`               |
  | Phone    | Scrub Phone              | Phone Number                                                       | `/api/v1/phone-scrub`             |
  | Phone    | Append Phone             | First Name, Last Name, Address, City, ZIP Code                     | `/api/v1/phone-append`            |
  | Phone    | Find Mobile              | At least one of Profile URL, Work Email, or Personal Email         | `/api/v1/mobile-finder`           |
  | Phone    | Look Up Contact by Phone | Phone Number                                                       | `/api/v1/reverse-phone-lookup`    |
  | IP       | Look Up IP Address       | IP Address                                                         | `/api/v1/ip`                      |
  | IP       | Look Up Contact by IP    | IP Address                                                         | `/api/v1/reverse-ip-append`       |
  | Domain   | Analyze Domain SEO       | Domain                                                             | `/api/v1/domain-seo-intelligence` |
  | Search   | Look Up Search Intent    | Search Query                                                       | `/api/v1/search-intent-lookup`    |


  ## Common Workflows

  ### Review risky orders

  Use Shopify, Stripe, WooCommerce, or another order trigger, then pass the customer's email, phone, and IP address into 1Lookup. Route medium-risk or high-risk results to manual review, Slack, email, or your fraud operations queue.

  ### Clean CRM records

  Use records from HubSpot, Salesforce, Airtable, Google Sheets, or a database node. Validate email and phone fields, then update the record with deliverability, phone type, risk, and match status.

  ### Enrich incomplete leads

  Use Append Email or Append Phone when you have name and address data but missing contact fields. Continue only when the response indicates a match and your internal compliance rules allow contact use.

  ### Enrich B2B contacts

  Use Enrich Email when you have a person's name and company domain but need a likely work email. Use Find Mobile when you have a professional profile URL, work email, or personal email and need mobile number enrichment.

  ### Analyze domains

  Use Analyze Domain SEO to collect authority, backlink, traffic, and trust signals for lead scoring, partner review, marketplace checks, or domain intelligence workflows.

  ### Research search intent

  Use Look Up Search Intent to retrieve web search intelligence such as organic result data, knowledge graph data, people also ask, and related searches.

  ## Output

  By default, the node returns the full 1Lookup API response, including fields such as:

  - `success`
  - `data.request`
  - `data.metadata`
  - `data.risk_assessment`
  - `data.classification`
  - `data.insights`
  - `data.recommendations`

  Enable **Simplify Response** to return only the nested `data` object when the API response contains one. This is useful when mapping fields into later n8n nodes.

  ## Notes and Limits

  - This node only calls 1Lookup API endpoints. It does not perform direct browser automation or crawl third-party websites from n8n.
  - API usage, credits, rate limits, and available data depend on your 1Lookup account and plan.
  - Phone and contact data should be used according to your business compliance requirements, including consent, DNC, TCPA, CAN-SPAM, GDPR, CCPA, and any other applicable regulations.
  - For production workflows, add error handling with n8n's continue-on-fail, IF, or error workflow patterns.

  ## Compatibility

  - Node.js: `^20.19.0 || >=22.13.0`
  - n8n community node package format: `n8nNodesApiVersion` 1
  - Package name: `@momentum-labs/n8n-nodes-1lookup`
  - Node display name: `1Lookup`
  - Credential display name: `1Lookup API`

  ## Development

  Install dependencies:

  ```bash
  npm install
  ```

  Run the node locally in n8n development mode:

  ```bash
  npm run dev
  ```

  Build the package:

  ```bash
  npm run build
  ```

  Run lint checks:

  ```bash
  npm run lint
  ```

  Auto-fix supported lint issues:

  ```bash
  npm run lint:fix
  ```

  Preview the npm package contents:

  ```bash
  npm pack --dry-run
  ```

  ## Support

  - 1Lookup dashboard: [https://app.1lookup.io/dashboard](https://app.1lookup.io/dashboard)
  - 1Lookup homepage: [https://1lookup.io](https://1lookup.io)
  - 1Lookup API docs: [https://app.1lookup.io/api](https://app.1lookup.io/api)
  - n8n community node installation docs: [https://docs.n8n.io/integrations/community-nodes/installation/](https://docs.n8n.io/integrations/community-nodes/installation/)
  - n8n custom node docs: [https://docs.n8n.io/integrations/creating-nodes/](https://docs.n8n.io/integrations/creating-nodes/)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Validates, enriches, and risk-scores email addresses, phone numbers, IP addresses, and domains to support fraud prevention, lead enrichment, and data quality automation.","capabilities":["Validate email addresses","Append missing email data from identity fields","Enrich work emails from name and domain","Validate and classify phone numbers","Check phone numbers for spam","Perform HLR, MNP, and Number Type lookups","Find mobile numbers from profile URLs or emails","Reverse lookup contacts from email, phone, or IP","Analyze domain SEO authority and backlinks","Look up search intent data"],"authentication":"API key required (Bearer token in Authorization header)","commonUseCases":["Fraud prevention and order review","CRM data cleaning and validation","Lead enrichment and contact verification","B2B contact enrichment","Domain SEO analysis"],"limitations":["Requires valid 1Lookup API key and subscription","Some operations require specific input fields (e.g., name, address, domain)","Compliance rules may restrict contact data usage"],"relatedNodes":["HTTP Request","Code","Split In Batches","Set"]}


node_type: n8n-nodes-video-api-hub.videoApiHub
package_name: n8n-nodes-video-api-hub
display_name: Video Api Hub
description: Process, create, and transform videos with Video Api Hub
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: htmlcsstoimage
author_github_url: https://github.com/VideoApiHub/
npm_package_name: n8n-nodes-video-api-hub
npm_version: 0.7.1
community_fetched_at: 2026-07-14T14:40:34.245Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "videoCreate",
      "options": [
        {
          "name": "HTML Video",
          "value": "videoHtml"
        },
        {
          "name": "React Video",
          "value": "videoReact"
        },
        {
          "name": "Template",
          "value": "template"
        },
        {
          "name": "Create Video",
          "value": "videoCreate"
        },
        {
          "name": "Edit Video",
          "value": "videoEdit"
        },
        {
          "name": "Video Audio",
          "value": "videoAudio"
        },
        {
          "name": "Video Thumbnail",
          "value": "videoImage"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "File",
          "value": "file"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createHtml",
      "options": [
        {
          "name": "Create HTML Video",
          "value": "createHtml",
          "action": "Create a video from an HTML composition",
          "description": "Render an HTML composition (Hyperframes) to video using headless Chrome"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoHtml"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createReact",
      "options": [
        {
          "name": "Create React Video",
          "value": "createReact",
          "action": "Create a video from a react component",
          "description": "Render a React/Remotion component to video"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoReact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "render",
      "options": [
        {
          "name": "Render",
          "value": "render",
          "action": "Create a video from a template",
          "description": "Generate a video by filling in a saved template with your content"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createFromDesign",
      "options": [
        {
          "name": "Create from Design",
          "value": "createFromDesign",
          "action": "Create a video from a design",
          "description": "Build a video with text, images, shapes, and animations"
        },
        {
          "name": "Create Slideshow",
          "value": "slideshow",
          "action": "Create a slideshow from images",
          "description": "Turn a series of images into a video with optional music"
        },
        {
          "name": "Merge Videos",
          "value": "merge",
          "action": "Merge multiple videos into one",
          "description": "Join several videos together, played one after another"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoCreate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "clip",
      "options": [
        {
          "name": "Clip Video",
          "value": "clip",
          "action": "Clip a section from a video",
          "description": "Cut out a specific time range from your video"
        },
        {
          "name": "Clip Multiple Sections",
          "value": "multiClip",
          "action": "Clip multiple sections from a video",
          "description": "Cut out several time ranges from your video at once"
        },
        {
          "name": "Resize / Change Aspect Ratio",
          "value": "resize",
          "action": "Resize a video",
          "description": "Change the size or aspect ratio (e.g. landscape to portrait)"
        },
        {
          "name": "Convert Format",
          "value": "convertFormat",
          "action": "Convert video format",
          "description": "Convert between MP4, MOV, WebM, and MKV"
        },
        {
          "name": "Run Custom FFmpeg Command",
          "value": "customCommand",
          "action": "Run a custom ffmpeg command",
          "description": "Run your own FFmpeg command for advanced processing"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoEdit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addAudio",
      "options": [
        {
          "name": "Add Audio",
          "value": "addAudio",
          "action": "Add audio to a video",
          "description": "Add background music or replace the existing audio track"
        },
        {
          "name": "Remove Audio",
          "value": "removeAudio",
          "action": "Remove audio from a video",
          "description": "Strip all sound from your video"
        },
        {
          "name": "Extract Audio",
          "value": "extractAudio",
          "action": "Extract audio from a video",
          "description": "Save just the audio track as MP3, WAV, or AAC"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoAudio"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "thumbnail",
      "options": [
        {
          "name": "Capture Thumbnail",
          "value": "thumbnail",
          "action": "Capture a thumbnail from a video",
          "description": "Grab a single frame from your video as an image"
        },
        {
          "name": "Capture Thumbnail with Text",
          "value": "thumbnailWithText",
          "action": "Capture a thumbnail with text overlay",
          "description": "Grab a frame and add text or a logo on top"
        },
        {
          "name": "Capture Screenshots",
          "value": "screenshots",
          "action": "Capture screenshots from a video",
          "description": "Grab multiple frames from your video as images"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoImage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getResult",
      "options": [
        {
          "name": "Get Result",
          "value": "getResult",
          "action": "Get the result of a job",
          "description": "Check status and get the result — returns status if still processing, or the finished output"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadFile",
      "options": [
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload a file",
          "description": "Upload a file directly to your storage"
        },
        {
          "name": "Download File",
          "value": "downloadFile",
          "action": "Download a file",
          "description": "Download a file from your storage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create HTML Video",
      "value": "createHtml",
      "action": "Create a video from an HTML composition",
      "description": "Render an HTML composition (Hyperframes) to video using headless Chrome",
      "resource": "videoHtml"
    },
    {
      "name": "Create React Video",
      "value": "createReact",
      "action": "Create a video from a react component",
      "description": "Render a React/Remotion component to video",
      "resource": "videoReact"
    },
    {
      "name": "Render",
      "value": "render",
      "action": "Create a video from a template",
      "description": "Generate a video by filling in a saved template with your content",
      "resource": "template"
    },
    {
      "name": "Create from Design",
      "value": "createFromDesign",
      "action": "Create a video from a design",
      "description": "Build a video with text, images, shapes, and animations",
      "resource": "videoCreate"
    },
    {
      "name": "Create Slideshow",
      "value": "slideshow",
      "action": "Create a slideshow from images",
      "description": "Turn a series of images into a video with optional music",
      "resource": "videoCreate"
    },
    {
      "name": "Merge Videos",
      "value": "merge",
      "action": "Merge multiple videos into one",
      "description": "Join several videos together, played one after another",
      "resource": "videoCreate"
    },
    {
      "name": "Clip Video",
      "value": "clip",
      "action": "Clip a section from a video",
      "description": "Cut out a specific time range from your video",
      "resource": "videoEdit"
    },
    {
      "name": "Clip Multiple Sections",
      "value": "multiClip",
      "action": "Clip multiple sections from a video",
      "description": "Cut out several time ranges from your video at once",
      "resource": "videoEdit"
    },
    {
      "name": "Resize / Change Aspect Ratio",
      "value": "resize",
      "action": "Resize a video",
      "description": "Change the size or aspect ratio (e.g. landscape to portrait)",
      "resource": "videoEdit"
    },
    {
      "name": "Convert Format",
      "value": "convertFormat",
      "action": "Convert video format",
      "description": "Convert between MP4, MOV, WebM, and MKV",
      "resource": "videoEdit"
    },
    {
      "name": "Run Custom FFmpeg Command",
      "value": "customCommand",
      "action": "Run a custom ffmpeg command",
      "description": "Run your own FFmpeg command for advanced processing",
      "resource": "videoEdit"
    },
    {
      "name": "Add Audio",
      "value": "addAudio",
      "action": "Add audio to a video",
      "description": "Add background music or replace the existing audio track",
      "resource": "videoAudio"
    },
    {
      "name": "Remove Audio",
      "value": "removeAudio",
      "action": "Remove audio from a video",
      "description": "Strip all sound from your video",
      "resource": "videoAudio"
    },
    {
      "name": "Extract Audio",
      "value": "extractAudio",
      "action": "Extract audio from a video",
      "description": "Save just the audio track as MP3, WAV, or AAC",
      "resource": "videoAudio"
    },
    {
      "name": "Capture Thumbnail",
      "value": "thumbnail",
      "action": "Capture a thumbnail from a video",
      "description": "Grab a single frame from your video as an image",
      "resource": "videoImage"
    },
    {
      "name": "Capture Thumbnail with Text",
      "value": "thumbnailWithText",
      "action": "Capture a thumbnail with text overlay",
      "description": "Grab a frame and add text or a logo on top",
      "resource": "videoImage"
    },
    {
      "name": "Capture Screenshots",
      "value": "screenshots",
      "action": "Capture screenshots from a video",
      "description": "Grab multiple frames from your video as images",
      "resource": "videoImage"
    },
    {
      "name": "Get Result",
      "value": "getResult",
      "action": "Get the result of a job",
      "description": "Check status and get the result — returns status if still processing, or the finished output",
      "resource": "job"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload a file",
      "description": "Upload a file directly to your storage",
      "resource": "file"
    },
    {
      "name": "Download File",
      "value": "downloadFile",
      "action": "Download a file",
      "description": "Download a file from your storage",
      "resource": "file"
    }
  ]

npm_readme:
  # n8n-nodes-video-api-hub

  An n8n community node for [Video Api Hub](https://videoapihub.com) — create, render, and transform videos directly from your n8n workflows.

  [![npm](https://img.shields.io/npm/v/n8n-nodes-video-api-hub)](https://www.npmjs.com/package/n8n-nodes-video-api-hub)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)

  ## Installation

  In your n8n instance, go to **Settings → Community Nodes → Install** and enter:

  ```
  n8n-nodes-video-api-hub
  ```

  ## Credentials

  1. Sign up at [videoapihub.com](https://videoapihub.com)
  2. Copy your API key (format: `vah_...`)
  3. In n8n, create a new **Video Api Hub API** credential and paste your key

  ## Resources & Operations

  One node, eight resources, covering the full Video Api Hub API.

  ### HTML Video ⭐

  Render HTML compositions to video using [Hyperframes](https://github.com/heygen-com/hyperframes). Write standard HTML with CSS, GSAP animations, Lottie, Google Fonts, or any browser-renderable content — rendered frame-by-frame via headless Chrome and encoded to MP4.

  | Operation | Description |
  |-----------|-------------|
  | **Create HTML Video** | Render an HTML composition to video. Accepts raw HTML (auto Base64-encoded), width, height, FPS, output format, and injectable variables (`window.__hfVariables`) |

  **HTML Composition Rules:**
  - Use GSAP for animations: `gsap.timeline({ paused: true })`
  - Register timeline: `window.__timelines["<composition-id>"] = tl`
  - Root element needs: `data-composition-id`, `data-start="0"`, `data-width`, `data-height`
  - Each clip needs: `id`, `class="clip"`, `data-start`, `data-duration`, `data-track-index`
  - GSAP CDN: `https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js`
  - Google Fonts work via `<link>` tags

  ### Create Video

  | Operation | Description |
  |-----------|-------------|
  | **Create from Design** | Build a video from layers (text, images, GIFs, video clips, audio, shapes) with canvas presets, backgrounds, animations, and font controls |
  | **Create Slideshow** | Turn a series of images into a video with optional background music |
  | **Merge Videos** | Join several videos together, played one after another |

  ### Edit Video

  | Operation | Description |
  |-----------|-------------|
  | **Clip** | Cut a section from a video by start time and duration |
  | **Extract Multiple Clips** | Cut several segments at once (specific times or evenly spaced) |
  | **Resize** | Change aspect ratio with presets (16:9, 9:16, 1:1, etc.) or custom dimensions |
  | **Convert Format** | Convert between MP4, WebM, MOV, and MKV |
  | **Run Custom Command** | Run a custom FFmpeg command for advanced processing |

  ### Video Audio

  | Operation | Description |
  |-----------|-------------|
  | **Add Audio** | Add background music or replace existing audio (volume, delay, trim) |
  | **Remove Audio** | Strip the audio track from a video |
  | **Extract Audio** | Save the audio track as MP3 or other formats |

  ### Video Thumbnail

  | Operation | Description |
  |-----------|-------------|
  | **Get Thumbnail** | Capture a single frame as JPEG/PNG |
  | **Thumbnail with Text** | Capture a frame and overlay text or a logo |
  | **Take Screenshots** | Capture multiple frames (fixed count, specific times, or random) |

  ### Template

  | Operation | Description |
  |-----------|-------------|
  | **Render** | Generate a video from a saved template by filling in variables |

  ### Job

  | Operation | Description |
  |-----------|-------------|
  | **Get Result** | Download the output file or get a download link for a completed job |

  ### File

  | Operation | Description |
  |-----------|-------------|
  | **Upload File** | Upload a file from a previous node (binary data) |
  | **Download File** | Download as binary data or get a temporary download link |

  ## Output Types

  Every video operation supports these output modes:

  | Mode | Description |
  |------|-------------|
  | **File** | Download the file directly when the job completes |
  | **Public URL** | Permanent public link — no authentication needed |
  | **Download Link** | Temporary signed URL that expires (configurable) |
  | **Save to Storage** | Store in your VideoApiHub dashboard for later use |

  ## Typical Workflow

  1. **Upload** a video or provide a URL
  2. **Process** it (clip, resize, add audio, render HTML, etc.) — returns a `task_id`
  3. **Get Result** with Job → Get Result (returns the file, URL, or binary data)

  ## Links

  - [Video Api Hub](https://videoapihub.com)
  - [API Documentation](https://docs.videoapihub.com)
  - [npm Package](https://www.npmjs.com/package/n8n-nodes-video-api-hub)
  - [GitHub Repository](https://github.com/VideoApiHub/n8n-nodes-video-api-hub)

  ## License

  [MIT](LICENSE.md)

  ## License

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

ai_documentation_summary:
  {"purpose":"A community n8n node that processes, creates, and transforms videos using the Video Api Hub API, supporting rendering, editing, audio manipulation, and thumbnail generation.","capabilities":["Render HTML compositions to video using Hyperframes","Create videos from design layers (text, images, GIFs, video clips, audio, shapes)","Create slideshow videos from image series","Merge multiple videos together","Clip video sections by start time and duration","Extract multiple clips at specific times or intervals","Resize videos with aspect ratio presets or custom dimensions","Convert video formats (MP4, WebM, MOV, MKV)","Run custom FFmpeg commands for advanced processing","Add or replace background audio with volume, delay, and trim controls"],"authentication":"API key required (format: vah_...)","commonUseCases":["Automating social media video content creation","Rendering HTML/CSS animations as MP4 videos","Editing and merging user-uploaded video files","Generating video thumbnails for blogs or galleries","Creating slideshow presentations from image libraries"],"limitations":["HTML video rendering requires specific GSAP timeline registration and composition ID attributes","Output modes may require authentication except for Public URLs","Custom FFmpeg commands are limited to those supported by the Video Api Hub backend"],"relatedNodes":["n8n-nodes-core.binary","n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: @vybit/n8n-nodes-vybit.vybit
package_name: @vybit/n8n-nodes-vybit
display_name: Vybit Push Notifications
description: Send notifications with personalized sounds
category: Communication
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vybit
author_github_url: https://github.com/flatirontek/vybit-sdk.git
npm_package_name: @vybit/n8n-nodes-vybit
npm_version: 2.3.0
community_fetched_at: 2026-07-14T14:40:34.246Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # @vybit/n8n-nodes-vybit

  Official n8n community nodes for [Vybit](https://vybit.net) - the personalized audio notification platform.

  [![npm version](https://badge.fury.io/js/%40vybit%2Fn8n-nodes-vybit.svg)](https://www.npmjs.com/package/@vybit/n8n-nodes-vybit)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  ## Features

  - **Dual Authentication**: API Key for personal automation or OAuth2 for multi-user services
  - **Push Notifications**: Send personalized audio notifications from your workflows
  - **Full API Access**: 34 operations across 7 resources, available with either auth method
  - **Manage Vybits**: Create, update, trigger, and delete vybits programmatically
  - **Subscriptions & Peeps**: Subscribe to vybits and manage access invitations
  - **Reminders**: Create and manage scheduled reminders on vybits
  - **Sounds & Logs**: Search sounds and view notification history
  - **Zero Dependencies**: Built with zero runtime dependencies

  ---

  ## Installation

  ### Self-Hosted n8n

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

  Then restart your n8n instance.

  ### n8n Cloud

  Once verified, search for "Vybit" in the n8n nodes panel to install. Verification is currently under review.

  ### For Multi-User Deployments

  See [DEPLOYMENT.md](./DEPLOYMENT.md) for configuring credential sharing in multi-user n8n instances to centrally manage OAuth2 Client Secrets.

  ---

  ## Which Authentication Method Should I Use?

  Both methods provide full access to all operations. Choose based on your use case:

  ### Use **API Key** if:
  - You're automating your own Vybit account
  - Building personal workflows (e.g., "alert me when server is down")
  - Integrating Vybit into your backend service

  **Example**: DevOps engineer using n8n to trigger their personal Vybit when monitoring detects issues

  ### Use **OAuth2** if:
  - You're building a service where users connect their own accounts
  - Each user needs to authorize their own Vybit account
  - Multi-tenant scenarios (agency managing client notifications)

  **Example**: Agency building n8n workflows that send notifications to client Vybit accounts

  ---

  ## Quick Start

  ### API Key Setup

  1. Go to [developer.vybit.net](https://developer.vybit.net)
  2. Generate an API key
  3. In n8n:
     - Add Vybit node
     - Authentication: "API Key"
     - Create new credential and paste your API key

  ### OAuth2 Setup

  1. Go to [developer.vybit.net](https://developer.vybit.net)
  2. Configure OAuth2 settings (client ID, redirect URI)
  3. In n8n:
     - Add Vybit node
     - Authentication: "OAuth2"
     - Create OAuth2 credential with your client ID/secret
  4. Users authorize their Vybit accounts to connect

  ---

  ## Available Operations

  All 34 operations are available with both API Key and OAuth2 authentication.

  ### Profile

  | Operation | Description |
  |-----------|-------------|
  | Get Profile | View account information |
  | Get Usage Metrics | View current usage and tier limits |
  | Check API Status | Check API service health |

  ### Vybits

  | Operation | Description |
  |-----------|-------------|
  | List | Get all vybits |
  | Get | Get vybit details |
  | Create | Create a new vybit |
  | Update | Update vybit settings |
  | Delete | Delete a vybit |
  | Trigger | Send a push notification |

  ### Subscriptions

  | Operation | Description |
  |-----------|-------------|
  | List Public Vybits | Browse publicly available vybits |
  | Get Public Vybit | Get details of a public vybit |
  | Subscribe | Subscribe to a vybit |
  | List My Subscriptions | Get your subscriptions |
  | Get Subscription | Get subscription details |
  | Update Subscription | Update subscription settings |
  | Unsubscribe | Unsubscribe from a vybit |
  | Send to Owner | Send notification to vybit owner |
  | Send to Group | Send notification to all subscribers |

  ### Sounds

  | Operation | Description |
  |-----------|-------------|
  | Search | Search available sounds |
  | Get | Get sound details |
  | Play | Get the playback URL for a sound |

  ### Logs

  | Operation | Description |
  |-----------|-------------|
  | List All | View all notification logs |
  | Get | Get specific log entry details |
  | List by Vybit | View logs for a specific vybit |
  | List by Subscription | View logs for a subscription |

  ### Peeps

  | Operation | Description |
  |-----------|-------------|
  | List All | View all peep invitations |
  | List by Vybit | View peeps for a specific vybit |
  | Invite | Invite a user to a vybit |
  | Get | Get peep details |
  | Delete | Remove a peep invitation |

  ### Reminders

  | Operation | Description |
  |-----------|-------------|
  | List | List all reminders on a vybit |
  | Create | Create a new scheduled reminder |
  | Update | Update an existing reminder |
  | Delete | Delete a reminder |

  ---

  ## Example Workflows

  ### Trigger Alert on Server Error

  ```
  Webhook (error event)
    → Vybit (Trigger)
  ```

  ### Daily Summary Notification

  ```
  Schedule (daily at 9am)
    → HTTP Request (fetch metrics)
    → Vybit (Trigger with summary)
  ```

  ### Create Vybit from Airtable

  ```
  Airtable Trigger (new record)
    → Vybit (Create vybit)
    → Vybit (Trigger, send notification)
  ```

  ---

  ## Development

  This package uses n8n's built-in `httpRequestWithAuthentication` helper for all API calls (no bundled SDK). API endpoint paths are maintained in `Vybit.node.ts` and must be kept in sync with `@vybit/api-sdk` when the API changes.

  ### Building

  ```bash
  npm run build
  ```

  ### Testing Locally

  Using Docker (recommended):

  ```bash
  # See docker-compose.yml in the project root's my-n8n directory
  # The dist is volume-mounted into the container via N8N_CUSTOM_EXTENSIONS
  docker compose up -d
  ```

  Using npm link:

  ```bash
  npm link
  cd /path/to/n8n
  npm link @vybit/n8n-nodes-vybit
  n8n start
  ```

  ### Integration Tests

  ```bash
  # Requires a running n8n instance with a configured Vybit API Key credential
  export N8N_API_KEY="your-n8n-api-key"
  export VYBIT_API_CREDENTIAL_ID="your-credential-id"
  node test/integration/test-runner.js
  ```

  ---

  ## Resources

  - [Developer API Documentation](https://developer.vybit.net/api-reference)
  - [OAuth2 Documentation](https://developer.vybit.net/oauth-reference)
  - [Support](mailto:developer@vybit.net)
  - [Report Issues](https://github.com/flatirontek/vybit-sdk/issues)

  ---

  ## Related Packages

  Part of the Vybit SDK monorepo:

  - [@vybit/api-sdk](https://www.npmjs.com/package/@vybit/api-sdk) - Developer API client
  - [@vybit/oauth2-sdk](https://www.npmjs.com/package/@vybit/oauth2-sdk) - OAuth2 client
  - [@vybit/mcp-server](https://www.npmjs.com/package/@vybit/mcp-server) - MCP server for AI assistants

  ---

  ## License

  MIT © Flatirontek LLC

ai_documentation_summary:
  {"purpose":"Send personalized audio notifications and manage Vybit accounts through n8n workflows using API Key or OAuth2 authentication.","capabilities":["Send push notifications with personalized sounds","Create, update, trigger, and delete Vybit accounts","Manage subscriptions and access invitations (peeps)","Create and manage scheduled reminders","Search and retrieve sound playback URLs","View notification history and logs","Check API status and usage metrics","Support both API Key and OAuth2 authentication methods"],"authentication":"API Key or OAuth2","commonUseCases":["DevOps alerting for server monitoring","Multi-tenant agency workflows for client notifications","Personal automation for account alerts","Daily summary notifications","Dynamic notification creation from external data sources"],"limitations":[],"relatedNodes":["Webhook","Schedule","HTTP Request","Airtable"]}


node_type: n8n-nodes-alohub.alohub
package_name: n8n-nodes-alohub
display_name: Alohub
description: Send Zalo ZNS notifications and make voice calls via Alohub CPaaS
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alohub
author_github_url: https://github.com/alohubvn/
npm_package_name: n8n-nodes-alohub
npm_version: 0.3.2
community_fetched_at: 2026-07-14T14:40:34.247Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "voice",
      "options": [
        {
          "name": "Voice",
          "value": "voice"
        },
        {
          "name": "Zalo ZNS Notification",
          "value": "zns"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "makeACall",
      "options": [
        {
          "name": "Click to Call",
          "value": "makeACall",
          "action": "Click to call via IP phone"
        },
        {
          "name": "Play Audio",
          "value": "playAudio",
          "action": "Call and play an audio file"
        },
        {
          "name": "Text to Speech",
          "value": "textToSpeech",
          "action": "Call and read text aloud"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send ZNS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "zns"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Click to Call",
      "value": "makeACall",
      "action": "Click to call via IP phone",
      "resource": "voice"
    },
    {
      "name": "Play Audio",
      "value": "playAudio",
      "action": "Call and play an audio file",
      "resource": "voice"
    },
    {
      "name": "Text to Speech",
      "value": "textToSpeech",
      "action": "Call and read text aloud",
      "resource": "voice"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send ZNS",
      "resource": "zns"
    }
  ]

npm_readme:
  # n8n-nodes-alohub

  ![n8n community node](https://img.shields.io/badge/n8n-community%20node-ff6d5a)
  ![npm](https://img.shields.io/npm/v/n8n-nodes-alohub)
  ![license](https://img.shields.io/npm/l/n8n-nodes-alohub)

  [n8n](https://n8n.io/) community node for [Alohub](https://alohub.vn) CPaaS platform. Make voice calls (Click a Call) and send Zalo ZNS notifications directly from your n8n workflows.

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

  ## Features

  - **Voice - Click to Call**: Initiate outbound calls via IP phone extension
  - **Zalo ZNS - Send**: Send Zalo ZNS notifications with dynamic template parameters
  - **Campaign search**: Search and select ZNS campaigns with pagination
  - **Dynamic template mapping**: Automatically loads template parameters based on selected campaign
  - **AI Agent compatible**: Use as a tool in n8n AI Agent workflows 

  ## Installation

  ### In n8n (Community Nodes)

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

  ### Via npm (self-hosted)

  ```bash
  npm install n8n-nodes-alohub
  ```

  ## Credentials

  You need an **Alohub API Key** to use this node.

  | Field   | Description                         |
  | ------- | ----------------------------------- |
  | API Key | Your Alohub API key from dashboard  |

  The API key is sent as `X-Api-Key` header with every request.

  ## Operations

  ### Voice

  | Operation    | Description                                              |
  | ------------ | -------------------------------------------------------- |
  | Make a Call  | Click to Call — connects a phone number to an IP phone extension |

  **Parameters:**

  | Parameter    | Required | Description                          |
  | ------------ | -------- | ------------------------------------ |
  | Phone Number | Yes      | Recipient phone number to call       |
  | IP Phone     | Yes      | IP phone extension (e.g. `6688`)     |

  A unique `transactionId` is generated automatically for each call.

  ### Zalo ZNS Notification

  | Operation | Description                                |
  | --------- | ------------------------------------------ |
  | Send      | Send a Zalo ZNS notification to a phone number |

  **Parameters:**

  | Parameter           | Required | Description                                              |
  | ------------------- | -------- | -------------------------------------------------------- |
  | Phone               | Yes      | Recipient phone number (must have a Zalo account)        |
  | Campaign            | Yes      | Select from a searchable list of ZNS campaigns           |
  | Template Parameters | Yes      | Dynamically loaded based on selected campaign's template |

  **How template parameters work:**

  1. Select a campaign from the dropdown (supports search + infinite scroll)
  2. The node fetches the ZNS template associated with that campaign
  3. Template parameter fields are automatically displayed based on the template mapping
  4. Fill in the parameter values (e.g. `customer_name`, `phone_number`)
  5. Static parameters configured server-side are handled automatically

  ## Error Handling

  The node provides detailed error information:

  - `success` — boolean indicating API call result
  - `httpStatus` — HTTP status code (200, 400, 401, 500, etc.)
  - `error_code` — Alohub API error code
  - `error_message` — Human-readable error message from Alohub
  - `transactionId` — Unique ID for tracking and reconciliation

  Enable **Continue On Error** in node settings to capture errors in output instead of stopping the workflow.

  ## Compatibility

  - n8n version: >= 1.0.0
  - Tested on: n8n 2.15.0

  ## Resources

  - [Alohub Website](https://alohub.vn)
  - [Alohub Docs](https://developers.alohub.vn/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables sending Zalo ZNS notifications and initiating voice calls via the Alohub CPaaS platform directly from n8n workflows.","capabilities":["Initiate outbound voice calls via IP phone extension","Send Zalo ZNS notifications with dynamic template parameters","Search and select ZNS campaigns with pagination support","Automatically load template parameters based on selected campaign","Generate unique transaction IDs for call tracking","Compatible with n8n AI Agent workflows as a tool"],"authentication":"API key required (X-Api-Key header)","commonUseCases":["Automated customer notifications via Zalo","Outbound call campaigns for sales or support","Integration with n8n AI Agent for conversational flows"],"limitations":["Requires valid Zalo account for recipient to receive notifications","Voice calls require configured IP phone extension","Template parameters must be manually filled in after campaign selection"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: n8n-nodes-finviz.finviz
package_name: n8n-nodes-finviz
display_name: Finviz
description: Fetch screener data from Finviz Elite
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: be1eza
author_github_url: https://github.com/be1eza/
npm_package_name: n8n-nodes-finviz
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:34.248Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-finviz

  This is an n8n community node. It lets you use [Finviz Elite](https://elite.finviz.com/) in your n8n workflows.

  Finviz is a stock screener and financial data platform. This node fetches screener results from the Finviz Elite export API and outputs them as structured JSON items.

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

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

  ## Installation

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

  ## Operations

  - **Fetch screener data** — Paste a Finviz screener URL to get results. Supports:
    - Custom column selection (via the `&c=` URL parameter)
    - Custom filters (via the `&f=` URL parameter)
    - Sorting (via the `&o=` URL parameter)
    - Return all results or limit to a specific count
    - A screener name label added to each output item
    - Multiple **Output Format** options:
      - **JSON** (default) — one item per row, each column a field
      - **CSV (Binary File)** — the raw CSV attached as a binary file (e.g. to commit to GitHub)
      - **CSV (Text)** — the raw CSV as a string in a single field

  ## Credentials

  You need a [Finviz Elite](https://elite.finviz.com/) subscription. The export API is not available on the free tier.

  1. Log in to Finviz Elite
  2. Go to your account page to find your API key
  3. In n8n, create a new **Finviz API** credential and paste your API key

  ## Compatibility

  Tested with n8n 1.x. Requires `n8nNodesApiVersion: 1`.

  ## Usage

  1. Go to [elite.finviz.com/screener](https://elite.finviz.com/screener.ashx) and configure your filters
  2. To choose which columns are returned, go to the **Custom** tab, click **Customize**, and toggle your columns — the URL will include a `&c=` parameter
  3. Copy the URL from your browser
  4. In your n8n workflow, add the **Finviz** node
  5. Paste the URL into the **Screener URL** field
  6. Optionally set a **Screener Name** to label the output
  7. Choose whether to return all results or set a limit
  8. Execute the node

  The node converts the screener URL to an export URL, fetches the CSV, and by default outputs each row as a JSON item. Choose the **Output Format** to instead get the raw CSV as a binary file or a text string. `Return All` / `Limit` apply to every format.

  ### Commit the CSV to GitHub

  1. Set **Output Format** to **CSV (Binary File)** on the Finviz node (optionally set a **File Name**; it defaults to the Screener Name)
  2. Add a **GitHub** node after it, choose **File → Create** (or **Edit**)
  3. Enable **Binary File** and set the **Input Binary Field** to `data` (the Finviz node's default **Output Field**)
  4. Set the repository, file path, and commit message on the GitHub node

  To fetch multiple screeners, feed multiple URLs from an upstream node — each input item is processed independently.

  This node has `usableAsTool` enabled, so it can be used as a tool by n8n AI Agent nodes.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Finviz Elite API](https://elite.finviz.com/)

ai_documentation_summary:
  {"purpose":"Fetches stock screener data from Finviz Elite by converting screener URLs into structured JSON items.","capabilities":["Fetch screener results via Finviz Elite export API","Custom column selection via &c= URL parameter","Custom filters via &f= URL parameter","Sorting via &o= URL parameter","Limit result count or return all results","Add custom screener name label to output items","Process multiple screeners from upstream nodes","Used as a tool by n8n AI Agent nodes"],"authentication":"API key required (Finviz Elite subscription)","commonUseCases":["Extract stock screening results into JSON format for further processing","Integrate financial data into automated trading or analysis workflows","Generate structured stock lists with specific columns and filters"],"limitations":["Requires Finviz Elite subscription; free tier does not support the export API","Compatible only with n8n 1.x and requires n8nNodesApiVersion: 1"],"relatedNodes":["n8n-nodes-finviz.finviz"]}


node_type: n8n-nodes-agent-brains.integrationTrigger
package_name: n8n-nodes-agent-brains
display_name: AgentBrains Integration Trigger
category: Development
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vbalabash
author_github_url: https://github.com/Agent-Brains/
npm_package_name: n8n-nodes-agent-brains
npm_version: 3.1.4
community_fetched_at: 2026-07-14T14:40:34.249Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Integrate your custom n8n workflow with the AgentBrains platform. Use this trigger to receive webhook calls from AgentBrains and start your flows. To create API credentials, sign up and generate an access token at https://docs.agent-brains.com/integrations/n8n and provide it via the AgentBrains credentials in n8n.

npm_readme:
  # n8n-nodes-agent-brains

  AgentBrains nodes for n8n to integrate your workflows with the AgentBrains platform. Use these nodes to connect production webhooks for custom AI employee integrations and to run Synthetic User validation tests against your flows.

  AgentBrains helps businesses build, validate, and manage AI employees with curated knowledge, configurable scoring, and an operational Inbox for monitoring and improvement. These nodes make it straightforward to plug your n8n workflows into AgentBrains for real-world operation and testing.

  ## Installation

  Follow the n8n community nodes installation guide: https://docs.n8n.io/integrations/community-nodes/installation/

  ## Maintenance

  - This repo is a single publishable package: `n8n-nodes-agent-brains`.
  - Source files live at the repository root in `nodes/`, `credentials/`, and `icons/`.
  - Keep root-level `nodes/`, `credentials/`, and `icons/` committed because external validators may request those paths directly from GitHub.
  - The package exposes one AgentBrains action node and one AgentBrains Integration Trigger node.
  - Use `npm run release:all` to publish the single package; the old `-dev` publish flow has been removed.
  - Create plain numeric git tags such as `3.1.0`, not `v3.1.0`, so npm version links resolve correctly.

  ## Trigger Node: AgentBrains Integration Trigger

  - Starts your n8n workflow from AgentBrains via production webhook.
  - Registers on workflow activation and unregisters on deactivation for clean lifecycle management.
  - Works for production AI employee integrations (e.g., sales, support, setup assistants) and for running Synthetic User tests to validate flows before and after launch.

  ### Typical Uses

  - Trigger consumer workflows from AgentBrains using the production webhook URL.
  - Validate workflows with Synthetic Users configured in AgentBrains and attach scoring to conversations.
  - Centralize monitoring and triage in AgentBrains Inbox while executing logic in n8n.

  ## Transform Node: AgentBrains QA Tester

  - Runs a synthetic conversation test against your n8n workflow (or any agent endpoint) using a selected Synthetic User persona.
  - Polls the AgentBrains orchestrator for completion and returns the full transcript, scoring, and pass/fail results.
  - Ideal for "Validation" workflows that run periodically or on-demand to ensure agent quality.

  ### Typical Uses

  - **Regression Testing:** Trigger a validation workflow after deploying changes to verify core flows (e.g., "Purchase under $1500").
  - **Quality Monitoring:** Schedule daily tests to catch drift or API failures in your agent's tools.
  - **A/B Testing:** Run the same scenario against different agent versions/prompts and compare scores.

  ### Inputs & Configuration

  - **Synthetic User:** Select from your available personas (e.g., "Angry Customer", "Tech Savvy Buyer") loaded dynamically from AgentBrains.
  - **Objectives & Constraints:** Define the goal (e.g., "Buy a thermal scope"), constraints ("Budget < $1500"), and success criteria ("Link provided").
  - **Wait for Completion:** Enable to let the node poll until the conversation finishes (recommended for immediate results).

  ## Credentials

  - Create an account and generate an access token: https://docs.agent-brains.com/integrations/n8n
  - Add credentials in n8n and select them on the node to authenticate requests.

  ## Usage Notes

  - For production usage, activate your workflow so the production webhook is registered.
  - Use “Respond using ‘Respond to Webhook’ node” to return data generated by downstream nodes or “Last Node” to return the final item.
  - When credentials or webhook URLs change, re-activate the workflow to refresh the registration state.

  ## About AgentBrains

  - Build and deploy AI employees that scale with your business.
  - Curate a Knowledge Base, define goals and guardrails, and validate behavior.
  - Run Synthetic Users to simulate customer behaviors; evolve them into Digital Twins using real transcripts.
  - Use the Inbox to monitor conversations, score performance, triage regressions, and compare variants.

  Learn more: https://agent-brains.com/

  ## Resources

  - n8n community nodes documentation: https://docs.n8n.io/integrations/#community-nodes
  - AgentBrains system integration: https://docs.agent-brains.com/integrations/n8n

ai_documentation_summary:
  {"purpose":"This n8n node acts as a webhook trigger that starts workflows when receiving calls from the AgentBrains platform, enabling integration of custom AI employee operations and synthetic user testing.","capabilities":["Receive production webhook calls from AgentBrains to initiate workflows","Register and unregister workflows for lifecycle management","Support Synthetic User persona-based conversation testing","Poll for conversation completion and return transcripts, scoring, and pass/fail results","Integrate with AgentBrains Inbox for monitoring and triage"],"authentication":"API key required (Access token generated from AgentBrains system integration)","commonUseCases":["Trigger consumer workflows from AgentBrains for sales, support, or setup assistants","Validate workflows with Synthetic Users before and after deployment","Run regression tests to verify core flows after code changes","Schedule quality monitoring tests to detect API failures or drift","Perform A/B testing by comparing scores across different agent versions"],"limitations":["Requires manual activation of workflows to register production webhooks","Workflow registration must be refreshed if credentials or webhook URLs change","Only exposes one action node and one trigger node in the package"],"relatedNodes":["Respond to Webhook","Last Node","AgentBrains QA Tester","AgentBrains Action"]}


node_type: n8n-nodes-agent-brains.agentBrains
package_name: n8n-nodes-agent-brains
display_name: AgentBrains
description: Interact with AgentBrains Knowledge Base, Employee, RAG, and Synthetic QA functionality
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vbalabash
author_github_url: https://github.com/Agent-Brains/
npm_package_name: n8n-nodes-agent-brains
npm_version: 3.1.4
community_fetched_at: 2026-07-14T14:40:34.250Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "entity",
      "options": [
        {
          "name": "Document",
          "value": "entity",
          "description": "Individual items like documents, products, or services stored in the knowledge base"
        },
        {
          "name": "Category",
          "value": "category",
          "description": "Logical groups used to segregate and organize related entities"
        },
        {
          "name": "Image",
          "value": "attachment",
          "description": "Files and media attached to entities"
        },
        {
          "name": "Relationship Type",
          "value": "relationshipType",
          "description": "Types of relationships that can exist between entities"
        },
        {
          "name": "Company Data",
          "value": "companyData",
          "description": "Retrieve company-level data and configuration as a single object"
        },
        {
          "name": "Employee",
          "value": "employee",
          "description": "Retrieve AgentBrains employee configuration"
        },
        {
          "name": "RAG",
          "value": "rag",
          "description": "Retrieve text or images from AgentBrains RAG"
        },
        {
          "name": "Synthetic QA",
          "value": "syntheticQa",
          "description": "Run AgentBrains synthetic QA evaluations"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an entity",
          "description": "Get an entity by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many entities",
          "description": "Retrieve many entities"
        },
        {
          "name": "Get Related Entities",
          "value": "getRelationships",
          "action": "Get related entities",
          "description": "Retrieve a list of entities that are linked to the specified entity"
        },
        {
          "name": "Get by Category Type",
          "value": "getByCategoryAlias",
          "action": "List entities by category type",
          "description": "List entities by category type"
        },
        {
          "name": "Get All Documents",
          "value": "getAllDocuments",
          "action": "Get all documents",
          "description": "Retrieve all documents from the knowledge base"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a category",
          "description": "Get a category by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List many categories",
          "description": "List many categories"
        },
        {
          "name": "Get by Type",
          "value": "getByAlias",
          "action": "List categories by type key",
          "description": "List categories by type key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "category"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List many category types",
          "description": "List many category types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "categoryAlias"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List many images",
          "description": "List many images"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an image",
          "description": "Get an image by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List many relationship types",
          "description": "List many relationship types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "relationshipType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Config",
          "value": "get",
          "action": "Get an employee configuration",
          "description": "Get an employee configuration by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "text",
      "options": [
        {
          "name": "Retrieve Text",
          "value": "text",
          "action": "Retrieve text",
          "description": "Retrieve text from an index"
        },
        {
          "name": "Retrieve Image",
          "value": "image",
          "action": "Retrieve image",
          "description": "Retrieve images from Core Image Index"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rag"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an entity",
      "description": "Get an entity by ID",
      "resource": "entity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many entities",
      "description": "Retrieve many entities",
      "resource": "entity"
    },
    {
      "name": "Get Related Entities",
      "value": "getRelationships",
      "action": "Get related entities",
      "description": "Retrieve a list of entities that are linked to the specified entity",
      "resource": "entity"
    },
    {
      "name": "Get by Category Type",
      "value": "getByCategoryAlias",
      "action": "List entities by category type",
      "description": "List entities by category type",
      "resource": "entity"
    },
    {
      "name": "Get All Documents",
      "value": "getAllDocuments",
      "action": "Get all documents",
      "description": "Retrieve all documents from the knowledge base",
      "resource": "entity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a category",
      "description": "Get a category by ID",
      "resource": "category"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List many categories",
      "description": "List many categories",
      "resource": "category"
    },
    {
      "name": "Get by Type",
      "value": "getByAlias",
      "action": "List categories by type key",
      "description": "List categories by type key",
      "resource": "category"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List many category types",
      "description": "List many category types",
      "resource": "categoryAlias"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List many images",
      "description": "List many images",
      "resource": "attachment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an image",
      "description": "Get an image by ID",
      "resource": "attachment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List many relationship types",
      "description": "List many relationship types",
      "resource": "relationshipType"
    },
    {
      "name": "Get Config",
      "value": "get",
      "action": "Get an employee configuration",
      "description": "Get an employee configuration by ID",
      "resource": "employee"
    },
    {
      "name": "Retrieve Text",
      "value": "text",
      "action": "Retrieve text",
      "description": "Retrieve text from an index",
      "resource": "rag"
    },
    {
      "name": "Retrieve Image",
      "value": "image",
      "action": "Retrieve image",
      "description": "Retrieve images from Core Image Index",
      "resource": "rag"
    }
  ]

npm_readme:
  # n8n-nodes-agent-brains

  AgentBrains nodes for n8n to integrate your workflows with the AgentBrains platform. Use these nodes to connect production webhooks for custom AI employee integrations and to run Synthetic User validation tests against your flows.

  AgentBrains helps businesses build, validate, and manage AI employees with curated knowledge, configurable scoring, and an operational Inbox for monitoring and improvement. These nodes make it straightforward to plug your n8n workflows into AgentBrains for real-world operation and testing.

  ## Installation

  Follow the n8n community nodes installation guide: https://docs.n8n.io/integrations/community-nodes/installation/

  ## Maintenance

  - This repo is a single publishable package: `n8n-nodes-agent-brains`.
  - Source files live at the repository root in `nodes/`, `credentials/`, and `icons/`.
  - Keep root-level `nodes/`, `credentials/`, and `icons/` committed because external validators may request those paths directly from GitHub.
  - The package exposes one AgentBrains action node and one AgentBrains Integration Trigger node.
  - Use `npm run release:all` to publish the single package; the old `-dev` publish flow has been removed.
  - Create plain numeric git tags such as `3.1.0`, not `v3.1.0`, so npm version links resolve correctly.

  ## Trigger Node: AgentBrains Integration Trigger

  - Starts your n8n workflow from AgentBrains via production webhook.
  - Registers on workflow activation and unregisters on deactivation for clean lifecycle management.
  - Works for production AI employee integrations (e.g., sales, support, setup assistants) and for running Synthetic User tests to validate flows before and after launch.

  ### Typical Uses

  - Trigger consumer workflows from AgentBrains using the production webhook URL.
  - Validate workflows with Synthetic Users configured in AgentBrains and attach scoring to conversations.
  - Centralize monitoring and triage in AgentBrains Inbox while executing logic in n8n.

  ## Transform Node: AgentBrains QA Tester

  - Runs a synthetic conversation test against your n8n workflow (or any agent endpoint) using a selected Synthetic User persona.
  - Polls the AgentBrains orchestrator for completion and returns the full transcript, scoring, and pass/fail results.
  - Ideal for "Validation" workflows that run periodically or on-demand to ensure agent quality.

  ### Typical Uses

  - **Regression Testing:** Trigger a validation workflow after deploying changes to verify core flows (e.g., "Purchase under $1500").
  - **Quality Monitoring:** Schedule daily tests to catch drift or API failures in your agent's tools.
  - **A/B Testing:** Run the same scenario against different agent versions/prompts and compare scores.

  ### Inputs & Configuration

  - **Synthetic User:** Select from your available personas (e.g., "Angry Customer", "Tech Savvy Buyer") loaded dynamically from AgentBrains.
  - **Objectives & Constraints:** Define the goal (e.g., "Buy a thermal scope"), constraints ("Budget < $1500"), and success criteria ("Link provided").
  - **Wait for Completion:** Enable to let the node poll until the conversation finishes (recommended for immediate results).

  ## Credentials

  - Create an account and generate an access token: https://docs.agent-brains.com/integrations/n8n
  - Add credentials in n8n and select them on the node to authenticate requests.

  ## Usage Notes

  - For production usage, activate your workflow so the production webhook is registered.
  - Use “Respond using ‘Respond to Webhook’ node” to return data generated by downstream nodes or “Last Node” to return the final item.
  - When credentials or webhook URLs change, re-activate the workflow to refresh the registration state.

  ## About AgentBrains

  - Build and deploy AI employees that scale with your business.
  - Curate a Knowledge Base, define goals and guardrails, and validate behavior.
  - Run Synthetic Users to simulate customer behaviors; evolve them into Digital Twins using real transcripts.
  - Use the Inbox to monitor conversations, score performance, triage regressions, and compare variants.

  Learn more: https://agent-brains.com/

  ## Resources

  - n8n community nodes documentation: https://docs.n8n.io/integrations/#community-nodes
  - AgentBrains system integration: https://docs.agent-brains.com/integrations/n8n

ai_documentation_summary:
  {"purpose":"This n8n node package enables integration with the AgentBrains platform to manage AI employees, validate workflows using Synthetic Users, and interact with Knowledge Bases and RAG functionality.","capabilities":["Trigger workflows via production webhooks from AgentBrains","Run synthetic conversation tests against n8n workflows","Poll for conversation completion and retrieve transcripts/scoring","Support multiple Synthetic User personas","Define objectives, constraints, and success criteria for tests","Perform regression testing after deployments","Schedule periodic quality monitoring tests","Conduct A/B testing with different agent versions"],"authentication":"API key required (Access token from AgentBrains)","commonUseCases":["Production AI employee integrations for sales, support, or setup assistants","Validating workflows before and after launch using Synthetic Users","Running periodic regression tests to verify core flows","Monitoring agent quality and catching API failures","A/B testing different agent prompts or versions"],"limitations":["Requires manual workflow activation to register production webhooks","Workflow re-activation needed when credentials or webhook URLs change","Requires external AgentBrains account and access token setup"],"relatedNodes":["Webhook Trigger","HTTP Request","Respond to Webhook","Last Node"]}


node_type: n8n-nodes-vh3ai.vh3Ai
package_name: n8n-nodes-vh3ai
display_name: VH3 AI
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vh3_ai
author_github_url: https://github.com/VH3DIGITAL/
npm_package_name: n8n-nodes-vh3ai
npm_version: 0.10.9
community_fetched_at: 2026-07-14T14:40:34.252Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Read and write BigChange field service data and access VH3 AI intelligence features — jobs, contacts, invoices, reports, search, cases, and more.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "jobs",
      "options": [
        {
          "name": "Account Report (VH3 AI)",
          "value": "accountReport",
          "description": "Generate monthly account review reports for a contact."
        },
        {
          "name": "Attachment (Web Services)",
          "value": "wsAttachments",
          "description": "Retrieve and list attachments for BigChange entities."
        },
        {
          "name": "Briefing (VH3 AI)",
          "value": "briefing",
          "description": "Generate pre-job intelligence briefings."
        },
        {
          "name": "Case (VH3 AI)",
          "value": "cases",
          "description": "Case management — create, update, transition, comment, link items and participants."
        },
        {
          "name": "Connie (VH3 AI)",
          "value": "connie",
          "description": "Conversational AI assistant — chat, sessions, and history search."
        },
        {
          "name": "Contact (BigChange)",
          "value": "contacts",
          "description": "Customers and sites — companies, addresses, locations."
        },
        {
          "name": "Email (VH3 AI)",
          "value": "email",
          "description": "Email triage — classify, ingest, and list triage categories."
        },
        {
          "name": "Intelligence (VH3 AI)",
          "value": "intelligence",
          "description": "Job type profiling — list, get, and generate intelligence profiles."
        },
        {
          "name": "Investigate (VH3 AI)",
          "value": "investigate",
          "description": "Run investigative queries against operational data."
        },
        {
          "name": "Invoice (BigChange)",
          "value": "invoices",
          "description": "Sales invoices and their line items — read, create, edit, mark sent/paid, cancel."
        },
        {
          "name": "Job (BigChange)",
          "value": "jobs",
          "description": "Field service jobs — CRUD, schedule, start, set result, cancel; manage constraints and stock."
        },
        {
          "name": "Job Feed (VH3 AI)",
          "value": "jobFeed",
          "description": "Enriched job feed with aggregation and analytics."
        },
        {
          "name": "Job Group (BigChange)",
          "value": "jobGroups",
          "description": "Linked sets of jobs (e.g. multi-visit projects) and their status history."
        },
        {
          "name": "Job Type (BigChange)",
          "value": "jobTypes",
          "description": "Job type definitions (templates) — schemas for installation/repair/maintenance."
        },
        {
          "name": "Note (BigChange)",
          "value": "notes",
          "description": "Notes, tasks, and progress updates attached to jobs/contacts/persons."
        },
        {
          "name": "Person (BigChange)",
          "value": "persons",
          "description": "Individual people attached to a contact (e.g. site contacts). Includes consent history."
        },
        {
          "name": "Pulse (VH3 AI)",
          "value": "pulse",
          "description": "Operational pulse dashboard for your company."
        },
        {
          "name": "Purchase Order (BigChange)",
          "value": "purchaseOrders",
          "description": "Purchase orders and their line items — read, create, edit; manage PO series (numbering)."
        },
        {
          "name": "Quote (BigChange)",
          "value": "quotes",
          "description": "Sales quotes and their line items — read, create, edit, mark sent/accepted/rejected."
        },
        {
          "name": "Reference Data (BigChange)",
          "value": "referenceData",
          "description": "Lookup tables — department codes and nominal (accounting) codes."
        },
        {
          "name": "Report (VH3 AI)",
          "value": "reports",
          "description": "Generate operational reports (daily, weekly, monthly)."
        },
        {
          "name": "Report (Web Services)",
          "value": "wsReports",
          "description": "BigChange Web Services driver/vehicle performance and infringement reports."
        },
        {
          "name": "Resource / Engineer (BigChange)",
          "value": "resources",
          "description": "Engineers/technicians (the field workforce) and their groups."
        },
        {
          "name": "Sales Opportunity (BigChange)",
          "value": "salesOpportunities",
          "description": "Sales opportunities (CRM pipeline) — read, edit, manage line items; list probabilities & stages."
        },
        {
          "name": "Search (VH3 AI)",
          "value": "search",
          "description": "Semantic and outcome search across operational data."
        },
        {
          "name": "Sentinel (VH3 AI)",
          "value": "sentinel",
          "description": "Proactive monitoring — run sentinels, view registry and results."
        },
        {
          "name": "Stock (BigChange)",
          "value": "stock",
          "description": "Inventory — product categories, stock details, items, movements, and suppliers."
        },
        {
          "name": "Tracking (Web Services)",
          "value": "wsTracking",
          "description": "GPS tracking — journeys, live positions, and odometer readings."
        },
        {
          "name": "User (VH3 AI)",
          "value": "users",
          "description": "User management — list, invite, update role, and delete company users."
        },
        {
          "name": "Vehicle (BigChange)",
          "value": "vehicles",
          "description": "Fleet vehicles — read/create/update vehicle records and groups."
        },
        {
          "name": "Weather (VH3 AI)",
          "value": "weather",
          "description": "Weather data for jobs, sites, forecasts, and historical lookups."
        },
        {
          "name": "Worksheet (BigChange)",
          "value": "worksheets",
          "description": "Mobile-app worksheet/checklist definitions, questions, and submitted answers."
        },
        {
          "name": "Worksheet Group (BigChange)",
          "value": "worksheetGroups",
          "description": "Folders that organise worksheet definitions."
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listJobs",
      "options": [
        {
          "name": "Cancel Job",
          "value": "cancelJob",
          "action": "Cancel a job",
          "description": "Cancel a field service job. Requires the numeric job ID. Optional reason text. Use only when the job will not happen at all (otherwise prefer Set Job Result with completedWithIssues)."
        },
        {
          "name": "Create Job",
          "value": "createJob",
          "action": "Create a job",
          "description": "Create a new field service job. Requires a job type ID (from List Job Types) and a contact (customer/site) ID (from List Contacts). Returns the new job ID. Does not schedule it — call Schedule Job afterwards."
        },
        {
          "name": "Create Job (Dynamic Fields)",
          "value": "createJobDynamic",
          "action": "Create a job with dynamic custom fields",
          "description": "Create a job where custom fields are supplied as a pre-built JSON array from a previous node (e.g. a Code node). Useful for automated pipelines where custom field values are resolved dynamically at runtime rather than configured manually."
        },
        {
          "name": "Create Job Constraint",
          "value": "createJobConstraint",
          "action": "Create a job constraint",
          "description": "Add a scheduling rule to a job (e.g. must start before X, requires engineer Y or skill Z). Time-based types need constraintAt; resource/skill types need entityId. Used by the BigChange scheduler."
        },
        {
          "name": "Create Job Stock",
          "value": "createJobStock",
          "action": "Create job stock entry",
          "description": "Plan or record stock/parts movement on a job (brought, used, taken back). Requires job ID; supply stockDetailsId or stockItemId plus an action and quantity."
        },
        {
          "name": "Delete Job Constraint",
          "value": "deleteJobConstraint",
          "action": "Delete a job constraint",
          "description": "Remove a scheduling constraint by its constraint ID (get it first via List Job Constraints)."
        },
        {
          "name": "Edit Job",
          "value": "editJob",
          "action": "Edit a job",
          "description": "Update fields on an existing job (description, reference, planned duration, person, order number, custom fields, office notes, isActioned, isFinanciallyComplete). Does not change schedule or status — use Schedule Job / Start Job / Set Job Result for those."
        },
        {
          "name": "Get Job",
          "value": "getJob",
          "action": "Get a job (enriched)",
          "description": "Get the FULL enriched view of one job (status history, assigned engineer, site address, custom fields, completed worksheet answers, attachments). Heavier payload — use this when an agent needs to summarise/answer questions about a specific job. For a quick lookup, use Get Job by ID instead."
        },
        {
          "name": "Get Job by ID",
          "value": "getJobById",
          "action": "Get a job by ID (lightweight)",
          "description": "Lightweight single-job lookup by numeric ID via the proxy. Optionally include worksheets. Faster and cheaper than Get Job — prefer this when you only need core job fields. Set Simplify=true to strip the deep BigChange envelope."
        },
        {
          "name": "List Job Constraints",
          "value": "listJobConstraints",
          "action": "List job constraints",
          "description": "List all scheduling constraints currently attached to a job (pre-existing rules the scheduler must respect)."
        },
        {
          "name": "List Job Status History",
          "value": "listJobStatusHistory",
          "action": "List job status history",
          "description": "Get the full audit trail of status transitions for a job (new → scheduled → started → completedOk, etc.) with timestamps and actors. Use to debug \"why is this job in this state?\" or build a timeline."
        },
        {
          "name": "List Job Stock",
          "value": "listJobStock",
          "action": "List job stock",
          "description": "List every stock/parts line attached to a job — what was planned, brought, used, or taken back."
        },
        {
          "name": "List Jobs",
          "value": "listJobs",
          "action": "List or search jobs",
          "description": "Primary search for jobs. REQUIRES a created-from / created-to UTC window. Filter by status (e.g. completedOk, scheduled, started), job type IDs, contact (customer/site) IDs, resource (engineer) IDs, vehicle IDs, or reference. Returns paginated job records. Default returnAll=false. Set Simplify=true to strip envelopes."
        },
        {
          "name": "Schedule Job",
          "value": "scheduleJob",
          "action": "Schedule a job",
          "description": "Assign an engineer (resource), vehicle, and/or planned start time to a job. Use after Create Job or to reassign. plannedStartAt is UTC ISO-8601."
        },
        {
          "name": "Set Job Result",
          "value": "setJobResult",
          "action": "Set job result",
          "description": "Close a job by writing its completion outcome. Status MUST be completedOk or completedWithIssues. Optional result text and an override timestamp. After this call the job is treated as done."
        },
        {
          "name": "Start Job",
          "value": "startJob",
          "action": "Start a job",
          "description": "Mark a job as started (engineer en-route/on-site). Optional comment (max 250 chars) and override timestamp. Cannot start an already-completed or cancelled job."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listContacts",
      "options": [
        {
          "name": "Create Contact",
          "value": "createContact",
          "action": "Create a contact",
          "description": "Create a new customer or site. Requires name, group ID, and lat/lng (lat/lng can be 0 if unknown but must be supplied). Optional address fields and parent contact ID for child sites."
        },
        {
          "name": "Create Contact Group",
          "value": "createContactGroup",
          "action": "Create a contact group",
          "description": "Create a new contact group (folder/category for customers and sites). Requires only a name."
        },
        {
          "name": "Edit Contact",
          "value": "editContact",
          "action": "Edit a contact",
          "description": "Update an existing contact (customer or site). Name, group, and lat/lng must be re-supplied even if unchanged. Address fields are optional."
        },
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get a contact",
          "description": "Get one contact by numeric ID. Returns address, location, custom fields, group, status, parent linkage. Use this when an agent asks \"what address is customer X at?\" or \"tell me about site Y\"."
        },
        {
          "name": "Get Contact Group",
          "value": "getContactGroup",
          "action": "Get a contact group",
          "description": "Get one contact group by ID. Use to look up a group's name/metadata."
        },
        {
          "name": "List Contact Groups",
          "value": "listContactGroups",
          "action": "List contact groups",
          "description": "List all contact groups (the categories used to organise customers and sites). Useful for mapping group IDs to names."
        },
        {
          "name": "List Contacts",
          "value": "listContacts",
          "action": "List or search contacts",
          "description": "Primary search for customers and sites. Filter by name (starts-with), reference, IDs, parent ID, group ID, or status (normal / contactOnStop / creditLimitOnStop). Supports paging. Use this whenever an agent needs to find a contact by name or list customers/sites."
        },
        {
          "name": "Stop Contact",
          "value": "stopContact",
          "action": "Put contact on stop",
          "description": "Block a customer or site from new jobs/invoices. Choose contactOnStop (general hold) or creditLimitOnStop (account is over credit). Optional reason. Pick whether to cascade to child sites via Applies To."
        },
        {
          "name": "Unstop Contact",
          "value": "unstopContact",
          "action": "Remove contact from stop",
          "description": "Lift a stop on a customer or site so new jobs/invoices can be raised again. Pick whether to cascade to children via Applies To."
        },
        {
          "name": "Update Contact Group",
          "value": "updateContactGroup",
          "action": "Update a contact group",
          "description": "Rename an existing contact group. Provide the group ID and the new name."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listResources",
      "options": [
        {
          "name": "Create Resource",
          "value": "createResource",
          "action": "Create a resource (engineer)",
          "description": "Create a new engineer/technician/operative. Requires name and groupId (team). Optional email, mobile, reference. Returns the new resource ID for use in Schedule Job."
        },
        {
          "name": "Get Resource",
          "value": "getResource",
          "action": "Get a resource (engineer)",
          "description": "Get one engineer by numeric ID — name, group/team, contact details, reference. Use to look up an engineer's profile."
        },
        {
          "name": "Get Resource Group",
          "value": "getResourceGroup",
          "action": "Get a resource group",
          "description": "Get one resource group (team) by ID. Use to map a group ID to its name."
        },
        {
          "name": "List Resource Groups",
          "value": "listResourceGroups",
          "action": "List resource groups (teams)",
          "description": "List the teams that engineers belong to (e.g. \"North region\", \"Senior techs\"). Use as a lookup before listing/creating resources."
        },
        {
          "name": "List Resources",
          "value": "listResources",
          "action": "List resources (engineers)",
          "description": "List every engineer/technician/operative on the books. Use whenever an agent needs to find engineers, map names to IDs, or pick someone to assign a job to."
        },
        {
          "name": "Update Resource",
          "value": "updateResource",
          "action": "Update a resource (engineer)",
          "description": "Update fields on an existing engineer record (name, group/team, email, mobile, reference). Only supplied fields are changed."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resources"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listJobTypes",
      "options": [
        {
          "name": "Get Job Type",
          "value": "getJobType",
          "action": "Get a job type",
          "description": "Get one job type definition by numeric ID — name, default duration, custom field schema, configuration. Use to discover what custom fields a job of this type accepts."
        },
        {
          "name": "List Job Types",
          "value": "listJobTypes",
          "action": "List job types",
          "description": "List every job type/template (e.g. installation, repair, maintenance, callout). Required reference data before Create Job — use this to find the right typeId."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobTypes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listVehicles",
      "options": [
        {
          "name": "Create Vehicle",
          "value": "createVehicle",
          "action": "Create a vehicle",
          "description": "Add a new vehicle to the fleet. Requires groupId, vehicleType (e.g. van, car, truck), registration. Optional make, model, registrationYear, reference, fixedResourceId (driver)."
        },
        {
          "name": "Get Vehicle",
          "value": "getVehicle",
          "action": "Get a vehicle",
          "description": "Get one vehicle by numeric ID — registration, make, model, year, group, fixed driver. Use to look up a vehicle from a job."
        },
        {
          "name": "List Vehicles",
          "value": "listVehicles",
          "action": "List vehicles",
          "description": "List all fleet vehicles. Use as a lookup before scheduling jobs to a vehicle, or to find the registration/make of an asset."
        },
        {
          "name": "Update Vehicle",
          "value": "updateVehicle",
          "action": "Update a vehicle",
          "description": "Update fields on a vehicle (group, type, registration, make, model, year, reference, fixed driver). Only supplied fields change."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vehicles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listWorksheetDefinitions",
      "options": [
        {
          "name": "Get Worksheet",
          "value": "getWorksheet",
          "action": "Get a worksheet definition",
          "description": "Get one worksheet form template (the schema/blueprint) by numeric ID — title, group, version metadata. For the questions inside it, use Get Worksheet Questions."
        },
        {
          "name": "Get Worksheet Questions",
          "value": "getWorksheetQuestions",
          "action": "Get worksheet questions",
          "description": "List the questions/fields defined inside a worksheet template (text, multiple choice, photo, signature). Use to map a question ID to its label when interpreting answers."
        },
        {
          "name": "List Worksheet Answers",
          "value": "listWorksheetAnswers",
          "action": "List worksheet answers",
          "description": "Get completed worksheet submissions for one or more jobs — answers, photos, signatures, parts captured. Requires a comma-separated list of job IDs. Use when an agent needs to summarise what an engineer did or extract specific captured values."
        },
        {
          "name": "List Worksheet Definitions",
          "value": "listWorksheetDefinitions",
          "action": "List worksheet definitions",
          "description": "List every worksheet form template (the blueprints engineers fill in on the mobile app). Use to discover available worksheets or map worksheet IDs to titles."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "worksheets"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listWorksheetGroups",
      "options": [
        {
          "name": "Get Worksheet Group",
          "value": "getWorksheetGroup",
          "action": "Get a worksheet group",
          "description": "Get one worksheet group (folder) by numeric ID. Use to map a group ID to its name."
        },
        {
          "name": "List Worksheet Groups",
          "value": "listWorksheetGroups",
          "action": "List worksheet groups",
          "description": "List the folders that organise worksheet templates. Use as a lookup before browsing worksheet definitions."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "worksheetGroups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listInvoices",
      "options": [
        {
          "name": "Cancel Invoice",
          "value": "cancelInvoice",
          "action": "Cancel an invoice",
          "description": "Cancel an invoice by ID. Use only for invoices that should not be paid (e.g. raised in error). Cancellation is permanent."
        },
        {
          "name": "Create Invoice",
          "value": "createInvoice",
          "action": "Create an invoice",
          "description": "Raise a new invoice. Requires currencyCode (ISO 4217, e.g. GBP, USD, EUR). Link to a job, job group, OR contact via additional fields. Optionally set invoice date (createdAt), notes, bank account, department, nominal code. After creation, add lines via Create Invoice Line Item, then Mark Invoice Sent."
        },
        {
          "name": "Create Invoice Line Item",
          "value": "createInvoiceLineItem",
          "action": "Create an invoice line item",
          "description": "Add a billable line to an invoice. Requires invoiceId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId. Get tax/nominal/department code IDs from List Reference Data."
        },
        {
          "name": "Delete Invoice Line Item",
          "value": "deleteInvoiceLineItem",
          "action": "Delete an invoice line item",
          "description": "Remove a line item from an invoice (only valid before the invoice is sent/paid). Needs both invoiceId and lineItemId."
        },
        {
          "name": "Edit Invoice",
          "value": "editInvoice",
          "action": "Edit an invoice",
          "description": "Update notes on an existing invoice (clientNotes shown to customer; internalNotes private). Cannot change currency, totals, or links — recreate for those changes."
        },
        {
          "name": "Get Invoice",
          "value": "getInvoice",
          "action": "Get an invoice",
          "description": "Get a single invoice by numeric ID — totals, status, customer, links, tax breakdown. Use List Invoice Line Items for the lines."
        },
        {
          "name": "Get Invoice Line Item",
          "value": "getInvoiceLineItem",
          "action": "Get an invoice line item",
          "description": "Get one line on an invoice (description, qty, unit cost/price, tax, nominal, department). Needs both invoiceId and lineItemId."
        },
        {
          "name": "List Invoice Line Items",
          "value": "listInvoiceLineItems",
          "action": "List invoice line items",
          "description": "List every line on an invoice (what was billed). Use to compute totals, audit a bill, or extract narrative for a customer email."
        },
        {
          "name": "List Invoices",
          "value": "listInvoices",
          "action": "List or search invoices",
          "description": "List invoices. BigChange requires at least one filter or a date range — if you supply none, the node defaults to the last 12 months. Filter by job ID(s), contact ID(s), reference, or createdAt window. Use to find recent/unpaid invoices, customer history, etc."
        },
        {
          "name": "Mark Invoice Paid",
          "value": "markInvoicePaid",
          "action": "Mark an invoice as paid",
          "description": "Record payment received on an invoice. Optional paidAt timestamp (UTC, defaults to now). Use after manual payment reconciliation."
        },
        {
          "name": "Mark Invoice Sent",
          "value": "markInvoiceSent",
          "action": "Mark an invoice as sent",
          "description": "Mark an invoice as issued/sent to the customer. Required before payment can be recorded. No fields beyond invoiceId."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoices"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listNotes",
      "options": [
        {
          "name": "Create Note",
          "value": "createNote",
          "action": "Create a note",
          "description": "Attach a note/task/comment to an entity. Requires entityType (job, contact, person, etc.), entityId, typeId (from List Note Types), and a subject. Optional description, dueAt (UTC), status, owner. Use for follow-ups, customer comms log, internal flags."
        },
        {
          "name": "Create Progress Update",
          "value": "createProgressUpdate",
          "action": "Create a progress update",
          "description": "Append a progress comment to an existing note (does not modify the original). Use for status updates on tasks/follow-ups."
        },
        {
          "name": "Edit Note",
          "value": "editNote",
          "action": "Edit a note",
          "description": "Update an existing note. All core fields (entityType, entityId, typeId, subject) must be re-supplied. Use to change status, due date, ownership, or content."
        },
        {
          "name": "Get Note",
          "value": "getNote",
          "action": "Get a note",
          "description": "Get a single note by numeric ID — entity link, subject, description, status, owner, due date."
        },
        {
          "name": "Get Note Type",
          "value": "getNoteType",
          "action": "Get a note type",
          "description": "Get one note type by ID. Use to map a note type ID to its display name and configuration."
        },
        {
          "name": "List Note Types",
          "value": "listNoteTypes",
          "action": "List note types",
          "description": "List the available note types (categories). Required reference data before creating notes — pick the right typeId from here."
        },
        {
          "name": "List Notes",
          "value": "listNotes",
          "action": "List or search notes",
          "description": "List notes. Filter by entityType + entityId (e.g. all notes on job 123), typeId(s), status, contactId, sort. Use to surface follow-ups, callback queues, or audit trails."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "notes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listPersons",
      "options": [
        {
          "name": "Create Person",
          "value": "createPerson",
          "action": "Create a person",
          "description": "Create an individual contact at a customer/site (e.g. site manager, decision maker). Requires contactId (the parent customer/site), forename, surname. Optional title, email, mobile, landline, position, department, isOptedOut."
        },
        {
          "name": "Edit Person",
          "value": "editPerson",
          "action": "Edit a person",
          "description": "Update an existing person. forename and surname must be re-supplied. Use to update contact details, role, marketing opt-out status."
        },
        {
          "name": "Get Person",
          "value": "getPerson",
          "action": "Get a person",
          "description": "Get one person by their UUID (string) — name, role, contact details, parent contact, opt-out status."
        },
        {
          "name": "List Consent History",
          "value": "listConsentHistory",
          "action": "List consent history",
          "description": "Audit trail of marketing-consent changes for a specific person (GDPR/CASL compliance). Requires personId (UUID)."
        },
        {
          "name": "List Persons",
          "value": "listPersons",
          "action": "List or search persons",
          "description": "List individual people. Filter by contactId(s) (find people at a customer/site), surname (starts-with), or email. Use to find the right person to contact at a customer."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "persons"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listQuotes",
      "options": [
        {
          "name": "Create Quote",
          "value": "createQuote",
          "action": "Create a quote",
          "description": "Raise a new sales quote. Requires currencyCode (ISO 4217). Link to a job, job group, or contact via additional fields. Optional daysValidFor, custom fields, delivery site, and notes (clientNotes shown to customer; internalNotes private). Add lines via Create Quote Line Item, then Mark Quote Sent."
        },
        {
          "name": "Create Quote Line Item",
          "value": "createQuoteLineItem",
          "action": "Create a quote line item",
          "description": "Add a priced line to a quote. Requires quoteId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId."
        },
        {
          "name": "Delete Quote Line Item",
          "value": "deleteQuoteLineItem",
          "action": "Delete a quote line item",
          "description": "Remove a line from a quote. Needs both quoteId and lineItemId. Only valid before the quote is accepted."
        },
        {
          "name": "Edit Quote",
          "value": "editQuote",
          "action": "Edit a quote",
          "description": "Update notes, daysValidFor, delivery site, nominal/department codes, or custom fields on an existing quote. Cannot change currency or convert to invoice."
        },
        {
          "name": "Edit Quote Line Item",
          "value": "editQuoteLineItem",
          "action": "Edit a quote line item",
          "description": "Update an existing line on a quote. All pricing fields (qty, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId) and description must be supplied."
        },
        {
          "name": "Get Quote",
          "value": "getQuote",
          "action": "Get a quote",
          "description": "Get one quote by ID — totals, status, customer, validity, custom fields. Use List Quote Line Items for the priced lines."
        },
        {
          "name": "Get Quote Line Item",
          "value": "getQuoteLineItem",
          "action": "Get a quote line item",
          "description": "Get one priced line on a quote (description, qty, unit cost/price, tax, nominal, department). Needs both quoteId and lineItemId."
        },
        {
          "name": "List Quote Line Items",
          "value": "listQuoteLineItems",
          "action": "List quote line items",
          "description": "List every priced line on a quote. Use to compute totals, generate a customer-facing breakdown, or audit pricing."
        },
        {
          "name": "List Quotes",
          "value": "listQuotes",
          "action": "List or search quotes",
          "description": "List quotes. BigChange requires at least one filter (id/jobId/jobGroupId/contactId/reference) or a createdAt window — if none supplied, the node defaults to the last 12 months. Use for pipeline/conversion analysis or finding a customer's outstanding quote."
        },
        {
          "name": "Mark Quote Accepted",
          "value": "markQuoteAccepted",
          "action": "Mark a quote as accepted",
          "description": "Customer accepted the quote — locks pricing and unblocks job/invoice creation against it."
        },
        {
          "name": "Mark Quote Rejected",
          "value": "markQuoteRejected",
          "action": "Mark a quote as rejected",
          "description": "Customer rejected the quote. Closes the quote out of the active pipeline."
        },
        {
          "name": "Mark Quote Sent",
          "value": "markQuoteSent",
          "action": "Mark a quote as sent",
          "description": "Mark a quote as issued/sent to the customer. Optional sentAt timestamp (UTC, defaults to now)."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "quotes"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSalesOpportunities",
      "options": [
        {
          "name": "Create Sales Opportunity Line Item",
          "value": "createSalesOpportunityLineItem",
          "action": "Create a sales opportunity line item",
          "description": "Add a priced line to a sales opportunity. Requires salesOpportunityId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId."
        },
        {
          "name": "Delete Sales Opportunity Line Item",
          "value": "deleteSalesOpportunityLineItem",
          "action": "Delete a sales opportunity line item",
          "description": "Remove a line from a sales opportunity. Needs both salesOpportunityId and lineItemId."
        },
        {
          "name": "Edit Sales Opportunity",
          "value": "editSalesOpportunity",
          "action": "Edit a sales opportunity",
          "description": "Update a sales opportunity (PATCH semantics — omit a field to keep its existing value)."
        },
        {
          "name": "Edit Sales Opportunity Line Item",
          "value": "editSalesOpportunityLineItem",
          "action": "Edit a sales opportunity line item",
          "description": "Update an existing line on a sales opportunity (PATCH semantics — omit a field to keep its existing value)."
        },
        {
          "name": "Get Sales Opportunity",
          "value": "getSalesOpportunity",
          "action": "Get a sales opportunity",
          "description": "Get one sales opportunity by ID — status, stage, probability, owner, contact, totals, custom fields. Use List Sales Opportunity Line Items for the priced lines."
        },
        {
          "name": "Get Sales Opportunity Line Item",
          "value": "getSalesOpportunityLineItem",
          "action": "Get a sales opportunity line item",
          "description": "Get one priced line on a sales opportunity. Needs both salesOpportunityId and lineItemId."
        },
        {
          "name": "List Probabilities",
          "value": "listSalesOpportunityProbabilities",
          "action": "List sales opportunity probabilities",
          "description": "List configured sales opportunity probabilities (reference data — e.g. 25%, 50%, 75%)."
        },
        {
          "name": "List Sales Opportunities",
          "value": "listSalesOpportunities",
          "action": "List or search sales opportunities",
          "description": "List sales opportunities. BigChange requires at least one filter (id/status/contactId/ownerId/reference) or a date window (createdAt or dueDate) — if none supplied, the node defaults to the last 12 months."
        },
        {
          "name": "List Sales Opportunity Line Items",
          "value": "listSalesOpportunityLineItems",
          "action": "List sales opportunity line items",
          "description": "List every priced line on a sales opportunity. Use to compute weighted/forecast totals or audit pricing."
        },
        {
          "name": "List Stages",
          "value": "listSalesOpportunityStages",
          "action": "List sales opportunity stages",
          "description": "List configured sales opportunity pipeline stages (reference data — e.g. Qualified, Proposal, Negotiation, Closed Won)."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesOpportunities"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listPurchaseOrders",
      "options": [
        {
          "name": "Create Purchase Order",
          "value": "createPurchaseOrder",
          "action": "Create a purchase order",
          "description": "Create a new purchase order. supplierId is required. Optionally link to a job, job group, or contact via additional fields."
        },
        {
          "name": "Create Purchase Order Line Item",
          "value": "createPurchaseOrderLineItem",
          "action": "Create a purchase order line item",
          "description": "Add a line to a purchase order. Requires purchaseOrderId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId."
        },
        {
          "name": "Delete Purchase Order Line Item",
          "value": "deletePurchaseOrderLineItem",
          "action": "Delete a purchase order line item",
          "description": "Remove a line from a purchase order. Needs both purchaseOrderId and lineItemId."
        },
        {
          "name": "Edit Purchase Order",
          "value": "editPurchaseOrder",
          "action": "Edit a purchase order",
          "description": "Update a purchase order (PATCH semantics — omit a field to keep its existing value)."
        },
        {
          "name": "Edit Purchase Order Line Item",
          "value": "editPurchaseOrderLineItem",
          "action": "Edit a purchase order line item",
          "description": "Update an existing line on a purchase order (PATCH semantics — omit a field to keep its existing value)."
        },
        {
          "name": "Get Purchase Order",
          "value": "getPurchaseOrder",
          "action": "Get a purchase order",
          "description": "Get one purchase order by ID — supplier, status, totals, links, custom fields. Use List Purchase Order Line Items for the lines."
        },
        {
          "name": "Get Purchase Order Line Item",
          "value": "getPurchaseOrderLineItem",
          "action": "Get a purchase order line item",
          "description": "Get one line on a purchase order. Needs both purchaseOrderId and lineItemId."
        },
        {
          "name": "Get Purchase Order Series",
          "value": "getPurchaseOrderSeries",
          "action": "Get a purchase order series",
          "description": "Get a single purchase order series (numbering sequence) by ID."
        },
        {
          "name": "List Purchase Order Line Items",
          "value": "listPurchaseOrderLineItems",
          "action": "List purchase order line items",
          "description": "List every line on a purchase order. Use to compute totals or audit ordered goods."
        },
        {
          "name": "List Purchase Order Series",
          "value": "listPurchaseOrderSeries",
          "action": "List purchase order series",
          "description": "List configured purchase order series (numbering sequences) — reference data."
        },
        {
          "name": "List Purchase Orders",
          "value": "listPurchaseOrders",
          "action": "List or search purchase orders",
          "description": "List purchase orders. BigChange requires at least one filter (id/jobId/jobGroupId/contactId/reference) or a createdAt window — if none supplied, the node defaults to the last 12 months. Note: date-only filtering may return a BC 500 on some tenants — combine with id[]/jobId[]/contactId[] when possible."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchaseOrders"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listJobGroups",
      "options": [
        {
          "name": "Create Job Group",
          "value": "createJobGroup",
          "action": "Create a job group",
          "description": "Create a job group (a folder/project that links multiple jobs together, e.g. a multi-day install). Requires contactId, isShownOnDevice, areJobsLinked, plannedStartOption, plannedEndOption. Optional title, planned start/end (UTC), category, order number."
        },
        {
          "name": "Edit Job Group",
          "value": "editJobGroup",
          "action": "Edit a job group",
          "description": "Update fields on an existing job group (title, order number, planned start/end, category)."
        },
        {
          "name": "Get Job Group",
          "value": "getJobGroup",
          "action": "Get a job group",
          "description": "Get one job group by numeric ID — title, customer, planned dates, status, member jobs."
        },
        {
          "name": "List Job Group Status History",
          "value": "listJobGroupStatusHistory",
          "action": "List job group status history",
          "description": "Audit trail of status changes on a job group. Use to debug why a multi-job project is stuck."
        },
        {
          "name": "List Job Groups",
          "value": "listJobGroups",
          "action": "List or search job groups",
          "description": "List job groups (multi-job projects). Sort by created/title. Use for project pipeline views."
        },
        {
          "name": "Mark Job Group Complete",
          "value": "markJobGroupComplete",
          "action": "Mark a job group as complete",
          "description": "Force every job in the group into a \"completed\" state. Use when an entire multi-job project is done in one go (not common — usually each job is closed individually)."
        },
        {
          "name": "Mark Job Group Financially Complete",
          "value": "markJobGroupFinanciallyComplete",
          "action": "Mark a job group as financially complete",
          "description": "Lock the job group for finance — signals invoicing is finished. After this, no further invoices can be raised against the group."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobGroups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listStockItems",
      "options": [
        {
          "name": "Create Stock Details",
          "value": "createStockDetails",
          "action": "Create a stock product definition",
          "description": "Create a new stock product (SKU/template). Requires model and productCategoryId. Optional make, stockCode, batchNumber, isConsumable. This is the catalogue entry, NOT a physical unit — use Create Stock Item for those."
        },
        {
          "name": "Create Stock Item",
          "value": "createStockItem",
          "action": "Create a stock item",
          "description": "Create a physical stock unit (instance of a product). Requires stockDetailsId, model, productCategoryId. Optional serial number, condition, location contact, quantity. Use to register newly received inventory."
        },
        {
          "name": "Get Product Category",
          "value": "getProductCategory",
          "action": "Get a product category",
          "description": "Get one product category by numeric ID. Use to map a category ID to a name when displaying stock."
        },
        {
          "name": "Get Stock Details",
          "value": "getStockDetails",
          "action": "Get a stock product (SKU)",
          "description": "Get one stock product definition by stockDetailsId — model, make, stock code, category, suppliers reference."
        },
        {
          "name": "Get Stock Item",
          "value": "getStockItem",
          "action": "Get a stock item",
          "description": "Get one physical stock unit by stockItemId — serial number, condition, current location, quantity."
        },
        {
          "name": "Get Stock Supplier",
          "value": "getStockSupplier",
          "action": "Get a stock supplier",
          "description": "Get one supplier link for a stock product. Needs both stockDetailsId and stockSupplierId."
        },
        {
          "name": "List Product Categories",
          "value": "listProductCategories",
          "action": "List product categories",
          "description": "List stock product categories (the top-level taxonomy of inventory). Filter by name (starts-with)."
        },
        {
          "name": "List Stock Details",
          "value": "listStockDetails",
          "action": "List stock products (SKUs)",
          "description": "List stock product definitions. Filter by productCategoryId(s), stockCode(s), or isConsumable. Use to browse the SKU catalogue."
        },
        {
          "name": "List Stock Items",
          "value": "listStockItems",
          "action": "List stock items",
          "description": "List physical stock units. Filter by stockDetailsId(s), serialNumber, or current locationContactId. Use to find what physical units exist of a given product or what's currently at a location."
        },
        {
          "name": "List Stock Movements",
          "value": "listStockMovements",
          "action": "List stock movements",
          "description": "List stock movement history (pickups/drop-offs). Filter by date ranges (pickUpAtFrom/To, dropOffAtFrom/To), jobId, stockDetailsId, stockItemId, vehicleId, dropOffContactId, dropOffVehicleId. Use for inventory audits and \"where did this part go?\" queries."
        },
        {
          "name": "List Stock Suppliers",
          "value": "listStockSuppliers",
          "action": "List stock suppliers",
          "description": "List suppliers linked to a specific stock product. Requires stockDetailsId."
        },
        {
          "name": "Update Stock Details",
          "value": "updateStockDetails",
          "action": "Update a stock product (SKU)",
          "description": "Update fields on an existing stock product definition (model, category, make, stockCode, batchNumber, isConsumable)."
        },
        {
          "name": "Update Stock Item",
          "value": "updateStockItem",
          "action": "Update a stock item",
          "description": "Update fields on a physical stock unit (serial number, make, notes, quantity, location contact, condition)."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stock"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDepartmentCodes",
      "options": [
        {
          "name": "Get Department Code",
          "value": "getDepartmentCode",
          "action": "Get a department code",
          "description": "Get one department code by ID — code and description. Use to map a departmentCodeId on a quote/invoice line to a human-readable label."
        },
        {
          "name": "Get Nominal Code",
          "value": "getNominalCode",
          "action": "Get a nominal code",
          "description": "Get one nominal (accounting) code by ID — code and description. Use to map a nominalCodeId on a quote/invoice line to its accounting label."
        },
        {
          "name": "List Department Codes",
          "value": "listDepartmentCodes",
          "action": "List department codes",
          "description": "List department codes (cost-centre codes used on quotes and invoices). Required reference data before Create Quote Line Item / Create Invoice Line Item."
        },
        {
          "name": "List Nominal Codes",
          "value": "listNominalCodes",
          "action": "List nominal codes",
          "description": "List nominal (accounting) codes used on quotes and invoices. Required reference data before Create Quote Line Item / Create Invoice Line Item."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "referenceData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateAccountReport",
      "options": [
        {
          "name": "Generate Account Report",
          "value": "generateAccountReport",
          "action": "Generate a monthly account report",
          "description": "Generate a structured monthly account report aggregating jobs across the full parent–child contact hierarchy"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountReport"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateBriefing",
      "options": [
        {
          "name": "Generate Briefing",
          "value": "generateBriefing",
          "action": "Generate an engineer briefing",
          "description": "Generate a structured pre-visit briefing and AI call script for a field service engineer heading to a job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "briefing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "classifyEmail",
      "options": [
        {
          "name": "Batch Classify Emails",
          "value": "batchClassifyEmail",
          "action": "Batch classify emails",
          "description": "Run up to 50 emails through the triage pipeline in a single call; portal/pre-filter hits are instant and only novel emails consume LLM tokens"
        },
        {
          "name": "Classify Email",
          "value": "classifyEmail",
          "action": "Classify an email",
          "description": "Classify an incoming email using the AI triage pipeline"
        },
        {
          "name": "Ingest Portal Email",
          "value": "ingestEmail",
          "action": "Ingest a portal email",
          "description": "Extract structured job data from an FM portal email via the /ingest/email/portal endpoint and resolve entities"
        },
        {
          "name": "List Triage Categories",
          "value": "listTriageCategories",
          "action": "List triage categories",
          "description": "Return the tenant's active triage categories with priority, destination, and prompt rules from the taxonomy database"
        },
        {
          "name": "List Triage Rules",
          "value": "listTaxonomyRules",
          "action": "List triage routing rules",
          "description": "Return the tenant's active email routing rules with full condition/action definitions; optionally filter by classification phase"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listJobFeed",
      "options": [
        {
          "name": "Aggregate Jobs",
          "value": "aggregateJobs",
          "action": "Aggregate job metrics",
          "description": "Compute job metrics with grouping, time-axis control, and period-over-period comparison"
        },
        {
          "name": "Get Enriched Job",
          "value": "getEnrichedJob",
          "action": "Get an enriched job",
          "description": "Get a single job with worksheets, AI enrichment (vertical, sentiment, key phrases), and timing data"
        },
        {
          "name": "List Account Job Feed",
          "value": "listAccountJobFeed",
          "action": "List account job feed",
          "description": "Paginated job feed scoped to a parent account and all its children. Pass any contact ID in the hierarchy — jobs for the entire account tree are returned."
        },
        {
          "name": "List Job Feed",
          "value": "listJobFeed",
          "action": "List job feed",
          "description": "Paginated list of AI-enriched jobs with filters for status, result, engineer, customer, job type, and category"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "jobFeed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateReport",
      "options": [
        {
          "name": "Generate Report",
          "value": "generateReport",
          "action": "Generate a report",
          "description": "Generate an AI-powered operational report (daily or weekly) with optional narrative summary"
        },
        {
          "name": "List Report Sections",
          "value": "listReportSections",
          "action": "List report sections",
          "description": "List all available report types and their sections"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reports"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "autocomplete",
      "options": [
        {
          "name": "Autocomplete",
          "value": "autocomplete",
          "action": "Fuzzy autocomplete search",
          "description": "Quick fuzzy search across customers, engineers, jobs, persons, and sites"
        },
        {
          "name": "Search Intake",
          "value": "searchIntake",
          "action": "Search intake descriptions",
          "description": "Search intake descriptions with enriched job context from the knowledge graph"
        },
        {
          "name": "Search Intake (Basic)",
          "value": "searchIntakeBasic",
          "action": "Search intake descriptions (basic)",
          "description": "Search intake descriptions without graph enrichment"
        },
        {
          "name": "Search Outcomes",
          "value": "searchOutcomes",
          "action": "Search job outcomes",
          "description": "Search job outcome and diagnostic summaries"
        },
        {
          "name": "Search Summary Sections",
          "value": "searchSummarySections",
          "action": "Search customer summary knowledge base",
          "description": "Semantic hybrid search across CustomerSummary knowledge base sections for one or all customers"
        },
        {
          "name": "Get Summary By Contact",
          "value": "getSummaryByContact",
          "action": "Get full customer summary for a contact",
          "description": "Retrieve all stored CustomerSummary sections for a single contact in one call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runSentinels",
      "options": [
        {
          "name": "Get Latest Results",
          "value": "getSentinelResults",
          "action": "Get latest sentinel results",
          "description": "Retrieve the cached results from the most recent sentinel run for your tenant"
        },
        {
          "name": "List Sentinel Registry",
          "value": "listSentinelRegistry",
          "action": "List sentinel definitions",
          "description": "List all available sentinel definitions with their thresholds and recommended schedules"
        },
        {
          "name": "Run Sentinels",
          "value": "runSentinels",
          "action": "Run sentinel checks",
          "description": "Run sentinel checks and return only triggered alerts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sentinel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listCases",
      "options": [
        {
          "name": "Add Case Item",
          "value": "addCaseItem",
          "action": "Link an item to a case",
          "description": "Link a job, customer, site, engineer, or other record to a case"
        },
        {
          "name": "Add Comment",
          "value": "addComment",
          "action": "Add a comment to a case",
          "description": "Add a comment to a case activity timeline"
        },
        {
          "name": "Add Participant",
          "value": "addParticipant",
          "action": "Add a participant to a case",
          "description": "Add a user as a participant with a specified role"
        },
        {
          "name": "Create Case",
          "value": "createCase",
          "action": "Create a case",
          "description": "Create a new case with title, type, and optional priority, tags, and metadata"
        },
        {
          "name": "Get Case",
          "value": "getCase",
          "action": "Get a case",
          "description": "Get a single case with participants, items, and latest activity"
        },
        {
          "name": "List Activity",
          "value": "listActivity",
          "action": "List case activity",
          "description": "Get the activity timeline for a case, paginated with newest first"
        },
        {
          "name": "List Case Items",
          "value": "listCaseItems",
          "action": "List case items",
          "description": "List all items linked to a case, optionally filtered by item type"
        },
        {
          "name": "List Cases",
          "value": "listCases",
          "action": "List cases",
          "description": "List cases for a company with filtering and pagination"
        },
        {
          "name": "List Cases for Item",
          "value": "listCasesForItem",
          "action": "Find cases for an item",
          "description": "Reverse lookup — find all cases that reference a specific job, customer, site, or other item"
        },
        {
          "name": "Remove Case Item",
          "value": "removeCaseItem",
          "action": "Remove an item from a case",
          "description": "Unlink an item from a case"
        },
        {
          "name": "Remove Participant",
          "value": "removeParticipant",
          "action": "Remove a participant from a case",
          "description": "Remove a participant from a case"
        },
        {
          "name": "Search Cases",
          "value": "searchCases",
          "action": "Search cases",
          "description": "Full-text search across case titles and descriptions with optional filters"
        },
        {
          "name": "Transition Case",
          "value": "transitionCase",
          "action": "Transition case status",
          "description": "Transition a case to a new status with lifecycle validation"
        },
        {
          "name": "Update Case",
          "value": "updateCase",
          "action": "Update a case",
          "description": "Update case fields — only provided fields are changed"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "cases"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPulse",
      "options": [
        {
          "name": "Get Pulse",
          "value": "getPulse",
          "action": "Get tenant pulse",
          "description": "Get a cached business-health dashboard snapshot with pipeline, performance, workforce, and asset metrics"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pulse"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWeatherForJob",
      "options": [
        {
          "name": "Get Forecast",
          "value": "getForecast",
          "action": "Get weather forecast",
          "description": "Get a weather forecast for a latitude/longitude"
        },
        {
          "name": "Get Historical",
          "value": "getHistorical",
          "action": "Get historical weather",
          "description": "Get historical weather data for a latitude/longitude"
        },
        {
          "name": "Get Weather for Job",
          "value": "getWeatherForJob",
          "action": "Get weather for job",
          "description": "Get weather data for a specific job by ID"
        },
        {
          "name": "Get Weather for Site",
          "value": "getWeatherForSite",
          "action": "Get weather for site",
          "description": "Get weather data for a specific site by site key"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "weather"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listProfiles",
      "options": [
        {
          "name": "Generate Profiles",
          "value": "generateProfiles",
          "action": "Generate intelligence profiles",
          "description": "Generate or regenerate intelligence profiles for a tenant"
        },
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Get a job type profile",
          "description": "Get intelligence profile for a specific job type"
        },
        {
          "name": "List Profiles",
          "value": "listProfiles",
          "action": "List intelligence profiles",
          "description": "List all intelligence profiles for a tenant"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "intelligence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runInvestigation",
      "options": [
        {
          "name": "Run Investigation",
          "value": "runInvestigation",
          "action": "Run an investigation",
          "description": "Multi-step hybrid investigation across vector and graph data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "investigate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "connieChat",
      "options": [
        {
          "name": "Chat",
          "value": "connieChat",
          "action": "Chat with Connie",
          "description": "Send a message to the Connie AI assistant"
        },
        {
          "name": "Get Session Messages",
          "value": "connieGetSessionMessages",
          "action": "Get session messages",
          "description": "Get messages for a specific chat session"
        },
        {
          "name": "List Sessions",
          "value": "connieListSessions",
          "action": "List chat sessions",
          "description": "List Connie chat sessions for a user or contact"
        },
        {
          "name": "Search History",
          "value": "connieSearchHistory",
          "action": "Search chat history",
          "description": "Search across Connie conversation history"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connie"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listUsers",
      "options": [
        {
          "name": "Delete User",
          "value": "deleteUser",
          "action": "Archive a user",
          "description": "Soft-delete (archive) a user from the company"
        },
        {
          "name": "Invite User",
          "value": "inviteUser",
          "action": "Invite a user",
          "description": "Send an email invitation to join the company"
        },
        {
          "name": "List Invites",
          "value": "listInvites",
          "action": "List pending invites",
          "description": "Get all pending (unaccepted) invitations for the company"
        },
        {
          "name": "List Users",
          "value": "listUsers",
          "action": "List users",
          "description": "Get all active users for the company"
        },
        {
          "name": "Update User Role",
          "value": "updateUserRole",
          "action": "Update a user role",
          "description": "Change the role assigned to a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "wsAttachmentsGetlistofattachments",
      "options": [
        {
          "name": "List attachments for an entity",
          "value": "wsAttachmentsGetlistofattachments",
          "action": "List attachments for an entity via Web Services",
          "description": "This service lists information about any attachments to the requested entity."
        },
        {
          "name": "Retrieve an attachment by Id",
          "value": "wsAttachmentsGetanattachment",
          "action": "Retrieve an attachment by Id via Web Services",
          "description": "This service retrieves an attachment using an AttachmentId. This can be retrieved using ListAttachments."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wsAttachments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "wsReportdriverinfringement",
      "options": [
        {
          "name": "Driver infringement events for a date range",
          "value": "wsReportdriverinfringement",
          "action": "Driver infringement events for a date range via Web Services",
          "description": "Returns the same dataset used by the Driver Infringement Report, allowing you to extract each driving infringement event."
        },
        {
          "name": "Driver performance data for a date range",
          "value": "wsReportdriverperformance",
          "action": "Driver performance data for a date range via Web Services",
          "description": "This webservice returns the same dataset used by the Driver Performance Report allowing you to extract each data around how your resources drive."
        },
        {
          "name": "Get a list of reports",
          "value": "wsReportlist",
          "action": "Get a list of reports via Web Services",
          "description": "BigChange Web Services ReportList: get a list of reports."
        },
        {
          "name": "List document templates",
          "value": "wsTemplatelist",
          "action": "List document templates via Web Services",
          "description": "This service returns a detailed list of the report templates available in BigChange."
        },
        {
          "name": "Vehicle infringement events",
          "value": "wsReportvehicleinfringement",
          "action": "Vehicle infringement events via Web Services",
          "description": "BigChange Web Services ReportVehicleInfringement: vehicle infringement events."
        },
        {
          "name": "Vehicle performance data",
          "value": "wsReportvehicleperformance",
          "action": "Vehicle performance data via Web Services",
          "description": "This service allows you to view how your assets drive. This works like the 'Driver Behaviour' report to relay the same information, but for assets instead of resources."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wsReports"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "wsJourneys",
      "options": [
        {
          "name": "Get journey data for a date range",
          "value": "wsJourneys",
          "action": "Get journey data for a date range via Web Services",
          "description": "Retrieve a list of journeys within a specified date range."
        },
        {
          "name": "Get the last known position of assets",
          "value": "wsLive",
          "action": "Get the last known position of assets via Web Services",
          "description": "Retrieves the latest known position of resources and mobile assets."
        },
        {
          "name": "Last known odometer readings",
          "value": "wsOdometer",
          "action": "Last known odometer readings via Web Services",
          "description": "This method does not return positional information."
        },
        {
          "name": "Last known position and odometer",
          "value": "wsLiveodometer",
          "action": "Last known position and odometer via Web Services",
          "description": "This service returns details of Assets last known position and odometer."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wsTracking"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cancel Job",
      "value": "cancelJob",
      "action": "Cancel a job",
      "description": "Cancel a field service job. Requires the numeric job ID. Optional reason text. Use only when the job will not happen at all (otherwise prefer Set Job Result with completedWithIssues).",
      "resource": "jobs"
    },
    {
      "name": "Create Job",
      "value": "createJob",
      "action": "Create a job",
      "description": "Create a new field service job. Requires a job type ID (from List Job Types) and a contact (customer/site) ID (from List Contacts). Returns the new job ID. Does not schedule it — call Schedule Job afterwards.",
      "resource": "jobs"
    },
    {
      "name": "Create Job (Dynamic Fields)",
      "value": "createJobDynamic",
      "action": "Create a job with dynamic custom fields",
      "description": "Create a job where custom fields are supplied as a pre-built JSON array from a previous node (e.g. a Code node). Useful for automated pipelines where custom field values are resolved dynamically at runtime rather than configured manually.",
      "resource": "jobs"
    },
    {
      "name": "Create Job Constraint",
      "value": "createJobConstraint",
      "action": "Create a job constraint",
      "description": "Add a scheduling rule to a job (e.g. must start before X, requires engineer Y or skill Z). Time-based types need constraintAt; resource/skill types need entityId. Used by the BigChange scheduler.",
      "resource": "jobs"
    },
    {
      "name": "Create Job Stock",
      "value": "createJobStock",
      "action": "Create job stock entry",
      "description": "Plan or record stock/parts movement on a job (brought, used, taken back). Requires job ID; supply stockDetailsId or stockItemId plus an action and quantity.",
      "resource": "jobs"
    },
    {
      "name": "Delete Job Constraint",
      "value": "deleteJobConstraint",
      "action": "Delete a job constraint",
      "description": "Remove a scheduling constraint by its constraint ID (get it first via List Job Constraints).",
      "resource": "jobs"
    },
    {
      "name": "Edit Job",
      "value": "editJob",
      "action": "Edit a job",
      "description": "Update fields on an existing job (description, reference, planned duration, person, order number, custom fields, office notes, isActioned, isFinanciallyComplete). Does not change schedule or status — use Schedule Job / Start Job / Set Job Result for those.",
      "resource": "jobs"
    },
    {
      "name": "Get Job",
      "value": "getJob",
      "action": "Get a job (enriched)",
      "description": "Get the FULL enriched view of one job (status history, assigned engineer, site address, custom fields, completed worksheet answers, attachments). Heavier payload — use this when an agent needs to summarise/answer questions about a specific job. For a quick lookup, use Get Job by ID instead.",
      "resource": "jobs"
    },
    {
      "name": "Get Job by ID",
      "value": "getJobById",
      "action": "Get a job by ID (lightweight)",
      "description": "Lightweight single-job lookup by numeric ID via the proxy. Optionally include worksheets. Faster and cheaper than Get Job — prefer this when you only need core job fields. Set Simplify=true to strip the deep BigChange envelope.",
      "resource": "jobs"
    },
    {
      "name": "List Job Constraints",
      "value": "listJobConstraints",
      "action": "List job constraints",
      "description": "List all scheduling constraints currently attached to a job (pre-existing rules the scheduler must respect).",
      "resource": "jobs"
    },
    {
      "name": "List Job Status History",
      "value": "listJobStatusHistory",
      "action": "List job status history",
      "description": "Get the full audit trail of status transitions for a job (new → scheduled → started → completedOk, etc.) with timestamps and actors. Use to debug \"why is this job in this state?\" or build a timeline.",
      "resource": "jobs"
    },
    {
      "name": "List Job Stock",
      "value": "listJobStock",
      "action": "List job stock",
      "description": "List every stock/parts line attached to a job — what was planned, brought, used, or taken back.",
      "resource": "jobs"
    },
    {
      "name": "List Jobs",
      "value": "listJobs",
      "action": "List or search jobs",
      "description": "Primary search for jobs. REQUIRES a created-from / created-to UTC window. Filter by status (e.g. completedOk, scheduled, started), job type IDs, contact (customer/site) IDs, resource (engineer) IDs, vehicle IDs, or reference. Returns paginated job records. Default returnAll=false. Set Simplify=true to strip envelopes.",
      "resource": "jobs"
    },
    {
      "name": "Schedule Job",
      "value": "scheduleJob",
      "action": "Schedule a job",
      "description": "Assign an engineer (resource), vehicle, and/or planned start time to a job. Use after Create Job or to reassign. plannedStartAt is UTC ISO-8601.",
      "resource": "jobs"
    },
    {
      "name": "Set Job Result",
      "value": "setJobResult",
      "action": "Set job result",
      "description": "Close a job by writing its completion outcome. Status MUST be completedOk or completedWithIssues. Optional result text and an override timestamp. After this call the job is treated as done.",
      "resource": "jobs"
    },
    {
      "name": "Start Job",
      "value": "startJob",
      "action": "Start a job",
      "description": "Mark a job as started (engineer en-route/on-site). Optional comment (max 250 chars) and override timestamp. Cannot start an already-completed or cancelled job.",
      "resource": "jobs"
    },
    {
      "name": "Create Contact",
      "value": "createContact",
      "action": "Create a contact",
      "description": "Create a new customer or site. Requires name, group ID, and lat/lng (lat/lng can be 0 if unknown but must be supplied). Optional address fields and parent contact ID for child sites.",
      "resource": "contacts"
    },
    {
      "name": "Create Contact Group",
      "value": "createContactGroup",
      "action": "Create a contact group",
      "description": "Create a new contact group (folder/category for customers and sites). Requires only a name.",
      "resource": "contacts"
    },
    {
      "name": "Edit Contact",
      "value": "editContact",
      "action": "Edit a contact",
      "description": "Update an existing contact (customer or site). Name, group, and lat/lng must be re-supplied even if unchanged. Address fields are optional.",
      "resource": "contacts"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get a contact",
      "description": "Get one contact by numeric ID. Returns address, location, custom fields, group, status, parent linkage. Use this when an agent asks \"what address is customer X at?\" or \"tell me about site Y\".",
      "resource": "contacts"
    },
    {
      "name": "Get Contact Group",
      "value": "getContactGroup",
      "action": "Get a contact group",
      "description": "Get one contact group by ID. Use to look up a group's name/metadata.",
      "resource": "contacts"
    },
    {
      "name": "List Contact Groups",
      "value": "listContactGroups",
      "action": "List contact groups",
      "description": "List all contact groups (the categories used to organise customers and sites). Useful for mapping group IDs to names.",
      "resource": "contacts"
    },
    {
      "name": "List Contacts",
      "value": "listContacts",
      "action": "List or search contacts",
      "description": "Primary search for customers and sites. Filter by name (starts-with), reference, IDs, parent ID, group ID, or status (normal / contactOnStop / creditLimitOnStop). Supports paging. Use this whenever an agent needs to find a contact by name or list customers/sites.",
      "resource": "contacts"
    },
    {
      "name": "Stop Contact",
      "value": "stopContact",
      "action": "Put contact on stop",
      "description": "Block a customer or site from new jobs/invoices. Choose contactOnStop (general hold) or creditLimitOnStop (account is over credit). Optional reason. Pick whether to cascade to child sites via Applies To.",
      "resource": "contacts"
    },
    {
      "name": "Unstop Contact",
      "value": "unstopContact",
      "action": "Remove contact from stop",
      "description": "Lift a stop on a customer or site so new jobs/invoices can be raised again. Pick whether to cascade to children via Applies To.",
      "resource": "contacts"
    },
    {
      "name": "Update Contact Group",
      "value": "updateContactGroup",
      "action": "Update a contact group",
      "description": "Rename an existing contact group. Provide the group ID and the new name.",
      "resource": "contacts"
    },
    {
      "name": "Create Resource",
      "value": "createResource",
      "action": "Create a resource (engineer)",
      "description": "Create a new engineer/technician/operative. Requires name and groupId (team). Optional email, mobile, reference. Returns the new resource ID for use in Schedule Job.",
      "resource": "resources"
    },
    {
      "name": "Get Resource",
      "value": "getResource",
      "action": "Get a resource (engineer)",
      "description": "Get one engineer by numeric ID — name, group/team, contact details, reference. Use to look up an engineer's profile.",
      "resource": "resources"
    },
    {
      "name": "Get Resource Group",
      "value": "getResourceGroup",
      "action": "Get a resource group",
      "description": "Get one resource group (team) by ID. Use to map a group ID to its name.",
      "resource": "resources"
    },
    {
      "name": "List Resource Groups",
      "value": "listResourceGroups",
      "action": "List resource groups (teams)",
      "description": "List the teams that engineers belong to (e.g. \"North region\", \"Senior techs\"). Use as a lookup before listing/creating resources.",
      "resource": "resources"
    },
    {
      "name": "List Resources",
      "value": "listResources",
      "action": "List resources (engineers)",
      "description": "List every engineer/technician/operative on the books. Use whenever an agent needs to find engineers, map names to IDs, or pick someone to assign a job to.",
      "resource": "resources"
    },
    {
      "name": "Update Resource",
      "value": "updateResource",
      "action": "Update a resource (engineer)",
      "description": "Update fields on an existing engineer record (name, group/team, email, mobile, reference). Only supplied fields are changed.",
      "resource": "resources"
    },
    {
      "name": "Get Job Type",
      "value": "getJobType",
      "action": "Get a job type",
      "description": "Get one job type definition by numeric ID — name, default duration, custom field schema, configuration. Use to discover what custom fields a job of this type accepts.",
      "resource": "jobTypes"
    },
    {
      "name": "List Job Types",
      "value": "listJobTypes",
      "action": "List job types",
      "description": "List every job type/template (e.g. installation, repair, maintenance, callout). Required reference data before Create Job — use this to find the right typeId.",
      "resource": "jobTypes"
    },
    {
      "name": "Create Vehicle",
      "value": "createVehicle",
      "action": "Create a vehicle",
      "description": "Add a new vehicle to the fleet. Requires groupId, vehicleType (e.g. van, car, truck), registration. Optional make, model, registrationYear, reference, fixedResourceId (driver).",
      "resource": "vehicles"
    },
    {
      "name": "Get Vehicle",
      "value": "getVehicle",
      "action": "Get a vehicle",
      "description": "Get one vehicle by numeric ID — registration, make, model, year, group, fixed driver. Use to look up a vehicle from a job.",
      "resource": "vehicles"
    },
    {
      "name": "List Vehicles",
      "value": "listVehicles",
      "action": "List vehicles",
      "description": "List all fleet vehicles. Use as a lookup before scheduling jobs to a vehicle, or to find the registration/make of an asset.",
      "resource": "vehicles"
    },
    {
      "name": "Update Vehicle",
      "value": "updateVehicle",
      "action": "Update a vehicle",
      "description": "Update fields on a vehicle (group, type, registration, make, model, year, reference, fixed driver). Only supplied fields change.",
      "resource": "vehicles"
    },
    {
      "name": "Get Worksheet",
      "value": "getWorksheet",
      "action": "Get a worksheet definition",
      "description": "Get one worksheet form template (the schema/blueprint) by numeric ID — title, group, version metadata. For the questions inside it, use Get Worksheet Questions.",
      "resource": "worksheets"
    },
    {
      "name": "Get Worksheet Questions",
      "value": "getWorksheetQuestions",
      "action": "Get worksheet questions",
      "description": "List the questions/fields defined inside a worksheet template (text, multiple choice, photo, signature). Use to map a question ID to its label when interpreting answers.",
      "resource": "worksheets"
    },
    {
      "name": "List Worksheet Answers",
      "value": "listWorksheetAnswers",
      "action": "List worksheet answers",
      "description": "Get completed worksheet submissions for one or more jobs — answers, photos, signatures, parts captured. Requires a comma-separated list of job IDs. Use when an agent needs to summarise what an engineer did or extract specific captured values.",
      "resource": "worksheets"
    },
    {
      "name": "List Worksheet Definitions",
      "value": "listWorksheetDefinitions",
      "action": "List worksheet definitions",
      "description": "List every worksheet form template (the blueprints engineers fill in on the mobile app). Use to discover available worksheets or map worksheet IDs to titles.",
      "resource": "worksheets"
    },
    {
      "name": "Get Worksheet Group",
      "value": "getWorksheetGroup",
      "action": "Get a worksheet group",
      "description": "Get one worksheet group (folder) by numeric ID. Use to map a group ID to its name.",
      "resource": "worksheetGroups"
    },
    {
      "name": "List Worksheet Groups",
      "value": "listWorksheetGroups",
      "action": "List worksheet groups",
      "description": "List the folders that organise worksheet templates. Use as a lookup before browsing worksheet definitions.",
      "resource": "worksheetGroups"
    },
    {
      "name": "Cancel Invoice",
      "value": "cancelInvoice",
      "action": "Cancel an invoice",
      "description": "Cancel an invoice by ID. Use only for invoices that should not be paid (e.g. raised in error). Cancellation is permanent.",
      "resource": "invoices"
    },
    {
      "name": "Create Invoice",
      "value": "createInvoice",
      "action": "Create an invoice",
      "description": "Raise a new invoice. Requires currencyCode (ISO 4217, e.g. GBP, USD, EUR). Link to a job, job group, OR contact via additional fields. Optionally set invoice date (createdAt), notes, bank account, department, nominal code. After creation, add lines via Create Invoice Line Item, then Mark Invoice Sent.",
      "resource": "invoices"
    },
    {
      "name": "Create Invoice Line Item",
      "value": "createInvoiceLineItem",
      "action": "Create an invoice line item",
      "description": "Add a billable line to an invoice. Requires invoiceId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId. Get tax/nominal/department code IDs from List Reference Data.",
      "resource": "invoices"
    },
    {
      "name": "Delete Invoice Line Item",
      "value": "deleteInvoiceLineItem",
      "action": "Delete an invoice line item",
      "description": "Remove a line item from an invoice (only valid before the invoice is sent/paid). Needs both invoiceId and lineItemId.",
      "resource": "invoices"
    },
    {
      "name": "Edit Invoice",
      "value": "editInvoice",
      "action": "Edit an invoice",
      "description": "Update notes on an existing invoice (clientNotes shown to customer; internalNotes private). Cannot change currency, totals, or links — recreate for those changes.",
      "resource": "invoices"
    },
    {
      "name": "Get Invoice",
      "value": "getInvoice",
      "action": "Get an invoice",
      "description": "Get a single invoice by numeric ID — totals, status, customer, links, tax breakdown. Use List Invoice Line Items for the lines.",
      "resource": "invoices"
    },
    {
      "name": "Get Invoice Line Item",
      "value": "getInvoiceLineItem",
      "action": "Get an invoice line item",
      "description": "Get one line on an invoice (description, qty, unit cost/price, tax, nominal, department). Needs both invoiceId and lineItemId.",
      "resource": "invoices"
    },
    {
      "name": "List Invoice Line Items",
      "value": "listInvoiceLineItems",
      "action": "List invoice line items",
      "description": "List every line on an invoice (what was billed). Use to compute totals, audit a bill, or extract narrative for a customer email.",
      "resource": "invoices"
    },
    {
      "name": "List Invoices",
      "value": "listInvoices",
      "action": "List or search invoices",
      "description": "List invoices. BigChange requires at least one filter or a date range — if you supply none, the node defaults to the last 12 months. Filter by job ID(s), contact ID(s), reference, or createdAt window. Use to find recent/unpaid invoices, customer history, etc.",
      "resource": "invoices"
    },
    {
      "name": "Mark Invoice Paid",
      "value": "markInvoicePaid",
      "action": "Mark an invoice as paid",
      "description": "Record payment received on an invoice. Optional paidAt timestamp (UTC, defaults to now). Use after manual payment reconciliation.",
      "resource": "invoices"
    },
    {
      "name": "Mark Invoice Sent",
      "value": "markInvoiceSent",
      "action": "Mark an invoice as sent",
      "description": "Mark an invoice as issued/sent to the customer. Required before payment can be recorded. No fields beyond invoiceId.",
      "resource": "invoices"
    },
    {
      "name": "Create Note",
      "value": "createNote",
      "action": "Create a note",
      "description": "Attach a note/task/comment to an entity. Requires entityType (job, contact, person, etc.), entityId, typeId (from List Note Types), and a subject. Optional description, dueAt (UTC), status, owner. Use for follow-ups, customer comms log, internal flags.",
      "resource": "notes"
    },
    {
      "name": "Create Progress Update",
      "value": "createProgressUpdate",
      "action": "Create a progress update",
      "description": "Append a progress comment to an existing note (does not modify the original). Use for status updates on tasks/follow-ups.",
      "resource": "notes"
    },
    {
      "name": "Edit Note",
      "value": "editNote",
      "action": "Edit a note",
      "description": "Update an existing note. All core fields (entityType, entityId, typeId, subject) must be re-supplied. Use to change status, due date, ownership, or content.",
      "resource": "notes"
    },
    {
      "name": "Get Note",
      "value": "getNote",
      "action": "Get a note",
      "description": "Get a single note by numeric ID — entity link, subject, description, status, owner, due date.",
      "resource": "notes"
    },
    {
      "name": "Get Note Type",
      "value": "getNoteType",
      "action": "Get a note type",
      "description": "Get one note type by ID. Use to map a note type ID to its display name and configuration.",
      "resource": "notes"
    },
    {
      "name": "List Note Types",
      "value": "listNoteTypes",
      "action": "List note types",
      "description": "List the available note types (categories). Required reference data before creating notes — pick the right typeId from here.",
      "resource": "notes"
    },
    {
      "name": "List Notes",
      "value": "listNotes",
      "action": "List or search notes",
      "description": "List notes. Filter by entityType + entityId (e.g. all notes on job 123), typeId(s), status, contactId, sort. Use to surface follow-ups, callback queues, or audit trails.",
      "resource": "notes"
    },
    {
      "name": "Create Person",
      "value": "createPerson",
      "action": "Create a person",
      "description": "Create an individual contact at a customer/site (e.g. site manager, decision maker). Requires contactId (the parent customer/site), forename, surname. Optional title, email, mobile, landline, position, department, isOptedOut.",
      "resource": "persons"
    },
    {
      "name": "Edit Person",
      "value": "editPerson",
      "action": "Edit a person",
      "description": "Update an existing person. forename and surname must be re-supplied. Use to update contact details, role, marketing opt-out status.",
      "resource": "persons"
    },
    {
      "name": "Get Person",
      "value": "getPerson",
      "action": "Get a person",
      "description": "Get one person by their UUID (string) — name, role, contact details, parent contact, opt-out status.",
      "resource": "persons"
    },
    {
      "name": "List Consent History",
      "value": "listConsentHistory",
      "action": "List consent history",
      "description": "Audit trail of marketing-consent changes for a specific person (GDPR/CASL compliance). Requires personId (UUID).",
      "resource": "persons"
    },
    {
      "name": "List Persons",
      "value": "listPersons",
      "action": "List or search persons",
      "description": "List individual people. Filter by contactId(s) (find people at a customer/site), surname (starts-with), or email. Use to find the right person to contact at a customer.",
      "resource": "persons"
    },
    {
      "name": "Create Quote",
      "value": "createQuote",
      "action": "Create a quote",
      "description": "Raise a new sales quote. Requires currencyCode (ISO 4217). Link to a job, job group, or contact via additional fields. Optional daysValidFor, custom fields, delivery site, and notes (clientNotes shown to customer; internalNotes private). Add lines via Create Quote Line Item, then Mark Quote Sent.",
      "resource": "quotes"
    },
    {
      "name": "Create Quote Line Item",
      "value": "createQuoteLineItem",
      "action": "Create a quote line item",
      "description": "Add a priced line to a quote. Requires quoteId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId.",
      "resource": "quotes"
    },
    {
      "name": "Delete Quote Line Item",
      "value": "deleteQuoteLineItem",
      "action": "Delete a quote line item",
      "description": "Remove a line from a quote. Needs both quoteId and lineItemId. Only valid before the quote is accepted.",
      "resource": "quotes"
    },
    {
      "name": "Edit Quote",
      "value": "editQuote",
      "action": "Edit a quote",
      "description": "Update notes, daysValidFor, delivery site, nominal/department codes, or custom fields on an existing quote. Cannot change currency or convert to invoice.",
      "resource": "quotes"
    },
    {
      "name": "Edit Quote Line Item",
      "value": "editQuoteLineItem",
      "action": "Edit a quote line item",
      "description": "Update an existing line on a quote. All pricing fields (qty, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId) and description must be supplied.",
      "resource": "quotes"
    },
    {
      "name": "Get Quote",
      "value": "getQuote",
      "action": "Get a quote",
      "description": "Get one quote by ID — totals, status, customer, validity, custom fields. Use List Quote Line Items for the priced lines.",
      "resource": "quotes"
    },
    {
      "name": "Get Quote Line Item",
      "value": "getQuoteLineItem",
      "action": "Get a quote line item",
      "description": "Get one priced line on a quote (description, qty, unit cost/price, tax, nominal, department). Needs both quoteId and lineItemId.",
      "resource": "quotes"
    },
    {
      "name": "List Quote Line Items",
      "value": "listQuoteLineItems",
      "action": "List quote line items",
      "description": "List every priced line on a quote. Use to compute totals, generate a customer-facing breakdown, or audit pricing.",
      "resource": "quotes"
    },
    {
      "name": "List Quotes",
      "value": "listQuotes",
      "action": "List or search quotes",
      "description": "List quotes. BigChange requires at least one filter (id/jobId/jobGroupId/contactId/reference) or a createdAt window — if none supplied, the node defaults to the last 12 months. Use for pipeline/conversion analysis or finding a customer's outstanding quote.",
      "resource": "quotes"
    },
    {
      "name": "Mark Quote Accepted",
      "value": "markQuoteAccepted",
      "action": "Mark a quote as accepted",
      "description": "Customer accepted the quote — locks pricing and unblocks job/invoice creation against it.",
      "resource": "quotes"
    },
    {
      "name": "Mark Quote Rejected",
      "value": "markQuoteRejected",
      "action": "Mark a quote as rejected",
      "description": "Customer rejected the quote. Closes the quote out of the active pipeline.",
      "resource": "quotes"
    },
    {
      "name": "Mark Quote Sent",
      "value": "markQuoteSent",
      "action": "Mark a quote as sent",
      "description": "Mark a quote as issued/sent to the customer. Optional sentAt timestamp (UTC, defaults to now).",
      "resource": "quotes"
    },
    {
      "name": "Create Sales Opportunity Line Item",
      "value": "createSalesOpportunityLineItem",
      "action": "Create a sales opportunity line item",
      "description": "Add a priced line to a sales opportunity. Requires salesOpportunityId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId.",
      "resource": "salesOpportunities"
    },
    {
      "name": "Delete Sales Opportunity Line Item",
      "value": "deleteSalesOpportunityLineItem",
      "action": "Delete a sales opportunity line item",
      "description": "Remove a line from a sales opportunity. Needs both salesOpportunityId and lineItemId.",
      "resource": "salesOpportunities"
    },
    {
      "name": "Edit Sales Opportunity",
      "value": "editSalesOpportunity",
      "action": "Edit a sales opportunity",
      "description": "Update a sales opportunity (PATCH semantics — omit a field to keep its existing value).",
      "resource": "salesOpportunities"
    },
    {
      "name": "Edit Sales Opportunity Line Item",
      "value": "editSalesOpportunityLineItem",
      "action": "Edit a sales opportunity line item",
      "description": "Update an existing line on a sales opportunity (PATCH semantics — omit a field to keep its existing value).",
      "resource": "salesOpportunities"
    },
    {
      "name": "Get Sales Opportunity",
      "value": "getSalesOpportunity",
      "action": "Get a sales opportunity",
      "description": "Get one sales opportunity by ID — status, stage, probability, owner, contact, totals, custom fields. Use List Sales Opportunity Line Items for the priced lines.",
      "resource": "salesOpportunities"
    },
    {
      "name": "Get Sales Opportunity Line Item",
      "value": "getSalesOpportunityLineItem",
      "action": "Get a sales opportunity line item",
      "description": "Get one priced line on a sales opportunity. Needs both salesOpportunityId and lineItemId.",
      "resource": "salesOpportunities"
    },
    {
      "name": "List Probabilities",
      "value": "listSalesOpportunityProbabilities",
      "action": "List sales opportunity probabilities",
      "description": "List configured sales opportunity probabilities (reference data — e.g. 25%, 50%, 75%).",
      "resource": "salesOpportunities"
    },
    {
      "name": "List Sales Opportunities",
      "value": "listSalesOpportunities",
      "action": "List or search sales opportunities",
      "description": "List sales opportunities. BigChange requires at least one filter (id/status/contactId/ownerId/reference) or a date window (createdAt or dueDate) — if none supplied, the node defaults to the last 12 months.",
      "resource": "salesOpportunities"
    },
    {
      "name": "List Sales Opportunity Line Items",
      "value": "listSalesOpportunityLineItems",
      "action": "List sales opportunity line items",
      "description": "List every priced line on a sales opportunity. Use to compute weighted/forecast totals or audit pricing.",
      "resource": "salesOpportunities"
    },
    {
      "name": "List Stages",
      "value": "listSalesOpportunityStages",
      "action": "List sales opportunity stages",
      "description": "List configured sales opportunity pipeline stages (reference data — e.g. Qualified, Proposal, Negotiation, Closed Won).",
      "resource": "salesOpportunities"
    },
    {
      "name": "Create Purchase Order",
      "value": "createPurchaseOrder",
      "action": "Create a purchase order",
      "description": "Create a new purchase order. supplierId is required. Optionally link to a job, job group, or contact via additional fields.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Create Purchase Order Line Item",
      "value": "createPurchaseOrderLineItem",
      "action": "Create a purchase order line item",
      "description": "Add a line to a purchase order. Requires purchaseOrderId, contactId, description, quantity, unitCost, unitSellingPrice, taxId, nominalCodeId, departmentCodeId.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Delete Purchase Order Line Item",
      "value": "deletePurchaseOrderLineItem",
      "action": "Delete a purchase order line item",
      "description": "Remove a line from a purchase order. Needs both purchaseOrderId and lineItemId.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Edit Purchase Order",
      "value": "editPurchaseOrder",
      "action": "Edit a purchase order",
      "description": "Update a purchase order (PATCH semantics — omit a field to keep its existing value).",
      "resource": "purchaseOrders"
    },
    {
      "name": "Edit Purchase Order Line Item",
      "value": "editPurchaseOrderLineItem",
      "action": "Edit a purchase order line item",
      "description": "Update an existing line on a purchase order (PATCH semantics — omit a field to keep its existing value).",
      "resource": "purchaseOrders"
    },
    {
      "name": "Get Purchase Order",
      "value": "getPurchaseOrder",
      "action": "Get a purchase order",
      "description": "Get one purchase order by ID — supplier, status, totals, links, custom fields. Use List Purchase Order Line Items for the lines.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Get Purchase Order Line Item",
      "value": "getPurchaseOrderLineItem",
      "action": "Get a purchase order line item",
      "description": "Get one line on a purchase order. Needs both purchaseOrderId and lineItemId.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Get Purchase Order Series",
      "value": "getPurchaseOrderSeries",
      "action": "Get a purchase order series",
      "description": "Get a single purchase order series (numbering sequence) by ID.",
      "resource": "purchaseOrders"
    },
    {
      "name": "List Purchase Order Line Items",
      "value": "listPurchaseOrderLineItems",
      "action": "List purchase order line items",
      "description": "List every line on a purchase order. Use to compute totals or audit ordered goods.",
      "resource": "purchaseOrders"
    },
    {
      "name": "List Purchase Order Series",
      "value": "listPurchaseOrderSeries",
      "action": "List purchase order series",
      "description": "List configured purchase order series (numbering sequences) — reference data.",
      "resource": "purchaseOrders"
    },
    {
      "name": "List Purchase Orders",
      "value": "listPurchaseOrders",
      "action": "List or search purchase orders",
      "description": "List purchase orders. BigChange requires at least one filter (id/jobId/jobGroupId/contactId/reference) or a createdAt window — if none supplied, the node defaults to the last 12 months. Note: date-only filtering may return a BC 500 on some tenants — combine with id[]/jobId[]/contactId[] when possible.",
      "resource": "purchaseOrders"
    },
    {
      "name": "Create Job Group",
      "value": "createJobGroup",
      "action": "Create a job group",
      "description": "Create a job group (a folder/project that links multiple jobs together, e.g. a multi-day install). Requires contactId, isShownOnDevice, areJobsLinked, plannedStartOption, plannedEndOption. Optional title, planned start/end (UTC), category, order number.",
      "resource": "jobGroups"
    },
    {
      "name": "Edit Job Group",
      "value": "editJobGroup",
      "action": "Edit a job group",
      "description": "Update fields on an existing job group (title, order number, planned start/end, category).",
      "resource": "jobGroups"
    },
    {
      "name": "Get Job Group",
      "value": "getJobGroup",
      "action": "Get a job group",
      "description": "Get one job group by numeric ID — title, customer, planned dates, status, member jobs.",
      "resource": "jobGroups"
    },
    {
      "name": "List Job Group Status History",
      "value": "listJobGroupStatusHistory",
      "action": "List job group status history",
      "description": "Audit trail of status changes on a job group. Use to debug why a multi-job project is stuck.",
      "resource": "jobGroups"
    },
    {
      "name": "List Job Groups",
      "value": "listJobGroups",
      "action": "List or search job groups",
      "description": "List job groups (multi-job projects). Sort by created/title. Use for project pipeline views.",
      "resource": "jobGroups"
    },
    {
      "name": "Mark Job Group Complete",
      "value": "markJobGroupComplete",
      "action": "Mark a job group as complete",
      "description": "Force every job in the group into a \"completed\" state. Use when an entire multi-job project is done in one go (not common — usually each job is closed individually).",
      "resource": "jobGroups"
    },
    {
      "name": "Mark Job Group Financially Complete",
      "value": "markJobGroupFinanciallyComplete",
      "action": "Mark a job group as financially complete",
      "description": "Lock the job group for finance — signals invoicing is finished. After this, no further invoices can be raised against the group.",
      "resource": "jobGroups"
    },
    {
      "name": "Create Stock Details",
      "value": "createStockDetails",
      "action": "Create a stock product definition",
      "description": "Create a new stock product (SKU/template). Requires model and productCategoryId. Optional make, stockCode, batchNumber, isConsumable. This is the catalogue entry, NOT a physical unit — use Create Stock Item for those.",
      "resource": "stock"
    },
    {
      "name": "Create Stock Item",
      "value": "createStockItem",
      "action": "Create a stock item",
      "description": "Create a physical stock unit (instance of a product). Requires stockDetailsId, model, productCategoryId. Optional serial number, condition, location contact, quantity. Use to register newly received inventory.",
      "resource": "stock"
    },
    {
      "name": "Get Product Category",
      "value": "getProductCategory",
      "action": "Get a product category",
      "description": "Get one product category by numeric ID. Use to map a category ID to a name when displaying stock.",
      "resource": "stock"
    },
    {
      "name": "Get Stock Details",
      "value": "getStockDetails",
      "action": "Get a stock product (SKU)",
      "description": "Get one stock product definition by stockDetailsId — model, make, stock code, category, suppliers reference.",
      "resource": "stock"
    },
    {
      "name": "Get Stock Item",
      "value": "getStockItem",
      "action": "Get a stock item",
      "description": "Get one physical stock unit by stockItemId — serial number, condition, current location, quantity.",
      "resource": "stock"
    },
    {
      "name": "Get Stock Supplier",
      "value": "getStockSupplier",
      "action": "Get a stock supplier",
      "description": "Get one supplier link for a stock product. Needs both stockDetailsId and stockSupplierId.",
      "resource": "stock"
    },
    {
      "name": "List Product Categories",
      "value": "listProductCategories",
      "action": "List product categories",
      "description": "List stock product categories (the top-level taxonomy of inventory). Filter by name (starts-with).",
      "resource": "stock"
    },
    {
      "name": "List Stock Details",
      "value": "listStockDetails",
      "action": "List stock products (SKUs)",
      "description": "List stock product definitions. Filter by productCategoryId(s), stockCode(s), or isConsumable. Use to browse the SKU catalogue.",
      "resource": "stock"
    },
    {
      "name": "List Stock Items",
      "value": "listStockItems",
      "action": "List stock items",
      "description": "List physical stock units. Filter by stockDetailsId(s), serialNumber, or current locationContactId. Use to find what physical units exist of a given product or what's currently at a location.",
      "resource": "stock"
    },
    {
      "name": "List Stock Movements",
      "value": "listStockMovements",
      "action": "List stock movements",
      "description": "List stock movement history (pickups/drop-offs). Filter by date ranges (pickUpAtFrom/To, dropOffAtFrom/To), jobId, stockDetailsId, stockItemId, vehicleId, dropOffContactId, dropOffVehicleId. Use for inventory audits and \"where did this part go?\" queries.",
      "resource": "stock"
    },
    {
      "name": "List Stock Suppliers",
      "value": "listStockSuppliers",
      "action": "List stock suppliers",
      "description": "List suppliers linked to a specific stock product. Requires stockDetailsId.",
      "resource": "stock"
    },
    {
      "name": "Update Stock Details",
      "value": "updateStockDetails",
      "action": "Update a stock product (SKU)",
      "description": "Update fields on an existing stock product definition (model, category, make, stockCode, batchNumber, isConsumable).",
      "resource": "stock"
    },
    {
      "name": "Update Stock Item",
      "value": "updateStockItem",
      "action": "Update a stock item",
      "description": "Update fields on a physical stock unit (serial number, make, notes, quantity, location contact, condition).",
      "resource": "stock"
    },
    {
      "name": "Get Department Code",
      "value": "getDepartmentCode",
      "action": "Get a department code",
      "description": "Get one department code by ID — code and description. Use to map a departmentCodeId on a quote/invoice line to a human-readable label.",
      "resource": "referenceData"
    },
    {
      "name": "Get Nominal Code",
      "value": "getNominalCode",
      "action": "Get a nominal code",
      "description": "Get one nominal (accounting) code by ID — code and description. Use to map a nominalCodeId on a quote/invoice line to its accounting label.",
      "resource": "referenceData"
    },
    {
      "name": "List Department Codes",
      "value": "listDepartmentCodes",
      "action": "List department codes",
      "description": "List department codes (cost-centre codes used on quotes and invoices). Required reference data before Create Quote Line Item / Create Invoice Line Item.",
      "resource": "referenceData"
    },
    {
      "name": "List Nominal Codes",
      "value": "listNominalCodes",
      "action": "List nominal codes",
      "description": "List nominal (accounting) codes used on quotes and invoices. Required reference data before Create Quote Line Item / Create Invoice Line Item.",
      "resource": "referenceData"
    },
    {
      "name": "Generate Account Report",
      "value": "generateAccountReport",
      "action": "Generate a monthly account report",
      "description": "Generate a structured monthly account report aggregating jobs across the full parent–child contact hierarchy",
      "resource": "accountReport"
    },
    {
      "name": "Generate Briefing",
      "value": "generateBriefing",
      "action": "Generate an engineer briefing",
      "description": "Generate a structured pre-visit briefing and AI call script for a field service engineer heading to a job",
      "resource": "briefing"
    },
    {
      "name": "Batch Classify Emails",
      "value": "batchClassifyEmail",
      "action": "Batch classify emails",
      "description": "Run up to 50 emails through the triage pipeline in a single call; portal/pre-filter hits are instant and only novel emails consume LLM tokens",
      "resource": "email"
    },
    {
      "name": "Classify Email",
      "value": "classifyEmail",
      "action": "Classify an email",
      "description": "Classify an incoming email using the AI triage pipeline",
      "resource": "email"
    },
    {
      "name": "Ingest Portal Email",
      "value": "ingestEmail",
      "action": "Ingest a portal email",
      "description": "Extract structured job data from an FM portal email via the /ingest/email/portal endpoint and resolve entities",
      "resource": "email"
    },
    {
      "name": "List Triage Categories",
      "value": "listTriageCategories",
      "action": "List triage categories",
      "description": "Return the tenant's active triage categories with priority, destination, and prompt rules from the taxonomy database",
      "resource": "email"
    },
    {
      "name": "List Triage Rules",
      "value": "listTaxonomyRules",
      "action": "List triage routing rules",
      "description": "Return the tenant's active email routing rules with full condition/action definitions; optionally filter by classification phase",
      "resource": "email"
    },
    {
      "name": "Aggregate Jobs",
      "value": "aggregateJobs",
      "action": "Aggregate job metrics",
      "description": "Compute job metrics with grouping, time-axis control, and period-over-period comparison",
      "resource": "jobFeed"
    },
    {
      "name": "Get Enriched Job",
      "value": "getEnrichedJob",
      "action": "Get an enriched job",
      "description": "Get a single job with worksheets, AI enrichment (vertical, sentiment, key phrases), and timing data",
      "resource": "jobFeed"
    },
    {
      "name": "List Account Job Feed",
      "value": "listAccountJobFeed",
      "action": "List account job feed",
      "description": "Paginated job feed scoped to a parent account and all its children. Pass any contact ID in the hierarchy — jobs for the entire account tree are returned.",
      "resource": "jobFeed"
    },
    {
      "name": "List Job Feed",
      "value": "listJobFeed",
      "action": "List job feed",
      "description": "Paginated list of AI-enriched jobs with filters for status, result, engineer, customer, job type, and category",
      "resource": "jobFeed"
    },
    {
      "name": "Generate Report",
      "value": "generateReport",
      "action": "Generate a report",
      "description": "Generate an AI-powered operational report (daily or weekly) with optional narrative summary",
      "resource": "reports"
    },
    {
      "name": "List Report Sections",
      "value": "listReportSections",
      "action": "List report sections",
      "description": "List all available report types and their sections",
      "resource": "reports"
    },
    {
      "name": "Autocomplete",
      "value": "autocomplete",
      "action": "Fuzzy autocomplete search",
      "description": "Quick fuzzy search across customers, engineers, jobs, persons, and sites",
      "resource": "search"
    },
    {
      "name": "Search Intake",
      "value": "searchIntake",
      "action": "Search intake descriptions",
      "description": "Search intake descriptions with enriched job context from the knowledge graph",
      "resource": "search"
    },
    {
      "name": "Search Intake (Basic)",
      "value": "searchIntakeBasic",
      "action": "Search intake descriptions (basic)",
      "description": "Search intake descriptions without graph enrichment",
      "resource": "search"
    },
    {
      "name": "Search Outcomes",
      "value": "searchOutcomes",
      "action": "Search job outcomes",
      "description": "Search job outcome and diagnostic summaries",
      "resource": "search"
    },
    {
      "name": "Search Summary Sections",
      "value": "searchSummarySections",
      "action": "Search customer summary knowledge base",
      "description": "Semantic hybrid search across CustomerSummary knowledge base sections for one or all customers",
      "resource": "search"
    },
    {
      "name": "Get Summary By Contact",
      "value": "getSummaryByContact",
      "action": "Get full customer summary for a contact",
      "description": "Retrieve all stored CustomerSummary sections for a single contact in one call",
      "resource": "search"
    },
    {
      "name": "Get Latest Results",
      "value": "getSentinelResults",
      "action": "Get latest sentinel results",
      "description": "Retrieve the cached results from the most recent sentinel run for your tenant",
      "resource": "sentinel"
    },
    {
      "name": "List Sentinel Registry",
      "value": "listSentinelRegistry",
      "action": "List sentinel definitions",
      "description": "List all available sentinel definitions with their thresholds and recommended schedules",
      "resource": "sentinel"
    },
    {
      "name": "Run Sentinels",
      "value": "runSentinels",
      "action": "Run sentinel checks",
      "description": "Run sentinel checks and return only triggered alerts",
      "resource": "sentinel"
    },
    {
      "name": "Add Case Item",
      "value": "addCaseItem",
      "action": "Link an item to a case",
      "description": "Link a job, customer, site, engineer, or other record to a case",
      "resource": "cases"
    },
    {
      "name": "Add Comment",
      "value": "addComment",
      "action": "Add a comment to a case",
      "description": "Add a comment to a case activity timeline",
      "resource": "cases"
    },
    {
      "name": "Add Participant",
      "value": "addParticipant",
      "action": "Add a participant to a case",
      "description": "Add a user as a participant with a specified role",
      "resource": "cases"
    },
    {
      "name": "Create Case",
      "value": "createCase",
      "action": "Create a case",
      "description": "Create a new case with title, type, and optional priority, tags, and metadata",
      "resource": "cases"
    },
    {
      "name": "Get Case",
      "value": "getCase",
      "action": "Get a case",
      "description": "Get a single case with participants, items, and latest activity",
      "resource": "cases"
    },
    {
      "name": "List Activity",
      "value": "listActivity",
      "action": "List case activity",
      "description": "Get the activity timeline for a case, paginated with newest first",
      "resource": "cases"
    },
    {
      "name": "List Case Items",
      "value": "listCaseItems",
      "action": "List case items",
      "description": "List all items linked to a case, optionally filtered by item type",
      "resource": "cases"
    },
    {
      "name": "List Cases",
      "value": "listCases",
      "action": "List cases",
      "description": "List cases for a company with filtering and pagination",
      "resource": "cases"
    },
    {
      "name": "List Cases for Item",
      "value": "listCasesForItem",
      "action": "Find cases for an item",
      "description": "Reverse lookup — find all cases that reference a specific job, customer, site, or other item",
      "resource": "cases"
    },
    {
      "name": "Remove Case Item",
      "value": "removeCaseItem",
      "action": "Remove an item from a case",
      "description": "Unlink an item from a case",
      "resource": "cases"
    },
    {
      "name": "Remove Participant",
      "value": "removeParticipant",
      "action": "Remove a participant from a case",
      "description": "Remove a participant from a case",
      "resource": "cases"
    },
    {
      "name": "Search Cases",
      "value": "searchCases",
      "action": "Search cases",
      "description": "Full-text search across case titles and descriptions with optional filters",
      "resource": "cases"
    },
    {
      "name": "Transition Case",
      "value": "transitionCase",
      "action": "Transition case status",
      "description": "Transition a case to a new status with lifecycle validation",
      "resource": "cases"
    },
    {
      "name": "Update Case",
      "value": "updateCase",
      "action": "Update a case",
      "description": "Update case fields — only provided fields are changed",
      "resource": "cases"
    },
    {
      "name": "Get Pulse",
      "value": "getPulse",
      "action": "Get tenant pulse",
      "description": "Get a cached business-health dashboard snapshot with pipeline, performance, workforce, and asset metrics",
      "resource": "pulse"
    },
    {
      "name": "Get Forecast",
      "value": "getForecast",
      "action": "Get weather forecast",
      "description": "Get a weather forecast for a latitude/longitude",
      "resource": "weather"
    },
    {
      "name": "Get Historical",
      "value": "getHistorical",
      "action": "Get historical weather",
      "description": "Get historical weather data for a latitude/longitude",
      "resource": "weather"
    },
    {
      "name": "Get Weather for Job",
      "value": "getWeatherForJob",
      "action": "Get weather for job",
      "description": "Get weather data for a specific job by ID",
      "resource": "weather"
    },
    {
      "name": "Get Weather for Site",
      "value": "getWeatherForSite",
      "action": "Get weather for site",
      "description": "Get weather data for a specific site by site key",
      "resource": "weather"
    },
    {
      "name": "Generate Profiles",
      "value": "generateProfiles",
      "action": "Generate intelligence profiles",
      "description": "Generate or regenerate intelligence profiles for a tenant",
      "resource": "intelligence"
    },
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Get a job type profile",
      "description": "Get intelligence profile for a specific job type",
      "resource": "intelligence"
    },
    {
      "name": "List Profiles",
      "value": "listProfiles",
      "action": "List intelligence profiles",
      "description": "List all intelligence profiles for a tenant",
      "resource": "intelligence"
    },
    {
      "name": "Run Investigation",
      "value": "runInvestigation",
      "action": "Run an investigation",
      "description": "Multi-step hybrid investigation across vector and graph data",
      "resource": "investigate"
    },
    {
      "name": "Chat",
      "value": "connieChat",
      "action": "Chat with Connie",
      "description": "Send a message to the Connie AI assistant",
      "resource": "connie"
    },
    {
      "name": "Get Session Messages",
      "value": "connieGetSessionMessages",
      "action": "Get session messages",
      "description": "Get messages for a specific chat session",
      "resource": "connie"
    },
    {
      "name": "List Sessions",
      "value": "connieListSessions",
      "action": "List chat sessions",
      "description": "List Connie chat sessions for a user or contact",
      "resource": "connie"
    },
    {
      "name": "Search History",
      "value": "connieSearchHistory",
      "action": "Search chat history",
      "description": "Search across Connie conversation history",
      "resource": "connie"
    },
    {
      "name": "Delete User",
      "value": "deleteUser",
      "action": "Archive a user",
      "description": "Soft-delete (archive) a user from the company",
      "resource": "users"
    },
    {
      "name": "Invite User",
      "value": "inviteUser",
      "action": "Invite a user",
      "description": "Send an email invitation to join the company",
      "resource": "users"
    },
    {
      "name": "List Invites",
      "value": "listInvites",
      "action": "List pending invites",
      "description": "Get all pending (unaccepted) invitations for the company",
      "resource": "users"
    },
    {
      "name": "List Users",
      "value": "listUsers",
      "action": "List users",
      "description": "Get all active users for the company",
      "resource": "users"
    },
    {
      "name": "Update User Role",
      "value": "updateUserRole",
      "action": "Update a user role",
      "description": "Change the role assigned to a user",
      "resource": "users"
    },
    {
      "name": "List attachments for an entity",
      "value": "wsAttachmentsGetlistofattachments",
      "action": "List attachments for an entity via Web Services",
      "description": "This service lists information about any attachments to the requested entity.",
      "resource": "wsAttachments"
    },
    {
      "name": "Retrieve an attachment by Id",
      "value": "wsAttachmentsGetanattachment",
      "action": "Retrieve an attachment by Id via Web Services",
      "description": "This service retrieves an attachment using an AttachmentId. This can be retrieved using ListAttachments.",
      "resource": "wsAttachments"
    },
    {
      "name": "Driver infringement events for a date range",
      "value": "wsReportdriverinfringement",
      "action": "Driver infringement events for a date range via Web Services",
      "description": "Returns the same dataset used by the Driver Infringement Report, allowing you to extract each driving infringement event.",
      "resource": "wsReports"
    },
    {
      "name": "Driver performance data for a date range",
      "value": "wsReportdriverperformance",
      "action": "Driver performance data for a date range via Web Services",
      "description": "This webservice returns the same dataset used by the Driver Performance Report allowing you to extract each data around how your resources drive.",
      "resource": "wsReports"
    },
    {
      "name": "Get a list of reports",
      "value": "wsReportlist",
      "action": "Get a list of reports via Web Services",
      "description": "BigChange Web Services ReportList: get a list of reports.",
      "resource": "wsReports"
    },
    {
      "name": "List document templates",
      "value": "wsTemplatelist",
      "action": "List document templates via Web Services",
      "description": "This service returns a detailed list of the report templates available in BigChange.",
      "resource": "wsReports"
    },
    {
      "name": "Vehicle infringement events",
      "value": "wsReportvehicleinfringement",
      "action": "Vehicle infringement events via Web Services",
      "description": "BigChange Web Services ReportVehicleInfringement: vehicle infringement events.",
      "resource": "wsReports"
    },
    {
      "name": "Vehicle performance data",
      "value": "wsReportvehicleperformance",
      "action": "Vehicle performance data via Web Services",
      "description": "This service allows you to view how your assets drive. This works like the 'Driver Behaviour' report to relay the same information, but for assets instead of resources.",
      "resource": "wsReports"
    },
    {
      "name": "Get journey data for a date range",
      "value": "wsJourneys",
      "action": "Get journey data for a date range via Web Services",
      "description": "Retrieve a list of journeys within a specified date range.",
      "resource": "wsTracking"
    },
    {
      "name": "Get the last known position of assets",
      "value": "wsLive",
      "action": "Get the last known position of assets via Web Services",
      "description": "Retrieves the latest known position of resources and mobile assets.",
      "resource": "wsTracking"
    },
    {
      "name": "Last known odometer readings",
      "value": "wsOdometer",
      "action": "Last known odometer readings via Web Services",
      "description": "This method does not return positional information.",
      "resource": "wsTracking"
    },
    {
      "name": "Last known position and odometer",
      "value": "wsLiveodometer",
      "action": "Last known position and odometer via Web Services",
      "description": "This service returns details of Assets last known position and odometer.",
      "resource": "wsTracking"
    }
  ]

npm_readme:
  # n8n-nodes-vh3ai

  Community node for [n8n](https://n8n.io/) that integrates with the [VH3 AI](https://vh3.ai) field service management platform.

  This package provides a single unified node (**VH3 AI**) that combines both BigChange API operations and VH3 AI intelligence features under one credential type. Resources are clearly labelled "(BigChange)" or "(VH3 AI)" in the dropdown.

  The node is marked `usableAsTool: true` so it can be called directly by n8n AI agents.

  ---

  ## Installation

  ### Self-hosted n8n

  Go to **Settings → Community Nodes**, click **Install**, and enter:

  ```
  n8n-nodes-vh3ai
  ```

  ### n8n Cloud

  Search for **VH3 AI** in the community nodes section.

  ### Manual / Development

  ```bash
  cd n8n-nodes-vh3ai
  npm install
  npm run build
  npm link

  mkdir -p ~/.n8n/custom && cd ~/.n8n/custom
  npm init -y
  npm link n8n-nodes-vh3ai

  n8n start
  ```

  ---

  ## Credentials

  The node uses the **VH3 AI API** credential type:


  | Field        | Description                         | Default                                  |
  | ------------ | ----------------------------------- | ---------------------------------------- |
  | API Key      | Your VH3 API key (issued by VH3 AI) | —                                        |
  | Company ID   | Your tenant / company ID            | —                                        |
  | Base URL     | VH3 Connect gateway URL             | `https://api.vh3connect.io`              |
  | FSI Base URL | VH3 Field Service Intelligence API  | `https://api.vh3connect.io/api:kP8T1CK7` |


  All operations authenticate using the same API Key and Company ID credentials.

  ---

  ## Resources & Operations

  ### BigChange API Resources

  | Resource                | Operations                                                                                                                                                                                                        |
  | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | **Job (BigChange)**                 | List Jobs · Get Job · Get Job by ID · Create Job · Edit Job · Cancel Job · Schedule Job · Start Job · Set Job Result · List Job Status History · Create / Delete / List Job Constraints · Create / List Job Stock |
  | **Contact (BigChange)**             | List Contacts · Get Contact · Create / Edit Contact · Stop / Unstop Contact · List Contact Groups · Get / Create / Update Contact Group                                                                           |
  | **Resource / Engineer (BigChange)** | List Resources · Get Resource · Create / Update Resource · List Resource Groups · Get Resource Group                                                                                                              |
  | **Vehicle (BigChange)**             | List Vehicles · Get / Create / Update Vehicle                                                                                                                                                                     |
  | **Worksheet (BigChange)**           | List Worksheet Definitions · Get Worksheet · Get Worksheet Questions · List Worksheet Answers                                                                                                                     |
  | **Worksheet Group (BigChange)**     | List · Get                                                                                                                                                                                                        |
  | **Invoice (BigChange)**             | List Invoices · Get Invoice · Create / Edit Invoice · Cancel Invoice · Mark Invoice Sent / Paid · List Invoice Line Items · Get Invoice Line Item · Create / Delete Invoice Line Item                             |
  | **Quote (BigChange)**               | List Quotes · Get Quote · Create / Edit Quote · Mark Quote Sent / Accepted / Rejected · List Quote Line Items · Get / Create / Edit / Delete Quote Line Item                                                      |
  | **Sales Opportunity (BigChange)**   | List Sales Opportunities · Get Sales Opportunity · Edit Sales Opportunity · List Probabilities · List Stages · List / Get / Create / Edit / Delete Sales Opportunity Line Item                                    |
  | **Purchase Order (BigChange)**      | List Purchase Orders · Get Purchase Order · Create / Edit Purchase Order · List / Get Purchase Order Series · List / Get / Create / Edit / Delete Purchase Order Line Item                                        |
  | **Note (BigChange)**                | List Notes · Get Note · Create / Edit Note · Create Progress Update · List Note Types · Get Note Type                                                                                                             |
  | **Person (BigChange)**              | List Persons · Get Person · Create / Edit Person · List Consent History                                                                                                                                           |
  | **Job Group (BigChange)**           | List Job Groups · Get Job Group · Create / Edit Job Group · Mark Complete · Mark Financially Complete · List Status History                                                                                       |
  | **Stock (BigChange)**               | List Product Categories · Get Product Category · List / Get / Create / Update Stock Details · List / Get / Create / Update Stock Item · List Stock Movements · List Stock Suppliers · Get Stock Supplier         |
  | **Reference Data (BigChange)**      | List Department Codes · Get Department Code · List Nominal Codes · Get Nominal Code                                                                                                                               |
  | **Job Type (BigChange)**            | List Job Types · Get Job Type                                                                                                                                                                                     |

  ### VH3 AI Intelligence Resources

  | Resource           | Operations                                                                                                                                                                                                                                 |
  | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | **Account Report (VH3 AI)** | Generate Account Report (monthly account review for a contact)                                                                                                                                                                             |
  | **Briefing (VH3 AI)**       | Generate Briefing (engineer pre-visit briefing and call script)                                                                                                                                                                            |
  | **Case (VH3 AI)**           | Create / Get / Update / Search / List Cases · Transition Case (lifecycle status change) · Add Comment · List Activity · List / Add / Remove Case Items · Add / Remove Participants · List Cases for Item (reverse lookup by external item) |
  | **Connie (VH3 AI)**         | Chat · List Sessions · Get Session Messages · Search History                                                                                                                                                                               |
  | **Email (VH3 AI)**          | Batch Classify Emails · Classify Email · Ingest Portal Email · List Triage Categories · List Triage Rules                                                                                                                                  |
  | **Intelligence (VH3 AI)**   | List Profiles (with **Profiled Only** filter) · Get Profile · Generate Profiles                                                                                                                                                            |
  | **Investigate (VH3 AI)**    | Run Investigation (multi-step hybrid investigation across vector + graph data)                                                                                                                                                             |
  | **Job Feed (VH3 AI)**       | List Job Feed · List Account Job Feed · Get Enriched Job · Aggregate Jobs (metrics with grouping, time-axis control, period-over-period comparison)                                                                                        |
  | **Pulse (VH3 AI)**          | Get Pulse (cached business-health dashboard snapshot for the tenant)                                                                                                                                                                       |
  | **Report (VH3 AI)**         | Generate Report (accepts `sections` parameter to scope the output) · List Report Sections                                                                                                                                                  |
  | **Search (VH3 AI)**         | Autocomplete · Search Outcomes · Search Intake · Search Intake (Basic)                                                                                                                                                                     |
  | **Sentinel (VH3 AI)**       | Run Sentinels (all or single by ID) · List Sentinel Registry · Get Latest Results                                                                                                                                                          |
  | **User (VH3 AI)**           | List Users · List Invites · Invite User · Update User Role · Delete User                                                                                                                                                                   |
  | **Weather (VH3 AI)**        | Get Weather for Job · Get Weather for Site · Get Forecast · Get Historical                                                                                                                                                                 |

  ---

  ## Key Features

  ### Simplify switch — LLM-friendly for cost-saving and efficiency

  Every BigChange read operation exposes a top-level **Simplify** boolean. When ON, the node sends `compact=true` and the API returns LLM-optimised payloads (empty values stripped, nested structures flattened, custom fields collapsed to a key→value dict).

  The **Search › Autocomplete** operation also has a **Simplify** toggle (default ON). This is handled at the node layer — it strips `null`, empty string, and empty array fields from each result and its nested `extra` object before returning data. `false` and `0` are retained as meaningful values.

  ### List Invoices / Quotes / Sales Opportunities / Purchase Orders — automatic 12-month fallback

  BigChange's finance list endpoints reject requests with no filter or date range. When no filter is supplied, the node automatically scopes the query to the last 12 months.

  ### Email operations — attachment support

  **Classify Email** and **Ingest Email** support optional attachments via URL (server-side fetch) or binary data (base64-encoded upload).

  ### Search operations — per-result unwrapping

  All search operations return one n8n item per result (envelope unwrapped at the node layer).

  ### Sentinels — proactive monitoring

  Deterministic checks (no LLM cost) against your VH3 AI platform fee. Available sentinels include Engineer Performance Slip, FVF Rate Drop, Workload Imbalance, Site Deterioration, Repeat Failure Escalation, and more.

  ---

  ## Architecture & Patterns

  ### Parameter casing

  The n8n UI uses **camelCase** field names. The handlers map these to the appropriate API parameter format before sending.

  ### Response normalisation

  - **BigChange**: `extractItems()` unwraps the three known envelope shapes into a flat item array.
  - **VH3 AI**: semantic search and autocomplete responses are unwrapped to per-hit / per-result items.

  ### Auto-pagination

  List operations expose a **Return All** toggle. When ON, the node walks every page automatically (capped at 200 pages).

  ### AI tool compatibility

  The node sets `usableAsTool: true`. n8n auto-generates a Tool variant (**VH3 AI Tool**) which implements the `supplyData()` interface for LangChain agents.

  ---

  ## Deployment & Hosting

  | Model                              | Description                                                                                                                                                                                                                              |
  | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | **Managed Hosting by VH3 AI**      | VH3 deploys and hosts the n8n instance at `{customer}.n8n.vh3.ai`. Runs the standard n8n Docker image from Docker Hub with `n8n-nodes-vh3ai` installed as a community node on startup. Database and config managed via environment variables on DigitalOcean. |
  | **BYOI (Bring Your Own Instance)** | Customer runs their own n8n (self-hosted or n8n Cloud), installs `n8n-nodes-vh3ai` via Community Nodes, and gives VH3 an API key for workflow support.                                                                                   |

  ---

  ## Compatibility

  - n8n version: 1.0+ (tested on 2.16.x; community-node tool usage requires n8n ≥ 1.62 with `usableAsTool` enabled)
  - Node.js: 18.10+

  ## Changelog

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

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community n8n node that integrates with the VH3 AI field service management platform to read and write BigChange data and access AI intelligence features.","capabilities":["List, get, create, edit, and cancel jobs","Manage contacts and contact groups","Handle resources, engineers, and vehicles","Create and manage worksheets and worksheet groups","Process invoices, quotes, and sales opportunities","Manage purchase orders and line items","Create and edit notes and progress updates","Manage persons and consent history","Handle job groups and stock management","Access reference data like department and nominal codes"],"authentication":"API Key required (VH3 API Key and Company ID)","commonUseCases":["Automating field service job workflows","Integrating VH3 AI intelligence into n8n workflows","Syncing customer data and contacts","Managing invoices and quotes automatically","Tracking stock and resource availability"],"limitations":["Read-only access to some resources may be restricted based on API permissions","Requires manual installation for self-hosted n8n unless using Community Nodes panel","Some advanced features may require specific VH3 AI subscription tiers"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-browser-use-cloud.browserUse
package_name: n8n-nodes-browser-use-cloud
display_name: Browser Use
description: Automate any web task with natural language using AI agents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: sauravpanda
author_github_url: https://github.com/browser-use/n8n-nodes-browser-use.git
npm_package_name: n8n-nodes-browser-use-cloud
npm_version: 1.1.2
community_fetched_at: 2026-07-14T14:40:34.254Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "task",
      "options": [
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "apiVersion": [
            "v2"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a task",
          "description": "Execute a task using an AI agent"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "description": "Retrieve details of a task"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many tasks",
          "description": "List all tasks in your account"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop a task",
          "description": "Stop a running task"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "description": "Update a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ],
          "apiVersion": [
            "v2"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "session",
      "options": [
        {
          "name": "Session",
          "value": "session",
          "description": "Run and manage v3 agent sessions"
        },
        {
          "name": "Browser",
          "value": "browser",
          "description": "Create and manage standalone cloud browser sessions"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "apiVersion": [
            "v3"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runAndWait",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a session",
          "description": "Create an idle session or dispatch a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a session",
          "description": "Soft-delete a session"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session",
          "description": "Get a session"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many sessions",
          "description": "List sessions"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "Get session messages",
          "description": "List messages for a session"
        },
        {
          "name": "Run and Wait",
          "value": "runAndWait",
          "action": "Run a task and wait",
          "description": "Create or reuse a session, run a task, and poll until completion"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop a session",
          "description": "Stop a session or the current task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ],
          "apiVersion": [
            "v3"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a browser session",
          "description": "Create a standalone browser session with live and CDP URLs"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a browser session",
          "description": "Get browser session details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many browser sessions",
          "description": "List browser sessions"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop a browser session",
          "description": "Stop a browser session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "browser"
          ],
          "apiVersion": [
            "v3"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a task",
      "description": "Execute a task using an AI agent",
      "resource": "task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "description": "Retrieve details of a task",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many tasks",
      "description": "List all tasks in your account",
      "resource": "task"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop a task",
      "description": "Stop a running task",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "description": "Update a task",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a session",
      "description": "Create an idle session or dispatch a task",
      "resource": "session"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a session",
      "description": "Soft-delete a session",
      "resource": "session"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session",
      "description": "Get a session",
      "resource": "session"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many sessions",
      "description": "List sessions",
      "resource": "session"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "Get session messages",
      "description": "List messages for a session",
      "resource": "session"
    },
    {
      "name": "Run and Wait",
      "value": "runAndWait",
      "action": "Run a task and wait",
      "description": "Create or reuse a session, run a task, and poll until completion",
      "resource": "session"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop a session",
      "description": "Stop a session or the current task",
      "resource": "session"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a browser session",
      "description": "Create a standalone browser session with live and CDP URLs",
      "resource": "browser"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a browser session",
      "description": "Get browser session details",
      "resource": "browser"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many browser sessions",
      "description": "List browser sessions",
      "resource": "browser"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop a browser session",
      "description": "Stop a browser session",
      "resource": "browser"
    }
  ]

npm_readme:
  # n8n-nodes-browser-use

  An n8n community node package for Browser Use Cloud. The single **Browser Use** node supports both API v2 task workflows and API v3 session-based agent workflows.

  <p>
    <img src="https://raw.githubusercontent.com/browser-use/browser-use/main/static/browser-use.png" alt="Browser Use" width="360">
  </p>

  ## What is Browser Use?

  Browser Use Cloud lets AI agents control managed browsers for web research, data extraction, form filling, testing, and multi-step workflows.

  This package includes one n8n node:

  - **Browser Use**: choose **API Version** in the node UI to use v2 Tasks or v3 Sessions and Browsers

  ## Installation

  Install this node using n8n's community node manager or npm.

  ### Via n8n

  1. Go to Settings > Community Nodes
  2. Search for `n8n-nodes-browser-use-cloud`
  3. Install and restart n8n

  ### Via npm

  ```bash
  npm install n8n-nodes-browser-use-cloud
  ```

  ## Authentication

  1. Create a Browser Use account at [cloud.browser-use.com](https://cloud.browser-use.com)
  2. Create an API key in the dashboard
  3. In n8n, create a Browser Use API credential
  4. Enter the API key

  The default Base URL remains:

  ```text
  https://api.browser-use.com/api/v2
  ```

  Leave the credential Base URL at the default. In the **Browser Use** node, use the **API Version** dropdown to switch between **v2 Tasks** and **v3 Sessions and Browsers**. The node switches the API path internally, so existing credentials continue to work. The node authenticates with the `X-Browser-Use-API-Key` header.

  ## Nodes

  ### API Version: v2 Tasks

  The v2 mode remains available for backward compatibility. It uses the v2 `/tasks` API and keeps the same operations:

  - **Execute**
  - **Get**
  - **Get Many**
  - **Stop**
  - **Update**

  Use v2 mode for existing workflows that already depend on API v2 task behavior or v2-specific options such as allowed domains, secrets, max steps, judge settings, and v2 model names.

  ### API Version: v3 Sessions and Browsers

  Use v3 mode for the new API v3 session and browser workflows.

  #### Session

  Use Session operations for the v3 agent API.

  Operations:

  - **Run and Wait**: Create or reuse a session, dispatch a task, and poll until the task completes or the session reaches `stopped`, `timed_out`, or `error`
  - **Create**: Create an idle session or dispatch a task without polling
  - **Get**: Retrieve session details
  - **Get Many**: List sessions
  - **Get Messages**: Retrieve message history for debugging or custom UIs
  - **Stop**: Stop the full session or only the running task
  - **Delete**: Soft-delete a session

  Common options:

  - **Model**: `claude-sonnet-4.6`, `claude-opus-4.6`, `gemini-3-flash`, `bu-mini`, `bu-max`, or `bu-ultra`
  - **Keep Alive**: Keep the browser session idle after task completion for follow-up tasks
  - **Profile ID**: Reuse cookies and browser state
  - **Workspace ID**: Attach persistent files
  - **Proxy Country Code**: Route traffic through a specific country, or disable proxy
  - **Enable Recording**: Return recording URLs after completion
  - **Extract Structured Data**: Send an `outputSchema` JSON Schema and receive structured final output

  #### Browser

  Use Browser operations for standalone cloud browser sessions. This is the computer-use-style mode: Browser Use provisions a managed browser and returns URLs you can use from other automation tools.

  Operations:

  - **Create**: Start a browser session and return `liveUrl` and `cdpUrl`
  - **Get**: Retrieve browser session status and URLs
  - **Get Many**: List active or stopped browser sessions
  - **Stop**: Stop a browser session and refund unused time proportionally

  Browser options include profile ID, proxy country code, timeout, screen size, resizing, custom proxy, and recording.

  ## Browser Use v3 Examples

  ### Run an agent task and wait

  ```json
  {
    "resource": "session",
    "operation": "runAndWait",
    "task": "Find the top 3 trending repositories on GitHub today and summarize why they are trending",
    "waitTimeout": 900,
    "sessionOptions": {
      "model": "claude-sonnet-4.6",
      "keepAlive": false
    }
  }
  ```

  ### Reuse a session for follow-up work

  First run a task with `keepAlive` enabled, then pass the returned `id` as **Session ID** in the next task's Session Options.

  ```json
  {
    "resource": "session",
    "operation": "runAndWait",
    "task": "Using the same browser session, open the first result and extract the pricing page URL",
    "sessionOptions": {
      "existingSessionId": "SESSION_ID",
      "keepAlive": true
    }
  }
  ```

  ### Request structured output

  ```json
  {
    "resource": "session",
    "operation": "runAndWait",
    "task": "Extract company details from this website",
    "startUrl": "https://example.com/about",
    "enableStructuredOutput": true,
    "schemaTemplate": "custom",
    "outputSchema": {
      "type": "object",
      "properties": {
        "companyName": { "type": "string" },
        "industry": { "type": "string" },
        "summary": { "type": "string" }
      },
      "required": ["companyName"]
    }
  }
  ```

  ### Create a standalone browser session

  ```json
  {
    "resource": "browser",
    "operation": "create",
    "browserOptions": {
      "timeout": 60,
      "proxyCountryCode": "us",
      "browserScreenWidth": 1920,
      "browserScreenHeight": 1080
    }
  }
  ```

  The response includes:

  - `liveUrl`: Watch or embed the live browser
  - `cdpUrl`: Connect Playwright, Puppeteer, Selenium, or another computer-use controller
  - `id`: Use this to get or stop the browser session

  ## Error Handling

  The node returns clear n8n errors for authentication failures, validation errors, missing resources, rate limits, and Browser Use API server errors. With n8n's "Continue On Fail" enabled, the error message is returned as item JSON.

  ## Documentation

  - [Browser Use API v3 Reference](https://docs.browser-use.com/cloud/api-reference)
  - [Browser Use API v2 Reference](https://docs.browser-use.com/cloud/api-v2-overview)
  - [Browser Use Dashboard](https://cloud.browser-use.com)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## License

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

ai_documentation_summary:
  {"purpose":"Automates web tasks using AI agents by controlling managed browsers through Browser Use Cloud's API, supporting both v2 task workflows and v3 session-based agent workflows.","capabilities":["Execute, Get, Get Many, Stop, Update tasks (v2 API)","Run and Wait, Create, Get, Get Many, Get Messages, Stop, Delete sessions (v3 API)","Create and manage standalone browser sessions","Poll task completion until stopped, timed out, or error","Reuse browser sessions for follow-up tasks","Extract structured data using JSON Schema","Route traffic through specific country proxies","Enable browser recording and return URLs","Switch between API v2 and v3 via UI dropdown"],"authentication":"API key required (X-Browser-Use-API-Key header)","commonUseCases":["Web research and data extraction","Form filling and multi-step workflows","Testing websites with AI agents","Running persistent browser sessions for follow-up tasks","Structured data extraction from websites"],"limitations":["Requires separate Browser Use Cloud account and API key","v2 and v3 APIs have different operation sets and options","v2 mode limited to task-based operations without session persistence","v3 requires managing session lifecycle (create, reuse, stop, delete)"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code","n8n-nodes-core.webhook"]}


node_type: @z-api/n8n-nodes-zapi.zapi
package_name: @z-api/n8n-nodes-zapi
display_name: Z-API WhatsApp
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: wagnerfusca-irrah
author_github_url: https://github.com/irrahgroup/nebraska-kearney.git
npm_package_name: @z-api/n8n-nodes-zapi
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:34.255Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Integration with Z-API (WhatsApp) organized by resources (messages, groups, chats, contacts, products, queue, instance, status, etc.).

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "messages",
      "options": [
        {
          "name": "API",
          "value": "api",
          "description": "Generic API call to any Z-API endpoint using this instance credentials"
        },
        {
          "name": "Chat",
          "value": "chats",
          "description": "Manage chat actions (archive, delete, list, pin, etc.) via Z-API"
        },
        {
          "name": "Contact",
          "value": "contacts",
          "description": "Look up contact information via Z-API"
        },
        {
          "name": "Group",
          "value": "groups",
          "description": "Manage groups and participants via Z-API"
        },
        {
          "name": "Instance",
          "value": "instance",
          "description": "Manage instance actions (status, disconnect, device, etc.) via Z-API"
        },
        {
          "name": "Message",
          "value": "messages",
          "description": "Send and manage messages via Z-API"
        },
        {
          "name": "Message Queue",
          "value": "queue",
          "description": "Manage messages in the Z-API send queue"
        },
        {
          "name": "Product",
          "value": "products",
          "description": "Manage WhatsApp Business catalog products via Z-API"
        },
        {
          "name": "Status",
          "value": "status",
          "description": "Post text and images to WhatsApp Status via Z-API"
        }
      ],
      "description": "Choose which Z-API resource you want to use",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "makeApiCall",
      "options": [
        {
          "name": "Make API Call",
          "value": "makeApiCall",
          "action": "Make an API call",
          "description": "Generic request to any Z-API endpoint (escape hatch)"
        }
      ],
      "description": "Generic API operation",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "api"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Delete Message",
          "value": "deleteMessage",
          "action": "Delete message"
        },
        {
          "name": "Read a Message",
          "value": "readMessage",
          "action": "Read a message"
        },
        {
          "name": "Reply a Message",
          "value": "replyMessage",
          "action": "Reply to a message"
        },
        {
          "name": "Send a Button List",
          "value": "sendButtonList",
          "action": "Send a button list"
        },
        {
          "name": "Send a Contact",
          "value": "sendContact",
          "action": "Send a contact"
        },
        {
          "name": "Send a Document",
          "value": "sendDocument",
          "action": "Send a document"
        },
        {
          "name": "Send a Link",
          "value": "sendLink",
          "action": "Send a link"
        },
        {
          "name": "Send a Location",
          "value": "sendLocation",
          "action": "Send a location"
        },
        {
          "name": "Send an Image",
          "value": "sendImage",
          "action": "Send an image"
        },
        {
          "name": "Send Audio",
          "value": "sendAudio",
          "action": "Send an audio"
        },
        {
          "name": "Send Option List",
          "value": "sendOptionList",
          "action": "Send an option list"
        },
        {
          "name": "Send PIX Button",
          "value": "sendPixButton",
          "action": "Send a PIX button"
        },
        {
          "name": "Send Sticker",
          "value": "sendSticker",
          "action": "Send a sticker"
        },
        {
          "name": "Send Text Message",
          "value": "sendText",
          "action": "Send text message"
        },
        {
          "name": "Send Video",
          "value": "sendVideo",
          "action": "Send a video"
        }
      ],
      "description": "Specific action for the Messages resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "messages"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createGroup",
      "options": [
        {
          "name": "Add Admin",
          "value": "addAdmin",
          "action": "Promote to admin"
        },
        {
          "name": "Add Participant",
          "value": "addParticipant",
          "action": "Add participant"
        },
        {
          "name": "Create Group",
          "value": "createGroup",
          "action": "Create group"
        },
        {
          "name": "Group Invitation Metadata",
          "value": "groupInvitationMetadata",
          "action": "Get invitation metadata"
        },
        {
          "name": "Group Metadata",
          "value": "groupMetadata",
          "action": "Get group metadata"
        },
        {
          "name": "Leave Group",
          "value": "leave-group",
          "action": "Leave group"
        },
        {
          "name": "Remove Admin",
          "value": "removeAdmin",
          "action": "Demote admin"
        },
        {
          "name": "Remove Participant",
          "value": "removeParticipant",
          "action": "Remove participant"
        },
        {
          "name": "Send Group Invite Link",
          "value": "sendGroupInvite",
          "action": "Send invite link"
        },
        {
          "name": "Update Group Description",
          "value": "updateGroupDescription",
          "action": "Update description"
        },
        {
          "name": "Update Group Name",
          "value": "updateGroupName",
          "action": "Update name"
        },
        {
          "name": "Update Group Photo",
          "value": "updateGroupPhoto",
          "action": "Update photo"
        },
        {
          "name": "Update Group Settings",
          "value": "updateGroupSettings",
          "action": "Update settings"
        }
      ],
      "description": "Specific action for the Groups resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "groups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "archiveChat",
      "options": [
        {
          "name": "Archive Chat",
          "value": "archiveChat",
          "action": "Archive chat"
        },
        {
          "name": "Delete Chat",
          "value": "deleteChat",
          "action": "Delete chat"
        },
        {
          "name": "List Chats",
          "value": "listChats",
          "action": "List chats"
        },
        {
          "name": "Pin Chat",
          "value": "pinChat",
          "action": "Pin chat"
        }
      ],
      "description": "Specific action for the Chats resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chats"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "phoneExists",
      "options": [
        {
          "name": "Check if Number Has WhatsApp",
          "value": "phoneExists",
          "action": "Check phone exists"
        },
        {
          "name": "Get Contact Metadata",
          "value": "getContactMetadata",
          "action": "Get contact metadata"
        },
        {
          "name": "Get Contact Profile Picture",
          "value": "getContactProfilePicture",
          "action": "Get profile picture"
        },
        {
          "name": "List Contacts",
          "value": "listContacts",
          "action": "List contacts"
        }
      ],
      "description": "Specific action for the Contacts resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upsertProduct",
      "options": [
        {
          "name": "Create/Update Product",
          "value": "upsertProduct",
          "action": "Upsert product"
        },
        {
          "name": "Delete Product",
          "value": "deleteProduct",
          "action": "Delete product"
        },
        {
          "name": "Get a Product",
          "value": "getProduct",
          "action": "Get product"
        },
        {
          "name": "Get Products by Phone",
          "value": "getProductByPhone",
          "action": "Get products by phone"
        },
        {
          "name": "List Products",
          "value": "listProducts",
          "action": "List products"
        }
      ],
      "description": "Specific action for the Products resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "products"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteQueueMessage",
      "options": [
        {
          "name": "Delete Queue Message",
          "value": "deleteQueueMessage",
          "action": "Delete queue message"
        },
        {
          "name": "Get Queue Messages",
          "value": "getQueueMessages",
          "action": "Get queue messages"
        }
      ],
      "description": "Specific action for the Message Queue resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "queue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postStatusImage",
      "options": [
        {
          "name": "Post a Status Image",
          "value": "postStatusImage",
          "action": "Post image to status"
        },
        {
          "name": "Post a Status Text",
          "value": "postStatusText",
          "action": "Post text to status"
        }
      ],
      "description": "Specific action for the Status resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "status"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDeviceData",
      "options": [
        {
          "name": "Disconnect Phone",
          "value": "disconnectInstance",
          "action": "Disconnect phone"
        },
        {
          "name": "Get Device Data",
          "value": "getDeviceData",
          "action": "Get device data"
        },
        {
          "name": "Get QRCode (Bytes)",
          "value": "getQRCodeBytes",
          "action": "Get qr code bytes"
        },
        {
          "name": "Get QRCode Image",
          "value": "getQRCodeImage",
          "action": "Get qr code image"
        },
        {
          "name": "Get QRCode Phone",
          "value": "getPhoneCode",
          "action": "Get phone code"
        }
      ],
      "description": "Specific action for the Instance resource",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "instance"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Make API Call",
      "value": "makeApiCall",
      "action": "Make an API call",
      "description": "Generic request to any Z-API endpoint (escape hatch)",
      "resource": "api"
    },
    {
      "name": "Delete Message",
      "value": "deleteMessage",
      "action": "Delete message",
      "resource": "messages"
    },
    {
      "name": "Read a Message",
      "value": "readMessage",
      "action": "Read a message",
      "resource": "messages"
    },
    {
      "name": "Reply a Message",
      "value": "replyMessage",
      "action": "Reply to a message",
      "resource": "messages"
    },
    {
      "name": "Send a Button List",
      "value": "sendButtonList",
      "action": "Send a button list",
      "resource": "messages"
    },
    {
      "name": "Send a Contact",
      "value": "sendContact",
      "action": "Send a contact",
      "resource": "messages"
    },
    {
      "name": "Send a Document",
      "value": "sendDocument",
      "action": "Send a document",
      "resource": "messages"
    },
    {
      "name": "Send a Link",
      "value": "sendLink",
      "action": "Send a link",
      "resource": "messages"
    },
    {
      "name": "Send a Location",
      "value": "sendLocation",
      "action": "Send a location",
      "resource": "messages"
    },
    {
      "name": "Send an Image",
      "value": "sendImage",
      "action": "Send an image",
      "resource": "messages"
    },
    {
      "name": "Send Audio",
      "value": "sendAudio",
      "action": "Send an audio",
      "resource": "messages"
    },
    {
      "name": "Send Option List",
      "value": "sendOptionList",
      "action": "Send an option list",
      "resource": "messages"
    },
    {
      "name": "Send PIX Button",
      "value": "sendPixButton",
      "action": "Send a PIX button",
      "resource": "messages"
    },
    {
      "name": "Send Sticker",
      "value": "sendSticker",
      "action": "Send a sticker",
      "resource": "messages"
    },
    {
      "name": "Send Text Message",
      "value": "sendText",
      "action": "Send text message",
      "resource": "messages"
    },
    {
      "name": "Send Video",
      "value": "sendVideo",
      "action": "Send a video",
      "resource": "messages"
    },
    {
      "name": "Add Admin",
      "value": "addAdmin",
      "action": "Promote to admin",
      "resource": "groups"
    },
    {
      "name": "Add Participant",
      "value": "addParticipant",
      "action": "Add participant",
      "resource": "groups"
    },
    {
      "name": "Create Group",
      "value": "createGroup",
      "action": "Create group",
      "resource": "groups"
    },
    {
      "name": "Group Invitation Metadata",
      "value": "groupInvitationMetadata",
      "action": "Get invitation metadata",
      "resource": "groups"
    },
    {
      "name": "Group Metadata",
      "value": "groupMetadata",
      "action": "Get group metadata",
      "resource": "groups"
    },
    {
      "name": "Leave Group",
      "value": "leave-group",
      "action": "Leave group",
      "resource": "groups"
    },
    {
      "name": "Remove Admin",
      "value": "removeAdmin",
      "action": "Demote admin",
      "resource": "groups"
    },
    {
      "name": "Remove Participant",
      "value": "removeParticipant",
      "action": "Remove participant",
      "resource": "groups"
    },
    {
      "name": "Send Group Invite Link",
      "value": "sendGroupInvite",
      "action": "Send invite link",
      "resource": "groups"
    },
    {
      "name": "Update Group Description",
      "value": "updateGroupDescription",
      "action": "Update description",
      "resource": "groups"
    },
    {
      "name": "Update Group Name",
      "value": "updateGroupName",
      "action": "Update name",
      "resource": "groups"
    },
    {
      "name": "Update Group Photo",
      "value": "updateGroupPhoto",
      "action": "Update photo",
      "resource": "groups"
    },
    {
      "name": "Update Group Settings",
      "value": "updateGroupSettings",
      "action": "Update settings",
      "resource": "groups"
    },
    {
      "name": "Archive Chat",
      "value": "archiveChat",
      "action": "Archive chat",
      "resource": "chats"
    },
    {
      "name": "Delete Chat",
      "value": "deleteChat",
      "action": "Delete chat",
      "resource": "chats"
    },
    {
      "name": "List Chats",
      "value": "listChats",
      "action": "List chats",
      "resource": "chats"
    },
    {
      "name": "Pin Chat",
      "value": "pinChat",
      "action": "Pin chat",
      "resource": "chats"
    },
    {
      "name": "Check if Number Has WhatsApp",
      "value": "phoneExists",
      "action": "Check phone exists",
      "resource": "contacts"
    },
    {
      "name": "Get Contact Metadata",
      "value": "getContactMetadata",
      "action": "Get contact metadata",
      "resource": "contacts"
    },
    {
      "name": "Get Contact Profile Picture",
      "value": "getContactProfilePicture",
      "action": "Get profile picture",
      "resource": "contacts"
    },
    {
      "name": "List Contacts",
      "value": "listContacts",
      "action": "List contacts",
      "resource": "contacts"
    },
    {
      "name": "Create/Update Product",
      "value": "upsertProduct",
      "action": "Upsert product",
      "resource": "products"
    },
    {
      "name": "Delete Product",
      "value": "deleteProduct",
      "action": "Delete product",
      "resource": "products"
    },
    {
      "name": "Get a Product",
      "value": "getProduct",
      "action": "Get product",
      "resource": "products"
    },
    {
      "name": "Get Products by Phone",
      "value": "getProductByPhone",
      "action": "Get products by phone",
      "resource": "products"
    },
    {
      "name": "List Products",
      "value": "listProducts",
      "action": "List products",
      "resource": "products"
    },
    {
      "name": "Delete Queue Message",
      "value": "deleteQueueMessage",
      "action": "Delete queue message",
      "resource": "queue"
    },
    {
      "name": "Get Queue Messages",
      "value": "getQueueMessages",
      "action": "Get queue messages",
      "resource": "queue"
    },
    {
      "name": "Post a Status Image",
      "value": "postStatusImage",
      "action": "Post image to status",
      "resource": "status"
    },
    {
      "name": "Post a Status Text",
      "value": "postStatusText",
      "action": "Post text to status",
      "resource": "status"
    },
    {
      "name": "Disconnect Phone",
      "value": "disconnectInstance",
      "action": "Disconnect phone",
      "resource": "instance"
    },
    {
      "name": "Get Device Data",
      "value": "getDeviceData",
      "action": "Get device data",
      "resource": "instance"
    },
    {
      "name": "Get QRCode (Bytes)",
      "value": "getQRCodeBytes",
      "action": "Get qr code bytes",
      "resource": "instance"
    },
    {
      "name": "Get QRCode Image",
      "value": "getQRCodeImage",
      "action": "Get qr code image",
      "resource": "instance"
    },
    {
      "name": "Get QRCode Phone",
      "value": "getPhoneCode",
      "action": "Get phone code",
      "resource": "instance"
    }
  ]

npm_readme:
  # n8n-nodes-zapi

  Community node for **n8n** that integrates with **Z-API** (WhatsApp messaging).

  This package adds Z-API nodes to n8n, enabling WhatsApp messaging automation and related features.

  ---

  ## n8n Cloud note (Verified Community Node)

  To be installable in **n8n Cloud**, this package must be approved as a **Verified Community Node**.  
  Non-verified community nodes can only be installed in **self-hosted** n8n.

  ---

  ## What this node does

  With this node you can:

  - Send WhatsApp messages (text, media, lists/buttons, location, PIX button)
  - Manage chats (pin, archive, delete, list)
  - Manage contacts (metadata, profile picture, list, phone existence check)
  - Manage groups (members/admins, settings, metadata, invite links)
  - Manage instance utilities (disconnect, QR code, device data, phone code)
  - Manage message queue (list and delete)
  - Manage products linked to a phone (upsert, delete, get, list)
  - Post status updates (text/image)
  - Make direct API calls (advanced)

  ---

  ## Requirements

  - n8n (self-hosted) or n8n Cloud (Verified required to install)
  - A Z-API account with an active instance
  - Z-API credentials:
    - **Instance ID**
    - **Instance Token**
    - **Client Token** (Account Security Token)

  ---

  ## Installation

  ### Self-hosted n8n
  Install as a community node and restart n8n.

  ### n8n Cloud
  Only **Verified Community Nodes** are installable in n8n Cloud.  
  After approval, the package appears in the Cloud UI under Community Nodes.

  ---

  ## Credentials (Z-API API)

  This package provides the credential type:

  **Z-API API** (`zapiApi`)

  ### Credential fields

  #### Instance ID
  Your Z-API instance identifier.

  #### Instance Token
  Token for the selected instance.

  #### Client Token
  Z-API **Account Security Token**. This is sent as an HTTP header:

  - `Client-Token: <clientToken>`

  ### Credential test
  The credential test checks the instance status endpoint:

  - `GET https://api.z-api.io/instances/{instanceId}/token/{instanceToken}/status`

  (plus the `Client-Token` header)

  ---

  ## Resources & Operations

  Below is the full list of operations in this package (grouped by resource).

  ### 🧩 Resource: api
  - Make an API call

  ### 💬 Resource: chat
  - Archive chat
  - Delete chat
  - List chats
  - Pin chat

  ### 📇 Resource: contacts
  - Check phone exists
  - Get contact metadata
  - Get profile picture
  - List contacts

  ### 👥 Resource: groups
  - Create group
  - Add participant
  - Remove participant
  - Promote to admin
  - Demote admin
  - Leave group
  - Update description
  - Update photo
  - Update name
  - Update settings
  - Get invitation metadata
  - Get group metadata
  - Send invite link

  ### 📱 Resource: instance
  - Disconnect phone
  - Get device data
  - Get QRCode bytes
  - Get QRCode image
  - Get phone code

  ### ✉️ Resource: messages
  - Send text message
  - Delete message
  - Read a message
  - Reply to a message
  - Send an audio
  - Send a button list
  - Send a contact
  - Send a document
  - Send a link
  - Send a location
  - Send an image
  - Send an option list
  - Send a PIX button
  - Send a sticker
  - Send a video

  ### ⏳ Resource: messageQueue
  - Delete queue message
  - Get queue messages

  ### 🛒 Resource: products
  - Upsert product
  - Delete product
  - Get product
  - Get products by phone
  - List products

  ### 🟢 Resource: status
  - Post image to status
  - Post text to status

  ---

  ## Data formats & validation rules

  ### Phone numbers
  - Must be **digits only** and include **country code + area code + number**
  - Example (Brazil): `5511999999999`

  ### Delay (delayMessage)
  - Z-API recommends values between **1 and 15 seconds**
  - If set to `0`, API default behavior is used (depending on operation)

  ### Group IDs
  Some operations require a **groupId** (example: `120363019502650977-group`).  
  You can usually obtain it via group metadata endpoints or webhook payloads.

  ### Media inputs (URL or Base64)
  Many operations accept media as:

  - **URL**: `https://...`
  - **Data URI**: `data:<mime>;base64,<data>`
  - **Raw Base64** (no prefix): the node may normalize it into a Data URI automatically

  Examples:
  - URL: `https://example.com/image.png`
  - Data URI: `data:image/png;base64,iVBORw0K...`
  - Raw Base64: `iVBORw0KGgoAAAANSUhEUg...`

  For documents, providing a filename with extension (example: `invoice.pdf`) is recommended.

  ---

  ## Quick usage examples

  ### 1) Send a text message
  Resource: Messages → Send text message

  - Phone Number: `5511999999999`
  - Message: `Hello from n8n!`
  - Delay (seconds): `2`

  ### 2) Send an image (URL or Base64)
  Resource: Messages → Send an image

  - Phone Number: `5511999999999`
  - Image (URL or Base64):
    - `https://example.com/image.png`
    - or `data:image/png;base64,iVBORw0K...`

  ### 3) Send a document
  Resource: Messages → Send a document

  - Phone Number: `5511999999999`
  - Document: `https://example.com/invoice.pdf` (or Base64/Data URI)
  - File Name: `invoice.pdf` (recommended)
  - Caption: `Invoice attached`

  ### 4) Reply to a message
  Resource: Messages → Reply to a message

  - Phone Number: `5511999999999` (or group ID)
  - Message ID: `<messageId from webhook or previous send response>`
  - Message: `Got it!`

  ### 5) Create a group
  Resource: Groups → Create group

  - Group Name: `My Group`
  - Participants: add at least one phone
  - Auto invite: enable if you want to invite participants who cannot be added directly

  ### 6) Get QR code image
  Resource: Instance → Get QRCode image

  Use this to display a scannable QR when connecting an instance.

  ---

  ## Troubleshooting

  ### ESLint errors (Unexpected any)
  For Verified Community Nodes, avoid `any`:
  - use `unknown` and type guards
  - define small interfaces for API responses you depend on
  - avoid `(value as any)` whenever possible

  ### 401/403 errors
  - Confirm **Client Token** is the Z-API **Account Security Token**
  - Confirm Instance ID and Instance Token belong to the same instance
  - Confirm the instance is active and allowed to call the endpoint

  ### “200 OK but no message delivered”
  - Verify the instance is connected/online
  - Verify phone format (digits only)
  - For media: ensure URL is public/reachable or Base64 is valid
  - Try a delay of 1–3 seconds

  ### Node updated but UI doesn’t show new operations
  - Run `npm run build`
  - Restart n8n
  - Clear browser cache / hard refresh

  ---

  ## Development

  ```bash
  npm install
  npm run dev
  npm run lint
  npm run build
  ```

  ## Publishing notes (n8n Cloud / Verified)

  To be installable in **n8n Cloud**, this package must be approved as a **Verified Community Node**. In practice, that means it must:

  - Follow the package naming convention: `n8n-nodes-*` or `@scope/n8n-nodes-*`
  - Include the keyword: `n8n-community-node-package`
  - Define the `n8n` section in `package.json`, listing the built node and credential entrypoints
  - Avoid unsafe runtime behavior (for example: filesystem access, environment secrets, etc.)
  - Pass the community package scanner before submission

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n node enables automation of WhatsApp messaging and management features through the Z-API platform, supporting text, media, and interactive message types.","capabilities":["Send text, media, buttons, location, PIX, and sticker messages","Reply to messages and manage message queues","Manage chats (archive, delete, pin, list)","Manage contacts (metadata, profile picture, existence check)","Manage groups (create, invite, admin roles, settings)","Manage instance utilities (QR code, disconnect, device data)","Manage products linked to a phone","Post updates to WhatsApp status","Make direct API calls for advanced operations"],"authentication":"API key required (Instance ID, Instance Token, and Client Token/Account Security Token)","commonUseCases":["Automated customer notifications and marketing campaigns","Customer support chat automation","Group management and coordination","Product catalog management via WhatsApp","Status updates and announcements"],"limitations":["Requires Z-API account with an active instance","Non-verified nodes cannot be installed in n8n Cloud","Phone numbers must include country code and be digits only","Media inputs require URL, Base64, or Data URI formats","Some operations require specific Group IDs obtained via other endpoints"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Function Item"]}


node_type: @clod_io/n8n-nodes-clod.clod
package_name: @clod_io/n8n-nodes-clod
display_name: CLōD
description: Interact with CLōD API (OpenAI-compatible)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: acct_lod
author_github_url: https://github.com/lod-tech/n8n.git
npm_package_name: @clod_io/n8n-nodes-clod
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.256Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-clod

  This is an n8n community node for the [CLōD](https://clod.io) API, an OpenAI-compatible LLM service.

  ## Installation

  In your n8n instance, go to **Settings > Community Nodes** and install:

  ```
  @clod_io/n8n-nodes-clod
  ```

  Or install via npm:

  ```bash
  npm install @clod_io/n8n-nodes-clod
  ```

  ## Credentials

  1. Go to [https://app.clod.io](https://app.clod.io/?utm_source=n8n&utm_medium=community-node&utm_campaign=n8n-node) and sign in
  2. Navigate to your account settings to get your API key
  3. In n8n, create new credentials of type **CLōD API** and enter your API key

  ## Usage

  The CLōD node supports chat completions with the following parameters:

  - **Model** (required): The model name to use (e.g., "Llama 3.1 8B")
  - **Messages** (required): JSON array of message objects with `role` and `content`
  - **Options**:
    - Temperature (0-2)
    - Max Tokens
    - Stream

  ### Example Messages Format

  ```json
  [
    { "role": "system", "content": "You are a helpful assistant." },
    { "role": "user", "content": "Hello!" }
  ]
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the CLōD API, an OpenAI-compatible LLM service, to perform chat completions.","capabilities":["Chat completions","Model selection (e.g., Llama 3.1 8B)","Temperature control (0-2)","Max tokens setting","Streaming support","JSON array message formatting with role and content"],"authentication":"API key required","commonUseCases":["Integrating CLōD LLM into n8n workflows","Chatbot implementations using OpenAI-compatible models","Text generation and completion tasks"],"limitations":[],"relatedNodes":["OpenAI node","Anthropic node","Generic LLM node"]}


node_type: n8n-nodes-pagbank-connect.pagBankTrigger
package_name: n8n-nodes-pagbank-connect
display_name: PagBank Connect Trigger
description: Trigger to receive PagBank Connect notifications
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: r-martins
author_github_url: https://github.com/r-martins/PagBank-n8n.git
npm_package_name: n8n-nodes-pagbank-connect
npm_version: 2.1.5
community_fetched_at: 2026-07-14T14:40:34.257Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-pagbank-connect

  n8n integration with PagBank Connect for Brazilian payment processing.


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

  ## Features

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

  ## Installation

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

  ## Configuration

  ### HTTP headers (Platform-Version)

  API calls send `Platform-Version` (host n8n) and `Module-Version` (this package). The server n8n version is detected when possible via `n8n/package.json` in the running process. You can force a value:

  - **`PAGBANK_PLATFORM_VERSION`** — always wins (e.g. Docker / systemd `Environment=PAGBANK_PLATFORM_VERSION=1.114.0`)
  - **`N8N_VERSION`** or **`N8N_RELEASE_VERSION`** — used if set
  - Otherwise falls back to **`unknown`** (e.g. running tests outside n8n)

  ### 1. Get Credentials

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

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

  ### 2. Configure in n8n

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

  ## Available Nodes

  ### PagBank (Main)
  - **Create Payment Link** - Generates checkout links for customers to pay on PagBank
  - **Create PIX Order** - Creates PIX payments (optional **payment split** on the QR code)
  - **Create Credit Card Charge** - Processes a payment with the provided credit card data (optional **payment split** on the charge)
  - **Check order status** - Queries the status of an ORDER with PagBank (must have been generated with this connect key)
  - **Get Split Details** - Reads a split by `SPLI_…` id or SPLIT `href` from the order. Sandbox: public API on `internal.sandbox.api.pagseguro.com` when using a sandbox Connect key or pasting that URL; production: authenticated Connect API.
  - **Release Split Custody** - Releases held funds for one or more receiver **account ids** before the scheduled custody date (Connect API).
  - **Validate Connect Key** - Validates the Connect Key configured in your credentials

  ### Payment split (marketplace / multi-seller)
  Use **Split Method** and **Split Receivers** on **Create PIX Order** or **Create Credit Card Charge** to divide the payment between accounts (PagBank `ACCO_…` ids). **FIXED** requires amounts in **cents** that sum to the order total; **PERCENTAGE** requires integer percents summing to **100**. You can set custody, chargeback allocation, and (for cards) **liable**. After payment, the order `links` may include `rel: SPLIT` — use **Get Split Details** to inspect the split and **Release Split Custody** when eligible. See [PagBank split documentation](https://developer.pagbank.com.br/reference/divisao-de-pagamento) and [PagBank Connect n8n docs]().

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

  ## Data Format

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

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

  Required for most operations, except payment link creation.

  ## Environments

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

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

  ## Webhooks

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

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

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

  ## Support

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

  ## License

  MIT License - see LICENSE file for details.

  ## Contributing

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


  ## Roadmap
  - More installment options
  - Recurring sales

  Subject to change based on community requests.

ai_documentation_summary:
  {"purpose":"This n8n node integrates with PagBank Connect to handle Brazilian payment processing, including PIX, credit/debit cards, and payment links, with a dedicated trigger node for receiving real-time payment notifications.","capabilities":["Receive PIX instant payment notifications via QR Code","Process credit and debit card payments","Generate custom payment links for checkout","Split payments between multiple PagBank accounts (FIXED or PERCENTAGE)","Manage split custody release","Query order status","Validate Connect Keys","Filter webhook notifications by status, method, or denial reason","Support for sandbox and production environments"],"authentication":"API Key required (PagBank Connect Key)","commonUseCases":["Automated receipt of PIX payments from customers","Multi-seller payment splitting for marketplace integrations","Recurring subscription management (planned feature)","Automated order status tracking","Webhook-based payment event handling"],"limitations":["Recurring subscriptions feature is marked as 'coming soon'","Monetary values must be converted to cents (e.g., R$ 10.00 = 1000)","CPF/CNPJ validation required for most operations","Requires external webhook URL accessibility without blocking"],"relatedNodes":["PagBank Create Payment Link","PagBank Create PIX Order","PagBank Create Credit Card Charge","PagBank Check Order Status","PagBank Get Split Details"]}


node_type: n8n-nodes-fullenrich.fullEnrichTrigger
package_name: n8n-nodes-fullenrich
display_name: FullEnrich Trigger
description: Receives the enrichment result from FullEnrich
category: Community
development_style: declarative
version: 2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fullenrich
author_github_url: https://github.com/FullEnrich/
npm_package_name: n8n-nodes-fullenrich
npm_version: 0.2.1
community_fetched_at: 2026-07-14T14:40:34.258Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-fullenrich

  This is an n8n community node that lets you use FullEnrich in your n8n workflows.

  **FullEnrich** is a contact enrichment service that takes minimal input (such as first name, last name, company domain, or Professional Network URL) and returns enriched contact data like emails, phone numbers, and company information.
  This node enables you to **start asynchronous enrichment requests** and **receive enriched results via webhook**, all within n8n.


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

  Example:

  ```bash
  npm install n8n-nodes-fullenrich
  ```

  Then restart your n8n instance.

  ---

  ## Operations

  This package provides two nodes, both available in version `1` (legacy) and version `2` (current, default):

  ### FullEnrich — Start Enrichment
  - Accepts one or multiple contacts from previous nodes (e.g., Sheets, forms, or manual input).
  - Supports additional custom fields per contact (e.g. `row_id`, `user_id`).
  - Sends each contact to FullEnrich's API enrichment endpoint.
  - Available as an AI Agent tool (`usableAsTool: true`) for use in LangChain workflows.

  ### FullEnrich Trigger — Receive Enrichment Result (Webhook)
  - Acts as a webhook endpoint.
  - Listens for enrichment results returned via `webhook_url` from FullEnrich.
  - Outputs enriched contact data in a format usable by other nodes like Google Sheets, Airtable, or CRMs.
  - In version `1`, the V2 API response is automatically translated to the legacy V1 shape for backward compatibility with existing workflows.

  ---

  ## Credentials

  The node uses **Bearer token** authentication via your FullEnrich API key.

  - Go to **n8n → Credentials → New**.
  - Choose **FullEnrich API**.
  - Paste your API key (generated from your FullEnrich dashboard).

  The credential automatically sets the `Authorization: Bearer <apiKey>` header on every request.

  ---

  ## Compatibility

  - Minimum **n8n version**: `1.22.0`
  - Tested on: `1.22.0`, `1.25.1`, `1.28.0`
  - Requires the FullEnrich API V2 (used by both node versions).

  ---

  ## Usage

  - The **FullEnrich** node supports contacts from:
    - Previous nodes (e.g., Google Sheets, Airtable, Manual Trigger).
    - Manual input from the UI form (via structured fields).
  - You can pass **custom fields** (e.g. `user_id`) per contact to track each request in your workflow — values are forwarded under the `custom` object and echoed back in the webhook payload.
  - The **FullEnrich Trigger** node acts as a webhook and must be connected to the URL you provide to FullEnrich (auto-generated by n8n in most cases).

  **Example Use Case:**
  1. Load leads from a Google Sheet.
  2. Send them to **FullEnrich** (Start Enrichment).
  3. Receive enriched data via **FullEnrich Trigger**.
  4. Update the same Google Sheet.

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [FullEnrich API V2 documentation](https://docs.fullenrich.com/api/v2/general/introduction)

  ---

  ## Version history

  ### 0.2.0
  - Migrated to the FullEnrich API V2 under the hood.
  - Added node version `2` (default) for both the action node and the webhook trigger.
  - Version `1` still works: the V2 response is translated back to the legacy V1 payload shape for backward compatibility with existing workflows.
  - Added `usableAsTool: true` so the action node can be used in n8n AI Agent workflows.
  - Switched the build, lint, and release pipeline to `@n8n/node-cli` with eslint 9.

  ### 0.1.x
  - Initial public releases on the FullEnrich API V1.

ai_documentation_summary:
  {"purpose":"The FullEnrich Trigger node acts as a webhook endpoint that receives asynchronous contact enrichment results from the FullEnrich service and outputs the enriched data for use in other n8n nodes.","capabilities":["Receives enrichment results via webhook","Outputs enriched contact data (emails, phone numbers, company info)","Supports output in legacy V1 format for backward compatibility","Handles custom fields (e.g., user_id) passed in the request","Works with FullEnrich API V2"],"authentication":"API key required (Bearer token via FullEnrich API credentials)","commonUseCases":["Automating lead enrichment workflows","Updating CRM or spreadsheets with enriched contact data","Integrating with n8n AI Agent workflows (via connected FullEnrich node)"],"limitations":["Only receives results; cannot initiate enrichment requests directly","Requires a connected FullEnrich 'Start Enrichment' node to receive data","Requires FullEnrich API V2"],"relatedNodes":["FullEnrich (Start Enrichment)","Webhook Trigger","Google Sheets","Airtable","CRM nodes"]}


node_type: n8n-nodes-resend.resendTrigger
package_name: n8n-nodes-resend
display_name: Resend Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: zenorocha
author_github_url: https://github.com/resend/
npm_package_name: n8n-nodes-resend
npm_version: 2.5.3
community_fetched_at: 2026-07-14T14:40:34.259Z
description:
  Triggers workflows when Resend email events occur, such as email sent, delivered, opened, clicked, bounced, or complained. Includes secure webhook signature verification.


node_type: @apify/n8n-nodes-apify.apifyTrigger
package_name: @apify/n8n-nodes-apify
display_name: Apify Trigger
description: Triggers workflow on Apify Actor or task run events
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: mtrunkat
author_github_url: https://github.com/apify/n8n-nodes-apify.git
npm_package_name: @apify/n8n-nodes-apify
npm_version: 0.6.10
community_fetched_at: 2026-07-14T14:40:34.260Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "actor",
      "options": [
        {
          "name": "Actor",
          "value": "actor"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "description": "Whether to trigger when an Actor or a task run finishes",
      "displayName": "Resource to Watch",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n Nodes - Apify integration

  This is an n8n community node that integrates [Apify](https://apify.com) with your n8n workflows, so you can run Apify Actors, extract structured data from websites, and automate complex web scraping tasks.

  [Apify](https://apify.com) is a platform for developers to build, deploy, and publish web automation tools, while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) tool for AI workflow automation that allows you to connect various services.

  ## Table of contents

  - [Installation on self hosted instance](#installation-self-hosted)
  - [Installation on n8n cloud](#installation-n8n-cloud)
  - [Installation for development and contributing](#installation-development-and-contributing)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [Release](#releasing-a-new-version)
  - [Version History](#version-history)
  - [Troubleshooting](#troubleshooting)

  ## Installation (self-hosted)

  To install the Apify community node directly from the n8n Editor UI:

  1. Open your n8n instance.
  2. Go to **Settings > Community Nodes**
  3. Select **Install**.
  4. Enter the npm package name: `@apify/n8n-nodes-apify` to install the latest version. To install a specific version (e.g 0.6.4) enter `@apify/n8n-nodes-apify@0.6.4`. All versions are available [here](https://www.npmjs.com/package/@apify/n8n-nodes-apify?activeTab=versions)
  5. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes and select **Install**
  6. The node is now available to use in your workflows.

  ## Installation (n8n Cloud)

  If you're using n8n Cloud, installing community nodes is even simpler:

  1. Go to the **Canvas** and open the **nodes panel**.
  2. Search for **Apify** in the community node registry.
  3. Click **Install node** to add the Apify node to your instance.

  > On n8n cloud users can choose not to show verified community nodes. Instance owners can toggle this in the Cloud Admin Panel. To install the Apify node, make sure the installation of verified community nodes is enabled.

  ## Installation (development and contributing)

  ### ⚙️ Prerequisites

  - **Node.js**: 22.x or higher (required)
  - **npm**: 10.8.2 or higher (required)

  Verify your versions:

  ```bash
  node --version  # Should be v22.x.x or higher
  npm --version   # Should be 10.8.2 or higher
  ```

  If you use `nvm`, the project includes a `.nvmrc` file. Simply run:

  ```bash
  nvm use
  ```

  ### 1. Clone and Install Dependencies

  Clone the repository and install dependencies:

  ```bash
  git clone https://github.com/apify/n8n-nodes-apify.git
  cd n8n-nodes-apify
  npm install
  ```

  ### 2. Build the Node Package

  ```bash
  npm run build
  ```

  ### 3. Start Development Server

  Start the n8n development server with your node linked:

  ```bash
  npm run dev
  ```

  ---

  ### 🔁 Making changes

  If you make any changes to your custom node locally, remember to rebuild and restart:

  ```bash
  npm run build
  ```

  ---

  ## Self-hosted n8n: Public webhook URL for triggers

  This configuration is required for our service's trigger functionality to work correctly.

  By default, when running locally n8n generates webhook URLs using `localhost`, which external services cannot reach. To fix this:

  1. **Set your webhook URL**  
     In the same shell or Docker environment where n8n runs, export the `WEBHOOK_URL` to a publicly-accessible address. For example:

  ```bash
  export WEBHOOK_URL="https://your-tunnel.local"
  ```

  2. **Restart n8n**

  ```bash
  npm run dev
  ```

  ## Operations

  This node supports a wide range of Apify operations, organized by resource type:

  ### Actors

  - **Run Actor**: Execute an Actor with optional input parameters
    - Default behavior: Uses predefined input values
    - Custom input: Provide JSON object to override any or all default parameters
    - Configurable timeout and memory limits
    - Build version selection
  - **Run Actor and get dataset items**: Execute an Actor, wait for it to finish, and return the dataset items
  - **Scrape Single URL**: Quick scraping of a single URL
  - **Get Last Run**: Retrieve information about the most recent Actor run

  ### Actor tasks

  - **Run Task**: Execute a predefined Actor task
    - Supports custom input JSON
    - Configurable timeout
    - Task-specific settings
  - **Run task and get dataset items**: Execute a task, wait for it to finish, and return the dataset items

  ### Actor runs

  - **Get User Runs List**: List all runs for a user
    - Pagination support
    - Sorting options
    - Status filtering
  - **Get run**: Retrieve detailed information about a specific run

  ### Datasets

  - **Get Items**: Fetch items from a dataset

  ### Key-Value Stores

  - **Get Key-Value Store Record**: Retrieve a specific record by key

  ### Triggers

  Automatically start an n8n workflow whenever an Actor or task finishes execution

  - Can be configured to trigger on success, failure, abort, timeout or any combination of these states
  - Includes run metadata in the output
  - Available triggers:
    - **Actor Run Finished**: Start a workflow when an Actor run completes
    - **Task Run Finished**: Start a workflow when a task run completes

  ### AI Tools

  All Apify node operations can be combined with n8n's AI tools to create powerful workflows.
  For example, you can scrape data from a website using an Actor and then use an AI model to analyze or summarize the extracted information.

  ## Credentials

  The node supports two authentication methods:

  1. **API key authentication**
     - Configure your Apify API key in the n8n credentials section under `apifyApi`

  2. **OAuth2 authentication** (available only in n8n cloud)
     - Configure OAuth2 credentials in the n8n credentials section under `apifyOAuth2Api`

  ![auth](./docs/auth.png)

  ## Compatibility

  - **n8n**: Version 1.57.0 and higher
  - **Node.js**: 22.x or higher
  - **npm**: 10.8.2 or higher

  ## Usage

  1. **Create an Actor**: Set up a new Actor on [Apify](https://apify.com).
  2. **Set up a workflow**: Create a new workflow in n8n.
  3. **Add the Apify node**: Insert the Apify node into your workflow.
  4. **Configure credentials**: Enter your Apify API key and Actor ID.
  5. **Select an operation**: Choose the desired operation for the node.
  6. **Execute the workflow**: Run the workflow to execute the Apify operation.

  ![workflow](./docs/workflow.png)

  ## Resources

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

  # Releasing a New Version

  This project uses a GitHub Actions workflow to automate the release process, including publishing to npm. Here's how to trigger a new release.

  **Prerequisites (for all methods):**

  - Ensure your target branch on GitHub is up-to-date with all changes you want to include in the release.
  - Decide on the new version number, following semantic versioning (e.g., `vX.Y.Z`).
  - Prepare your release notes detailing the changes.
  - If you're using CLI to release, make sure you have the [GitHub CLI (`gh`)](https://cli.github.com/) installed and authenticated (`gh auth login`).

  ---

  ## Method 1: Using the GitHub Web UI (Recommended for ease of use)

  1.  **Navigate to GitHub Releases:**
      - Go to your repository's "Releases" tab

  2.  **Draft a New Release:**
      - Click the **"Draft a new release"** button.

  3.  **Create or Choose a Tag:**
      - In the "Choose a tag" dropdown:
        - **Type your new tag name** (e.g., `v1.2.3`).
        - If the tag doesn't exist, GitHub will prompt you with an option like **"Create new tag: v1.2.3 on publish."** Click this.
        - Ensure the **target branch** selected for creating the new tag is correct. This tag will point to the latest commit on this target branch.

  4.  **Set Release Title and Notes:**
      - Set the "Release title" (e.g., `vX.Y.Z` or a more descriptive title).
      - For the release notes in the description field, you have a few options:
        - **Write your prepared release notes.**
        - **Click the "Generate release notes" button:** GitHub will attempt to automatically create release notes based on merged pull requests since the last release. You can then review and edit these auto-generated notes.

  5.  **Publish the Release:**
      - Click the **"Publish release"** button.

        _Upon publishing, GitHub creates the tag from your specified branch and then creates the release. This "published" release event triggers the automated workflow._

  ---

  ## Method 2: Fully CLI-Driven Release

  This method uses the GitHub CLI (`gh`) for all steps, including tag creation.

  1.  **Ensure your local target branch is synced and changes are pushed:**
      `bash
  git checkout master
  git pull origin master
  `

  2.  **Create the Release (which also creates and pushes the tag):**
      Replace `vX.Y.Z` with your desired tag/version. The command will create this tag from the latest commit of your specified `--target` branch (defaults to repository's default branch, if `--target` is omitted and the branch is up to date).

      ```bash
      gh release create vX.Y.Z \
          --target master \
          --title "vX.Y.Z" \
          --notes "Your detailed release notes here.
          - Feature X
          - Bugfix Y"

      # Or, to use notes from a file:
      gh release create vX.Y.Z \
          --target master \
          --title "vX.Y.Z" \
          --notes-file ./RELEASE_NOTES.md

      # Or, to generate notes from pull requests (commits must follow conventional commit format for best results):
      gh release create vX.Y.Z \
          --target master \
          --title "vX.Y.Z"
          --generate-notes
      ```

      - `vX.Y.Z`: The tag and release name.
      - `--target <branch>`: Specifies which branch the tag should be created from (e.g., `master`). If the tag `vX.Y.Z` doesn't exist, `gh` will create it based on the HEAD of this target branch and push it.
      - `--title "<title>"`: The title for your release.
      - `--notes "<notes>"` or `--notes-file <filepath>` or `--generate-notes`: Your release notes.

        _This command will create the tag, push it to GitHub, and then publish the release. This "published" release event triggers the automated workflow._

  ---

  ## Post-Release: Automated Workflow & Verification (Common to all methods)

  Regardless of how you create and publish the GitHub Release:

  1.  **Automated Workflow Execution:**
      - The "Release & Publish" GitHub Actions workflow will automatically trigger.
      - It will perform:
        1.  Code checkout.
        2.  Version extraction (`X.Y.Z`) from the release tag.
        3.  Build and test processes.
        4.  Update `package.json` and `package-lock.json` to version `X.Y.Z`.
        5.  Commit these version changes back to the branch the release was targeted from with a message like `chore(release): set version to X.Y.Z [skip ci]`.
        6.  Publish the package `@apify/n8n-nodes-apify@X.Y.Z` to npm.

  2.  **Verify the Package on npm:**
      After the workflow successfully completes (check the "Actions" tab in your GitHub repository): - Verify the new version on npm:
      `bash
  npm view @apify/n8n-nodes-apify version
  `
      This should print `X.Y.Z`.

  ## Version history

  Track changes and updates to the node here.

  ## Troubleshooting

  ### Common issues

  1. **Authentication errors**
     - Verify your API key is correct

  2. **Resource Not Found**
     - Verify the resource ID format
     - Check if the resource exists in your Apify account
     - Ensure you have access to the resource

  3. **Operation failures**
     - Check the input parameters
     - Verify resource limits (memory, timeout)
     - Review Apify Console for detailed error messages

  ### Getting help

  If you encounter issues:

  1. Check the [Apify API documentation](https://docs.apify.com)
  2. Review the [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  3. Open an issue in the [GitHub repository](https://github.com/apify/n8n-nodes-apify)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows based on Apify Actor or task run events and allows execution of Apify Actors, tasks, and data retrieval operations.","capabilities":["Run Apify Actor with custom input parameters","Run Apify Actor and retrieve dataset items","Run Apify Task with custom input parameters","Run Apify Task and retrieve dataset items","Scrape single URL using Apify","Get last Actor run information","List all Actor runs with pagination and filtering","Retrieve specific Actor run details","Fetch items from Apify datasets","Retrieve records from Apify Key-Value Stores"],"authentication":"API key required (apifyApi) or OAuth2 (apifyOAuth2Api, n8n cloud only)","commonUseCases":["Automated web scraping workflows","Event-driven data processing triggered by Apify tasks","Integrating Apify Actors with AI analysis in n8n","Monitoring and retrieving results from Apify runs"],"limitations":["Requires n8n version 1.57.0 or higher","Requires Node.js 22.x or higher","Self-hosted instances require public webhook URL configuration (WEBHOOK_URL) for trigger functionality","OAuth2 authentication only available in n8n cloud"],"relatedNodes":["Apify Actor","Apify Task","Apify Dataset","Apify Key-Value Store","n8n AI nodes"]}


