# nodes

node_type: n8n-nodes-scrapingant.scrapingAnt
package_name: n8n-nodes-scrapingant
display_name: ScrapingAnt
description: Scrape websites and extract data using ScrapingAnt API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: kami4ka
author_github_url: https://github.com/ScrapingAnt/
npm_package_name: n8n-nodes-scrapingant
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.922Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "AI Extract",
          "value": "aiExtract",
          "action": "Extract data from a webpage using AI",
          "description": "Extract structured data from a webpage using AI"
        },
        {
          "name": "Get Markdown",
          "value": "getMarkdown",
          "action": "Get a webpage as markdown",
          "description": "Scrape a webpage and return its content as Markdown (LLM-ready)"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get API credit usage",
          "description": "Get API credit usage information"
        },
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape a webpage",
          "description": "Scrape a webpage and return its HTML content"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "AI Extract",
      "value": "aiExtract",
      "action": "Extract data from a webpage using AI",
      "description": "Extract structured data from a webpage using AI"
    },
    {
      "name": "Get Markdown",
      "value": "getMarkdown",
      "action": "Get a webpage as markdown",
      "description": "Scrape a webpage and return its content as Markdown (LLM-ready)"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get API credit usage",
      "description": "Get API credit usage information"
    },
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape a webpage",
      "description": "Scrape a webpage and return its HTML content"
    }
  ]

npm_readme:
  # n8n-nodes-scrapingant

  [n8n](https://n8n.io/) community node for the [ScrapingAnt](https://scrapingant.com) web scraping API.

  Scrape websites, convert pages to Markdown, extract structured data with AI, and monitor API usage — all from your n8n workflows. Works as an **AI Agent tool** out of the box.

  ## Installation

  ### n8n Cloud / Desktop

  1. Open any workflow and click **+** (or press **N**) to open the nodes panel
  2. Search for **ScrapingAnt**
  3. Look for the **"More from the community"** section at the bottom of the results
  4. Click the **ScrapingAnt** node and hit **Install**

  > **Note:** Only verified community nodes are available on n8n Cloud. If ScrapingAnt does not appear yet, it may still be pending verification.

  ### Self-hosted

  Install from the n8n UI: **Settings** > **Community Nodes** > enter `n8n-nodes-scrapingant` > **Install**

  Or via npm:

  ```bash
  npm install n8n-nodes-scrapingant
  ```

  ## Credentials

  1. Sign up at [app.scrapingant.com](https://app.scrapingant.com)
  2. Copy your API key from the dashboard
  3. In n8n: **Credentials** > **Add Credential** > **ScrapingAnt API**
  4. Paste your API key and save

  The credential is validated automatically against the ScrapingAnt API.

  ## Operations

  | Operation | Endpoint | Description |
  |-----------|----------|-------------|
  | **Scrape** | `/v2/general` | Scrape a webpage and return raw HTML. Supports headless Chrome, datacenter/residential proxies, custom JS snippets, and country targeting. |
  | **Get Markdown** | `/v2/markdown` | Convert a webpage to clean Markdown — optimized for LLM and RAG pipelines. |
  | **AI Extract** | `/v2/extract` | Extract structured data from any page using natural language. Describe what you need (e.g., `"title, price, reviews"`) and get back JSON. |
  | **Get Usage** | `/v2/usage` | Check your plan name, total credits, remaining credits, and billing period. |

  ### Scrape Parameters

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | URL | string | — | Target webpage URL (required) |
  | Browser Rendering | boolean | `true` | Use headless Chrome for JavaScript rendering |
  | Proxy Type | options | `datacenter` | `datacenter` or `residential` |
  | Proxy Country | string | — | Two-letter country code (e.g., `us`, `gb`, `de`) |
  | Return Page Source | boolean | `false` | Return raw page source instead of rendered HTML |
  | JavaScript Snippet | string | — | Custom JS to execute on the page before returning (auto Base64-encoded) |
  | Timeout | number | `30` | Request timeout in seconds (5–60) |

  ### Get Markdown Parameters

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | URL | string | — | Target webpage URL (required) |
  | Browser Rendering | boolean | `true` | Use headless Chrome |
  | Proxy Type | options | `datacenter` | `datacenter` or `residential` |
  | Proxy Country | string | — | Two-letter country code |

  ### AI Extract Parameters

  | Parameter | Type | Description |
  |-----------|------|-------------|
  | URL | string | Target webpage URL (required) |
  | Extract Properties | string | Comma-separated list of properties to extract (required). Supports nested structures, e.g., `"title, price(number), reviews(list: author, text)"` |

  ## AI Agent Tool

  This node has `usableAsTool` enabled, so it can be connected directly to the **n8n AI Agent** node. The agent can autonomously scrape pages, extract data, and check usage.

  ## Credit Costs

  Credit costs vary by operation, rendering mode, and proxy type. See the [official credit cost reference](https://docs.scrapingant.com/credits-cost) for current pricing.

  ## Resources

  - [ScrapingAnt Documentation](https://docs.scrapingant.com)
  - [ScrapingAnt API Reference](https://docs.scrapingant.com/request-response-format)
  - [Credit Cost Reference](https://docs.scrapingant.com/credits-cost)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Enables web scraping, markdown conversion, AI-powered data extraction, and API usage monitoring for websites within n8n workflows.","capabilities":["Scrape webpages and return raw HTML with headless Chrome rendering","Convert webpages to clean Markdown optimized for LLMs and RAG pipelines","Extract structured data from pages using natural language prompts","Monitor API usage including plan name, credits, and billing period","Support for datacenter and residential proxies with country targeting","Execute custom JavaScript snippets on pages before returning results","Works as an AI Agent tool for autonomous data gathering"],"authentication":"API key required","commonUseCases":["Extract product prices and reviews from e-commerce sites","Gather unstructured web content for RAG pipelines","Monitor competitor pricing or content changes","Automate data collection from dynamic JavaScript-heavy websites"],"limitations":["Only verified community nodes are available on n8n Cloud","Credit costs vary based on operation type, rendering mode, and proxy selection","Custom JavaScript snippets must be Base64-encoded"],"relatedNodes":["n8n AI Agent","n8n HTTP Request"]}


node_type: n8n-nodes-docmiral.docmiral
package_name: n8n-nodes-docmiral
display_name: DocMiral
description: Interact with the DocMiral document generation platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: apbdev
author_github_url: https://github.com/DocMiral/
npm_package_name: n8n-nodes-docmiral
npm_version: 0.1.14
community_fetched_at: 2026-07-14T14:40:33.925Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Category",
          "value": "category"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Template",
          "value": "template"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Build Image",
          "value": "buildImage",
          "action": "Build image from a document"
        },
        {
          "name": "Build PDF",
          "value": "buildPdf",
          "action": "Build PDF from a document"
        },
        {
          "name": "Build PPTX",
          "value": "buildPptx",
          "action": "Build power point from a document"
        },
        {
          "name": "Clone",
          "value": "clone",
          "action": "Clone a document"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List documents"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Build Image",
          "value": "buildImage",
          "action": "Build image from a template"
        },
        {
          "name": "Build PDF",
          "value": "buildPdf",
          "action": "Build PDF from a template"
        },
        {
          "name": "Clone",
          "value": "clone",
          "action": "Clone a template"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template"
        },
        {
          "name": "Get Schema",
          "value": "getSchema",
          "action": "Get template schema"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List templates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List categories"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "category"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Build Image",
      "value": "buildImage",
      "action": "Build image from a document",
      "resource": "document"
    },
    {
      "name": "Build PDF",
      "value": "buildPdf",
      "action": "Build PDF from a document",
      "resource": "document"
    },
    {
      "name": "Build PPTX",
      "value": "buildPptx",
      "action": "Build power point from a document",
      "resource": "document"
    },
    {
      "name": "Clone",
      "value": "clone",
      "action": "Clone a document",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document",
      "resource": "document"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List documents",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "resource": "document"
    },
    {
      "name": "Build Image",
      "value": "buildImage",
      "action": "Build image from a template",
      "resource": "template"
    },
    {
      "name": "Build PDF",
      "value": "buildPdf",
      "action": "Build PDF from a template",
      "resource": "template"
    },
    {
      "name": "Clone",
      "value": "clone",
      "action": "Clone a template",
      "resource": "template"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a template",
      "resource": "template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a template",
      "resource": "template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template",
      "resource": "template"
    },
    {
      "name": "Get Schema",
      "value": "getSchema",
      "action": "Get template schema",
      "resource": "template"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List templates",
      "resource": "template"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a template",
      "resource": "template"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List categories",
      "resource": "category"
    }
  ]

npm_readme:
  # n8n-nodes-docmiral

  An [n8n](https://n8n.io) community node for [DocMiral](https://docmiral.com) — automate document generation, AI-powered filling, PDF/PPTX/image export, and more directly from your n8n workflows.

  ---

  ## Features

  - Generate documents from templates written in **HTML & Tailwind CSS** — full styling control with structured data
  - Export to **PDF**, **PowerPoint (PPTX)**, or **Image** — from an existing document or directly from a template in a single step
  - Use **TARS AI** to fill documents from natural language, parse CVs, extract text, and smart-clone documents
  - Manage templates (create, update, clone, build, get schema)
  - Browse categories and filter templates by library or category

  ---

  ## Installation

  ### In n8n (Community Nodes)

  1. Open your n8n instance
  2. Go to **Settings → Community Nodes**
  3. Click **Install a community node**
  4. Enter `n8n-nodes-docmiral` and confirm

  ### Self-hosted / Docker

  ```bash
  # Inside your n8n data directory
  npm install n8n-nodes-docmiral
  ```

  Restart n8n after installation.

  ---

  ## Credentials

  Create a **DocMiral API** credential with:

  | Field | Value |
  |---|---|
  | **API Token** | Your DocMiral API token (from your account settings) |
  | **Base URL** | `https://api.docmiral.com/api` |

  > **Important:** Use `https://` — HTTP will trigger a redirect that breaks POST requests.

  ---

  ## Resources & Operations

  ### Document

  Manage your DocMiral documents (entities).

  | Operation | Description |
  |---|---|
  | **List** | Fetch a paginated list of documents (`limit`, `offset`) |
  | **Get** | Get a single document by ID |
  | **Create** | Create a document from a template. Supports `init` (empty), `data`, and `settings` |
  | **Update** | Update the data of an existing document |
  | **Delete** | Delete a document by ID |
  | **Clone** | Clone an existing document |
  | **Build PDF** | Export a document as a PDF binary |
  | **Build PPTX** | Export a document as a PowerPoint binary |
  | **Build Image** | Export a specific page of a document as a PNG image |

  #### Build Source (PDF / PPTX / Image)

  All three build operations support two modes via the **Build Source** toggle:

  - **By Document ID** — build from an existing document (provide its ID)
  - **Directly from Template** — create a document on the fly and immediately export it. Accepts the same `Template ID`, `Name`, `Init`, `Settings`, and `Data` fields as Create. The **Keep Document** toggle controls whether the intermediate document is saved to your list or automatically deleted after the file is generated.

  #### Document Data Format

  When creating or updating a document, field data and rendering settings are combined inside a single `data` object:

  ```json
  {
    "templateId": "your-template-id",
    "init": false,
    "data": {
      "settings": {
        "size": "A4",
        "background": "#FFFFFF",
        "color": "#000000",
        "margin": "1in",
        "fontSize": "12pt"
      },
      "title": "My Document Title",
      "recipient_name": "Alice Johnson",
      "items": ["Item A", "Item B"]
    }
  }
  ```

  ---

  ### Template

  Manage reusable document templates.

  | Operation | Description |
  |---|---|
  | **List** | List templates. Filter by `Category ID` and/or **Library** (Public / My Library) |
  | **Get** | Get a template by ID |
  | **Create** | Create a new template with name, category, HTML, and settings |
  | **Update** | Update a template's name, settings, HTML, header, or footer |
  | **Delete** | Delete a template by ID |
  | **Clone** | Clone a template |
  | **Build PDF** | Render a template preview as PDF |
  | **Build Image** | Render all pages of a template as PNG images (one output item per page) |
  | **Get Schema** | Get the variable schema of a template in Standard, JSON Schema, or OpenAI format. Optionally return sample data with default values. |

  #### Template Settings

  ```json
  {
    "size": "A4",
    "margin": "1in",
    "padding": "0",
    "background": "#FFFFFF",
    "color": "#000000",
    "fontSize": "12pt"
  }
  ```

  ---

  ### Category

  | Operation | Description |
  |---|---|
  | **List** | Fetch all available template categories |

  ---

  ## Example Workflows

  ### Generate a PDF report from a template

  1. **DocMiral** → Document: **Build PDF**
     - Build Source: `Directly from Template`
     - Template ID: `your-template-id`
     - Data (JSON): `{ "title": "Q1 Report", "revenue": 120000 }`
     - Settings (JSON): `{ "size": "A4" }`
     - Keep Document: `false`
  2. **Write Binary File** or **Send Email** with the PDF attachment

  ---

  ### AI-fill a document from a form submission

  1. **Webhook** — receive form data
  2. **DocMiral** → Document: **Create**
     - Template ID: `your-template-id`
     - Data (JSON): `={{ $json }}`
  3. **DocMiral** → TARS: **Chat**
     - Document ID: `={{ $json.data.id }}`
     - Message: `"Update the summary section with a professional tone"`
  4. **DocMiral** → Document: **Build PDF**
     - Build Source: `By Document ID`
     - Document ID: `={{ $json.data.id }}`

  ---

  ### Parse a CV and populate a document

  1. **Read Binary File** — load the CV PDF
  2. **DocMiral** → TARS: **Parse CV**
  3. **DocMiral** → Document: **Create**
     - Template ID: `your-cv-template-id`
     - Data (JSON): `={{ $json.data }}`

  ---

  ## Compatibility

  | Requirement | Version |
  |---|---|
  | n8n | `>= 1.0.0` |
  | n8n-workflow | `>= 2.12.0` |
  | Node.js | `>= 18` |

  ---

  ## License

  MIT — see [LICENSE](https://github.com/DocMiral/n8n-nodes-docmiral/blob/master/LICENSE)

  ---

  ## Links

  - [DocMiral Website](https://docmiral.com)
  - [DocMiral API Docs](https://docmiral.com/api)
  - [GitHub Repository](https://github.com/DocMiral/n8n-nodes-docmiral)
  - [Report an Issue](https://github.com/DocMiral/n8n-nodes-docmiral/issues)

ai_documentation_summary:
  {"purpose":"Interact with the DocMiral document generation platform to automate document creation, AI-powered filling, and exports (PDF/PPTX/Image) directly from n8n workflows.","capabilities":["Generate documents from HTML & Tailwind CSS templates","Export documents to PDF, PowerPoint (PPTX), or PNG images","Use TARS AI to fill documents from natural language","Parse CVs and extract text using AI","Manage templates (create, update, clone, build, get schema)","Browse and filter templates by category or library","Create documents with structured data and rendering settings","Update existing document data","Clone existing documents or templates"],"authentication":"API Token required","commonUseCases":["Generate personalized PDF reports from form submissions","Automate document creation and AI refinement in a single workflow","Parse CVs to populate job application documents","Create branded presentations (PPTX) or marketing images from templates"],"limitations":["Requires n8n version >= 1.0.0 and n8n-workflow >= 2.12.0","Requires Node.js >= 18","HTTP requests must use HTTPS to avoid redirect errors"],"relatedNodes":["Write Binary File","Send Email","Webhook","Read Binary File"]}


node_type: n8n-nodes-vntana.vntana
package_name: n8n-nodes-vntana
display_name: VNTANA
description: Interact with VNTANA 3D content management platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ben-vntana
author_github_url: https://github.com/VNTANA-3D/vntana-n8n-node.git
npm_package_name: n8n-nodes-vntana
npm_version: 0.5.1
community_fetched_at: 2026-07-14T14:40:33.951Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "product",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Pipeline",
          "value": "pipeline"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Render",
          "value": "render"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Clone",
          "value": "clone",
          "action": "Clone a product",
          "description": "Clone a product to the same or different workspace"
        },
        {
          "name": "Download Model",
          "value": "downloadModel",
          "action": "Download a model",
          "description": "Download a 3D model file"
        },
        {
          "name": "Move",
          "value": "move",
          "action": "Move a product",
          "description": "Move a product to a different workspace"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search products",
          "description": "Search for products in a workspace"
        },
        {
          "name": "Update Product",
          "value": "updateProduct",
          "action": "Update a product",
          "description": "Update product name, description, status, tags, or attributes"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update product status",
          "description": "Update the status of one or more products"
        },
        {
          "name": "Upload 3D Model",
          "value": "upload3DModel",
          "action": "Upload a 3D model",
          "description": "Upload and optimize a 3D model file"
        },
        {
          "name": "Upload Asset",
          "value": "uploadAsset",
          "action": "Upload an asset",
          "description": "Upload an image, video, document, or audio file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "download",
      "options": [
        {
          "name": "Download",
          "value": "download",
          "action": "Download renders",
          "description": "Download renders for a product"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a render",
          "description": "Upload a render to a product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "render"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload an attachment",
          "description": "Upload an attachment to a product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List organizations",
          "description": "List all organizations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List workspaces",
          "description": "List all workspaces in the organization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List pipelines",
          "description": "List all available optimization pipelines"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pipeline"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tag",
          "description": "Create a new tag"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search tags",
          "description": "Search for tags in a workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Clone",
      "value": "clone",
      "action": "Clone a product",
      "description": "Clone a product to the same or different workspace",
      "resource": "product"
    },
    {
      "name": "Download Model",
      "value": "downloadModel",
      "action": "Download a model",
      "description": "Download a 3D model file",
      "resource": "product"
    },
    {
      "name": "Move",
      "value": "move",
      "action": "Move a product",
      "description": "Move a product to a different workspace",
      "resource": "product"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search products",
      "description": "Search for products in a workspace",
      "resource": "product"
    },
    {
      "name": "Update Product",
      "value": "updateProduct",
      "action": "Update a product",
      "description": "Update product name, description, status, tags, or attributes",
      "resource": "product"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update product status",
      "description": "Update the status of one or more products",
      "resource": "product"
    },
    {
      "name": "Upload 3D Model",
      "value": "upload3DModel",
      "action": "Upload a 3D model",
      "description": "Upload and optimize a 3D model file",
      "resource": "product"
    },
    {
      "name": "Upload Asset",
      "value": "uploadAsset",
      "action": "Upload an asset",
      "description": "Upload an image, video, document, or audio file",
      "resource": "product"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download renders",
      "description": "Download renders for a product",
      "resource": "render"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a render",
      "description": "Upload a render to a product",
      "resource": "render"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload an attachment",
      "description": "Upload an attachment to a product",
      "resource": "attachment"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List organizations",
      "description": "List all organizations",
      "resource": "organization"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List workspaces",
      "description": "List all workspaces in the organization",
      "resource": "workspace"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List pipelines",
      "description": "List all available optimization pipelines",
      "resource": "pipeline"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tag",
      "description": "Create a new tag",
      "resource": "tag"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search tags",
      "description": "Search for tags in a workspace",
      "resource": "tag"
    }
  ]

npm_readme:
  # n8n-nodes-vntana

  This is an n8n community node for [VNTANA](https://www.vntana.com/), a product content platform that automates and scales 3D content. It enables n8n workflows to interact with VNTANA's Admin API for automating workflows with 3D products, renders, and attachments.

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

  ## Installation

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

  ### npm

  ```bash
  npm install n8n-nodes-vntana
  ```

  ### Manual Installation

  1. Clone or download this repository
  2. Run `npm install` and `npm run build`
  3. Link the package: `npm link`
  4. In your n8n custom nodes directory (`~/.n8n/custom`):
     ```bash
     npm init -y  # if not already initialized
     npm link n8n-nodes-vntana
     ```
  5. Restart n8n

  ## Credentials

  To use this node, you need to configure VNTANA API credentials:

  | Field | Required | Description |
  |-------|----------|-------------|
  | **Email** | Yes | Email address for your VNTANA account |
  | **Password** | Yes | Password for your VNTANA account |
  | **Organization Slug** | Yes | The slug from your platform URL (e.g. `acme-corp` in `app.vntana.com/acme-corp/...`) |
  | **Default Workspace UUID** | No | Default workspace to use when not specified in an operation |
  | **API Base URL** | No | Override the default API host (for staging/test environments) |

  ### Obtaining Credentials

  Enter your email, password, and your organization's slug. The node handles the rest:

  1. Logs in with email/password to get an initial auth token.
  2. Resolves your Organization UUID by matching the slug against the orgs returned by `GET /v1/organizations`.
  3. Refreshes the token with that UUID to get an org-specific token.
  4. Uses that org-specific token on every subsequent request, refreshing automatically when it expires.

  For detailed authentication steps, see [VNTANA API Authentication](https://help.vntana.com/api-authentication).

  ## Operations

  ### Product

  | Operation | Description |
  |-----------|-------------|
  | **Search** | Search for products in a workspace with filters |
  | **Download Model** | Download a 3D model file (GLB, USDZ, FBX, OBJ, STEP) |

  #### Search Filters
  - Search term (text search)
  - Status (Draft, Live Public, Live Internal, Approved, Rejected, Waiting Review)
  - Conversion status (Pending, Converting, Completed, Failed, No Asset)
  - Name (exact match)
  - Tag UUIDs

  ### Render

  | Operation | Description |
  |-----------|-------------|
  | **Download** | Download renders (still images or turntable videos) for a product |
  | **Upload** | Upload a render image/video to a product |

  ### Attachment

  | Operation | Description |
  |-----------|-------------|
  | **Upload** | Upload an attachment file to a product |

  ## Usage Examples

  ### Search Products

  1. Add the VNTANA node to your workflow
  2. Select **Product** resource and **Search** operation
  3. Enter your Workspace UUID
  4. Optionally add filters (search term, status, etc.)
  5. Execute to retrieve matching products

  ### Download a 3D Model

  1. Add the VNTANA node to your workflow
  2. Select **Product** resource and **Download Model** operation
  3. Enter the Product UUID and Workspace UUID
  4. Select the format (GLB, USDZ, FBX, OBJ, or STEP)
  5. Execute to download the model as binary data

  ### Upload a Render

  1. Add a node that provides binary data (e.g., HTTP Request, Read Binary File)
  2. Add the VNTANA node
  3. Select **Render** resource and **Upload** operation
  4. Enter the Product UUID and Workspace UUID
  5. Specify the binary property name containing your file
  6. Execute to upload the render to VNTANA

  ## Compatibility

  - **n8n version**: 1.0.0+
  - **Node.js version**: 18.x+

  ## Resources

  - [VNTANA Documentation](https://help.vntana.com/)
  - [VNTANA API Reference](https://help.vntana.com/api-documentation)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build the node
  npm run build

  # Watch mode for development
  npm run dev

  # Lint the code
  npm run lint

  # Fix lint issues
  npm run lintfix
  ```

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Enables n8n workflows to interact with the VNTANA 3D content management platform for automating product content, renders, and attachments via its Admin API.","capabilities":["Search products with filters (status, conversion status, name, tags)","Download 3D model files (GLB, USDZ, FBX, OBJ, STEP)","Download renders (still images or turntable videos)","Upload render images or videos to products","Upload attachment files to products"],"authentication":"API key required (Email/Password/Organization Slug combination for token-based auth)","commonUseCases":["Automate retrieval of 3D assets for e-commerce workflows","Trigger product rendering and upload results","Sync product catalogs between VNTANA and other systems","Automate approval workflows for 3D content"],"limitations":["Requires valid VNTANA account credentials (Email/Password)","Organization slug must be known or resolved via API","Binary data operations require upstream nodes to provide file data","Limited to VNTANA Admin API functionality"],"relatedNodes":["n8n-nodes-ftp","n8n-nodes-http","n8n-nodes-file"]}


node_type: n8n-nodes-seltz.seltz
package_name: n8n-nodes-seltz
display_name: Seltz
description: Search the live web using the Seltz Web Knowledge API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: fschlatt
author_github_url: https://github.com/WilliamEspegren/
npm_package_name: n8n-nodes-seltz
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:33.953Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-seltz

  This is an n8n community node for [Seltz](https://seltz.ai/?utm_source=n8n-nodes-seltz&utm_medium=readme) — the Web Knowledge API built for AI agents. It lets you search the live web inside 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)
  [Resources](#resources)

  ## Installation

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

  ## Operations

  ### Web Search

  - **Query** — The search query to send to Seltz.
  - **Max Documents** — Maximum number of documents to return (1–20).
  - **Output Mode** — Choose between returning one item per document or all documents in a single item.

  ## Credentials

  You need a Seltz API key to use this node.

  1. Sign up at [seltz.ai](https://seltz.ai/?utm_source=n8n-nodes-seltz&utm_medium=readme).
  2. Copy your API key from the dashboard.
  3. In n8n, create a new **Seltz API** credential and paste the key.

  ## Compatibility

  Tested with n8n version 1.x. No known compatibility issues.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Seltz API documentation](https://seltz.ai/?utm_source=n8n-nodes-seltz&utm_medium=readme)
  - [GitHub repository](https://github.com/WilliamEspegren/n8n-nodes-seltz)

ai_documentation_summary:
  {"purpose":"Enables AI agents to search the live web using the Seltz Web Knowledge API directly within n8n workflows.","capabilities":["Execute web searches with customizable queries","Control the number of returned documents (1-20)","Select output mode (one item per document or single item with all documents)"],"authentication":"API key required","commonUseCases":["Real-time information retrieval for AI agents","Fact-checking data within automated workflows","Gathering current web data for decision-making processes"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-instaparser.instaparser
package_name: n8n-nodes-instaparser
display_name: Instaparser
description: Extract articles, parse PDFs, and generate summaries using the Instaparser API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: instapaper
author_github_url: https://github.com/Instapaper/
npm_package_name: n8n-nodes-instaparser
npm_version: 1.0.0
community_fetched_at: 2026-07-14T14:40:33.955Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "article",
      "options": [
        {
          "name": "Article",
          "value": "article",
          "description": "Parse articles from URLs"
        },
        {
          "name": "PDF",
          "value": "pdf",
          "description": "Parse PDFs from URLs or uploaded files"
        },
        {
          "name": "Summary",
          "value": "summary",
          "description": "Generate AI-powered summaries of articles"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "parse",
      "options": [
        {
          "name": "Parse",
          "value": "parse",
          "action": "Parse an article from a URL",
          "description": "Parse an article from a URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "parseUrl",
      "options": [
        {
          "name": "Parse From URL",
          "value": "parseUrl",
          "action": "Parse a PDF from a URL",
          "description": "Parse a PDF from a URL"
        },
        {
          "name": "Parse From File",
          "value": "parseFile",
          "action": "Parse an uploaded PDF file",
          "description": "Parse an uploaded PDF file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "summarize",
      "options": [
        {
          "name": "Summarize",
          "value": "summarize",
          "action": "Generate a summary of an article",
          "description": "Generate a summary of an article"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "summary"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Parse",
      "value": "parse",
      "action": "Parse an article from a URL",
      "description": "Parse an article from a URL",
      "resource": "article"
    },
    {
      "name": "Parse From URL",
      "value": "parseUrl",
      "action": "Parse a PDF from a URL",
      "description": "Parse a PDF from a URL",
      "resource": "pdf"
    },
    {
      "name": "Parse From File",
      "value": "parseFile",
      "action": "Parse an uploaded PDF file",
      "description": "Parse an uploaded PDF file",
      "resource": "pdf"
    },
    {
      "name": "Summarize",
      "value": "summarize",
      "action": "Generate a summary of an article",
      "description": "Generate a summary of an article",
      "resource": "summary"
    }
  ]

npm_readme:
  # n8n-nodes-instaparser

  n8n node for using the [Instaparser API](https://instaparser.com/) to extract article content, parse PDFs, and generate AI-powered summaries.

  ## Installation

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

  ## Operations

  - **Article**
      - Parse an article from a URL (returns title, author, body, and metadata)
  - **PDF**
      - Parse a PDF from a URL
      - Parse an uploaded PDF file
  - **Summary**
      - Generate an AI-powered summary of an article from a URL

  All parsing operations support HTML, plain text, and Markdown output formats.

  ## Credentials

  You need an [Instaparser API key](https://instaparser.com/pricing) to use this node.

  1. Go to [instaparser.com](https://instaparser.com/pricing) and sign up for an account.
  2. Navigate to your account dashboard to find your API key.
  3. In n8n, create a new **Instaparser API** credential and paste your API key.

  ## Compatibility

  Tested with n8n v1.60.0 and later.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Extracts article content, parses PDF files, and generates AI-powered summaries using the Instaparser API.","capabilities":["Parse articles from URLs to extract title, author, body, and metadata","Parse PDFs from URLs","Parse uploaded PDF files","Generate AI-powered summaries of articles from URLs","Support for HTML, plain text, and Markdown output formats"],"authentication":"API key required","commonUseCases":["Content aggregation from web articles","Document processing and text extraction from PDFs","Automated content summarization for research or news feeds"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-imessage.photonIMessage
package_name: n8n-nodes-imessage
display_name: iMessage by Photon
description: Send, search, and manage iMessage conversations via the Photon server
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: photon_dev
author_github_url: https://github.com/photon-hq/
npm_package_name: n8n-nodes-imessage
npm_version: 0.3.6
community_fetched_at: 2026-07-14T14:40:33.956Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Chat",
          "value": "chat",
          "description": "Create and manage conversations"
        },
        {
          "name": "Contact",
          "value": "contact",
          "description": "Share contact cards"
        },
        {
          "name": "Handle",
          "value": "handle",
          "description": "Check iMessage availability"
        },
        {
          "name": "Message",
          "value": "message",
          "description": "Send, search, and manage messages"
        },
        {
          "name": "Poll",
          "value": "poll",
          "description": "Create and manage polls in chats"
        },
        {
          "name": "Scheduled Message",
          "value": "scheduledMessage",
          "description": "Schedule messages for later delivery"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Download Attachment",
          "value": "downloadAttachment",
          "action": "Download an attachment",
          "description": "Download a received file or media attachment"
        },
        {
          "name": "Edit Message",
          "value": "editMessage",
          "action": "Edit a message",
          "description": "Edit the text of a previously sent message"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "Get messages",
          "description": "Retrieve messages from a chat"
        },
        {
          "name": "React to Message",
          "value": "reactToMessage",
          "action": "React to a message",
          "description": "Send a tapback reaction (love, like, laugh, etc.)"
        },
        {
          "name": "Search Messages",
          "value": "searchMessages",
          "action": "Search messages",
          "description": "Search messages by text content across chats"
        },
        {
          "name": "Send Attachment",
          "value": "sendAttachment",
          "action": "Send an attachment",
          "description": "Send a file attachment to a chat"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message",
          "description": "Send a text message to a chat"
        },
        {
          "name": "Unsend Message",
          "value": "unsendMessage",
          "action": "Unsend a message",
          "description": "Retract a sent message (recipients will see it was unsent)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listChats",
      "options": [
        {
          "name": "Create Chat",
          "value": "createChat",
          "action": "Create a chat",
          "description": "Start a new conversation with one or more participants"
        },
        {
          "name": "List Chats",
          "value": "listChats",
          "action": "List chats",
          "description": "Retrieve recent conversations with participants and last message"
        },
        {
          "name": "Mark Chat Read",
          "value": "markChatRead",
          "action": "Mark a chat as read",
          "description": "Mark all messages in a chat as read"
        },
        {
          "name": "Start Typing",
          "value": "startTyping",
          "action": "Start typing indicator",
          "description": "Show the typing bubble (…) in a chat"
        },
        {
          "name": "Stop Typing",
          "value": "stopTyping",
          "action": "Stop typing indicator",
          "description": "Hide the typing bubble"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createScheduledMessage",
      "options": [
        {
          "name": "Create Scheduled Message",
          "value": "createScheduledMessage",
          "action": "Create a scheduled message",
          "description": "Schedule a message to be sent at a future date/time"
        },
        {
          "name": "List Scheduled Messages",
          "value": "listScheduledMessages",
          "action": "List scheduled messages",
          "description": "Get all pending scheduled messages"
        },
        {
          "name": "Delete Scheduled Message",
          "value": "deleteScheduledMessage",
          "action": "Delete a scheduled message",
          "description": "Cancel and remove a scheduled message before it sends"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scheduledMessage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createPoll",
      "options": [
        {
          "name": "Create Poll",
          "value": "createPoll",
          "action": "Create a poll",
          "description": "Create an interactive poll in a group chat"
        },
        {
          "name": "Vote",
          "value": "vote",
          "action": "Vote on a poll",
          "description": "Cast a vote on a poll option"
        },
        {
          "name": "Unvote",
          "value": "unvote",
          "action": "Remove vote from a poll",
          "description": "Remove your vote from a poll option"
        },
        {
          "name": "Add Option",
          "value": "addOption",
          "action": "Add a poll option",
          "description": "Add a new option to an existing poll"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "poll"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "shareContactCard",
      "options": [
        {
          "name": "Share Contact Card",
          "value": "shareContactCard",
          "action": "Share your contact card",
          "description": "Share your Name and Photo contact card in a chat"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkAvailability",
      "options": [
        {
          "name": "Check iMessage Availability",
          "value": "checkAvailability",
          "action": "Check i message availability",
          "description": "Check if a phone number or email can receive iMessages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "handle"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Download Attachment",
      "value": "downloadAttachment",
      "action": "Download an attachment",
      "description": "Download a received file or media attachment",
      "resource": "message"
    },
    {
      "name": "Edit Message",
      "value": "editMessage",
      "action": "Edit a message",
      "description": "Edit the text of a previously sent message",
      "resource": "message"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "Get messages",
      "description": "Retrieve messages from a chat",
      "resource": "message"
    },
    {
      "name": "React to Message",
      "value": "reactToMessage",
      "action": "React to a message",
      "description": "Send a tapback reaction (love, like, laugh, etc.)",
      "resource": "message"
    },
    {
      "name": "Search Messages",
      "value": "searchMessages",
      "action": "Search messages",
      "description": "Search messages by text content across chats",
      "resource": "message"
    },
    {
      "name": "Send Attachment",
      "value": "sendAttachment",
      "action": "Send an attachment",
      "description": "Send a file attachment to a chat",
      "resource": "message"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message",
      "description": "Send a text message to a chat",
      "resource": "message"
    },
    {
      "name": "Unsend Message",
      "value": "unsendMessage",
      "action": "Unsend a message",
      "description": "Retract a sent message (recipients will see it was unsent)",
      "resource": "message"
    },
    {
      "name": "Create Chat",
      "value": "createChat",
      "action": "Create a chat",
      "description": "Start a new conversation with one or more participants",
      "resource": "chat"
    },
    {
      "name": "List Chats",
      "value": "listChats",
      "action": "List chats",
      "description": "Retrieve recent conversations with participants and last message",
      "resource": "chat"
    },
    {
      "name": "Mark Chat Read",
      "value": "markChatRead",
      "action": "Mark a chat as read",
      "description": "Mark all messages in a chat as read",
      "resource": "chat"
    },
    {
      "name": "Start Typing",
      "value": "startTyping",
      "action": "Start typing indicator",
      "description": "Show the typing bubble (…) in a chat",
      "resource": "chat"
    },
    {
      "name": "Stop Typing",
      "value": "stopTyping",
      "action": "Stop typing indicator",
      "description": "Hide the typing bubble",
      "resource": "chat"
    },
    {
      "name": "Create Scheduled Message",
      "value": "createScheduledMessage",
      "action": "Create a scheduled message",
      "description": "Schedule a message to be sent at a future date/time",
      "resource": "scheduledMessage"
    },
    {
      "name": "List Scheduled Messages",
      "value": "listScheduledMessages",
      "action": "List scheduled messages",
      "description": "Get all pending scheduled messages",
      "resource": "scheduledMessage"
    },
    {
      "name": "Delete Scheduled Message",
      "value": "deleteScheduledMessage",
      "action": "Delete a scheduled message",
      "description": "Cancel and remove a scheduled message before it sends",
      "resource": "scheduledMessage"
    },
    {
      "name": "Create Poll",
      "value": "createPoll",
      "action": "Create a poll",
      "description": "Create an interactive poll in a group chat",
      "resource": "poll"
    },
    {
      "name": "Vote",
      "value": "vote",
      "action": "Vote on a poll",
      "description": "Cast a vote on a poll option",
      "resource": "poll"
    },
    {
      "name": "Unvote",
      "value": "unvote",
      "action": "Remove vote from a poll",
      "description": "Remove your vote from a poll option",
      "resource": "poll"
    },
    {
      "name": "Add Option",
      "value": "addOption",
      "action": "Add a poll option",
      "description": "Add a new option to an existing poll",
      "resource": "poll"
    },
    {
      "name": "Share Contact Card",
      "value": "shareContactCard",
      "action": "Share your contact card",
      "description": "Share your Name and Photo contact card in a chat",
      "resource": "contact"
    },
    {
      "name": "Check iMessage Availability",
      "value": "checkAvailability",
      "action": "Check i message availability",
      "description": "Check if a phone number or email can receive iMessages",
      "resource": "handle"
    }
  ]

npm_readme:
  # n8n-nodes-imessage

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

  This is an n8n community node for [Photon iMessage](https://github.com/photon-hq/advanced-imessage-kit). It lets you send, receive, search, and automate iMessage conversations directly from your n8n workflows.

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

  ## Prerequisites

  Photon hosts the iMessage server for you — no self-hosting required.

  1. Visit [photon.codes](https://photon.codes) to create an account
  2. Get your **Server URL** and **API Key** from the Photon dashboard

  ## Installation

  Follow the [n8n community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) to install `n8n-nodes-imessage` in your n8n instance.

  ```
  npm install n8n-nodes-imessage
  ```

  ## Credentials

  1. In n8n, go to **Credentials** and create a new **Photon iMessage API** credential
  2. Enter your **Server URL** — from your [Photon dashboard](https://photon.codes) (no trailing slash)
  3. Enter your **API Key** — from your [Photon dashboard](https://photon.codes), sent as an `X-API-Key` header on every request
  4. Click **Test** to verify the connection

  ## Nodes

  ### Photon iMessage (Action Node)

  Perform operations on your iMessage account.

  #### Message

  | Operation | Description |
  |-----------|-------------|
  | **Send Message** | Send a text message to a chat. Supports reply-to, message effects (confetti, fireworks, etc.), and subject lines. |
  | **Send Attachment** | Send a file from the server Mac to a chat. Supports voice messages. |
  | **Unsend Message** | Retract a sent message. |
  | **Edit Message** | Edit the text of a sent message. |
  | **React to Message** | Send a tapback reaction (love, like, dislike, laugh, emphasize, question). |
  | **Download Attachment** | Download a received file or media attachment. |
  | **Search Messages** | Search messages by text content across all chats or a specific chat. |
  | **Get Messages** | Retrieve messages from a chat with date range and sort options. |

  #### Chat

  | Operation | Description |
  |-----------|-------------|
  | **List Chats** | List all conversations with optional last message preview. |
  | **Create Chat** | Start a new conversation with one or more participants. |
  | **Mark Chat Read** | Mark all messages in a chat as read. |
  | **Start Typing** | Show the typing indicator in a chat. |
  | **Stop Typing** | Hide the typing indicator in a chat. |

  #### Contact

  | Operation | Description |
  |-----------|-------------|
  | **Share Contact Card** | Share your Name and Photo contact card in a chat. |

  #### Poll

  | Operation | Description |
  |-----------|-------------|
  | **Create Poll** | Create an interactive poll in a chat. |
  | **Vote** | Vote on a poll option. |
  | **Unvote** | Remove your vote from a poll option. |
  | **Add Option** | Add a new option to an existing poll. |

  #### Scheduled Message

  | Operation | Description |
  |-----------|-------------|
  | **Create Scheduled Message** | Schedule a message to send later. Supports one-time and recurring schedules (hourly, daily, weekly, monthly, yearly). |
  | **List Scheduled Messages** | View all pending scheduled messages. |
  | **Delete Scheduled Message** | Remove a scheduled message. |

  #### Handle

  | Operation | Description |
  |-----------|-------------|
  | **Check iMessage Availability** | Check if a phone number or email address supports iMessage. |

  ### Photon iMessage Trigger (Polling Trigger)

  Triggers your workflow when new iMessages are received.

  | Parameter | Description |
  |-----------|-------------|
  | **Chat GUID** | Only trigger for messages in a specific chat (leave blank for all). |
  | **Include Sent Messages** | Also trigger for messages you sent (default: off). |
  | **Max Messages Per Poll** | Maximum number of messages to fetch per poll interval (default: 100). |

  The trigger polls for new messages and tracks the last message timestamp to avoid duplicates.

  ## Chat GUID Format

  The Chat GUID identifies a conversation:

  - **iMessage DM**: `iMessage;-;+1234567890` or `iMessage;-;email@example.com`
  - **SMS DM**: `SMS;-;+1234567890`
  - **Group chat**: `iMessage;+;chat123456789`

  ## Resources

  - [Photon](https://photon.codes) — Get your API key and server URL
  - [Photon advanced-imessage-kit](https://github.com/photon-hq/advanced-imessage-kit) — The iMessage SDK
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of iMessage conversations by allowing users to send, receive, search, and manage messages via the Photon server API.","capabilities":["Send text messages with reply-to, effects, and subject lines","Send attachments including voice messages","Unsend and edit sent messages","React to messages with tapbacks (love, like, laugh, etc.)","Download received media attachments","Search messages by content across chats","Retrieve messages with date range and sorting","List and create new chat conversations","Mark chats as read","Control typing indicators"],"authentication":"API key required (Server URL and API Key)","commonUseCases":["Automated customer support responses via iMessage","Scheduled promotional messages","Interactive polls for user engagement","Automated message archiving and search","Typing indicator automation for better UX"],"limitations":["Requires a Photon server account (no self-hosting)","Trigger polling relies on external server availability","Chat GUID format must be manually constructed or retrieved"],"relatedNodes":[]}


node_type: n8n-nodes-imessage.photonIMessageTrigger
package_name: n8n-nodes-imessage
display_name: iMessage by Photon Trigger
description: Triggers on real-time iMessage events via the Photon Webhook service
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: photon_dev
author_github_url: https://github.com/photon-hq/
npm_package_name: n8n-nodes-imessage
npm_version: 0.3.6
community_fetched_at: 2026-07-14T14:40:33.958Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-imessage

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

  This is an n8n community node for [Photon iMessage](https://github.com/photon-hq/advanced-imessage-kit). It lets you send, receive, search, and automate iMessage conversations directly from your n8n workflows.

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

  ## Prerequisites

  Photon hosts the iMessage server for you — no self-hosting required.

  1. Visit [photon.codes](https://photon.codes) to create an account
  2. Get your **Server URL** and **API Key** from the Photon dashboard

  ## Installation

  Follow the [n8n community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) to install `n8n-nodes-imessage` in your n8n instance.

  ```
  npm install n8n-nodes-imessage
  ```

  ## Credentials

  1. In n8n, go to **Credentials** and create a new **Photon iMessage API** credential
  2. Enter your **Server URL** — from your [Photon dashboard](https://photon.codes) (no trailing slash)
  3. Enter your **API Key** — from your [Photon dashboard](https://photon.codes), sent as an `X-API-Key` header on every request
  4. Click **Test** to verify the connection

  ## Nodes

  ### Photon iMessage (Action Node)

  Perform operations on your iMessage account.

  #### Message

  | Operation | Description |
  |-----------|-------------|
  | **Send Message** | Send a text message to a chat. Supports reply-to, message effects (confetti, fireworks, etc.), and subject lines. |
  | **Send Attachment** | Send a file from the server Mac to a chat. Supports voice messages. |
  | **Unsend Message** | Retract a sent message. |
  | **Edit Message** | Edit the text of a sent message. |
  | **React to Message** | Send a tapback reaction (love, like, dislike, laugh, emphasize, question). |
  | **Download Attachment** | Download a received file or media attachment. |
  | **Search Messages** | Search messages by text content across all chats or a specific chat. |
  | **Get Messages** | Retrieve messages from a chat with date range and sort options. |

  #### Chat

  | Operation | Description |
  |-----------|-------------|
  | **List Chats** | List all conversations with optional last message preview. |
  | **Create Chat** | Start a new conversation with one or more participants. |
  | **Mark Chat Read** | Mark all messages in a chat as read. |
  | **Start Typing** | Show the typing indicator in a chat. |
  | **Stop Typing** | Hide the typing indicator in a chat. |

  #### Contact

  | Operation | Description |
  |-----------|-------------|
  | **Share Contact Card** | Share your Name and Photo contact card in a chat. |

  #### Poll

  | Operation | Description |
  |-----------|-------------|
  | **Create Poll** | Create an interactive poll in a chat. |
  | **Vote** | Vote on a poll option. |
  | **Unvote** | Remove your vote from a poll option. |
  | **Add Option** | Add a new option to an existing poll. |

  #### Scheduled Message

  | Operation | Description |
  |-----------|-------------|
  | **Create Scheduled Message** | Schedule a message to send later. Supports one-time and recurring schedules (hourly, daily, weekly, monthly, yearly). |
  | **List Scheduled Messages** | View all pending scheduled messages. |
  | **Delete Scheduled Message** | Remove a scheduled message. |

  #### Handle

  | Operation | Description |
  |-----------|-------------|
  | **Check iMessage Availability** | Check if a phone number or email address supports iMessage. |

  ### Photon iMessage Trigger (Polling Trigger)

  Triggers your workflow when new iMessages are received.

  | Parameter | Description |
  |-----------|-------------|
  | **Chat GUID** | Only trigger for messages in a specific chat (leave blank for all). |
  | **Include Sent Messages** | Also trigger for messages you sent (default: off). |
  | **Max Messages Per Poll** | Maximum number of messages to fetch per poll interval (default: 100). |

  The trigger polls for new messages and tracks the last message timestamp to avoid duplicates.

  ## Chat GUID Format

  The Chat GUID identifies a conversation:

  - **iMessage DM**: `iMessage;-;+1234567890` or `iMessage;-;email@example.com`
  - **SMS DM**: `SMS;-;+1234567890`
  - **Group chat**: `iMessage;+;chat123456789`

  ## Resources

  - [Photon](https://photon.codes) — Get your API key and server URL
  - [Photon advanced-imessage-kit](https://github.com/photon-hq/advanced-imessage-kit) — The iMessage SDK
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Enables automation of iMessage conversations by sending, receiving, searching, and managing messages, chats, contacts, and polls through the Photon Webhook service.","capabilities":["Send text messages with effects and reply-to functionality","Send and download attachments including voice messages","Edit and unsend sent messages","React to messages with tapbacks","Search messages by content across chats","List, create, and manage chat conversations","Share contact cards","Create and manage interactive polls","Schedule one-time or recurring messages","Check iMessage availability for phone numbers or emails"],"authentication":"API key required (Server URL and API Key from Photon dashboard)","commonUseCases":["Automated customer support responses via iMessage","Sending scheduled promotional messages","Monitoring incoming messages for specific keywords","Managing group chat interactions and polls","Automated contact sharing and updates"],"limitations":["Requires a paid Photon account and server URL (no self-hosting)","Trigger node uses polling which may introduce slight latency compared to real-time webhooks","Chat GUID format is specific to iMessage/SMS and may not work with other messaging platforms"],"relatedNodes":[]}


node_type: n8n-nodes-sap-odata.sapOData
package_name: n8n-nodes-sap-odata
display_name: avanai SAP Connect OData
description: Connect to SAP systems via OData (v0.5.0-beta.7)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: sseegebarth
author_github_url: https://github.com/sseegebarth/
npm_package_name: n8n-nodes-sap-odata
npm_version: 0.5.0-beta.7
community_fetched_at: 2026-07-14T14:40:33.959Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "entity",
      "options": [
        {
          "name": "Entity",
          "value": "entity",
          "description": "Work with OData entities (CRUD operations)"
        },
        {
          "name": "Function Import",
          "value": "functionImport",
          "description": "Execute OData function imports"
        }
      ],
      "description": "The SAP OData resource type",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an entity",
          "description": "Create a new entity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an entity",
          "description": "Delete an entity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an entity",
          "description": "Get a single entity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many entities",
          "description": "Get multiple entities"
        },
        {
          "name": "Get Metadata",
          "value": "getMetadata",
          "action": "Get service metadata",
          "description": "Get service document or metadata"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an entity",
          "description": "Update an entity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "entity"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an entity",
      "description": "Create a new entity",
      "resource": "entity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an entity",
      "description": "Delete an entity",
      "resource": "entity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an entity",
      "description": "Get a single entity",
      "resource": "entity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many entities",
      "description": "Get multiple entities",
      "resource": "entity"
    },
    {
      "name": "Get Metadata",
      "value": "getMetadata",
      "action": "Get service metadata",
      "description": "Get service document or metadata",
      "resource": "entity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an entity",
      "description": "Update an entity",
      "resource": "entity"
    }
  ]


node_type: @sinch-engage/n8n-nodes-sinch-engage.sinchEngage
package_name: @sinch-engage/n8n-nodes-sinch-engage
display_name: Sinch Engage
description: Send SMS and manage communications via Sinch Engage
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: yuying_pei
author_github_url: https://github.com/messagemedia/n8n-engage.git
npm_package_name: @sinch-engage/n8n-nodes-sinch-engage
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:33.966Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sms",
      "options": [
        {
          "name": "Blacklist",
          "value": "blacklist",
          "description": "Manage opt-out blacklist for phone numbers"
        },
        {
          "name": "SMS",
          "value": "sms",
          "description": "Send and manage SMS messages"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send an SMS",
          "description": "Send an SMS message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add to blacklist",
          "description": "Add phone number(s) to blacklist"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blacklist"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send an SMS",
      "description": "Send an SMS message",
      "resource": "sms"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add to blacklist",
      "description": "Add phone number(s) to blacklist",
      "resource": "blacklist"
    }
  ]

npm_readme:
  # n8n-nodes-sinch-engage

  Community node for n8n to send SMS via Sinch Engage with a clean, focused interface.

  ## Installation

  1. In your n8n instance, go to **Settings > Community Nodes**
  2. Click **Install a community node**
  3. Enter: `@sinch-engage/n8n-nodes-sinch-engage`
  4. Click **Install**

  **Compatibility**: Requires n8n version 1.0.0 or later.

  ## ✨ Features
  - **Sinch Engage SMS integration** - SMS provider with global reach `https://sinch.com/engage/`
  - **Clean, simple UI** - No complex provider selection or credential confusion
  - **Optional sender number** - Uses default account number if "From" field is blank
  - **Phone number normalization** to E.164 format and encoding detection (GSM7 vs UCS-2)
  - **Robust error handling** and validation

  ## 🎯 Node Configuration

  ### Basic Information
  - **Display Name**: Sinch Engage
  - **Name**: `SinchEngage`
  - **Group**: `output`
  - **Inputs**: `main`
  - **Outputs**: `main`

  ### Field Structure

  The node provides a clean, focused interface with logical field organization:

  #### 1. **Sinch Engage API Credentials**
  - **Required**: Sinch Engage API Key and Secret
  - **Single credential field** - No confusion about which credentials to use

  #### 2. **Message Details**
  - **To** (required) - Destination phone number in E.164 format
  - **From** (optional) - Sender phone number (uses default account number if blank)
  - **Message** (required, up to 1600 characters) - SMS content

  #### 3. **Additional Fields**
  - **Status Callback URL** - Webhook URL for delivery status updates
  - **Encoding**: auto | GSM7 | UCS-2 (auto-detects by default)

  ## 🔐 Credentials

  ### Sinch Engage API
  - `apiKey` - Your Sinch Engage API Key
  - `apiSecret` - Your Sinch Engage API Secret

  ## 📱 Sinch Engage Integration

  ### API Endpoint
  - **URL**: `POST https://api.messagemedia.com/v1/messages`
  - **Auth**: Basic (API Key / Secret)
  - **Body**: `{ messages: [ { content, destination_number, source_number } ] }`

  ### Field Mapping
  - **`to`** → **`destination_number`** (required)
  - **`message`** → **`content`** (required)
  - **`from`** → **`source_number`** (optional - uses default account number if blank)

  ### Features
  - **Australian focus** with global SMS capabilities
  - **Optional source number** - automatically uses account default if not specified
  - **Delivery reports** via webhook callbacks
  - **Rich media support** (MMS capabilities)

  ## 🔄 Field Behavior

  ### When "From" field is provided:
  - ✅ Sender number is included in API request
  - ✅ Uses the specified number as source

  ### When "From" field is blank:
  - ✅ No source_number sent to API
  - ✅ Sinch Engage uses default account number
  - ✅ Ideal for single-account setups

  ## 📋 Example Workflow

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "to": "+61437536808",
          "message": "Hello from n8n!",
          "additionalFields": {
            "statusCallbackUrl": "https://your-webhook.com/sms-status"
          }
        },
        "type": "@sinch-engage/n8n-nodes-sinch-engage.sinchEngage",
        "typeVersion": 1,
        "name": "Sinch Engage SMS Sender"
      }
    ]
  }
  ```

  ## 🛠️ Troubleshooting

  ### Common Issues
  - **401/403**: Check Sinch Engage API credentials and permissions
  - **Invalid numbers**: Ensure E.164 format like `+61437536808`
  - **Missing "From"**: Node automatically uses default account number

  ### Phone Number Format
  - **Recommended**: E.164 international format (e.g., `+61437536808`)
  - **Local formats**: Supported when the Country dropdown is selected (e.g., `0437536808` with Australia selected)
  - **Validation**: Node automatically normalizes and validates numbers

  ## 🔧 Technical Details

  ### Sinch Engage API Integration
  - **Endpoint**: `https://api.messagemedia.com/v1/messages`
  - **Authentication**: Basic auth with API Key/Secret
  - **Request Format**: JSON with messages array
  - **Response**: Includes message_id, status, and delivery information

  ### Phone Number Handling
  - **E.164 normalization** for consistent formatting
  - **Encoding detection** (GSM7 vs UCS-2) for optimal delivery
  - **Validation** with helpful error messages

  ## 📦 Version History

  See [CHANGELOG.md](CHANGELOG.md) for detailed version history.

  ### Release Channels

  This package follows semantic versioning with pre-release tags:

  - **Alpha** (`1.x.x-alpha.x`) - Internal testing and development builds
    - Experimental features and breaking changes
    - For team testing in isolated n8n instances
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage@alpha`

  - **Beta** (`1.x.x-beta.x`) - Public preview releases
    - Feature-complete but undergoing final testing
    - Safe for non-production workflows
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage@beta`

  - **General Availability** (`1.x.x`) - Production-ready releases
    - Stable, fully tested, and verified by n8n
    - Recommended for production use
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage` (latest stable)

  **Current Version**: `1.0.0-alpha.14` - Alpha testing phase

  ### Version Strategy
  - **Major** (x.0.0): Breaking changes, major feature overhauls
  - **Minor** (1.x.0): New features, non-breaking enhancements
  - **Patch** (1.0.x): Bug fixes, documentation updates
  - **Pre-release**: `-alpha.x`, `-beta.x`, `-rc.x` for testing phases

  ## 🤝 Contributing

  This is a community node for n8n, focused on providing a clean, reliable Sinch Engage SMS integration. Feel free to contribute improvements, bug fixes, or enhancements!

  ## 📄 License

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

  ## 🔗 Links

  - **Sinch Engage Website**: [https://sinch.com/engage/](https://sinch.com/engage)
  - **Sinch Engage API Documentation**: [https://messagemedia.github.io/documentation/](https://messagemedia.github.io/documentation/)
  - **n8n Community Nodes**: [https://n8n.io/community/nodes/](https://n8n.io/community/nodes/)

ai_documentation_summary:
  {"purpose":"Enables sending SMS messages and managing communications via the Sinch Engage platform through a clean, focused n8n interface.","capabilities":["Send SMS messages globally","Optional sender number configuration (uses default if blank)","Automatic phone number normalization to E.164 format","Encoding detection (GSM7 vs UCS-2)","Delivery status callbacks via webhook URLs","Rich media support (MMS capabilities)","Robust error handling and validation"],"authentication":"API key and secret required (Basic Auth)","commonUseCases":["Transactional SMS notifications","Marketing message campaigns","Two-factor authentication (2FA) codes","Customer support responses"],"limitations":["Currently in alpha testing phase (1.0.0-alpha.14)","Requires n8n version 1.0.0 or later","Message content limited to 1600 characters"],"relatedNodes":[]}


node_type: @sinch-engage/n8n-nodes-sinch-engage.sinchEngageTrigger
package_name: @sinch-engage/n8n-nodes-sinch-engage
display_name: Sinch Engage Trigger
description: Receive Sinch Engage events via webhook
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: yuying_pei
author_github_url: https://github.com/messagemedia/n8n-engage.git
npm_package_name: @sinch-engage/n8n-nodes-sinch-engage
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:33.968Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-sinch-engage

  Community node for n8n to send SMS via Sinch Engage with a clean, focused interface.

  ## Installation

  1. In your n8n instance, go to **Settings > Community Nodes**
  2. Click **Install a community node**
  3. Enter: `@sinch-engage/n8n-nodes-sinch-engage`
  4. Click **Install**

  **Compatibility**: Requires n8n version 1.0.0 or later.

  ## ✨ Features
  - **Sinch Engage SMS integration** - SMS provider with global reach `https://sinch.com/engage/`
  - **Clean, simple UI** - No complex provider selection or credential confusion
  - **Optional sender number** - Uses default account number if "From" field is blank
  - **Phone number normalization** to E.164 format and encoding detection (GSM7 vs UCS-2)
  - **Robust error handling** and validation

  ## 🎯 Node Configuration

  ### Basic Information
  - **Display Name**: Sinch Engage
  - **Name**: `SinchEngage`
  - **Group**: `output`
  - **Inputs**: `main`
  - **Outputs**: `main`

  ### Field Structure

  The node provides a clean, focused interface with logical field organization:

  #### 1. **Sinch Engage API Credentials**
  - **Required**: Sinch Engage API Key and Secret
  - **Single credential field** - No confusion about which credentials to use

  #### 2. **Message Details**
  - **To** (required) - Destination phone number in E.164 format
  - **From** (optional) - Sender phone number (uses default account number if blank)
  - **Message** (required, up to 1600 characters) - SMS content

  #### 3. **Additional Fields**
  - **Status Callback URL** - Webhook URL for delivery status updates
  - **Encoding**: auto | GSM7 | UCS-2 (auto-detects by default)

  ## 🔐 Credentials

  ### Sinch Engage API
  - `apiKey` - Your Sinch Engage API Key
  - `apiSecret` - Your Sinch Engage API Secret

  ## 📱 Sinch Engage Integration

  ### API Endpoint
  - **URL**: `POST https://api.messagemedia.com/v1/messages`
  - **Auth**: Basic (API Key / Secret)
  - **Body**: `{ messages: [ { content, destination_number, source_number } ] }`

  ### Field Mapping
  - **`to`** → **`destination_number`** (required)
  - **`message`** → **`content`** (required)
  - **`from`** → **`source_number`** (optional - uses default account number if blank)

  ### Features
  - **Australian focus** with global SMS capabilities
  - **Optional source number** - automatically uses account default if not specified
  - **Delivery reports** via webhook callbacks
  - **Rich media support** (MMS capabilities)

  ## 🔄 Field Behavior

  ### When "From" field is provided:
  - ✅ Sender number is included in API request
  - ✅ Uses the specified number as source

  ### When "From" field is blank:
  - ✅ No source_number sent to API
  - ✅ Sinch Engage uses default account number
  - ✅ Ideal for single-account setups

  ## 📋 Example Workflow

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "to": "+61437536808",
          "message": "Hello from n8n!",
          "additionalFields": {
            "statusCallbackUrl": "https://your-webhook.com/sms-status"
          }
        },
        "type": "@sinch-engage/n8n-nodes-sinch-engage.sinchEngage",
        "typeVersion": 1,
        "name": "Sinch Engage SMS Sender"
      }
    ]
  }
  ```

  ## 🛠️ Troubleshooting

  ### Common Issues
  - **401/403**: Check Sinch Engage API credentials and permissions
  - **Invalid numbers**: Ensure E.164 format like `+61437536808`
  - **Missing "From"**: Node automatically uses default account number

  ### Phone Number Format
  - **Recommended**: E.164 international format (e.g., `+61437536808`)
  - **Local formats**: Supported when the Country dropdown is selected (e.g., `0437536808` with Australia selected)
  - **Validation**: Node automatically normalizes and validates numbers

  ## 🔧 Technical Details

  ### Sinch Engage API Integration
  - **Endpoint**: `https://api.messagemedia.com/v1/messages`
  - **Authentication**: Basic auth with API Key/Secret
  - **Request Format**: JSON with messages array
  - **Response**: Includes message_id, status, and delivery information

  ### Phone Number Handling
  - **E.164 normalization** for consistent formatting
  - **Encoding detection** (GSM7 vs UCS-2) for optimal delivery
  - **Validation** with helpful error messages

  ## 📦 Version History

  See [CHANGELOG.md](CHANGELOG.md) for detailed version history.

  ### Release Channels

  This package follows semantic versioning with pre-release tags:

  - **Alpha** (`1.x.x-alpha.x`) - Internal testing and development builds
    - Experimental features and breaking changes
    - For team testing in isolated n8n instances
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage@alpha`

  - **Beta** (`1.x.x-beta.x`) - Public preview releases
    - Feature-complete but undergoing final testing
    - Safe for non-production workflows
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage@beta`

  - **General Availability** (`1.x.x`) - Production-ready releases
    - Stable, fully tested, and verified by n8n
    - Recommended for production use
    - Install: `npm install @sinch-engage/n8n-nodes-sinch-engage` (latest stable)

  **Current Version**: `1.0.0-alpha.14` - Alpha testing phase

  ### Version Strategy
  - **Major** (x.0.0): Breaking changes, major feature overhauls
  - **Minor** (1.x.0): New features, non-breaking enhancements
  - **Patch** (1.0.x): Bug fixes, documentation updates
  - **Pre-release**: `-alpha.x`, `-beta.x`, `-rc.x` for testing phases

  ## 🤝 Contributing

  This is a community node for n8n, focused on providing a clean, reliable Sinch Engage SMS integration. Feel free to contribute improvements, bug fixes, or enhancements!

  ## 📄 License

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

  ## 🔗 Links

  - **Sinch Engage Website**: [https://sinch.com/engage/](https://sinch.com/engage)
  - **Sinch Engage API Documentation**: [https://messagemedia.github.io/documentation/](https://messagemedia.github.io/documentation/)
  - **n8n Community Nodes**: [https://n8n.io/community/nodes/](https://n8n.io/community/nodes/)

ai_documentation_summary:
  {"purpose":"Sends SMS messages via the Sinch Engage API with support for optional sender numbers, automatic phone number normalization, and delivery status callbacks.","capabilities":["Send SMS messages to global destinations","Optional sender number specification (defaults to account number if blank)","Automatic phone number normalization to E.164 format","Encoding detection (GSM7 vs UCS-2)","Delivery status callbacks via webhook","MMS (Rich media) support","Robust error handling and validation"],"authentication":"API key and secret required (Basic Auth)","commonUseCases":["Sending transactional SMS notifications","Two-factor authentication (2FA) codes","Marketing SMS campaigns","Order confirmation and shipping updates"],"limitations":["Currently in alpha testing phase (v1.0.0-alpha.14)","Requires n8n version 1.0.0 or later","Message content limited to 1600 characters","Phone numbers must be in E.164 format or require country selection for local formats"],"relatedNodes":[]}


node_type: n8n-nodes-pinbridge.pinBridge
package_name: n8n-nodes-pinbridge
display_name: PinBridge
description: Publish, schedule, and manage Pinterest workflows through the PinBridge API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: pinbridge
author_github_url: https://github.com/pinbridge/
npm_package_name: n8n-nodes-pinbridge
npm_version: 1.2.12
community_fetched_at: 2026-07-14T14:40:33.972Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "pins",
      "options": [
        {
          "name": "Asset",
          "value": "assets"
        },
        {
          "name": "Board",
          "value": "boards"
        },
        {
          "name": "Connection",
          "value": "connections"
        },
        {
          "name": "Pin",
          "value": "pins"
        },
        {
          "name": "Rate Meter",
          "value": "rateMeter"
        },
        {
          "name": "Schedule",
          "value": "schedules"
        },
        {
          "name": "Term",
          "value": "terms"
        },
        {
          "name": "Webhook",
          "value": "webhooks"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadImage",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an asset"
        },
        {
          "name": "Upload Image",
          "value": "uploadImage",
          "action": "Upload an image asset"
        },
        {
          "name": "Upload Video",
          "value": "uploadVideo",
          "action": "Upload a video asset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assets"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a board"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a board"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List boards"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "boards"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listRelated",
      "options": [
        {
          "name": "List Related",
          "value": "listRelated",
          "action": "List related terms"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "terms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a pin"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a pin"
        },
        {
          "name": "Get Import",
          "value": "getImport",
          "action": "Get a bulk import job"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get a pin job status"
        },
        {
          "name": "Import CSV",
          "value": "importCsv",
          "action": "Import pins from a CSV file"
        },
        {
          "name": "Import JSON",
          "value": "importJson",
          "action": "Import pins from incoming JSON items"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List pins"
        },
        {
          "name": "List Imports",
          "value": "listImports",
          "action": "List bulk import jobs"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a pin"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pins"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel a schedule"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a schedule"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a schedule"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List schedules"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "schedules"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Complete OAuth Callback",
          "value": "completeOAuth",
          "action": "Complete Pinterest OAuth callback"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List connected Pinterest accounts"
        },
        {
          "name": "Revoke",
          "value": "revoke",
          "action": "Revoke a connected Pinterest account"
        },
        {
          "name": "Start OAuth",
          "value": "startOAuth",
          "action": "Start Pinterest OAuth flow"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connections"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get rate meter status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rateMeter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "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"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List webhooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhooks"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an asset",
      "resource": "assets"
    },
    {
      "name": "Upload Image",
      "value": "uploadImage",
      "action": "Upload an image asset",
      "resource": "assets"
    },
    {
      "name": "Upload Video",
      "value": "uploadVideo",
      "action": "Upload a video asset",
      "resource": "assets"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a board",
      "resource": "boards"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a board",
      "resource": "boards"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List boards",
      "resource": "boards"
    },
    {
      "name": "List Related",
      "value": "listRelated",
      "action": "List related terms",
      "resource": "terms"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a pin",
      "resource": "pins"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a pin",
      "resource": "pins"
    },
    {
      "name": "Get Import",
      "value": "getImport",
      "action": "Get a bulk import job",
      "resource": "pins"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get a pin job status",
      "resource": "pins"
    },
    {
      "name": "Import CSV",
      "value": "importCsv",
      "action": "Import pins from a CSV file",
      "resource": "pins"
    },
    {
      "name": "Import JSON",
      "value": "importJson",
      "action": "Import pins from incoming JSON items",
      "resource": "pins"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List pins",
      "resource": "pins"
    },
    {
      "name": "List Imports",
      "value": "listImports",
      "action": "List bulk import jobs",
      "resource": "pins"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a pin",
      "resource": "pins"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel a schedule",
      "resource": "schedules"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a schedule",
      "resource": "schedules"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a schedule",
      "resource": "schedules"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List schedules",
      "resource": "schedules"
    },
    {
      "name": "Complete OAuth Callback",
      "value": "completeOAuth",
      "action": "Complete Pinterest OAuth callback",
      "resource": "connections"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List connected Pinterest accounts",
      "resource": "connections"
    },
    {
      "name": "Revoke",
      "value": "revoke",
      "action": "Revoke a connected Pinterest account",
      "resource": "connections"
    },
    {
      "name": "Start OAuth",
      "value": "startOAuth",
      "action": "Start Pinterest OAuth flow",
      "resource": "connections"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get rate meter status",
      "resource": "rateMeter"
    },
    {
      "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",
      "resource": "webhooks"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List webhooks",
      "resource": "webhooks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "resource": "webhooks"
    }
  ]

npm_readme:
  # n8n-nodes-pinbridge

  PinBridge community node for n8n. It publishes, schedules, and manages Pinterest workflows through the PinBridge API.

  This repo targets PinBridge v1.2.3.

  ## Features

  - Credentials: PinBridge API Key + Base URL
  - Boards:
    - Create Board
    - Delete Board
    - List Boards
    - Board dropdown via loadOptions
  - Terms:
    - List Related Terms
    - Optional exact-match filtering
  - Pins:
    - Delete Pin
    - Get Pin
    - Get Import
    - Import CSV
    - Import JSON
    - List Pins
    - List Imports
    - Publish Pin (item-by-item bulk from incoming n8n items)
    - Get Pin Status (job status)
  - Assets:
    - Upload Image
    - Upload Video
    - Get Asset
  - Schedules:
    - Create Schedule
    - Get Schedule
    - List Schedules
    - Cancel Schedule
  - Connections:
    - Start OAuth
    - Complete OAuth Callback
    - List connected Pinterest accounts
    - Revoke connected Pinterest account
  - Rate Meter:
    - Get rate limit status for a connected account
  - Webhooks:
    - Create Webhook
    - Delete Webhook
    - Get Webhook
    - List Webhooks
    - Update Webhook

  ## Authentication

  PinBridge accepts:

  - `X-API-Key: <key>`
  - `Authorization: Bearer <jwt-or-api-key>`

  This node uses `X-API-Key`.

  ## Installation (self-hosted n8n)

  1. In your n8n custom nodes environment, install the package:

  ```bash
  npm install n8n-nodes-pinbridge
  ```

  2. Restart n8n.

  3. In n8n, create credentials:
  - **Credential type**: `PinBridge API Key`
  - **Base URL**: `https://api.pinbridge.io` (or your self-hosted API URL)
  - **API Key**: your PinBridge API key

  If you do not already have a key, create one from your PinBridge setup flow (dashboard/API, depending on your deployment).

  ## Operations

  ### Connections -> List
  Calls `GET /v1/pinterest/accounts`.

  ### Connections -> Start OAuth
  Calls `GET /v1/pinterest/oauth/start`.

  ### Connections -> Complete OAuth Callback
  Calls `GET /v1/pinterest/oauth/callback?code=...&state=...`.

  ### Connections -> Revoke
  Calls `DELETE /v1/pinterest/accounts/{account_id}`.

  ### Boards -> List
  Calls `GET /v1/pinterest/boards?account_id=...`.

  ### Boards -> Create
  Calls `POST /v1/pinterest/boards`.

  ### Boards -> Delete
  Calls `DELETE /v1/pinterest/boards/{board_id}?account_id=...`.

  ### Terms -> List Related
  Calls `GET /v1/pinterest/terms/related?account_id=...&terms=...&exact_match=...`.
  `Terms` accepts a comma-separated list. `Exact Match` keeps only groups whose returned `term`
  exactly matches one requested term after PinBridge normalization.

  ### Assets -> Upload Image
  Calls `POST /v1/assets/images` with `multipart/form-data` from an incoming n8n binary property.

  ### Assets -> Upload Video
  Calls `POST /v1/assets/videos` with `multipart/form-data` from an incoming n8n binary property.

  ### Assets -> Get
  Calls `GET /v1/assets/{asset_id}`.

  ### Pins -> Publish
  Calls `POST /v1/pins` with:
  - `account_id`
  - `board_id`
  - `title` (max 100 chars)
  - `description` (optional, max 800 chars)
  - `link_url` (optional, max 2048 chars)
  - `alt_text` (optional, max 500 chars)
  - `related_terms` (optional)
  - `dominant_color` (optional, hex)
  - `image_url` or `asset_id`
  - `cover_image_url` or `cover_image_asset_id` (optional, video pins)
  - `idempotency_key`

  Idempotency key defaults to `{{$execution.id}}-{{$itemIndex}}`.

  ### Pins -> Get
  Calls `GET /v1/pins/{pin_id}`.

  ### Pins -> List
  Calls `GET /v1/pins`.

  ### Pins -> Get Status
  Calls `GET /v1/jobs/{job_id}`.

  ### Pins -> Import JSON
  Calls `POST /v1/pins/imports/json`.
  Rows can optionally include `run_at` as an absolute ISO 8601 timestamp with timezone offset.
  Rows without `run_at` are queued for immediate publishing.

  ### Pins -> Import CSV
  Calls `POST /v1/pins/imports/csv`.
  `run_at` column is optional per row (same behavior as JSON import).

  ### Pins -> Get Import
  Calls `GET /v1/pins/imports/{job_id}`.

  ### Pins -> List Imports
  Calls `GET /v1/pins/imports`.
  Optional filters:
  - `status` (`queued`, `processing`, `completed`, `completed_with_errors`, `failed`)
  - `source_type` (`json`, `csv`)

  ### Pins -> Delete
  Calls `DELETE /v1/pins/{pin_id}`.

  ### Schedules -> Create
  Calls `POST /v1/schedules` with:
  - `title` (max 100 chars)
  - `description` (optional, max 800 chars)
  - `link_url` (optional, max 2048 chars)
  - `image_url` or `asset_id`
  - `cover_image_url` or `cover_image_asset_id` (optional, video pins)
  `Run At` must be an absolute ISO 8601 timestamp with timezone offset.

  ### Schedules -> Get
  Calls `GET /v1/schedules/{schedule_id}`.

  ### Schedules -> List
  Calls `GET /v1/schedules`.

  ### Schedules -> Cancel
  Calls `POST /v1/schedules/{schedule_id}/cancel`.

  ### Rate Meter -> Get
  Calls `GET /v1/rate-meter?account_id=...`.

  ### Webhooks -> Create
  Calls `POST /v1/webhooks`.

  ### Webhooks -> List
  Calls `GET /v1/webhooks`.

  ### Webhooks -> Get
  Calls `GET /v1/webhooks/{webhook_id}`.

  ### Webhooks -> Update
  Calls `PATCH /v1/webhooks/{webhook_id}`.

  ### Webhooks -> Delete
  Calls `DELETE /v1/webhooks/{webhook_id}`.

  ## Notes

  - Upload Image is the recommended path when your source image is already present in the n8n workflow as binary data.
  - Upload Video is the recommended path for video pins because PinBridge publishes videos from uploaded assets.
  - Plan/billing errors may return structured details under `detail.error` (`code`, `message`, `upgrade_url`).
  - This node intentionally focuses on publishing workflows and does not include admin, password-reset, or billing-management endpoints.

  ## Example workflows

  ### 1) Upload a binary image and publish by asset ID
  1. Set `resource=Assets`, `operation=Upload Image`.
  2. Point `Binary Property` to the incoming image data.
  3. Feed the returned `id` into a second PinBridge node with `resource=Pins`, `operation=Publish`, and `Media Source=Uploaded Asset`.

  ### 2) Upload a binary video and publish by asset ID
  1. Set `resource=Assets`, `operation=Upload Video`.
  2. Point `Binary Property` to the incoming video data.
  3. Feed the returned `id` into a second PinBridge node with `resource=Pins`, `operation=Publish`, and `Media Source=Uploaded Asset`.

  ### 3) Publish one pin from image URL + link
  1. Set `resource=Pins`, `operation=Publish`.
  2. Choose Connection and Board.
  3. Set `Media Source=Public Image URL`.
  4. Fill `Title`, `Image URL`, optional `Link URL` and `Description`.
  4. Execute node.

  ### 4) Publish multiple pins via SplitInBatches
  1. Feed a list of pin payload items into `SplitInBatches`.
  2. Map fields into PinBridge Publish parameters with expressions.
  3. Keep default idempotency key or map your own unique key per item.
  4. Each incoming item publishes one pin.

  ### 5) Poll status after publish
  1. Use Publish output `id`.
  2. Add another PinBridge node with `resource=Pins`, `operation=Get Status` and `Pin ID={{$json.id}}`.
  3. Optional: place `Wait` + loop until status is `published` or `failed`.

  ### 6) Schedule a future publish
  1. Set `resource=Schedules`, `operation=Create`.
  2. Choose Connection and Board.
  3. Choose `Media Source=Uploaded Asset` or `Public Image URL`.
  4. Fill `Run At`, `Title`, and the relevant media field plus optional metadata.
  4. Use the returned schedule ID for later status or cancellation steps.

  ### 7) Check rate limit headroom before publishing
  1. Set `resource=Rate Meter`, `operation=Get`.
  2. Choose the Connection.
  3. Branch in n8n based on `accountTokensAvailable` or `globalTokensAvailable`.

  ## Limitations

  - This node targets PinBridge v1 API endpoints only.
  - Admin, billing-management, and password-reset endpoints are not included.
  - Upload Image and Upload Video operations require an incoming binary property in the n8n workflow.
  - Rate limits are governed by your PinBridge plan and the underlying Pinterest API quotas.

  ## Support

  - Bug reports and feature requests: [GitHub Issues](https://github.com/pinbridge/n8n-nodes-pinbridge/issues)
  - General questions: [contact@pinbridge.io](mailto:contact@pinbridge.io)
  - PinBridge product: [https://pinbridge.io](https://pinbridge.io)

  ## Development

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

  ## License

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

ai_documentation_summary:
  {"purpose":"Manages Pinterest workflows by publishing, scheduling, and organizing pins, boards, and assets through the PinBridge API.","capabilities":["Create, list, and delete Pinterest boards","Publish pins item-by-item or via bulk import (JSON/CSV)","Upload and manage images and videos as assets","Create, list, and cancel scheduled pins","Connect and revoke Pinterest OAuth accounts","Monitor rate limits for connected accounts","Create, update, and manage webhooks","Retrieve pin status and job details","Filter related terms for pin metadata"],"authentication":"API key required (X-API-Key header)","commonUseCases":["Automated social media posting to Pinterest","Bulk import of pins from CSV or JSON files","Scheduled content publishing workflows","Dynamic pin creation from n8n binary assets","Pinterest account management and OAuth handling"],"limitations":["Does not include admin, password-reset, or billing-management endpoints","Title, description, and link_url fields have specific character limits (100, 800, and 2048 respectively)","Requires external PinBridge API key and account setup"],"relatedNodes":[]}


node_type: n8n-nodes-vocallabs.vocallabs
package_name: n8n-nodes-vocallabs
display_name: VocalLabs
description: Interact with VocalLabs AI Voice Calling API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: vocallabs
author_github_url: https://github.com/Vocallabsai/
npm_package_name: n8n-nodes-vocallabs
npm_version: 2.4.0
community_fetched_at: 2026-07-14T14:40:33.975Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "agent",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Analytics",
          "value": "analytics"
        },
        {
          "name": "Call",
          "value": "call"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Contact",
          "value": "contacts"
        },
        {
          "name": "Dashboard",
          "value": "dashboard"
        },
        {
          "name": "Identity",
          "value": "identity"
        },
        {
          "name": "Library",
          "value": "library"
        },
        {
          "name": "Marketplace",
          "value": "marketplace"
        },
        {
          "name": "SIP",
          "value": "sip"
        },
        {
          "name": "Wallet",
          "value": "wallet"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDashboardStats",
      "options": [
        {
          "name": "Get Dashboard Stats",
          "value": "getDashboardStats",
          "action": "Get dashboard statistics",
          "description": "Retrieve dashboard statistics"
        },
        {
          "name": "Get Tokens",
          "value": "getTokens",
          "action": "Get tokens",
          "description": "Retrieve available tokens"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dashboard"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get wallet balance",
          "description": "Retrieve current wallet balance"
        },
        {
          "name": "Get Transaction History",
          "value": "getTransactionHistory",
          "action": "Get transaction history",
          "description": "Retrieve wallet transaction history"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wallet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createSIPCall",
      "options": [
        {
          "name": "Create SIP Call",
          "value": "createSIPCall",
          "action": "Create a SIP call",
          "description": "Initiate a new SIP call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sip"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "initiateCall",
      "options": [
        {
          "name": "Initiate Call",
          "value": "initiateCall",
          "action": "Initiate a call",
          "description": "Start a new call"
        },
        {
          "name": "Create Direct Call",
          "value": "createDirectCall",
          "action": "Create a direct call",
          "description": "Initiate a direct call to a phone number using a client token"
        },
        {
          "name": "Get Call Details",
          "value": "getCallDetails",
          "action": "Get call details",
          "description": "Retrieve details for a specific call"
        },
        {
          "name": "Get Voices",
          "value": "getVoices",
          "action": "Get available voices",
          "description": "Retrieve list of available voices"
        },
        {
          "name": "Get Call API Tokens",
          "value": "getCallAPITokens",
          "action": "Get call API tokens",
          "description": "Retrieve call API tokens"
        },
        {
          "name": "Call API",
          "value": "callAPI",
          "action": "Call API",
          "description": "Initiate call via webhook"
        },
        {
          "name": "Get Call Timeline",
          "value": "getCallTimeline",
          "action": "Get call timeline",
          "description": "Retrieve call timeline history"
        },
        {
          "name": "Get Daily Calls",
          "value": "getDailyCalls",
          "action": "Get daily calls",
          "description": "Retrieve daily call statistics"
        },
        {
          "name": "Get WebSocket URL",
          "value": "getWebsocketUrl",
          "action": "Get WebSocket URL",
          "description": "Get WebSocket connection URL"
        },
        {
          "name": "Get Audit",
          "value": "getAudit",
          "action": "Get audit details",
          "description": "Retrieve audit details for a call"
        },
        {
          "name": "Get All Audits",
          "value": "getAllAudits",
          "action": "Get all audits",
          "description": "Retrieve all audit records"
        },
        {
          "name": "Upload Audio",
          "value": "uploadAudio",
          "action": "Upload audio",
          "description": "Upload audio files for auditing"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAgents",
      "options": [
        {
          "name": "Get Agents",
          "value": "getAgents",
          "action": "Get all agents",
          "description": "Retrieve list of AI agents"
        },
        {
          "name": "Get Agent By ID",
          "value": "getAgentById",
          "action": "Get agent by ID",
          "description": "Retrieve a specific agent by ID"
        },
        {
          "name": "Create Agent",
          "value": "createAgent",
          "action": "Create a new agent",
          "description": "Create a new AI agent"
        },
        {
          "name": "Update Agent",
          "value": "updateAgent",
          "action": "Update agent",
          "description": "Update an existing agent"
        },
        {
          "name": "Get Agent Templates",
          "value": "getAgentTemplates",
          "action": "Get agent templates",
          "description": "Retrieve available agent templates"
        },
        {
          "name": "Get Voices By Language",
          "value": "getVoicesByLanguage",
          "action": "Get voices by language",
          "description": "Retrieve available voices for a language"
        },
        {
          "name": "Toggle Favorite",
          "value": "toggleFavorite",
          "action": "Toggle favorite status",
          "description": "Toggle agent favorite status"
        },
        {
          "name": "Update Agent Visibility",
          "value": "updateAgentShared",
          "action": "Update agent visibility",
          "description": "Update agent shared/visibility status"
        },
        {
          "name": "Get Agent Prompt History",
          "value": "agentPromptHistory",
          "action": "Get agent prompt history",
          "description": "Retrieve agent prompt history"
        },
        {
          "name": "Update Success Metric",
          "value": "updateSuccessMetric",
          "action": "Update success metric",
          "description": "Update agent success metrics"
        },
        {
          "name": "Update WhatsApp Notification",
          "value": "updateWhatsappNotification",
          "action": "Update WhatsApp notification",
          "description": "Enable/disable WhatsApp notifications"
        },
        {
          "name": "Update Mail Notification",
          "value": "updateMailNotification",
          "action": "Update mail notification",
          "description": "Enable/disable email notifications"
        },
        {
          "name": "Get Agent Documents",
          "value": "getAgentDocuments",
          "action": "Get agent documents",
          "description": "Retrieve documents for an agent"
        },
        {
          "name": "Insert Agent Document",
          "value": "insertAgentDocument",
          "action": "Insert agent document",
          "description": "Add a document to an agent"
        },
        {
          "name": "Get AI Models",
          "value": "getAIModels",
          "action": "Get AI models",
          "description": "Retrieve available AI models"
        },
        {
          "name": "Get Agent Actions",
          "value": "getAgentActions",
          "action": "Get agent actions",
          "description": "Retrieve agent action configurations"
        },
        {
          "name": "Update Agent Reschedule",
          "value": "updateAgentReschedule",
          "action": "Update agent reschedule",
          "description": "Enable/disable agent rescheduling"
        },
        {
          "name": "Get Keyword Replacements",
          "value": "getKeywordReplacements",
          "action": "Get keyword replacements",
          "description": "Retrieve keyword replacements for an agent"
        },
        {
          "name": "Get Agent Keywords",
          "value": "getAgentKeywords",
          "action": "Get agent keywords",
          "description": "Retrieve keywords for an agent"
        },
        {
          "name": "Add Keyword",
          "value": "addKeyword",
          "action": "Add keyword",
          "description": "Add a new keyword replacement"
        },
        {
          "name": "Update Keyword",
          "value": "updateKeyword",
          "action": "Update keyword",
          "description": "Update an existing keyword replacement"
        },
        {
          "name": "Delete Keyword",
          "value": "deleteKeyword",
          "action": "Delete keyword",
          "description": "Delete a keyword replacement"
        },
        {
          "name": "Get Template",
          "value": "getTemplate",
          "action": "Get template",
          "description": "Retrieve a specific agent template"
        },
        {
          "name": "Get Agent Samples",
          "value": "getAgentSamples",
          "action": "Get agent samples",
          "description": "Retrieve sample data for an agent"
        },
        {
          "name": "Get Agent FAQs",
          "value": "getAgentFaq",
          "action": "Get agent FAQs",
          "description": "Retrieve FAQs for an agent"
        },
        {
          "name": "Manage Agent FAQ",
          "value": "manageAgentFaq",
          "action": "Manage agent FAQ",
          "description": "Insert, update, or delete agent FAQ"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCallStatuses",
      "options": [
        {
          "name": "Get Call Statuses",
          "value": "getCallStatuses",
          "action": "Get call statuses",
          "description": "Retrieve all call statuses"
        },
        {
          "name": "Get Call Conversation",
          "value": "getCallConversation",
          "action": "Get call conversation",
          "description": "Retrieve conversation for a specific call"
        },
        {
          "name": "Get Call Data",
          "value": "getCallData",
          "action": "Get call data",
          "description": "Retrieve data for a specific call"
        },
        {
          "name": "Get Call Status",
          "value": "getCallStatus",
          "action": "Get call status",
          "description": "Retrieve status for a specific call"
        },
        {
          "name": "Get Call Summary",
          "value": "getCallSummary",
          "action": "Get call summary",
          "description": "Retrieve summary for a specific call"
        },
        {
          "name": "Get Post Call Data",
          "value": "getPostCallData",
          "action": "Get post call data",
          "description": "Retrieve post-call data for an agent"
        },
        {
          "name": "Update Post Call Data",
          "value": "updatePostCallData",
          "action": "Update post call data",
          "description": "Update post-call data"
        },
        {
          "name": "Delete Post Call Data",
          "value": "deletePostCallData",
          "action": "Delete post call data",
          "description": "Delete post-call data"
        },
        {
          "name": "Get VocalLabs Call Data",
          "value": "getVocallabsCall",
          "action": "Get VocalLabs call data",
          "description": "Retrieve VocalLabs call data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analytics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Create Contact Group",
          "value": "createContactGroup",
          "action": "Create contact group",
          "description": "Create a new contact group"
        },
        {
          "name": "Create Contact In Group",
          "value": "createContactInGroup",
          "action": "Create contact in group",
          "description": "Add a contact to a group"
        },
        {
          "name": "Update Contact Metadata",
          "value": "updateContactMetadata",
          "action": "Update contact metadata",
          "description": "Update metadata for a contact"
        },
        {
          "name": "Get Contact Groups",
          "value": "getContactGroups",
          "action": "Get contact groups",
          "description": "Retrieve list of contact groups"
        },
        {
          "name": "Update Contact Group",
          "value": "updateContactGroup",
          "action": "Update contact group",
          "description": "Update an existing contact group"
        },
        {
          "name": "Delete Contact Group",
          "value": "deleteContactGroup",
          "action": "Delete contact group",
          "description": "Delete a contact group"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts",
          "description": "Retrieve list of contacts"
        },
        {
          "name": "Add Multiple Contacts",
          "value": "addMultipleContacts",
          "action": "Add multiple contacts",
          "description": "Add multiple contacts to a group"
        },
        {
          "name": "Get Contact Data",
          "value": "getContactData",
          "action": "Get contact data",
          "description": "Retrieve data for a contact"
        },
        {
          "name": "Update Contact Data",
          "value": "updateContactData",
          "action": "Update contact data",
          "description": "Update contact data"
        },
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get contact",
          "description": "Retrieve a specific contact"
        },
        {
          "name": "Create Contact Group V2",
          "value": "createContactGroupV2",
          "action": "Create contact group V2",
          "description": "Create a new contact group (V2)"
        },
        {
          "name": "Add Multiple Contacts V2",
          "value": "addMultipleContactsV2",
          "action": "Add multiple contacts V2",
          "description": "Add multiple contacts to a group (V2)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contacts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getActions",
      "options": [
        {
          "name": "Get Actions",
          "value": "getActions",
          "action": "Get actions",
          "description": "Retrieve list of actions"
        },
        {
          "name": "Create Action",
          "value": "createAction",
          "action": "Create action",
          "description": "Create a new action"
        },
        {
          "name": "Update Action",
          "value": "updateAction",
          "action": "Update action",
          "description": "Update an existing action"
        },
        {
          "name": "Delete Action",
          "value": "deleteAction",
          "action": "Delete action",
          "description": "Delete an action"
        },
        {
          "name": "Get Documents",
          "value": "getDocuments",
          "action": "Get documents",
          "description": "Retrieve list of documents"
        },
        {
          "name": "Delete Document",
          "value": "deleteDocument",
          "action": "Delete document",
          "description": "Delete a document"
        },
        {
          "name": "Get Action Templates",
          "value": "getActionTemplates",
          "action": "Get action templates",
          "description": "Retrieve available action templates"
        },
        {
          "name": "Get Action Template Details",
          "value": "getActionTemplateDetails",
          "action": "Get action template details",
          "description": "Retrieve details for an action template"
        },
        {
          "name": "Get Action Parameters",
          "value": "getActionParameters",
          "action": "Get action parameters",
          "description": "Retrieve parameters for an action"
        },
        {
          "name": "Get Action Fields",
          "value": "getActionFields",
          "action": "Get action fields",
          "description": "Retrieve fields for an action"
        },
        {
          "name": "Get Action Configuration",
          "value": "getActionConfiguration",
          "action": "Get action configuration",
          "description": "Retrieve configuration for an action"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "library"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFlows",
      "options": [
        {
          "name": "Get Flows",
          "value": "getFlows",
          "action": "Get flows",
          "description": "Retrieve list of identity verification flows"
        },
        {
          "name": "Get Identity URL",
          "value": "getIdentityUrl",
          "action": "Get identity URL",
          "description": "Generate identity verification URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "identity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCampaigns",
      "options": [
        {
          "name": "Get Campaigns",
          "value": "getCampaigns",
          "action": "Get campaigns",
          "description": "Retrieve list of campaigns"
        },
        {
          "name": "Create Campaign",
          "value": "createCampaign",
          "action": "Create campaign",
          "description": "Create a new campaign"
        },
        {
          "name": "Update Campaign",
          "value": "updateCampaign",
          "action": "Update campaign",
          "description": "Update an existing campaign"
        },
        {
          "name": "Delete Campaign",
          "value": "deleteCampaign",
          "action": "Delete campaign",
          "description": "Delete a campaign"
        },
        {
          "name": "Get Queueing Details",
          "value": "getQueueingDetails",
          "action": "Get queueing details",
          "description": "Retrieve queueing details for a campaign"
        },
        {
          "name": "Get Campaign Status",
          "value": "getCampaignStatus",
          "action": "Get campaign status",
          "description": "Retrieve status of a campaign"
        },
        {
          "name": "Update Campaign Status",
          "value": "updateCampaignStatus",
          "action": "Update campaign status",
          "description": "Update campaign status (active/inactive)"
        },
        {
          "name": "Add Contacts to Campaign",
          "value": "addContactsToCampaign",
          "action": "Add contacts to campaign",
          "description": "Add contacts/groups to a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "fetchAvailableNumbers",
      "options": [
        {
          "name": "Fetch Available Numbers",
          "value": "fetchAvailableNumbers",
          "action": "Fetch available numbers",
          "description": "Retrieve list of available phone numbers"
        },
        {
          "name": "Get Your Numbers",
          "value": "getNumbers",
          "action": "Get your numbers",
          "description": "Retrieve your purchased phone numbers"
        },
        {
          "name": "Fetch Countries",
          "value": "fetchCountries",
          "action": "Fetch countries",
          "description": "Retrieve list of available countries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "marketplace"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Dashboard Stats",
      "value": "getDashboardStats",
      "action": "Get dashboard statistics",
      "description": "Retrieve dashboard statistics",
      "resource": "dashboard"
    },
    {
      "name": "Get Tokens",
      "value": "getTokens",
      "action": "Get tokens",
      "description": "Retrieve available tokens",
      "resource": "dashboard"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get wallet balance",
      "description": "Retrieve current wallet balance",
      "resource": "wallet"
    },
    {
      "name": "Get Transaction History",
      "value": "getTransactionHistory",
      "action": "Get transaction history",
      "description": "Retrieve wallet transaction history",
      "resource": "wallet"
    },
    {
      "name": "Create SIP Call",
      "value": "createSIPCall",
      "action": "Create a SIP call",
      "description": "Initiate a new SIP call",
      "resource": "sip"
    },
    {
      "name": "Initiate Call",
      "value": "initiateCall",
      "action": "Initiate a call",
      "description": "Start a new call",
      "resource": "call"
    },
    {
      "name": "Create Direct Call",
      "value": "createDirectCall",
      "action": "Create a direct call",
      "description": "Initiate a direct call to a phone number using a client token",
      "resource": "call"
    },
    {
      "name": "Get Call Details",
      "value": "getCallDetails",
      "action": "Get call details",
      "description": "Retrieve details for a specific call",
      "resource": "call"
    },
    {
      "name": "Get Voices",
      "value": "getVoices",
      "action": "Get available voices",
      "description": "Retrieve list of available voices",
      "resource": "call"
    },
    {
      "name": "Get Call API Tokens",
      "value": "getCallAPITokens",
      "action": "Get call API tokens",
      "description": "Retrieve call API tokens",
      "resource": "call"
    },
    {
      "name": "Call API",
      "value": "callAPI",
      "action": "Call API",
      "description": "Initiate call via webhook",
      "resource": "call"
    },
    {
      "name": "Get Call Timeline",
      "value": "getCallTimeline",
      "action": "Get call timeline",
      "description": "Retrieve call timeline history",
      "resource": "call"
    },
    {
      "name": "Get Daily Calls",
      "value": "getDailyCalls",
      "action": "Get daily calls",
      "description": "Retrieve daily call statistics",
      "resource": "call"
    },
    {
      "name": "Get WebSocket URL",
      "value": "getWebsocketUrl",
      "action": "Get WebSocket URL",
      "description": "Get WebSocket connection URL",
      "resource": "call"
    },
    {
      "name": "Get Audit",
      "value": "getAudit",
      "action": "Get audit details",
      "description": "Retrieve audit details for a call",
      "resource": "call"
    },
    {
      "name": "Get All Audits",
      "value": "getAllAudits",
      "action": "Get all audits",
      "description": "Retrieve all audit records",
      "resource": "call"
    },
    {
      "name": "Upload Audio",
      "value": "uploadAudio",
      "action": "Upload audio",
      "description": "Upload audio files for auditing",
      "resource": "call"
    },
    {
      "name": "Get Agents",
      "value": "getAgents",
      "action": "Get all agents",
      "description": "Retrieve list of AI agents",
      "resource": "agent"
    },
    {
      "name": "Get Agent By ID",
      "value": "getAgentById",
      "action": "Get agent by ID",
      "description": "Retrieve a specific agent by ID",
      "resource": "agent"
    },
    {
      "name": "Create Agent",
      "value": "createAgent",
      "action": "Create a new agent",
      "description": "Create a new AI agent",
      "resource": "agent"
    },
    {
      "name": "Update Agent",
      "value": "updateAgent",
      "action": "Update agent",
      "description": "Update an existing agent",
      "resource": "agent"
    },
    {
      "name": "Get Agent Templates",
      "value": "getAgentTemplates",
      "action": "Get agent templates",
      "description": "Retrieve available agent templates",
      "resource": "agent"
    },
    {
      "name": "Get Voices By Language",
      "value": "getVoicesByLanguage",
      "action": "Get voices by language",
      "description": "Retrieve available voices for a language",
      "resource": "agent"
    },
    {
      "name": "Toggle Favorite",
      "value": "toggleFavorite",
      "action": "Toggle favorite status",
      "description": "Toggle agent favorite status",
      "resource": "agent"
    },
    {
      "name": "Update Agent Visibility",
      "value": "updateAgentShared",
      "action": "Update agent visibility",
      "description": "Update agent shared/visibility status",
      "resource": "agent"
    },
    {
      "name": "Get Agent Prompt History",
      "value": "agentPromptHistory",
      "action": "Get agent prompt history",
      "description": "Retrieve agent prompt history",
      "resource": "agent"
    },
    {
      "name": "Update Success Metric",
      "value": "updateSuccessMetric",
      "action": "Update success metric",
      "description": "Update agent success metrics",
      "resource": "agent"
    },
    {
      "name": "Update WhatsApp Notification",
      "value": "updateWhatsappNotification",
      "action": "Update WhatsApp notification",
      "description": "Enable/disable WhatsApp notifications",
      "resource": "agent"
    },
    {
      "name": "Update Mail Notification",
      "value": "updateMailNotification",
      "action": "Update mail notification",
      "description": "Enable/disable email notifications",
      "resource": "agent"
    },
    {
      "name": "Get Agent Documents",
      "value": "getAgentDocuments",
      "action": "Get agent documents",
      "description": "Retrieve documents for an agent",
      "resource": "agent"
    },
    {
      "name": "Insert Agent Document",
      "value": "insertAgentDocument",
      "action": "Insert agent document",
      "description": "Add a document to an agent",
      "resource": "agent"
    },
    {
      "name": "Get AI Models",
      "value": "getAIModels",
      "action": "Get AI models",
      "description": "Retrieve available AI models",
      "resource": "agent"
    },
    {
      "name": "Get Agent Actions",
      "value": "getAgentActions",
      "action": "Get agent actions",
      "description": "Retrieve agent action configurations",
      "resource": "agent"
    },
    {
      "name": "Update Agent Reschedule",
      "value": "updateAgentReschedule",
      "action": "Update agent reschedule",
      "description": "Enable/disable agent rescheduling",
      "resource": "agent"
    },
    {
      "name": "Get Keyword Replacements",
      "value": "getKeywordReplacements",
      "action": "Get keyword replacements",
      "description": "Retrieve keyword replacements for an agent",
      "resource": "agent"
    },
    {
      "name": "Get Agent Keywords",
      "value": "getAgentKeywords",
      "action": "Get agent keywords",
      "description": "Retrieve keywords for an agent",
      "resource": "agent"
    },
    {
      "name": "Add Keyword",
      "value": "addKeyword",
      "action": "Add keyword",
      "description": "Add a new keyword replacement",
      "resource": "agent"
    },
    {
      "name": "Update Keyword",
      "value": "updateKeyword",
      "action": "Update keyword",
      "description": "Update an existing keyword replacement",
      "resource": "agent"
    },
    {
      "name": "Delete Keyword",
      "value": "deleteKeyword",
      "action": "Delete keyword",
      "description": "Delete a keyword replacement",
      "resource": "agent"
    },
    {
      "name": "Get Template",
      "value": "getTemplate",
      "action": "Get template",
      "description": "Retrieve a specific agent template",
      "resource": "agent"
    },
    {
      "name": "Get Agent Samples",
      "value": "getAgentSamples",
      "action": "Get agent samples",
      "description": "Retrieve sample data for an agent",
      "resource": "agent"
    },
    {
      "name": "Get Agent FAQs",
      "value": "getAgentFaq",
      "action": "Get agent FAQs",
      "description": "Retrieve FAQs for an agent",
      "resource": "agent"
    },
    {
      "name": "Manage Agent FAQ",
      "value": "manageAgentFaq",
      "action": "Manage agent FAQ",
      "description": "Insert, update, or delete agent FAQ",
      "resource": "agent"
    },
    {
      "name": "Get Call Statuses",
      "value": "getCallStatuses",
      "action": "Get call statuses",
      "description": "Retrieve all call statuses",
      "resource": "analytics"
    },
    {
      "name": "Get Call Conversation",
      "value": "getCallConversation",
      "action": "Get call conversation",
      "description": "Retrieve conversation for a specific call",
      "resource": "analytics"
    },
    {
      "name": "Get Call Data",
      "value": "getCallData",
      "action": "Get call data",
      "description": "Retrieve data for a specific call",
      "resource": "analytics"
    },
    {
      "name": "Get Call Status",
      "value": "getCallStatus",
      "action": "Get call status",
      "description": "Retrieve status for a specific call",
      "resource": "analytics"
    },
    {
      "name": "Get Call Summary",
      "value": "getCallSummary",
      "action": "Get call summary",
      "description": "Retrieve summary for a specific call",
      "resource": "analytics"
    },
    {
      "name": "Get Post Call Data",
      "value": "getPostCallData",
      "action": "Get post call data",
      "description": "Retrieve post-call data for an agent",
      "resource": "analytics"
    },
    {
      "name": "Update Post Call Data",
      "value": "updatePostCallData",
      "action": "Update post call data",
      "description": "Update post-call data",
      "resource": "analytics"
    },
    {
      "name": "Delete Post Call Data",
      "value": "deletePostCallData",
      "action": "Delete post call data",
      "description": "Delete post-call data",
      "resource": "analytics"
    },
    {
      "name": "Get VocalLabs Call Data",
      "value": "getVocallabsCall",
      "action": "Get VocalLabs call data",
      "description": "Retrieve VocalLabs call data",
      "resource": "analytics"
    },
    {
      "name": "Create Contact Group",
      "value": "createContactGroup",
      "action": "Create contact group",
      "description": "Create a new contact group",
      "resource": "contacts"
    },
    {
      "name": "Create Contact In Group",
      "value": "createContactInGroup",
      "action": "Create contact in group",
      "description": "Add a contact to a group",
      "resource": "contacts"
    },
    {
      "name": "Update Contact Metadata",
      "value": "updateContactMetadata",
      "action": "Update contact metadata",
      "description": "Update metadata for a contact",
      "resource": "contacts"
    },
    {
      "name": "Get Contact Groups",
      "value": "getContactGroups",
      "action": "Get contact groups",
      "description": "Retrieve list of contact groups",
      "resource": "contacts"
    },
    {
      "name": "Update Contact Group",
      "value": "updateContactGroup",
      "action": "Update contact group",
      "description": "Update an existing contact group",
      "resource": "contacts"
    },
    {
      "name": "Delete Contact Group",
      "value": "deleteContactGroup",
      "action": "Delete contact group",
      "description": "Delete a contact group",
      "resource": "contacts"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete contact",
      "description": "Delete a contact",
      "resource": "contacts"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts",
      "description": "Retrieve list of contacts",
      "resource": "contacts"
    },
    {
      "name": "Add Multiple Contacts",
      "value": "addMultipleContacts",
      "action": "Add multiple contacts",
      "description": "Add multiple contacts to a group",
      "resource": "contacts"
    },
    {
      "name": "Get Contact Data",
      "value": "getContactData",
      "action": "Get contact data",
      "description": "Retrieve data for a contact",
      "resource": "contacts"
    },
    {
      "name": "Update Contact Data",
      "value": "updateContactData",
      "action": "Update contact data",
      "description": "Update contact data",
      "resource": "contacts"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get contact",
      "description": "Retrieve a specific contact",
      "resource": "contacts"
    },
    {
      "name": "Create Contact Group V2",
      "value": "createContactGroupV2",
      "action": "Create contact group V2",
      "description": "Create a new contact group (V2)",
      "resource": "contacts"
    },
    {
      "name": "Add Multiple Contacts V2",
      "value": "addMultipleContactsV2",
      "action": "Add multiple contacts V2",
      "description": "Add multiple contacts to a group (V2)",
      "resource": "contacts"
    },
    {
      "name": "Get Actions",
      "value": "getActions",
      "action": "Get actions",
      "description": "Retrieve list of actions",
      "resource": "library"
    },
    {
      "name": "Create Action",
      "value": "createAction",
      "action": "Create action",
      "description": "Create a new action",
      "resource": "library"
    },
    {
      "name": "Update Action",
      "value": "updateAction",
      "action": "Update action",
      "description": "Update an existing action",
      "resource": "library"
    },
    {
      "name": "Delete Action",
      "value": "deleteAction",
      "action": "Delete action",
      "description": "Delete an action",
      "resource": "library"
    },
    {
      "name": "Get Documents",
      "value": "getDocuments",
      "action": "Get documents",
      "description": "Retrieve list of documents",
      "resource": "library"
    },
    {
      "name": "Delete Document",
      "value": "deleteDocument",
      "action": "Delete document",
      "description": "Delete a document",
      "resource": "library"
    },
    {
      "name": "Get Action Templates",
      "value": "getActionTemplates",
      "action": "Get action templates",
      "description": "Retrieve available action templates",
      "resource": "library"
    },
    {
      "name": "Get Action Template Details",
      "value": "getActionTemplateDetails",
      "action": "Get action template details",
      "description": "Retrieve details for an action template",
      "resource": "library"
    },
    {
      "name": "Get Action Parameters",
      "value": "getActionParameters",
      "action": "Get action parameters",
      "description": "Retrieve parameters for an action",
      "resource": "library"
    },
    {
      "name": "Get Action Fields",
      "value": "getActionFields",
      "action": "Get action fields",
      "description": "Retrieve fields for an action",
      "resource": "library"
    },
    {
      "name": "Get Action Configuration",
      "value": "getActionConfiguration",
      "action": "Get action configuration",
      "description": "Retrieve configuration for an action",
      "resource": "library"
    },
    {
      "name": "Get Flows",
      "value": "getFlows",
      "action": "Get flows",
      "description": "Retrieve list of identity verification flows",
      "resource": "identity"
    },
    {
      "name": "Get Identity URL",
      "value": "getIdentityUrl",
      "action": "Get identity URL",
      "description": "Generate identity verification URL",
      "resource": "identity"
    },
    {
      "name": "Get Campaigns",
      "value": "getCampaigns",
      "action": "Get campaigns",
      "description": "Retrieve list of campaigns",
      "resource": "campaign"
    },
    {
      "name": "Create Campaign",
      "value": "createCampaign",
      "action": "Create campaign",
      "description": "Create a new campaign",
      "resource": "campaign"
    },
    {
      "name": "Update Campaign",
      "value": "updateCampaign",
      "action": "Update campaign",
      "description": "Update an existing campaign",
      "resource": "campaign"
    },
    {
      "name": "Delete Campaign",
      "value": "deleteCampaign",
      "action": "Delete campaign",
      "description": "Delete a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Queueing Details",
      "value": "getQueueingDetails",
      "action": "Get queueing details",
      "description": "Retrieve queueing details for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Campaign Status",
      "value": "getCampaignStatus",
      "action": "Get campaign status",
      "description": "Retrieve status of a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update Campaign Status",
      "value": "updateCampaignStatus",
      "action": "Update campaign status",
      "description": "Update campaign status (active/inactive)",
      "resource": "campaign"
    },
    {
      "name": "Add Contacts to Campaign",
      "value": "addContactsToCampaign",
      "action": "Add contacts to campaign",
      "description": "Add contacts/groups to a campaign",
      "resource": "campaign"
    },
    {
      "name": "Fetch Available Numbers",
      "value": "fetchAvailableNumbers",
      "action": "Fetch available numbers",
      "description": "Retrieve list of available phone numbers",
      "resource": "marketplace"
    },
    {
      "name": "Get Your Numbers",
      "value": "getNumbers",
      "action": "Get your numbers",
      "description": "Retrieve your purchased phone numbers",
      "resource": "marketplace"
    },
    {
      "name": "Fetch Countries",
      "value": "fetchCountries",
      "action": "Fetch countries",
      "description": "Retrieve list of available countries",
      "resource": "marketplace"
    }
  ]

npm_readme:
  # n8n-nodes-vocallabs

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-vocallabs.svg)](https://www.npmjs.com/package/n8n-nodes-vocallabs)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![n8n compatibility](https://img.shields.io/badge/n8n-%3E%3D1.0.0-blue.svg)](https://n8n.io/)

  The official n8n community node for **[VocalLabs](https://vocallabs.ai)** — integrate AI-powered voice calling, agent management, and call analytics directly into your n8n workflows.

  [Website](https://vocallabs.ai) | [API Docs](https://docs.vocallabs.ai) | [GitHub](https://github.com/Vocallabsai/n8n-nodes-vocallabs) | [Support](mailto:hello@vocallabs.ai)

  ---

  ## Installation

  ### Community Nodes (Recommended)

  1. Open your n8n instance
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install a community node**
  4. Enter `n8n-nodes-vocallabs`
  5. Click **Install**

  ### Manual Install

  ```bash
  npm install n8n-nodes-vocallabs
  ```

  > **Important:** Whitelist your server's IP before using the node.
  > Follow the guide at [docs.vocallabs.ai/ip-whitelist](https://docs.vocallabs.ai/ip-whitelist).

  ---

  ## Getting Started

  ### 1. Get Your API Credentials

  1. Log in to your [VocalLabs Dashboard](https://app.vocallabs.ai)
  2. Navigate to **Settings** > **API Keys**
  3. Copy your **Client ID** and **Client Secret**

  ### 2. Configure in n8n

  1. Add the **VocalLabs** node to your workflow
  2. Click **Create New Credential**
  3. Enter your Client ID and Client Secret
  4. Click **Test** to verify your credentials are valid
  5. Save — authentication is handled automatically

  ### 3. Build Your Workflow

  Select a resource, pick an operation, fill in the parameters, and execute.

  ---

  ## Available Resources & Operations

  ### Dashboard
  | Operation | Description |
  |-----------|-------------|
  | Get Dashboard Stats | Retrieve usage metrics and overview |
  | Get Tokens | List available API tokens |

  ### Call
  | Operation | Description |
  |-----------|-------------|
  | Initiate Call | Start a new AI voice call |
  | Create Direct Call | Call via client token |
  | Get Call Details | Retrieve call information |
  | Get Voices | List available voice options |
  | Get Call API Tokens | Retrieve call tokens |
  | Call API (Webhook) | Initiate call via webhook |
  | Get Call Timeline | Call history with pagination |
  | Get Daily Calls | Daily call statistics |
  | Get WebSocket URL | Real-time call connection |
  | Get Audit | Retrieve single call audit |
  | Get All Audits | List all call audits |
  | Upload Audio | Upload audio files to agent |

  ### Agent
  | Operation | Description |
  |-----------|-------------|
  | Get Agents | List all AI agents |
  | Get Agent By ID | Retrieve agent details |
  | Create Agent | Create a new AI agent |
  | Update Agent | Modify agent configuration |
  | Get Agent Templates | Available agent templates |
  | Get Voices By Language | Language-specific voices |
  | Toggle Favorite | Mark/unmark agent as favorite |
  | Update Agent Shared | Set agent visibility |
  | Agent Prompt History | View prompt change history |
  | Update Success Metric | Configure success metrics |
  | Update WhatsApp Notification | Toggle WhatsApp alerts |
  | Update Mail Notification | Toggle email alerts |
  | Get Agent Documents | List agent documents |
  | Insert Agent Document | Upload document to agent |
  | Get AI Models | Available AI models |
  | Get Agent Actions | List agent actions |
  | Update Agent Reschedule | Configure rescheduling |
  | Get Keyword Replacements | List keyword rules |
  | Get Agent Keywords | List agent keywords |
  | Add Keyword | Create keyword replacement |
  | Update Keyword | Modify keyword replacement |
  | Delete Keyword | Remove keyword replacement |
  | Get Template | Get agent template details |
  | Get Agent Samples | Template sample data |
  | Get Agent FAQs | List agent FAQ entries |
  | Manage Agent FAQ | Create, update, or delete FAQ |

  ### Analytics
  | Operation | Description |
  |-----------|-------------|
  | Get Call Statuses | Available call status types |
  | Get Call Conversation | Call transcript |
  | Get Call Data | Detailed call analytics |
  | Get Call Status | Current call status |
  | Get Call Summary | Call summary and notes |
  | Get Post-Call Data | Post-call metadata |
  | Update Post-Call Data | Modify post-call metadata |
  | Delete Post-Call Data | Remove post-call data |
  | Get VocalLabs Call | Full call details |

  ### Contact
  | Operation | Description |
  |-----------|-------------|
  | Create Contact Group | Create a new group |
  | Create Contact In Group | Add contact to group |
  | Update Contact Metadata | Modify contact metadata |
  | Get Contact Groups | List all groups |
  | Update Contact Group | Rename a group |
  | Delete Contact Group | Remove a group |
  | Delete Contact | Remove a contact |
  | Get Contacts | List contacts with pagination |
  | Add Multiple Contacts | Bulk import contacts |
  | Get Contact Data | Retrieve contact details |
  | Update Contact Data | Modify contact data |
  | Get Contact | Get single contact |
  | Create Contact Group V2 | Create group (v2 API) |
  | Add Multiple Contacts V2 | Bulk import (v2 API) |

  ### Campaign
  | Operation | Description |
  |-----------|-------------|
  | Get Campaigns | List all campaigns |
  | Create Campaign | Create a new campaign |
  | Update Campaign | Modify campaign details |
  | Delete Campaign | Remove a campaign |
  | Get Queueing Details | Campaign queue status |
  | Get Campaign Status | Current campaign status |
  | Update Campaign Status | Activate/deactivate campaign |
  | Add Contacts to Campaign | Assign contacts to campaign |

  ### Library
  | Operation | Description |
  |-----------|-------------|
  | Get Actions | List all actions |
  | Create Action | Create a new action |
  | Update Action | Modify an action |
  | Delete Action | Remove an action |
  | Get Documents | List all documents |
  | Delete Document | Remove a document |
  | Get Action Templates | Available templates |
  | Get Action Template Details | Template details |
  | Get Action Parameters | Action parameter config |
  | Get Action Fields | Action field definitions |
  | Get Action Configuration | Full action config |

  ### Identity
  | Operation | Description |
  |-----------|-------------|
  | Get Flows | List verification flows |
  | Get Identity URL | Generate KYC/verification URL |

  ### SIP
  | Operation | Description |
  |-----------|-------------|
  | Create SIP Call | Initiate a SIP call |

  ### Wallet
  | Operation | Description |
  |-----------|-------------|
  | Get Balance | Check account balance |
  | Get Transaction History | View transaction records |

  ### Marketplace
  | Operation | Description |
  |-----------|-------------|
  | Fetch Available Numbers | Browse purchasable numbers |
  | Get Numbers | List your phone numbers |
  | Fetch Countries | Available countries |

  ---

  ## Key Features

  - **100+ Operations** — Full coverage of the VocalLabs API across 11 resources
  - **Secure Authentication** — Uses n8n's built-in `httpRequestWithAuthentication` with automatic token management via `preAuthentication`. Tokens are never exposed in workflow output data
  - **Concurrent Request Safety** — Mutex-based token refresh ensures only one `createAuthToken` call happens even when 50+ workflows trigger simultaneously, protecting your daily token limit
  - **Multi-Credential Support** — Use different VocalLabs accounts in the same workflow without conflicts
  - **Clean Error Handling** — API errors are parsed into readable messages with proper error codes
  - **Input Validation** — Phone numbers, dates, JSON fields, and pagination are validated before sending to the API
  - **Bulk Operations** — Import contacts and manage campaigns in batch

  ---

  ## Workflow Examples

  ### Initiate an AI Call

  ```
  [Manual Trigger] -> [VocalLabs: Initiate Call]
  ```
  - Resource: **Call**
  - Operation: **Initiate Call**
  - Agent ID: `your-agent-id`
  - Prospect ID: `your-prospect-id`

  ### Bulk Import Contacts and Launch Campaign

  ```
  [Spreadsheet] -> [VocalLabs: Create Contact Group] -> [VocalLabs: Add Multiple Contacts] -> [VocalLabs: Create Campaign] -> [VocalLabs: Add Contacts to Campaign]
  ```

  ### Monitor Call Analytics

  ```
  [Schedule Trigger] -> [VocalLabs: Get Daily Calls] -> [VocalLabs: Get Call Summary] -> [Slack: Send Message]
  ```

  ---

  ## Troubleshooting

  | Issue | Solution |
  |-------|----------|
  | **Authentication failed** | Verify your Client ID and Client Secret in the credential settings |
  | **Rate limit exceeded** | The API allows 10 requests/minute. Add delays between nodes or use n8n's batch processing |
  | **IP not whitelisted** | Whitelist your server's IP at [docs.vocallabs.ai/ip-whitelist](https://docs.vocallabs.ai/ip-whitelist) |
  | **Node not appearing** | Restart n8n after installation. Check with `npm list n8n-nodes-vocallabs` |
  | **502 Bad Gateway** | Usually indicates an expired token — the node auto-refreshes and retries. If persistent, check API status |

  ---

  ## Resources

  - [VocalLabs API Documentation](https://docs.vocallabs.ai/vocallabs)
  - [VocalLabs Dashboard](https://app.vocallabs.ai)
  - [n8n Community Nodes Guide](https://docs.n8n.io/integrations/community-nodes/)

  ---

  ## Support

  - **Email:** [hello@vocallabs.ai](mailto:hello@vocallabs.ai)
  - **GitHub Issues:** [Report a bug or request a feature](https://github.com/Vocallabsai/n8n-nodes-vocallabs/issues)
  - **Website:** [vocallabs.ai](https://vocallabs.ai)

  ---

  ## Changelog

  ### v2.4.0
  - Migrated to n8n's `httpRequestWithAuthentication` with `preAuthentication` and `authenticate` on credential class — resolves n8n verification requirements
  - Removed Auth resource that exposed raw bearer tokens in workflow output data
  - Added mutex-based `preAuthentication` to prevent concurrent token creation (protects daily token limit)
  - Added node codex file (`Vocallabs.node.json`) for proper n8n node browser categorization
  - Added credential icon
  - Changed `inputs`/`outputs` to use `NodeConnectionTypes.Main` instead of string literals
  - Renamed resource `Contacts` to `Contact` (singular, per n8n conventions)
  - Removed `.npmignore` (`"files": ["dist"]` in package.json handles publishing scope)

  ### v2.3.3
  - Added credential test — users can now verify their Client ID and Client Secret directly from the n8n credential setup screen

  ### v2.3.2
  - Overhauled auth token management with Promise mutex — concurrent requests share a single token, preventing "max auth tokens" errors
  - Fixed first-run crash where token was undefined
  - Fixed retry logic to use fresh token headers after refresh
  - Added multi-credential support per workflow
  - Improved error handling for Cloudflare 502 responses
  - Detects both 401 and 502 as auth errors for automatic token refresh

  ### v2.2.0
  - Enhanced error handling across all operations
  - Improved setup documentation

  ### v2.0.0
  - 100+ API operations across 12 resources
  - Secure token management and caching

  ### v1.0.0
  - Initial release

  ---

  ## License

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

  **Built by [VocalLabs](https://vocallabs.ai)** | **[GitHub](https://github.com/Vocallabsai)** | **[hello@vocallabs.ai](mailto:hello@vocallabs.ai)**

ai_documentation_summary:
  {"purpose":"Integrates VocalLabs AI Voice Calling API into n8n workflows to enable AI-powered voice calling, agent management, and call analytics.","capabilities":["Initiate AI voice calls","Create and manage AI agents","Retrieve call details and timelines","Upload audio files to agents","Manage contact groups and contacts","Create and manage marketing campaigns","Access call transcripts and analytics","Configure agent keywords and FAQs","Handle post-call data updates","Manage API tokens and credentials"],"authentication":"API key required (Client ID and Client Secret)","commonUseCases":["Automated customer support via AI voice calls","Lead qualification and appointment scheduling","Customer feedback collection through voice","Automated appointment reminders","Campaign-driven outbound calling"],"limitations":["Server IP must be whitelisted in VocalLabs dashboard before use","Requires manual IP whitelisting configuration"],"relatedNodes":[]}


node_type: @revenuebase/n8n-nodes-revenuebase.revenueBase
package_name: @revenuebase/n8n-nodes-revenuebase
display_name: RevenueBase
description: Verify emails, enrich companies, and manage your RevenueBase account
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: revenuebase-dev
author_github_url: https://github.com/revenuebase/n8n-nodes-revenuebase.git
npm_package_name: @revenuebase/n8n-nodes-revenuebase
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:33.978Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Email Batch Job",
          "value": "emailBatch"
        },
        {
          "name": "Email Verification",
          "value": "email"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "verify",
      "options": [
        {
          "name": "Verify",
          "value": "verify",
          "action": "Verify an email address",
          "description": "Verify a single email address for deliverability"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel a batch job",
          "description": "Cancel a queued or processing batch job"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download batch job results",
          "description": "Download the results of a completed batch job as binary data"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many batch jobs",
          "description": "Return all active batch jobs on the account"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get batch job status",
          "description": "Check the processing status of a batch job"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a batch file for email validation",
          "description": "Upload a CSV or JSON file of email addresses for bulk validation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailBatch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "resolve",
      "options": [
        {
          "name": "Discover",
          "value": "discover",
          "action": "Discover companies by keyword",
          "description": "Search for companies using a keyword or natural-language description (up to 2,000 results ranked by similarity)"
        },
        {
          "name": "Resolve",
          "value": "resolve",
          "action": "Resolve a company name",
          "description": "Match a company name to a verified record and return firmographic data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCredits",
      "options": [
        {
          "name": "Get Credits",
          "value": "getCredits",
          "action": "Get remaining credit balance",
          "description": "Get the number of validation credits remaining on the account"
        },
        {
          "name": "Rotate API Key",
          "value": "rotateApiKey",
          "action": "Rotate API key",
          "description": "Generate a new API key and immediately invalidate the previous one. Update all integrations before using."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Verify",
      "value": "verify",
      "action": "Verify an email address",
      "description": "Verify a single email address for deliverability",
      "resource": "email"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel a batch job",
      "description": "Cancel a queued or processing batch job",
      "resource": "emailBatch"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download batch job results",
      "description": "Download the results of a completed batch job as binary data",
      "resource": "emailBatch"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many batch jobs",
      "description": "Return all active batch jobs on the account",
      "resource": "emailBatch"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get batch job status",
      "description": "Check the processing status of a batch job",
      "resource": "emailBatch"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a batch file for email validation",
      "description": "Upload a CSV or JSON file of email addresses for bulk validation",
      "resource": "emailBatch"
    },
    {
      "name": "Discover",
      "value": "discover",
      "action": "Discover companies by keyword",
      "description": "Search for companies using a keyword or natural-language description (up to 2,000 results ranked by similarity)",
      "resource": "company"
    },
    {
      "name": "Resolve",
      "value": "resolve",
      "action": "Resolve a company name",
      "description": "Match a company name to a verified record and return firmographic data",
      "resource": "company"
    },
    {
      "name": "Get Credits",
      "value": "getCredits",
      "action": "Get remaining credit balance",
      "description": "Get the number of validation credits remaining on the account",
      "resource": "user"
    },
    {
      "name": "Rotate API Key",
      "value": "rotateApiKey",
      "action": "Rotate API key",
      "description": "Generate a new API key and immediately invalidate the previous one. Update all integrations before using.",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-revenuebase

  <img src="credentials/RevenueBase-Mark.png" alt="RevenueBase" width="80" />

  [RevenueBase](https://revenuebase.ai) is a B2B data platform that provides verified email addresses, firmographic company data, and natural language search for company and contact data — built for GTM. Use it to enrich leads, validate contact lists at scale, and discover target accounts from a keyword or ICP description.

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

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

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

  ## Installation

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

  ## Operations

  ### Email Verification
  - **Validate** — Validate a single email address for deliverability synchronously. Returns `Valid`, `Invalid`, or `Unknown`.

  ### Email Batch Job
  - **Upload** — Upload a CSV or JSON file of email addresses for asynchronous bulk validation.
  - **Get Status** — Check the processing status of a batch job (`QUEUED`, `PROCESSING`, `COMPLETED`, `ERROR`, `CANCELLED`).
  - **List** — List all active batch jobs currently queued or in progress.
  - **Download** — Download the results of a completed batch job as a binary file.
  - **Cancel** — Cancel a queued or in-progress batch job.

  ### Company
  - **Resolve** — Match a company name (and optionally domain or website) to a verified RevenueBase record and return firmographic data.
  - **Discover** — Search for companies using a keyword or natural-language description. Returns up to 2,000 results ranked by similarity score.

  ### User
  - **Get Credits** — Return the number of validation credits remaining on the account.
  - **Rotate API Key** — Generate a new API key and immediately invalidate the previous one.

  ## Credentials

  You will need a RevenueBase API key to authenticate requests.

  1. Sign in to the [RevenueBase dashboard](https://app.revenuebase.ai).
  2. Go to **Settings → API Keys** and copy your key.
  3. In n8n, create a new **RevenueBase API** credential and paste the key into the **API Key** field.

  All requests are authenticated via the `x-key` header. You can validate your credentials using the **Test** button in the credentials dialog — it calls `GET /v1/credits` to confirm the key is active.

  ## Compatibility

  Tested against n8n version 1.x. No known incompatibilities with earlier 1.x releases.

  ## Usage

  ### Batch email validation workflow

  1. Use a **Read Binary File** (or **HTTP Request**) node to load your CSV of email addresses.
  2. Connect it to a **RevenueBase** node set to **Email Batch Job → Upload**.
  3. Store the returned `process_id`.
  4. Use a **Wait** node on an interval, then a **RevenueBase** node set to **Email Batch Job → Get Status** to poll until the status is `COMPLETED`.
  5. Use **Email Batch Job → Download** to retrieve the results file as binary data.

  ### Company discovery

  Use **Company → Discover** to build targeted account lists from a keyword or ICP description. Pass the returned company records into a CRM node (e.g. HubSpot, Salesforce) to enrich or create accounts automatically.

  ### Rotating API keys safely

  The **User → Rotate API Key** operation immediately invalidates your current key. Update the n8n credential with the new key before making any further requests.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [RevenueBase API reference](https://docs.revenuebase.ai/api-reference/overview)
  * [RevenueBase authentication docs](https://docs.revenuebase.ai/api-reference/authentication)

ai_documentation_summary:
  {"purpose":"Integrates RevenueBase into n8n workflows to verify email addresses, enrich company data with firmographics, and manage account settings via API.","capabilities":["Validate single email addresses synchronously","Upload CSV or JSON files for asynchronous bulk email validation","Check status of batch validation jobs","List active batch jobs","Download results of completed batch jobs","Cancel queued or in-progress batch jobs","Resolve company names to verified records with firmographic data","Discover companies using keywords or natural language descriptions","Retrieve remaining validation credits","Rotate API keys"],"authentication":"API key required","commonUseCases":["Enriching lead lists with verified contact information","Validating large email lists at scale via batch processing","Discovering target accounts based on keywords or ideal customer profiles (ICP)","Automating data enrichment for CRM systems"],"limitations":["Company discovery returns a maximum of 2,000 results per request","Batch email validation requires polling status and manual download of results"],"relatedNodes":["HubSpot","Salesforce","Read Binary File","HTTP Request","Wait"]}


node_type: @respond-io/n8n-nodes-respond-io.respondioTrigger
package_name: @respond-io/n8n-nodes-respond-io
display_name: Respond.io Trigger
description: Trigger workflow via Respond.io webhook / perform actions on Respond.io
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: respond.io
author_github_url: https://github.com/respond-io/n8n-integration.git
npm_package_name: @respond-io/n8n-nodes-respond-io
npm_version: 1.7.0
community_fetched_at: 2026-07-14T14:40:33.985Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-respondio

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

  Respond.io is a customer conversation management platform that helps businesses manage customer conversations across multiple channels like WhatsApp, Facebook Messenger, Instagram, and more. This node provides comprehensive integration with the Respond.io API to automate customer communication workflows.

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

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

  ## Installation

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

  ## Operations

  ### Respond.io Actions Node

  The Respond.io Actions node supports the following operations:

  #### Channels

  - **Get All Channels** - Retrieve all channels connected to your workspace

  #### Closing Notes

  - **Get All Closing Notes** - Retrieve all closing notes templates

  #### Comments

  - **Add Comment** - Add a comment to a conversation

  #### Contacts

  - **Create Contact** - Create a new contact
  - **Create or Update Contact** - Create or update an existing contact
  - **Update Contact** - Update an existing contact's information
  - **Find Contact** - Find a specific contact by identifier
  - **Get Many Contacts** - Retrieve multiple contacts with search filtering
  - **Add Tags** - Add tags to a contact
  - **Remove Tags** - Remove tags from a contact
  - **Add Space Tag** - Add a space tag to a contact
  - **Delete Space Tag** - Delete a space tag
  - **Update Space Tag** - Update a space tag
  - **Delete Contact** - Delete a contact
  - **Find Contact Channels** - Find channels associated with a contact

  #### Contact Fields

  - **Get All Custom Fields** - Retrieve all custom fields
  - **Find Custom Field** - Find a specific custom field
  - **Create Custom Field** - Create a new custom field

  #### Conversations

  - **Assign or Unassign Conversation** - Assign or unassign a conversation to/from a user
  - **Open or Close Conversation** - Open or close a conversation

  #### Lifecycle

  - **Update Contact Lifecycle** - Update a contact's lifecycle stage
  - **Remove Contact Lifecycle** - Remove a contact's lifecycle stage

  #### Messages

  - **Send Message** - Send a message to a contact (supports text, email, attachments, quick replies, WhatsApp templates, and custom payloads)
  - **Find Message** - Find a specific message by ID

  #### Users

  - **Find User** - Find a specific user by ID
  - **Get All Users** - Retrieve all users in the workspace

  ## Triggers

  ### Respond.io Trigger Node

  The Respond.io Trigger node can listen for the following events:

  - **New Incoming Message** - Triggered when a new message is received
  - **New Outgoing Message** - Triggered when a new outgoing message is sent
  - **New Comment** - Triggered when a new comment is added to a conversation
  - **Conversation Opened** - Triggered when a conversation is opened
  - **Conversation Closed** - Triggered when a conversation is closed
  - **New Contact** - Triggered when a new contact is created
  - **Contact Updated** - Triggered when a contact is updated
  - **Contact Assignee Updated** - Triggered when a contact's assignee is changed
  - **Contact Tag Updated** - Triggered when a contact's tags are modified
  - **Contact Lifecycle Updated** - Triggered when a contact's lifecycle stage changes

  ## Credentials

  To use this node, you need to authenticate with Respond.io. You'll need:

  1. **API Key** - Your Respond.io API key

  ### How to get your API Key

  1. Log in to your Respond.io account
  2. Go to **Settings** → **Integrations** → **N8N**
  3. Generate a new API key
  4. Copy the API key and use it in the credentials

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Tested with n8n versions**: 1.0.0+
  - **Node.js version**: >=18.0.0

  ## Usage

  ### Basic Workflow Example

  1. **Set up a trigger** - Use the Respond.io Trigger node to listen for new incoming messages
  2. **Process the message** - Use the Respond.io Actions node to find the contact and send a response
  3. **Add automation** - Create workflows that automatically assign conversations, update contact information, or send follow-up messages

  ### Advanced Workflow Example

  1. **New message trigger** → **Find contact** → **Check contact tags** → **Send automated response** → **Assign to team member**

  ### Message Types Supported

  The Send Message operation supports multiple message types:

  - **Text messages** - Simple text messages
  - **Email messages** - Rich email content with subject and body
  - **Attachments** - Send files and media
  - **Quick replies** - Interactive quick reply buttons
  - **WhatsApp templates** - Pre-approved WhatsApp message templates
  - **Custom payloads** - Custom message formats for specific channels

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Respond.io API Documentation](https://developers.respond.io/)
  - [Respond.io Platform](https://respond.io/)

  ## Version history

  ### Version 1.0.0

  - Initial release
  - Support for all major Respond.io API operations
  - Webhook triggers for real-time events
  - Comprehensive contact and conversation management
  - Multi-channel message sending capabilities

ai_documentation_summary:
  {"purpose":"Enables n8n workflows to interact with Respond.io for customer conversation management across multiple channels like WhatsApp, Facebook Messenger, and Instagram, supporting both real-time event triggers and API actions.","capabilities":["Listen for new incoming/outgoing messages","Detect conversation open/close events","Monitor contact creation, updates, and lifecycle changes","Create, update, and delete contacts","Manage contact tags and space tags","Assign/unassign conversations to users","Send multi-channel messages (text, email, WhatsApp templates, attachments, quick replies)","Retrieve custom fields and manage contact lifecycle stages","Add comments to conversations","Search and filter contacts"],"authentication":"API key required","commonUseCases":["Automate responses to incoming customer messages on WhatsApp or Messenger","Trigger workflows when a new lead contact is created","Automatically assign conversations to team members based on tags","Send follow-up emails or WhatsApp messages based on conversation status","Update contact lifecycle stages when specific events occur"],"limitations":["Requires manual generation of API key via Respond.io settings","Node requires n8n version 1.0.0 or higher and Node.js 18.0.0+","Webhook triggers require Respond.io to be configured to send events to n8n"],"relatedNodes":[]}


node_type: n8n-nodes-dfir-iris.dfirIris
package_name: n8n-nodes-dfir-iris
display_name: DFIR IRIS
description: works with DFIR IRIS IRP
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: barn4k
author_github_url: https://github.com/barn4k/
npm_package_name: n8n-nodes-dfir-iris
npm_version: 2.0.3
community_fetched_at: 2026-07-14T14:40:33.987Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-dfir-iris


  This is an n8n community node. It allows to use the API for [IRIS](https://docs.dfir-iris.org/latest/) IRP system.

  ## Installation

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

  ## Features

  Supported IRIS Versions:

  - Currenly supported the API [v2.0.4](https://docs.dfir-iris.org/latest/operations/api/#references) for IRIS v2.4.x

  Supported operations:
  |Endpoint|Status|
  |--|--|
  |Alerts|Fully supported|
  |Case Assets|Fully supported|
  |Case General|Fully supported since v2|
  |Case Evidence|Fully supported since v2|
  |Case IOCs|Fully supported|
  |Case Modules|Fully supported since v2|
  |Case Notes|Fully supported|
  |Case Note Groups|Fully supported|
  |Case Tasks|Fully supported|
  |Case Timeline|Fully supported since v2|
  |Comments|Fully supported|
  |Datastore File|Fully supported|
  |Datastore Folder|Fully supported|

  For other endpoints there is no plans to add anything

  ## License

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


  ## Issues

  For any kind of issues please let me know on [GitHub](https://github.com/barn4k/n8n-nodes-dfir-iris.git)

ai_documentation_summary:
  {"purpose":"Connects n8n workflows to the DFIR IRIS Incident Response Platform (IRP) API to automate incident management tasks.","capabilities":["Retrieve and manage Alerts","Manage Case Assets","Access Case General information","Handle Case Evidence","Manage Case IOCs (Indicators of Compromise)","Manage Case Modules","Retrieve and manage Case Notes and Note Groups","Manage Case Tasks","Access Case Timeline","Manage Comments"],"authentication":"API key required","commonUseCases":["Automating incident response workflows by creating or updating cases in IRIS","Aggregating alerts from IRIS for analysis in n8n","Managing evidence and IOCs associated with security incidents","Tracking case progress via tasks and timeline events"],"limitations":["Only supports IRIS API v2.0.4 (compatible with IRIS v2.4.x)","Limited to specific endpoints; no plans to add support for other IRIS API endpoints"],"relatedNodes":[]}


node_type: @zohoforms/n8n-nodes-zohoforms.zohoFormsTrigger
package_name: @zohoforms/n8n-nodes-zohoforms
display_name: Zoho Forms Trigger
description: Starts the workflow when new record is added to a form
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zohoformsintegration
author_github_url: https://github.com/zohoforms/zoho_forms_n8n.git
npm_package_name: @zohoforms/n8n-nodes-zohoforms
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.989Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # Zoho Forms integration with n8n
  Zoho Forms is a powerful data collection tool that helps businesses capture, manage, and act on information efficiently. n8n integration with Zoho Forms enables you to automate workflows based on form submissions and streamline your business processes.
  You can design custom workflows using triggers automate tasks such as lead management, notifications, CRM updates, and more.
  To learn more about n8n:
  [n8n homepage](https://n8n.io/).
  To learn more about Zoho Forms: 
  [Zoho Forms homepage](https://www.zoho.com/forms/).
  In case of any technical queries 
  [Contact sales](mailto:sales@zohocorp.com)
  ## Pre-requisites
  - n8n admin login account (https://app.n8n.cloud/login)
  - Zoho Forms account
  ## Installation 
  You can install the Zoho Forms nodes for n8n via  [npm](https://www.npmjs.com/) with the package name as n8n-nodes-zohoforms.
  - To install :
     - Log in to your n8n account.
     - Navigate to more options->Settings->Community nodes->Install.
     - Enter the package name (n8n-nodes-zohoforms)

  ## Configuration 
  Follow the steps below to integrate Zoho Forms with n8n:
  - Log in to your n8n account.
  - Select Create Credential -> Add Credential dialog box -> Enter Zohoforms OAuth2 API -> Click Continue.
  - Copy the Authorized Redirection URL from the connection page.
  - Access the [Zoho Developer Console](https://api-console.zoho.com/) to create a new Client ID and Client Secret to establish the connection between n8n and Zoho Forms.
  - Click on Get Started if you have no existing Client. If you have an existing client, click on Add Client in the top-right corner. 
  Select Server-based Applications in the Client Type window.
  - Provide the appropriate Client Name and your domain in the Homepage URL along with the Authorized Redirect URL copied from the Connection page.
  - Click Create to generate the Client ID and Client Secret.
  - Enter the Client ID and Client secret in the Connection Page and click Connect my account.
  - Now, the connection between n8n and Zoho Forms is established, and the next step is to create your workflow.
  - Click Create Workflow -> Add first step -> search and select Zoho Forms on the right pane.
  - Build your desired workflow with the list triggers (Choose your form)
  - Once the workflow is created, you can test it by selecting the Test Workflow option.
  ## Troubleshooting 
  Write to us in case of any queries
  [Contact support](mailto:support@zohoforms.com)
  ### Description
  This page explains the integration of Zoho Forms with n8n. n8n is an open-source workflow automation platform that enables seamless integration between applications and services.
  For more information on Zoho Forms : https://www.zoho.com/forms/
  ### Required
  - Zoho Forms account and n8n admin account.
  - Module installation and configuration:
  - Information on how the integration between Zoho Forms and n8n can be made is found in this Readme file.
  - For further queries, : (support@zohoforms.com)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when new records are submitted to a Zoho Form.","capabilities":["Detect new form submissions","Initiate automated workflows based on form data","Integrate form data with other applications"],"authentication":"OAuth2","commonUseCases":["Lead management automation","Sending notifications upon form submission","Updating CRM records with form data"],"limitations":[],"relatedNodes":[]}


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

updated_at: 2026-07-14 14:40:33
author_name: jgriffith
author_github_url: https://github.com/browserless/
npm_package_name: n8n-nodes-browserless-api
npm_version: 1.2.1
community_fetched_at: 2026-07-14T14:40:33.990Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "smartScrape",
      "options": [
        {
          "name": "Crawl",
          "value": "crawl",
          "action": "Crawl a website",
          "description": "Crawl a website and extract content from every page"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a file",
          "description": "Download a file triggered by browser automation"
        },
        {
          "name": "Export",
          "value": "exportContent",
          "action": "Export page content",
          "description": "Fetch a URL and stream it in its native content type"
        },
        {
          "name": "Map URLs",
          "value": "mapUrls",
          "action": "Discover links on a site",
          "description": "Discover URLs on a site or within its sitemap"
        },
        {
          "name": "PDF",
          "value": "pdf",
          "action": "Generate a PDF",
          "description": "Generate a PDF document from a web page"
        },
        {
          "name": "Performance Audit",
          "value": "performanceAudit",
          "action": "Run a performance audit",
          "description": "Run Lighthouse audits for performance, SEO, and accessibility"
        },
        {
          "name": "Run Function",
          "value": "runFunction",
          "action": "Run a custom function",
          "description": "Execute custom JavaScript/Puppeteer code server-side"
        },
        {
          "name": "Screenshot",
          "value": "screenshot",
          "action": "Take a screenshot",
          "description": "Capture a screenshot of a page as PNG, JPEG, or WebP"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search the web",
          "description": "Search the web and return results"
        },
        {
          "name": "Smart Scrape",
          "value": "smartScrape",
          "action": "Smart scrape a page",
          "description": "Scrape a page with automatic fallbacks for blocked or JS-heavy sites"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Crawl",
      "value": "crawl",
      "action": "Crawl a website",
      "description": "Crawl a website and extract content from every page"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a file",
      "description": "Download a file triggered by browser automation"
    },
    {
      "name": "Export",
      "value": "exportContent",
      "action": "Export page content",
      "description": "Fetch a URL and stream it in its native content type"
    },
    {
      "name": "Map URLs",
      "value": "mapUrls",
      "action": "Discover links on a site",
      "description": "Discover URLs on a site or within its sitemap"
    },
    {
      "name": "PDF",
      "value": "pdf",
      "action": "Generate a PDF",
      "description": "Generate a PDF document from a web page"
    },
    {
      "name": "Performance Audit",
      "value": "performanceAudit",
      "action": "Run a performance audit",
      "description": "Run Lighthouse audits for performance, SEO, and accessibility"
    },
    {
      "name": "Run Function",
      "value": "runFunction",
      "action": "Run a custom function",
      "description": "Execute custom JavaScript/Puppeteer code server-side"
    },
    {
      "name": "Screenshot",
      "value": "screenshot",
      "action": "Take a screenshot",
      "description": "Capture a screenshot of a page as PNG, JPEG, or WebP"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search the web",
      "description": "Search the web and return results"
    },
    {
      "name": "Smart Scrape",
      "value": "smartScrape",
      "action": "Smart scrape a page",
      "description": "Scrape a page with automatic fallbacks for blocked or JS-heavy sites"
    }
  ]

npm_readme:
  # n8n-nodes-browserless-api

  This is an n8n community node for [Browserless](https://browserless.io) — a headless browser API service for web scraping, screenshots, PDF generation, and browser automation.

  [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) | [Resources](#resources)

  ## Installation

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

  ## Operations

  - **Get Content** — Retrieve the fully rendered HTML of a page, including JavaScript-rendered content
  - **Scrape** — Extract structured data from a page using CSS selectors
  - **Smart Scrape** — Scrape a page with automatic fallbacks for blocked or JS-heavy sites
  - **Screenshot** — Capture a screenshot as PNG, JPEG, or WebP
  - **PDF** — Generate a PDF document from a web page
  - **Search** — Search the web and return results
  - **Map URLs** — Discover URLs on a site or within its sitemap
  - **Run Function** — Execute custom JavaScript/Puppeteer code server-side
  - **Download** — Download a file triggered by browser automation
  - **Export** — Fetch a URL and stream it in its native content type
  - **Unblock** — Bypass CAPTCHAs and bot detection to access a page
  - **Performance Audit** — Run Lighthouse audits for performance, SEO, and accessibility
  - **Crawl** — Crawl a website and extract content from every page

  ## Credentials

  You need a Browserless API token to use this node:

  1. Sign up at [browserless.io](https://browserless.io)
  2. Get your API token from the dashboard
  3. In n8n, create new **Browserless API** credentials
  4. Enter your API token and base URL (default: `https://production-sfo.browserless.io`)

  For self-hosted Browserless instances, change the base URL to your instance address.

  ## Resources

  - [Browserless Documentation](https://docs.browserless.io)
  - [Browserless REST API Reference](https://docs.browserless.io/rest-apis/intro)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"Interact with the Browserless headless browser API to perform web scraping, automation, and content extraction tasks within n8n workflows.","capabilities":["Retrieve fully rendered HTML including JavaScript content","Extract structured data using CSS selectors","Perform smart scraping with automatic fallbacks for blocked sites","Capture screenshots in PNG, JPEG, or WebP formats","Generate PDF documents from web pages","Search the web and return results","Discover and map URLs on a site or sitemap","Execute custom JavaScript/Puppeteer code server-side","Download files triggered by browser automation","Fetch and stream URLs in their native content type"],"authentication":"API key required","commonUseCases":["Web scraping for data extraction","Generating screenshots and PDF reports","Bypassing bot detection on protected sites","Automating browser interactions and downloads","Performance and SEO auditing of websites"],"limitations":["Requires an active Browserless account and API token","Base URL must be configured for self-hosted instances","Dependent on external Browserless service availability"],"relatedNodes":[]}


node_type: n8n-nodes-ordify.ordify
package_name: n8n-nodes-ordify
display_name: Ordify
description: Run Ordify jobs through A2A and Jobs APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: devlancer0328
author_github_url: https://github.com/Ordify-Ai/ordify-n8n.git
npm_package_name: n8n-nodes-ordify
npm_version: 0.1.18
community_fetched_at: 2026-07-14T14:40:33.992Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "listAvailableCrews",
      "options": [
        {
          "name": "Chat",
          "value": "chat",
          "action": "Send a chat message",
          "description": "Chat with Ordify via POST /chat"
        },
        {
          "name": "List Available Agents",
          "value": "listAvailableAgents",
          "action": "List available agents",
          "description": "Get available ADK agents from /chat/agents"
        },
        {
          "name": "List Available Crews",
          "value": "listAvailableCrews",
          "action": "List available crews",
          "description": "Get available crews from /a2a/available"
        },
        {
          "name": "Get Crew Schema",
          "value": "getCrewSchema",
          "action": "Get crew schema",
          "description": "Get crew schema from /a2a/{crew_id}"
        },
        {
          "name": "Execute Crew",
          "value": "executeCrew",
          "action": "Execute a crew",
          "description": "Execute a crew using /a2a/{crew_id}"
        },
        {
          "name": "Get Job Status",
          "value": "getJobStatus",
          "action": "Get a job status",
          "description": "Get job status from /jobs/{job_id}"
        },
        {
          "name": "Get Job Result",
          "value": "getJobResult",
          "action": "Get a job result",
          "description": "Get completed job result from /jobs/{job_id}/result"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Chat",
      "value": "chat",
      "action": "Send a chat message",
      "description": "Chat with Ordify via POST /chat"
    },
    {
      "name": "List Available Agents",
      "value": "listAvailableAgents",
      "action": "List available agents",
      "description": "Get available ADK agents from /chat/agents"
    },
    {
      "name": "List Available Crews",
      "value": "listAvailableCrews",
      "action": "List available crews",
      "description": "Get available crews from /a2a/available"
    },
    {
      "name": "Get Crew Schema",
      "value": "getCrewSchema",
      "action": "Get crew schema",
      "description": "Get crew schema from /a2a/{crew_id}"
    },
    {
      "name": "Execute Crew",
      "value": "executeCrew",
      "action": "Execute a crew",
      "description": "Execute a crew using /a2a/{crew_id}"
    },
    {
      "name": "Get Job Status",
      "value": "getJobStatus",
      "action": "Get a job status",
      "description": "Get job status from /jobs/{job_id}"
    },
    {
      "name": "Get Job Result",
      "value": "getJobResult",
      "action": "Get a job result",
      "description": "Get completed job result from /jobs/{job_id}/result"
    }
  ]

npm_readme:
  # n8n-nodes-ordify

  n8n community node for Ordify A2A and Jobs APIs.

  ## Features

  - Chat (`POST /chat`)
  - List available crews (`GET /a2a/available`)
  - Get crew schema (`GET /a2a/{crew_id}`)
  - Execute crew (`POST /a2a/{crew_id}`) with two modes:
    - Async: return `job_id` immediately
    - Wait: poll until terminal status and optionally fetch result
  - Get job status (`GET /jobs/{job_id}`)
  - Get job result (`GET /jobs/{job_id}/result`)

  ## Prerequisites

  - Ordify API key from:
    - `POST /generate-api-key`
    - `GET /api-keys`
  - Backend supports `api-key` auth on `/a2a/*` and `/jobs/*` endpoints.

  ## Local Development

  ```bash
  cd n8n-nodes-ordify
  npm install
  npm run build
  ```

  ## Install in n8n

  ### Local package install

  ```bash
  # From your n8n installation environment
  npm install /absolute/path/to/n8n-nodes-ordify
  ```

  ### npm registry install

  ```bash
  npm install n8n-nodes-ordify
  ```

  ## Credentials

  Create **Ordify API** credentials in n8n:

  - Base URL: `https://r.ordify.ai/` (or your deployment URL)
  - API Key: generated from Ordify

  ## Example Flow

  1. Use **Ordify** node with operation **Execute Crew**.
  2. Capture returned `job_id`.
  3. Use **Ordify** node with operation **Get Job Status** until complete.
  4. Use **Ordify** node with operation **Get Job Result**.

  ## Execute Crew Wait Mode

  Choose **Execution Mode = Wait For Completion** to make the node:

  1. Execute the crew
  2. Poll `/jobs/{job_id}` at your configured interval
  3. Stop on terminal status (`complete`, `failed`, `cancelled`)
  4. Fetch `/jobs/{job_id}/result` automatically when complete

  ## Notes

  - This node is designed for asynchronous job execution.
  - For best reliability, poll every 3-10 seconds.

ai_documentation_summary:
  {"purpose":"Run Ordify jobs through A2A and Jobs APIs, enabling chat interactions, crew execution, and job status monitoring within n8n workflows.","capabilities":["Chat with AI agents via POST /chat","List available AI crews via GET /a2a/available","Retrieve crew schema via GET /a2a/{crew_id}","Execute crew with async mode (returns job_id) or wait mode (polls until completion)","Check job status via GET /jobs/{job_id}","Retrieve job results via GET /jobs/{job_id}/result"],"authentication":"API key required (passed as 'api-key' header)","commonUseCases":["Asynchronous task execution with automatic polling","Orchestrating AI agent workflows via A2A protocol","Monitoring long-running AI jobs until completion"],"limitations":["Requires manual generation of API key before use","Wait mode requires configuring polling interval for optimal reliability (recommended 3-10 seconds)"],"relatedNodes":[]}


node_type: n8n-nodes-webinarjam.webinarJam
package_name: n8n-nodes-webinarjam
display_name: WebinarJam
description: WebinarJam API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: xal95
author_github_url: https://github.com/xAL95/
npm_package_name: n8n-nodes-webinarjam
npm_version: 1.0.6
community_fetched_at: 2026-07-14T14:40:33.993Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "webinar",
      "options": [
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "Webinar",
          "value": "webinar"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Retrieve a list of countries and states provinces",
          "routing": {
            "request": {
              "url": "/api/webinarjam/countries",
              "method": "POST"
            }
          },
          "description": "Retrieve a list of countries and states/provinces"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "country"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a webinar",
          "routing": {
            "request": {
              "url": "/webinarjam/webinar",
              "method": "POST"
            }
          },
          "description": "Retrieve a Webinar"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get all webinars",
          "routing": {
            "request": {
              "url": "/webinarjam/webinars",
              "method": "POST"
            }
          },
          "description": "Retrieve all Webinars"
        },
        {
          "name": "Get Registrants",
          "value": "getRegistrants",
          "action": "Get a list of registrants and attendees",
          "routing": {
            "send": {
              "paginate": "={{ $parameter.returnAll || ($parameter.limit ?? 1) > 1 }}"
            },
            "request": {
              "url": "/webinarjam/registrants",
              "method": "POST"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": {
                      "page": "={{ ($response.body.registrants.current_page ?? 1) + 1 }}"
                    }
                  },
                  "continue": "={{ !!$response.body.registrants.next_page_url && \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$parameter.returnAll || \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t($response.body.registrants.current_page < ($parameter.limit ?? 1))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}"
                }
              }
            }
          },
          "description": "Get a list of registrants and attendees"
        },
        {
          "name": "Register",
          "value": "register",
          "action": "Register a person",
          "routing": {
            "request": {
              "url": "/webinarjam/register",
              "method": "POST"
            }
          },
          "description": "Register a person to a specific webinar"
        },
        {
          "name": "Unsubscribe",
          "value": "unsubscribe",
          "action": "Unsubscribe leads from a webinar",
          "routing": {
            "request": {
              "url": "/webinarjam/unsubscribe",
              "method": "POST"
            }
          },
          "description": "Unsubscribe leads from a webinar"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webinar"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Retrieve a list of countries and states provinces",
      "routing": {
        "request": {
          "url": "/api/webinarjam/countries",
          "method": "POST"
        }
      },
      "description": "Retrieve a list of countries and states/provinces",
      "resource": "country"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a webinar",
      "routing": {
        "request": {
          "url": "/webinarjam/webinar",
          "method": "POST"
        }
      },
      "description": "Retrieve a Webinar",
      "resource": "webinar"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get all webinars",
      "routing": {
        "request": {
          "url": "/webinarjam/webinars",
          "method": "POST"
        }
      },
      "description": "Retrieve all Webinars",
      "resource": "webinar"
    },
    {
      "name": "Get Registrants",
      "value": "getRegistrants",
      "action": "Get a list of registrants and attendees",
      "routing": {
        "send": {
          "paginate": "={{ $parameter.returnAll || ($parameter.limit ?? 1) > 1 }}"
        },
        "request": {
          "url": "/webinarjam/registrants",
          "method": "POST"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": {
                  "page": "={{ ($response.body.registrants.current_page ?? 1) + 1 }}"
                }
              },
              "continue": "={{ !!$response.body.registrants.next_page_url && \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$parameter.returnAll || \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t($response.body.registrants.current_page < ($parameter.limit ?? 1))\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}"
            }
          }
        }
      },
      "description": "Get a list of registrants and attendees",
      "resource": "webinar"
    },
    {
      "name": "Register",
      "value": "register",
      "action": "Register a person",
      "routing": {
        "request": {
          "url": "/webinarjam/register",
          "method": "POST"
        }
      },
      "description": "Register a person to a specific webinar",
      "resource": "webinar"
    },
    {
      "name": "Unsubscribe",
      "value": "unsubscribe",
      "action": "Unsubscribe leads from a webinar",
      "routing": {
        "request": {
          "url": "/webinarjam/unsubscribe",
          "method": "POST"
        }
      },
      "description": "Unsubscribe leads from a webinar",
      "resource": "webinar"
    }
  ]

npm_readme:
  # n8n-nodes-webinarjam

  This is a n8n community node. It lets you use **WebinarJam** in your n8n workflows.

  WebinarJam is a webinar platform that allows you to run live webinars, manage registrations, and access attendee data.

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

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

  ---

  ## Installation

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

  ---

  ## Operations

  ### WebinarJam
  The WebinarJam node supports operations such as:
  - Retrieve webinars
  - Manage webinar registrations
  - Access attendee information
  ---

  ## Credentials

  To use these nodes, you need an API key from WebinarJam.

  ### Prerequisites
  - An active WebinarJam account
  - API access enabled in your account

  ### Authentication Method
  - API Key authentication

  ### Setup in n8n
  1. Go to **n8n → Credentials**
  2. Create new credentials:
      - **WebinarJam API**
  3. Enter your API key
  4. Save the credentials and select them in the node

  ---

  ## Compatibility

  - **Tested with:** n8n `2.1.4`
  - **Minimum required version:** Not explicitly defined
  - **Expected compatibility:** n8n `2.x`

  These nodes were built using the **declarative-style node** approach.  
  If you successfully use them with older n8n versions, please consider opening a PR to update compatibility information.

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [WebinarJam website](https://webinarjam.com/)
  - [Build a declarative-style node (n8n docs)](https://docs.n8n.io/integrations/creating-nodes/build/declarative-style-node/)

  ---

  ## Version history

  - **0.1.0** – Initial release of WebinarJam node (historically included EverWebinar too)
  - **0.1.2** - Add dark icons for WebinarJam and fix lint issues
  - **0.2.0** - Structural refactor, renamed credentials, and added a new `general` operation with the `getCountries` option

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the WebinarJam API to automate webinar management tasks within workflows. It allows users to retrieve webinar details, manage registrations, and access attendee data programmatically.","capabilities":["Retrieve webinars","Manage webinar registrations","Access attendee information","Get countries list (via general operation)"],"authentication":"API key required","commonUseCases":["Automating webinar registration confirmations","Syncing attendee data to CRM systems","Retrieving upcoming webinar schedules for notifications"],"limitations":["Requires an active WebinarJam account with API access enabled","Compatibility tested specifically with n8n version 2.1.4"],"relatedNodes":[]}


node_type: @vectotaxsoftwaregmbh/n8n-nodes-taxmetall.taxMetall
package_name: @vectotaxsoftwaregmbh/n8n-nodes-taxmetall
display_name: TaxMetall ERP
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: vectotaxgmbh
author_github_url: https://github.com/Vectotax/n8n-nodes-taxmetall.git
npm_package_name: @vectotaxsoftwaregmbh/n8n-nodes-taxmetall
npm_version: 1.23.1
community_fetched_at: 2026-07-14T14:40:33.995Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  n8n integration for connecting and automating processes in the TaxMetall SQL Edition ERP system (Vectotax Software GmbH)

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "article",
      "options": [
        {
          "name": "Acquisition",
          "value": "akquise"
        },
        {
          "name": "Article",
          "value": "article"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Delivery Note",
          "value": "lieferschein"
        },
        {
          "name": "DMS",
          "value": "dms"
        },
        {
          "name": "Document Sync",
          "value": "documentSync"
        },
        {
          "name": "Dunning",
          "value": "mahnung"
        },
        {
          "name": "Invoice",
          "value": "rechnung"
        },
        {
          "name": "Offer",
          "value": "offer"
        },
        {
          "name": "Order",
          "value": "auftrag"
        },
        {
          "name": "Purchase Invoice",
          "value": "eingangsrechnung"
        },
        {
          "name": "Statistic",
          "value": "statistics"
        },
        {
          "name": "Supplier",
          "value": "lieferant"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByDrawingNumber",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an article"
        },
        {
          "name": "Search by Article ID",
          "value": "getById",
          "action": "Search by article ID in article"
        },
        {
          "name": "Search by Article Number",
          "value": "getByArticleNumber",
          "action": "Search by article number in article"
        },
        {
          "name": "Search by Drawing Number",
          "value": "getByDrawingNumber",
          "action": "Search by drawing number in article"
        },
        {
          "name": "Search by Name",
          "value": "getByName",
          "action": "Search by name in article"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an order"
        },
        {
          "name": "Get Order Status",
          "value": "getStatus",
          "action": "Get order status in order"
        },
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auftrag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in purchase invoice"
        },
        {
          "name": "Search by Purchase Invoice No.",
          "value": "getById",
          "action": "Search by purchase invoice number in purchase invoice"
        },
        {
          "name": "Search by Supplier",
          "value": "getBySupplier",
          "action": "Search by supplier in purchase invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "eingangsrechnung"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByName",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a customer"
        },
        {
          "name": "Search by ID",
          "value": "getById",
          "action": "Search by ID in customer"
        },
        {
          "name": "Search by Name",
          "value": "getByName",
          "action": "Search by name in customer"
        },
        {
          "name": "Search by Order ID",
          "value": "getByOrderId",
          "action": "Search by order ID in customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a supplier"
        },
        {
          "name": "Search by Article",
          "value": "getByArticle",
          "action": "Search by article in supplier"
        },
        {
          "name": "Search by ID",
          "value": "getById",
          "action": "Search by ID in supplier"
        },
        {
          "name": "Search by Name",
          "value": "getByName",
          "action": "Search by name in supplier"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lieferant"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Search by Customer No.",
          "value": "getByCustomer",
          "action": "Search by customer number in delivery note"
        },
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in delivery note"
        },
        {
          "name": "Search by Delivery Note No.",
          "value": "getById",
          "action": "Search by delivery note number in delivery note"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lieferschein"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createFile",
      "options": [
        {
          "name": "Create File",
          "value": "createFile",
          "action": "Create a file in DMS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByCustomer",
      "options": [
        {
          "name": "Search by Customer No.",
          "value": "getByCustomer",
          "action": "Search by customer number in dunning"
        },
        {
          "name": "Search by Due Date Range",
          "value": "getByDateRange",
          "action": "Search by due date range in dunning"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mahnung"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Search by Customer No.",
          "value": "getByCustomer",
          "action": "Search by customer number in invoice"
        },
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in invoice"
        },
        {
          "name": "Search by Invoice No.",
          "value": "getById",
          "action": "Search by invoice number in invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rechnung"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an offer"
        },
        {
          "name": "Search by Customer No.",
          "value": "getByCustomer",
          "action": "Search by customer number in offer"
        },
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in offer"
        },
        {
          "name": "Search by Offer No.",
          "value": "getById",
          "action": "Search by offer number in offer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "offer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an acquisition"
        },
        {
          "name": "Search by ID",
          "value": "getById",
          "action": "Search by ID in acquisition"
        },
        {
          "name": "Search by Name",
          "value": "getByName",
          "action": "Search by name in acquisition"
        },
        {
          "name": "Search by Date Range",
          "value": "getByDateRange",
          "action": "Search by date range in acquisition"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "akquise"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a statistics report"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statistics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkNew",
      "options": [
        {
          "name": "Check & Download New Documents",
          "value": "claimAndDownload",
          "action": "Claim and download new documents in one step"
        },
        {
          "name": "Check New Documents",
          "value": "checkNew",
          "action": "Claim new documents from the sync queue"
        },
        {
          "name": "Create Document",
          "value": "createNew",
          "action": "Create a document from mail data in tax metall"
        },
        {
          "name": "Download Document File",
          "value": "downloadFile",
          "action": "Download a claimed document file"
        },
        {
          "name": "Report Transfer Status",
          "value": "transferStatus",
          "action": "Report the share point transfer status"
        },
        {
          "name": "Unpack MSG File",
          "value": "unpackMsg",
          "action": "Unpack a stored msg file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentSync"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an article",
      "resource": "article"
    },
    {
      "name": "Search by Article ID",
      "value": "getById",
      "action": "Search by article ID in article",
      "resource": "article"
    },
    {
      "name": "Search by Article Number",
      "value": "getByArticleNumber",
      "action": "Search by article number in article",
      "resource": "article"
    },
    {
      "name": "Search by Drawing Number",
      "value": "getByDrawingNumber",
      "action": "Search by drawing number in article",
      "resource": "article"
    },
    {
      "name": "Search by Name",
      "value": "getByName",
      "action": "Search by name in article",
      "resource": "article"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an order",
      "resource": "auftrag"
    },
    {
      "name": "Get Order Status",
      "value": "getStatus",
      "action": "Get order status in order",
      "resource": "auftrag"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in order",
      "resource": "auftrag"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in purchase invoice",
      "resource": "eingangsrechnung"
    },
    {
      "name": "Search by Purchase Invoice No.",
      "value": "getById",
      "action": "Search by purchase invoice number in purchase invoice",
      "resource": "eingangsrechnung"
    },
    {
      "name": "Search by Supplier",
      "value": "getBySupplier",
      "action": "Search by supplier in purchase invoice",
      "resource": "eingangsrechnung"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a customer",
      "resource": "customer"
    },
    {
      "name": "Search by ID",
      "value": "getById",
      "action": "Search by ID in customer",
      "resource": "customer"
    },
    {
      "name": "Search by Name",
      "value": "getByName",
      "action": "Search by name in customer",
      "resource": "customer"
    },
    {
      "name": "Search by Order ID",
      "value": "getByOrderId",
      "action": "Search by order ID in customer",
      "resource": "customer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a supplier",
      "resource": "lieferant"
    },
    {
      "name": "Search by Article",
      "value": "getByArticle",
      "action": "Search by article in supplier",
      "resource": "lieferant"
    },
    {
      "name": "Search by ID",
      "value": "getById",
      "action": "Search by ID in supplier",
      "resource": "lieferant"
    },
    {
      "name": "Search by Name",
      "value": "getByName",
      "action": "Search by name in supplier",
      "resource": "lieferant"
    },
    {
      "name": "Search by Customer No.",
      "value": "getByCustomer",
      "action": "Search by customer number in delivery note",
      "resource": "lieferschein"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in delivery note",
      "resource": "lieferschein"
    },
    {
      "name": "Search by Delivery Note No.",
      "value": "getById",
      "action": "Search by delivery note number in delivery note",
      "resource": "lieferschein"
    },
    {
      "name": "Create File",
      "value": "createFile",
      "action": "Create a file in DMS",
      "resource": "dms"
    },
    {
      "name": "Search by Customer No.",
      "value": "getByCustomer",
      "action": "Search by customer number in dunning",
      "resource": "mahnung"
    },
    {
      "name": "Search by Due Date Range",
      "value": "getByDateRange",
      "action": "Search by due date range in dunning",
      "resource": "mahnung"
    },
    {
      "name": "Search by Customer No.",
      "value": "getByCustomer",
      "action": "Search by customer number in invoice",
      "resource": "rechnung"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in invoice",
      "resource": "rechnung"
    },
    {
      "name": "Search by Invoice No.",
      "value": "getById",
      "action": "Search by invoice number in invoice",
      "resource": "rechnung"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an offer",
      "resource": "offer"
    },
    {
      "name": "Search by Customer No.",
      "value": "getByCustomer",
      "action": "Search by customer number in offer",
      "resource": "offer"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in offer",
      "resource": "offer"
    },
    {
      "name": "Search by Offer No.",
      "value": "getById",
      "action": "Search by offer number in offer",
      "resource": "offer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an acquisition",
      "resource": "akquise"
    },
    {
      "name": "Search by ID",
      "value": "getById",
      "action": "Search by ID in acquisition",
      "resource": "akquise"
    },
    {
      "name": "Search by Name",
      "value": "getByName",
      "action": "Search by name in acquisition",
      "resource": "akquise"
    },
    {
      "name": "Search by Date Range",
      "value": "getByDateRange",
      "action": "Search by date range in acquisition",
      "resource": "akquise"
    },
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a statistics report",
      "resource": "statistics"
    },
    {
      "name": "Check & Download New Documents",
      "value": "claimAndDownload",
      "action": "Claim and download new documents in one step",
      "resource": "documentSync"
    },
    {
      "name": "Check New Documents",
      "value": "checkNew",
      "action": "Claim new documents from the sync queue",
      "resource": "documentSync"
    },
    {
      "name": "Create Document",
      "value": "createNew",
      "action": "Create a document from mail data in tax metall",
      "resource": "documentSync"
    },
    {
      "name": "Download Document File",
      "value": "downloadFile",
      "action": "Download a claimed document file",
      "resource": "documentSync"
    },
    {
      "name": "Report Transfer Status",
      "value": "transferStatus",
      "action": "Report the share point transfer status",
      "resource": "documentSync"
    },
    {
      "name": "Unpack MSG File",
      "value": "unpackMsg",
      "action": "Unpack a stored msg file",
      "resource": "documentSync"
    }
  ]

npm_readme:
  # n8n-nodes-taxmetall

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

  An [n8n](https://n8n.io/) community node package that connects **TaxMetall ERP** and **TaxDMS** to your workflows. Read and create records across all major ERP domains — customers, articles, orders, offers, invoices, delivery notes, purchase invoices, suppliers, dunning — and run custom SQL reports and upload documents to TaxDMS, all directly from n8n.

  [TaxMetall](https://www.vectotax.de) is an ERP system for metal trading and processing companies, developed by Vectotax Software GmbH.

  ---

  ## Table of Contents

  - [Installation](#installation)
  - [Credentials](#credentials)
  - [Node: TaxMetall ERP](#node-taxmetall-erp)
    - [Acquisition](#acquisition)
    - [Article](#article)
    - [Customer](#customer)
    - [Delivery Note](#delivery-note)
    - [DMS](#dms)
    - [Document Sync (SharePoint WF1 / WF2)](#document-sync-sharepoint-wf1--wf2)
    - [Dunning](#dunning)
    - [Invoice](#invoice)
    - [Offer](#offer)
    - [Order](#order)
    - [Purchase Invoice](#purchase-invoice)
    - [Statistic](#statistic)
    - [Supplier](#supplier)
  - [Compatibility](#compatibility)
  - [Resources](#resources)
  - [License](#license)

  ---

  ## Installation

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

  **Via the n8n UI:**
  1. Go to **Settings → Community Nodes**
  2. Click **Install a community node**
  3. Enter `@vectotaxsoftwaregmbh/n8n-nodes-taxmetall`
  4. Click **Install**

  **Via CLI:**
  ```bash
  npm install @vectotaxsoftwaregmbh/n8n-nodes-taxmetall
  ```

  ---

  ## Credentials

  Create a **TaxMetall API** credential in n8n (**Settings → Credentials → New → TaxMetall API**).

  | Field | Required | Description |
  |---|---|---|
  | **Base URL** | Yes | URL of your TaxMetall API service, e.g. `https://api.example.com:8443` |
  | **API Key** | Yes | The `tax-api-key` configured in your TaxMetall API service |
  | **Use ngrok Tunnel** | No | Enable if your TaxMetall instance is accessed via an ngrok tunnel — adds the `ngrok-skip-browser-warning` header to bypass the ngrok browser interstitial page |
  | **Allow Self-Signed Certificates** | No | Disable TLS certificate validation — enable only for on-premises installations using self-signed certificates |

  The API key is automatically injected as the `tax-api-key` HTTP header with every request.

  ---

  ## Node: TaxMetall ERP

  The **TaxMetall ERP** node covers all major TaxMetall domains. Select a **Resource** and then an **Operation** to configure the node.

  ---

  ### Acquisition

  Manages acquisition/lead contacts in TaxMetall.

  #### Create

  Creates a new acquisition entry.

  | Field | Required | Description |
  |---|---|---|
  | Email | Yes | Contact email address |
  | Company | Yes | Company name |
  | First Name | No | Contact first name |
  | Last Name | No | Contact last name |
  | Phone | No | Phone number |
  | Street | No | Street address |
  | Postal Code | No | Postal code |
  | City | No | City |
  | Country | No | Country |
  | Lead Source | No | Origin of the lead (e.g. trade fair, website) |
  | Campaign Info | No | Associated campaign |
  | Perspective Lead ID | No | External ID from Perspective CRM |

  #### Search by ID

  Returns a single acquisition entry by its internal contact number.

  | Field | Required | Description |
  |---|---|---|
  | Acquisition ID | Yes | Internal contact number (KontaktNr) |

  #### Search by Name

  Searches acquisition entries by partial match on company or contact name.

  | Field | Required | Description |
  |---|---|---|
  | Name | Yes | Partial name to search for |

  #### Search by Date Range

  Lists acquisition entries by their first contact date.

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### Article

  Manages articles (Artikel) in TaxMetall.

  #### Create

  Creates a new article. If no article number is provided, the next number from the configured number range is used automatically.

  | Field | Required | Description |
  |---|---|---|
  | Name | Yes | Article name / description (Bezeichnung) |
  | Unit of Measure | Yes | Unit of measure, e.g. `Stk`, `m`, `kg` |
  | Article Number | No | Article number — auto-assigned if left empty |
  | Drawing Number | No | Drawing or part number (Zeichnungsnr) |
  | Revision Number | No | Revision index |
  | Material | No | Material designation, e.g. `S235`, `1.4301` |
  | Manufacturing Indicator | No | Manufacturing key (FertigungsKz) |
  | Bill of Materials | No | `0` = no BOM, `1` = is a BOM |
  | Custom Tariff Number | No | Customs tariff number (Zolltarifnr) |
  | Preliminary | No | Mark article as preliminary (Vorläufig) |

  #### Search by Article ID

  Returns an article by its internal numeric ID.

  | Field | Required | Description |
  |---|---|---|
  | Article ID | Yes | Internal article ID (AID) |

  #### Search by Article Number

  Returns an article by its exact article number.

  | Field | Required | Description |
  |---|---|---|
  | Article Number | Yes | Article number (Artikelnr) |

  #### Search by Drawing Number

  Searches articles by drawing or part number.

  | Field | Required | Description |
  |---|---|---|
  | Drawing Number | Yes | Drawing number (Zeichnungsnr) |

  #### Search by Name

  Searches articles by partial match on the article name.

  | Field | Required | Description |
  |---|---|---|
  | Name | Yes | Partial name to search for |

  ---

  ### Customer

  Manages customers (Kunden) in TaxMetall.

  #### Create

  Creates a new customer.

  | Field | Required | Description |
  |---|---|---|
  | Company Name | Yes | Customer company name |
  | Name Addition | No | Additional name line (Namenzusatz) |
  | Street | No | Street address |
  | Postal Code | No | Postal code |
  | City | No | City |
  | Country | No | Country name |
  | ISO Country Code | No | Two-letter ISO code, e.g. `DE`, `AT`, `CH` |
  | Email | No | Email address |
  | Phone | No | Phone number |
  | Website | No | Website URL |

  #### Search by ID

  Returns a customer by their customer number.

  | Field | Required | Description |
  |---|---|---|
  | Customer ID | Yes | Customer number (Kundennr) |

  #### Search by Name

  Searches customers by partial match on their company name.

  | Field | Required | Description |
  |---|---|---|
  | Customer Name | Yes | Partial name to search for |

  #### Search by Order ID

  Returns the customer associated with a given order number.

  | Field | Required | Description |
  |---|---|---|
  | Order ID | Yes | Order number (Auftragnr) |

  ---

  ### Delivery Note

  Reads delivery notes (Lieferscheine) including their line items.

  #### Search by Delivery Note No.

  Returns a single delivery note with all its line items.

  | Field | Required | Description |
  |---|---|---|
  | Delivery Note Number | Yes | Delivery note number (Lieferscheinnr) |

  #### Search by Customer No.

  Lists all delivery notes for a given customer.

  | Field | Required | Description |
  |---|---|---|
  | Customer Number | Yes | Customer number (Kundennr) |

  #### Search by Date Range

  Lists all delivery notes within a date range.

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### DMS

  Uploads files to the **TaxDMS** document management system (Vectotax Software GmbH).

  #### Create File

  Uploads a binary file together with a metadata object to TaxDMS via the `/api/create-dms-file` endpoint. The file is transferred as Base64.

  | Field | Required | Description |
  |---|---|---|
  | Data (JSON) | Yes | Metadata object — structure defined by your TaxDMS configuration |
  | File (Binary) | Yes | Name of the n8n binary property that holds the file, e.g. `data` |

  > **Tip:** Use an **HTTP Request** node, a **Read Binary File** node, or any node that outputs a binary property to provide the file. The value of **File (Binary)** must match the property name under which n8n stores the file in that node's output.

  ---

  ### Document Sync (SharePoint WF1 / WF2)

  Connects the TaxMetall document pocket (Dokutasche) with SharePoint through the TaxMetall document-sync work queue (`APIEventTrigger` / `APIEventDetail`). It implements two workflows:

  - **WF1 — Export** (TaxMetall → SharePoint): claim newly created documents from the queue, download each file, upload it to SharePoint, then report the result back so the entry is closed or retried.
  - **WF2 — Import** (SharePoint / mail → TaxMetall): create a document (typically an `.eml` built by the service) in TaxMetall and write a closing audit entry, with optional deduplication by mail message ID.

  The service stores the resulting SharePoint URL under `Payload.sharePoint.mainUrl` and, for WF2, the mail ID under `Payload.email.messageId`.

  #### Check New Documents

  Claims up to **Limit** pending entries from the work queue and returns the list of documents to process (WF1, step 1). Claim locking is handled in-memory per tenant by the service — there is no token to pass around.

  | Field | Required | Description |
  |---|---|---|
  | Limit | No | Max number of documents to claim in one call (default `50`). The service caps this at its configured maximum. |

  Important response fields:

  | Field | Description |
  |---|---|
  | `busy` | `true` when another batch is still being processed; then `documents[]` is empty and nothing is claimed — simply poll again later |
  | `documents[]` | Entries ready for processing |
  | `documents[].syncId` | Queue entry ID — needed for download and status report |
  | `documents[].downloadUrl` | Ready-to-use relative URL `/api/document-file?syncId=…` (CREATE only) |
  | `documents[].eventTyp` | Event type as integer: `1` = CREATE, `3` = DELETE |
  | `documents[].aktion` | The same event as text: `CREATE` or `DELETE` |
  | `documents[].belegTyp` / `belegNr` | Business document type (e.g. `Auftrag`, `Rechnung`, `Angebot`) and document number — the internal table name is not exposed |
  | `documents[].dateiname` | Source file path/name |
  | `documents[].email` | For mail documents (`Typ=2`) on CREATE events: `{ from, to, subject, date }` from the document record — handy when uploading the mail to storage. Absent for non-mail documents. |
  | `documents[].payload` | For DELETE events only: the **full** payload object that was stored on the prior upload (the transfer-status `payload`, or — for documents imported via Create Document — `{ "sharePoint": { "mainUrl": … } }`), so you can remove the file from SharePoint. Read the URL from `payload.sharePointUrl` or `payload.sharePoint.mainUrl`. `null` if no prior upload is found / already purged by retention. |
  | `skipped[]` | Entries the service skipped this batch (informational only — nothing to download/upload) — `dms_reference` (a `DMS:` pointer, not a local file) or `file_not_found` (the referenced file is no longer on disk). Both occur only on CREATE events and the queue row is removed permanently. |

  **Coalescing (per file path):** Between two polls the same file can be created/deleted several times (e.g. created → deleted → created). For SharePoint only the **final state** matters. Coalescing is handled in the ERP trigger itself (only the latest event per file path / highest `syncId` is kept in the queue), so superseded earlier events never reach `check-new-documents` — there is no `superseded` skip reason. Combined with the delete correlation this means: a created→deleted pair where nothing was ever uploaded collapses to a no-op (the kept DELETE event returns `payload: null`), while created→deleted→created collapses to a single upload of the latest version.

  #### Download Document File

  Downloads the file of a single claimed entry as **binary data** (WF1, step 2). The node parses the file name from the response and sets the MIME type automatically.

  | Field | Required | Description |
  |---|---|---|
  | Sync ID | Yes | `syncId` of the entry (from Check New Documents) |
  | Put Output File in Field | Yes | Name of the binary property to write the file to (default `data`) |

  The downloaded file is placed in the chosen binary property, ready for an upload node (e.g. **HTTP Request** or a **Microsoft SharePoint** node). The item JSON also carries `syncId`, `fileName` and `mimeType`.

  #### Check & Download New Documents

  Combines **Check New Documents** and **Download Document File** into a single step (WF1, steps 1 + 2). It claims a batch from the queue and downloads the file for each CREATE entry (those with a `downloadUrl`) — so you no longer need a Split/loop + a separate download node.

  | Field | Required | Description |
  |---|---|---|
  | Limit | No | Max number of documents to claim in one call (default `50`). The service caps this at its configured maximum. |
  | Put Output File in Field | Yes | Name of the binary property to write each file to (default `data`) |

  **Output:** one item per claimed document — and exactly one summary item when nothing was found, so the node always returns something to branch on.

  - **Nothing found:** a single item `{ "success": false, "count": 0, "description": "No new documents found" }` (no binary). Use this to drive a "nothing to do" branch.
  - **Documents found:** one item per claimed document. Every item carries `success: true`, `count` (number of documents in the batch) and `index` (0-based position), in addition to:
    - CREATE entries (with a file): the full document metadata plus `fileName` and `mimeType`; the file is in the chosen binary property — ready to wire straight into an upload node.
    - Non-file events (e.g. DELETE): metadata only, no binary.
    - If a single file fails to download (it was removed or skipped server-side between claim and download), that item carries `downloadError` and `httpCode` instead of a binary; the rest of the batch still comes through.

  Tip: filter downstream on `{{ $json.success }}` to separate the "found" items from the empty-result item.

  Because the `syncId` is on every found item, a downstream **Report SharePoint Transfer Status** can acknowledge each entry as usual. Use the low-level **Check New Documents** / **Download Document File** operations only when you need full manual control over the claim/download split.

  #### Report SharePoint Transfer Status

  Reports the upload result back to the service (WF1, step 4).

  | Field | Required | Description |
  |---|---|---|
  | Sync ID | Yes | `syncId` of the entry |
  | Success | Yes | `true` = synced successfully, `false` = transfer failed |
  | Payload Fields | No | Shown when **Success** is on — **custom key/value pairs** stored as the entry payload (flat JSON), e.g. Key `sharePointUrl` with the uploaded URL. Stored verbatim and **returned in full on a later DELETE event** (`documents[].payload`) so you can act on it. Keys must be non-empty and unique; values are sent as strings. Total payload limited to 8 KB. |
  | Error Message | No | Shown when **Success** is off — error text recorded for the failed transfer |

  **Retry handling:** on `success = false` the service **keeps the work-queue row**, so the document is retried on the next poll — **unconditionally and without limit** (there is no retry counter and no `dead` state). The failure is recorded only in the service log.

  #### Create Document

  WF2: creates a document in TaxMetall from mail data. When no existing file path is supplied, the service builds a standards-compliant `.eml` (via Indy) from the email fields and attachments, links it to the target record, and writes a closing audit entry (`Quelle = API:create-new-dokument`). A `CONTEXT_INFO` marker prevents the ERP trigger from re-syncing the document (no loop).

  | Field | Required | Description |
  |---|---|---|
  | Area (Bereich) | Yes | Target area, chosen from a dropdown. Position documents are attached to the article, so use **Article (Artikel)** for those. |
  | Document Number (Belegnummer) | Yes | Number of the target record. For position documents use the article number. |
  | SharePoint URL | No | Optional source SharePoint URL (stored under `Payload.sharePoint.mainUrl` when set). Leave empty to create the document without a SharePoint reference — e.g. when the export to storage is handled later by WF1 (enable **Also Export to Storage**). |
  | Email To | No* | Recipient address (`email.an`) — required when the service generates the `.eml` |
  | Attach All Input Binary Fields | No | Attach **every** binary property on the input item automatically (variable number of files, e.g. all attachments from a Gmail/IMAP trigger). When on, the manual Attachments list is hidden and ignored. |
  | Allow Duplicates | No | Skip deduplication. Off by default. |
  | Also Export to Storage (Disable Loop Guard) | No | Off by default — the imported document is not re-exported. Enable to additionally queue the created document for export (WF1), e.g. to mirror it to SharePoint. |

  **Area (Bereich) mapping** — the dropdown sends these table names. Documents attached from positions use `Artikel_s` with `BelegNr = ArtikelNr`.

  | Dropdown | API value | Dropdown | API value |
  |---|---|---|---|
  | Order (Auftrag) | `Auftrag_s` | Offer (Angebot) | `Angebot_s` |
  | Invoice (Rechnung) | `Rechnung_s` | Delivery Note (Lieferschein) | `Lieferschein_s` |
  | Purchase Order (Bestellung) | `Bestellung_s` | Article (Artikel) | `Artikel_s` |
  | Inquiry (Anfrage) | `Anfrage_s` | Project (Projekt) | `Projekt` |
  | Customer (Kunde) | `Kunden_s` | Supplier (Lieferant) | `Liefer_s` |
  | Purchase Invoice (ER) | `ER` |  |  |

  **Email Fields** (collection — used to build the `.eml`):

  | Field | API field | Description |
  |---|---|---|
  | Date | `email.datum` | Date the mail was received (ISO 8601) |
  | From | `email.von` | Sender address |
  | HTML | `email.html` | HTML body — provide Text **or** HTML |
  | Message ID | `email.messageId` | Unique mail ID — drives deduplication |
  | Subject | `email.betreff` | Email subject |
  | Text | `email.text` | Plain text body — provide Text **or** HTML |

  \*When the service builds the `.eml`, `email.an` and at least one of `email.text` / `email.html` are required; otherwise the API returns `400`.

  **Attachments** (add one row per file):

  | Field | Description |
  |---|---|
  | Input Binary Field | Name of the n8n binary property to attach. If set, its content is Base64-encoded automatically and the file name / MIME type are taken from the binary metadata (unless overridden below). |
  | File Name | Attachment file name (`dateiname`) — overrides the binary file name |
  | MIME Type | Attachment MIME type — overrides the binary MIME type |
  | Content (Base64) | Base64 content (`inhaltBase64`) — used when **Input Binary Field** is empty |

  > **Binary handling:** the most convenient way to add attachments is to wire a node that outputs binary data (e.g. **HTTP Request**, **Read Binary File**, a SharePoint download) and reference its binary property under **Input Binary Field** — the node performs the Base64 conversion for you. The combined upload is bounded by the service limit (`MAX_UPLOAD_SIZE`, 60 MB request body ≈ 45 MiB of decoded attachments); a larger request is rejected with `403 Forbidden`.

  **Deduplication & `allowDuplicates`:**

  | `allowDuplicates` | `email.messageId` | Behaviour |
  |---|---|---|
  | off (default) | present, already seen | No `.eml`, no document, no audit entry — returns `duplicate: true` |
  | off (default) | present, new | Document is created normally |
  | off (default) | absent | No dedup check — document is created normally |
  | on | any | Dedup skipped — document is always created |

  The duplicate check matches on the previously stored `JSON_VALUE(Payload, '$.email.messageId')` of WF2 audit entries.

  #### Example workflows

  **WF1 — Export to SharePoint (combined, recommended):**

  ```text
  [Schedule/Trigger]
        ↓
  [TaxMetall ERP · Document Sync · Check & Download New Documents] → one item per document, binary "data"
        ↓
  [Upload to SharePoint]                                          → sharePointUrl
        ↓
  [TaxMetall ERP · Document Sync · Report Transfer Status]        (success = true, Payload Field sharePointUrl)
  ```

  **WF1 — Export to SharePoint (manual claim/download split):**

  ```text
  [Schedule/Trigger]
        ↓
  [TaxMetall ERP · Document Sync · Check New Documents]   → documents[]
        ↓ (Split / loop over documents[])
  [TaxMetall ERP · Document Sync · Download Document File] → binary "data"
        ↓
  [Upload to SharePoint]                                  → sharePointUrl
        ↓
  [TaxMetall ERP · Document Sync · Report Transfer Status] (success = true, Payload Field sharePointUrl)
  ```

  On an upload failure, set **Success** = `false` and pass the error message — the entry stays in the queue and is retried on the next poll, unconditionally and without limit (no retry counter, no `dead` state).

  **WF2 — Import from SharePoint / mail:**

  ```text
  [SharePoint / Mail source]
        ↓
  [TaxMetall ERP · Document Sync · Create Document]  (bereich, belegnummer, sharePointUrl, email, attachments)
  ```

  #### Example JSON for Create Document

  The node assembles the request below from its fields. The same body can also be sent directly to `POST /api/create-new-dokument`:

  ```json
  {
    "bereich": "Auftrag_s",
    "belegnummer": "10523",
    "sharePointUrl": "https://contoso.sharepoint.com/sites/erp/Freigegebene%20Dokumente/10523.eml",
    "allowDuplicates": false,
    "email": {
      "messageId": "<a1b2c3@mail.example.com>",
      "von": "kunde@example.com",
      "an": "vertrieb@firma.de",
      "betreff": "Bestellung 10523",
      "datum": "2026-06-15T09:30:00",
      "text": "Anbei die Bestellung.",
      "html": "<p>Anbei die Bestellung.</p>"
    },
    "attachments": [
      {
        "dateiname": "bestellung.pdf",
        "mimeType": "application/pdf",
        "inhaltBase64": "JVBERi0xLjcZ…"
      }
    ]
  }
  ```

  Successful response (new document):

  ```json
  { "success": true, "emlGenerated": true, "messageId": "<a1b2c3@mail.example.com>" }
  ```

  Duplicate response (same `messageId`, `allowDuplicates` off):

  ```json
  { "success": true, "duplicate": true, "message": "Mail bereits verarbeitet" }
  ```

  #### Typical errors

  | Status | Meaning |
  |---|---|
  | `400 Bad Request` | Missing/invalid field — e.g. `bereich`/`belegnummer` missing, no `sharePointUrl`, `email.an` or body missing, invalid Base64, or `allowDuplicates` not boolean |
  | `401 Unauthorized` | API key (`tax-api-key` header) missing or invalid |
  | `403 Forbidden` | Request body exceeds `MAX_UPLOAD_SIZE`, or the source file is not readable |
  | `404 Not Found` | Queue entry or source file not found; or an invalid target reference for WF2 |
  | `409 Conflict` | Wrong event type (e.g. a DELETE event has no file to download), or a `DMS:` reference that cannot be delivered as a local file |
  | `503 Service Unavailable` | Document sync disabled in the service config, or the APIEvent tables (`APIEventTrigger`/`APIEventDetail`) not present for the tenant — run `syncschema-init` |

  ---

  ### Dunning

  Reads open dunning items (Mahnungen). Dunning records are not independent documents in TaxMetall — they are a filtered view of the invoice table (open balance > 0, not a credit note, no dunning block active).

  #### Search by Customer No.

  Lists all open dunning items for a specific customer.

  | Field | Required | Description |
  |---|---|---|
  | Customer Number | Yes | Customer number (Kundennr) |
  | Due Date From | No | Optional: filter by due date start (`yyyy-mm-dd`) |
  | Due Date To | No | Optional: filter by due date end (`yyyy-mm-dd`) |
  | Dunning Level | No | Show only items of this dunning level — `0` = all levels |
  | Include Blocked | No | Include items with dunning block (Mahnsperre) — default: off |
  | Include Paid | No | Include already paid items — default: off |

  #### Search by Due Date Range

  Lists all open dunning items within a due date range.

  | Field | Required | Description |
  |---|---|---|
  | Due Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Due Date To | Yes | End date in format `yyyy-mm-dd` |
  | Dunning Level | No | Show only items of this dunning level — `0` = all levels |
  | Include Blocked | No | Include items with dunning block — default: off |
  | Include Paid | No | Include already paid items — default: off |

  ---

  ### Invoice

  Reads invoices (Rechnungen) including their line items.

  #### Search by Invoice No.

  Returns a single invoice with all its line items.

  | Field | Required | Description |
  |---|---|---|
  | Invoice Number | Yes | Invoice number (Rechnungnr) |

  #### Search by Customer No.

  Lists all invoices for a given customer.

  | Field | Required | Description |
  |---|---|---|
  | Customer Number | Yes | Customer number (Kundennr) |

  #### Search by Date Range

  Lists all invoices within a date range (by invoice date).

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### Offer

  Manages offers (Angebote) in TaxMetall.

  #### Create

  Creates a new offer for a customer with one article position. Either **Article ID** or **Article Number** must be provided — if both are set, Article ID takes precedence.

  | Field | Required | Description |
  |---|---|---|
  | Customer ID | Yes | Customer number (Kundennr) |
  | Article ID | No* | Numeric internal article ID |
  | Article Number | No* | Article number as text — used when Article ID is `0` |
  | Quantity | No | Quantity for the position — default: `1` |

  *At least one of Article ID or Article Number must be provided.

  #### Search by Offer No.

  Returns a single offer with all its line items.

  | Field | Required | Description |
  |---|---|---|
  | Offer Number | Yes | Offer number (Angebotsnr) |

  #### Search by Customer No.

  Lists all offers for a given customer.

  | Field | Required | Description |
  |---|---|---|
  | Customer Number | Yes | Customer number (Kundennr) |

  #### Search by Date Range

  Lists all offers within a date range (by offer date).

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### Order

  Creates and reads orders (Aufträge) in TaxMetall.

  #### Create

  Creates a new order for a customer with one or more article positions. For each position, either **Article ID** or **Article Number** must be provided — if both are set, Article ID takes precedence. Header and position data (addresses, VAT, prices, discounts, open quantity) are derived automatically from the customer and article master data, and the order totals are calculated.

  | Field | Required | Description |
  |---|---|---|
  | Customer ID | Yes | Customer number (Kundennr) the order is created for |
  | Positions | Yes | One or more positions. Add a row per article. |
  | › Article ID | No* | Numeric internal article ID |
  | › Article Number | No* | Article number as text — used when Article ID is `0` |
  | › Quantity | No | Quantity for the position — default: `1` |
  | Create Calculation | No | Freeze the bill of materials and create the calculation (work plan / material) for each position. Off by default. |

  *At least one of Article ID or Article Number must be provided per position.

  Each created position is marked in the `Text1` field with the note *"Erstellt durch TaxMetall API Service"*.

  #### Get Order Status

  Returns a single order including all its line items and current production status.

  | Field | Required | Description |
  |---|---|---|
  | Order Number | Yes | Internal order number (Auftragnr) |

  #### Search by Date Range

  Lists all orders within a date range.

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### Purchase Invoice

  Reads incoming purchase invoices (Eingangsrechnungen) including their line items.

  #### Search by Purchase Invoice No.

  Returns a purchase invoice by its invoice number. If multiple entries share the same invoice number (from different suppliers), add the supplier number to narrow the result.

  | Field | Required | Description |
  |---|---|---|
  | Purchase Invoice Number | Yes | Purchase invoice number (ERNr) |
  | Supplier Number | No | Supplier number to narrow results when the invoice number is not unique |

  #### Search by Supplier

  Lists all purchase invoices for a given supplier.

  | Field | Required | Description |
  |---|---|---|
  | Supplier Number | Yes | Supplier number (Liefernr) |

  #### Search by Date Range

  Lists all purchase invoices within a date range (by invoice date).

  | Field | Required | Description |
  |---|---|---|
  | Date From | Yes | Start date in format `yyyy-mm-dd` |
  | Date To | Yes | End date in format `yyyy-mm-dd` |

  ---

  ### Statistic

  Executes pre-configured SQL reports stored in TaxMetall and returns the results as a JSON array. This covers both custom SQL reports and Business Cockpit reports defined in your TaxMetall installation.

  The available reports are loaded dynamically from the API and presented in a dropdown — each option shows the report name and which parameters it requires.

  > **Note:** Only reports of type **Individual** (Individuell) and **Business Cockpit** (BC) are supported. Static system reports (Statisch) are not available because their SQL is not stored in the database.

  #### Execute

  | Field | Required | Description |
  |---|---|---|
  | Statistics / Report | Yes | Select the report from the dropdown — the description shows which parameters are needed |
  | Date From | No | Start of the reporting period (SQL parameter: `DatumVon`) |
  | Date To | No | End of the reporting period (SQL parameter: `DatumBis`) |
  | Comparison From | No | Start of an optional comparison period (SQL parameter: `VergleichVon`) |
  | Comparison To | No | End of an optional comparison period (SQL parameter: `VergleichBis`) |

  **Additional Parameters** (collection — add only what the report requires):

  | Field | SQL Parameter | Description |
  |---|---|---|
  | Article No. | `Artikel` | Filter by article number |
  | Article Group | `ArtikelGruppe` | Filter by article group |
  | Order No. | `Auftrag` | Filter by order number |
  | Order Position | `AuftragsPos` | Filter by order position |
  | Order Type | `AuftragsArt` | Filter by order type code |
  | Business Area | `GeschBereich` | Filter by business area |
  | Customer No. | `Kunden` | Filter by customer number |
  | Warehouse | `Lagerort` | Filter by warehouse code |
  | Supplier No. | `Lieferanten` | Filter by supplier number |
  | Employee | `Mitarbeiter` | Filter by employee code |
  | Offer No. | `Angebot` | Filter by offer number |
  | Offer Position | `AngebotsPos` | Filter by offer position |
  | Project No. | `Projekt` | Filter by project ID |
  | Purchase Order No. | `Bestellung` | Filter by purchase order number |
  | Purchase Order Position | `BestellPos` | Filter by purchase order position |
  | Value Range From | `WertebereichVon` | Numeric start value for range filters |
  | Value Range To | `WertebereichBis` | Numeric end value for range filters |
  | Variable 1 | `Variable1` | Free text parameter |

  ---

  ### Supplier

  Manages suppliers (Lieferanten) in TaxMetall.

  #### Create

  Creates a new supplier.

  | Field | Required | Description |
  |---|---|---|
  | Company Name | Yes | Supplier company name |
  | Name Addition | No | Additional name line (Namenzusatz) |
  | Street | No | Street address |
  | Postal Code | No | Postal code |
  | City | No | City |
  | Country | No | Country name |
  | ISO Country Code | No | Two-letter ISO code, e.g. `DE`, `AT`, `CH` |
  | Email | No | Email address |
  | Phone | No | Phone number |
  | Website | No | Website URL |

  #### Search by ID

  Returns a supplier by their supplier number.

  | Field | Required | Description |
  |---|---|---|
  | Supplier Number | Yes | Supplier number (Liefernr) |

  #### Search by Name

  Searches suppliers by partial match on their company name.

  | Field | Required | Description |
  |---|---|---|
  | Name | Yes | Partial name to search for |

  #### Search by Article

  Returns all suppliers linked to a specific article via the supplier-article assignment table.

  | Field | Required | Description |
  |---|---|---|
  | Article Number | Yes | Article number from the supplier-article assignment |

  ---

  ## Compatibility

  | Requirement | Version |
  |---|---|
  | n8n | >= 1.0.0 |
  | Node.js | >= 18 |
  | n8n Nodes API | 1 |

  ---

  ## Resources

  - [Vectotax Software GmbH](https://www.vectotax.de)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [npm package](https://www.npmjs.com/package/@vectotaxsoftwaregmbh/n8n-nodes-taxmetall)
  - [Report an issue](mailto:vectotax@vectotax.de)

  ---

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Integrates the TaxMetall SQL Edition ERP system into n8n workflows to automate queries and data management for metal trading companies.","capabilities":["Search and retrieve articles by ID, number, name, or drawing number","Search and retrieve customers by ID, name, or order association","Retrieve order details and status by date range","Create new sales offers","Search offers by number, customer, or date range","Retrieve invoices by number, customer, or date range","Retrieve purchase invoices by ER number or supplier","Retrieve delivery notes by number, customer, or date range","Search suppliers by ID, name, or associated article","List open dunning records by customer or due date"],"authentication":"API key required (sent as 'tax-api-key' HTTP header)","commonUseCases":["Automated invoice generation and tracking","Customer order status monitoring","Inventory and article management","Supplier invoice reconciliation","Automated dunning/reminders for overdue payments"],"limitations":["Dunning records are not independent documents but a filtered view of the invoice table","Self-signed certificate support requires explicit configuration and is not recommended for untrusted networks"],"relatedNodes":[]}


node_type: n8n-nodes-iterationlayer.iterationLayer
package_name: n8n-nodes-iterationlayer
display_name: Iteration Layer
description: Extract data from documents, transform images, generate images, and create documents
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: iterationlayer
author_github_url: https://github.com/iterationlayer/
npm_package_name: n8n-nodes-iterationlayer
npm_version: 1.0.16
community_fetched_at: 2026-07-14T14:40:33.997Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "documentExtraction",
      "options": [
        {
          "name": "Document Extraction",
          "value": "documentExtraction",
          "description": "Extract structured data from documents and images using AI"
        },
        {
          "name": "Image Transformation",
          "value": "imageTransformation",
          "description": "Resize, crop, convert, and apply effects to images"
        },
        {
          "name": "Image Generation",
          "value": "imageGeneration",
          "description": "Generate images from layer compositions"
        },
        {
          "name": "Document Generation",
          "value": "documentGeneration",
          "description": "Generate PDF, DOCX, EPUB, or PPTX documents"
        },
        {
          "name": "Document to Markdown",
          "value": "documentToMarkdown",
          "description": "Convert documents to clean, structured Markdown"
        },
        {
          "name": "Website Extraction",
          "value": "websiteExtraction",
          "description": "Extract structured data from website URLs"
        },
        {
          "name": "Sheet Generation",
          "value": "sheetGeneration",
          "description": "Generate XLSX, CSV, or Markdown spreadsheets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n-nodes-iterationlayer

  n8n community node for the [Iteration Layer](https://iterationlayer.com) API.

  Extract data from documents, transform images, generate images, and create documents — all from your n8n workflows.

  ## Demo

  [Watch the demo video](./demo.mp4)

  ## Installation

  ### Via n8n UI (recommended)

  1. Open **Settings** > **Community Nodes**
  2. Select **Install a community node**
  3. Enter `n8n-nodes-iterationlayer`
  4. Accept the risks and install

  ### Via npm (self-hosted)

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

  Restart n8n after installation.

  ## Credentials

  1. Go to **Credentials** > **New Credential**
  2. Search for **Iteration Layer API**
  3. Enter your API key (starts with `il_`)
  4. Get an API key at [platform.iterationlayer.com](https://platform.iterationlayer.com)

  ## Resources

  The node provides one resource per Iteration Layer API:

  ### Document Extraction

  Extract structured data from PDFs, images, DOCX, and more. Define a schema with field names, types, and descriptions — the API returns typed values with confidence scores.

  - **File input**: Binary data from a previous node or a public URL
  - **Schema**: Build via the UI (17 field types) or provide raw JSON for advanced schemas (arrays, calculated fields)

  ### Website Extraction

  Extract structured data from public website pages with the same schema builder used by Document Extraction.

  - **Website URL**: Public HTTPS URL, with optional custom user agent, locale, timeout, and JavaScript rendering
  - **Schema**: Build via the UI or provide raw JSON for advanced schemas

  ### Image Transformation

  Apply image operations sequentially: resize, crop, rotate, blur, sharpen, convert format, upscale, remove background, and more (24 operations total).

  - **File input**: Binary data or URL
  - **Operations**: Add multiple operations via the UI — each type shows its specific parameters

  ### Image Generation

  Generate images from layer compositions defined as JSON. Supports solid-color, text, image, QR code, barcode, and gradient layers.

  - **Dimensions**: Width and height in pixels
  - **Layers**: JSON array defining the composition (see [API docs](https://iterationlayer.com/docs/image-generation))
  - **Output format**: PNG, JPEG, WebP, TIFF, GIF, or AVIF

  ### Document Generation

  Generate PDF, DOCX, EPUB, or PPTX documents from structured JSON definitions including metadata, page layout, styles, and content blocks.

  - **Format**: PDF, DOCX, EPUB, or PPTX
  - **Document**: JSON object with the full document definition (see [API docs](https://iterationlayer.com/docs/document-generation))

  ### Document to Markdown

  Convert PDFs, DOCX, PPTX, and other documents into clean, structured Markdown.

  - **File input**: Binary data or URL
  - **Output**: Markdown text with the document's content

  ### Sheet Generation

  Generate XLSX, CSV, or Markdown spreadsheets from structured JSON definitions.

  - **Sheets**: JSON array defining sheet names, columns, and row data
  - **Styles**: Optional header and body cell styles
  - **Output format**: XLSX, CSV, or Markdown

  ## Binary Data

  Image Transformation, Image Generation, Document Generation, and Sheet Generation return binary data. The output is available as n8n binary data that you can pass to downstream nodes (e.g., write to disk, send via email, upload to S3).

  Document Extraction returns JSON data with extracted field values and confidence scores. Document to Markdown returns JSON with the markdown text.

  ## Async Mode

  All resources support async mode. Enable it and provide a webhook URL — the API returns immediately and delivers results to your webhook when processing is complete.

  ## Links

  - [npm Package](https://www.npmjs.com/package/n8n-nodes-iterationlayer)
  - [Iteration Layer Docs](https://iterationlayer.com/docs)
  - [n8n Integration Guide](https://iterationlayer.com/docs/n8n)
  - [API Reference](https://iterationlayer.com/docs/document-extraction)
  - [Get an API Key](https://platform.iterationlayer.com)

  ## Issues & Feedback

  Please report bugs and request features in the [issues repository](https://github.com/iterationlayer/issues).

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node connects to the Iteration Layer API to extract data from documents and websites, transform and generate images, and create various document and spreadsheet formats.","capabilities":["Extract structured data from PDFs, images, and DOCX files with confidence scores","Extract structured data from public website pages","Transform images using 24 operations (resize, crop, rotate, blur, remove background, etc.)","Generate images from JSON-defined layer compositions","Generate documents in PDF, DOCX, EPUB, and PPTX formats","Convert documents to structured Markdown","Generate spreadsheets in XLSX, CSV, or Markdown formats","Support for async processing with webhook callbacks"],"authentication":"API key required","commonUseCases":["Automated invoice and form data extraction","Batch image processing and optimization","Dynamic report and presentation generation","Website content scraping and structuring","Document-to-markdown conversion for chatbots"],"limitations":["Requires an active Iteration Layer API account and valid API key","Schema building for extraction is primarily done via the UI or raw JSON, limiting dynamic UI-based schema creation within n8n"],"relatedNodes":["n8n-nodes-nlp","n8n-nodes-file","n8n-nodes-ai"]}


node_type: n8n-nodes-krs.krs
package_name: n8n-nodes-krs
display_name: KRS
description: Look up companies in the Polish National Court Register (KRS)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: michal.ploneczka
author_github_url: https://github.com/michalploneczka/n8n-polish-nodes.git
npm_package_name: n8n-nodes-krs
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:33.998Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "company",
      "options": [
        {
          "name": "Company",
          "value": "company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrentExtract",
      "options": [
        {
          "name": "Get Current Extract",
          "value": "getCurrentExtract",
          "action": "Get current extract of a company",
          "description": "Get the current company data extract from KRS"
        },
        {
          "name": "Get Full Extract",
          "value": "getFullExtract",
          "action": "Get full extract of a company",
          "description": "Get the full historical company data extract from KRS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Current Extract",
      "value": "getCurrentExtract",
      "action": "Get current extract of a company",
      "description": "Get the current company data extract from KRS",
      "resource": "company"
    },
    {
      "name": "Get Full Extract",
      "value": "getFullExtract",
      "action": "Get full extract of a company",
      "description": "Get the full historical company data extract from KRS",
      "resource": "company"
    }
  ]

npm_readme:
  # n8n-nodes-krs

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

  n8n community node for looking up companies in the **KRS** (Krajowy Rejestr Sadowy / Polish National Court Register) via the public government API at [api-krs.ms.gov.pl](https://api-krs.ms.gov.pl/).

  This node lets you retrieve current or full historical company data extracts from the official KRS registry -- no registration or API key required.

  ## Operations

  | Resource | Operation           | Description                                                  |
  | -------- | ------------------- | ------------------------------------------------------------ |
  | Company  | Get Current Extract | Get the current company data extract (basic info, officers)  |
  | Company  | Get Full Extract    | Get the full historical extract (all sections, all changes)  |

  ## Credentials

  No credentials required. The KRS API is free and public -- no registration or API key needed.

  ## Installation

  ### Community Nodes (recommended)

  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Select **Install a community node**
  3. Enter `n8n-nodes-krs` and click **Install**

  ### Manual installation

  ```bash
  cd ~/.n8n/custom
  npm install n8n-nodes-krs
  ```

  Restart n8n after installation.

  ## Usage

  1. Add the **KRS** node to your workflow
  2. Select the **Company** resource
  3. Choose an **Operation**: Get Current Extract or Get Full Extract
  4. Enter a **KRS Number** (10 digits, zero-padded, e.g., `0000019193`)
  5. Optionally select a **Register Type** (auto-detect works in most cases):
     - **Entrepreneurs (P)** -- business entities
     - **Associations (S)** -- NGOs, foundations, associations

  ## Notes

  - **KRS Number format**: Always 10 digits, zero-padded (e.g., `0000019193` for PKN Orlen).
  - **JSON responses**: The API returns structured JSON with company data organized in sections (dzial1-dzial6).
  - **Personal data**: The API anonymizes personal data (e.g., board members' PESEL numbers are masked).
  - **Response structure**: Data is nested under `odpis.dane.dzial1` through `dzial6`, covering company identity, management, capital, financials, and more.
  - **Rate limits**: The API is public but may enforce rate limits during high traffic. Use reasonable request intervals.

  ## Example Workflow

  Below is a minimal workflow that retrieves the current KRS extract for PKN Orlen:

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "company",
          "operation": "getCurrentExtract",
          "krsNumber": "0000019193"
        },
        "name": "KRS Lookup",
        "type": "n8n-nodes-krs.krs",
        "typeVersion": 1,
        "position": [450, 300]
      }
    ]
  }
  ```

  ## API Documentation

  Full API reference: [https://api-krs.ms.gov.pl/](https://api-krs.ms.gov.pl/)

  ## License

  [MIT](https://opensource.org/licenses/MIT)

  ## Author

  [Michal Ploneczka](https://codersgroup.pl) (michal.ploneczka@gmail.com)

ai_documentation_summary:
  {"purpose":"Retrieves current or full historical company data extracts from the Polish National Court Register (KRS) via the public government API.","capabilities":["Get current company data extract (basic info, officers)","Get full historical extract (all sections, all changes)","Filter by register type (Entrepreneurs or Associations)","Auto-detect register type"],"authentication":"None","commonUseCases":["Verify company registration details","Extract historical changes in company management","Validate business entity status for due diligence","Retrieve official company capital and financial data"],"limitations":["Personal data is anonymized (e.g., masked PESEL numbers)","API may enforce rate limits during high traffic periods","Requires KRS number in specific 10-digit zero-padded format"],"relatedNodes":[]}


node_type: @eledo/n8n-nodes-eledo.eledo
package_name: @eledo/n8n-nodes-eledo
display_name: Eledo PDF
description: Generate PDFs with Eledo directly in n8n workflows
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: lhusivarga
author_github_url: https://github.com/eledo-online/n8n-nodes-eledo.git
npm_package_name: @eledo/n8n-nodes-eledo
npm_version: 1.0.6
community_fetched_at: 2026-07-14T14:40:33.999Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Generate",
          "value": "generate",
          "action": "Generate PDF document",
          "description": "Generate a PDF from a template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate",
      "value": "generate",
      "action": "Generate PDF document",
      "description": "Generate a PDF from a template",
      "resource": "document"
    }
  ]

npm_readme:
  # @eledo/n8n-nodes-eledo
  [![n8n](https://img.shields.io/badge/n8n-%3E%3D2.0-blue)](https://github.com/n8n-io/n8n)
  [![CI](https://github.com/eledo-online/n8n-nodes-eledo/actions/workflows/ci.yml/badge.svg)](https://github.com/eledo-online/n8n-nodes-eledo/actions/workflows/ci.yml)
  [![codecov](https://codecov.io/github/eledo-online/n8n-nodes-eledo/graph/badge.svg?token=GPVBCPX5YE)](https://codecov.io/github/eledo-online/n8n-nodes-eledo)
  [![Release](https://img.shields.io/github/v/release/eledo-online/n8n-nodes-eledo)](https://github.com/eledo-online/n8n-nodes-eledo/releases)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
  [![Eledo](https://img.shields.io/badge/Eledo-green.svg)](https://eledo.online/)
  ![Eledo PDF automation overview](https://github.com/user-attachments/assets/31ee16e8-7a60-4989-8a73-cf2c3097cfa4)

  This is an official n8n community node for integrating [**Eledo**](https://eledo.online/) into n8n workflows.

  **Eledo** is a document automation service that allows you to generate PDFs from structured data directly within 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)
  [Usage](#usage)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation

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

  ## Operations

  This node focuses on [**PDF generation via the Eledo REST API**](https://eledo.online/documentation/api_reference).
  While Eledo exposes multiple API endpoints, the node intentionally surfaces only the operation that is relevant for most automation workflows.

  ### Supported operations

  #### Generate PDF

  Generate a PDF document from a selected template and input data.

  * Uses Eledo’s synchronous [**Generate**](https://eledo.online/documentation/api_reference/generate) REST endpoint
  * Accepts structured input data
  * Returns the generated PDF as binary data
  * Handles API timeouts and error responses gracefully

  This operation covers **the vast majority of real-world use cases** and is the primary integration point between n8n and Eledo.

  ---

  ### Internally used (not exposed to users)

  The following API endpoints may be used internally by the node to improve user experience but are **not exposed as standalone operations**:

  * [**List templates**](https://eledo.online/documentation/api_reference/list)
    Used to dynamically fetch available templates and populate a template selector in the node UI.

  * [**Schema**](https://eledo.online/documentation/api_reference/schema)
    Used internally to understand template structure and validate input data.

  ---

  ### Not implemented (by design)

  The following legacy or auxiliary API endpoints are **not implemented** in this node:

  * [**Create File**](https://eledo.online/documentation/api_reference/create_file)
  * [**Download**](https://eledo.online/documentation/api_reference/download)
  * [**Profile**](https://eledo.online/documentation/api_reference/profile)

  These endpoints support older, multi-step workflows or account introspection and are not required for modern, synchronous PDF generation scenarios.

  ---

  > **Note**
  > The operation set may expand in the future if additional Eledo API capabilities become publicly available or if strong use cases emerge.

  ## Credentials

  Eledo uses **API key authentication**.

  ### Prerequisites

  To use this node, you need:

  1. An active [**Eledo account**](https://eledo.online/register)
  2. An **API key** generated in your Eledo user profile

  ### Getting your API key

  1. Log in to your Eledo account
  2. Navigate to **Profile → API**
  3. Copy your existing API key or generate a new one

  ### Setting up credentials in n8n

  1. Create new credentials for **Eledo API**
  2. Paste your API key into the **API Key** field
  3. Save the credentials

  The API key is sent using [**HTTP header authentication**](https://eledo.online/documentation/api_reference/authentication) and is required for all requests.

  ## Compatibility

  This node is developed and tested against the **current stable version of n8n**.

  - **Tested with**: n8n **2.0.3**
  - **Minimum required version**: n8n **2.x**

  Earlier versions of n8n may work, but are **not officially supported or tested**.

  The node will be kept compatible with future n8n releases, and compatibility will be verified as new stable versions are published.

  ## Resources

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

ai_documentation_summary:
  {"purpose":"Generate PDF documents from structured data using the Eledo document automation service directly within n8n workflows.","capabilities":["Generate PDFs from selected templates using input data","Return generated PDFs as binary data","Handle API timeouts and error responses gracefully","Dynamically fetch available templates for UI selection","Validate input data against template schemas"],"authentication":"API key required","commonUseCases":["Automated invoice generation","Dynamic report creation","Contract or agreement generation","Label or sticker production from database records"],"limitations":["Does not support legacy endpoints like Create File, Download, or Profile","Only exposes the synchronous Generate operation; other Eledo API endpoints are not available as standalone operations","Requires n8n version 2.0 or higher"],"relatedNodes":[]}


node_type: @makingchatbots/n8n-nodes-genesys-cloud.genesysCloud
package_name: @makingchatbots/n8n-nodes-genesys-cloud
display_name: Genesys Cloud
description: Consume Genesys Cloud API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: sketchingdev
author_github_url: https://github.com/MakingChatbots/n8n-nodes-genesys-cloud.git
npm_package_name: @makingchatbots/n8n-nodes-genesys-cloud
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:34.000Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "queue",
      "options": [
        {
          "name": "Conversation",
          "value": "conversation",
          "description": "A conversation in the system"
        },
        {
          "name": "Data Action",
          "value": "dataAction",
          "description": "A data action for integration with external systems"
        },
        {
          "name": "Division",
          "value": "division",
          "description": "A division in the system"
        },
        {
          "name": "Group",
          "value": "group",
          "description": "A group in the system"
        },
        {
          "name": "OAuth Client",
          "value": "oauthClient",
          "description": "An OAuth client in the system"
        },
        {
          "name": "Queue",
          "value": "queue",
          "description": "A queue in the system"
        },
        {
          "name": "User",
          "value": "user",
          "description": "A user in the system"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Add Members",
          "value": "addMembers",
          "action": "Add members to a queue",
          "description": "Add members to a queue"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a queue",
          "description": "Create a queue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a queue",
          "description": "Get a queue"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many queues",
          "description": "Get many queues"
        },
        {
          "name": "Get Members",
          "value": "getMembers",
          "action": "Get members of a queue",
          "description": "Get members of a queue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "queue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "description": "Get a user"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users",
          "description": "Get many users"
        },
        {
          "name": "Get Queues",
          "value": "getQueues",
          "action": "Get queues for a user",
          "description": "Get queues for a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversation",
          "description": "Get a conversation"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many conversations",
          "description": "Get many active conversations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a data action",
          "description": "Get a data action"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many data actions",
          "description": "Get many data actions"
        },
        {
          "name": "Get Integrations",
          "value": "getIntegrations",
          "action": "Get integrations",
          "description": "Get integrations for filtering data actions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataAction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a group",
          "description": "Get a group"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many groups",
          "description": "Get many groups"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a division",
          "description": "Get a division"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many divisions",
          "description": "Get many divisions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "division"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an oauth client",
          "description": "Get an OAuth client"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many oauth clients",
          "description": "Get many OAuth clients"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get usage statistics for oauth client",
          "description": "Get usage statistics for an OAuth client"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "oauthClient"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Members",
      "value": "addMembers",
      "action": "Add members to a queue",
      "description": "Add members to a queue",
      "resource": "queue"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a queue",
      "description": "Create a queue",
      "resource": "queue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a queue",
      "description": "Get a queue",
      "resource": "queue"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many queues",
      "description": "Get many queues",
      "resource": "queue"
    },
    {
      "name": "Get Members",
      "value": "getMembers",
      "action": "Get members of a queue",
      "description": "Get members of a queue",
      "resource": "queue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "description": "Get a user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many users",
      "description": "Get many users",
      "resource": "user"
    },
    {
      "name": "Get Queues",
      "value": "getQueues",
      "action": "Get queues for a user",
      "description": "Get queues for a user",
      "resource": "user"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversation",
      "description": "Get a conversation",
      "resource": "conversation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many conversations",
      "description": "Get many active conversations",
      "resource": "conversation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a data action",
      "description": "Get a data action",
      "resource": "dataAction"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many data actions",
      "description": "Get many data actions",
      "resource": "dataAction"
    },
    {
      "name": "Get Integrations",
      "value": "getIntegrations",
      "action": "Get integrations",
      "description": "Get integrations for filtering data actions",
      "resource": "dataAction"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a group",
      "description": "Get a group",
      "resource": "group"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many groups",
      "description": "Get many groups",
      "resource": "group"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a division",
      "description": "Get a division",
      "resource": "division"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many divisions",
      "description": "Get many divisions",
      "resource": "division"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an oauth client",
      "description": "Get an OAuth client",
      "resource": "oauthClient"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many oauth clients",
      "description": "Get many OAuth clients",
      "resource": "oauthClient"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get usage statistics for oauth client",
      "description": "Get usage statistics for an OAuth client",
      "resource": "oauthClient"
    }
  ]

npm_readme:
  # Genesys Cloud Node for n8n
  [![npm](https://img.shields.io/npm/v/@makingchatbots/n8n-nodes-genesys-cloud)](https://www.npmjs.com/package/@makingchatbots/n8n-nodes-genesys-cloud)
  [![Follow me on LinkedIn for updates](https://img.shields.io/badge/Follow%20for%20updates-LinkedIn-blue)](https://www.linkedin.com/in/lucas-woodward-the-dev/)

  An n8n community node for [Genesys Cloud's Platform API](https://developer.genesys.cloud/platform/api/).

  <img width="3018" height="1325" alt="image" src="https://github.com/user-attachments/assets/2be20ca1-9adb-4e62-a776-1cc34ea7f799" />

  ## Installation

  1. Expand **Settings**
  2. Click **Community nodes**
  3. Click **Install a community node**
  4. Under **npm Package name** put `@makingchatbots/n8n-nodes-genesys-cloud`
  5. Check _**'I understand the risks...'**_
  6. Click **Install**

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

  ## Credentials

  You need to authenticate with Genesys Cloud using OAuth 2.0 Client Credentials.

  1.  Log in to your Genesys Cloud organization.
  2.  Navigate to **Admin** > **Integrations** > **OAuth**.
  3.  Click **Add Client**.
  4.  Give the client a name (e.g. "n8n Automation").
  5.  Under **Grant Types**, select **Client Credentials**.
  6.  Click the **Roles** tab and assign the necessary roles for the resources you intend to access.
  7.  Save the client.
  8.  Copy the **Client ID** and **Client Secret**.

  In n8n:
  1.  Create a new credential type **Genesys Cloud API**.
  2.  Enter your **Client ID** and **Client Secret**.
  3.  Select your **Region** (e.g., `mypurecloud.com`, `mypurecloud.ie`, etc.).

  ## Operations

  This node supports the following operations:


  | Resource | Operation | Description |
  | :--- | :--- | :--- |
  | **Conversation** | Get | Get a conversation |
  | | Get Many | Get many active conversations |
  | **Data Action** | Get | Get a data action |
  | | Get Many | Get many data actions |
  | | Get Integrations | Get integrations for filtering data actions |
  | **Division** | Get | Get a division |
  | | Get Many | Get many divisions |
  | **Group** | Get | Get a group |
  | | Get Many | Get many groups |
  | **OAuth Client** | Get | Get an OAuth client |
  | | Get Many | Get many OAuth clients |
  | | Get Usage | Get usage statistics for an OAuth client |
  | **Queue** | Add Members | Add members to a queue |
  | | Create | Create a queue |
  | | Get | Get a queue |
  | | Get Many | Get many queues |
  | | Get Members | Get members of a queue |
  | **User** | Get | Get a user |
  | | Get Many | Get many users |
  | | Get Queues | Get queues for a user |

  ## Resources

  *   [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  *   [Genesys Cloud Platform API Documentation](https://developer.genesys.cloud/platform/api/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows by consuming the Genesys Cloud Platform API to manage conversations, users, queues, and other cloud resources.","capabilities":["Retrieve individual conversations","Retrieve multiple active conversations","Retrieve data actions and filter by integrations","Manage divisions (get single or multiple)","Manage groups (get single or multiple)","Manage OAuth clients and view usage statistics","Create new queues","Retrieve queue details and members","Add members to existing queues","Retrieve user details and associated queues"],"authentication":"OAuth 2.0 Client Credentials","commonUseCases":["Automating customer service ticket routing","Synchronizing Genesys user data with other systems","Monitoring queue performance and member assignments","Retrieving conversation history for analytics"],"limitations":["Limited to GET operations for most resources (no create/update/delete mentioned in operations table except for Queue Create and Queue Add Members)","Requires manual setup of OAuth Client Credentials in Genesys Cloud Admin panel before use"],"relatedNodes":[]}


node_type: @renebello/n8n-nodes-azuracast.azuraCast
package_name: @renebello/n8n-nodes-azuracast
display_name: AzuraCast
description: Interact with AzuraCast Web API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: renebello
author_github_url: https://github.com/renebell0/n8n-nodes-azuracast.git
npm_package_name: @renebello/n8n-nodes-azuracast
npm_version: 0.1.10
community_fetched_at: 2026-07-14T14:40:34.001Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "resource_administration_backups",
      "options": [
        {
          "name": "Administration Backup",
          "value": "resource_administration_backups",
          "description": "Administration: Backups"
        },
        {
          "name": "Administration Custom Field",
          "value": "resource_administration_custom_fields",
          "description": "Administration: Custom Fields"
        },
        {
          "name": "Administration Debugging",
          "value": "resource_administration_debugging",
          "description": "Administration: Debugging"
        },
        {
          "name": "Administration General",
          "value": "resource_administration_general",
          "description": "Administration: General"
        },
        {
          "name": "Administration Role",
          "value": "resource_administration_roles",
          "description": "Administration: Roles"
        },
        {
          "name": "Administration Settings",
          "value": "resource_administration_settings",
          "description": "Administration: Settings"
        },
        {
          "name": "Administration Station",
          "value": "resource_administration_stations",
          "description": "Administration: Stations"
        },
        {
          "name": "Administration Storage Location",
          "value": "resource_administration_storage_locations",
          "description": "Administration: Storage Locations"
        },
        {
          "name": "Administration User",
          "value": "resource_administration_users",
          "description": "Administration: Users"
        },
        {
          "name": "Miscellaneous",
          "value": "resource_miscellaneous",
          "description": "Miscellaneous"
        },
        {
          "name": "My Account",
          "value": "resource_my_account",
          "description": "My Account"
        },
        {
          "name": "Public Miscellaneous",
          "value": "resource_public_miscellaneous",
          "description": "Public: Miscellaneous"
        },
        {
          "name": "Public Now Playing",
          "value": "resource_public_now_playing",
          "description": "Public: Now Playing"
        },
        {
          "name": "Public Station",
          "value": "resource_public_stations",
          "description": "Public: Stations"
        },
        {
          "name": "Station Broadcasting",
          "value": "resource_stations_broadcasting",
          "description": "Stations: Broadcasting"
        },
        {
          "name": "Station General",
          "value": "resource_stations_general",
          "description": "Stations: General"
        },
        {
          "name": "Station HLS Stream",
          "value": "resource_stations_hls_streams",
          "description": "Stations: HLS Streams"
        },
        {
          "name": "Station Media",
          "value": "resource_stations_media",
          "description": "Stations: Media"
        },
        {
          "name": "Station Mount Point",
          "value": "resource_stations_mount_points",
          "description": "Stations: Mount Points"
        },
        {
          "name": "Station Playlist",
          "value": "resource_stations_playlists",
          "description": "Stations: Playlists"
        },
        {
          "name": "Station Podcast",
          "value": "resource_stations_podcasts",
          "description": "Stations: Podcasts"
        },
        {
          "name": "Station Queue",
          "value": "resource_stations_queue",
          "description": "Stations: Queue"
        },
        {
          "name": "Station Remote Relay",
          "value": "resource_stations_remote_relays",
          "description": "Stations: Remote Relays"
        },
        {
          "name": "Station Report",
          "value": "resource_stations_reports",
          "description": "Stations: Reports"
        },
        {
          "name": "Station SFTP User",
          "value": "resource_stations_sftp_users",
          "description": "Stations: SFTP Users"
        },
        {
          "name": "Station Streamer/DJ",
          "value": "resource_stations_streamers_djs",
          "description": "Stations: Streamers/DJs"
        },
        {
          "name": "Station Web Hook",
          "value": "resource_stations_web_hooks",
          "description": "Stations: Web Hooks"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteBackup",
      "options": [
        {
          "name": "Delete Backup",
          "value": "deleteBackup",
          "action": "delete backup",
          "description": "Delete a given backup"
        },
        {
          "name": "Download Backup",
          "value": "downloadBackup",
          "action": "download backup",
          "description": "Download a given backup"
        },
        {
          "name": "Get Backups",
          "value": "getBackups",
          "action": "get backups",
          "description": "Return a list of all current backups"
        },
        {
          "name": "Run Do Backup",
          "value": "postAdminDoBackup",
          "action": "run do backup",
          "description": "Initialize a manual backup"
        },
        {
          "name": "View Log",
          "value": "adminBackupsViewLog",
          "action": "view log",
          "description": "View a specific backup log contents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_backups"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addCustomField",
      "options": [
        {
          "name": "Create Field",
          "value": "addCustomField",
          "action": "create field",
          "description": "Create a new custom field"
        },
        {
          "name": "Delete Field",
          "value": "deleteCustomField",
          "action": "delete field",
          "description": "Delete a single custom field"
        },
        {
          "name": "Get Field",
          "value": "getCustomField",
          "action": "get field",
          "description": "Retrieve details for a single custom field"
        },
        {
          "name": "Get Fields",
          "value": "getCustomFields",
          "action": "get fields",
          "description": "List all current custom fields in the system"
        },
        {
          "name": "Update Field",
          "value": "editCustomField",
          "action": "update field",
          "description": "Update details of a single custom field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_custom_fields"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "adminDebugClearCache",
      "options": [
        {
          "name": "Clear Cache",
          "value": "adminDebugClearCache",
          "action": "clear cache",
          "description": "Clear the application cache (Redis)"
        },
        {
          "name": "Clear Queue",
          "value": "adminDebugClearQueue",
          "action": "clear queue",
          "description": "Clear the specified message queue"
        },
        {
          "name": "Clear Station Queue",
          "value": "adminDebugClearStationQueue",
          "action": "clear station queue",
          "description": "Clear the upcoming song queue and generate a new one"
        },
        {
          "name": "Get Queues",
          "value": "getAdminDebugQueues",
          "action": "get queues",
          "description": "List all message queues"
        },
        {
          "name": "Get Stations",
          "value": "getAdminDebugStations",
          "action": "get stations",
          "description": "List all stations with their debug links"
        },
        {
          "name": "Get Sync Tasks",
          "value": "getAdminDebugSyncTasks",
          "action": "get sync tasks",
          "description": "List all sync tasks and details about their run times"
        },
        {
          "name": "Run Sync Task",
          "value": "adminDebugRunSyncTask",
          "action": "run sync task",
          "description": "Manually run a scheduled synchronized task by name"
        },
        {
          "name": "Update Station Next Song",
          "value": "adminDebugStationNextSong",
          "action": "update station next song",
          "description": "Get the next song to be played by the AutoDJ for a given station"
        },
        {
          "name": "Update Station Now Playing",
          "value": "adminDebugStationNowPlaying",
          "action": "update station now playing",
          "description": "Generate the raw Now Playing data for a given station"
        },
        {
          "name": "Update Telnet Command",
          "value": "putAdminDebugTelnetCommand",
          "action": "update telnet command",
          "description": "Manually run a Telnet command on a station backend"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_debugging"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "adminCreateApiKey",
      "options": [
        {
          "name": "Create API Key",
          "value": "adminCreateApiKey",
          "action": "create API key",
          "description": "Create a new API key for a specified user"
        },
        {
          "name": "Delete API Key",
          "value": "adminDeleteApiKey",
          "action": "delete API key",
          "description": "Delete a single API key"
        },
        {
          "name": "Delete Custom Asset",
          "value": "deleteAdminCustomAsset",
          "action": "delete custom asset",
          "description": "Removes the custom asset of the specified type"
        },
        {
          "name": "Delete Rsas",
          "value": "deleteRsas",
          "action": "delete rsas",
          "description": "Removes the Rocket Streaming Audio Server (RSAS) installation"
        },
        {
          "name": "Delete Rsas License",
          "value": "deleteRsasLicense",
          "action": "delete rsas license",
          "description": "Removes the Rocket Streaming Audio Server (RSAS) license"
        },
        {
          "name": "Delete Shoutcast",
          "value": "deleteShoutcast",
          "action": "delete shoutcast",
          "description": "Removes the installed Shoutcast binary"
        },
        {
          "name": "Delete Stereo Tool",
          "value": "deleteStereoTool",
          "action": "delete stereo tool",
          "description": "Removes the installed Stereo Tool binary"
        },
        {
          "name": "Get Auditlog",
          "value": "getAuditlog",
          "action": "get auditlog",
          "description": "List all Audit Log actions that have taken place on the installation"
        },
        {
          "name": "Get Custom Asset",
          "value": "getAdminCustomAsset",
          "action": "get custom asset",
          "description": "Get the details of the custom asset of the specified type"
        },
        {
          "name": "Get Geo Lite",
          "value": "getGeoLite",
          "action": "get geo lite",
          "description": "Get the current MaxMindDB GeoLite Database status"
        },
        {
          "name": "Get Many API Keys",
          "value": "adminListApiKeys",
          "action": "get many API keys",
          "description": "List all current API keys across the system"
        },
        {
          "name": "Get Many Logs",
          "value": "adminListLogs",
          "action": "get many logs",
          "description": "List all available log types for viewing"
        },
        {
          "name": "Get Relay Details",
          "value": "internalGetRelayDetails",
          "action": "get relay details",
          "description": "Returns all necessary information to relay all 'relayable' stations"
        },
        {
          "name": "Get Relays",
          "value": "adminGetRelays",
          "action": "get relays",
          "description": "Return a list of all currently active AzuraRelay instances"
        },
        {
          "name": "Get Rsas",
          "value": "getRsas",
          "action": "get rsas",
          "description": "Get the current Rocket Streaming Audio Server (RSAS) status"
        },
        {
          "name": "Get Server Stats",
          "value": "getServerStats",
          "action": "get server stats",
          "description": "Return a list of all CPU usage stats"
        },
        {
          "name": "Get Service Details",
          "value": "getServiceDetails",
          "action": "get service details",
          "description": "List the status of essential system services"
        },
        {
          "name": "Get Shoutcast",
          "value": "getShoutcast",
          "action": "get shoutcast",
          "description": "Get details about the Shoutcast installation"
        },
        {
          "name": "Get Status",
          "value": "getUpdateStatus",
          "action": "get status",
          "description": "Show information about this installation and its update status"
        },
        {
          "name": "Get Stereo Tool",
          "value": "getStereoTool",
          "action": "get stereo tool",
          "description": "Get information about the Stereo Tool installation"
        },
        {
          "name": "Restart Service",
          "value": "restartService",
          "action": "restart service",
          "description": "Restart the specified service"
        },
        {
          "name": "Run Custom Asset",
          "value": "postAdminCustomAsset",
          "action": "run custom asset",
          "description": "Upload a new custom asset of the specified type"
        },
        {
          "name": "Run Geo Lite",
          "value": "postGeoLite",
          "action": "run geo lite",
          "description": "Set the GeoLite MaxMindDB Database license key"
        },
        {
          "name": "Run Rsas",
          "value": "postRsas",
          "action": "run rsas",
          "description": "Upload a new Rocket Streaming Audio Server (RSAS) binary"
        },
        {
          "name": "Run Rsas License",
          "value": "postRsasLicense",
          "action": "run rsas license",
          "description": "Upload a new Rocket Streaming Audio Server (RSAS) license key"
        },
        {
          "name": "Run Shoutcast",
          "value": "postShoutcast",
          "action": "run shoutcast",
          "description": "Upload a new Shoutcast binary"
        },
        {
          "name": "Run Stereo Tool",
          "value": "postStereoTool",
          "action": "run stereo tool",
          "description": "Upload a new Stereo Tool binary"
        },
        {
          "name": "Send Test Email",
          "value": "adminSendTestEmail",
          "action": "send test email",
          "description": "Send a test e-mail to confirm mail delivery settings"
        },
        {
          "name": "Update Generate Acme Cert",
          "value": "putAdminGenerateAcmeCert",
          "action": "update generate acme cert",
          "description": "Generate or renew ACME certificate"
        },
        {
          "name": "Update Web",
          "value": "putWebUpdate",
          "action": "update web",
          "description": "Attempts to trigger a web-based update"
        },
        {
          "name": "View ACME Log",
          "value": "adminAcmeViewLog",
          "action": "view ACME log",
          "description": "View the logs of a manually run ACME certificate renewal"
        },
        {
          "name": "View Log",
          "value": "adminViewLog",
          "action": "view log",
          "description": "View a specific log contents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_general"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addRole",
      "options": [
        {
          "name": "Create Role",
          "value": "addRole",
          "action": "create role",
          "description": "Create a new role"
        },
        {
          "name": "Delete Role",
          "value": "deleteRole",
          "action": "delete role",
          "description": "Delete a single role"
        },
        {
          "name": "Get Permissions",
          "value": "getPermissions",
          "action": "get permissions",
          "description": "Return a list of all available permissions"
        },
        {
          "name": "Get Role",
          "value": "getRole",
          "action": "get role",
          "description": "Retrieve details for a single current role"
        },
        {
          "name": "Get Roles",
          "value": "getRoles",
          "action": "get roles",
          "description": "List all current roles in the system"
        },
        {
          "name": "Update Role",
          "value": "editRole",
          "action": "update role",
          "description": "Update details of a single role"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_roles"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSettings",
      "options": [
        {
          "name": "Get Settings",
          "value": "getSettings",
          "action": "get settings",
          "description": "List the current values of all editable system settings"
        },
        {
          "name": "Update Settings",
          "value": "editSettings",
          "action": "update settings",
          "description": "Update settings to modify any settings provided"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_settings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postAdminStationsClone",
      "options": [
        {
          "name": "Clone Station",
          "value": "postAdminStationsClone",
          "action": "clone station",
          "description": "Clone a station, preserving certain settings"
        },
        {
          "name": "Create Station",
          "value": "adminAddStation",
          "action": "create station",
          "description": "Create a new station"
        },
        {
          "name": "Delete Station",
          "value": "adminDeleteStation",
          "action": "delete station",
          "description": "Delete a single station"
        },
        {
          "name": "Get Station",
          "value": "adminGetStation",
          "action": "get station",
          "description": "Retrieve details for a single station"
        },
        {
          "name": "Get Stations",
          "value": "adminGetStations",
          "action": "get stations",
          "description": "List all current stations in the system"
        },
        {
          "name": "Get Storage Locations",
          "value": "getAdminStationStorageLocations",
          "action": "get storage locations",
          "description": "List storage locations available for assignment to a station"
        },
        {
          "name": "Update Station",
          "value": "adminEditStation",
          "action": "update station",
          "description": "Update details of a single station"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_stations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addStorageLocation",
      "options": [
        {
          "name": "Create Location",
          "value": "addStorageLocation",
          "action": "create location",
          "description": "Create a new storage location"
        },
        {
          "name": "Delete Location",
          "value": "deleteStorageLocation",
          "action": "delete location",
          "description": "Delete a single storage location"
        },
        {
          "name": "Get Location",
          "value": "getStorageLocation",
          "action": "get location",
          "description": "Retrieve details for a single storage location"
        },
        {
          "name": "Get Locations",
          "value": "getStorageLocations",
          "action": "get locations",
          "description": "List all current storage locations in the system"
        },
        {
          "name": "Update Location",
          "value": "editStorageLocation",
          "action": "update location",
          "description": "Update details of a single storage location"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_storage_locations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addLoginToken",
      "options": [
        {
          "name": "Create Login Token",
          "value": "addLoginToken",
          "action": "create login token",
          "description": "Create a new login token"
        },
        {
          "name": "Create User",
          "value": "addUser",
          "action": "create user",
          "description": "Create a new user"
        },
        {
          "name": "Delete Login Token",
          "value": "deleteLoginToken",
          "action": "delete login token",
          "description": "Delete a single login token"
        },
        {
          "name": "Delete User",
          "value": "deleteUser",
          "action": "delete user",
          "description": "Delete a single user"
        },
        {
          "name": "Get Login Token",
          "value": "getLoginToken",
          "action": "get login token",
          "description": "Retrieve details for a single login token"
        },
        {
          "name": "Get Login Tokens",
          "value": "getLoginTokens",
          "action": "get login tokens",
          "description": "List all current unexpired login tokens in the system"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "get user",
          "description": "Retrieve details for a single current user"
        },
        {
          "name": "Get Users",
          "value": "getUsers",
          "action": "get users",
          "description": "List all current users in the system"
        },
        {
          "name": "Update User",
          "value": "editUser",
          "action": "update user",
          "description": "Update details of a single user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_administration_users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDashboardCharts",
      "options": [
        {
          "name": "Get Dashboard Charts",
          "value": "getDashboardCharts",
          "action": "get dashboard charts",
          "description": "Get the measurements for the dashboard charts"
        },
        {
          "name": "Get Dashboard Stations",
          "value": "getDashboardStations",
          "action": "get dashboard stations",
          "description": "List stations that can be managed by the current user account on the dashboard"
        },
        {
          "name": "Get Notifications",
          "value": "getNotifications",
          "action": "get notifications",
          "description": "Show all notifications your current account should see"
        },
        {
          "name": "Get Prometheus",
          "value": "getPrometheus",
          "action": "get prometheus",
          "description": "Returns the Prometheus measurements for this installation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_miscellaneous"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "changeMyPassword",
      "options": [
        {
          "name": "Change Password",
          "value": "changeMyPassword",
          "action": "change password",
          "description": "Change the password of your account"
        },
        {
          "name": "Create API Key",
          "value": "addMyApiKey",
          "action": "create API key",
          "description": "Create a new API key associated with your account"
        },
        {
          "name": "Delete API Key",
          "value": "deleteMyApiKey",
          "action": "delete API key",
          "description": "Delete a single API key associated with your account"
        },
        {
          "name": "Delete Passkey",
          "value": "deleteAccountPasskey",
          "action": "delete passkey",
          "description": "Delete a specified passkey by ID"
        },
        {
          "name": "Delete Two Factor",
          "value": "deleteMyTwoFactor",
          "action": "delete two factor",
          "description": "Remove two-factor authentication from your account"
        },
        {
          "name": "Get API Key",
          "value": "getMyApiKey",
          "action": "get API key",
          "description": "Retrieve details for a single API key"
        },
        {
          "name": "Get API Keys",
          "value": "getMyApiKeys",
          "action": "get API keys",
          "description": "List all API keys associated with your account"
        },
        {
          "name": "Get Many Passkeys",
          "value": "getAccountListPasskeys",
          "action": "get many passkeys",
          "description": "List currently registered passkeys"
        },
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "get me",
          "description": "Show the details for your current logged-in account"
        },
        {
          "name": "Get Passkey",
          "value": "getAccountGetPasskey",
          "action": "get passkey",
          "description": "Get the details of a single passkey"
        },
        {
          "name": "Get Two Factor",
          "value": "getMyTwoFactor",
          "action": "get two factor",
          "description": "Get the current two-factor authentication status of your account"
        },
        {
          "name": "Get Web Authn Register",
          "value": "getAccountWebAuthnRegister",
          "action": "get web authn register",
          "description": "Get registration details for WebAuthn registration"
        },
        {
          "name": "Update Me",
          "value": "putMe",
          "action": "update me",
          "description": "Save changes to your logged in account"
        },
        {
          "name": "Update Two Factor",
          "value": "putAccountTwoFactor",
          "action": "update two factor",
          "description": "Register a new two-factor authentication method"
        },
        {
          "name": "Update Web Authn Register",
          "value": "putAccountWebAuthnRegister",
          "action": "update web authn register",
          "description": "Submit a new registration request for WebAuthn"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_my_account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOpenApiSpec",
      "options": [
        {
          "name": "Get Open API Spec",
          "value": "getOpenApiSpec",
          "action": "get open API spec",
          "description": "Returns the OpenAPI specification document for this installation"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "get status",
          "description": "Returns an affirmative response if the API is active"
        },
        {
          "name": "Get Time",
          "value": "getTime",
          "action": "get time",
          "description": "Returns the time (with formatting) in GMT and the user's local time zone, if logged in"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_public_miscellaneous"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllNowPlaying",
      "options": [
        {
          "name": "Get All Now Playing",
          "value": "getAllNowPlaying",
          "action": "get all now playing",
          "description": "Returns a full summary of all stations' current state"
        },
        {
          "name": "Get Station Now Playing",
          "value": "getStationNowPlaying",
          "action": "get station now playing",
          "description": "Returns a full summary of the specified station's current state"
        },
        {
          "name": "Get Station Now Playing Art",
          "value": "getStationNowPlayingArt",
          "action": "get station now playing art",
          "description": "Always redirects to the current art for the given station"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_public_now_playing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStationOnDemandDownload",
      "options": [
        {
          "name": "Download On Demand",
          "value": "getStationOnDemandDownload",
          "action": "download on demand",
          "description": "Download an on-demand playlist file by media unique ID"
        },
        {
          "name": "Get Media Art",
          "value": "getMediaArt",
          "action": "get media art",
          "description": "Returns the album art for a song, or a generic image"
        },
        {
          "name": "Get On Demand",
          "value": "getStationOnDemand",
          "action": "get on demand",
          "description": "List all tracks available on-demand for this station"
        },
        {
          "name": "Get Podcast",
          "value": "getStationPublicPodcast",
          "action": "get podcast",
          "description": "Get the public information for a given podcast"
        },
        {
          "name": "Get Podcast Art",
          "value": "getPodcastArt",
          "action": "get podcast art",
          "description": "Gets the album art for a podcast"
        },
        {
          "name": "Get Podcast Episode",
          "value": "getStationPublicPodcastEpisode",
          "action": "get podcast episode",
          "description": "Get information for a public episode of a public podcast"
        },
        {
          "name": "Get Podcast Episode Art",
          "value": "getPodcastEpisodeArt",
          "action": "get podcast episode art",
          "description": "Gets the album art for a podcast episode"
        },
        {
          "name": "Get Podcast Episode Media",
          "value": "getPodcastEpisodeMedia",
          "action": "get podcast episode media",
          "description": "Gets the media for a podcast episode"
        },
        {
          "name": "Get Podcast Episodes",
          "value": "getStationPublicPodcastEpisodes",
          "action": "get podcast episodes",
          "description": "List all visible episodes for a given podcast"
        },
        {
          "name": "Get Podcasts",
          "value": "getStationPublicPodcasts",
          "action": "get podcasts",
          "description": "List all visible public podcasts"
        },
        {
          "name": "Get Requestable Songs",
          "value": "getRequestableSongs",
          "action": "get requestable songs",
          "description": "Return a list of requestable songs"
        },
        {
          "name": "Get Schedule",
          "value": "getSchedule",
          "action": "get schedule",
          "description": "Return upcoming and currently ongoing schedule entries"
        },
        {
          "name": "Get Station",
          "value": "getStation",
          "action": "get station",
          "description": "Return information about a single station"
        },
        {
          "name": "Get Stations",
          "value": "getStations",
          "action": "get stations",
          "description": "Returns a list of stations"
        },
        {
          "name": "Get Streamer Art",
          "value": "getStreamerArt",
          "action": "get streamer art",
          "description": "Gets the default album art for a streamer"
        },
        {
          "name": "Submit Song Request",
          "value": "submitSongRequest",
          "action": "submit song request",
          "description": "Submit a song request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_public_stations"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteStereoToolConfiguration",
      "options": [
        {
          "name": "Delete Stereo Tool Configuration",
          "value": "deleteStereoToolConfiguration",
          "action": "delete stereo tool configuration",
          "description": "Removes the Stereo Tool configuration file for a station"
        },
        {
          "name": "Export Station Liquidsoap Config",
          "value": "exportStationLiquidsoapConfig",
          "action": "export station liquidsoap config",
          "description": "Generate an archive of all Liquidsoap configuration on your station, including custom config"
        },
        {
          "name": "Get Liquidsoap Config",
          "value": "getStationLiquidsoapConfig",
          "action": "get liquidsoap config",
          "description": "Get the generated and editable sections of the station Liquidsoap configuration"
        },
        {
          "name": "Get Service Status",
          "value": "getServiceStatus",
          "action": "get service status",
          "description": "Retrieve the current status of all serivces associated with the radio broadcast"
        },
        {
          "name": "Get Stereo Tool Configuration",
          "value": "getStereoToolConfiguration",
          "action": "get stereo tool configuration",
          "description": "Get the Stereo Tool configuration file for a station"
        },
        {
          "name": "Import Station Liquidsoap Config",
          "value": "importStationLiquidsoapConfig",
          "action": "import station liquidsoap config",
          "description": "Import a previously exported Liquidsoap configuration archive and replace custom config sections"
        },
        {
          "name": "Restart Services",
          "value": "restartServices",
          "action": "restart services",
          "description": "Restart all services associated with the radio broadcast"
        },
        {
          "name": "Run Service Action",
          "value": "doBackendServiceAction",
          "action": "run service action",
          "description": "Perform service control actions on the radio backend (Liquidsoap)"
        },
        {
          "name": "Run Service Action (POST)",
          "value": "doFrontendServiceAction",
          "action": "run service action (post)",
          "description": "Perform service control actions on the radio frontend (Icecast, Shoutcast, etc.)"
        },
        {
          "name": "Run Stereo Tool Configuration",
          "value": "postStereoToolConfiguration",
          "action": "run stereo tool configuration",
          "description": "Update the Stereo Tool configuration file for a station"
        },
        {
          "name": "Update Liquidsoap Config",
          "value": "putStationLiquidsoapConfig",
          "action": "update liquidsoap config",
          "description": "Save the editable sections of the station Liquidsoap configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_broadcasting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteStationCustomAsset",
      "options": [
        {
          "name": "Delete Custom Asset",
          "value": "deleteStationCustomAsset",
          "action": "delete custom asset",
          "description": "Removes the custom asset of the specified type"
        },
        {
          "name": "Delete Fallback",
          "value": "deleteStationFallback",
          "action": "delete fallback",
          "description": "Removes the custom fallback track for a station"
        },
        {
          "name": "Get Custom Asset",
          "value": "getStationCustomAsset",
          "action": "get custom asset",
          "description": "Get the details of the custom asset of the specified type"
        },
        {
          "name": "Get Fallback",
          "value": "getStationFallback",
          "action": "get fallback",
          "description": "Get the custom fallback track for a station"
        },
        {
          "name": "Get Log",
          "value": "getStationLog",
          "action": "get log",
          "description": "View a specific log contents for the given station"
        },
        {
          "name": "Get Logs",
          "value": "getStationLogs",
          "action": "get logs",
          "description": "Return a list of available logs for the given station"
        },
        {
          "name": "Get Profile",
          "value": "getStationProfile",
          "action": "get profile",
          "description": "Retrieve the profile of the given station"
        },
        {
          "name": "Get Profile Edit",
          "value": "getStationProfileEdit",
          "action": "get profile edit",
          "description": "Get the editable profile for the current station"
        },
        {
          "name": "Get Quota",
          "value": "getQuota",
          "action": "get quota",
          "description": "Get the current usage and quota for a given station storage location"
        },
        {
          "name": "Get Quota Of Type",
          "value": "getQuotaOfType",
          "action": "get quota of type",
          "description": "Get the current usage and quota for a given station storage location"
        },
        {
          "name": "Run Custom Asset",
          "value": "postStationCustomAsset",
          "action": "run custom asset",
          "description": "Upload a new custom asset of the specified type"
        },
        {
          "name": "Run Fallback",
          "value": "postStationFallback",
          "action": "run fallback",
          "description": "Update the custom fallback track for the station"
        },
        {
          "name": "Run Now Playing Update",
          "value": "postStationNowPlayingUpdate",
          "action": "run now playing update",
          "description": "Manually update the Now Playing metadata for the station"
        },
        {
          "name": "Update Profile Edit",
          "value": "putStationProfileEdit",
          "action": "update profile edit",
          "description": "Save the station profile for the current station"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_general"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addHlsStream",
      "options": [
        {
          "name": "Create Stream",
          "value": "addHlsStream",
          "action": "create stream",
          "description": "Create a new HLS stream"
        },
        {
          "name": "Delete Stream",
          "value": "deleteHlsStream",
          "action": "delete stream",
          "description": "Delete a single HLS stream"
        },
        {
          "name": "Get Stream",
          "value": "getHlsStream",
          "action": "get stream",
          "description": "Retrieve details for a single HLS stream"
        },
        {
          "name": "Get Streams",
          "value": "getHlsStreams",
          "action": "get streams",
          "description": "List all current HLS streams"
        },
        {
          "name": "Update Stream",
          "value": "editHlsStream",
          "action": "update stream",
          "description": "Update details of a single HLS stream"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_hls_streams"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addFile",
      "options": [
        {
          "name": "Create File",
          "value": "addFile",
          "action": "create file",
          "description": "Upload a new file"
        },
        {
          "name": "Delete Art",
          "value": "deleteMediaArt",
          "action": "delete art",
          "description": "Removes the album art for a track"
        },
        {
          "name": "Delete File",
          "value": "deleteFile",
          "action": "delete file",
          "description": "Delete a single file"
        },
        {
          "name": "Download Bulk Media",
          "value": "getStationBulkMediaDownload",
          "action": "download bulk media",
          "description": "Download a CSV containing details about all station media"
        },
        {
          "name": "Download File",
          "value": "getStationFileDownload",
          "action": "download file",
          "description": "Download a file by relative path"
        },
        {
          "name": "Get File",
          "value": "getFile",
          "action": "get file",
          "description": "Retrieve details for a single file"
        },
        {
          "name": "Get File Directories",
          "value": "getStationFileDirectories",
          "action": "get file directories",
          "description": "List directories in a station media library for moving or renaming"
        },
        {
          "name": "Get Files",
          "value": "getFiles",
          "action": "get files",
          "description": "List all current uploaded files"
        },
        {
          "name": "Get Many Station File",
          "value": "getStationFileList",
          "action": "get many station file",
          "description": "List files in the media directory by path"
        },
        {
          "name": "Get Play File",
          "value": "getPlayFile",
          "action": "get play file",
          "description": "Download or play a given file by ID"
        },
        {
          "name": "Get Play File Song ID",
          "value": "getPlayFileSongId",
          "action": "get play file song ID",
          "description": "Download or play a given file by song_id"
        },
        {
          "name": "Get Waveform",
          "value": "getStationMediaWaveform",
          "action": "get waveform",
          "description": "Get waveform data for a media ID (for the Visual Cue Editor)"
        },
        {
          "name": "Run Art",
          "value": "postMediaArt",
          "action": "run art",
          "description": "Sets the album art for a track"
        },
        {
          "name": "Run Bulk Media Preview",
          "value": "postStationBulkMediaPreview",
          "action": "run bulk media preview",
          "description": "Preview changes from a CSV containing details about all station media"
        },
        {
          "name": "Run Files Mkdir",
          "value": "postStationFilesMkdir",
          "action": "run files mkdir",
          "description": "Create a directory in a station media directory"
        },
        {
          "name": "Run Files Rename",
          "value": "postStationFilesRename",
          "action": "run files rename",
          "description": "Rename the specified files in the station media directory"
        },
        {
          "name": "Run Waveform",
          "value": "postStationMediaWaveform",
          "action": "run waveform",
          "description": "Save cached waveform data for a media ID (for the Visual Cue Editor)"
        },
        {
          "name": "Update File",
          "value": "editFile",
          "action": "update file",
          "description": "Update details of a single file"
        },
        {
          "name": "Update File Batch Action",
          "value": "putStationFileBatchAction",
          "action": "update file batch action",
          "description": "Perform a batch action on a collection of files or directories"
        },
        {
          "name": "Upload Bulk Media",
          "value": "postStationBulkMediaUpload",
          "action": "upload bulk media",
          "description": "Upload a CSV containing details about all station media"
        },
        {
          "name": "Upload File",
          "value": "postUploadFile",
          "action": "upload file",
          "description": "Upload and process a new media file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addMount",
      "options": [
        {
          "name": "Create Mount",
          "value": "addMount",
          "action": "create mount",
          "description": "Create a new mount point"
        },
        {
          "name": "Delete Intro",
          "value": "deleteMountIntro",
          "action": "delete intro",
          "description": "Removes the intro track for a mount point"
        },
        {
          "name": "Delete Mount",
          "value": "deleteMount",
          "action": "delete mount",
          "description": "Delete a single mount point"
        },
        {
          "name": "Get Intro",
          "value": "getMountIntro",
          "action": "get intro",
          "description": "Get the intro track for a mount point"
        },
        {
          "name": "Get Mount",
          "value": "getMount",
          "action": "get mount",
          "description": "Retrieve details for a single mount point"
        },
        {
          "name": "Get Mounts",
          "value": "getStationMounts",
          "action": "get mounts",
          "description": "List all current mount points"
        },
        {
          "name": "Run Intro",
          "value": "postMountIntro",
          "action": "run intro",
          "description": "Update the intro track for a mount point"
        },
        {
          "name": "Update Mount",
          "value": "editMount",
          "action": "update mount",
          "description": "Update details of a single mount point"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_mount_points"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postStationPlaylistClone",
      "options": [
        {
          "name": "Clone Station Playlist",
          "value": "postStationPlaylistClone",
          "action": "clone station playlist",
          "description": "Create a copy of the specified playlist"
        },
        {
          "name": "Create Playlist",
          "value": "addPlaylist",
          "action": "create playlist",
          "description": "Create a new playlist"
        },
        {
          "name": "Delete Empty Playlist",
          "value": "deleteEmptyPlaylist",
          "action": "delete empty playlist",
          "description": "Empty the contents of a song-based playlist"
        },
        {
          "name": "Delete Playlist",
          "value": "deletePlaylist",
          "action": "delete playlist",
          "description": "Delete a single playlist"
        },
        {
          "name": "Delete Queue",
          "value": "deletePlaylistQueue",
          "action": "delete queue",
          "description": "Reset the internal playback queue of a shuffled, song-based playlist"
        },
        {
          "name": "Get Apply To",
          "value": "getStationPlaylistApplyTo",
          "action": "get apply to",
          "description": "Get a list of directories that the given playlist can apply to"
        },
        {
          "name": "Get Export Playlist",
          "value": "getExportPlaylist",
          "action": "get export playlist",
          "description": "Export a playlist contents in standard media player playlist format"
        },
        {
          "name": "Get Order",
          "value": "getStationPlaylistOrder",
          "action": "get order",
          "description": "Get the current order of sequential tracks in the specified playlist"
        },
        {
          "name": "Get Playlist",
          "value": "getPlaylist",
          "action": "get playlist",
          "description": "Retrieve details for a single playlist"
        },
        {
          "name": "Get Playlists",
          "value": "getPlaylists",
          "action": "get playlists",
          "description": "List all current playlists"
        },
        {
          "name": "Get Queue",
          "value": "getStationPlaylistQueue",
          "action": "get queue",
          "description": "Get the current playback queue for the specified playlist"
        },
        {
          "name": "Import Station Playlist",
          "value": "postStationPlaylistImport",
          "action": "import station playlist",
          "description": "Import the contents of an uploaded playlist (PLS or M3U) file into the specified playlist"
        },
        {
          "name": "Run Podcast Batch",
          "value": "postStationPodcastBatch",
          "action": "run podcast batch",
          "description": "Import the contents of an uploaded playlist (PLS or M3U) file into the specified playlist"
        },
        {
          "name": "Toggle Playlist",
          "value": "putTogglePlaylist",
          "action": "toggle playlist",
          "description": "Toggle a playlist between enabled and disabled status"
        },
        {
          "name": "Update Apply To",
          "value": "putStationPlaylistApplyTo",
          "action": "update apply to",
          "description": "Apply the specified playlist to the specified directories"
        },
        {
          "name": "Update Order",
          "value": "putStationPlaylistOrder",
          "action": "update order",
          "description": "Set the order of sequential tracks in the specified playlist"
        },
        {
          "name": "Update Playlist",
          "value": "editPlaylist",
          "action": "update playlist",
          "description": "Update details of a single playlist"
        },
        {
          "name": "Update Reshuffle Playlist",
          "value": "putReshufflePlaylist",
          "action": "update reshuffle playlist",
          "description": "Re-shuffle a playlist whose playback order is \"shuffled\""
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_playlists"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addEpisode",
      "options": [
        {
          "name": "Create Episode",
          "value": "addEpisode",
          "action": "create episode",
          "description": "Create a new podcast episode"
        },
        {
          "name": "Create Podcast",
          "value": "addPodcast",
          "action": "create podcast",
          "description": "Create a new podcast"
        },
        {
          "name": "Delete Art",
          "value": "deletePodcastArt",
          "action": "delete art",
          "description": "Removes the album art for a podcast"
        },
        {
          "name": "Delete Episode",
          "value": "deleteEpisode",
          "action": "delete episode",
          "description": "Delete a single podcast episode"
        },
        {
          "name": "Delete Episode Art",
          "value": "deletePodcastEpisodeArt",
          "action": "delete episode art",
          "description": "Removes the album art for a podcast episode"
        },
        {
          "name": "Delete Episode Media",
          "value": "deletePodcastEpisodeMedia",
          "action": "delete episode media",
          "description": "Removes the media for a podcast episode"
        },
        {
          "name": "Delete Podcast",
          "value": "deletePodcast",
          "action": "delete podcast",
          "description": "Delete a single podcast"
        },
        {
          "name": "Get Episode",
          "value": "getEpisode",
          "action": "get episode",
          "description": "Retrieve details for a single podcast episode"
        },
        {
          "name": "Get Episodes",
          "value": "getEpisodes",
          "action": "get episodes",
          "description": "List all current episodes for a given podcast ID"
        },
        {
          "name": "Get Playlists",
          "value": "getStationPodcastPlaylists",
          "action": "get playlists",
          "description": "Get a list of playlists that can be associated with a podcast"
        },
        {
          "name": "Get Podcast",
          "value": "getPodcast",
          "action": "get podcast",
          "description": "Retrieve details for a single podcast"
        },
        {
          "name": "Get Podcasts",
          "value": "getPodcasts",
          "action": "get podcasts",
          "description": "List all current podcasts"
        },
        {
          "name": "Run Art",
          "value": "postPodcastArt",
          "action": "run art",
          "description": "Sets the album art for a podcast"
        },
        {
          "name": "Run Episode Art",
          "value": "postPodcastEpisodeArt",
          "action": "run episode art",
          "description": "Sets the album art for a podcast episode"
        },
        {
          "name": "Run Episode Media",
          "value": "postPodcastEpisodeMedia",
          "action": "run episode media",
          "description": "Sets the media for a podcast episode"
        },
        {
          "name": "Update Episode",
          "value": "editEpisode",
          "action": "update episode",
          "description": "Update details of a single podcast episode"
        },
        {
          "name": "Update Podcast",
          "value": "editPodcast",
          "action": "update podcast",
          "description": "Update details of a single podcast"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_podcasts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteQueueItem",
      "options": [
        {
          "name": "Delete Item",
          "value": "deleteQueueItem",
          "action": "delete item",
          "description": "Delete a single queued item"
        },
        {
          "name": "Get Item",
          "value": "getQueueItem",
          "action": "get item",
          "description": "Retrieve details of a single queued item"
        },
        {
          "name": "Get Queue",
          "value": "getQueue",
          "action": "get queue",
          "description": "Return information about the upcoming song playback queue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_queue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addRelay",
      "options": [
        {
          "name": "Create Relay",
          "value": "addRelay",
          "action": "create relay",
          "description": "Create a new remote relay"
        },
        {
          "name": "Delete Relay",
          "value": "deleteRelay",
          "action": "delete relay",
          "description": "Delete a single remote relay"
        },
        {
          "name": "Get Relay",
          "value": "getRelay",
          "action": "get relay",
          "description": "Retrieve details for a single remote relay"
        },
        {
          "name": "Get Relays",
          "value": "getRelays",
          "action": "get relays",
          "description": "List all current remote relays"
        },
        {
          "name": "Update Relay",
          "value": "editRelay",
          "action": "update relay",
          "description": "Update details of a single remote relay"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_remote_relays"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteStationRequest",
      "options": [
        {
          "name": "Delete Request",
          "value": "deleteStationRequest",
          "action": "delete request",
          "description": "Delete an individual station request"
        },
        {
          "name": "Get Best And Worst",
          "value": "getStationReportBestAndWorst",
          "action": "get best and worst",
          "description": "Get the \"Best and Worst Performing Songs\" report for a station"
        },
        {
          "name": "Get By Browser",
          "value": "getStationReportByBrowser",
          "action": "get by browser",
          "description": "Get the \"Listeners by Browser\" report for a station"
        },
        {
          "name": "Get By Client",
          "value": "getStationReportByClient",
          "action": "get by client",
          "description": "Get the \"Listeners by Client\" report for a station"
        },
        {
          "name": "Get By Country",
          "value": "getStationReportByCountry",
          "action": "get by country",
          "description": "Get the \"Listeners by Country\" report for a station"
        },
        {
          "name": "Get By Listening Time",
          "value": "getStationReportByListeningTime",
          "action": "get by listening time",
          "description": "Get the \"Listeners by Listening Time\" report for a station"
        },
        {
          "name": "Get By Stream",
          "value": "getStationReportByStream",
          "action": "get by stream",
          "description": "Get the \"Listeners by Stream\" report for a station"
        },
        {
          "name": "Get Charts",
          "value": "getStationReportCharts",
          "action": "get charts",
          "description": "Get chart data for the station reports"
        },
        {
          "name": "Get History",
          "value": "getStationHistory",
          "action": "get history",
          "description": "Return song playback history items for a given station"
        },
        {
          "name": "Get Listeners",
          "value": "getStationListeners",
          "action": "get listeners",
          "description": "Return detailed information about current listeners"
        },
        {
          "name": "Get Requests Report",
          "value": "getStationRequestsReport",
          "action": "get requests report",
          "description": "List station requests"
        },
        {
          "name": "Get Sound Exchange Report",
          "value": "getStationSoundExchangeReport",
          "action": "get sound exchange report",
          "description": "Generate a SoundExchange royalty report"
        },
        {
          "name": "Run Requests Clear",
          "value": "postStationRequestsClear",
          "action": "run requests clear",
          "description": "Clear all unplayed station requests"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_reports"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addSftpUser",
      "options": [
        {
          "name": "Create User",
          "value": "addSftpUser",
          "action": "create user",
          "description": "Create a new SFTP user"
        },
        {
          "name": "Delete User",
          "value": "deleteSftpUser",
          "action": "delete user",
          "description": "Delete a single SFTP user"
        },
        {
          "name": "Get User",
          "value": "getSftpUser",
          "action": "get user",
          "description": "Retrieve details for a single SFTP user"
        },
        {
          "name": "Get Users",
          "value": "getSftpUsers",
          "action": "get users",
          "description": "List all current SFTP users"
        },
        {
          "name": "Update User",
          "value": "editSftpUser",
          "action": "update user",
          "description": "Update details of a single SFTP user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_sftp_users"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addStreamer",
      "options": [
        {
          "name": "Create Streamer",
          "value": "addStreamer",
          "action": "create streamer",
          "description": "Create a new Streamer or DJ account"
        },
        {
          "name": "Delete Broadcast",
          "value": "getStationStreamerDeleteBroadcast",
          "action": "delete broadcast",
          "description": "Remove a single broadcast from a streamer"
        },
        {
          "name": "Delete Streamer",
          "value": "deleteStreamer",
          "action": "delete streamer",
          "description": "Delete a single Streamer or DJ account"
        },
        {
          "name": "Delete Streamer Art",
          "value": "deleteStreamerArt",
          "action": "delete streamer art",
          "description": "Removes the default album art for a streamer"
        },
        {
          "name": "Download Broadcast",
          "value": "getStationStreamerDownloadBroadcast",
          "action": "download broadcast",
          "description": "Download a single broadcast from a streamer"
        },
        {
          "name": "Get All Broadcasts",
          "value": "getStationAllBroadcasts",
          "action": "get all broadcasts",
          "description": "List all broadcasts associated with the station"
        },
        {
          "name": "Get Streamer",
          "value": "getStreamer",
          "action": "get streamer",
          "description": "Retrieve details for a single Streamer or DJ account"
        },
        {
          "name": "Get Streamer Broadcasts",
          "value": "getStationStreamerBroadcasts",
          "action": "get streamer broadcasts",
          "description": "List all broadcasts associated with the specified streamer"
        },
        {
          "name": "Get Streamers",
          "value": "getStreamers",
          "action": "get streamers",
          "description": "List all current Streamer or DJ accounts for the specified station"
        },
        {
          "name": "Run Streamer Art",
          "value": "postStreamerArt",
          "action": "run streamer art",
          "description": "Sets the default album art for a streamer"
        },
        {
          "name": "Run Streamer Broadcasts Batch",
          "value": "postStationStreamerBroadcastsBatch",
          "action": "run streamer broadcasts batch",
          "description": "Perform batch actions on the specified broadcasts"
        },
        {
          "name": "Update Streamer",
          "value": "editStreamer",
          "action": "update streamer",
          "description": "Update details of a single Streamer or DJ account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_streamers_djs"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "cloneWebhook",
      "options": [
        {
          "name": "Clone Webhook",
          "value": "cloneWebhook",
          "action": "clone webhook",
          "description": "Duplicate a single web hook"
        },
        {
          "name": "Create Webhook",
          "value": "addWebhook",
          "action": "create webhook",
          "description": "Create a new web hook"
        },
        {
          "name": "Delete Webhook",
          "value": "deleteWebhook",
          "action": "delete webhook",
          "description": "Delete a single web hook"
        },
        {
          "name": "Get Webhook",
          "value": "getWebhook",
          "action": "get webhook",
          "description": "Retrieve details for a single web hook"
        },
        {
          "name": "Get Webhook Test Log",
          "value": "getWebhookTestLog",
          "action": "get webhook test log",
          "description": "View a specific webhook test dispatch log contents"
        },
        {
          "name": "Get Webhooks",
          "value": "getWebhooks",
          "action": "get webhooks",
          "description": "List all current web hooks"
        },
        {
          "name": "Test Webhook",
          "value": "putStationWebhookTest",
          "action": "test webhook",
          "description": "Send a test dispatch of a webhook with the current Now Playing data for the station"
        },
        {
          "name": "Toggle Webhook",
          "value": "putStationWebhookToggle",
          "action": "toggle webhook",
          "description": "Toggle the enabled or disabled status of a webhook"
        },
        {
          "name": "Update Webhook",
          "value": "editWebhook",
          "action": "update webhook",
          "description": "Update details of a single web hook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resource_stations_web_hooks"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Delete Backup",
      "value": "deleteBackup",
      "action": "delete backup",
      "description": "Delete a given backup",
      "resource": "resource_administration_backups"
    },
    {
      "name": "Download Backup",
      "value": "downloadBackup",
      "action": "download backup",
      "description": "Download a given backup",
      "resource": "resource_administration_backups"
    },
    {
      "name": "Get Backups",
      "value": "getBackups",
      "action": "get backups",
      "description": "Return a list of all current backups",
      "resource": "resource_administration_backups"
    },
    {
      "name": "Run Do Backup",
      "value": "postAdminDoBackup",
      "action": "run do backup",
      "description": "Initialize a manual backup",
      "resource": "resource_administration_backups"
    },
    {
      "name": "View Log",
      "value": "adminBackupsViewLog",
      "action": "view log",
      "description": "View a specific backup log contents",
      "resource": "resource_administration_backups"
    },
    {
      "name": "Create Field",
      "value": "addCustomField",
      "action": "create field",
      "description": "Create a new custom field",
      "resource": "resource_administration_custom_fields"
    },
    {
      "name": "Delete Field",
      "value": "deleteCustomField",
      "action": "delete field",
      "description": "Delete a single custom field",
      "resource": "resource_administration_custom_fields"
    },
    {
      "name": "Get Field",
      "value": "getCustomField",
      "action": "get field",
      "description": "Retrieve details for a single custom field",
      "resource": "resource_administration_custom_fields"
    },
    {
      "name": "Get Fields",
      "value": "getCustomFields",
      "action": "get fields",
      "description": "List all current custom fields in the system",
      "resource": "resource_administration_custom_fields"
    },
    {
      "name": "Update Field",
      "value": "editCustomField",
      "action": "update field",
      "description": "Update details of a single custom field",
      "resource": "resource_administration_custom_fields"
    },
    {
      "name": "Clear Cache",
      "value": "adminDebugClearCache",
      "action": "clear cache",
      "description": "Clear the application cache (Redis)",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Clear Queue",
      "value": "adminDebugClearQueue",
      "action": "clear queue",
      "description": "Clear the specified message queue",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Clear Station Queue",
      "value": "adminDebugClearStationQueue",
      "action": "clear station queue",
      "description": "Clear the upcoming song queue and generate a new one",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Get Queues",
      "value": "getAdminDebugQueues",
      "action": "get queues",
      "description": "List all message queues",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Get Stations",
      "value": "getAdminDebugStations",
      "action": "get stations",
      "description": "List all stations with their debug links",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Get Sync Tasks",
      "value": "getAdminDebugSyncTasks",
      "action": "get sync tasks",
      "description": "List all sync tasks and details about their run times",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Run Sync Task",
      "value": "adminDebugRunSyncTask",
      "action": "run sync task",
      "description": "Manually run a scheduled synchronized task by name",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Update Station Next Song",
      "value": "adminDebugStationNextSong",
      "action": "update station next song",
      "description": "Get the next song to be played by the AutoDJ for a given station",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Update Station Now Playing",
      "value": "adminDebugStationNowPlaying",
      "action": "update station now playing",
      "description": "Generate the raw Now Playing data for a given station",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Update Telnet Command",
      "value": "putAdminDebugTelnetCommand",
      "action": "update telnet command",
      "description": "Manually run a Telnet command on a station backend",
      "resource": "resource_administration_debugging"
    },
    {
      "name": "Create API Key",
      "value": "adminCreateApiKey",
      "action": "create API key",
      "description": "Create a new API key for a specified user",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete API Key",
      "value": "adminDeleteApiKey",
      "action": "delete API key",
      "description": "Delete a single API key",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete Custom Asset",
      "value": "deleteAdminCustomAsset",
      "action": "delete custom asset",
      "description": "Removes the custom asset of the specified type",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete Rsas",
      "value": "deleteRsas",
      "action": "delete rsas",
      "description": "Removes the Rocket Streaming Audio Server (RSAS) installation",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete Rsas License",
      "value": "deleteRsasLicense",
      "action": "delete rsas license",
      "description": "Removes the Rocket Streaming Audio Server (RSAS) license",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete Shoutcast",
      "value": "deleteShoutcast",
      "action": "delete shoutcast",
      "description": "Removes the installed Shoutcast binary",
      "resource": "resource_administration_general"
    },
    {
      "name": "Delete Stereo Tool",
      "value": "deleteStereoTool",
      "action": "delete stereo tool",
      "description": "Removes the installed Stereo Tool binary",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Auditlog",
      "value": "getAuditlog",
      "action": "get auditlog",
      "description": "List all Audit Log actions that have taken place on the installation",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Custom Asset",
      "value": "getAdminCustomAsset",
      "action": "get custom asset",
      "description": "Get the details of the custom asset of the specified type",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Geo Lite",
      "value": "getGeoLite",
      "action": "get geo lite",
      "description": "Get the current MaxMindDB GeoLite Database status",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Many API Keys",
      "value": "adminListApiKeys",
      "action": "get many API keys",
      "description": "List all current API keys across the system",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Many Logs",
      "value": "adminListLogs",
      "action": "get many logs",
      "description": "List all available log types for viewing",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Relay Details",
      "value": "internalGetRelayDetails",
      "action": "get relay details",
      "description": "Returns all necessary information to relay all 'relayable' stations",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Relays",
      "value": "adminGetRelays",
      "action": "get relays",
      "description": "Return a list of all currently active AzuraRelay instances",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Rsas",
      "value": "getRsas",
      "action": "get rsas",
      "description": "Get the current Rocket Streaming Audio Server (RSAS) status",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Server Stats",
      "value": "getServerStats",
      "action": "get server stats",
      "description": "Return a list of all CPU usage stats",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Service Details",
      "value": "getServiceDetails",
      "action": "get service details",
      "description": "List the status of essential system services",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Shoutcast",
      "value": "getShoutcast",
      "action": "get shoutcast",
      "description": "Get details about the Shoutcast installation",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Status",
      "value": "getUpdateStatus",
      "action": "get status",
      "description": "Show information about this installation and its update status",
      "resource": "resource_administration_general"
    },
    {
      "name": "Get Stereo Tool",
      "value": "getStereoTool",
      "action": "get stereo tool",
      "description": "Get information about the Stereo Tool installation",
      "resource": "resource_administration_general"
    },
    {
      "name": "Restart Service",
      "value": "restartService",
      "action": "restart service",
      "description": "Restart the specified service",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Custom Asset",
      "value": "postAdminCustomAsset",
      "action": "run custom asset",
      "description": "Upload a new custom asset of the specified type",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Geo Lite",
      "value": "postGeoLite",
      "action": "run geo lite",
      "description": "Set the GeoLite MaxMindDB Database license key",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Rsas",
      "value": "postRsas",
      "action": "run rsas",
      "description": "Upload a new Rocket Streaming Audio Server (RSAS) binary",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Rsas License",
      "value": "postRsasLicense",
      "action": "run rsas license",
      "description": "Upload a new Rocket Streaming Audio Server (RSAS) license key",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Shoutcast",
      "value": "postShoutcast",
      "action": "run shoutcast",
      "description": "Upload a new Shoutcast binary",
      "resource": "resource_administration_general"
    },
    {
      "name": "Run Stereo Tool",
      "value": "postStereoTool",
      "action": "run stereo tool",
      "description": "Upload a new Stereo Tool binary",
      "resource": "resource_administration_general"
    },
    {
      "name": "Send Test Email",
      "value": "adminSendTestEmail",
      "action": "send test email",
      "description": "Send a test e-mail to confirm mail delivery settings",
      "resource": "resource_administration_general"
    },
    {
      "name": "Update Generate Acme Cert",
      "value": "putAdminGenerateAcmeCert",
      "action": "update generate acme cert",
      "description": "Generate or renew ACME certificate",
      "resource": "resource_administration_general"
    },
    {
      "name": "Update Web",
      "value": "putWebUpdate",
      "action": "update web",
      "description": "Attempts to trigger a web-based update",
      "resource": "resource_administration_general"
    },
    {
      "name": "View ACME Log",
      "value": "adminAcmeViewLog",
      "action": "view ACME log",
      "description": "View the logs of a manually run ACME certificate renewal",
      "resource": "resource_administration_general"
    },
    {
      "name": "View Log",
      "value": "adminViewLog",
      "action": "view log",
      "description": "View a specific log contents",
      "resource": "resource_administration_general"
    },
    {
      "name": "Create Role",
      "value": "addRole",
      "action": "create role",
      "description": "Create a new role",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Delete Role",
      "value": "deleteRole",
      "action": "delete role",
      "description": "Delete a single role",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Get Permissions",
      "value": "getPermissions",
      "action": "get permissions",
      "description": "Return a list of all available permissions",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Get Role",
      "value": "getRole",
      "action": "get role",
      "description": "Retrieve details for a single current role",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Get Roles",
      "value": "getRoles",
      "action": "get roles",
      "description": "List all current roles in the system",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Update Role",
      "value": "editRole",
      "action": "update role",
      "description": "Update details of a single role",
      "resource": "resource_administration_roles"
    },
    {
      "name": "Get Settings",
      "value": "getSettings",
      "action": "get settings",
      "description": "List the current values of all editable system settings",
      "resource": "resource_administration_settings"
    },
    {
      "name": "Update Settings",
      "value": "editSettings",
      "action": "update settings",
      "description": "Update settings to modify any settings provided",
      "resource": "resource_administration_settings"
    },
    {
      "name": "Clone Station",
      "value": "postAdminStationsClone",
      "action": "clone station",
      "description": "Clone a station, preserving certain settings",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Create Station",
      "value": "adminAddStation",
      "action": "create station",
      "description": "Create a new station",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Delete Station",
      "value": "adminDeleteStation",
      "action": "delete station",
      "description": "Delete a single station",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Get Station",
      "value": "adminGetStation",
      "action": "get station",
      "description": "Retrieve details for a single station",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Get Stations",
      "value": "adminGetStations",
      "action": "get stations",
      "description": "List all current stations in the system",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Get Storage Locations",
      "value": "getAdminStationStorageLocations",
      "action": "get storage locations",
      "description": "List storage locations available for assignment to a station",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Update Station",
      "value": "adminEditStation",
      "action": "update station",
      "description": "Update details of a single station",
      "resource": "resource_administration_stations"
    },
    {
      "name": "Create Location",
      "value": "addStorageLocation",
      "action": "create location",
      "description": "Create a new storage location",
      "resource": "resource_administration_storage_locations"
    },
    {
      "name": "Delete Location",
      "value": "deleteStorageLocation",
      "action": "delete location",
      "description": "Delete a single storage location",
      "resource": "resource_administration_storage_locations"
    },
    {
      "name": "Get Location",
      "value": "getStorageLocation",
      "action": "get location",
      "description": "Retrieve details for a single storage location",
      "resource": "resource_administration_storage_locations"
    },
    {
      "name": "Get Locations",
      "value": "getStorageLocations",
      "action": "get locations",
      "description": "List all current storage locations in the system",
      "resource": "resource_administration_storage_locations"
    },
    {
      "name": "Update Location",
      "value": "editStorageLocation",
      "action": "update location",
      "description": "Update details of a single storage location",
      "resource": "resource_administration_storage_locations"
    },
    {
      "name": "Create Login Token",
      "value": "addLoginToken",
      "action": "create login token",
      "description": "Create a new login token",
      "resource": "resource_administration_users"
    },
    {
      "name": "Create User",
      "value": "addUser",
      "action": "create user",
      "description": "Create a new user",
      "resource": "resource_administration_users"
    },
    {
      "name": "Delete Login Token",
      "value": "deleteLoginToken",
      "action": "delete login token",
      "description": "Delete a single login token",
      "resource": "resource_administration_users"
    },
    {
      "name": "Delete User",
      "value": "deleteUser",
      "action": "delete user",
      "description": "Delete a single user",
      "resource": "resource_administration_users"
    },
    {
      "name": "Get Login Token",
      "value": "getLoginToken",
      "action": "get login token",
      "description": "Retrieve details for a single login token",
      "resource": "resource_administration_users"
    },
    {
      "name": "Get Login Tokens",
      "value": "getLoginTokens",
      "action": "get login tokens",
      "description": "List all current unexpired login tokens in the system",
      "resource": "resource_administration_users"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "get user",
      "description": "Retrieve details for a single current user",
      "resource": "resource_administration_users"
    },
    {
      "name": "Get Users",
      "value": "getUsers",
      "action": "get users",
      "description": "List all current users in the system",
      "resource": "resource_administration_users"
    },
    {
      "name": "Update User",
      "value": "editUser",
      "action": "update user",
      "description": "Update details of a single user",
      "resource": "resource_administration_users"
    },
    {
      "name": "Get Dashboard Charts",
      "value": "getDashboardCharts",
      "action": "get dashboard charts",
      "description": "Get the measurements for the dashboard charts",
      "resource": "resource_miscellaneous"
    },
    {
      "name": "Get Dashboard Stations",
      "value": "getDashboardStations",
      "action": "get dashboard stations",
      "description": "List stations that can be managed by the current user account on the dashboard",
      "resource": "resource_miscellaneous"
    },
    {
      "name": "Get Notifications",
      "value": "getNotifications",
      "action": "get notifications",
      "description": "Show all notifications your current account should see",
      "resource": "resource_miscellaneous"
    },
    {
      "name": "Get Prometheus",
      "value": "getPrometheus",
      "action": "get prometheus",
      "description": "Returns the Prometheus measurements for this installation",
      "resource": "resource_miscellaneous"
    },
    {
      "name": "Change Password",
      "value": "changeMyPassword",
      "action": "change password",
      "description": "Change the password of your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Create API Key",
      "value": "addMyApiKey",
      "action": "create API key",
      "description": "Create a new API key associated with your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Delete API Key",
      "value": "deleteMyApiKey",
      "action": "delete API key",
      "description": "Delete a single API key associated with your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Delete Passkey",
      "value": "deleteAccountPasskey",
      "action": "delete passkey",
      "description": "Delete a specified passkey by ID",
      "resource": "resource_my_account"
    },
    {
      "name": "Delete Two Factor",
      "value": "deleteMyTwoFactor",
      "action": "delete two factor",
      "description": "Remove two-factor authentication from your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Get API Key",
      "value": "getMyApiKey",
      "action": "get API key",
      "description": "Retrieve details for a single API key",
      "resource": "resource_my_account"
    },
    {
      "name": "Get API Keys",
      "value": "getMyApiKeys",
      "action": "get API keys",
      "description": "List all API keys associated with your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Many Passkeys",
      "value": "getAccountListPasskeys",
      "action": "get many passkeys",
      "description": "List currently registered passkeys",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "get me",
      "description": "Show the details for your current logged-in account",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Passkey",
      "value": "getAccountGetPasskey",
      "action": "get passkey",
      "description": "Get the details of a single passkey",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Two Factor",
      "value": "getMyTwoFactor",
      "action": "get two factor",
      "description": "Get the current two-factor authentication status of your account",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Web Authn Register",
      "value": "getAccountWebAuthnRegister",
      "action": "get web authn register",
      "description": "Get registration details for WebAuthn registration",
      "resource": "resource_my_account"
    },
    {
      "name": "Update Me",
      "value": "putMe",
      "action": "update me",
      "description": "Save changes to your logged in account",
      "resource": "resource_my_account"
    },
    {
      "name": "Update Two Factor",
      "value": "putAccountTwoFactor",
      "action": "update two factor",
      "description": "Register a new two-factor authentication method",
      "resource": "resource_my_account"
    },
    {
      "name": "Update Web Authn Register",
      "value": "putAccountWebAuthnRegister",
      "action": "update web authn register",
      "description": "Submit a new registration request for WebAuthn",
      "resource": "resource_my_account"
    },
    {
      "name": "Get Open API Spec",
      "value": "getOpenApiSpec",
      "action": "get open API spec",
      "description": "Returns the OpenAPI specification document for this installation",
      "resource": "resource_public_miscellaneous"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "get status",
      "description": "Returns an affirmative response if the API is active",
      "resource": "resource_public_miscellaneous"
    },
    {
      "name": "Get Time",
      "value": "getTime",
      "action": "get time",
      "description": "Returns the time (with formatting) in GMT and the user's local time zone, if logged in",
      "resource": "resource_public_miscellaneous"
    },
    {
      "name": "Get All Now Playing",
      "value": "getAllNowPlaying",
      "action": "get all now playing",
      "description": "Returns a full summary of all stations' current state",
      "resource": "resource_public_now_playing"
    },
    {
      "name": "Get Station Now Playing",
      "value": "getStationNowPlaying",
      "action": "get station now playing",
      "description": "Returns a full summary of the specified station's current state",
      "resource": "resource_public_now_playing"
    },
    {
      "name": "Get Station Now Playing Art",
      "value": "getStationNowPlayingArt",
      "action": "get station now playing art",
      "description": "Always redirects to the current art for the given station",
      "resource": "resource_public_now_playing"
    },
    {
      "name": "Download On Demand",
      "value": "getStationOnDemandDownload",
      "action": "download on demand",
      "description": "Download an on-demand playlist file by media unique ID",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Media Art",
      "value": "getMediaArt",
      "action": "get media art",
      "description": "Returns the album art for a song, or a generic image",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get On Demand",
      "value": "getStationOnDemand",
      "action": "get on demand",
      "description": "List all tracks available on-demand for this station",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast",
      "value": "getStationPublicPodcast",
      "action": "get podcast",
      "description": "Get the public information for a given podcast",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast Art",
      "value": "getPodcastArt",
      "action": "get podcast art",
      "description": "Gets the album art for a podcast",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast Episode",
      "value": "getStationPublicPodcastEpisode",
      "action": "get podcast episode",
      "description": "Get information for a public episode of a public podcast",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast Episode Art",
      "value": "getPodcastEpisodeArt",
      "action": "get podcast episode art",
      "description": "Gets the album art for a podcast episode",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast Episode Media",
      "value": "getPodcastEpisodeMedia",
      "action": "get podcast episode media",
      "description": "Gets the media for a podcast episode",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcast Episodes",
      "value": "getStationPublicPodcastEpisodes",
      "action": "get podcast episodes",
      "description": "List all visible episodes for a given podcast",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Podcasts",
      "value": "getStationPublicPodcasts",
      "action": "get podcasts",
      "description": "List all visible public podcasts",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Requestable Songs",
      "value": "getRequestableSongs",
      "action": "get requestable songs",
      "description": "Return a list of requestable songs",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Schedule",
      "value": "getSchedule",
      "action": "get schedule",
      "description": "Return upcoming and currently ongoing schedule entries",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Station",
      "value": "getStation",
      "action": "get station",
      "description": "Return information about a single station",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Stations",
      "value": "getStations",
      "action": "get stations",
      "description": "Returns a list of stations",
      "resource": "resource_public_stations"
    },
    {
      "name": "Get Streamer Art",
      "value": "getStreamerArt",
      "action": "get streamer art",
      "description": "Gets the default album art for a streamer",
      "resource": "resource_public_stations"
    },
    {
      "name": "Submit Song Request",
      "value": "submitSongRequest",
      "action": "submit song request",
      "description": "Submit a song request",
      "resource": "resource_public_stations"
    },
    {
      "name": "Delete Stereo Tool Configuration",
      "value": "deleteStereoToolConfiguration",
      "action": "delete stereo tool configuration",
      "description": "Removes the Stereo Tool configuration file for a station",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Export Station Liquidsoap Config",
      "value": "exportStationLiquidsoapConfig",
      "action": "export station liquidsoap config",
      "description": "Generate an archive of all Liquidsoap configuration on your station, including custom config",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Get Liquidsoap Config",
      "value": "getStationLiquidsoapConfig",
      "action": "get liquidsoap config",
      "description": "Get the generated and editable sections of the station Liquidsoap configuration",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Get Service Status",
      "value": "getServiceStatus",
      "action": "get service status",
      "description": "Retrieve the current status of all serivces associated with the radio broadcast",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Get Stereo Tool Configuration",
      "value": "getStereoToolConfiguration",
      "action": "get stereo tool configuration",
      "description": "Get the Stereo Tool configuration file for a station",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Import Station Liquidsoap Config",
      "value": "importStationLiquidsoapConfig",
      "action": "import station liquidsoap config",
      "description": "Import a previously exported Liquidsoap configuration archive and replace custom config sections",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Restart Services",
      "value": "restartServices",
      "action": "restart services",
      "description": "Restart all services associated with the radio broadcast",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Run Service Action",
      "value": "doBackendServiceAction",
      "action": "run service action",
      "description": "Perform service control actions on the radio backend (Liquidsoap)",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Run Service Action (POST)",
      "value": "doFrontendServiceAction",
      "action": "run service action (post)",
      "description": "Perform service control actions on the radio frontend (Icecast, Shoutcast, etc.)",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Run Stereo Tool Configuration",
      "value": "postStereoToolConfiguration",
      "action": "run stereo tool configuration",
      "description": "Update the Stereo Tool configuration file for a station",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Update Liquidsoap Config",
      "value": "putStationLiquidsoapConfig",
      "action": "update liquidsoap config",
      "description": "Save the editable sections of the station Liquidsoap configuration",
      "resource": "resource_stations_broadcasting"
    },
    {
      "name": "Delete Custom Asset",
      "value": "deleteStationCustomAsset",
      "action": "delete custom asset",
      "description": "Removes the custom asset of the specified type",
      "resource": "resource_stations_general"
    },
    {
      "name": "Delete Fallback",
      "value": "deleteStationFallback",
      "action": "delete fallback",
      "description": "Removes the custom fallback track for a station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Custom Asset",
      "value": "getStationCustomAsset",
      "action": "get custom asset",
      "description": "Get the details of the custom asset of the specified type",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Fallback",
      "value": "getStationFallback",
      "action": "get fallback",
      "description": "Get the custom fallback track for a station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Log",
      "value": "getStationLog",
      "action": "get log",
      "description": "View a specific log contents for the given station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Logs",
      "value": "getStationLogs",
      "action": "get logs",
      "description": "Return a list of available logs for the given station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Profile",
      "value": "getStationProfile",
      "action": "get profile",
      "description": "Retrieve the profile of the given station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Profile Edit",
      "value": "getStationProfileEdit",
      "action": "get profile edit",
      "description": "Get the editable profile for the current station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Quota",
      "value": "getQuota",
      "action": "get quota",
      "description": "Get the current usage and quota for a given station storage location",
      "resource": "resource_stations_general"
    },
    {
      "name": "Get Quota Of Type",
      "value": "getQuotaOfType",
      "action": "get quota of type",
      "description": "Get the current usage and quota for a given station storage location",
      "resource": "resource_stations_general"
    },
    {
      "name": "Run Custom Asset",
      "value": "postStationCustomAsset",
      "action": "run custom asset",
      "description": "Upload a new custom asset of the specified type",
      "resource": "resource_stations_general"
    },
    {
      "name": "Run Fallback",
      "value": "postStationFallback",
      "action": "run fallback",
      "description": "Update the custom fallback track for the station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Run Now Playing Update",
      "value": "postStationNowPlayingUpdate",
      "action": "run now playing update",
      "description": "Manually update the Now Playing metadata for the station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Update Profile Edit",
      "value": "putStationProfileEdit",
      "action": "update profile edit",
      "description": "Save the station profile for the current station",
      "resource": "resource_stations_general"
    },
    {
      "name": "Create Stream",
      "value": "addHlsStream",
      "action": "create stream",
      "description": "Create a new HLS stream",
      "resource": "resource_stations_hls_streams"
    },
    {
      "name": "Delete Stream",
      "value": "deleteHlsStream",
      "action": "delete stream",
      "description": "Delete a single HLS stream",
      "resource": "resource_stations_hls_streams"
    },
    {
      "name": "Get Stream",
      "value": "getHlsStream",
      "action": "get stream",
      "description": "Retrieve details for a single HLS stream",
      "resource": "resource_stations_hls_streams"
    },
    {
      "name": "Get Streams",
      "value": "getHlsStreams",
      "action": "get streams",
      "description": "List all current HLS streams",
      "resource": "resource_stations_hls_streams"
    },
    {
      "name": "Update Stream",
      "value": "editHlsStream",
      "action": "update stream",
      "description": "Update details of a single HLS stream",
      "resource": "resource_stations_hls_streams"
    },
    {
      "name": "Create File",
      "value": "addFile",
      "action": "create file",
      "description": "Upload a new file",
      "resource": "resource_stations_media"
    },
    {
      "name": "Delete Art",
      "value": "deleteMediaArt",
      "action": "delete art",
      "description": "Removes the album art for a track",
      "resource": "resource_stations_media"
    },
    {
      "name": "Delete File",
      "value": "deleteFile",
      "action": "delete file",
      "description": "Delete a single file",
      "resource": "resource_stations_media"
    },
    {
      "name": "Download Bulk Media",
      "value": "getStationBulkMediaDownload",
      "action": "download bulk media",
      "description": "Download a CSV containing details about all station media",
      "resource": "resource_stations_media"
    },
    {
      "name": "Download File",
      "value": "getStationFileDownload",
      "action": "download file",
      "description": "Download a file by relative path",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get File",
      "value": "getFile",
      "action": "get file",
      "description": "Retrieve details for a single file",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get File Directories",
      "value": "getStationFileDirectories",
      "action": "get file directories",
      "description": "List directories in a station media library for moving or renaming",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get Files",
      "value": "getFiles",
      "action": "get files",
      "description": "List all current uploaded files",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get Many Station File",
      "value": "getStationFileList",
      "action": "get many station file",
      "description": "List files in the media directory by path",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get Play File",
      "value": "getPlayFile",
      "action": "get play file",
      "description": "Download or play a given file by ID",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get Play File Song ID",
      "value": "getPlayFileSongId",
      "action": "get play file song ID",
      "description": "Download or play a given file by song_id",
      "resource": "resource_stations_media"
    },
    {
      "name": "Get Waveform",
      "value": "getStationMediaWaveform",
      "action": "get waveform",
      "description": "Get waveform data for a media ID (for the Visual Cue Editor)",
      "resource": "resource_stations_media"
    },
    {
      "name": "Run Art",
      "value": "postMediaArt",
      "action": "run art",
      "description": "Sets the album art for a track",
      "resource": "resource_stations_media"
    },
    {
      "name": "Run Bulk Media Preview",
      "value": "postStationBulkMediaPreview",
      "action": "run bulk media preview",
      "description": "Preview changes from a CSV containing details about all station media",
      "resource": "resource_stations_media"
    },
    {
      "name": "Run Files Mkdir",
      "value": "postStationFilesMkdir",
      "action": "run files mkdir",
      "description": "Create a directory in a station media directory",
      "resource": "resource_stations_media"
    },
    {
      "name": "Run Files Rename",
      "value": "postStationFilesRename",
      "action": "run files rename",
      "description": "Rename the specified files in the station media directory",
      "resource": "resource_stations_media"
    },
    {
      "name": "Run Waveform",
      "value": "postStationMediaWaveform",
      "action": "run waveform",
      "description": "Save cached waveform data for a media ID (for the Visual Cue Editor)",
      "resource": "resource_stations_media"
    },
    {
      "name": "Update File",
      "value": "editFile",
      "action": "update file",
      "description": "Update details of a single file",
      "resource": "resource_stations_media"
    },
    {
      "name": "Update File Batch Action",
      "value": "putStationFileBatchAction",
      "action": "update file batch action",
      "description": "Perform a batch action on a collection of files or directories",
      "resource": "resource_stations_media"
    },
    {
      "name": "Upload Bulk Media",
      "value": "postStationBulkMediaUpload",
      "action": "upload bulk media",
      "description": "Upload a CSV containing details about all station media",
      "resource": "resource_stations_media"
    },
    {
      "name": "Upload File",
      "value": "postUploadFile",
      "action": "upload file",
      "description": "Upload and process a new media file",
      "resource": "resource_stations_media"
    },
    {
      "name": "Create Mount",
      "value": "addMount",
      "action": "create mount",
      "description": "Create a new mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Delete Intro",
      "value": "deleteMountIntro",
      "action": "delete intro",
      "description": "Removes the intro track for a mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Delete Mount",
      "value": "deleteMount",
      "action": "delete mount",
      "description": "Delete a single mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Get Intro",
      "value": "getMountIntro",
      "action": "get intro",
      "description": "Get the intro track for a mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Get Mount",
      "value": "getMount",
      "action": "get mount",
      "description": "Retrieve details for a single mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Get Mounts",
      "value": "getStationMounts",
      "action": "get mounts",
      "description": "List all current mount points",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Run Intro",
      "value": "postMountIntro",
      "action": "run intro",
      "description": "Update the intro track for a mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Update Mount",
      "value": "editMount",
      "action": "update mount",
      "description": "Update details of a single mount point",
      "resource": "resource_stations_mount_points"
    },
    {
      "name": "Clone Station Playlist",
      "value": "postStationPlaylistClone",
      "action": "clone station playlist",
      "description": "Create a copy of the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Create Playlist",
      "value": "addPlaylist",
      "action": "create playlist",
      "description": "Create a new playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Delete Empty Playlist",
      "value": "deleteEmptyPlaylist",
      "action": "delete empty playlist",
      "description": "Empty the contents of a song-based playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Delete Playlist",
      "value": "deletePlaylist",
      "action": "delete playlist",
      "description": "Delete a single playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Delete Queue",
      "value": "deletePlaylistQueue",
      "action": "delete queue",
      "description": "Reset the internal playback queue of a shuffled, song-based playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Apply To",
      "value": "getStationPlaylistApplyTo",
      "action": "get apply to",
      "description": "Get a list of directories that the given playlist can apply to",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Export Playlist",
      "value": "getExportPlaylist",
      "action": "get export playlist",
      "description": "Export a playlist contents in standard media player playlist format",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Order",
      "value": "getStationPlaylistOrder",
      "action": "get order",
      "description": "Get the current order of sequential tracks in the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Playlist",
      "value": "getPlaylist",
      "action": "get playlist",
      "description": "Retrieve details for a single playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Playlists",
      "value": "getPlaylists",
      "action": "get playlists",
      "description": "List all current playlists",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Get Queue",
      "value": "getStationPlaylistQueue",
      "action": "get queue",
      "description": "Get the current playback queue for the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Import Station Playlist",
      "value": "postStationPlaylistImport",
      "action": "import station playlist",
      "description": "Import the contents of an uploaded playlist (PLS or M3U) file into the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Run Podcast Batch",
      "value": "postStationPodcastBatch",
      "action": "run podcast batch",
      "description": "Import the contents of an uploaded playlist (PLS or M3U) file into the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Toggle Playlist",
      "value": "putTogglePlaylist",
      "action": "toggle playlist",
      "description": "Toggle a playlist between enabled and disabled status",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Update Apply To",
      "value": "putStationPlaylistApplyTo",
      "action": "update apply to",
      "description": "Apply the specified playlist to the specified directories",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Update Order",
      "value": "putStationPlaylistOrder",
      "action": "update order",
      "description": "Set the order of sequential tracks in the specified playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Update Playlist",
      "value": "editPlaylist",
      "action": "update playlist",
      "description": "Update details of a single playlist",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Update Reshuffle Playlist",
      "value": "putReshufflePlaylist",
      "action": "update reshuffle playlist",
      "description": "Re-shuffle a playlist whose playback order is \"shuffled\"",
      "resource": "resource_stations_playlists"
    },
    {
      "name": "Create Episode",
      "value": "addEpisode",
      "action": "create episode",
      "description": "Create a new podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Create Podcast",
      "value": "addPodcast",
      "action": "create podcast",
      "description": "Create a new podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Art",
      "value": "deletePodcastArt",
      "action": "delete art",
      "description": "Removes the album art for a podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Episode",
      "value": "deleteEpisode",
      "action": "delete episode",
      "description": "Delete a single podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Episode Art",
      "value": "deletePodcastEpisodeArt",
      "action": "delete episode art",
      "description": "Removes the album art for a podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Episode Media",
      "value": "deletePodcastEpisodeMedia",
      "action": "delete episode media",
      "description": "Removes the media for a podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Podcast",
      "value": "deletePodcast",
      "action": "delete podcast",
      "description": "Delete a single podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Get Episode",
      "value": "getEpisode",
      "action": "get episode",
      "description": "Retrieve details for a single podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Get Episodes",
      "value": "getEpisodes",
      "action": "get episodes",
      "description": "List all current episodes for a given podcast ID",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Get Playlists",
      "value": "getStationPodcastPlaylists",
      "action": "get playlists",
      "description": "Get a list of playlists that can be associated with a podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Get Podcast",
      "value": "getPodcast",
      "action": "get podcast",
      "description": "Retrieve details for a single podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Get Podcasts",
      "value": "getPodcasts",
      "action": "get podcasts",
      "description": "List all current podcasts",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Run Art",
      "value": "postPodcastArt",
      "action": "run art",
      "description": "Sets the album art for a podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Run Episode Art",
      "value": "postPodcastEpisodeArt",
      "action": "run episode art",
      "description": "Sets the album art for a podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Run Episode Media",
      "value": "postPodcastEpisodeMedia",
      "action": "run episode media",
      "description": "Sets the media for a podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Update Episode",
      "value": "editEpisode",
      "action": "update episode",
      "description": "Update details of a single podcast episode",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Update Podcast",
      "value": "editPodcast",
      "action": "update podcast",
      "description": "Update details of a single podcast",
      "resource": "resource_stations_podcasts"
    },
    {
      "name": "Delete Item",
      "value": "deleteQueueItem",
      "action": "delete item",
      "description": "Delete a single queued item",
      "resource": "resource_stations_queue"
    },
    {
      "name": "Get Item",
      "value": "getQueueItem",
      "action": "get item",
      "description": "Retrieve details of a single queued item",
      "resource": "resource_stations_queue"
    },
    {
      "name": "Get Queue",
      "value": "getQueue",
      "action": "get queue",
      "description": "Return information about the upcoming song playback queue",
      "resource": "resource_stations_queue"
    },
    {
      "name": "Create Relay",
      "value": "addRelay",
      "action": "create relay",
      "description": "Create a new remote relay",
      "resource": "resource_stations_remote_relays"
    },
    {
      "name": "Delete Relay",
      "value": "deleteRelay",
      "action": "delete relay",
      "description": "Delete a single remote relay",
      "resource": "resource_stations_remote_relays"
    },
    {
      "name": "Get Relay",
      "value": "getRelay",
      "action": "get relay",
      "description": "Retrieve details for a single remote relay",
      "resource": "resource_stations_remote_relays"
    },
    {
      "name": "Get Relays",
      "value": "getRelays",
      "action": "get relays",
      "description": "List all current remote relays",
      "resource": "resource_stations_remote_relays"
    },
    {
      "name": "Update Relay",
      "value": "editRelay",
      "action": "update relay",
      "description": "Update details of a single remote relay",
      "resource": "resource_stations_remote_relays"
    },
    {
      "name": "Delete Request",
      "value": "deleteStationRequest",
      "action": "delete request",
      "description": "Delete an individual station request",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get Best And Worst",
      "value": "getStationReportBestAndWorst",
      "action": "get best and worst",
      "description": "Get the \"Best and Worst Performing Songs\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get By Browser",
      "value": "getStationReportByBrowser",
      "action": "get by browser",
      "description": "Get the \"Listeners by Browser\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get By Client",
      "value": "getStationReportByClient",
      "action": "get by client",
      "description": "Get the \"Listeners by Client\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get By Country",
      "value": "getStationReportByCountry",
      "action": "get by country",
      "description": "Get the \"Listeners by Country\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get By Listening Time",
      "value": "getStationReportByListeningTime",
      "action": "get by listening time",
      "description": "Get the \"Listeners by Listening Time\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get By Stream",
      "value": "getStationReportByStream",
      "action": "get by stream",
      "description": "Get the \"Listeners by Stream\" report for a station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get Charts",
      "value": "getStationReportCharts",
      "action": "get charts",
      "description": "Get chart data for the station reports",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get History",
      "value": "getStationHistory",
      "action": "get history",
      "description": "Return song playback history items for a given station",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get Listeners",
      "value": "getStationListeners",
      "action": "get listeners",
      "description": "Return detailed information about current listeners",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get Requests Report",
      "value": "getStationRequestsReport",
      "action": "get requests report",
      "description": "List station requests",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Get Sound Exchange Report",
      "value": "getStationSoundExchangeReport",
      "action": "get sound exchange report",
      "description": "Generate a SoundExchange royalty report",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Run Requests Clear",
      "value": "postStationRequestsClear",
      "action": "run requests clear",
      "description": "Clear all unplayed station requests",
      "resource": "resource_stations_reports"
    },
    {
      "name": "Create User",
      "value": "addSftpUser",
      "action": "create user",
      "description": "Create a new SFTP user",
      "resource": "resource_stations_sftp_users"
    },
    {
      "name": "Delete User",
      "value": "deleteSftpUser",
      "action": "delete user",
      "description": "Delete a single SFTP user",
      "resource": "resource_stations_sftp_users"
    },
    {
      "name": "Get User",
      "value": "getSftpUser",
      "action": "get user",
      "description": "Retrieve details for a single SFTP user",
      "resource": "resource_stations_sftp_users"
    },
    {
      "name": "Get Users",
      "value": "getSftpUsers",
      "action": "get users",
      "description": "List all current SFTP users",
      "resource": "resource_stations_sftp_users"
    },
    {
      "name": "Update User",
      "value": "editSftpUser",
      "action": "update user",
      "description": "Update details of a single SFTP user",
      "resource": "resource_stations_sftp_users"
    },
    {
      "name": "Create Streamer",
      "value": "addStreamer",
      "action": "create streamer",
      "description": "Create a new Streamer or DJ account",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Delete Broadcast",
      "value": "getStationStreamerDeleteBroadcast",
      "action": "delete broadcast",
      "description": "Remove a single broadcast from a streamer",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Delete Streamer",
      "value": "deleteStreamer",
      "action": "delete streamer",
      "description": "Delete a single Streamer or DJ account",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Delete Streamer Art",
      "value": "deleteStreamerArt",
      "action": "delete streamer art",
      "description": "Removes the default album art for a streamer",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Download Broadcast",
      "value": "getStationStreamerDownloadBroadcast",
      "action": "download broadcast",
      "description": "Download a single broadcast from a streamer",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Get All Broadcasts",
      "value": "getStationAllBroadcasts",
      "action": "get all broadcasts",
      "description": "List all broadcasts associated with the station",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Get Streamer",
      "value": "getStreamer",
      "action": "get streamer",
      "description": "Retrieve details for a single Streamer or DJ account",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Get Streamer Broadcasts",
      "value": "getStationStreamerBroadcasts",
      "action": "get streamer broadcasts",
      "description": "List all broadcasts associated with the specified streamer",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Get Streamers",
      "value": "getStreamers",
      "action": "get streamers",
      "description": "List all current Streamer or DJ accounts for the specified station",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Run Streamer Art",
      "value": "postStreamerArt",
      "action": "run streamer art",
      "description": "Sets the default album art for a streamer",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Run Streamer Broadcasts Batch",
      "value": "postStationStreamerBroadcastsBatch",
      "action": "run streamer broadcasts batch",
      "description": "Perform batch actions on the specified broadcasts",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Update Streamer",
      "value": "editStreamer",
      "action": "update streamer",
      "description": "Update details of a single Streamer or DJ account",
      "resource": "resource_stations_streamers_djs"
    },
    {
      "name": "Clone Webhook",
      "value": "cloneWebhook",
      "action": "clone webhook",
      "description": "Duplicate a single web hook",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Create Webhook",
      "value": "addWebhook",
      "action": "create webhook",
      "description": "Create a new web hook",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Delete Webhook",
      "value": "deleteWebhook",
      "action": "delete webhook",
      "description": "Delete a single web hook",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Get Webhook",
      "value": "getWebhook",
      "action": "get webhook",
      "description": "Retrieve details for a single web hook",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Get Webhook Test Log",
      "value": "getWebhookTestLog",
      "action": "get webhook test log",
      "description": "View a specific webhook test dispatch log contents",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Get Webhooks",
      "value": "getWebhooks",
      "action": "get webhooks",
      "description": "List all current web hooks",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Test Webhook",
      "value": "putStationWebhookTest",
      "action": "test webhook",
      "description": "Send a test dispatch of a webhook with the current Now Playing data for the station",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Toggle Webhook",
      "value": "putStationWebhookToggle",
      "action": "toggle webhook",
      "description": "Toggle the enabled or disabled status of a webhook",
      "resource": "resource_stations_web_hooks"
    },
    {
      "name": "Update Webhook",
      "value": "editWebhook",
      "action": "update webhook",
      "description": "Update details of a single web hook",
      "resource": "resource_stations_web_hooks"
    }
  ]

npm_readme:
  # n8n-nodes-azuracast

  ![OpenAPI Coverage](https://img.shields.io/badge/OpenAPI%20coverage-263%2F263-2ea44f)
  ![n8n Community Node](https://img.shields.io/badge/n8n-community%20node-ff6d5a)
  ![Node API Version](https://img.shields.io/badge/n8n%20Nodes%20API-v1-0a7cff)
  ![License](https://img.shields.io/badge/license-MIT-6f42c1)

  ![n8n-nodes-azuracast](https://raw.githubusercontent.com/renebell0/assets/e1d64715e74d5a5dd3e694aca3cf019c761f7742/readme-images/n8n-nodes-azuracast.jpg)

  `@renebello/n8n-nodes-azuracast` is an n8n community node that connects AzuraCast with n8n workflows through the official AzuraCast Web API.

  [AzuraCast](https://www.azuracast.com/) is a self-hosted web radio platform for stations, media, playlists, requests, webhooks, reports, and admin operations. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

  ## Table of contents

  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Workflow Examples](#workflow-examples)
  - [Publish to npm](#publish-to-npm)
  - [Resources](#resources)
  - [Version history](#version-history)

  ## Installation

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

  Package name:

  ```bash
  @renebello/n8n-nodes-azuracast
  ```

  ## Operations

  This package provides **one AzuraCast node** with operations organized by official API tag.

  Inside the node, actions are grouped by resource/tag, for example:

  - `Administration General`
  - `Administration Users`
  - `Public Now Playing`
  - `Public Stations`
  - `Stations Media`
  - `Stations Playlists`
  - `Stations Web Hooks`

  Resources and actions are generated from the official AzuraCast OpenAPI source.

  Current operation coverage in this repository:

  - **263 / 263 operation IDs**

  Request and response support:

  - CRUD-first action labels per resource, plus advanced actions where applicable
  - Resource Locator selectors for common IDs (stations, playlists, media, podcasts, webhooks, and more)
  - Path parameters
  - Query parameters
  - JSON body
  - Raw body
  - Binary body
  - Multipart form-data upload
  - JSON response
  - Text response
  - Binary response

  ## Credentials

  Create an **AzuraCast API** credential in n8n.

  Credential fields:

  - **Base URL**: for example `https://radio.example.com`
  - **API Key**: your AzuraCast API key (optional for public endpoints)

  The node resolves API base paths automatically. When an API key is set, requests include both `X-API-Key` and `Authorization: Bearer ...` headers. Public operations can run without a key, while protected operations require one.

  Credential test behavior in n8n:

  - Without API key: tests connectivity using a public endpoint.
  - With API key: tests authentication using an authenticated account endpoint.

  For advanced API authentication and endpoint behavior, see the official AzuraCast API documentation:

  - [AzuraCast API docs](https://www.azuracast.com/docs/developers/apis/)

  ## Compatibility

  - n8n community nodes API: `v1`
  - Node package format: n8n community node package
  - This node is intended for n8n v1-based installations

  ## Usage

  Basic flow:

  1. Add the **AzuraCast** node.
  2. Select or create **AzuraCast API** credentials.
  3. Choose a **Resource** (API domain/tag).
  4. Choose an **Action**.
  5. Select IDs from list pickers (or enter IDs manually) and fill required query/body inputs.
  6. Execute the node.

  Notes:

  - The action selector is grouped by official AzuraCast API tags.
  - Each action shows only the fields relevant to that specific endpoint.
  - ID-heavy actions include Resource Locator pickers with list search to improve UX in n8n.
  - Legacy workflows that use `operationId` and JSON parameter blocks remain supported.
  - When AzuraCast updates its API, regenerate and verify operation coverage:
    - `npm run generate:operations`
    - `npm run verify:operations`

  ## Workflow Examples

  ### 1. Public now playing (no API key)

  Use this when you only need current public playback data.

  1. Add **AzuraCast** node.
  2. Select **Resource**: `Public Now Playing`.
  3. Select **Action**: `Get All Now Playing`.
  4. Use credentials with only **Base URL**.
  5. Execute and consume `{{$json.data}}`.

  ### 2. Create station webhook (authenticated)

  Use this to register outbound events from AzuraCast.

  1. Add **AzuraCast** node.
  2. Select **Resource**: `Stations Web Hooks`.
  3. Select **Action**: `Create Webhook`.
  4. Set **Station** from the Resource Locator.
  5. Fill webhook payload fields and execute.
  6. Use `{{$json.data}}` as created webhook response.

  ### 3. Upload media file to a station

  Use this to automate media ingestion from binary input.

  1. Add a node that outputs binary audio in property `data`.
  2. Add **AzuraCast** node.
  3. Select **Resource**: `Stations Media`.
  4. Select **Action**: `Upload File`.
  5. Set **Station** with Resource Locator.
  6. Keep binary property as `data` or set your custom property name.
  7. Execute and check `{{$json.data}}` for upload result.

  Execution behavior:

  - Response wrapping is enabled by default and returns `{ success, data, operation }`.
  - Delete actions return `{ deleted: true }` when successful.
  - If **Continue On Fail** is enabled, failed items return structured error payloads with operation and resource context.

  ## Publish to npm

  Pre-publish checklist:

  1. Run `npm run validate:publish`
  2. Confirm package contents with `npm run pack:check`
  3. Confirm npm publish metadata with `npm run publish:dry-run`
  4. Confirm action metadata rendering with `npm run verify:ui`

  Package naming and discovery requirements for n8n:

  - Package name starts with `n8n-nodes-` (or `@scope/n8n-nodes-...`)
  - `keywords` includes `n8n-community-node-package`
  - `package.json` includes an `n8n` block with built node and credential paths

  Publishing options:

  - Recommended release flow: `npm run release`
  - Automated publish with provenance:
    - Create the repository secret `NPM_TOKEN` with publish permissions on npm
    - Push a tag like `v0.1.0` and let GitHub Actions run `.github/workflows/publish.yml`
  - Direct publish flow: `npm run release:publish`
  - If you use a scoped package name, publish with public access enabled

  Versioning:

  - Patch: `npm version patch`
  - Minor: `npm version minor`
  - Major: `npm version major`

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n node development documentation](https://docs.n8n.io/integrations/creating-nodes/)
  - [AzuraCast API documentation](https://www.azuracast.com/docs/developers/apis/)
  - [AzuraCast official OpenAPI source](https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/web/static/openapi.yml)

  ## Version history

  ### 0.1.10

  - Updated the node subtitle to show both action and resource in the n8n editor
  - Sorted action dropdowns by visible label across all AzuraCast resources
  - Sorted optional parameter collections alphabetically for cleaner field discovery
  - Updated all Resource Locator labels to the `Name or ID` pattern with clearer list/manual ID guidance
  - Refined advanced request and response option descriptions without changing execution behavior

  ### 0.1.9

  - Wrapped runtime API failures in `NodeApiError` for clearer n8n error details in the UI
  - Updated grouped resource labels to singular display names aligned with n8n UX guidance
  - Expanded local verification to cover resource labels and thrown API error behavior

  ### 0.1.8

  - Added explicit body-field UX for AzuraCast actions with missing request schema in OpenAPI, including file management, backups, waveform cache, account security, and playlist apply actions
  - Added Auto-mode JSON request body support for actions that require free-form JSON payloads (`putMe`, `putStationLiquidsoapConfig`)
  - Added masked input rendering for sensitive fields such as `secret`
  - Expanded local simulation and real QA tooling to validate these payload mappings and classify environment-limited read-only errors correctly

  ### 0.1.7

  - Fixed **Administration General → Send Test Email** by exposing required `Email` input
  - Added runtime metadata override for AzuraCast `adminSendTestEmail` to send `email` in request body
  - Expanded local simulation to validate `Send Test Email` payload handling

  ### 0.1.6

  - Standardized successful delete action output to `{ deleted: true }`
  - Updated local simulation coverage for delete operation output assertions

  ### 0.1.5

  - Replaced the multi-node domain package layout with a single `AzuraCast` node
  - Grouped actions inside the node by official AzuraCast API tags/resources
  - Refined action naming to a CRUD-first UX style with concise operation labels
  - Added Resource Locator list search for common path IDs across station and admin resources
  - Added runtime handling for locator values and empty-success responses in execute output
  - Added structured continue-on-fail payloads with operation/resource/error metadata
  - Kept backward compatibility for legacy `operationId` and JSON parameter workflows

  ### 0.1.1

  - Domain-based node architecture (one node per official AzuraCast API domain/tag)
  - Shared execution runtime for consistent request/response behavior across all domain nodes

  ### 0.1.0

  - Initial public version
  - Full OpenAPI operation coverage for AzuraCast (`263/263`)
  - Local simulation tooling for request/response verification

ai_documentation_summary:
  {"purpose":"Interact with the AzuraCast Web API to automate tasks for self-hosted web radio platforms, including media management, station administration, and webhook configuration.","capabilities":["Retrieve public now playing data","Manage stations (create, update, delete)","Handle media uploads and management","Create and manage station webhooks","Administer users and general settings","Manage playlists and podcasts","Support for CRUD operations on all resources","Binary file uploads via multipart form-data","Resource Locator selectors for ID selection","Support for JSON, text, and binary responses"],"authentication":"API key required (optional for public endpoints)","commonUseCases":["Automate media ingestion from external sources","Trigger external services when station webhooks are created","Fetch public radio station data for dashboards","Automate user management tasks","Schedule playlist updates"],"limitations":[],"relatedNodes":[]}


