# nodes

node_type: n8n-nodes-comfyui.comfyui
package_name: n8n-nodes-comfyui
display_name: comfyui
description: n8n node to integrate with ComfyUI stable diffusion workflows
category: Community
development_style: declarative
version: 0.0.9
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: mason276752
author_github_url: git+https://github.com/mason276752/n8n-nodes-comfyui.git
npm_package_name: n8n-nodes-comfyui
npm_version: 0.0.9
community_fetched_at: 2026-03-25T21:19:41.752Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-comfyui

  This package provides an n8n node to integrate with [ComfyUI](https://github.com/comfyanonymous/ComfyUI) — a powerful and modular stable diffusion GUI with a graph/nodes interface.

  ## Features

  - Execute ComfyUI workflows directly from n8n
  - Support for multiple input items (each item runs its own workflow)
  - Automatic retrieval of generated images **and videos**
  - Output format conversion: JPEG, PNG, WebP, or Raw (no conversion)
  - Quality control for JPEG and WebP output
  - Progress monitoring and error handling
  - Optional API key authentication
  - Configurable timeout

  ## Prerequisites

  - n8n (version 1.0.0 or later)
  - ComfyUI instance running and accessible
  - Node.js 22.16 or newer

  ## Installation

  ```bash
  pnpm install n8n-nodes-comfyui
  ```

  Or via the n8n community nodes panel: search for `n8n-nodes-comfyui`.

  ## Node Configuration

  ### Credentials

  | Field   | Description                                              |
  |---------|----------------------------------------------------------|
  | API URL | URL of your ComfyUI instance (e.g. `http://127.0.0.1:8188`) |
  | API Key | Optional — required if your ComfyUI has authentication enabled |

  ### Parameters

  | Parameter      | Description                                                                 |
  |----------------|-----------------------------------------------------------------------------|
  | Workflow JSON  | ComfyUI workflow exported as JSON (API format)                              |
  | Output Format  | `JPEG` / `PNG` / `WebP` / `Raw (Original)` — applies to image outputs only |
  | JPEG Quality   | Quality 1–100 (shown when Output Format is JPEG)                           |
  | WebP Quality   | Quality 1–100 (shown when Output Format is WebP)                           |
  | Timeout        | Maximum minutes to wait for workflow completion (default: 30)               |

  ### Output Format notes

  - **JPEG / PNG / WebP** — images are decoded and re-encoded via [sharp](https://sharp.pixelplumbing.com/)
  - **Raw (Original)** — files are downloaded as-is without any conversion; useful for formats sharp doesn't support, or when you want to preserve the original file exactly

  ### Outputs

  Each output item contains:

  **JSON fields**
  - `filename` — original filename from ComfyUI
  - `type` — `output` or `temp`
  - `subfolder` — subfolder path if any
  - `mediaType` — `image` or `video`

  **Binary (`data`)**
  - The file content as binary data, with correct `mimeType` and `fileExtension` set

  ## Multiple Input Items

  When multiple items are passed into this node, each item is processed sequentially — one ComfyUI workflow execution per item. This allows expressions in the Workflow JSON field to reference each item's data (e.g. `{{ $json.prompt }}`).

  ## Usage

  1. Export your workflow from ComfyUI via **Save (API Format)**
  2. Add the ComfyUI node to your n8n workflow
  3. Paste the workflow JSON into the **Workflow JSON** field
  4. Set the API URL in the credentials
  5. Execute — generated images and videos will appear as binary outputs

  ## Error Handling

  The node handles:
  - API connection failures
  - Invalid workflow JSON
  - ComfyUI execution errors (with node ID and error message)
  - Timeout conditions
  - Individual file download failures (non-fatal; returns error in `json.error`)

  ## Development

  ```bash
  # Install dependencies
  pnpm install

  # Build
  pnpm build

  # Watch mode
  pnpm dev

  # Lint
  pnpm lint
  ```

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node integrates with ComfyUI to execute Stable Diffusion workflows directly from n8n, supporting both image and video generation with optional API key authentication.","capabilities":["Execute ComfyUI workflows via JSON API","Process multiple input items sequentially","Retrieve generated images and videos","Convert output formats to JPEG, PNG, WebP, or Raw","Control JPEG and WebP quality (1-100)","Monitor workflow progress","Handle timeouts and errors gracefully","Support expressions in workflow JSON for dynamic inputs"],"authentication":"Optional API key required if ComfyUI instance has authentication enabled","commonUseCases":["Automated image generation in marketing workflows","Video creation pipelines","Dynamic prompt-based content generation","Batch processing of Stable Diffusion workflows"],"limitations":["Requires Node.js 22.16 or newer","Minimum n8n version is 1.0.0","Image outputs in JPEG/WebP formats are re-encoded via sharp (may not preserve exact original quality)","Raw format downloads files without conversion but may not support all formats sharp can handle"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.binaryData","n8n-nodes-base.code"]}


node_type: n8n-nodes-synology-suite.synologysuite
package_name: n8n-nodes-synology-suite
display_name: synologysuite
category: Community
development_style: declarative
version: 0.33.0
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: clawbow
author_github_url: git+https://github.com/ClawBow/n8n-nodes-synology-suite.git
npm_package_name: n8n-nodes-synology-suite
npm_version: 0.33.0
community_fetched_at: 2026-03-25T21:19:41.761Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  n8n community nodes for Synology DSM (API, Drive, Sheets, Office, MailPlus, Calendar, Note, Photos, Contacts, FileStation, Chat, Security, DownloadStation2, Storage Manager, AudioStation) - AI Agent compatible

npm_readme:
  # n8n-nodes-synology-suite

  Community nodes for Synology DSM WebAPI.

  - **NPM**: https://www.npmjs.com/package/n8n-nodes-synology-suite
  - **GitHub**: https://github.com/ClawBow/n8n-nodes-synology-suite
  - **Issues**: https://github.com/ClawBow/n8n-nodes-synology-suite/issues

  ## Project status

  > ⚠️ **Work in progress / actively expanding**
  >
  > This package is under active development. New Synology APIs are added progressively, coverage is improving release after release, and some operations can still be unstable depending on DSM version/build.
  >
  > Bugs are possible (especially on less common DSM/API variants). I’m actively fixing them and extending coverage over time.

  ## Included nodes (current)

  - **Synology API**: generic DSM caller (`api + method + version + params`)
  - **Synology Drive**: file operations, search, links, team folders, labels, webhooks
  - **Synology Sheets**: spreadsheet reads/writes, range ops, exports, batch updates
  - **Synology Office**: Office-family fallback + custom calls
  - **Synology MailPlus**: mailbox/message/label/filter operations
  - **Synology MailPlus Trigger**: incoming mail events (webhook style)
  - **Synology Calendar**: calendars, events, tasks, settings, timezone helpers
  - **Synology Note**: notebooks, notes, todos, tags, search, trash, sharing
  - **Synology Photos**: browse, albums, sharing, favorites, thumbnails
  - **Synology Contacts**: addressbooks, contacts, labels, search
  - **Synology File Station**: list/info/search/copy/move/delete/upload/download/background tasks
  - **Synology Chat**: users/channels/posts/webhooks/apps + custom chat calls
  - **Synology Security Observability**: security/logcenter-style discovery and operations
  - **Synology DownloadStation2**: modern Download Station operations

  ## Coverage philosophy

  Goal: cover as much of the Synology API surface as possible with stable operation-based nodes.

  - New API families are added incrementally.
  - Unsupported or DSM-variant methods can still be reached via `Custom * Call` operations.
  - Runtime probing artifacts are included to document what is actually available on real NAS targets.

  ## Credentials

  `Synology DSM API`
  - Base URL (example: `https://your-nas:5001`)
  - Username
  - Password
  - Session Name (default `FileStation`)
  - Ignore SSL Issues (for self-signed certs)

  ## Node usage examples

  ### Synology Office
  - **List Spreadsheets**: choose `List Spreadsheets`, set folder ID and limit.
  - **Read Range / Cells**: choose `Read Range / Cells`, set `fileId`, optional `sheetId`, and A1 range (`A1:C20`).
  - **Write Range / Cells**: choose `Write Range / Cells`, provide A1 range and a 2D JSON values array.
  - **Append Row**: provide `rowValues` JSON array.
  - If your DSM build uses different method names, keep using operation mode and pass `extraParamsJson`, or use `Custom Office Call`.

  ### Synology MailPlus
  - **List Mailboxes**: operation `List Mailboxes`.
  - **List Messages**: operation `List Messages`, optionally enable `Return All` for auto-pagination.
  - **Get Message Detail**: set `messageId`.
  - **Move Message**: set `messageIds` JSON array and destination mailbox.
  - **Mark Read / Unread**: set `messageId` + boolean `read`.
  - **Add / Remove Label**: set `messageId`, `labelId`, and label action.

  ### Synology Drive
  - **List Files**: supports offset/limit and `Return All`.
  - **Search Files**: can `Wait for Completion` and poll search task results.
  - **Create Share Link**: supports link password, expiration date, and download toggle.
  - `Custom Drive Call` remains available for unsupported variants.

  ## Error handling

  DSM error responses are normalized and include:
  - `api`
  - `method`
  - `version`
  - DSM `code`
  - mapped human message

  All nodes use n8n `continueOnFail()` behavior. If enabled, each failing item emits an error payload instead of stopping the workflow.

  ## Local test

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

  ## Troubleshooting

  - **`code=102/103/104`**: API/method/version mismatch on your DSM version. Use `Custom * Call` mode or provide additional params in `extraParamsJson`.
  - **`code=105/106/107/119`**: auth/session issue. Verify credentials and session name. Re-login retry is automatic once.
  - **Mail label operations fail**: MailPlus versions differ. Try custom call and inspect available methods through `List Mail APIs`.
  - **Office sheet operation fails**: different Office method names exist between builds. Operation mode already attempts multiple method candidates; if still failing, switch to custom call.

  ## API inventories captured from your NAS

  - [`synology-api-catalog.full.json`](https://github.com/ClawBow/n8n-nodes-synology-suite/blob/main/synology-api-catalog.full.json) (full discovered catalog)
  - [`ALL_APIS.md`](https://github.com/ClawBow/n8n-nodes-synology-suite/blob/main/ALL_APIS.md) (human-readable full list)

  Additional per-service inventories (`syno-drive-apis.json`, `syno-office-apis.json`, `syno-mailplus-server-apis.json`, `syno-mailclient-apis.json`) are generated in the **workspace root** during local probing and are not part of this repository by default.

  ## Full-action discovery (exhaustive probe)

  The repository includes an exhaustive action discovery script that probes a conservative method set on every discovered DSM API:

  - candidate methods: `get,list,query,info,start,status,create,update,set,delete,run,stop,search,read,write`
  - default safety mode skips potentially destructive methods (`start/create/update/set/delete/run/stop/write`)
  - credentials are loaded from `../skills/synology-api-discovery/.env` by default

  Run (safe default):

  ```bash
  npm run probe:actions
  ```

  Outputs:
  - `API_PROBE_RESULTS.json` (full machine-readable probe results)
  - `API_PROBE_SUMMARY.md` (human summary, top valid methods, coverage stats)

  Optional destructive probing (use with caution):

  ```bash
  npm run probe:actions:destructive
  ```

  ### Caveats

  - Many endpoints require mandatory params; `error code 101` often means method likely exists but needs args.
  - `error code 103` usually indicates unsupported/non-existent method for that API.
  - Running with `--allow-destructive` can trigger state-changing operations. Prefer non-destructive mode unless on a test NAS.

  ## About Synology Office API docs/slides access

  Based on Synology support feedback, Synology Office API docs/slides resources are currently not accessible.

  If you need access, open a request via official channels:
  - Synology Support Center: https://account.synology.com/support
  - Synology KB portal: https://kb.synology.com/
  - Synology Community: https://community.synology.com/

  If you already received specific support links from Synology, add them here so other users can request the same access path.

  ## Release workflow

  - See [RELEASE_CHECKLIST.md](https://github.com/ClawBow/n8n-nodes-synology-suite/blob/main/RELEASE_CHECKLIST.md) for a safe publish process.
  - See [CHANGELOG.md](https://github.com/ClawBow/n8n-nodes-synology-suite/blob/main/CHANGELOG.md) for version history.

  ## Additional examples

  See [EXAMPLES.md](https://github.com/ClawBow/n8n-nodes-synology-suite/blob/main/EXAMPLES.md) for sample n8n workflow JSON snippets.

ai_documentation_summary:
  {"purpose":"A collection of community nodes enabling n8n workflows to interact with Synology DSM services including Drive, MailPlus, Office, Calendar, Photos, and more via WebAPI.","capabilities":["Generic Synology API calls with customizable method/version/params","File operations (upload, download, search, copy, move, delete) via Drive and File Station","Spreadsheet management (read/write ranges, append rows, exports) via Sheets","Email operations (list messages, move, mark read/unread, label management) via MailPlus","Calendar and Note management (events, tasks, notebooks, tags)","Photo management (albums, sharing, favorites, thumbnails)","Contact and addressbook management","Chat operations (users, channels, posts, webhooks)","Security and logcenter discovery","Download Station 2 operations"],"authentication":"Basic Auth (Username/Password) with configurable Session Name","commonUseCases":["Automating file backup and organization across Synology NAS","Syncing email data between Synology MailPlus and external services","Managing shared folders and generating secure share links","Automating photo album creation and tagging","Integrating Synology Calendar events with workflow automation"],"limitations":["Work in progress with active development; some operations may be unstable depending on DSM version/build","Bugs possible especially on less common DSM/API variants","Some Office and MailPlus operations may fail due to version-specific API method name differences","Requires manual probing or custom calls for unsupported DSM variants","Some per-service API inventories are generated locally and not included in the repository"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code","n8n-nodes-base.webhook"]}


node_type: n8n-nodes-document-generator.documentgenerator
package_name: n8n-nodes-document-generator
display_name: documentgenerator
description: This node creates dynamic content for documents or emails with Handlebars templates
category: Community
development_style: declarative
version: 1.0.10
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: mcolomer
author_github_url: git+https://github.com/n8nhackers/n8n-nodes-document-generator.git
npm_package_name: n8n-nodes-document-generator
npm_version: 1.0.10
community_fetched_at: 2026-03-25T21:19:41.764Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  ![Banner image](images/n8n-and-n8nhackers.png)

  # n8n-nodes-document-generator

  This is an n8n community node. It helps you to create:
  * One dynamic content per all input items.
  * One dynamic content per input item.

  If you have any questions or remarks please [contact me](mailto:contact@n8nhackers.com).

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

  ## TL;DR
  Don't want to read? Import the sample workflow [Generate dynamic contents for EMAILS or HTML pages](https://n8n.io/workflows/1790-generate-dynamic-contents-for-emails-or-html-pages/) to test this node with random samples. 
  ![Generate dynamic contents for EMAILS or HTML pages](images/workflow-sample.jpeg?raw=true "Generate dynamic contents for EMAILS or HTML pages")

  ## Installation

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

  ## Compatibility

  This node was developed and tested with version 0.193.5 of n8n.

  ## Dependencies
  If you install this node, n8n will install automatically the next extra npm packages:
  * [@jaredwray/fumanchu](https://www.npmjs.com/package/@jaredwray/fumanchu): this new Handlebars replacement provides Handlebars + Helpers Together.

  ## Usage
  The node can solve multiple use cases when creating content like:
  * Email generation (HTML or TEXT)
  * Static HTML pages
  * WordPress posts
  * Telegram/Slack messages
  * Use helpers to filter templates

  The sky is your limit!

  Just follow the next samples to create your dynamic content and forget to use SET, FUNCTION, or FUNCTION ITEM nodes.

  ### All input items in one template

  #### Cases
  * You want to send a list of recent news about n8n.
  * You want to send the list of the customers created in the last hour in your database.

  #### Template
  Supposing that you have a customer list in JSON:
  ```json
  [
  	{
  		"email": "miquel@n8nhackers.com",
  		"name": "Miquel",
  		"primary": true
  	},
  	{
  		"email": "contact@n8nhackers.com",
  		"name": "Contact",
  		"primary": false
  	}
  ]
  ```

  We will try a Handlebars helper #if to show if the contact is the primary email or not.

  If you use the next template:
  ```
  <ul id="customer_list">
    {{#each items}}
    <li>{{name}}: {{email}} {{#if (eq primary true)}}(primary){{/if}}</li>
    {{/each}}
  </ul>
  ```

  And you will get the next output to send by email in HTML format:
  ```
  <ul id="customer_list">
  <li>Miquel: miquel@n8nhackers.com (primary)</li>
  <li>Contact: contact@n8nhackers.com</li>
  </ul>
  ```

  Property **items** is always mandatory to iterate over all items.

  ### One input item per template

  #### Cases
  * You have an invoice with header and lines and you want to send it by email.

  #### Template
  If you have one item/invoice with this JSON:
  ```json
  {
  	"date": "2022-01-12",
  	"to": "N8n hackers",
  	"address": "Granollers, Spain",
  	"total": 133.10,
  	"lines": [
  		{
  			"description": "Create a node to render items in handlebar templates",
  			"quantity": 1,
  			"amount": 100,
  			"vat": 21,
  			"total": 121
  		},
  		{
  			"description": "Test a node to render items in handlebar templates",
  			"quantity": 1,
  			"amount": 10,
  			"vat": 2.10,
  			"total": 12.1
  		}
  	]
  }
  ```

  You need to use this template:
  ```
  Date: {{date}}
  To: {{to}}
  Address: {{address}}
  Details:
  {{#each lines}}
  - "{{description}}" x {{quantity}} = {{amount}}€ + {{vat}}€ = {{total}}€
  {{/each}}
  Total invoice: {{total}}€
  ```

  And you will get the next output to send by email in TEXT format:
  ```
  Date: 2022-01-12
  To: N8n hackers
  Address: Granollers, Spain
  Details:
  - "Create a node to render items in handlebar templates" x 1 = 100€ + 21€ = 121€
  - "Test a node to render items in handlebar templates" x 1 = 10€ + 2.10€ = 12.10€
  Total invoice: 133.10€
  ```

  I recommend using this method if you want to send multiple invoices.

  ## Helpers
  Now the node supports helpers thanks to the [@jaredwray/fumanchu](https://www.npmjs.com/package/@jaredwray/fumanchu#helpers) package. 

  We recommend checking 

  ## Doubts about templates syntax
  Please, check the [official page](https://handlebarsjs.com/guide/expressions.html#basic-usage) to review all the existing expressions in Handlebars.

  ## Another way to try it out

  [N8N documentation on custom nodes](https://docs.n8n.io/nodes/creating-nodes/create-n8n-nodes-module.html)

  Clone the n8n-nodes-document-generator repository and execute:
  ```
  # Use v20.12.2 = lts/iron
  nvm use lts/iron

  # Install dependencies
  npm install

  # Build the code
  npm run build

  # "Publish" the package locally
  npm link
  ```

  Create an N8N installation and add the n8n-nodes-document-generator to it:
  ```
  # Ensure that custom nodes directory exists in your .n8n
  mkdir ~/.n8n/custom

  # Init npm packages (intro to all questions)
  cd ~/.n8n/custom && npm init

  # "Install" the locally published module
  npm link n8n-nodes-document-generator

  # Start n8n
  n8n start
  ```

  # Contribution

  To make this node even better, please let us know, [how you use it](mailto:contact@n8nhackers.com). Commits are always welcome.

  # Issues

  If you have any issues, please [let us know on GitHub](https://github.com/n8nhackers/n8n-nodes-document-generator/issues).

  # About

  Nodes by [n8nhackers.com](https://n8nhackers.com). For productive use and consulting on this, [contact us please](mailto:contact@n8nhackers.com).

  Special thanks to [N8n nodemation](https://n8n.io) workflow automation by Jan Oberhauser.

  # License

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

ai_documentation_summary:
  {"purpose":"Generates dynamic content for documents, emails, or messages using Handlebars templates, supporting both single-item and multi-item input processing.","capabilities":["Render HTML or text content from Handlebars templates","Process one template per all input items (batch mode)","Process one template per input item (individual mode)","Iterate over arrays of data using {{#each}}","Use Handlebars helpers like {{#if}} and {{eq}} for conditional logic","Generate email content (HTML or text format)","Generate static HTML pages","Generate WordPress posts","Generate Telegram or Slack messages","Filter and conditionally display data based on template logic"],"authentication":"None","commonUseCases":["Sending personalized email campaigns with dynamic content","Generating HTML pages for websites","Creating WordPress blog posts with variable data","Automating Telegram or Slack notifications","Processing lists of customers or news items in a single template"],"limitations":["Requires manual installation via npm link for custom node integration","Compatible only with n8n version 0.193.5 or similar","Depends on external npm package @jaredwray/fumanchu for Handlebars support","No built-in authentication or security features for template data"],"relatedNodes":["Handlebars expression node","Set node","Function node","Function item node","Email node"]}


node_type: n8n-nodes-comfyui-image-to-video.comfyuiimagetovideo
package_name: n8n-nodes-comfyui-image-to-video
display_name: comfyuiimagetovideo
description: n8n node to integrate with ComfyUI stable diffusion workflows for image to video conversion
category: Community
development_style: declarative
version: 1.0.1
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: christiankuri
author_github_url: git+https://github.com/christiankuri/n8n-nodes-comfyui-image-to-video.git
npm_package_name: n8n-nodes-comfyui-image-to-video
npm_version: 1.0.1
community_fetched_at: 2026-03-25T21:19:41.766Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-comfyui-image-to-video

  This package provides n8n nodes to integrate with [ComfyUI](https://github.com/comfyanonymous/ComfyUI) - A powerful and modular stable diffusion GUI with a graph/nodes interface.

  ## Features

  - Execute ComfyUI workflows directly from n8n
  - Generate images and videos using stable diffusion models
  - Support for workflow JSON import
  - Automatic output retrieval from workflow outputs
  - Progress monitoring and error handling
  - Support for API key authentication
  - Configurable timeout settings

  ## Prerequisites

  - n8n (version 1.0.0 or later)
  - ComfyUI instance running and accessible
  - Node.js 16 or newer

  ## Installation

  ```bash
  npm install n8n-nodes-comfyui-image-to-video
  ```

  ## Node Types

  ### ComfyUI Node

  This node allows you to execute ComfyUI workflows and retrieve generated images.

  #### Settings

  - **API URL**: The URL of your ComfyUI instance (default: http://127.0.0.1:8188)
  - **API Key**: Optional API key if authentication is enabled
  - **Workflow JSON**: The ComfyUI workflow in JSON format

  #### Outputs

  The node outputs an array of generated images with:
  - `filename`: Name of the generated image file
  - `subfolder`: Subfolder path if any
  - `data`: Base64 encoded image data

  ### ComfyUI Image to Video Node

  This node allows you to convert images to videos using ComfyUI's image-to-video capabilities (like AnimateDiff, WanImageToVideo, or video generation models).

  #### Settings

  - **API URL**: The URL of your ComfyUI instance (default: http://127.0.0.1:8188)
  - **API Key**: Optional API key if authentication is enabled
  - **Workflow JSON**: The ComfyUI workflow in JSON format for video generation
  - **Input Type**: Choose between URL, Base64, or Binary input methods
  - **Input Image**: URL or base64 string of the input image (when using URL or Base64 input type)
  - **Binary Property**: Name of the binary property containing the image (when using Binary input type)
  - **Timeout**: Maximum time in minutes to wait for video generation

  #### Input

  The node accepts an image input in three ways:
  1. **URL**: Provide a direct URL to an image
  2. **Base64**: Provide a base64-encoded image string
  3. **Binary**: Use an image from a binary property in the workflow (e.g., from an HTTP Request node)

  #### Outputs

  The node outputs the generated video:
  - In the `binary.data` property with proper MIME type and file information
  - `fileName`: Name of the generated video file
  - `data`: Base64 encoded video data
  - `fileType`: The type of video file (e.g., 'video')
  - `fileSize`: Size of the video in KB
  - `fileExtension`: File extension (webp, mp4, gif)
  - `mimeType`: MIME type of the video

  > **Note**: If multiple videos are generated by the ComfyUI workflow, only the first video output will be returned. The node currently prioritizes video outputs (files with .webp, .mp4, or .gif extensions) and returns the first one it finds.

  ## Usage Examples

  ### Using the ComfyUI Node

  1. Export your workflow from ComfyUI as JSON
  2. Create a new workflow in n8n
  3. Add the ComfyUI node
  4. Paste your workflow JSON
  5. Configure the API URL
  6. Execute and retrieve generated images

  ### Using the ComfyUI Image to Video Node

  1. Create a workflow in ComfyUI for video generation (e.g., using WanImageToVideo, VHS_VideoCombine)
  2. Export the workflow as JSON (API)
  4. Add the ComfyUI Image to Video node
  5. Paste your workflow JSON
  6. Select the appropriate Input Type:
     - For URL: Enter the image URL
     - For Base64: Provide a base64 string
     - For Binary: Specify the binary property containing the image (default: "data")
  7. Configure timeout as needed
  8. Execute the workflow to generate a video from your input image

  ## Error Handling

  The node includes comprehensive error handling for:
  - API connection issues
  - Invalid workflow JSON
  - Execution failures
  - Timeout conditions
  - Input image validation

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build
  npm run build

  # Test
  npm run test

  # Lint
  npm run lint
  ```

  ## License

  [MIT](LICENSE.md)
   

ai_documentation_summary:
  {"purpose":"This n8n node integrates with ComfyUI to execute stable diffusion workflows for generating images and converting images to videos.","capabilities":["Execute ComfyUI workflows directly from n8n","Generate images using stable diffusion models","Convert images to videos using models like AnimateDiff or WanImageToVideo","Import and run workflows via JSON format","Accept image inputs via URL, Base64, or Binary properties","Monitor progress and handle errors","Support configurable timeout settings"],"authentication":"API key required (optional)","commonUseCases":["Generate images from text prompts using stable diffusion","Convert static images into animated videos","Run complex diffusion workflows without manual ComfyUI setup","Integrate video generation into automated marketing or content workflows"],"limitations":["Only returns the first video output if multiple are generated","Prioritizes video files with .webp, .mp4, or .gif extensions","Requires a running ComfyUI instance accessible via API","Node version requires n8n 1.0.0 or later"],"relatedNodes":["ComfyUI","HTTP Request","Binary File","Code"]}


node_type: n8n-nodes-data-validation.datavalidation
package_name: n8n-nodes-data-validation
display_name: datavalidation
description: This n8n community node validates input data using JSON Schemas.
category: Community
development_style: declarative
version: 1.0.1
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: bartolomeumr
author_github_url: git+https://github.com/Bartmr/n8n-nodes-data-validation.git
npm_package_name: n8n-nodes-data-validation
npm_version: 1.0.1
community_fetched_at: 2026-03-25T21:19:41.767Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  ## How to

  This n8n community node validates input data using JSON Schemas.

  Visit <https://ajv.js.org/> or <https://json-schema.org/> to learn how to describe your validation rules in JSON Schemas.

  ## Library development

  ### Changing the supported Node version

  - Files to be changed
    - .nvmrc
    - Dockerfile.dev
    - package.json
      - `engine` field
      - `@types/node` version
    - tsconfig.base.json
    - .github/workflows/main.yml and other CI config files
  - delete all `node_modules` directories and `package-lock.json` files
  - run `npm run install`

ai_documentation_summary:
  {"purpose":"Validates input data against JSON Schemas to ensure data integrity and format compliance.","capabilities":["JSON Schema validation","Input data verification","Format compliance checking"],"authentication":"None","commonUseCases":["Validating API request payloads","Ensuring data format before processing","Quality control for incoming data streams"],"limitations":["Requires external JSON Schema definitions"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-http.response"]}


node_type: n8n-nodes-tesseractjs.tesseractjs
package_name: n8n-nodes-tesseractjs
display_name: tesseractjs
description: A n8n module that exposes Tesseract.js, an OCR library that can detect text on images
category: Community
development_style: declarative
version: 1.5.1
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: jreyesr
author_github_url: git+https://github.com/jreyesr/n8n-nodes-tesseractjs.git
npm_package_name: n8n-nodes-tesseractjs
npm_version: 1.5.1
community_fetched_at: 2026-03-25T21:19:41.769Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-tesseractjs

  This is a n8n community node. It lets you use [Tesseract.js](https://tesseract.projectnaptha.com/) in your n8n
  workflows.

  [Tesseract](https://github.com/tesseract-ocr/tesseract?tab=readme-ov-file#about) is an open source OCR (Optical
  Character Recognition) engine that can recognize text (machine/typed/printed text, not handwritten) in images (e.g. PNG
  or JPEG) or images embedded in PDF files.

  To read text from PDFs directly (not from images), you may want
  [the **Extract from PDF** operation of the built-in **Extract from file** node
  ](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/#operations)

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

  [Installation](#installation)  
  [Operations](#operations)  
  [Compatibility](#compatibility)  
  [Usage](#usage)  <!-- delete if not using this section -->  
  [Resources](#resources)  
  [Version history](#version-history)  <!-- delete if not using this section -->

  ## Installation

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

  You can quickly get started by importing [the sample playbook](./sample_workflow.json).

  ## Operations

  Note: both operations will output a new binary field, called `ocr`, which contains the image that was actually OCR'd.
  For input images, this will be the same image. For input PDFs, this will be each image in the PDF.

  ### Extract text

  This operation reads the text of the entire image. It outputs a JSON item containing the entire recognized text, and a "
  confidence value" indicating how likely the generated text is to match the source image, as a percentage:

  ```json
  {
  	"text": "...",
  	"confidence": 94
  }
  ```

  If passed a PDF instead of an image, the node may output several items, one for each image in the PDF. Each item will
  have the format described above.

  ### Extract boxes

  This operation also reads text, but returns more information about the bounding box of each detected block, and the
  detected
  language if available.

  The "granularity" of the detections can be controlled: you can split on paragraphs, lines, words or individual
  characters.

  ```json
  {
  	"blocks": [
  		{
  			"text": "This",
  			"confidence": 95.15690612792969,
  			"bbox": {
  				"x0": 36,
  				"y0": 92,
  				"x1": 96,
  				"y1": 116
  			},
  			"language": "eng"
  		},
  		{
  			"text": "is",
  			"confidence": 95.15690612792969,
  			"bbox": {
  				"x0": 109,
  				"y0": 92,
  				"x1": 129,
  				"y1": 116
  			},
  			"language": "eng"
  		},
  		...
  	]
  }
  ```

  ![an image of some text with Tesseract detections overlaid. Each word is surrounded in a light red box, and each box also has text on top indicating the detected word and confidence percentage](imgs/words.png)

  Entire paragraphs:

  ![an image of the same text with Tesseract per-paragraph detections overlaid as one red box covering each paragraph](imgs/paragraphs.png)

  Per-line statistics:

  ![an image of the same text with Tesseract per-line detections overlaid as one red box covering each line](imgs/lines.png)

  If passed a PDF instead of an image, the node may output several items, one for each image in the PDF. Each item will
  have the format described above.

  ## Compatibility

  This node has been tested on n8n v1.68.0, but should also work on older versions. If you encounter an issue with an
  older version, please [raise an issue](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues).

  ## Usage

  ### Input Image Field Name

  All Operations of this node have a field **Input Image Field Name**, where the _name_ of a Binary item should be
  provided:

  ![a screenshot of the node UI showing an input item with Binary data](imgs/iifn.png)

  The Binary file with that name will be read and processed. It should be an image or a PDF document. If a PDF, all images
  inside the PDF will be extracted and processed separately.

  ### Detect on Entire Image?

  It's possible to limit the OCR to a certain segment of an image, by toggling the **Detect on Entire Image?** switch
  to Off. When doing so, it's necessary to provide the top and left coordinates of the desired bounding box, and the width
  and height of the box. For example:

  ![a screenshot of the node settings showing that when the Detect on Entire Image switch is Off, there are fields to provide the top, left, width and height of the desired bounding box](imgs/bbox.png)

  This could delineate a region like this:

  ![an image with some text and a light green box that covers only part of it](imgs/bbox_vis.png)

  When performing OCR on that region, it'd only return the text that was contained in that box, even truncating words of
  they lie halfway across the bounding box's borders:

  ![an image with some text and the OCR detections overlaid, showing that only text that lies inside the area of interest has been recognized](imgs/bbox_ocr.png)

  ### Force Resolution

  This option can be used if Tesseract can't autodetect the image's resolution, such as a PNG that doesn't carry that
  information.

  ### Minimum Confidence

  Each recognized block of text (the entire image in the Extract Text operation, or a block such as a paragraph, word or
  letter in the Extract Boxes operation) has a `confidence` value
  that [correlates with the likelihood of the recognized text being correct](https://groups.google.com/g/tesseract-ocr/c/SN8L0IA_0D4/m/sFG8cvitAQAJ).
  Lower confidences are more likely to contain wrong characters or be junk (such as the OCR engine "recognizing" text in
  an image that has none).

  > In my experience values below 95 are usually unusable. Above 99 is usually correct. I would set the threshold
  > somewhere between 97.5 and 98.5 depending on your requirements.
  >
  > The lowest value I have ever seen is 75 but anything below 90 is extremely rare, even below 95 is rare.

  Set the Minimum Confidence option to filter low-confidence results. Ony results that have a confidence _greater than or
  equal to_ this value will be returned. By default, or if not provided, it'll be 0, meaning that no filtering will be
  performed (because confidence is an integer between 0 and 100, so all confidences are greater than or equal to zero).

  ### Timeout

  If you'd like to abort OCR when a certain image takes too long to process, set the Timeout option (in milliseconds).

  Any items that take longer than that time to process will be interrupted and raise an error.
  Set [On Error](https://community.n8n.io/t/issue-with-continue-using-error-output-never-any-output/57194) on the node's
  Settings if you want execution to continue.

  Items that time out will have the `error` or `timeout` key set in the JSON output, so they can be extracted later if
  desired. Items that have a `confidence` were successfully processed.

  ### Controlling which characters can and can't be recognized

  If you know that the source image can only have certain characters (e.g. license plates that can only have uppercase
  letters, numbers or a dash) or can't have certain characters (e.g. if Tesseract is inserting question marks when there
  aren't any), you can explicitly specify which characters will be allowed or which characters will be ignored.

  For example, when only the digits 0-9 are allowed, and splitting on words:

  ![a screenshot of text where only a number 12 has been detected. All other characters, which are letters, are ignored](imgs/whitelist.png)

  Or, when disallowing all uppercase characters:

  ![a screenshot of text where the capital letters that start each sentence have been ignored](imgs/blacklist.png)

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Tesseract.js's docs](https://github.com/naptha/tesseract.js/tree/master/docs)

  ## Version history

  ### v1.0.0

  Initial version, contains the **Extract text** and **Extract boxes** operations.

  ### v1.0.1

  * Fix the installation on N8N instances from NPM
  * Add the toggle switch for specifying a bounding box

  ### v1.1.0

  * Add the ability to control the Tesseract PSM (block, column, single line, single word, sparse text)
  * Add a setting to override the detected DPI of the image
  * Add the ability to specify the whitelist and blacklist

  ### v1.2.0

  * Update the Tesseract.JS version to v6.0.0. No user-facing changes.
  	Please [report any issues that you find](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues)!

  ### v1.3.0

  * Add a Timeout option to control the max processing time
  	(closes [#3](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues/3))

  ### v1.4.0

  * Add the ability to extract all images from a PDF and process them, in addition to single images
  	(closes [#4](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues/4))

  ### v1.4.1

  * Add proper handling for images that are repeated across pages (e.g. logo on header, page background,
  	image that was copy-pasted on several pages), which are stored separately from page-specific images

  ### v1.4.2

  * Add options to resize the images before OCR and to not return binary data (solves Invalid string length error on large
  	images)

  ### v1.5.0

  * Add option to filter low confidence results (closes [#4](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues/4))
  * Downgrade `pdfjs-dist` to v5.3.31 to match N8N's own copy, because otherwise this node conflicted with the Extract
  	From File node (closes [#5](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues/5))

  ### v1.5.1

  No user-facing changes, should work exactly like v1.5.0.
  Please [raise an issue](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues) if anything breaks when upgrading from
  v1.5.0 to v1.5.1!

  * Changes the PDF library (added in v1.4.0) from `pdfjs-dist` to `pdf-lib` due to unexplained crashes (e.g. in Synology
  	devices and some virtualized environments) ([#7](https://github.com/jreyesr/n8n-nodes-tesseractjs/issues/7))

  ## Developer info

  ```bash
  npm i
  ```

  To add this node to a local N8N install:

  ```shell
  npm link
  npm run dev # or npm build the first time or when adding assets, such as the node's logo

  # in ~/.n8n/custom
  npm link n8n-nodes-tesseractjs
  ```

  ### Releasing changes

  1. Bump the version in package.json. We use SemVer.
  2. Add an entry on the [Version History](#version-history) section above describing the changes.
  3. Push changes, open a PR and merge it to master branch (if developing on another branch)
  4. Create a release. This will kick off the CI which will build and publish the package on NPM

ai_documentation_summary:
  {"purpose":"A n8n community node that integrates Tesseract.js to perform Optical Character Recognition (OCR) on images and PDFs, extracting text with confidence scores and optional bounding box coordinates.","capabilities":["Extract text from entire images or PDFs","Extract text with bounding box coordinates (words, lines, paragraphs, characters)","Detect recognized language","Filter text by minimum confidence threshold","Process specific image regions via bounding box coordinates","Handle images embedded in PDF files","Output confidence percentages for recognized text"],"authentication":"None","commonUseCases":["Digitizing scanned documents","Extracting text from image-based invoices or forms","Processing PDFs containing embedded images","Filtering low-quality OCR results using confidence thresholds"],"limitations":["Cannot recognize handwritten text","Cannot read text directly from PDFs without extracting images first","May output multiple items when processing PDFs with multiple images","Text truncation may occur if words cross bounding box boundaries"],"relatedNodes":["Extract from file","Binary","Code","HTTP Request"]}


node_type: n8n-nodes-helicone.helicone
package_name: n8n-nodes-helicone
display_name: helicone
description: n8n node for Helicone AI gateway and observability
category: Community
development_style: declarative
version: 1.0.4
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: _juliettech
author_github_url: git+https://github.com/Helicone/n8n-nodes-helicone.git
npm_package_name: n8n-nodes-helicone
npm_version: 1.0.4
community_fetched_at: 2026-03-25T21:19:41.771Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-helicone

  This is an n8n community node that provides a LangChain-compatible Helicone Chat Model for use in AI chains and workflows. The node routes requests to your chosen LLM provider through the Helicone AI Gateway.

  [Helicone](https://helicone.ai) is an open-source LLM observability platform that helps developers monitor, debug, and improve production AI applications.

  ## Installation

  ### 1. Build the Node
  Clone the repository and install dependencies:
  ```bash
  git clone https://github.com/helicone/n8n-nodes-helicone.git
  cd n8n-nodes-helicone
  pnpm install
  pnpm build
  ```

  ### 2. Install as n8n Community Node
  You can install this node as an n8n community node:

  ```bash
  # Install via npm
  npm install n8n-nodes-helicone

  # Or install via pnpm
  pnpm add n8n-nodes-helicone
  ```

  ### 3. Alternative: Manual Installation
  If you prefer to install manually, navigate to your n8n folder (usually `~/.n8n` on macOS/Linux):
  ```bash
  cd ~/.n8n
  mkdir custom
  cd custom
  pnpm init
  ```

  Link your built node to the n8n custom folder:
  ```bash
  pnpm link /path/to/your/n8n-nodes-helicone
  ```
  Replace `/path/to/your/n8n-nodes-helicone` with the actual path to your repository.

  ### 4. Start n8n
  ```bash
  n8n start
  ```

  ### 5. Access n8n Interface
  Open your browser and go to: `http://localhost:5678`

  ## 6. Add Helicone API Credentials

    - Go to **Credentials > New**
    - Select **Helicone LLM Observability**
    - Enter your Helicone API key (get it from [Helicone Dashboard](https://helicone.ai/dashboard))
    - The base URL is automatically set to `https://ai-gateway.helicone.ai/`

  ## 7. Create a workflow and add your Helicone Chat Model node

  The Helicone Chat Model node is designed to work as part of any AI chain. It outputs a LangChain-compatible model that can be used with other AI nodes.

  **Node Configuration:**
  1. **AI Model:** Choose any model supported by Helicone AI Gateway (find them here: https://helicone.ai/models - e.g, `gpt-4.1-mini`, `claude-3-opus-20240229`).
  2. **Options:**
     - **Temperature:** Sampling temperature (0-2)
     - **Max Tokens:** Maximum number of tokens to generate
     - **Top P:** Nucleus sampling parameter (0-1)
     - **Frequency Penalty:** Control repetition (-2 to 2)
     - **Presence Penalty:** Control new topics (-2 to 2)
     - **Response Format:** Text or JSON
     - **Timeout:** Request timeout in milliseconds
     - **Max Retries:** Number of retry attempts

  **Helicone Options:**
  - **Custom Properties:** JSON object for metadata and filtering
  - **Session Tracking:** Session ID, Path, and Name for grouping requests
  - **Caching:** Enable response caching with configurable TTL (up to 365 days)

  ## How It Works

  The Helicone Chat Model node uses the [Helicone AI Gateway](https://ai-gateway.helicone.ai) to route requests to your chosen LLM provider. The node implements the `LmChatHelicone` class and provides a LangChain-compatible ChatOpenAI interface.

  This provides:
  - **Unified Interface:** Single endpoint for multiple providers
  - **Automatic fallbacks:** If the primary provider is down, the node will automatically use a fallback provider
  - **Observability:** Track usage, performance, and costs across providers
  - **Caching:** Reduce costs with intelligent response caching and reduce latency with intelligent caching
  - **Session Tracking:** Group related requests with session management
  - **Custom Properties:** Add metadata for filtering and analysis

  ## Usage in AI Chains

  This node is designed to be used as part of n8n's AI chain functionality:

  1. **Add the Helicone Chat Model node** to your workflow
  2. **Configure the model** with your desired parameters
  3. **Connect it to other AI nodes** that accept `ai_languageModel` inputs
  4. **Use in chains** for complex AI workflows

  The node outputs a LangChain-compatible model that can be used with:
  - Chat nodes
  - Chain nodes
  - Other AI processing nodes

  ## Helicone Features

  The node supports various Helicone observability features:

  - **Custom Properties:** Add metadata to requests for filtering and analysis
  - **Session Tracking:** Group related requests with Session ID, Path, and Name
  - **Caching:** Enable response caching with configurable TTL (up to 365 days)
  - **Automatic Logging:** All requests are automatically logged in your Helicone dashboard

  ## Response Format

  The node returns a LangChain ChatOpenAI model instance that can be used with other AI nodes. The underlying responses include:

  - Generated content
  - Token usage information
  - Model information
  - Helicone-specific metadata

  All requests are automatically logged in your Helicone dashboard for observability and analysis.

  ## Troubleshooting

  ### Common Issues

  1. **Authentication Errors**
     - Verify your Helicone API key is correct (starts with `pk-` for write access)
     - Ensure your Helicone account has access to the chosen provider

  2. **Model Errors**
     - Validate your model name is correct for the chosen provider
     - Check if the model is available in your Helicone account

  3. **Chain Integration Issues**
     - Ensure the node is properly connected to other AI nodes
     - Verify the output type is compatible with downstream nodes

  ### Getting Help

  - [Helicone Documentation](https://docs.helicone.ai)
  - [n8n Community Forum](https://community.n8n.io)
  - [Helicone Discord](https://discord.gg/helicone)

  ## License

  MIT

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Helicone documentation](https://docs.helicone.ai)
  - [Helicone GitHub](https://github.com/Helicone/helicone)
  - [This Node's GitHub](https://github.com/juliettech13/n8n-nodes-helicone)
  - [LangChain documentation](https://js.langchain.com/)

ai_documentation_summary:
  {"purpose":"A community n8n node that acts as a LangChain-compatible gateway to route AI requests through Helicone for observability, caching, and multi-provider fallback.","capabilities":["Route requests to multiple LLM providers via Helicone AI Gateway","Implement automatic fallback to secondary providers if primary is down","Enable response caching with configurable TTL (up to 365 days)","Track usage, performance, and costs across providers","Group requests using session tracking (Session ID, Path, Name)","Add custom metadata properties for filtering and analysis","Support standard LLM parameters (Temperature, Max Tokens, Top P, Penalties)","Output LangChain-compatible ChatOpenAI interface"],"authentication":"API key required (Helicone API key starting with 'pk-')","commonUseCases":["Monitoring and debugging production AI applications","Reducing costs through intelligent response caching","Unifying access to multiple LLM providers in one workflow","Tracking token usage and latency across different models","Grouping related AI requests for session-based analysis"],"limitations":["Community node (requires manual installation or npm/pnpm install)","Requires Helicone account with access to chosen LLM providers","API key must have write access (starts with 'pk-')","Model availability depends on Helicone account permissions"],"relatedNodes":["LangChain nodes","Chat nodes","Chain nodes","AI Language Model nodes"]}


node_type: n8n-nodes-c10_great_lotus.c10_great_lotus
package_name: n8n-nodes-c10_great_lotus
display_name: c10_great_lotus
category: Community
development_style: declarative
version: 0.1.57
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: meomay22
npm_package_name: n8n-nodes-c10_great_lotus
npm_version: 0.1.57
community_fetched_at: 2026-03-25T21:19:41.772Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  10 action groups: ManagerAction, MouseAction, KeyboardAction, BrowserControl, ElementAction, ImageAction, OthersAction, EmailAction, DeveloperAction, General Debug

npm_readme:
  # n8n-nodes-c10-great-lotus

  Unified GREAT LOTUS MQTT node.

  Highlights:
  1. Existing browser control groups are preserved (Mouse, Keyboard, Browser, Element, Image, Others, Email, Developer, General Debug).
  2. `ManagerAction` now also includes GPM profile actions from C11:
     - `list_profiles`, `get_profile_info`, `create_profile`, `open_profile`, `close_profile`, `update_profile`, `delete_profile`, `list_groups`
  3. `GPM_connect` can open GPM profile first (by `profile_id`) and then attach Playwright to the same `remote_port`.
  4. `quit` will close GPM profile (when session was created from `profile_id`) or close local browser session as usual.

  Quick start:
  1. Use Node.js `>=20.15` (for example: `nvm use` from this folder)
  2. `npm install`
  3. `npm run build`

ai_documentation_summary:
  {"purpose":"A unified MQTT node for the GREAT LOTUS automation framework that integrates browser control actions and GPM profile management.","capabilities":["ManagerAction: list_profiles, get_profile_info, create_profile, open_profile, close_profile, update_profile, delete_profile, list_groups","MouseAction","KeyboardAction","BrowserControl","ElementAction","ImageAction","OthersAction","EmailAction","DeveloperAction","General Debug"],"authentication":"None","commonUseCases":["Automated browser testing via Playwright","GPM profile management and remote session attachment","Unified automation workflows combining mouse, keyboard, and element interactions"],"limitations":["Requires Node.js >=20.15","Requires manual installation of dependencies (npm install) and building the node (npm run build)"],"relatedNodes":["n8n-nodes-mqtt","n8n-nodes-playwright"]}


node_type: n8n-nodes-glpi-v2-fork.glpiv2fork
package_name: n8n-nodes-glpi-v2-fork
display_name: glpiv2fork
description: GLPI Rest API Node compatible with GLPI API V2.
category: Community
development_style: declarative
version: 2.1.17-rc.31
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: marcoscamposyesh
author_github_url: git+https://github.com/YeshShareDEV/n8n-nodes-glpi-v2-glpi11.git
npm_package_name: n8n-nodes-glpi-v2-fork
npm_version: 2.1.17-rc.31
community_fetched_at: 2026-03-25T21:19:41.773Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-glpi-v2-glpi11

  ![version](https://img.shields.io/badge/version-2.0.12.13-blue) ![n8n](https://img.shields.io/badge/n8n-community-orange) ![GLPI](https://img.shields.io/badge/GLPI-REST%20API-blue)

  Node para integração do [GLPI](https://glpi-project.org/) com o [n8n](https://n8n.io/), compatível com a API REST V2 do GLPI.

  ## ✨ Funcionalidades
  - Autenticação automática via initSession (sem precisar criar node HTTP manual)
  - Suporte a operações de CRUD para Tickets, Changes, Problems, Computers, Softwares e comentários
  - Gerenciamento automático do Session-Token
  - Compatível com n8n Cloud e Self-hosted
  - Credenciais seguras (GLPI URL, App Token, Username, Password)

  --

  Nota rápida: para a criação/atualização de usuários em `Administration/User` o node agora espera o payload como JSON bruto no campo `Input (raw)`.
  Use a opção `Send raw body` para enviar exatamente esse JSON (sem o wrapper `{ "input": ... }`). Campos individuais como Name/Email/Password foram removidos do formulário para evitar ambiguidade.

  ## 🚀 Instalação

  1. Clone ou baixe este repositório
  2. Execute `npm install` para instalar as dependências
  3. Use os scripts disponíveis para build/dev:
     - `npm run build` — build de produção
     - `npm run dev` — modo desenvolvimento

  ## 🔧 Configuração no n8n

  1. Importe o node customizado no painel do n8n
  2. Crie uma credencial do tipo **GLPI API** informando:
     - GLPI URL (ex: https://glpi.seudominio.com/api.php)
     - App Token
     - Username
     - Password
  3. Use o node "GLPI API" nos seus fluxos, escolhendo a operação desejada (Get, Add, Update, Comment)

  ## 🧩 Exemplo de Uso

  - Buscar um ticket:
    - Operation: Get
    - Item Type: Ticket
    - Item ID: 123
  - Criar um novo computador:
    - Operation: Add
    - Item Type: Computer
    - Payload: `{ "name": "PC-01", "serial": "123456" }`

  ## 📁 Estrutura do Projeto

  - `credentials/GlpiV2Api.credentials.ts` — definição das credenciais
  - `nodes/GlpiV2/GlpiV2.node.ts` — implementação principal do node
  - `nodes/GlpiV2/resources/` — módulos separados por área do GLPI
  - `n8n-nodes-glpi-instructions.md` — instruções detalhadas e exemplos

  ## 📜 Licença

  MIT — veja o arquivo [LICENSE.md](LICENSE.md)

ai_documentation_summary:
  {"purpose":"A custom n8n node that integrates with the GLPI v2 REST API, enabling automated CRUD operations on IT assets like tickets, computers, and problems.","capabilities":["Automatic session initialization via initSession","Automatic session token management","CRUD operations on Tickets","CRUD operations on Changes","CRUD operations on Problems","CRUD operations on Computers","CRUD operations on Softwares","Commenting on items","Raw JSON body support for user creation/updates","Compatible with n8n Cloud and Self-hosted environments"],"authentication":"Credentials (GLPI URL, App Token, Username, Password)","commonUseCases":["Automated IT asset tracking","Incident management via ticket creation","Computer inventory management","Change request processing","Problem tracking and resolution"],"limitations":["User creation/updates require raw JSON payload in the 'Input (raw)' field","Individual user fields (Name/Email/Password) are removed from the form to prevent ambiguity"],"relatedNodes":["GLPI API","HTTP Request","JSON"]}


node_type: n8n-nodes-hotmart.hotmart
package_name: n8n-nodes-hotmart
display_name: hotmart
category: Community
development_style: declarative
version: 0.9.9
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: thaleslaray
author_github_url: git+https://github.com/thaleslaray/n8n-nodes-hotmart.git
npm_package_name: n8n-nodes-hotmart
npm_version: 0.9.9
community_fetched_at: 2026-03-25T21:19:41.773Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  Nós personalizados para integrar a API Hotmart com o n8n, permitindo automação completa de operações na plataforma líder de produtos digitais da América Latina

npm_readme:
  # 🚀 n8n-nodes-hotmart

  **👨‍💻 Autor:** [Thales Laray](https://www.escoladeautomacao.com.br/inscricao-ea-bio) | [@thaleslaray](https://instagram.com/thaleslaray)  
  **🤝 Colaborador:** [Anderson Ferreira](https://www.instagram.com/afsautomacoes/) | [@afsautomacoes](https://www.instagram.com/afsautomacoes/)

  <div align="center">

  ![n8n](https://img.shields.io/badge/n8n-community-orange?style=for-the-badge)
  ![Hotmart](https://img.shields.io/badge/Hotmart-API-red?style=for-the-badge)
  ![TypeScript](https://img.shields.io/badge/TypeScript-100%25-blue?style=for-the-badge)
  ![Coverage](https://img.shields.io/badge/Coverage-100%25-brightgreen?style=for-the-badge)
  ![Tests](https://img.shields.io/badge/Tests-1300+-success?style=for-the-badge)

  **🏆 Certificação n8n Level: Steve Jobs** 

  *"Quando a perfeição encontra a obsessão, nasce um node que nem o próprio Steve Jobs criticaria"*

  </div>

  ---

  ## 📋 Índice

  - [Sobre](#-sobre)
  - [Por que este é o melhor node Hotmart](#-por-que-este-é-o-melhor-node-hotmart)
  - [Instalação](#-instalação)
  - [Recursos](#-recursos)
  - [Qualidade Obsessiva](#-qualidade-obsessiva)
  - [Para Auditores n8n](#-para-auditores-n8n)
  - [Documentação](#-documentação)
  - [Contribuindo](#-contribuindo)

  ## 🎯 Sobre

  Este não é apenas mais um node n8n. É o resultado de 19 dias de desenvolvimento obsessivo, 100+ horas de código, e um compromisso inabalável com a perfeição. Cada linha de código foi escrita pensando em você, desenvolvedor que precisa de uma integração Hotmart que simplesmente funciona.

  ## 🏆 Por que este é o melhor node Hotmart

  ### 1. **Cobertura Total da API**
  - ✅ **100% da API Hotmart** implementada
  - ✅ **43 operações** disponíveis
  - ✅ **Todos os endpoints** documentados
  - ✅ **Webhooks inteligentes** com 3 modos de operação

  ### 2. **Qualidade Steve Jobs**
  ```typescript
  // Não é apenas código. É arte.
  const perfection = {
    coverage: '100%',
    bugs: 0,
    documentation: 'Impecável',
    userExperience: 'Mágica'
  };
  ```

  ### 3. **Números que Impressionam**
  - 📊 **1300+ testes** automatizados
  - 🎯 **100% de cobertura** de código
  - 🐛 **Zero bugs** em produção
  - ⚡ **Performance otimizada** com paginação inteligente
  - 🤖 **AI-Ready** - Funciona com n8n AI Agents

  ## 🚀 Instalação

  ### Via n8n Community Nodes
  1. Acesse: **Settings → Community Nodes**
  2. Busque: `n8n-nodes-hotmart`
  3. Clique: **Install**

  ✅ **Pronto!** O node será instalado automaticamente e estará disponível em seus workflows.

  ## ⚡ Recursos

  ### 🔥 Operações Principais

  <details>
  <summary><b>💰 Vendas (Sales)</b> - 6 operações</summary>

  - **Histórico de Vendas** - Com filtros avançados por data, status, afiliado
  - **Comissões** - Detalhamento completo de comissões (produtor/afiliado)  
  - **Preços Detalhados** - Breakdown de valores, taxas, impostos
  - **Participantes** - Todos os envolvidos em cada venda
  - **Resumo de Vendas** - Métricas consolidadas com totalizadores
  - **Reembolsos** - Processamento de solicitações de reembolso

  </details>

  <details>
  <summary><b>📋 Assinaturas (Subscriptions)</b> - 10 operações</summary>

  - **Listar Todas** - Com paginação automática e filtros inteligentes
  - **Cancelar** - Individual ou em lote
  - **Reativar** - Com cobrança automática opcional
  - **Alterar Data** - Mudança de ciclo de cobrança
  - **Transações** - Histórico completo de pagamentos
  - **Compras** - Detalhes de cada compra
  - **Resumo** - Analytics de assinaturas

  </details>

  <details>
  <summary><b>🎯 Mais Recursos</b></summary>

  - **🛍️ Produtos** - Catálogo completo com detalhes
  - **🎟️ Cupons** - Criar, validar, excluir
  - **🎓 Área de Membros** - Alunos, módulos, progresso
  - **🎫 Eventos** - Ingressos e participantes
  - **💳 Negociação** - Links de pagamento personalizados
  - **🔧 Custom API Call** - Para endpoints futuros

  </details>

  ### 📡 Webhook Trigger Inteligente

  ```javascript
  // 3 Modos de Operação:

  // 1. Standard - Todos os eventos em uma saída
  webhookMode: 'standard'

  // 2. Smart - Separação automática por tipo
  webhookMode: 'smart' 
  // Saídas: purchase_approved, purchase_complete, subscription_cancellation...

  // 3. Super Smart - Separação ultra-granular
  webhookMode: 'superSmart'
  // Saídas: single_purchase, new_subscription, subscription_renewal
  ```

  ## 🏆 Qualidade Obsessiva

  ### 📊 Métricas de Excelência

  ```yaml
  Testes:
    Total: 1,337
    Unitários: 1,084
    Integração: 178
    E2E: 48
    Performance: 27

  Cobertura:
    Statements: 100%
    Branches: 100%
    Functions: 100%
    Lines: 100%

  Qualidade:
    Complexidade Ciclomática: < 10
    Duplicação de Código: 0%
    Code Smells: 0
    Vulnerabilidades: 0
  ```

  ### 🛡️ Garantias

  - ✅ **Retrocompatibilidade** garantida
  - ✅ **Tipagem 100%** TypeScript
  - ✅ **Documentação inline** completa
  - ✅ **Error handling** robusto
  - ✅ **Rate limiting** inteligente
  - ✅ **Retry automático** com backoff

  ## 👨‍💼 Para Auditores n8n

  <details>
  <summary><b>📋 Checklist de Certificação</b></summary>

  ### ✅ Requisitos Técnicos
  - [x] TypeScript sem `any`
  - [x] Tratamento de erros consistente
  - [x] Paginação implementada corretamente
  - [x] Credenciais OAuth2 seguras
  - [x] Ícones em todos os formatos necessários

  ### ✅ Documentação
  - [x] README completo
  - [x] Todas as operações documentadas
  - [x] Exemplos de uso
  - [x] Troubleshooting guide
  - [x] CHANGELOG mantido

  ### ✅ Testes
  - [x] Cobertura > 80% (temos 100%!)
  - [x] Testes de integração
  - [x] Testes de webhook
  - [x] Testes de performance

  ### ✅ Boas Práticas
  - [x] Versionamento semântico
  - [x] Commits convencionais
  - [x] CI/CD configurado
  - [x] Dependências atualizadas
  - [x] Sem vulnerabilidades conhecidas

  </details>

  ## 📚 Documentação

  ### 🚀 Quick Start
  ```typescript
  // 1. Configure suas credenciais Hotmart OAuth2
  // 2. Arraste o node Hotmart para seu workflow
  // 3. Selecione a operação desejada
  // 4. Seja feliz! 🎉
  ```

  ### 📖 Guias Completos
  - [Instalação Detalhada](docs/INSTALLATION.md)
  - [Configuração de Webhooks](docs/WEBHOOKS.md)
  - [Exemplos de Workflows](docs/EXAMPLES.md)
  - [API Reference](docs/API-REFERENCE.md)
  - [Troubleshooting](docs/TROUBLESHOOTING.md)

  ### 💡 Exemplos de Uso

  <details>
  <summary><b>Exemplo 1: Listar vendas do mês</b></summary>

  ```json
  {
    "resource": "sales",
    "operation": "getHistoricoVendas",
    "dateFilter": "custom",
    "startDate": "2024-01-01",
    "endDate": "2024-01-31",
    "returnAll": true
  }
  ```

  </details>

  <details>
  <summary><b>Exemplo 2: Webhook inteligente</b></summary>

  ```json
  {
    "webhookMode": "smart",
    "events": ["PURCHASE_APPROVED", "SUBSCRIPTION_CANCELLATION"],
    "authentication": "bearerToken"
  }
  ```

  </details>

  ## 🤝 Contribuindo

  Contribuições são bem-vindas, mas lembre-se: mantemos padrões Steve Jobs aqui.

  ### 📏 Nossos Padrões

  1. **Código**: Clean, testado, documentado
  2. **Commits**: Convencionais (feat:, fix:, docs:)
  3. **PRs**: Com descrição detalhada e testes
  4. **Issues**: Use os templates fornecidos

  ### 🚀 Setup de Desenvolvimento

  ```bash
  # Clone
  git clone https://github.com/thaleslaray/n8n-nodes-hotmart.git
  cd n8n-nodes-hotmart

  # Instale
  npm install

  # Desenvolva
  npm run dev

  # Teste
  npm test
  npm run test:watch

  # Build
  npm run build
  ```

  ## 📄 Licença

  MIT © [Thales Laray](https://github.com/thaleslaray)

  ---

  <div align="center">

  ### ⭐ Se este node tornou sua vida melhor, considere dar uma estrela!

  **Feito com ❤️ e ☕ por [Thales Laray](https://github.com/thaleslaray)**

  ### 🤝 Agradecimentos Especiais

  - **[Anderson Ferreira](https://www.instagram.com/afsautomacoes/)** - Testes e melhorias de qualidade, Revisão de código

  *"Stay hungry, stay foolish" - mas sempre com 100% de cobertura de testes*

  </div>

ai_documentation_summary:
  {"purpose":"Integrates the Hotmart API with n8n to automate operations on the Latin American digital products platform, covering sales, subscriptions, products, and more.","capabilities":["Access sales history with advanced filters","Manage commissions and detailed pricing breakdowns","Handle subscription operations (list, cancel, reactivate, change billing date)","View transaction and purchase histories","Manage coupons (create, validate, exclude)","Access member area data (students, modules, progress)","Handle event tickets and participants","Create custom payment links","Execute custom API calls for future endpoints","Webhook triggers with three modes: standard, smart, and superSmart"],"authentication":"OAuth2","commonUseCases":["Automating sales reporting and commission tracking","Managing subscription renewals and cancellations","Processing refund requests","Monitoring product sales and analytics","Automating coupon validation and creation"],"limitations":["Limited to the Hotmart API's scope and rate limits","Custom API calls may require specific endpoint knowledge"],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.oauth2","n8n-nodes-core.httpRequest"]}


node_type: @luka-cat-mimi/n8n-nodes-bcryptjs.bcryptjs
package_name: @luka-cat-mimi/n8n-nodes-bcryptjs
display_name: bcryptjs
category: Community
development_style: declarative
version: 1.0.5
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: GitHub Actions
author_github_url: git+https://github.com/luka-mimi/n8n-nodes-bcryptjs.git
npm_package_name: @luka-cat-mimi/n8n-nodes-bcryptjs
npm_version: 1.0.5
community_fetched_at: 2026-03-25T21:19:41.774Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  n8n community node package that provides bcryptjs password hashing and verification functionality with full async operations support

npm_readme:
  # n8n-nodes-bcryptjs

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

  This is an [n8n](https://n8n.io/) community node that allows you to use bcryptjs for password hashing and verification operations 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) • [Usage Examples](#usage-examples) • [Resources](#resources)

  ## Installation

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

  ### Community Nodes Installation

  1. In n8n, go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `@luka-cat-mimi/n8n-nodes-bcryptjs` in the **npm Package Name** field.
  4. Agree to the risks, then select **Install**.

  After installation, the Bcryptjs node will appear in the **Cryptography** category.

  ### Manual Installation

  To install the node locally, you can use npm package manager:

  ```bash
  # For n8n self-hosted
  npm install @luka-cat-mimi/n8n-nodes-bcryptjs
  ```

  ## Operations

  This node provides all bcryptjs async function capabilities:

  ### Supported Operations

  | Operation | Description |
  |-----------|-------------|
  | **Compare Password** | Asynchronously compare password with hash |
  | **Generate Salt** | Asynchronously generate salt value |
  | **Get Rounds** | Get the number of rounds used in the hash |
  | **Get Salt** | Extract salt portion from hash |
  | **Hash Password** | Asynchronously hash password |
  | **Test Truncation** | Test if password will be truncated (over 72 bytes) |

  ### Parameter Descriptions

  #### Generate Salt
  - **Rounds**: The cost of processing the data, default value is 10
  - **Minor Version**: The minor version of bcrypt, 'a' or 'b', default is 'b'

  #### Hash Password
  - **Password**: The password to hash
  - **Salt or Rounds**: Salt value to use for hashing, or number specifying rounds

  #### Compare Password
  - **Password**: The original password to compare
  - **Hash**: The hash value to compare against the password

  #### Get Rounds
  - **Hash**: The hash value to extract rounds from

  #### Get Salt
  - **Hash**: The hash value to extract salt from

  #### Test Truncation
  - **Password**: The password to check

  ### Options

  - **Output Field Name**: Field name where the result will be saved, default is 'result'

  ## Usage Examples

  ### Example 1: Password Hashing

  Hash passwords when creating users:

  1. Set operation to **Hash Password**
  2. Enter the password to hash
  3. Set rounds (recommended 10-12)
  4. The node will return the hashed password

  **Input**:
  ```json
  {
    "password": "mySecretPassword"
  }
  ```

  **Output**:
  ```json
  {
    "password": "mySecretPassword",
    "result": "$2b$10$N9qo8uLOickgx2ZMRZoMye..."
  }
  ```

  ### Example 2: Password Verification

  Verify passwords during user login:

  1. Set operation to **Compare Password**
  2. Enter the original password and stored hash value
  3. The node will return true or false

  **Input**:
  ```json
  {
    "password": "mySecretPassword",
    "hash": "$2b$10$N9qo8uLOickgx2ZMRZoMye..."
  }
  ```

  **Output**:
  ```json
  {
    "password": "mySecretPassword",
    "hash": "$2b$10$N9qo8uLOickgx2ZMRZoMye...",
    "result": true
  }
  ```

  ### Example 3: Custom Output Field

  Set a custom output field name in options:

  1. Expand the **Options** section
  2. Set **Output Field Name** to `hashedPassword`
  3. The result will be saved to the specified field

  **Output**:
  ```json
  {
    "password": "mySecretPassword",
    "hashedPassword": "$2b$10$N9qo8uLOickgx2ZMRZoMye..."
  }
  ```

  ## Security Considerations

  - bcrypt only uses the first 72 bytes of a password, any extra bytes are ignored
  - Recommend using async version to avoid blocking the event loop
  - Higher rounds mean better security but longer processing time
  - Default rounds of 10 is secure for most cases
  - Production environments should consider using 12 rounds or higher

  ## Development

  To develop or contribute to this project:

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

  # Install dependencies
  npm install

  # Build the project
  npm run build

  # Run code quality checks
  npm run lint

  # Fix code formatting
  npm run lintfix
  ```

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [bcryptjs documentation](https://github.com/dcodeIO/bcrypt.js) - The underlying crypto library
  - [bcrypt algorithm explanation](https://en.wikipedia.org/wiki/Bcrypt) - Learn about the bcrypt algorithm

  ## License

  [MIT](LICENSE.md) © luka-cat-mimi

  ---

  **If this project helps you, please give it a ⭐️!**

  **Issue Reports**: [GitHub Issues](https://github.com/luka-mimi/n8n-nodes-bcryptjs/issues)

  **中文文档**: [README_CN.md](README_CN.md)

ai_documentation_summary:
  {"purpose":"A community n8n node that provides bcryptjs functionality for password hashing, verification, and salt generation within workflow automation.","capabilities":["Hash passwords asynchronously","Verify passwords against stored hashes","Generate random salt values","Extract salt from existing hashes","Retrieve hash round count","Test password truncation limits"],"authentication":"None","commonUseCases":["User registration password hashing","User login authentication verification","Secure password storage in workflows","Password strength validation"],"limitations":["Only processes first 72 bytes of passwords, ignoring longer portions","Higher security rounds increase processing time","Community node (not official n8n package)","No built-in rate limiting or additional security features"],"relatedNodes":["Cryptography nodes","HTTP Request nodes (for external auth services)","Code nodes (for custom hashing logic)"]}


node_type: n8n-nodes-supermachine.supermachine
package_name: n8n-nodes-supermachine
display_name: supermachine
category: Community
development_style: declarative
version: 1.3.0
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: hungtidus
author_github_url: git+https://github.com/hungtidus/n8n-nodes-supermachine.git
npm_package_name: n8n-nodes-supermachine
npm_version: 1.3.0
community_fetched_at: 2026-03-25T21:19:41.775Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  n8n community node for Supermachine AI Image API — Generate images, manage models, LoRAs, and characters

npm_readme:
  # n8n-nodes-supermachine

  [![npm version](https://badge.fury.io/js/n8n-nodes-supermachine.svg)](https://www.npmjs.com/package/n8n-nodes-supermachine)

  This is an n8n community node for the [Supermachine AI Image API](https://supermachine.art). It lets you generate AI images, manage models, LoRAs, and characters in your n8n workflows.

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

  ### Via n8n UI

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-supermachine` in **Enter npm package name**
  4. Click **Install**
  5. Restart n8n

  ### Via CLI

  ```bash
  npm install n8n-nodes-supermachine

ai_documentation_summary:
  {"purpose":"A community n8n node that integrates with the Supermachine AI Image API to generate AI images, manage models, LoRAs, and characters within workflows.","capabilities":["Generate AI images via the Supermachine API","Manage AI models","Manage LoRAs (Low-Rank Adaptation models)","Manage characters"],"authentication":"API key required (implied by API integration, specific method not detailed in README)","commonUseCases":["Automated image generation for content creation","Workflow-based asset management for AI models and characters","Integration with other n8n nodes for multi-step image processing pipelines"],"limitations":["Community node (not official n8n node)","Authentication method not explicitly documented in README"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-webhook"]}


node_type: n8n-nodes-attio.attio
package_name: n8n-nodes-attio
display_name: attio
description: n8n node for Attio API integration
category: Community
development_style: declarative
version: 0.6.0
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: itsjustanks
author_github_url: git+https://github.com/itsjustanks/n8n-nodes-attio.git
npm_package_name: n8n-nodes-attio
npm_version: 0.6.0
community_fetched_at: 2026-03-25T21:19:41.776Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-attio

  This is an n8n community node that allows you to integrate [Attio](https://attio.com) CRM with your n8n workflows.

  [Attio](https://attio.com) is a modern CRM built for the future of work, offering powerful data models, flexible workflows, and real-time collaboration features.

  ## Installation

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

  ## Operations

  This node supports all Attio API operations as defined in their [OpenAPI specification](https://api.attio.com/openapi.json), including:

  - **Objects**: List, Create, Get, Update objects
  - **Records**: List, Create, Get, Update, Delete records  
  - **Attributes**: List, Create, Get, Update attributes
  - **Lists**: List, Create, Get, Update lists
  - **Entries**: List, Create, Get, Update, Delete list entries
  - **Notes**: Create, Get, Update notes
  - **Tasks**: List, Create, Get, Update tasks
  - **Comments**: List, Create comments on threads
  - **Workspace Members**: List workspace members
  - **Webhooks**: Create and manage webhooks
  - And more...

  ## Credentials

  To use this node, you'll need an Attio API access token:

  1. Log in to your [Attio account](https://app.attio.com)
  2. Go to Workspace Settings → Developer → API
  3. Create a new API token
  4. Copy the token and add it to the Attio credentials in n8n

  ## AI Agent Tool Compatibility

  This node can be used as a tool in n8n's AI Agent workflows. To enable this functionality:

  1. Set the environment variable when running n8n:
     ```bash
     N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
     ```

  2. In your AI Agent workflow:
     - Add an AI Agent node (e.g., OpenAI Functions Agent)
     - Add the Attio node
     - Connect the Attio node to the AI Agent as a tool

  The AI agent will be able to use Attio operations to search, create, and update CRM data based on natural language instructions.

  ## MCP (Model Context Protocol) Integration

  This node is compatible with n8n's MCP Server, allowing AI agents and MCP clients to interact with Attio CRM:

  - **AI Agent Tool**: Use Attio operations directly in AI agent workflows
  - **MCP Server**: Expose Attio workflows to external MCP clients like Claude Desktop
  - **Intelligent CRM**: Build AI-powered workflows that can query and update customer data

  See the [MCP Integration Guide](MCP_INTEGRATION_GUIDE.md) for detailed setup instructions and examples.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Attio API documentation](https://docs.attio.com/rest-api)
  - [Attio OpenAPI specification](https://api.attio.com/openapi.json)
  - [MCP Integration Guide](MCP_INTEGRATION_GUIDE.md)

  ## Credits

  - **Created by**: [@itsjustanks](https://x.com/itsjustanks) | [ankit.com.au](https://ankit.com.au)
  - **OpenAPI Integration**: Built using [@devlikeapro/n8n-openapi-node](https://www.npmjs.com/package/@devlikeapro/n8n-openapi-node) - Special thanks to the n8n-openapi-node project for making it easy to convert OpenAPI specs to n8n nodes

  ## License

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

ai_documentation_summary:
  {"purpose":"Integrates Attio CRM with n8n workflows to perform CRUD operations on CRM objects, records, lists, and other data entities.","capabilities":["List, Create, Get, Update objects","List, Create, Get, Update, Delete records","Manage attributes (List, Create, Get, Update)","Manage lists (List, Create, Get, Update)","Manage list entries (List, Create, Get, Update, Delete)","Create, Get, Update notes","Manage tasks (List, Create, Get, Update)","Create and manage comments on threads","List workspace members","Create and manage webhooks"],"authentication":"API token required (Attio API access token obtained from Workspace Settings → Developer → API)","commonUseCases":["Automating CRM data entry from other sources","Syncing customer data between systems","Building AI-powered CRM assistants","Managing tasks and notes within Attio","Integrating with n8n's AI Agent workflows"],"limitations":["Community node (not official n8n node)","Requires Attio API access token with appropriate permissions","MCP and AI Agent tool usage requires specific environment variable configuration"],"relatedNodes":["n8n-openapi-node","AI Agent node","MCP Server"]}


node_type: n8n-nodes-cnpj.cnpj
package_name: n8n-nodes-cnpj
display_name: cnpj
description: Search for details of a Brazilian company using a CNPJ. By https://integre.me/.
category: Community
development_style: declarative
version: 1.0.0
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: integreme
author_github_url: git+https://github.com/Integreme/integreme-cnpj.git
npm_package_name: n8n-nodes-cnpj
npm_version: 1.0.0
community_fetched_at: 2026-03-25T21:19:41.778Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  Search for details of a Brazilian company using a CNPJ.

  Developed by [integre.me](https://integre.me/) 💚

ai_documentation_summary:
  {"purpose":"Retrieves detailed information about a Brazilian company by searching using its CNPJ (Cadastro Nacional da Pessoa Jurídica) number.","capabilities":["Search company details by CNPJ","Retrieve company registration information","Access company status and legal data"],"authentication":"None","commonUseCases":["Business verification in Brazil","Due diligence checks","Company research and validation"],"limitations":["Limited to Brazilian companies only","Depends on data availability from the source provider"],"relatedNodes":["http request","data filter","business data nodes"]}


node_type: n8n-nodes-bedrock-advanced.bedrockadvanced
package_name: n8n-nodes-bedrock-advanced
display_name: bedrockadvanced
description: n8n community node for AWS Bedrock Chat Model with prompt caching support
category: Community
development_style: declarative
version: 0.4.9
properties_schema: []
operations: []
credentials_required: []
updated_at: 2026-03-25 21:19:41
author_name: unbalanced
npm_package_name: n8n-nodes-bedrock-advanced
npm_version: 0.4.9
community_fetched_at: 2026-03-25T21:19:41.779Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-bedrock-advanced

  Advanced n8n community nodes for AWS Bedrock, providing features not available in the official n8n Bedrock node. This package includes two nodes:

  | Node | API | Best For |
  |------|-----|----------|
  | **AWS Bedrock Chat Model (Advanced)** | Converse API | Multi-model support (Claude, Nova, Titan) with prompt caching |
  | **Bedrock Claude** | InvokeModel API | Full access to Claude-specific features |

  ## Installation

  ### In n8n (community node)

  1. Go to **Settings > Community Nodes**
  2. Enter `n8n-nodes-bedrock-advanced`
  3. Click **Install**

  ### Manual installation

  ```bash
  cd ~/.n8n
  npm install n8n-nodes-bedrock-advanced
  ```

  Then restart n8n.

  ---

  ## Node 1: AWS Bedrock Chat Model (Advanced)

  A drop-in replacement for the official [n8n AWS Bedrock Chat Model node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatawsbedrock/), adding **granular prompt caching** and **accurate token usage metrics** via the Bedrock Converse API.

  ### Features

  - **Granular prompt caching** — independently cache the system prompt, tool definitions, and conversation history
  - **Configurable cache TTL** — 5 minutes or 1 hour (where supported)
  - **Accurate token usage metrics** including cache read/write breakdowns
  - **Multi-model support** — works with Claude, Amazon Nova, Titan, and any Converse API-compatible model
  - On-demand models and inference profiles
  - Debug logging toggle

  ### Prompt Caching

  When enabled, you can independently target three parts of the request for caching:

  | Cache Target | Default | Description |
  |---|---|---|
  | **Cache System Prompt** | On | Injects a `cachePoint` after the system message |
  | **Cache Tool Definitions** | Off | Injects a `cachePoint` after the last tool definition. TTL is preserved accurately. |
  | **Cache Conversation History** | Off | Injects a `cachePoint` at the end of the most recent prior turn, reducing cost in multi-turn conversations as history grows |

  **Supported TTL options:**

  | TTL | Supported Models |
  |-----|-----------------|
  | 5 minutes | All cacheable models (Claude 3.5 Sonnet v2, Claude 3.7 Sonnet, Claude Sonnet 4, Amazon Nova, etc.) |
  | 1 hour | Claude Opus 4.5/4.6, Claude Sonnet 4.5/4.6, Claude Haiku 4.5 |

  > **Note:** Due to a LangChain limitation ([#9014](https://github.com/langchain-ai/langchainjs/issues/9014)), the TTL field is stripped from system and conversation history cache points at the LangChain conversion layer. These always use the 5-minute default regardless of the TTL setting. Tool cache points preserve the TTL correctly.

  **Requirements:**
  - Cached content must remain identical across requests for cache hits
  - Minimum token thresholds apply per model (1,024 for Sonnet/Nova, 4,096 for Opus/Haiku)

  ### Token Usage Metrics

  Every execution reports accurate token counts in n8n's AI panel:

  ```json
  {
    "tokenUsage": {
      "inputTokens": 150,
      "outputTokens": 500,
      "totalTokens": 650,
      "cacheReadInputTokens": 120,
      "cacheWriteInputTokens": 0
    }
  }
  ```

  ### Configuration

  1. Add the **AWS Bedrock Chat Model (Advanced)** node to your workflow
  2. Select your AWS credentials
  3. Choose your model (on-demand or inference profile)
  4. Under **Options**:
     - Toggle **Prompt Caching** and select TTL
     - Enable **Cache System Prompt**, **Cache Tool Definitions**, and/or **Cache Conversation History**
     - Adjust temperature and max tokens
     - Toggle **Debug Logs** to see detailed request/response logs

  ---

  ## Node 2: Bedrock Claude

  A Claude-specific node that uses the Bedrock **InvokeModel API** with the native Anthropic Messages API format. This bypasses the Converse API abstraction layer, giving full access to Claude-specific features.

  ### Features

  - **Granular prompt caching** — independently cache the system prompt, tool definitions, and conversation history, with full TTL control
  - **Built-in Claude tools** — web search, computer use, bash, text editor
  - **Tool search** — Claude dynamically discovers and loads tools on-demand from large tool sets
  - **Programmatic tool calling** — Claude calls tools from within code execution, reducing latency in multi-tool workflows
  - **Extended 1M context window** — for Claude Opus 4.6 and Sonnet 4.6
  - **Context compaction** — automatically summarizes older context when approaching the context window limit
  - **Streaming** support
  - **Tool calling** with full multi-turn conversation support
  - Debug logging toggle

  ### Why use this instead of the Advanced node?

  | Feature | Converse API (Advanced node) | InvokeModel (Bedrock Claude) |
  |---------|:---:|:---:|
  | Multi-model support | Yes | Claude only |
  | Standard tool calling | Yes | Yes |
  | Prompt caching — system prompt | Yes | Yes |
  | Prompt caching — tool definitions | Yes | Yes (full TTL control) |
  | Prompt caching — conversation history | Yes | Yes |
  | Web search tool | No | Yes |
  | Computer use tool | No | Yes |
  | Bash tool | No | Yes |
  | Text editor tool | No | Yes |
  | Tool search | No | Yes |
  | Programmatic tool calling | No | Yes |
  | 1M context window | No | Yes |
  | Context compaction | No | Yes |

  ### Prompt Caching

  When enabled, you can independently target three parts of the request:

  | Cache Target | Default | Description |
  |---|---|---|
  | **Cache System Prompt** | On | Adds `cache_control` to the last system message block |
  | **Cache Tool Definitions** | Off | Adds `cache_control` to the last non-deferred tool. Safe to use alongside Tool Search — deferred tools are excluded from the cache prefix automatically. |
  | **Cache Conversation History** | Off | Adds `cache_control` at the end of the most recent prior turn |

  **Cache TTL** (5m or 1h) is fully preserved for all three targets.

  ### Built-in Claude Tools

  Enable these directly in the node options — no external tool setup required:

  - **Web Search** — Claude can search the web during conversations
  - **Computer Use** — Claude can control mouse, keyboard, and take screenshots (configurable display dimensions)
  - **Bash** — Claude can execute shell commands
  - **Text Editor** — Claude can view and edit files

  ### Tool Search

  When enabled, agent tools are marked as `defer_loading: true`. Claude uses a search tool (regex or BM25) to discover and load only the tools relevant to each step — reducing prompt size and cost when working with large tool sets.

  Tool caching and tool search are fully compatible: `cache_control` is placed on the last non-deferred tool (built-in tools), and deferred agent tools follow after. This means the cache prefix is stable across calls even as Claude selectively loads different agent tools.

  ### Programmatic Tool Calling

  Allows Claude to call tools from within code execution (via the `code_execution` tool), chaining multiple tool uses in a single server-side step. Reduces round-trips and token usage in multi-tool workflows.

  ### Context Compaction

  Automatically summarizes older parts of the conversation when the input approaches the configured token threshold, allowing effective conversations beyond 200K tokens without hitting context limits.

  ### 1M Context Window

  Enables the extended 1M token context window (default is 200K). Supported on Claude Opus 4.6 and Sonnet 4.6.

  ### Configuration

  1. Add the **Bedrock Claude** node to your workflow
  2. Select your AWS credentials
  3. Choose your Claude model (the dropdown filters to Claude inference profiles only)
  4. Under **Options**:
     - Set **Max Tokens** and **Temperature**
     - Toggle **Prompt Caching** and select TTL
     - Enable **Cache System Prompt**, **Cache Tool Definitions**, and/or **Cache Conversation History**
     - Enable any **built-in tools** (web search, computer use, bash, text editor)
     - Toggle **Tool Search** and choose variant (regex or BM25)
     - Toggle **Programmatic Tool Calling**
     - Toggle **Enable 1M Context**
     - Toggle **Enable Compaction** and set trigger token threshold
     - Toggle **Debug Logs**

  ---

  ## AWS IAM Permissions

  Both nodes require the following IAM permissions:

  ```json
  {
    "Effect": "Allow",
    "Action": [
      "bedrock:InvokeModel",
      "bedrock:InvokeModelWithResponseStream",
      "bedrock:ListFoundationModels",
      "bedrock:ListInferenceProfiles",
      "bedrock:GetInferenceProfile"
    ],
    "Resource": "*"
  }
  ```

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build
  npm run build

  # Watch mode
  npm run dev
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Provides advanced AWS Bedrock integration with prompt caching support and multi-model capabilities for AI workflows.","capabilities":["Multi-model support (Claude, Nova, Titan)","Prompt caching with configurable TTL (5 minutes or 1 hour)","Detailed token usage metrics including cache read/write breakdowns","Built-in Claude tools (web search, computer use, bash, text editor)","Streaming support","Full multi-turn conversation support","Debug logging","On-demand models and inference profiles"],"authentication":"AWS IAM credentials via AWS credentials node","commonUseCases":["Cost optimization through prompt caching","Multi-model experimentation","Claude-specific tool integration","Detailed token tracking for billing analysis"],"limitations":["Programmatic tool calling is pending Bedrock support","Prompt caching TTL limits apply to some models","Minimum token thresholds required for caching","Bedrock Claude node only supports Claude models"],"relatedNodes":["AWS Bedrock Chat Model (official)","AWS Credentials","HTTP Request"]}


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

updated_at: 2026-04-16 09:43:35
author_name: himanshudevgan
author_github_url: https://github.com/deepgaganventurepact/outgrow-n8n.git
npm_package_name: n8n-nodes-outgrow
npm_version: 0.1.10
community_fetched_at: 2026-04-16T09:43:35.789Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Outgrow Trigger Node for n8n

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

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


  ## Features

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

  ## Prerequisites

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

  ## Installation

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

  ## Node Configuration

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




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

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


node_type: @stackflo-labs/n8n-nodes-retainr.retainr
package_name: @stackflo-labs/n8n-nodes-retainr
display_name: Retainr
description: Store, search, and retrieve AI agent memories.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: sebastianstupak
author_github_url: https://github.com/stackflo-labs/n8n-nodes-retainr.git
npm_package_name: @stackflo-labs/n8n-nodes-retainr
npm_version: 0.4.1
community_fetched_at: 2026-04-16T09:43:35.794Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "memory",
      "options": [
        {
          "name": "Memory",
          "value": "memory"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "store",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete memories",
          "description": "Delete memories matching a filter."
        },
        {
          "name": "Get Context",
          "value": "getContext",
          "action": "Get memory context",
          "description": "Get pre-formatted memory context for LLM prompts."
        },
        {
          "name": "List",
          "value": "list",
          "action": "List memories",
          "description": "List memories with optional filters."
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search memories",
          "description": "Semantic search across memories."
        },
        {
          "name": "Store",
          "value": "store",
          "action": "Store a memory",
          "description": "Store a new memory."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "memory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInfo",
      "options": [
        {
          "name": "Get Info",
          "value": "getInfo",
          "action": "Get workspace info",
          "description": "Get workspace details, usage, and API keys."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete memories",
      "description": "Delete memories matching a filter.",
      "resource": "memory"
    },
    {
      "name": "Get Context",
      "value": "getContext",
      "action": "Get memory context",
      "description": "Get pre-formatted memory context for LLM prompts.",
      "resource": "memory"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List memories",
      "description": "List memories with optional filters.",
      "resource": "memory"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search memories",
      "description": "Semantic search across memories.",
      "resource": "memory"
    },
    {
      "name": "Store",
      "value": "store",
      "action": "Store a memory",
      "description": "Store a new memory.",
      "resource": "memory"
    },
    {
      "name": "Get Info",
      "value": "getInfo",
      "action": "Get workspace info",
      "description": "Get workspace details, usage, and API keys.",
      "resource": "workspace"
    }
  ]

npm_readme:
  # @stackflo-labs/n8n-nodes-retainr

  [n8n](https://n8n.io/) community node for [retainr.dev](https://retainr.dev) — the AI agent memory persistence API.

  Give your n8n AI agents **long-term memory** that persists across workflow runs. Store facts, preferences, and context, then retrieve them with semantic search — so your agents remember what matters.

  ## Features

  | Operation | Description |
  |-----------|-------------|
  | **Store** | Save a memory with namespace, tags, metadata, TTL, and deduplication |
  | **Search** | Semantic similarity search across stored memories |
  | **Get Context** | Retrieve pre-formatted memory context ready for LLM system prompts |
  | **List** | Browse memories with filters (namespace, tags) |
  | **Delete** | Remove memories by namespace |
  | **Get Workspace Info** | View plan usage, API keys, and workspace details |

  ## Installation

  ### n8n Cloud & Desktop

  1. Go to **Settings > Community Nodes**
  2. Click **Install**
  3. Enter the exact package name: `@stackflo-labs/n8n-nodes-retainr`
  4. Click **Install** and restart if prompted

  ### Self-hosted n8n (UI)

  1. Go to **Settings > Community Nodes > Install**
  2. Enter `@stackflo-labs/n8n-nodes-retainr`
  3. Click **Install**

  Requires `N8N_COMMUNITY_PACKAGES_ENABLED=true` in your environment (set by default in Docker).

  ### Self-hosted n8n (manual / Docker volume)

  ```bash
  # If you mount a custom node directory or manage packages directly:
  cd /home/node/.n8n
  npm install @stackflo-labs/n8n-nodes-retainr
  ```

  Then restart n8n.

  ## Setup

  1. Sign up at [retainr.dev](https://retainr.dev) and get your API key
  2. In n8n, go to **Credentials > New > Retainr API**
  3. Paste your API key (`rec_live_...`) — each key is scoped to one workspace
  4. The default Base URL (`https://api.retainr.dev`) works out of the box

  ## How it works

  **Workspace → Namespace** hierarchy:

  - **Workspace**: Your organization, determined by the API key
  - **Namespace**: Groups memories by customer, tenant, or any identifier (e.g., `customer:alice`, `project:onboarding`)

  Every memory operation accepts a **Namespace** field. Use it to keep each customer's memories separate within your workspace.

  ## Usage Examples

  ### Store a memory after a conversation

  1. Add the **Retainr** node after your AI Agent
  2. Set **Resource** to `Memory`, **Operation** to `Store`
  3. Map the conversation summary to the **Content** field
  4. Set **Namespace** to the customer identifier (e.g., `customer:alice`)

  ### Inject memory context into an LLM prompt

  1. Add a **Retainr** node before your AI Agent
  2. Set **Operation** to `Get Context`
  3. Use the incoming message as the **Query**
  4. Set the same **Namespace** to retrieve that customer's memories
  5. Pass the `context` output into your LLM's system prompt

  ### Deduplicate similar memories

  Use the **Dedup Threshold** field (e.g., `0.95`) when storing. If a sufficiently similar memory already exists, it will be updated instead of duplicated.

  ## AI Agent Tool

  This node has `usableAsTool` enabled — you can use it directly as a tool inside n8n's **AI Agent** node, letting the agent decide when to store or recall memories autonomously.

  ## API Documentation

  Full API reference: [retainr.dev/docs](https://retainr.dev/docs)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables AI agents to persist long-term memories by storing, searching, and retrieving facts, preferences, and context using the retainr.dev API.","capabilities":["Store memories with namespace, tags, metadata, TTL, and deduplication","Perform semantic similarity search across stored memories","Retrieve pre-formatted memory context for LLM system prompts","List memories with filters (namespace, tags)","Delete memories by namespace","View workspace plan usage, API keys, and details","Operate as a tool within n8n's AI Agent node"],"authentication":"API key required (obtained from retainr.dev, scoped to workspace)","commonUseCases":["Injecting customer-specific memory context into AI agent responses","Persisting conversation summaries and user preferences across workflow runs","Deduplicating similar memories to maintain clean knowledge bases","Organizing memories by customer or project namespace"],"limitations":["Requires a valid API key and workspace from retainr.dev","Requires n8n community packages to be enabled for installation","Deduplication relies on configurable similarity thresholds"],"relatedNodes":["AI Agent","HTTP Request","Code"]}


node_type: n8n-nodes-wati.wati
package_name: n8n-nodes-wati
display_name: Wati
description: Send WhatsApp messages, manage contacts, deliver templates, and download media via Wati API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: nick-wati
author_github_url: https://github.com/nick-wati/
npm_package_name: n8n-nodes-wati
npm_version: 0.3.2
community_fetched_at: 2026-04-16T09:43:35.797Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Template Message",
          "value": "templateMessage"
        },
        {
          "name": "Contact",
          "value": "contact"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendTextMessage",
      "options": [
        {
          "name": "Send Text Message",
          "value": "sendTextMessage",
          "action": "Send a text message",
          "description": "Send a text message to an active WhatsApp conversation (within 24h window)"
        },
        {
          "name": "Send Button Message",
          "value": "sendInteractiveButtons",
          "action": "Send a button message",
          "description": "Send a message with interactive buttons"
        },
        {
          "name": "Send List Message",
          "value": "sendInteractiveList",
          "action": "Send a list message",
          "description": "Send a message with a selectable list"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "Get messages",
          "description": "Get messages for a conversation by conversation ID"
        },
        {
          "name": "Get Media",
          "value": "getMedia",
          "action": "Get a media file",
          "description": "Download a media file (image, video, document, etc.) by message ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendTemplateMessage",
      "options": [
        {
          "name": "Send Template Message",
          "value": "sendTemplateMessage",
          "action": "Send a template message",
          "description": "Send a template message (outside 24h window)"
        },
        {
          "name": "Get Templates",
          "value": "getTemplates",
          "action": "Get templates",
          "description": "Get list of message templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "templateMessage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts",
          "description": "Get list of contacts"
        },
        {
          "name": "Get Contact Detail",
          "value": "getContactDetail",
          "action": "Get contact detail",
          "description": "Get details of a specific contact by phone number"
        },
        {
          "name": "Add Contact",
          "value": "addContact",
          "action": "Add a contact",
          "description": "Add a new contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Text Message",
      "value": "sendTextMessage",
      "action": "Send a text message",
      "description": "Send a text message to an active WhatsApp conversation (within 24h window)",
      "resource": "message"
    },
    {
      "name": "Send Button Message",
      "value": "sendInteractiveButtons",
      "action": "Send a button message",
      "description": "Send a message with interactive buttons",
      "resource": "message"
    },
    {
      "name": "Send List Message",
      "value": "sendInteractiveList",
      "action": "Send a list message",
      "description": "Send a message with a selectable list",
      "resource": "message"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "Get messages",
      "description": "Get messages for a conversation by conversation ID",
      "resource": "message"
    },
    {
      "name": "Get Media",
      "value": "getMedia",
      "action": "Get a media file",
      "description": "Download a media file (image, video, document, etc.) by message ID",
      "resource": "message"
    },
    {
      "name": "Send Template Message",
      "value": "sendTemplateMessage",
      "action": "Send a template message",
      "description": "Send a template message (outside 24h window)",
      "resource": "templateMessage"
    },
    {
      "name": "Get Templates",
      "value": "getTemplates",
      "action": "Get templates",
      "description": "Get list of message templates",
      "resource": "templateMessage"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts",
      "description": "Get list of contacts",
      "resource": "contact"
    },
    {
      "name": "Get Contact Detail",
      "value": "getContactDetail",
      "action": "Get contact detail",
      "description": "Get details of a specific contact by phone number",
      "resource": "contact"
    },
    {
      "name": "Add Contact",
      "value": "addContact",
      "action": "Add a contact",
      "description": "Add a new contact",
      "resource": "contact"
    }
  ]

npm_readme:
  # n8n-nodes-wati

  This is an [n8n](https://n8n.io/) community node for [Wati](https://www.wati.io/) (WhatsApp Team Inbox). It lets you automate WhatsApp messaging workflows using the Wati API.

  [Wati](https://www.wati.io/) is a WhatsApp Business API solution that enables businesses to communicate with customers at scale through WhatsApp.

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

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

  ## Credentials

  You need a Wati account to use this node. To set up credentials:

  1. Log in to your [Wati Dashboard](https://app.wati.io/).
  2. Go to **API Docs** to find your **API Endpoint URL** and **Access Token**.
  3. In n8n, create a new **Wati API** credential and enter these values.

  ## Supported Operations

  ### Wati Node

  #### Message
  - **Send Text Message** — Send a text message to an active WhatsApp conversation (within 24h window)
  - **Send Button Message** — Send a message with interactive buttons
  - **Send List Message** — Send a message with a selectable list
  - **Get Messages** — Retrieve messages for a conversation by conversation ID
  - **Get Media** — Download a media file (image, video, document, audio, etc.) by message ID

  #### Template Message
  - **Send Template Message** — Send a template message (works outside the 24h window)
  - **Get Templates** — Get a list of available message templates

  #### Contact
  - **Get Contacts** — Get a list of contacts
  - **Get Contact Detail** — Get details of a specific contact by phone number
  - **Add Contact** — Add a new contact

  ### Wati Trigger

  - **Webhook Trigger** — Receive incoming messages and status updates via webhook

  ## Resources

  - [Sign up for Wati](https://auth.wati.io/register/?utm_source=n8n&utm_medium=referral&utm_campaign=n8n)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Automates WhatsApp messaging workflows by sending messages, managing contacts, delivering templates, and downloading media via the Wati API.","capabilities":["Send text messages to active conversations","Send button messages with interactive options","Send list messages with selectable items","Retrieve messages for a conversation by ID","Download media files (images, videos, documents, audio)","Send template messages outside the 24h window","Retrieve available message templates","Retrieve contact list","Get specific contact details by phone number","Add new contacts"],"authentication":"API key required (Access Token and API Endpoint URL from Wati Dashboard)","commonUseCases":["Automated customer support responses via WhatsApp","Sending promotional messages with interactive buttons or lists","Managing customer contact information in n8n workflows","Receiving and processing incoming WhatsApp messages"],"limitations":["Text messages can only be sent to active conversations within a 24-hour window","Template messages are required for sending outside the 24-hour window","Community node (not official n8n node)"],"relatedNodes":["Webhook Trigger","HTTP Request","Function","Wait"]}


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

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

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

npm_readme:
  # n8n-nodes-anytype

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

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

  It supports the official Anytype API resources:

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

  ## Installation

  Follow the n8n community nodes installation guide.

  ## Credentials

  Create **Anytype API** credentials in n8n:

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

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

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

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

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

  ## Notes on pagination

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

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

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

  ## Operations

  ### Search

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

  ### Spaces

  * Get Many
  * Create
  * Get
  * Update

  ### Lists

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

  ### Members

  * Get Many
  * Get

  ### Objects

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Properties

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Tags

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Types

  * Get Many
  * Create
  * Get
  * Update
  * Delete

  ### Templates

  * Get Many
  * Get

  ## Resources

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

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


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

updated_at: 2026-04-16 09:43:35
author_name: quintenkamphuis
author_github_url: https://github.com/quinten-kamphuis/
npm_package_name: n8n-nodes-reachkit
npm_version: 0.1.2
community_fetched_at: 2026-04-16T09:43:35.804Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Blocklist",
          "value": "blocklist"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Conversation",
          "value": "conversation"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Sequence",
          "value": "sequence"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add to blocklist",
          "routing": {
            "request": {
              "url": "/blocklist",
              "method": "POST"
            }
          },
          "description": "Add an email to the blocklist"
        },
        {
          "name": "Check",
          "value": "check",
          "action": "Check if email is blocked",
          "routing": {
            "request": {
              "url": "/blocklist/check",
              "method": "GET"
            }
          },
          "description": "Check if an email is in the blocklist"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Remove from blocklist",
          "routing": {
            "request": {
              "url": "=/blocklist/{{$parameter.entryId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove an email from the blocklist"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get blocklist entries",
          "routing": {
            "request": {
              "url": "/blocklist",
              "method": "GET"
            }
          },
          "description": "Get many blocklist entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blocklist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a campaign",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific campaign"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get campaigns",
          "routing": {
            "request": {
              "url": "/campaigns",
              "method": "GET"
            }
          },
          "description": "Get many campaigns"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get campaign analytics",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/analytics",
              "method": "GET"
            }
          },
          "description": "Get analytics data for a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a campaign",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a campaign status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversation",
          "routing": {
            "request": {
              "url": "=/unibox/conversations/{{$parameter.conversationId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific conversation"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get conversations",
          "routing": {
            "request": {
              "url": "/unibox/conversations",
              "method": "GET"
            }
          },
          "description": "Get many conversations"
        },
        {
          "name": "Reply",
          "value": "reply",
          "action": "Reply to a conversation",
          "routing": {
            "request": {
              "url": "=/unibox/conversations/{{$parameter.conversationId}}/reply",
              "method": "POST"
            }
          },
          "description": "Send a reply in a conversation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an inbox",
          "routing": {
            "request": {
              "url": "=/inboxes/{{$parameter.inboxId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific inbox"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get inboxes",
          "routing": {
            "request": {
              "url": "/inboxes",
              "method": "GET"
            }
          },
          "description": "Get many inboxes"
        },
        {
          "name": "Get Warmup Stats",
          "value": "getWarmupStats",
          "action": "Get warmup statistics",
          "routing": {
            "request": {
              "url": "=/inboxes/{{$parameter.inboxId}}/warmup/stats",
              "method": "GET"
            }
          },
          "description": "Get warmup statistics for an inbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads",
              "method": "POST"
            }
          },
          "description": "Create a new lead in a campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a lead from a campaign"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get leads",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/leads",
              "method": "GET"
            }
          },
          "description": "Get many leads from a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get sequences",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/sequences",
              "method": "GET"
            }
          },
          "description": "Get many sequences for a campaign"
        },
        {
          "name": "Update Variant",
          "value": "updateVariant",
          "action": "Update a sequence variant",
          "routing": {
            "request": {
              "url": "=/campaigns/{{$parameter.campaignId}}/variants/{{$parameter.variantId}}",
              "method": "PATCH"
            }
          },
          "description": "Update the enabled status of a sequence variant"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sequence"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add",
      "value": "add",
      "action": "Add to blocklist",
      "routing": {
        "request": {
          "url": "/blocklist",
          "method": "POST"
        }
      },
      "description": "Add an email to the blocklist",
      "resource": "blocklist"
    },
    {
      "name": "Check",
      "value": "check",
      "action": "Check if email is blocked",
      "routing": {
        "request": {
          "url": "/blocklist/check",
          "method": "GET"
        }
      },
      "description": "Check if an email is in the blocklist",
      "resource": "blocklist"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Remove from blocklist",
      "routing": {
        "request": {
          "url": "=/blocklist/{{$parameter.entryId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove an email from the blocklist",
      "resource": "blocklist"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get blocklist entries",
      "routing": {
        "request": {
          "url": "/blocklist",
          "method": "GET"
        }
      },
      "description": "Get many blocklist entries",
      "resource": "blocklist"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a campaign",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get campaigns",
      "routing": {
        "request": {
          "url": "/campaigns",
          "method": "GET"
        }
      },
      "description": "Get many campaigns",
      "resource": "campaign"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get campaign analytics",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/analytics",
          "method": "GET"
        }
      },
      "description": "Get analytics data for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a campaign",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a campaign status",
      "resource": "campaign"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversation",
      "routing": {
        "request": {
          "url": "=/unibox/conversations/{{$parameter.conversationId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific conversation",
      "resource": "conversation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get conversations",
      "routing": {
        "request": {
          "url": "/unibox/conversations",
          "method": "GET"
        }
      },
      "description": "Get many conversations",
      "resource": "conversation"
    },
    {
      "name": "Reply",
      "value": "reply",
      "action": "Reply to a conversation",
      "routing": {
        "request": {
          "url": "=/unibox/conversations/{{$parameter.conversationId}}/reply",
          "method": "POST"
        }
      },
      "description": "Send a reply in a conversation",
      "resource": "conversation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an inbox",
      "routing": {
        "request": {
          "url": "=/inboxes/{{$parameter.inboxId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific inbox",
      "resource": "inbox"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get inboxes",
      "routing": {
        "request": {
          "url": "/inboxes",
          "method": "GET"
        }
      },
      "description": "Get many inboxes",
      "resource": "inbox"
    },
    {
      "name": "Get Warmup Stats",
      "value": "getWarmupStats",
      "action": "Get warmup statistics",
      "routing": {
        "request": {
          "url": "=/inboxes/{{$parameter.inboxId}}/warmup/stats",
          "method": "GET"
        }
      },
      "description": "Get warmup statistics for an inbox",
      "resource": "inbox"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads",
          "method": "POST"
        }
      },
      "description": "Create a new lead in a campaign",
      "resource": "lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a lead from a campaign",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads/{{$parameter.leadId}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific lead",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get leads",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/leads",
          "method": "GET"
        }
      },
      "description": "Get many leads from a campaign",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get sequences",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/sequences",
          "method": "GET"
        }
      },
      "description": "Get many sequences for a campaign",
      "resource": "sequence"
    },
    {
      "name": "Update Variant",
      "value": "updateVariant",
      "action": "Update a sequence variant",
      "routing": {
        "request": {
          "url": "=/campaigns/{{$parameter.campaignId}}/variants/{{$parameter.variantId}}",
          "method": "PATCH"
        }
      },
      "description": "Update the enabled status of a sequence variant",
      "resource": "sequence"
    }
  ]

npm_readme:
  # n8n-nodes-reachkit

  This is an n8n community node that lets you use [Reachkit](https://reachkit.ai) in your n8n workflows.

  Reachkit is a cold email outreach platform that helps you manage campaigns, leads, inboxes, and conversations.

  [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

  This node supports the following resources and operations:

  ### Blocklist

  - **Add**: Add an email to the blocklist
  - **Check**: Check if an email is in the blocklist
  - **Delete**: Remove an email from the blocklist
  - **Get Many**: Get all blocklist entries with pagination and search

  ### Campaign

  - **Get**: Get details of a specific campaign
  - **Get Many**: List all campaigns with pagination and search
  - **Get Analytics**: Get analytics data for a campaign including daily stats and sequence performance
  - **Update**: Update a campaign status (active/paused)

  ### Conversation

  - **Get**: Get details of a specific conversation with all messages
  - **Get Many**: List all conversations with pagination and filtering by folder
  - **Reply**: Send a reply in a conversation

  ### Inbox

  - **Get**: Get details of a specific inbox
  - **Get Many**: List all inboxes with pagination and search
  - **Get Warmup Stats**: Get warmup statistics for an inbox over the last 7 days

  ### Lead

  - **Create**: Create a new lead in a campaign with custom variables
  - **Delete**: Delete a lead from a campaign
  - **Get**: Get details of a specific lead
  - **Get Many**: List all leads in a campaign with pagination and search

  ### Sequence

  - **Get Many**: List all sequences for a campaign with their variants
  - **Update Variant**: Update the enabled status of a sequence variant

  ## Credentials

  To use this node, you need a Reachkit API key.

  ### Getting your API key:

  1. Log in to your Reachkit account
  2. Navigate to **Settings → Integrations**
  3. Click **Add API Key**
  4. Enter a name for the key
  5. Copy the API key (it will only be shown once)

  ### Authentication

  The node uses Bearer token authentication. Simply paste your API key in the credentials configuration.

  **Note**: API access is available exclusively for users on the Professional and Agency plans.

  ## Compatibility

  Tested with n8n version 1.x.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Reachkit n8n Documentation](https://reachkit.ai/help/articles/n8n-integration)
  - [Reachkit API Documentation](https://reachkit.ai/help/articles/api-documentation)
  - [Reachkit Webhooks Documentation](https://reachkit.ai/help/articles/webhooks)

  ## Usage Examples

  ### Create leads from a spreadsheet

  1. Use the **Spreadsheet File** node to read your leads
  2. Connect to **Reachkit** node
  3. Select **Lead** resource and **Create** operation
  4. Map the email, first name, last name fields
  5. Set custom variables for personalization

  ### Get campaign analytics

  1. Use the **Reachkit** node
  2. Select **Campaign** resource and **Get Analytics** operation
  3. Enter the campaign ID
  4. Process the daily stats and sequence performance data

  ### Reply to new conversations

  1. Use the **Reachkit** node with **Conversation** → **Get Many**
  2. Filter by folder (primary/others)
  3. Process unread conversations
  4. Use **Conversation** → **Reply** to send responses

  ### Manage blocklist

  1. Add emails to blocklist from bounced leads
  2. Check if an email is blocked before adding to campaign
  3. Clean up your blocklist periodically

  ## Version History

  ### 0.1.0

  - Initial release
  - Support for all major Reachkit API endpoints
  - Full CRUD operations for leads, campaigns, conversations
  - Blocklist management
  - Inbox and warmup stats
  - Sequence variant management

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of Reachkit cold email outreach workflows, allowing management of campaigns, leads, conversations, inboxes, and blocklists.","capabilities":["Add, check, delete, and retrieve blocklist entries","Retrieve and update campaign details and status","Fetch campaign analytics including daily stats and sequence performance","Retrieve, list, and reply to conversations","Retrieve inbox details and warmup statistics","Create leads with custom variables and delete existing leads","List sequences and update variant enabled status"],"authentication":"API key required (Bearer token)","commonUseCases":["Automated lead creation from spreadsheets","Campaign performance monitoring and analytics","Automated replies to new conversations","Managing email blocklists to prevent bounce rates"],"limitations":["API access restricted to Professional and Agency plans only","Requires manual API key configuration"],"relatedNodes":["Spreadsheet File","HTTP Request","Wait","Code"]}


node_type: n8n-nodes-transcript-lol.transcriptLolTrigger
package_name: n8n-nodes-transcript-lol
display_name: Transcript LOL Trigger
description: Starts the workflow when a Transcript.lol event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: pkpio
author_github_url: https://github.com/transcript-lol/
npm_package_name: n8n-nodes-transcript-lol
npm_version: 0.3.3
community_fetched_at: 2026-04-16T09:43:35.806Z
ai_summary_generated_at: 2026-03-25 22:47:20
npm_readme:
  # n8n-nodes-transcript-lol

  This is an n8n community node for [Transcript.lol](https://transcript.lol) - an AI-powered audio and video transcription service.

  [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

  ### Transcript.lol Node

  #### Recording Resource
  - **Create** - Create a new recording for transcription
  - **Get** - Get a recording by ID
  - **Get Many** - Get many recordings from a workspace

  #### Transcript Resource
  - **Get** - Get transcript for a recording in various formats (JSON, Plain Text, CSV, Word, SRT, VTT)

  #### Workspace Resource
  - **Get Many** - Get all workspaces accessible to your account

  ### Transcript.lol Trigger Node

  Listen for events from Transcript.lol:

  - **New Transcript** - Triggers when a transcript is completed for a recording
  - **Transcript Failed** - Triggers when a transcript fails to be created
  - **New Insights** - Triggers when new AI insights are generated for a recording
  - **Translation Created** - Triggers when a translation is completed for a recording

  ## Credentials

  This node uses OAuth2 with PKCE (Proof Key for Code Exchange) for secure authentication. No client secret is required — the integration uses a public client ID (`tlol_n8n_client`) and relies on PKCE's cryptographic code challenge/verifier exchange to secure the authorization flow.

  ### Setup

  1. In n8n, create new credentials for "Transcript.lol OAuth2 API"
  2. Click "Connect my account" — n8n will automatically handle the PKCE flow
  3. Sign in to your [Transcript.lol account](https://transcript.lol) and authorize the connection
  4. Once authorized, you can use the node in your workflows

  ### How It Works

  1. n8n generates a random `code_verifier` and derives a `code_challenge` (SHA-256 hash)
  2. The `code_challenge` is sent with the authorization request to Transcript.lol
  3. After you authorize, n8n sends the original `code_verifier` to the token endpoint
  4. Transcript.lol verifies that `SHA256(code_verifier)` matches the stored `code_challenge`
  5. On success, an access token (Bearer token) is issued and used for all API requests

  This approach eliminates the need for a shared client secret, making it safe for the credential configuration to be distributed as part of a community node.

  **Note:** You need to be on the Unlimited Plan to use the n8n integration.

  ## Compatibility

  - Tested with n8n version 1.0.0 and above
  - Requires Node.js v22 or higher

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Transcript.lol Documentation](https://transcript.lol/docs)
  - [Transcript.lol API Reference](https://transcript.lol/docs/api)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that triggers workflows when specific events occur in Transcript.lol, an AI-powered audio and video transcription service.","capabilities":["Trigger on new transcript completion","Trigger on transcript failure","Trigger on new AI insights generation","Trigger on translation completion","Create new recordings for transcription","Retrieve single or multiple recordings by ID","Retrieve transcripts in multiple formats (JSON, Plain Text, CSV, Word, SRT, VTT)","List all accessible workspaces"],"authentication":"OAuth2 with PKCE (Proof Key for Code Exchange)","commonUseCases":["Automate follow-up actions when a transcription is completed","Alert team members when a transcription fails","Process new AI insights automatically","Handle translation completions in a workflow"],"limitations":["Requires Transcript.lol Unlimited Plan","Requires Node.js v22 or higher","Compatible with n8n version 1.0.0 and above"],"relatedNodes":["n8n-nodes-core-credentials","n8n-nodes-core-start-of-flow","n8n-nodes-core-webhook"]}


node_type: n8n-nodes-converthub.converthub
package_name: n8n-nodes-converthub
display_name: ConvertHub
description: Convert files between 800+ formats using ConvertHub API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: venelinkochev
author_github_url: https://github.com/converthub-api/
npm_package_name: n8n-nodes-converthub
npm_version: 0.3.2
community_fetched_at: 2026-04-16T09:43:35.808Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "conversion",
      "options": [
        {
          "name": "Conversion",
          "value": "conversion",
          "description": "Convert files between formats"
        },
        {
          "name": "Format",
          "value": "formats",
          "description": "Get information about supported formats"
        },
        {
          "name": "Account",
          "value": "account",
          "description": "Get account information"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convertFile",
      "options": [
        {
          "name": "Cancel Job",
          "value": "cancelJob",
          "action": "Cancel conversion job",
          "description": "Cancel a conversion job"
        },
        {
          "name": "Convert File",
          "value": "convertFile",
          "action": "Convert a file",
          "description": "Convert a file from one format to another"
        },
        {
          "name": "Convert From URL",
          "value": "convertUrl",
          "action": "Convert file from URL",
          "description": "Convert a file from a URL"
        },
        {
          "name": "Delete Conversion",
          "value": "deleteConversion",
          "action": "Delete conversion file",
          "description": "Delete a completed conversion file"
        },
        {
          "name": "Get Download URL",
          "value": "getDownloadUrl",
          "action": "Get download URL",
          "description": "Get the download URL for a completed conversion"
        },
        {
          "name": "Get Job Status",
          "value": "getStatus",
          "action": "Get job status",
          "description": "Check the status of a conversion job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversion"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllFormats",
      "options": [
        {
          "name": "Get All Supported Formats",
          "value": "getAllFormats",
          "action": "Get all supported formats",
          "description": "Get a list of all supported file formats"
        },
        {
          "name": "Get Format Conversions",
          "value": "getFormatConversions",
          "action": "Get format conversions",
          "description": "Get available conversions for a specific format"
        },
        {
          "name": "Check Conversion Support",
          "value": "checkConversionSupport",
          "action": "Check conversion support",
          "description": "Check if a specific conversion is supported"
        },
        {
          "name": "Get All Supported Conversions",
          "value": "getAllConversions",
          "action": "Get all supported conversions",
          "description": "Get all supported formats with conversion mappings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "formats"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDetails",
      "options": [
        {
          "name": "Get Account Details",
          "value": "getDetails",
          "action": "Get account details",
          "description": "Get account information including credits and plan details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cancel Job",
      "value": "cancelJob",
      "action": "Cancel conversion job",
      "description": "Cancel a conversion job",
      "resource": "conversion"
    },
    {
      "name": "Convert File",
      "value": "convertFile",
      "action": "Convert a file",
      "description": "Convert a file from one format to another",
      "resource": "conversion"
    },
    {
      "name": "Convert From URL",
      "value": "convertUrl",
      "action": "Convert file from URL",
      "description": "Convert a file from a URL",
      "resource": "conversion"
    },
    {
      "name": "Delete Conversion",
      "value": "deleteConversion",
      "action": "Delete conversion file",
      "description": "Delete a completed conversion file",
      "resource": "conversion"
    },
    {
      "name": "Get Download URL",
      "value": "getDownloadUrl",
      "action": "Get download URL",
      "description": "Get the download URL for a completed conversion",
      "resource": "conversion"
    },
    {
      "name": "Get Job Status",
      "value": "getStatus",
      "action": "Get job status",
      "description": "Check the status of a conversion job",
      "resource": "conversion"
    },
    {
      "name": "Get All Supported Formats",
      "value": "getAllFormats",
      "action": "Get all supported formats",
      "description": "Get a list of all supported file formats",
      "resource": "formats"
    },
    {
      "name": "Get Format Conversions",
      "value": "getFormatConversions",
      "action": "Get format conversions",
      "description": "Get available conversions for a specific format",
      "resource": "formats"
    },
    {
      "name": "Check Conversion Support",
      "value": "checkConversionSupport",
      "action": "Check conversion support",
      "description": "Check if a specific conversion is supported",
      "resource": "formats"
    },
    {
      "name": "Get All Supported Conversions",
      "value": "getAllConversions",
      "action": "Get all supported conversions",
      "description": "Get all supported formats with conversion mappings",
      "resource": "formats"
    },
    {
      "name": "Get Account Details",
      "value": "getDetails",
      "action": "Get account details",
      "description": "Get account information including credits and plan details",
      "resource": "account"
    }
  ]

npm_readme:
  # n8n-nodes-converthub

  ![logo](./nodes/Converthub/logo.png)

  [![npm version](https://badge.fury.io/js/n8n-nodes-converthub.svg)](https://badge.fury.io/js/n8n-nodes-converthub)

  This is an n8n community node that lets you use [ConvertHub](https://converthub.com) in your n8n workflows.

  ConvertHub is a powerful file conversion API that supports 800+ format conversion pairs across images, documents, audio, video, and more.

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

  use the Community Nodes menu in n8n:

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

  ## Operations

  This node supports the following operations:

  ### Conversion Resource
  - **Convert File** - Convert a file from one format to another (supports binary data)
  - **Convert from URL** - Convert a file by providing its URL

  ### Formats Resource
  - **Get All Supported Formats** - Get a list of all supported file formats grouped by type
  - **Get Format Conversions** - Get available conversions for a specific format
  - **Check Conversion Support** - Check if a specific conversion is supported
  - **Get All Supported Conversions** - Get all supported formats with conversion mappings

  ### Account Resource
  - **Get Account Details** - Get account information including credits, plan details, and file size limits

  ## Credentials

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

  1. Sign up for a developer account at [ConvertHub API Signup](https://converthub.com/api/signup)
  2. Navigate to your dashboard
  3. Generate a new API key in the API Keys section
  4. Copy your API key

  ### Setting up credentials in n8n:

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

  **Note:** All API requests require authentication. Keep your API key secure and never expose it in client-side code.

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against n8n version: 1.117.3

  ## Usage

  ### Example 1: Convert an Image

  This example shows how to convert a PNG image to JPG:

  1. Use an **HTTP Request** node or **Read Binary File** node to get your source file
  2. Add the **ConvertHub** node
  3. Select **Conversion** as the resource
  4. Select **Convert File** as the operation
  5. Set **Binary Property** to `data` (or your binary property name)
  6. Set **Target Format** to `jpg`
  7. Optionally, add quality settings in **Additional Fields**
  8. Execute the workflow
  9. 
  ### Example 2: Convert from URL

  1. Add a **ConvertHub** node
  2. Select **Conversion** as the resource
  3. Select **Convert from URL** as the operation
  4. Enter the file URL (e.g., `https://example.com/document.pdf`)
  5. Set **Target Format** to `docx`
  6. Execute the workflow

  ### Example 3: Check Supported Formats

  1. Add a **ConvertHub** node
  2. Select **Formats** as the resource
  3. Select **Get All Supported Formats** as the operation
  4. Execute to see all supported format groups

  ### Example 4: Check Account Credits

  1. Add a **ConvertHub** node
  2. Select **Account** as the resource
  3. Select **Get Account Details** as the operation
  4. Execute to see your remaining credits and plan details

  ### Conversion Options

  The **Convert File** and **Convert from URL** operations support these optional parameters:

  - **Output Filename** - Custom name for the output file
  - **Webhook URL** - URL to receive webhook notification when conversion completes
  - **Quality** - Quality setting (1-100) for lossy formats like JPEG, MP3
  - **Resolution** - Resolution for image/video conversions (e.g., "1920x1080")
  - **Bitrate** - Bitrate for audio/video conversions (e.g., "320k")
  - **Sample Rate** - Sample rate for audio conversions (e.g., 44100)
  - **Metadata** - Custom key-value pairs for tracking purposes

  ## API Limits

  - **File Size Limit**: 50MB for direct upload
  - **Rate Limits**: Varies by plan (see API documentation)
  - **File Retention**: Converted files are available for 24 hours
  - **Credits**: Each conversion consumes 1 credit

  ## Resources

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

  ## Version history

  ### 0.1.0 (Current)

  - Initial release
  - Support for file conversion (direct upload and URL-based)
  - Support for job management (status, cancel, delete)
  - Support for format discovery endpoints
  - Support for account information endpoint
  - Support for 800+ format conversion pairs
  - Full API v2 coverage

  ## License

  [MIT](LICENSE.md)

  ## Support

  For issues and questions:
  - Email: support@converthub.com
  - GitHub Issues: [Report an issue](https://github.com/converthub-api/n8n-nodes-converthub/issues)

  ## Contributing

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables file format conversion using the ConvertHub API, supporting over 800 format pairs across images, documents, audio, and video.","capabilities":["Convert files from one format to another via direct upload","Convert files by providing their URL","Retrieve all supported file formats grouped by type","Get available conversions for a specific format","Check if a specific conversion is supported","Retrieve all supported conversion mappings","Get account details including credits and plan information","Manage conversion jobs (status, cancel, delete)","Apply quality, resolution, bitrate, and sample rate settings"],"authentication":"API key required","commonUseCases":["Converting image formats (e.g., PNG to JPG)","Converting documents from URL to editable formats","Auditing available conversion capabilities","Monitoring API credit usage and account status"],"limitations":["Maximum file size for direct upload is 50MB","Converted files are retained for only 24 hours","Each conversion consumes 1 credit","Rate limits vary by API plan"],"relatedNodes":["HTTP Request","Read Binary File","Webhook"]}


node_type: n8n-nodes-shortio.Shortio
package_name: n8n-nodes-shortio
display_name: Short.io
description: Short.io Node for shortening and managing links
category: Community
development_style: declarative
version: 1.0.2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: liammcgarrigle
author_github_url: https://github.com/liamdmcgarrigle/
npm_package_name: n8n-nodes-shortio
npm_version: 1.0.2
community_fetched_at: 2026-04-16T09:43:35.810Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # Table of Contents

  - [Table of Contents](#table-of-contents)
  - [Overview of Community Short.io n8n Node](#overview-of-community-shortio-n8n-node)
  - [Bugs/Contributing/Feature Request](#bugscontributingfeature-request)
  - [Documentation](#documentation)
    - [Installation](#installation)
    - [Credentials](#credentials)
    - [Links](#links)
      - [List Links](#list-links)
      - [Get Link Info](#get-link-info)
      - [Create Link](#create-link)
      - [Update Existing Link](#update-existing-link)
      - [Delete Link](#delete-link)
      - [Generate QR For Link](#generate-qr-for-link)
    - [Statistics](#statistics)
      - [Get Link Statistics](#get-link-statistics)
      - [Get Domain Statistics](#get-domain-statistics)

  # Overview of Community Short.io n8n Node

  I have no affiliation with short.io beyond being a user. I work for n8n but this is not an official node.

  # Bugs/Contributing/Feature Request

  If you have a bug to report or a feature request, please [submit a GitHub issue](https://github.com/liamdmcgarrigle/n8n-nodes-shortio/issues/new) with as much detail as you're able to give.

  # Documentation

  ## Installation

  This is now available on cloud as a verified community node. Simply search for shortio in the node panel.

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

  ## Credentials

  To use this node you will need to set up short.io credentials with a key from short.io. You also will need an account and may need a paid account.

  1. Go to https://app.short.io/settings/integrations/api-key and click on "Create API Key"
     ![Screenshot1](/readme_files/step-1.jpeg)

  2. Add a description, pick the domain to use, and press "Create"
     ![Screenshot2](/readme_files/step-2.jpeg)

  3. Copy your new token. It will only be shown once

  4. Go to the credential page in n8n, in add credentials add "Short.io API", then paste in your token. Then add the domain you chose in the previous step and press save
     ![Screenshot3](/readme_files/step-3.png)

  ## Links

  ### List Links

  Get a list of your short links. These will only be links from the domain in your credential.

  You will need to choose how many results are returned. Anything over 150 is automatically paginationed.

  You can filter the results by adding:

  - **Before date**: returns links before the listed date
  - **After date**: returns links after the listed date
  - **Date Sort Order**: changes the order the links are in based on the date

  ### Get Link Info

  Get link details from the domain in your credential and the path.

  ### Create Link

  Create a link. There are many options available in the additional fields:

  - **Path**: Custom path for the short link
  - **Folder**: Assign the link to a folder (select from list or enter folder ID)
  - **Allow Duplicates**: Allow multiple links with the same original URL
  - **Title**: Title shown in the short.io admin panel
  - **Expiration settings**: Set expiry date and redirect URL for expired links
  - **Device-specific URLs**: Separate URLs for iPhone and Android users
  - **Cloaking**: Hide the original URL in the browser address bar
  - **Redirect Type**: Choose HTTP redirect code (301, 302, etc.)
  - **Password**: Password-protect the link (requires Personal plan)
  - **UTM Parameters**: Add tracking parameters (source, medium, campaign, term, content)
  - **Tags**: Add tags to organize your links

  ### Update Existing Link

  You can update an existing short link by using the path or the link `idString`.
  You can change anything about the link including the full long URL and folder assignment.

  ### Delete Link

  You can delete an existing short link by using the path or the link `idString`.

  ### Generate QR For Link

  Generate a QR code image for any short link. You can identify the link by path or `idString`.

  Options available:

  - **Color**: QR code foreground color
  - **Background Color**: QR code background color
  - **Size**: QR code size (1-99)
  - **Type**: Image format (PNG or SVG)

  The operation returns binary data that can be used with other n8n nodes (e.g., save to file, send via email, upload to cloud storage).

  ## Statistics

  Get detailed analytics for your links and domain.

  ### Get Link Statistics

  Get detailed statistics for a specific link. Identify the link by path or `idString`.

  **Period options:**

  - Today
  - Yesterday
  - Last 7 Days
  - Last 30 Days
  - Last Month
  - All Time
  - Custom (specify start and end dates)

  **Additional options:**

  - **Clicks Chart Interval**: Data granularity for the clicks chart (hour, day, week, month)
  - **Skip Top Records**: Skip top records like referer, browser, and country breakdowns

  Returns detailed statistics including total clicks, human clicks, click trends, and breakdowns by referer, browser, country, and more.

  ### Get Domain Statistics

  Get detailed statistics for your entire domain (as configured in your credentials).

  **Period options:**

  - Today
  - Yesterday
  - Last 7 Days
  - Last 30 Days
  - Last Month
  - All Time
  - Custom (specify start and end dates)

  **Additional options:**

  - **Clicks Chart Interval**: Data granularity for the clicks chart (hour, day, week, month)

  Returns domain-wide statistics including total clicks, link counts, clicks per link averages, and breakdowns by referer, browser, country, and more.

ai_documentation_summary:
  {"purpose":"The Short.io n8n node allows users to shorten URLs, manage link metadata, generate QR codes, and retrieve detailed analytics for links and domains.","capabilities":["List short links with date filtering and pagination","Get detailed information for a specific short link","Create new short links with custom paths, folders, and tracking parameters","Update existing short links (URL, folder, metadata)","Delete short links by path or ID","Generate QR codes for links with customizable colors, size, and format","Retrieve link statistics (clicks, trends, geographic data)","Retrieve domain-wide statistics","Support for UTM parameters, cloaking, password protection, and device-specific URLs"],"authentication":"API Key required (Short.io API Key)","commonUseCases":["Automating URL shortening in marketing campaigns","Tracking link performance and analytics in workflows","Generating QR codes for print materials or digital displays","Managing and organizing short links with folders and tags","Creating password-protected links for sensitive content"],"limitations":["Requires a Short.io account (paid plans may be needed for certain features like password protection)","List Links operation has a limit of 150 results per request (automatic pagination for larger datasets)","Not an official n8n node (community-maintained)","QR code generation returns binary data, requiring additional nodes for file saving or processing"],"relatedNodes":["n8n-nodes-core.binary","n8n-nodes-core.httpRequest","n8n-nodes-core.code","n8n-nodes-core.email","n8n-nodes-core.filesystem"]}


node_type: n8n-nodes-pagbank-connect.pagBank
package_name: n8n-nodes-pagbank-connect
display_name: PagBank
description: Integration with PagBank for payment processing
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: r-martins
author_github_url: https://github.com/r-martins/PagBank-n8n.git
npm_package_name: n8n-nodes-pagbank-connect
npm_version: 2.0.2
community_fetched_at: 2026-04-16T09:43:35.811Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createPaymentLink",
      "options": [
        {
          "name": "Create Payment Link",
          "value": "createPaymentLink",
          "action": "Create payment link",
          "description": "Create a payment link"
        },
        {
          "name": "Create PIX Order",
          "value": "createPixOrder",
          "action": "Create PIX order",
          "description": "Create an order with PIX payment"
        },
        {
          "name": "Get Order Status",
          "value": "getOrderStatus",
          "action": "Get order status",
          "description": "Retrieve the status of an order"
        },
        {
          "name": "Create Credit Card Charge",
          "value": "createCreditCardCharge",
          "action": "Create credit card charge",
          "description": "Create a direct credit card charge"
        },
        {
          "name": "Get Connect Key",
          "value": "validateConnectKey",
          "action": "Get Connect Key",
          "description": "Retrieve Connect Key information"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Payment Link",
      "value": "createPaymentLink",
      "action": "Create payment link",
      "description": "Create a payment link"
    },
    {
      "name": "Create PIX Order",
      "value": "createPixOrder",
      "action": "Create PIX order",
      "description": "Create an order with PIX payment"
    },
    {
      "name": "Get Order Status",
      "value": "getOrderStatus",
      "action": "Get order status",
      "description": "Retrieve the status of an order"
    },
    {
      "name": "Create Credit Card Charge",
      "value": "createCreditCardCharge",
      "action": "Create credit card charge",
      "description": "Create a direct credit card charge"
    },
    {
      "name": "Get Connect Key",
      "value": "validateConnectKey",
      "action": "Get Connect Key",
      "description": "Retrieve Connect Key information"
    }
  ]

npm_readme:
  # n8n-nodes-pagbank-connect

  n8n integration with PagBank Connect for Brazilian payment processing.


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

  ## Features

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

  ## Installation

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

  ## Configuration

  ### HTTP headers (Platform-Version)

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

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

  ### 1. Get Credentials

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

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

  ### 2. Configure in n8n

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

  ## Available Nodes

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

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

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

  ## Data Format

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

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

  Required for most operations, except payment link creation.

  ## Environments

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

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

  ## Webhooks

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

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

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

  ## Support

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

  ## License

  MIT License - see LICENSE file for details.

  ## Contributing

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


  ## Roadmap
  - More installment options
  - Recurring sales

  Subject to change based on community requests.

ai_documentation_summary:
  {"purpose":"This n8n node enables integration with PagBank Connect for processing Brazilian payments, including PIX, credit/debit cards, and payment links.","capabilities":["Create PIX orders with QR Code","Create payment links for custom checkout","Process credit/debit card charges","Check order status","Validate Connect Key","Receive payment webhooks with filtering","Support sandbox and production environments"],"authentication":"API Key required (PagBank Connect Key)","commonUseCases":["Accepting instant PIX payments from Brazilian customers","Processing recurring subscriptions (future feature)","Creating custom checkout payment links","Testing payment flows in sandbox environment","Receiving real-time payment notifications via webhooks"],"limitations":["Recurring subscriptions are marked as 'coming soon'","Monetary values must be entered in cents (not real currency)","CPF/CNPJ validation is required for most operations","Sandbox environment has automatic approval limits and delays","Production requires PagBank approval before use"],"relatedNodes":["Webhook node","Payment node","HTTP Request node"]}


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

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

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

npm_readme:
  # n8n-nodes-chatwork

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

  **ChatWork** is a business chat platform that provides messaging, task management, file sharing, and team collaboration features via a REST API.

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

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

  ## Installation

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

  After installation, restart n8n to load the ChatWork node.

  ## Operations

  This node supports the following ChatWork API operations:

  ### Me
  - Get account information

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

  ### Contacts
  - Get contact list

  ### Incoming Requests

  - List incoming requests
  - Approve request
  - Decline request

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

  ## Webhook Trigger

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

  ### Supported Events

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

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

  ### Webhook Security

  Chatwork signs webhook requests using an HMAC-SHA256 signature.

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

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

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


  Each output can be connected independently in your workflow.

  ### Development Notes

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

  ### Known Limitations

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

  ## Credentials

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

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

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

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

  ## Compatibility

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

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

  ## Usage

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

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

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

  ## Resources

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

  ## Version history

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

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


node_type: n8n-nodes-whatsable.whatsAbleTrigger
package_name: n8n-nodes-whatsable
display_name: Incoming/outgoing WhatsApp message Trigger
description: Triggers when receiving messages from WhatsAble services
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: whatsabledev
author_github_url: https://github.com/Whatsable/
npm_package_name: n8n-nodes-whatsable
npm_version: 2.4.5
community_fetched_at: 2026-04-16T09:43:35.815Z
npm_readme:
  <p align="center">
    <img src="https://d1pnnwteuly8z3.cloudfront.net/images/acc1c175-2e05-4bab-805e-64536550fa04/393f0ca5-e904-41f3-8eee-b2dab6bd4e0d.png" alt="WhatsAble Logo" width="160"/>
  </p>

  [![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE.md)

  ## Table of Contents

  - [Overview](#overview)
  - [Installation](#installation)
  - [Authentication](#authentication)
  - [Features](#features)
  - [How to Use WhatsAble Action Node](#how-to-use-whatsable-action-node)
  - [How to Use WhatsAble Trigger Node](#how-to-use-whatsable-trigger-node)
  - [How to Use Notifier Action Node](#how-to-use-notifier-action-node)
  - [How to Use Notifier Trigger Node](#how-to-use-notifier-trigger-node)
  - [How to Use Notifyer System Action Node](#how-to-use-notifyer-system-action-node)
  - [How to Use Notifyer System Trigger Node](#how-to-use-notifyer-system-trigger-node)
  - [Common Use Cases](#common-use-cases)
  - [Best Practices](#best-practices)
  - [Support](#support)
  - [License](#license)
  - [Resources](#resources)

  ---

  # n8n-nodes-whatsable

  This is an [n8n](https://n8n.io/) community node for integrating with the WhatsAble Suite, providing powerful WhatsApp messaging automation capabilities.

  ---

  ## Overview

  The WhatsAble Suite offers a comprehensive set of messaging tools that integrate seamlessly with n8n, enabling powerful automation workflows for businesses of all sizes. The suite comprises three powerful messaging platforms:

  ### WhatsAble
  - Ideal for small businesses and startups
  - Simple integration with n8n
  - Basic media support
  - Subscription-based pricing
  - 7-day free trial
  - [Documentation](https://docs.whatsable.app/guides/whatsable/n8n)

  ### Notifier by WhatsAble
  - Perfect for medium-sized businesses
  - Enhanced template support
  - Standard media capabilities
  - Flexible pricing options
  - Available free trial
  - [Documentation](https://docs.whatsable.app/guides/notifier/n8n)

  ### Notifyer System
  - Enterprise-grade solution
  - Advanced template capabilities
  - Full media support
  - Enterprise pricing
  - Try for free with 2 numbers
  - [Documentation](https://docs.whatsable.app/guides/notifier-system/n8n-overview)

  ---

  ## Installation

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

  ---

  ## Authentication

  To use this node, you need to have an API key from your chosen WhatsAble Suite platform:

  1. Sign up at [WhatsAble](https://whatsable.app)
  2. Choose your platform (WhatsAble, Notifier, or Notifyer System)
  3. Complete the verification process
  4. Generate an API key from your platform's dashboard

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

  ---

  ## Features

  ### WhatsAble Node
  - Send messages
  - Send template messages (Via Notifyer System)
  - Send non-template messages
  - Schedule messages
  - Support for various media types
  - [Documentation](https://docs.whatsable.app/guides/whatsable/n8n)

  ### WhatsAble Trigger Node
  - Receive incoming messages
  - Handle webhooks
  - Process notifications
  - Real-time message triggers
  - [Documentation](https://docs.whatsable.app/guides/whatsable/n8n)

  ---

  ## How to Use WhatsAble Action Node

  ### Prerequisites
  - An active WhatsAble subscription
  - Access to n8n workflow automation platform
  - A verified WhatsApp number in your WhatsAble dashboard

  ### Setup Process

  1. **Subscribe to WhatsAble**
     - Log in to your WhatsAble dashboard
     - Click the Subscribe button
     - Start your 7-day free trial
     - Note: After trial, pricing is $8.99 per month per phone number
  2. **Add and Verify Phone Number**
     - Navigate to Verified Numbers in your dashboard
     - Click Add New Number
     - Enter your phone number (with country code)
     - Complete the WhatsApp verification process
     - Note: Only first number needs verification
  3. **Get Your API Key**
     - Go to API Keys in your WhatsAble dashboard
     - Copy your unique API key
     - Store it securely for the integration

  ### Integration Steps

  1. Create a new workflow in n8n
  2. Add your preferred trigger node and configure its settings
  3. Add the WhatsAble node
  4. In the WhatsAble node settings:
     - Select "Create new credential"
     - Enter your WhatsAble API key
     - Name your credential (e.g., "WhatsAble Production")
     - Click Save
  5. Configure message settings:
     - Select "Send Message (WhatsAble)" operation
     - Fill in required and optional fields
  6. Click "Test Step" to verify
  7. Save your workflow and activate it

  For detailed documentation, visit [WhatsAble n8n Integration Guide](https://docs.whatsable.app/guides/whatsable/n8n)

  ---

  ## How to Use WhatsAble Trigger Node

  ### Prerequisites
  - An active WhatsAble subscription
  - Access to n8n workflow automation platform
  - A verified WhatsApp number in your WhatsAble dashboard

  ### Setup Process

  1. **Get Your Webhook URL**
     - Open the WhatsAble Trigger Node in n8n
     - At the top of the node, locate "Webhook URLs"
     - Click the "Production URL" to copy it to your clipboard
     - This URL will be used to receive incoming messages
  2. **Configure Credentials**
     - In the WhatsAble Trigger Node settings:
       - Paste the Production Webhook URL in the "Production URL" input box
       - Enter your WhatsAble API key in the "API Key" input box
       - Click Save
       - A green success message will appear if the configuration is successful
  3. **Activate the Trigger**
     - Click "Test Step" to verify the connection
     - Save your workflow
     - Toggle "Active" to start receiving messages
     - Connect the trigger to any action node to process incoming messages

  For detailed documentation, visit [WhatsAble n8n Integration Guide](https://docs.whatsable.app/guides/whatsable/n8n)

  ---

  ## How to Use Notifier Action Node

  ### Prerequisites
  - An active Notifier account (Monthly or Pay-as-you-go plan)
  - Access to n8n workflow automation platform
  - Business information ready for configuration

  ### Setup Process

  1. **Configure Business Information**
     - Log in to your Notifier dashboard
     - Navigate to Business Information
     - Complete required fields
     - Verify your WhatsApp number with the code sent
  2. **Get Your API Key**
     - Go to API Keys in your Notifier dashboard
     - Copy your unique API key
     - Store it securely for the integration

  ### Integration Steps

  1. Create a new workflow in n8n
  2. Add your preferred trigger node and configure its settings
  3. Add the WhatsAble node
  4. In the WhatsAble node settings:
     - Select "Create new credential"
     - Enter your Notifier API key
     - Name your credential (e.g., "Notifier Production")
     - Click Save
  5. Configure message settings:
     - Select "Send Message (Notifier)" operation
     - Fill in required and optional fields
  6. Click "Test Step" to verify
  7. Save your workflow and activate it

  ### Example Workflows with Notifier
  - Lead Nurturing: Trigger on form submission, send personalized welcome, schedule follow-ups
  - Order Confirmations: Trigger on order status change, send update with details
  - Event Reminders: Trigger on calendar event, send reminder with RSVP link
  - Customer Feedback: Trigger on purchase, send feedback request
  - Support Ticket Updates: Trigger on ticket status change, send update

  For detailed documentation, visit [Notifier n8n Integration Guide](https://docs.whatsable.app/guides/notifier/n8n)

  ---

  ## How to Use Notifier Trigger Node

  ### Prerequisites
  - An active Notifier account
  - Access to n8n workflow automation platform
  - Business information configured in Notifier

  ### Setup Process

  1. **Get Your Webhook URL**
     - Open the Notifier Trigger Node in n8n
     - At the top of the node, locate "Webhook URLs"
     - Click the "Production URL" to copy it to your clipboard
     - This URL will be used to receive incoming messages
  2. **Configure Credentials**
     - In the Notifier Trigger Node settings:
       - Paste the Production Webhook URL in the "Production URL" input box
       - Enter your Notifier API key in the "API Key" input box
       - Click Save
       - A green success message will appear if the configuration is successful
  3. **Activate the Trigger**
     - Click "Test Step" to verify the connection
     - Save your workflow
     - Toggle "Active" to start receiving messages
     - Connect the trigger to any action node to process incoming messages

  For detailed documentation, visit [Notifier n8n Integration Guide](https://docs.whatsable.app/guides/notifier/n8n)

  ---

  ## How to Use Notifyer System Action Node

  ### Prerequisites
  - An active Notifyer System account
  - Access to n8n workflow automation platform
  - Completed WhatsApp Business Platform embedding process

  ### Setup Process

  1. **Complete Platform Embedding**
     - Connect your WhatsApp Business account
     - Complete Meta's business verification
     - Ensure compliance with WhatsApp Business Platform policies
  2. **Set Up Message Templates**
     - Navigate to Templates in your dashboard
     - Create new templates and submit for review
  3. **Get Your API Key**
     - Go to API Keys in your Notifyer dashboard
     - Copy your unique API key
     - Store it securely for the integration

  ### Integration Steps

  1. Create a new workflow in n8n
  2. Add your preferred trigger node and configure its settings
  3. Add the WhatsAble node
  4. In the WhatsAble node settings:
     - Select "Create new credential"
     - Enter your Notifyer System API key
     - Name your credential (e.g., "Notifyer System Production")
     - Click Save
  5. Configure message settings:
     - Choose between template and non-template message operations
     - Fill in required and optional fields
  6. Click "Test Step" to verify
  7. Save your workflow and activate it

  ### Example Workflows with Notifyer System
  - Order Confirmations: Trigger on new order, send template message with details
  - Appointment Reminders: Trigger on calendar event, send template message
  - Lead Notifications: Trigger on new CRM lead, send non-template message
  - Customer Support: Trigger on new support ticket, send template message
  - Delivery Updates: Trigger on shipping status change, send template message

  For detailed documentation, visit [Notifyer System n8n Integration Guide](https://docs.whatsable.app/guides/notifier-system/n8n-overview)

  ---

  ## How to Use Notifyer System Trigger Node

  ### Prerequisites
  - An active Notifyer System account
  - Access to n8n workflow automation platform
  - Completed WhatsApp Business Platform embedding process

  ### Setup Process

  1. **Get Your Webhook URL**
     - Open the Notifyer System Trigger Node in n8n
     - At the top of the node, locate "Webhook URLs"
     - Click the "Production URL" to copy it to your clipboard
     - This URL will be used to receive incoming messages
  2. **Configure Credentials**
     - In the Notifyer System Trigger Node settings:
       - Paste the Production Webhook URL in the "Production URL" input box
       - Enter your Notifyer System API key in the "API Key" input box
       - Click Save
       - A green success message will appear if the configuration is successful
  3. **Activate the Trigger**
     - Click "Test Step" to verify the connection
     - Save your workflow
     - Toggle "Active" to start receiving messages
     - Connect the trigger to any action node to process incoming messages

  For detailed documentation, visit [Notifyer System n8n Integration Guide](https://docs.whatsable.app/guides/notifier-system/n8n-overview)

  ---

  ## Common Use Cases

  - Lead Qualification: Automated follow-up, lead scoring, response tracking
  - Order Notifications: Confirmations, shipping updates, delivery notifications
  - Appointment Reminders: Automated reminders, confirmations, calendar integration
  - Customer Support: Ticket routing, automated responses, support updates
  - Payment Reminders: Invoice notifications, payment confirmations, subscription reminders

  ---

  ## Support

  For technical support and assistance:

  - **Email Support**: Contact our dedicated support team
  - **Video Tutorials**: Watch step-by-step integration guides
  - **Implementation Help**: Get expert assistance with workflows

  For enterprise-level support or custom solutions, contact our solution engineers at team@whatsable.app

  ---

  ## License

  [MIT](LICENSE.md)

  ---

  ## Resources

  - [WhatsAble Website](https://whatsable.app)
  - [n8n Documentation](https://docs.n8n.io)
  - [WhatsAble Suite n8n Overview](https://docs.whatsable.app/n8n-overview)

  ---

  ## Running Locally

  To run and test this node on your local machine:

  1. **Clone the repository**
     ```bash
     git clone https://github.com/Whatsable/n8n-nodes-whatsable.git
     cd n8n-nodes-whatsable
     ```
  2. **Install dependencies**
     ```bash
     pnpm install
     ```
  3. **Build the project**
     ```bash
     pnpm build
     ```
  4. **Run tests**
     ```bash
     pnpm test
     ```
     > **Note:** Unit tests are included to ensure code quality. Please run tests before submitting a pull request.
  5. **Link the node to your local n8n instance**
     - If you are developing a custom node, you can use [n8n's community node development guide](https://docs.n8n.io/integrations/community-nodes/create/) to link your node for local testing.
     - Typically, you can run:
       ```bash
       pnpm link --global
       cd ~/.n8n/custom
       pnpm link --global n8n-nodes-whatsable
       ```
     - Restart your n8n instance to load the custom node.
  6. **Test your node**
     - Open n8n in your browser (usually at `http://localhost:5678`)
     - Create a workflow and add your custom node to test its functionality

  > **Note:** Make sure you have [Node.js](https://nodejs.org/) and [pnpm](https://pnpm.io/) installed on your machine.

  ---

  ## Contributing

  We welcome contributions from the community! To contribute:

  1. **Fork the repository**: [https://github.com/Whatsable/n8n-nodes-whatsable](https://github.com/Whatsable/n8n-nodes-whatsable)
  2. **Create a new branch** for your feature or bugfix:
     ```bash
     git checkout -b feature/your-feature-name
     ```
  3. **Make your changes** and ensure code quality:
     - Follow the existing code style
     - Add or update documentation as needed
     - Run linter and tests before submitting
  4. **Commit your changes**
     ```bash
     git commit -m "Add your message here"
     ```
  5. **Push to your fork**
     ```bash
     git push origin feature/your-feature-name
     ```
  6. **Open a Pull Request**
     - Go to the GitHub page for your fork
     - Click "Compare & pull request"
     - Describe your changes and submit the PR

  ### Reporting Issues
  - If you find a bug or have a feature request, please [open an issue](https://github.com/Whatsable/n8n-nodes-whatsable/issues) with details and steps to reproduce.

  ### Code of Conduct
  - Please be respectful and follow our [Code of Conduct](CODE_OF_CONDUCT.md) when participating in this project.


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

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

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

npm_readme:
  # n8n-nodes-vikunja

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

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

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

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

  ## Installation

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

  ## Operations

  This node supports all operations supported by Vikunja API tokens.
  You can see a full list of possible actions when creating a token in Vikunja.

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

  ## Credentials

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

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

  ## Compatibility

  Tested with n8n Version 1.91.3.

  ## Development

  You need npm and NodeJS installed.

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

  ## Resources

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Vikunja, an open-source self-hostable to-do and productivity application, by allowing data retrieval and workflow triggers via its API.","capabilities":["Retrieve data from Vikunja API","Trigger n8n workflows via Vikunja webhooks","Support all operations available in Vikunja API tokens"],"authentication":"API token required (configured via Credentials with API token and API URL)","commonUseCases":["Automating task management in n8n workflows","Syncing to-do items between Vikunja and other services","Triggering n8n workflows based on Vikunja events"],"limitations":["Limited to API token authentication method only","Community node (may lack official support or updates)"],"relatedNodes":["Vikunja API node","Webhook node","General API node"]}


node_type: n8n-nodes-zitedb.ziteTrigger
package_name: n8n-nodes-zitedb
display_name: Zite Trigger
description: Triggers when events occur in Zite (records, tables, or fields)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: xkcdstickfigure
author_github_url: https://github.com/fillout/
npm_package_name: n8n-nodes-zitedb
npm_version: 1.0.1
community_fetched_at: 2026-04-16T09:43:35.818Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n package for Zite Database

  ![Banner](https://raw.githubusercontent.com/fillout/n8n-nodes-zitedb/refs/heads/main/banner.png)

  This is an n8n community node that lets you interact with databases in Zite. [Learn more](https://www.fillout.com/help/database/overview).

  ## Installation

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

  ## Usage

  Add the trigger in n8n, and when creating a credential, you'll need to get an API key from your [account settings](https://build.fillout.com/home/settings/developer) in Zite. Make sure that the correct base URL is set, as you can have your data hosted in different regions with [Fillout Enterprise](https://www.fillout.com/enterprise).

  ## Developers

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

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when events occur in Zite databases, including records, tables, or field changes.","capabilities":["Monitor Zite database records for changes","Detect table modifications","Track field-level updates","Automate workflow execution based on database events"],"authentication":"API key required (obtained from Zite account settings)","commonUseCases":["Automate data processing when new records are added to Zite","Trigger notifications or actions when database fields are updated","Integrate Zite database changes with external systems via n8n workflows"],"limitations":["Requires Fillout Enterprise for multi-region base URL configuration","Limited to Zite database events only"],"relatedNodes":["n8n-nodes-zitedb.ziteDatabase","n8n-nodes-zitedb.ziteRecord","n8n-nodes-zitedb.ziteField"]}


node_type: n8n-nodes-zigpoll.zigpollTrigger
package_name: n8n-nodes-zigpoll
display_name: Zigpoll Trigger
description: Triggers when a specific Zigpoll survey is completed
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: zigpoll
author_github_url: https://github.com/JasonZigelbaum/
npm_package_name: n8n-nodes-zigpoll
npm_version: 0.1.9
community_fetched_at: 2026-04-16T09:43:35.820Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-zigpoll

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

  Zigpoll is a contextual survey platform that lets you understand what customers think & feel about your product by running highly targeted surveys inside and outside of your product at key moments.

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

  [Installation](#installation)  
  [Operations](#operations)  
  [Credentials](#credentials) <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage) <!-- delete if not using this section -->  
  [Resources](#resources)

  ## Installation

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

  ## Operations

  Run workflows on new responses you receive for your surveys.

  ## Credentials

  You only need a Zigpoll API Key for this. Please check out the [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n) for more information.

  ## Compatibility

  This package was developed & tested with n8n > 1.4.0.

  ## Usage

  Please check out the [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n) for more information on how to use the integration.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Zigpoll Docs](https://docs.zigpoll.com/integrations/n8n)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when a specific Zigpoll survey is completed, enabling automation based on customer survey responses.","capabilities":["Trigger workflow execution on new survey responses","Integrate with Zigpoll contextual survey platform","Enable targeted survey automation inside and outside of products"],"authentication":"API Key required","commonUseCases":["Automate responses to customer feedback surveys","Trigger follow-up actions based on survey results","Monitor product sentiment through contextual surveys"],"limitations":["Requires Zigpoll API Key configuration","Compatible only with n8n version 1.4.0 and above"],"relatedNodes":["Zigpoll Trigger","Zigpoll Webhook","Zigpoll HTTP Request"]}


node_type: n8n-nodes-geminigen.Geminigen
package_name: n8n-nodes-geminigen
display_name: Geminigen
description: Generate AI videos using geminigen.ai API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: tranhaiminh
author_github_url: https://github.com/tranhaiming14/
npm_package_name: n8n-nodes-geminigen
npm_version: 1.0.8
community_fetched_at: 2026-04-16T09:43:35.821Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "videoGeneration",
      "options": [
        {
          "name": "Video Generation",
          "value": "videoGeneration"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Generate Video",
          "value": "generateVideo",
          "action": "Generate a video",
          "description": "Generate Video using AI Models"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoGeneration"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Video",
      "value": "generateVideo",
      "action": "Generate a video",
      "description": "Generate Video using AI Models",
      "resource": "videoGeneration"
    }
  ]

npm_readme:
  # n8n-nodes-geminigen

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

  The GeminiGen.AI Video Generation API allows you to create high-quality videos from text prompts using state-of-the-art AI models. You can use this API to generate video content, animations, marketing materials, or any visual video content you can imagine.


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

  ### Community Nodes 

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-geminigen` in **Enter npm package name**
  4. Select **Install**

  ### Manual Installation

  To get started install the package in your n8n root directory:
  ```bash
  npm install n8n-nodes-geminigen
  ```

  For Docker-based deployments add the package to your [data directory](https://docs.n8n.io/hosting/configuration/configuration-methods/#mount-the-data-folder):
  ```bash
  cd /path/to/.n8n/nodes
  npm install n8n-nodes-geminigen
  ```

  ## Operations

  Generate Video

  ## Credentials

  In order to get the api key needed to use this node, you should visit https://geminigen.ai to sign up, click on your profile then API to generate the api key

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested against: n8n 1.0.0 and later versions
  - No known version incompatibility issues

  ## Usage

  ### Basic Setup

  1. **Install the node**: Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) to add this community node to your n8n instance.

  2. **Set up credentials**: 
     - Visit [GeminiGen.AI](https://geminigen.ai) and sign up for an account
     - Go to your profile → API to generate an API key
     - In n8n, create new credentials of type "GeminiGen API" and enter your API key

  3. **Add the node to your workflow**: Search for "GeminiGen" in the node palette and drag it into your workflow.

  ### Configuration

  - **Prompt**: Enter a detailed text description of the video you want to generate (e.g., "A serene mountain landscape with flowing rivers and wildlife")
  - **Model**: Choose from available AI models:
    - Veo 3, Veo 3 Fast (Google's Veo models)
    - Sora 2, Sora 2 Pro (OpenAI's Sora models)
    - Seedance 2 Remix, Seedance 2 Omni (Seedance models)
    - Grok (xAI's model)

  ### Example Workflow

  1. **Trigger**: Use a Schedule Trigger to run daily
  2. **GeminiGen Node**: Configure with your prompt and preferred model
  3. **Output**: The generated video URL will be returned after generation is complete, please be patient since the video generation can take a few minutes.

  ### Tips

  - More detailed prompts generally produce better results
  - Video generation can take several minutes
  - Check the "fullResponse" output for additional metadata about the generation
  - If generation fails, the node will output the error message for debugging

  For more advanced usage, combine with other n8n nodes to create automated video content workflows.

  ### Docs

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [GeminiGen API documentation](https://docs.geminigen.ai/)

ai_documentation_summary:
  {"purpose":"Generates AI videos from text prompts using the GeminiGen.AI API, supporting multiple state-of-the-art video generation models.","capabilities":["Generate videos from text prompts","Support multiple AI video models (Veo, Sora, Seedance, Grok)","Return generated video URLs","Provide fullResponse metadata for generation details","Handle error messages for failed generations"],"authentication":"API key required (obtained from https://geminigen.ai)","commonUseCases":["Automated video content creation","Marketing material generation","Animation workflows","Daily scheduled video updates"],"limitations":["Video generation can take several minutes","Community node (may not be available in all n8n instances)","Requires manual API key setup"],"relatedNodes":["Schedule Trigger","HTTP Request","Code"]}


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

updated_at: 2026-04-16 09:43:35
author_name: p.montag
author_github_url: https://github.com/FundraisingBox/n8n-nodes-fundraisingbox.git
npm_package_name: @fundraisingbox/n8n-nodes-fundraisingbox
npm_version: 1.0.1
community_fetched_at: 2026-04-16T09:43:35.822Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "person",
      "options": [
        {
          "name": "Communication",
          "value": "communication"
        },
        {
          "name": "Donation",
          "value": "donation"
        },
        {
          "name": "Donation Type",
          "value": "donationType"
        },
        {
          "name": "Person",
          "value": "person",
          "description": "FundraisingBox uses the term Person for what many tools call a Contact"
        },
        {
          "name": "Person Address",
          "value": "personAddress"
        },
        {
          "name": "Person Email Address",
          "value": "personEmailAddress"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Source",
          "value": "source"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a communication",
          "description": "Add a communication entry for a person"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a communication",
          "description": "Delete a communication permanently"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a communication",
          "description": "Retrieve a communication"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many communications",
          "description": "Retrieve a list of communication entries"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a communication",
          "description": "Update an existing communication entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "communication"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a donation",
          "description": "Retrieve a donation"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many donations",
          "description": "Retrieve a list of donations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "donation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a donation type",
          "description": "Retrieve a donation type"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many donation types",
          "description": "Retrieve a list of donation types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "donationType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a person",
          "description": "Create a new person"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a person",
          "description": "Retrieve a person"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many persons",
          "description": "Retrieve a list of persons"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a person",
          "description": "Update an existing person"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a person address",
          "description": "Add an address to a person"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a person address",
          "description": "Retrieve a person address"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a person address",
          "description": "Update an existing address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "personAddress"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a person email address",
          "description": "Add an email address to a person"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a person email address",
          "description": "Retrieve a person email address"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a person email address",
          "description": "Update an existing email address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "personEmailAddress"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "description": "Retrieve a project"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many projects",
          "description": "Retrieve a list of projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a source",
          "description": "Retrieve a source"
        },
        {
          "name": "Get Many",
          "value": "list",
          "action": "Get many sources",
          "description": "Retrieve a list of sources"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "source"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a communication",
      "description": "Add a communication entry for a person",
      "resource": "communication"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a communication",
      "description": "Delete a communication permanently",
      "resource": "communication"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a communication",
      "description": "Retrieve a communication",
      "resource": "communication"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many communications",
      "description": "Retrieve a list of communication entries",
      "resource": "communication"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a communication",
      "description": "Update an existing communication entry",
      "resource": "communication"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a donation",
      "description": "Retrieve a donation",
      "resource": "donation"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many donations",
      "description": "Retrieve a list of donations",
      "resource": "donation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a donation type",
      "description": "Retrieve a donation type",
      "resource": "donationType"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many donation types",
      "description": "Retrieve a list of donation types",
      "resource": "donationType"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a person",
      "description": "Create a new person",
      "resource": "person"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a person",
      "description": "Retrieve a person",
      "resource": "person"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many persons",
      "description": "Retrieve a list of persons",
      "resource": "person"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a person",
      "description": "Update an existing person",
      "resource": "person"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a person address",
      "description": "Add an address to a person",
      "resource": "personAddress"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a person address",
      "description": "Retrieve a person address",
      "resource": "personAddress"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a person address",
      "description": "Update an existing address",
      "resource": "personAddress"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a person email address",
      "description": "Add an email address to a person",
      "resource": "personEmailAddress"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a person email address",
      "description": "Retrieve a person email address",
      "resource": "personEmailAddress"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a person email address",
      "description": "Update an existing email address",
      "resource": "personEmailAddress"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "description": "Retrieve a project",
      "resource": "project"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many projects",
      "description": "Retrieve a list of projects",
      "resource": "project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a source",
      "description": "Retrieve a source",
      "resource": "source"
    },
    {
      "name": "Get Many",
      "value": "list",
      "action": "Get many sources",
      "description": "Retrieve a list of sources",
      "resource": "source"
    }
  ]

npm_readme:
  # @fundraisingbox/n8n-nodes-fundraisingbox

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

  FundraisingBox is a donation and fundraising management platform that helps non-profit organizations collect and manage donations online.

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

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

  ## Installation

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

  ## Operations

  ### FundraisingBox (action node)

  #### Communication

  - **Create** – Create a new communication entry linked to a person. Requires Person ID and HTML message. Optional fields: type (note/email/phone/talk/letter), subject, direction (in/out), date, sticky.
  - **Delete** – Delete a communication entry permanently.
  - **Get** – Retrieve a single communication entry by ID.
  - **Get Many** – Retrieve a list of communications. Filter by Person ID, type, direction, and date range. Supports pagination.
  - **Update** – Update an existing communication entry by ID.

  #### Donation

  - **Get** – Retrieve a single donation by ID.
  - **Get Many** – Retrieve a list of donations. Filter by amount range, date range, updated range, project, type, source, person, test status, and various IDs. Supports pagination.

  #### Donation Type

  - **Get** – Retrieve a single donation type by ID.
  - **Get Many** – Retrieve a list of donation types. Supports pagination.

  #### Person

  FundraisingBox uses the term "Person" for what many tools call a Contact.

  - **Create** – Create a new person. Requires Last Name. First Name and additional fields (Company ID, External Person ID, Greeting, Info, Position, Salutation, Title) are optional.
  - **Get** – Retrieve a single person by their numeric ID.
  - **Get Many** – Retrieve a list of persons. Filter by salutation, first/last name, company, phone, email, address, tag IDs, person IDs, smart search ID, and created/updated date range. Supports pagination.
  - **Update** – Update an existing person by ID. All fields are optional.

  #### Person Address

  - **Create** – Create a new address for a person. Requires Person ID, street address, post code, city, and country. Optional fields: state, type (work/home/other), is main address.
  - **Get** – Retrieve a single address by ID.
  - **Update** – Update an existing address by ID. Updatable fields: street address, post code, city, state, country, type, is main address.

  #### Person Email Address

  - **Create** – Create a new email address for a person. Requires Person ID and email. Optional fields: type (work/home/other), is main email address.
  - **Get** – Retrieve a single email address by ID.
  - **Update** – Update an existing email address by ID. Updatable fields: email, type, is main email address.

  #### Project

  - **Get** – Retrieve a single project by ID.
  - **Get Many** – Retrieve a list of projects. Supports pagination.

  #### Source

  - **Get** – Retrieve a single source by ID.
  - **Get Many** – Retrieve a list of sources. Supports pagination.

  ### FundraisingBox Donation Trigger (polling trigger node)

  - **New Donation** – Triggers the workflow whenever a new confirmed donation appears. On first activation the node initialises its checkpoint to the latest donation and will only emit donations created after that point.

  ## Credentials

  FundraisingBox uses HTTP Basic Auth with an API key. To authenticate:

  1. Retrieve your API key by following the [FundraisingBox support article on connecting third-party systems via REST API](https://support.fundraisingbox.com/de/support/solutions/articles/79000147562-schnittstellen-zu-drittsystemen-herstellen-rest-api-webhooks-).
  2. In n8n, create a new **FundraisingBox API** credential.
  3. Paste your API key into the **API Key** field.

  The node sends the API key as the HTTP Basic Auth username (the password field is ignored by the API).

  ## Compatibility

  Requires **n8n 1.x**. The node uses `usableAsTool: true`, which requires n8n 1.31 or later.

  No known incompatibilities with current n8n versions.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [FundraisingBox API documentation](https://developer.fundraisingbox.com/reference/introduction-json)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of interactions with the FundraisingBox API, allowing non-profit organizations to manage donations, contacts, and communications programmatically.","capabilities":["Create, read, update, and delete communication entries (notes, emails, phone records, etc.)","Retrieve and filter donation data by amount, date, project, type, source, or person","Manage person/contact records including creation, updates, and filtering","Handle person addresses and email addresses (work/home/other types)","Retrieve donation type and project information","Retrieve source information","Poll for new confirmed donations via a trigger node"],"authentication":"API Key (HTTP Basic Auth - key used as username, password field ignored)","commonUseCases":["Automating donation follow-up emails based on donation status","Syncing donor data between FundraisingBox and other CRM systems","Triggering workflows when new donations are received","Managing contact records and communication history for non-profit campaigns"],"limitations":["Requires n8n 1.31 or later (due to usableAsTool: true requirement)","Password field in credentials is ignored; API key must be used as HTTP Basic Auth username","Limited to HTTP Basic Auth; OAuth2 or other methods not supported"],"relatedNodes":["n8n HTTP Request node","n8n Webhook node","n8n Trigger node (for donation polling)"]}


node_type: @camb-ai/n8n-nodes-cambai.cambAi
package_name: @camb-ai/n8n-nodes-cambai
display_name: Camb.ai
description: Use Camb.ai for TTS, transcription, translation, voice cloning, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: neilruaro-camb
author_github_url: https://github.com/camb-ai/n8n-nodes-cambai.git
npm_package_name: @camb-ai/n8n-nodes-cambai
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:35.824Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "audio",
      "options": [
        {
          "name": "Audio",
          "value": "audio",
          "description": "Generate or process audio"
        },
        {
          "name": "Text",
          "value": "text",
          "description": "Translate or transcribe text"
        },
        {
          "name": "Voice",
          "value": "voice",
          "description": "Create or clone voices"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "synthesize",
      "options": [
        {
          "name": "Synthesize (TTS)",
          "value": "synthesize",
          "action": "Synthesize text to speech",
          "description": "Convert text to speech"
        },
        {
          "name": "Translated TTS",
          "value": "translatedTts",
          "action": "Translate and synthesize",
          "description": "Translate text and convert to speech"
        },
        {
          "name": "Generate Sound",
          "value": "generateSound",
          "action": "Generate sound from prompt",
          "description": "Generate sound or music from text prompt"
        },
        {
          "name": "Separate Audio",
          "value": "separateAudio",
          "action": "Separate audio components",
          "description": "Isolate speech from background audio"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "audio"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "transcribe",
      "options": [
        {
          "name": "Transcribe",
          "value": "transcribe",
          "action": "Transcribe audio to text",
          "description": "Convert speech to text"
        },
        {
          "name": "Translate",
          "value": "translate",
          "action": "Translate text",
          "description": "Translate text between languages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "text"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listVoices",
      "options": [
        {
          "name": "Clone Voice",
          "value": "cloneVoice",
          "action": "Clone voice from audio",
          "description": "Clone a voice from an audio sample"
        },
        {
          "name": "Create From Description",
          "value": "createVoice",
          "action": "Create voice from description",
          "description": "Create a voice from text description"
        },
        {
          "name": "List Voices",
          "value": "listVoices",
          "action": "List available voices",
          "description": "Get all available voices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voice"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Synthesize (TTS)",
      "value": "synthesize",
      "action": "Synthesize text to speech",
      "description": "Convert text to speech",
      "resource": "audio"
    },
    {
      "name": "Translated TTS",
      "value": "translatedTts",
      "action": "Translate and synthesize",
      "description": "Translate text and convert to speech",
      "resource": "audio"
    },
    {
      "name": "Generate Sound",
      "value": "generateSound",
      "action": "Generate sound from prompt",
      "description": "Generate sound or music from text prompt",
      "resource": "audio"
    },
    {
      "name": "Separate Audio",
      "value": "separateAudio",
      "action": "Separate audio components",
      "description": "Isolate speech from background audio",
      "resource": "audio"
    },
    {
      "name": "Transcribe",
      "value": "transcribe",
      "action": "Transcribe audio to text",
      "description": "Convert speech to text",
      "resource": "text"
    },
    {
      "name": "Translate",
      "value": "translate",
      "action": "Translate text",
      "description": "Translate text between languages",
      "resource": "text"
    },
    {
      "name": "Clone Voice",
      "value": "cloneVoice",
      "action": "Clone voice from audio",
      "description": "Clone a voice from an audio sample",
      "resource": "voice"
    },
    {
      "name": "Create From Description",
      "value": "createVoice",
      "action": "Create voice from description",
      "description": "Create a voice from text description",
      "resource": "voice"
    },
    {
      "name": "List Voices",
      "value": "listVoices",
      "action": "List available voices",
      "description": "Get all available voices",
      "resource": "voice"
    }
  ]

npm_readme:
  # @camb-ai/n8n-nodes-cambai

  This is an n8n community node for [Camb.ai](https://camb.ai) - an AI-powered audio platform providing text-to-speech, voice cloning, transcription, translation, and more.

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

  ## Installation

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

  ## Operations

  ### Audio
  - **Synthesize (TTS)** - Convert text to speech using MARS models (flash, pro, instruct)
  - **Translated TTS** - Translate text and synthesize speech in one step
  - **Generate Sound** - Generate sound effects or music from text prompts
  - **Separate Audio** - Isolate foreground (vocals) from background audio

  ### Text
  - **Transcribe** - Convert speech to text with timestamps and speaker identification
  - **Translate** - Translate text between languages

  ### Voice
  - **Clone Voice** - Create a custom voice from an audio sample
  - **Create from Description** - Generate a voice from a text description
  - **List Voices** - Get all available voices

  ## Credentials

  You need a Camb.ai API key to use this node. Get your API key from [Camb.ai](https://studio.camb.ai).

  ## Compatibility

  - Requires n8n version 1.0.0 or later
  - Tested with n8n version 2.2.0

  ## Resources

  - [Camb.ai Documentation](https://docs.camb.ai)
  - [Camb.ai API Reference](https://docs.camb.ai/api-reference)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Camb.ai for audio processing tasks including text-to-speech, transcription, translation, voice cloning, and audio separation.","capabilities":["Text-to-speech synthesis using MARS models (flash, pro, instruct)","Translated text-to-speech (translate and synthesize in one step)","Sound effect and music generation from text prompts","Audio foreground/background separation","Speech-to-text transcription with timestamps and speaker ID","Text translation between languages","Custom voice cloning from audio samples","Voice generation from text descriptions","List available voices"],"authentication":"API key required (obtained from Camb.ai studio)","commonUseCases":["Automated content generation with natural-sounding voices","Audio file processing and cleanup","Multilingual content translation and speech synthesis","Voice cloning for personalized audio experiences","Transcription of spoken content for workflows"],"limitations":["Requires n8n version 1.0.0 or later","Community node (may have fewer updates than official nodes)"],"relatedNodes":["n8n HTTP Request","n8n Code","n8n Split In Batches"]}


node_type: n8n-nodes-merge.mergeAgentHandler
package_name: n8n-nodes-merge
display_name: Merge Agent Handler
description: Manage Merge Agent Handler resources — registered users, tool packs, connectors, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: experience-team
author_github_url: https://github.com/merge-api/
npm_package_name: n8n-nodes-merge
npm_version: 0.2.5
community_fetched_at: 2026-04-16T09:43:35.826Z
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "registeredUser",
      "options": [
        {
          "name": "Audit Log",
          "value": "auditLog"
        },
        {
          "name": "Connector",
          "value": "connector"
        },
        {
          "name": "Credential",
          "value": "credential"
        },
        {
          "name": "Link Token",
          "value": "linkToken"
        },
        {
          "name": "Registered User",
          "value": "registeredUser"
        },
        {
          "name": "Tool Pack",
          "value": "toolPack"
        },
        {
          "name": "Tool Search",
          "value": "toolSearch"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create registered user",
          "description": "Create a new registered user"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete registered user",
          "description": "Delete a registered user permanently"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get registered user",
          "description": "Retrieve a registered user"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many registered users",
          "description": "Retrieve a list of registered users"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update registered user",
          "description": "Update a registered user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "registeredUser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create tool pack",
          "description": "Create a new tool pack"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete tool pack",
          "description": "Delete a tool pack permanently"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get tool pack",
          "description": "Retrieve a tool pack"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tool packs",
          "description": "Retrieve a list of tool packs"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update tool pack",
          "description": "Update a tool pack"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "toolPack"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get connector",
          "description": "Retrieve a connector"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many connectors",
          "description": "Retrieve a list of connectors"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connector"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Generate link token",
          "description": "Generate a link token for connector authentication"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkToken"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "delete",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete credential",
          "description": "Delete a credential permanently"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credential"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many audit log events",
          "description": "Retrieve a list of audit log events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auditLog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search for tools",
          "description": "Search for tools by intent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "toolSearch"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create registered user",
      "description": "Create a new registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete registered user",
      "description": "Delete a registered user permanently",
      "resource": "registeredUser"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get registered user",
      "description": "Retrieve a registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many registered users",
      "description": "Retrieve a list of registered users",
      "resource": "registeredUser"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update registered user",
      "description": "Update a registered user",
      "resource": "registeredUser"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create tool pack",
      "description": "Create a new tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete tool pack",
      "description": "Delete a tool pack permanently",
      "resource": "toolPack"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get tool pack",
      "description": "Retrieve a tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tool packs",
      "description": "Retrieve a list of tool packs",
      "resource": "toolPack"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update tool pack",
      "description": "Update a tool pack",
      "resource": "toolPack"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get connector",
      "description": "Retrieve a connector",
      "resource": "connector"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many connectors",
      "description": "Retrieve a list of connectors",
      "resource": "connector"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Generate link token",
      "description": "Generate a link token for connector authentication",
      "resource": "linkToken"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete credential",
      "description": "Delete a credential permanently",
      "resource": "credential"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many audit log events",
      "description": "Retrieve a list of audit log events",
      "resource": "auditLog"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search for tools",
      "description": "Search for tools by intent",
      "resource": "toolSearch"
    }
  ]

npm_readme:
  # n8n-nodes-merge

  Community nodes for [n8n](https://n8n.io/) that integrate with [Merge Agent Handler](https://merge.dev/agent-handler).

  This package provides two nodes:

  - **Merge Agent Handler** — Manage Merge resources (registered users, tool packs, connectors, and more) directly from n8n workflows
  - **Merge Agent Handler MCP** — Connect to Merge Tool Packs via MCP to call integration tools, either standalone or as an AI agent tool

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

  [Installation](#installation) |
  [Nodes](#nodes) |
  [Key Concepts](#key-concepts) |
  [Credentials](#credentials) |
  [Compatibility](#compatibility) |
  [Resources](#resources)

  ## Installation

  ### Self-hosted n8n

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

  ```
  n8n-nodes-merge
  ```

  ### n8n Cloud

  1. Go to **Settings > Community Nodes**
  2. Select **Install a community node**
  3. Enter `n8n-nodes-merge`
  4. Agree to the risks and click **Install**

  ## Nodes

  ### Merge Agent Handler

  A standard n8n node for managing Merge Agent Handler resources through the REST API. Use this node to set up and configure your Merge environment directly from n8n workflows — create registered users, manage tool packs, generate link tokens, and more.

  #### Resources & Operations

  | Resource | Operations |
  |----------|-----------|
  | Registered User | Create, Get, List, Update, Delete |
  | Tool Pack | Create, Get, List, Update, Delete |
  | Connector | List, Get |
  | Link Token | Create |
  | Credential | Delete |
  | Audit Log | List |
  | Tool Search | Search |

  #### Setup

  1. Add the **Merge Agent Handler** node to your workflow
  2. Create or select your **Merge Agent Handler API** credential (see [Credentials](#credentials))
  3. Select a **Resource** (e.g., Registered User, Tool Pack)
  4. Select an **Operation** (e.g., Create, List, Get)
  5. Fill in the required fields for that operation

  #### Example: Create a Registered User

  1. Set **Resource** to `Registered User`
  2. Set **Operation** to `Create`
  3. Enter an **Origin User ID** (your system's user identifier)
  4. Enter an **Origin User Name** (display name)
  5. Select a **User Type** (Human or System)
  6. Execute the node — the output contains the created user's ID and details

  ![Create Registered User configuration](docs/images/create_registered_user.png)

  You can wire this node's output into subsequent nodes. For example, pipe the registered user ID into a Merge Agent Handler MCP node using an expression like `{{ $json.id }}`.

  ---

  ### Merge Agent Handler MCP

  Connects to a Merge Agent Handler Tool Pack via [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) and calls integration tools. This node supports two usage modes: **with an AI agent** and **standalone**.

  #### Mode 1: With an AI Agent

  Connect the MCP node to an AI Agent node's **Tool** input. The agent automatically discovers all available tools in the Tool Pack and calls them as needed during a conversation.

  1. Add an **AI Agent** node to your workflow
  2. Click **Add Tool** on the agent and select **Merge Agent Handler MCP**
  3. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  4. The agent now has access to all tools in the selected Tool Pack

  ![Merge Agent Handler MCP connected to an AI Agent](docs/images/connect-node.png)

  The agent uses the Merge Search Tools API to discover relevant tools based on natural-language intent. On the first call, it receives a list of up to 20 matching tools and selects the best one. On the second call, it executes the selected tool directly.

  When a connector requires authentication, the `authenticate_*` tools appear in the search results. The agent calls the authenticate tool and returns a magic link URL. The user clicks the link to complete OAuth, and subsequent tool calls work with the authenticated connection.

  #### Mode 2: Standalone

  Use the MCP node directly in a workflow to call a specific tool without an AI agent.

  1. Add the **Merge Agent Handler MCP** node to your workflow
  2. Configure the credential, **Tool Pack**, **Environment**, and **Registered User**
  3. Select a **Tool Name** from the dropdown (tools are loaded from the Tool Pack)
  4. Enter **Arguments (JSON)** if the tool requires input parameters
  5. Execute the node — the output contains the tool's response

  ![Merge Agent Handler MCP in standalone mode](docs/images/standalone.png)

  ##### Authenticating connectors in standalone mode

  If a connector hasn't been authenticated yet for the selected registered user:

  1. Select the `authenticate_*` tool for that connector (e.g., `authenticate_linear`)
  2. Execute the node
  3. Copy the **magic link URL** from the output and open it in a browser
  4. Complete the OAuth flow
  5. Refresh the **Tool Name** dropdown to see the full list of available tools

  ![Authenticate connector output with magic link](docs/images/authenticate_connector.png)

  ## Key Concepts

  **Tool Packs** are bundles of connectors that define which third-party integrations your AI agent can access. Each Tool Pack contains one or more connectors (e.g., Greenhouse, Salesforce, Jira) and exposes their capabilities as tools that can be called. You can create and manage Tool Packs using the **Merge Agent Handler** node in n8n or in the [Merge Agent Handler dashboard](https://ah.merge.dev/tool-packs).

  ![Creating a Tool Pack in the Merge dashboard](docs/images/create-tool-pack.png)

  **Registered Users** represent the identities whose third-party accounts have been authenticated with Merge. A Registered User can be an end user in your system or a system-level service account. When a tool is called, it acts on behalf of a specific Registered User — using their authenticated connections to read or write data in the connected services. You manage Registered Users in the [Merge Agent Handler dashboard](https://ah.merge.dev/registered-users).

  ![Adding a Registered User in the Merge dashboard](docs/images/add-registered-user.png)

  ## Prerequisites

  1. A [Merge Agent Handler](https://ah.merge.dev/) account
  2. An API key (Production or Test Access Key) from the Merge Agent Handler dashboard
  3. At least one [Tool Pack](https://ah.merge.dev/tool-packs) created with connectors configured (can be created via the Merge Agent Handler node or the dashboard)
  4. At least one [Registered User](https://ah.merge.dev/registered-users) (can be created via the Merge Agent Handler node or the dashboard)

  ## Credentials

  ### Merge Agent Handler API

  To authenticate with Merge Agent Handler:

  1. Log in to the [Merge Agent Handler dashboard](https://ah.merge.dev/)
  2. Navigate to **Settings > API Keys**
  3. Copy your **Production** or **Test Access Key**
  4. In n8n, create a new **Merge Agent Handler API** credential and paste the key

  Both nodes share the same credential.

  ## Compatibility

  - Requires n8n version 1.50.0 or later
  - Tested with n8n v2.9.4

  ## Resources

  - [Merge](https://merge.dev/)
  - [Merge Agent Handler Documentation](https://docs.ah.merge.dev/Overview/Agent-Handler-intro)
  - [Merge Agent Handler API Reference](https://docs.ah.merge.dev/api-reference/overview)
  - [Merge Agent Handler Dashboard](https://ah.merge.dev/)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)


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

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

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

npm_readme:
  # n8n-nodes-msdefender

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

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

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

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

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

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

  ## Installation

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

  ## Operations

  ### Defender for Endpoint

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

  ### Defender XDR

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

  ## Triggers

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

  ## Credentials

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

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


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

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

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

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

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

  ## Compatibility

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

  ## Usage

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

  ## Resources

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

  ## Version history

  [Changelog](./CHANGELOG.md)

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


