# nodes

node_type: @useinsider/n8n-nodes-insiderone.insiderOne
package_name: @useinsider/n8n-nodes-insiderone
display_name: Insider One
description: Interact with Insider One APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: useinsider-dev
author_github_url: https://github.com/useinsider/n8n-nodes-insiderone.git
npm_package_name: @useinsider/n8n-nodes-insiderone
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:34.597Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "userData",
      "options": [
        {
          "name": "User Data",
          "value": "userData"
        },
        {
          "name": "Data Governance",
          "value": "dataGovernance"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upsert",
      "options": [
        {
          "name": "Create or Update",
          "value": "upsert",
          "action": "Upsert user data",
          "description": "Create a new record, or update the current one if it already exists (upsert)"
        },
        {
          "name": "Delete Identifiers",
          "value": "deleteIdentifiers",
          "action": "Delete identifiers",
          "description": "Delete one or more identifiers from a user profile"
        },
        {
          "name": "Delete User Attribute",
          "value": "deleteAttribute",
          "action": "Delete user attribute",
          "description": "Delete one or more attributes from a user profile"
        },
        {
          "name": "Export Raw Data",
          "value": "export",
          "action": "Export raw data",
          "description": "Export raw user data from Insider One"
        },
        {
          "name": "Get User Profiles",
          "value": "getProfile",
          "action": "Get user profiles",
          "description": "Query user profile information"
        },
        {
          "name": "Update Identifiers",
          "value": "updateIdentifiers",
          "action": "Update identifiers",
          "description": "Update an existing identifier to a new value"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteUserProfile",
      "options": [
        {
          "name": "Delete User Profile",
          "value": "deleteUserProfile",
          "action": "Delete user profile",
          "description": "Permanently delete a user profile"
        },
        {
          "name": "Delete User's PII Data",
          "value": "anonymizeUser",
          "action": "Delete user PII data",
          "description": "Anonymize a user's PII data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataGovernance"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create or Update",
      "value": "upsert",
      "action": "Upsert user data",
      "description": "Create a new record, or update the current one if it already exists (upsert)",
      "resource": "userData"
    },
    {
      "name": "Delete Identifiers",
      "value": "deleteIdentifiers",
      "action": "Delete identifiers",
      "description": "Delete one or more identifiers from a user profile",
      "resource": "userData"
    },
    {
      "name": "Delete User Attribute",
      "value": "deleteAttribute",
      "action": "Delete user attribute",
      "description": "Delete one or more attributes from a user profile",
      "resource": "userData"
    },
    {
      "name": "Export Raw Data",
      "value": "export",
      "action": "Export raw data",
      "description": "Export raw user data from Insider One",
      "resource": "userData"
    },
    {
      "name": "Get User Profiles",
      "value": "getProfile",
      "action": "Get user profiles",
      "description": "Query user profile information",
      "resource": "userData"
    },
    {
      "name": "Update Identifiers",
      "value": "updateIdentifiers",
      "action": "Update identifiers",
      "description": "Update an existing identifier to a new value",
      "resource": "userData"
    },
    {
      "name": "Delete User Profile",
      "value": "deleteUserProfile",
      "action": "Delete user profile",
      "description": "Permanently delete a user profile",
      "resource": "dataGovernance"
    },
    {
      "name": "Delete User's PII Data",
      "value": "anonymizeUser",
      "action": "Delete user PII data",
      "description": "Anonymize a user's PII data",
      "resource": "dataGovernance"
    }
  ]

npm_readme:
  <p align="center">
    <img src="https://github.com/user-attachments/assets/f890fc86-84c4-4a3f-9fcf-9dcea64bafa3" alt="Insider One"/>
  </p>

  # n8n-nodes-insiderone

  An [n8n](https://n8n.io/) community node package that integrates with [Insider One](https://insiderone.com/). It enables seamless data flow between n8n workflows and Insider — covering the full range of [Insider One APIs](https://academy.insiderone.com/docs/insider-one-apis), from user data unification to data governance.

  ## Installation

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

  ```
  @useinsider/n8n-nodes-insiderone
  ```

  ## Credentials

  1. Log in to [Inone](https://inone.useinsider.com/).
  2. Open **Settings → Integration Settings**.
  3. Generate a **Unified Customer Database API Token**.
  4. In n8n, create **Insider One Unification API** credentials, then enter your Inone Name and paste the API token.

  ## Operations

  ### User Data

  | Operation | Description |
  |-----------|-------------|
  | **Create or Update** | Upsert a user profile with attributes and/or events. Supports batching of multiple input items into a single API call. |
  | **Get User Profiles** | Query user profile information by identifier. Returns selected attributes and events. |
  | **Update Identifiers** | Replace an existing identifier (e.g. email) with a new value. |
  | **Delete Identifiers** | Remove one or more identifiers from a user profile. |
  | **Delete User Attribute** | Remove specific attributes — fully or partial values — from a user profile. |
  | **Export Raw Data** | Export segment data asynchronously in CSV, JSON, or Parquet format. |

  ### Data Governance

  | Operation | Description |
  |-----------|-------------|
  | **Delete User Profile** | Permanently delete a user profile. |
  | **Delete User's PII Data** | Anonymize a user's personally identifiable information. |

  All operations support both a structured UI mode and a raw **JSON parameters** mode for advanced use cases. Identifiers (`email`, `uuid`, `phone_number`, `insider_id`, custom) can be combined as needed.

  ## Resources

  - [Insider One](https://insiderone.com/)
  - [Insider One API Reference](https://academy.insiderone.com/docs/api-reference-welcome)
  - [n8n Documentation](https://docs.n8n.io/)

  ## Support

  - [GitHub Issues](https://github.com/useinsider/n8n-nodes-insiderone/issues)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Integrates n8n workflows with Insider One APIs, enabling user data management and data governance actions across Insider One. It supports the full range of Insider One APIs for tasks like profile upserts, identifier updates, exports, and PII/privacy operations.","capabilities":["Create or Update user profiles with attributes and/or events","Batch multiple input items into a single upsert API call","Get user profiles by identifier and return selected attributes/events","Update identifiers (for example email) to new values","Delete one or more identifiers from a user profile","Delete user attributes, including full or partial values","Export raw segment data asynchronously in CSV, JSON, or Parquet format","Delete user profiles permanently","Anonymize a user's personally identifiable information","Use structured UI mode or raw JSON parameters mode"],"authentication":"API token required: generate a Unified Customer Database API Token in Insider One (Inone) and configure it in n8n Insider One Unification API credentials along with the Inone name.","commonUseCases":["Sync customer profiles between n8n and Insider One","Update user identifiers and attributes from external systems","Export Insider One segment data for downstream processing","Perform privacy and governance actions such as deleting profiles or anonymizing PII","Send user events and profile updates in batch from workflow automations"],"limitations":[],"relatedNodes":["n8n community nodes","Insider One API"]}


node_type: n8n-nodes-unlimited-messaging.unlimitedMessaging
package_name: n8n-nodes-unlimited-messaging
display_name: Unlimited Messaging
description: Send and receive WhatsApp messages via the Unlimited Messaging API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ilianazz
author_github_url: https://github.com/UnlimitedMessaging/unlimited-messaging-sdk.git
npm_package_name: n8n-nodes-unlimited-messaging
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:34.598Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "SIM",
          "value": "sim"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a message",
          "description": "Get a message by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List messages",
          "description": "List messages with optional filters"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a message",
          "description": "Send a WhatsApp message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List SIMs",
          "description": "List all linked SIM cards (WhatsApp accounts)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sim"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a message",
      "description": "Get a message by ID",
      "resource": "message"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List messages",
      "description": "List messages with optional filters",
      "resource": "message"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a message",
      "description": "Send a WhatsApp message",
      "resource": "message"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List SIMs",
      "description": "List all linked SIM cards (WhatsApp accounts)",
      "resource": "sim"
    }
  ]

npm_readme:
  # n8n-nodes-unlimited-messaging

  Official [n8n](https://n8n.io) community node for the [Unlimited Messaging](https://unlimitedmessaging.app) API — send and receive WhatsApp messages directly in your n8n workflows.

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-unlimited-messaging?style=flat-square&color=cb0000)](https://www.npmjs.com/package/n8n-nodes-unlimited-messaging)
  [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-unlimited-messaging?style=flat-square&color=cb0000)](https://www.npmjs.com/package/n8n-nodes-unlimited-messaging)
  [![npm total downloads](https://img.shields.io/npm/dt/n8n-nodes-unlimited-messaging?style=flat-square&label=total%20downloads&color=cb0000)](https://www.npmjs.com/package/n8n-nodes-unlimited-messaging)
  [![Bundle size](https://img.shields.io/bundlephobia/minzip/n8n-nodes-unlimited-messaging?style=flat-square&label=gzipped)](https://bundlephobia.com/package/n8n-nodes-unlimited-messaging)
  [![CI](https://img.shields.io/github/actions/workflow/status/unlimitedmessaging/unlimited-messaging-sdk/release.yml?style=flat-square&label=CI)](https://github.com/unlimitedmessaging/unlimited-messaging-sdk/actions/workflows/release.yml)
  [![License](https://img.shields.io/npm/l/n8n-nodes-unlimited-messaging?style=flat-square)](https://github.com/unlimitedmessaging/unlimited-messaging-sdk/blob/main/LICENSE)
  [![Socket](https://socket.dev/api/badge/npm/package/n8n-nodes-unlimited-messaging)](https://socket.dev/npm/package/n8n-nodes-unlimited-messaging)

  - **Website:** [unlimitedmessaging.app](https://unlimitedmessaging.app)
  - **Docs:** [docs.unlimitedmessaging.app](https://docs.unlimitedmessaging.app)
  - **API reference:** [api.unlimitedmessaging.app](https://api.unlimitedmessaging.app)
  - **GitHub:** [unlimitedmessaging/unlimited-messaging-sdk](https://github.com/unlimitedmessaging/unlimited-messaging-sdk)
  - **npm:** [n8n-nodes-unlimited-messaging](https://www.npmjs.com/package/n8n-nodes-unlimited-messaging)


  ## Installation

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

  ```text
  n8n-nodes-unlimited-messaging
  ```

  Or with the n8n CLI:

  ```bash
  n8n community install n8n-nodes-unlimited-messaging
  ```

  ## Credentials

  1. Go to [app.unlimitedmessaging.app](https://app.unlimitedmessaging.app) and generate an API token.
  2. In n8n, add a new credential of type **Unlimited Messaging API** and paste your token.
  3. Click **Test** to verify it works — it calls `GET /sim` and returns a 200 if the token is valid.

  ## Supported operations

  ### Message

  | Operation | Description                                               |
  | --------- | --------------------------------------------------------- |
  | **Send**  | Send a WhatsApp message to a phone number                 |
  | **Get**   | Retrieve a message by ID                                  |
  | **List**  | List messages with optional filters (status, SIM, search) |

  ### SIM

  | Operation | Description                                   |
  | --------- | --------------------------------------------- |
  | **List**  | List all linked WhatsApp accounts (SIM cards) |

  ## Send a message

  ```text
  Resource:    Message
  Operation:   Send
  Recipient:   +33612345678
  Text:        Hello from n8n!
  SIM ID:      (optional — leave empty to auto-select)
  ```

  ## List messages

  ```text
  Resource:    Message
  Operation:   List
  Return All:  true         ← auto-paginates through all pages
  Filters:
    Status:    DELIVERED
    Search:    invoice
  ```

  ## Links

  - [Unlimited Messaging Dashboard](https://app.unlimitedmessaging.app)
  - [API Documentation](https://docs.unlimitedmessaging.app)
  - [npm package](https://www.npmjs.com/package/n8n-nodes-unlimited-messaging)
  - [Source code](https://github.com/unlimitedmessaging/unlimited-messaging-sdk/tree/main/sdk/n8n)
  - [Report an issue](https://github.com/unlimitedmessaging/unlimited-messaging-sdk/issues)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Sends and receives WhatsApp messages in n8n using the Unlimited Messaging API. It supports managing messages and linked SIM/WhatsApp accounts directly from workflows.","capabilities":["Send WhatsApp messages to a phone number","Retrieve a message by ID","List messages with optional filters such as status, SIM, and search","List linked WhatsApp accounts (SIM cards)","Auto-paginate through message lists when Return All is enabled"],"authentication":"API token required; generate a token from app.unlimitedmessaging.app and store it in the n8n credential type 'Unlimited Messaging API'.","commonUseCases":["Automating outbound WhatsApp notifications and alerts","Fetching and filtering WhatsApp message history","Selecting or checking connected WhatsApp SIM accounts","Building workflows that react to message status or content"],"limitations":["The README only documents Send, Get, and List operations for messages, plus List for SIMs","SIM selection for sending is optional; if not provided, the node auto-selects a SIM"],"relatedNodes":[]}


node_type: @llamaindex/n8n-nodes-llamacloud.llamaParsePlatform
package_name: @llamaindex/n8n-nodes-llamacloud
display_name: LlamaParse Platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: emanuelclferreira
author_github_url: https://github.com/run-llama/n8n-llamacloud.git
npm_package_name: @llamaindex/n8n-nodes-llamacloud
npm_version: 6.7.2
community_fetched_at: 2026-07-14T14:40:34.599Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Parse, classify, split, extract structured data, and retrieve context from documents and indexes using the LlamaParse Platform

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "parse",
      "options": [
        {
          "name": "Classify a Document",
          "value": "classify",
          "action": "Classify a document",
          "description": "Classify a document into one of your defined categories"
        },
        {
          "name": "Extract Structured Data",
          "value": "extract",
          "action": "Extract structured data from a document",
          "description": "Extract structured data from a document using an inline schema or a saved LlamaExtract configuration"
        },
        {
          "name": "Parse a Document",
          "value": "parse",
          "action": "Parse a document",
          "description": "Parse a document into clean text or Markdown"
        },
        {
          "name": "Retrieve Context From an Index",
          "value": "retrieveIndex",
          "action": "Retrieve context from an index",
          "description": "Retrieve context from a LlamaCloud Index using the /api/v1/retrieval/retrieve endpoint"
        },
        {
          "name": "Split a Document",
          "value": "split",
          "action": "Split a document",
          "description": "Split a document into segments by category"
        },
        {
          "name": "Upload a File",
          "value": "uploadFile",
          "action": "Upload a file",
          "description": "Upload a file to the LlamaParse Platform so it can be reused across operations"
        }
      ],
      "displayName": "Action",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Classify a Document",
      "value": "classify",
      "action": "Classify a document",
      "description": "Classify a document into one of your defined categories"
    },
    {
      "name": "Extract Structured Data",
      "value": "extract",
      "action": "Extract structured data from a document",
      "description": "Extract structured data from a document using an inline schema or a saved LlamaExtract configuration"
    },
    {
      "name": "Parse a Document",
      "value": "parse",
      "action": "Parse a document",
      "description": "Parse a document into clean text or Markdown"
    },
    {
      "name": "Retrieve Context From an Index",
      "value": "retrieveIndex",
      "action": "Retrieve context from an index",
      "description": "Retrieve context from a LlamaCloud Index using the /api/v1/retrieval/retrieve endpoint"
    },
    {
      "name": "Split a Document",
      "value": "split",
      "action": "Split a document",
      "description": "Split a document into segments by category"
    },
    {
      "name": "Upload a File",
      "value": "uploadFile",
      "action": "Upload a file",
      "description": "Upload a file to the LlamaParse Platform so it can be reused across operations"
    }
  ]

npm_readme:
  # n8n LlamaParse Platform node

  This repository contains a custom n8n community node for integrating with the [LlamaParse Platform](https://cloud.llamaindex.ai/?utm_source=demo&utm_medium=n8n), bringing document parsing, classification, splitting, structured extraction, and index retrieval into your n8n workflows.

  The package ships a single node — **LlamaParse Platform** — exposing five resources that map to the LlamaParse Platform APIs.

  ## 🚀 Resources

  The **LlamaParse Platform** node lets you pick a resource from a dropdown, then choose an operation. All resources share the same [`LlamaParse API` credential](./credentials/LlamaParseApi.credentials.ts).

  ### 📄 [Parse](./guides/llamaparse.md)
  Parse documents (PDF, DOCX, PPTX, images, etc.) into clean text or Markdown. Supports four tiers — `fast`, `cost_effective`, `agentic`, and `agentic_plus` — and pinned parser versions.

  - Input: binary file (from any previous node)
  - Output: `{ text: string }` (Markdown when available, otherwise plain text)

  ### 🏷️ [Classify](./guides/llamaclassify.md)
  Route a document into one of a set of user-defined categories. You provide a list of `{ category, description }` rules and get back the predicted category along with confidence and reasoning.

  - Input: binary file + classification rules
  - Output: `{ category, reasons, confidence }`

  ### ✂️ [Split](./guides/llamasplit.md)
  Split a multi-section document into segments using semantic categories you define (e.g. "invoice", "contract", "appendix"). You can choose how uncategorized content is handled (`include` / `forbid` / `omit`).

  - Input: binary file + categories
  - Output: one item per segment, with `{ category, confidence, pages }`

  ### ⚗️ [Extract](./guides/llamaextract.md)
  Run a pre-configured LlamaExtract agent against a file to get back structured JSON matching your schema.

  - Input: binary file + Extraction Configuration ID
  - Output: `{ result: <stringified JSON> }`

  ### 🔎 Retrieve ([Index v1](./guides/llamacloud_index.md) · [Index v2](./guides/llamacloud_indexv2.md))
  Query a LlamaCloud index/pipeline and return the top-k retrieved chunks. Works against both the v1 Pipelines API and the newer v2 Index Retrieval API — ideal for RAG flows with the n8n AI Agent / Chat Trigger nodes.

  - Input: `indexId`, `query` (defaults to `{{ $json.chatInput }}`), `topK`
  - Output: `{ context: string[] }`

  > The node is also marked `usableAsTool: true`, so any of the resources above can be wired into an n8n AI Agent as a tool.

  ## 📋 Prerequisites

  1. **Node.js ≥ 20** — install via [nvm](https://github.com/nvm-sh/nvm) on Linux/macOS/WSL or the [Microsoft guide](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows) on Windows.
  2. **n8n** installed globally:
     ```bash
     npm install n8n -g
     ```
  3. A **LlamaParse Platform API key** — sign up at [cloud.llamaindex.ai](https://cloud.llamaindex.ai/?utm_source=demo&utm_medium=n8n) and copy the key from the dashboard.

  ## 🛠️ Installation

  ### Option 1 — Install from npm (recommended)

  ```bash
  npm install -g @llamaindex/n8n-nodes-llamacloud

  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom
  npm link @llamaindex/n8n-nodes-llamacloud

  n8n start
  ```

  ### Option 2 — Local development from source

  ```bash
  git clone https://github.com/run-llama/n8n-llamacloud.git
  cd n8n-llamacloud
  npm install
  npm run build
  npm link

  mkdir -p ~/.n8n/custom
  cd ~/.n8n/custom
  npm link @llamaindex/n8n-nodes-llamacloud

  n8n start
  ```

  ### Option 3 — Docker

  A `Dockerfile` and `compose.yaml` are provided at the repository root. See the [Docker guide](./guides/docker.md) for the full walkthrough.

  ## 🔧 Configuring credentials

  1. Open n8n (default: `http://localhost:5678`).
  2. Go to **Credentials** → **Add Credential** → search for **"LlamaParse API"**.
  3. Paste your API key. Optionally override the base URL (defaults to `https://api.cloud.llamaindex.ai`).
  4. Save.

  Full screenshots: [guides/index.md](./guides/index.md).

  ## 📚 Guides

  Step-by-step walkthroughs (with screenshots) for every resource live under [`guides/`](./guides/):

  - [Setup & credentials](./guides/index.md)
  - [Parse](./guides/llamaparse.md)
  - [Classify](./guides/llamaclassify.md)
  - [Split](./guides/llamasplit.md)
  - [Extract](./guides/llamaextract.md)
  - [Retrieve — Index v1](./guides/llamacloud_index.md)
  - [Retrieve — Index v2](./guides/llamacloud_indexv2.md)
  - [Run with Docker](./guides/docker.md)

  ## 🔗 References

  - [LlamaParse Platform](https://cloud.llamaindex.ai/?utm_source=demo&utm_medium=n8n)
  - [LlamaCloud documentation](https://developers.llamaindex.ai/llamaparse/?utm_source=demo&utm_medium=n8n)
  - [n8n documentation](https://docs.n8n.io/)
  - [n8n community](https://community.n8n.io/)

  ## 📝 License

  [MIT](./LICENSE.md)

ai_documentation_summary:
  {"purpose":"Integrates n8n with the LlamaParse Platform for document parsing, classification, splitting, structured data extraction, and retrieval from LlamaCloud indexes. It is designed to support document-processing and RAG workflows inside n8n.","capabilities":["Parse documents (PDF, DOCX, PPTX, images, etc.) into clean text or Markdown","Classify documents into user-defined categories with confidence and reasoning","Split multi-section documents into semantic segments based on custom categories","Extract structured JSON from documents using a configured LlamaExtract agent","Retrieve top-k context chunks from LlamaCloud indexes via Index v1 and Index v2","Can be used as a tool in n8n AI Agent workflows"],"authentication":"LlamaParse API key required (LlamaParse API credential); optional base URL override","commonUseCases":["Parsing uploaded documents into text for downstream automation","Routing or triaging documents by category","Splitting long documents into labeled sections for processing","Extracting structured data from documents into JSON","Retrieving relevant context for RAG workflows with AI Agent or Chat Trigger nodes"],"limitations":["Requires a binary file input for Parse, Classify, Split, and Extract operations","Split output depends on user-defined categories and only specifies handling for uncategorized content as include/forbid/omit","Extract requires a pre-configured LlamaExtract agent via an Extraction Configuration ID","Retrieve requires an indexId and uses topK-limited retrieval"],"relatedNodes":["n8n AI Agent","Chat Trigger"]}


node_type: n8n-nodes-crawlsnap.crawlSnap
package_name: n8n-nodes-crawlsnap
display_name: CrawlSnap
description: Query CrawlSnap data intelligence APIs (VectorSnap, PulseSnap, SubdoSnap)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: crawlsnap
author_github_url: https://github.com/crawlsnap/
npm_package_name: n8n-nodes-crawlsnap
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.600Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "vectorSnap",
      "options": [
        {
          "name": "VectorSnap",
          "value": "vectorSnap",
          "description": "IoC reputation enrichment for a URL, hash, IP, or domain"
        },
        {
          "name": "PulseSnap",
          "value": "pulseSnap",
          "description": "Threat-intelligence pulse enrichment for a URL, hash, IP, or domain"
        },
        {
          "name": "SubdoSnap",
          "value": "subdoSnap",
          "description": "Paginated subdomain enumeration for a domain"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "url",
      "options": [
        {
          "name": "Enrich URL",
          "value": "url",
          "action": "Enrich a URL",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/ioc/search/url",
              "method": "GET"
            }
          },
          "description": "Reputation, detections, categories, and relationships for a URL"
        },
        {
          "name": "Enrich Hash",
          "value": "hash",
          "action": "Enrich a file hash",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/ioc/search/hash",
              "method": "GET"
            }
          },
          "description": "File analysis for an MD5, SHA-1, or SHA-256 hash"
        },
        {
          "name": "Enrich IP",
          "value": "ip",
          "action": "Enrich an IP address",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/ioc/search/ip",
              "method": "GET"
            }
          },
          "description": "Reputation, WHOIS, ASN, and relationships for an IPv4 address"
        },
        {
          "name": "Enrich Domain",
          "value": "domain",
          "action": "Enrich a domain",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/ioc/search/domain",
              "method": "GET"
            }
          },
          "description": "Reputation, WHOIS, DNS, certificates, categories, and relationships"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vectorSnap"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "url",
      "options": [
        {
          "name": "Scan URL",
          "value": "url",
          "action": "Scan a URL",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/pulse-snap/scan/url",
              "method": "GET"
            }
          },
          "description": "Threat-intelligence pulse summary for a URL"
        },
        {
          "name": "Scan Hash",
          "value": "hash",
          "action": "Scan a file hash",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/pulse-snap/scan/hash",
              "method": "GET"
            }
          },
          "description": "Threat-intelligence pulse summary for a file hash"
        },
        {
          "name": "Scan IP",
          "value": "ip",
          "action": "Scan an IP address",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/pulse-snap/scan/ip",
              "method": "GET"
            }
          },
          "description": "Threat-intelligence pulse summary for an IP address"
        },
        {
          "name": "Scan Domain",
          "value": "domain",
          "action": "Scan a domain",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/pulse-snap/scan/domain",
              "method": "GET"
            }
          },
          "description": "Threat-intelligence pulse summary for a domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pulseSnap"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scan",
      "options": [
        {
          "name": "Scan Subdomains",
          "value": "scan",
          "action": "Enumerate subdomains for a domain",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/subdo-snap/scan",
              "method": "GET"
            }
          },
          "description": "Paginated subdomain enumeration for a domain"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subdoSnap"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Enrich URL",
      "value": "url",
      "action": "Enrich a URL",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/ioc/search/url",
          "method": "GET"
        }
      },
      "description": "Reputation, detections, categories, and relationships for a URL",
      "resource": "vectorSnap"
    },
    {
      "name": "Enrich Hash",
      "value": "hash",
      "action": "Enrich a file hash",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/ioc/search/hash",
          "method": "GET"
        }
      },
      "description": "File analysis for an MD5, SHA-1, or SHA-256 hash",
      "resource": "vectorSnap"
    },
    {
      "name": "Enrich IP",
      "value": "ip",
      "action": "Enrich an IP address",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/ioc/search/ip",
          "method": "GET"
        }
      },
      "description": "Reputation, WHOIS, ASN, and relationships for an IPv4 address",
      "resource": "vectorSnap"
    },
    {
      "name": "Enrich Domain",
      "value": "domain",
      "action": "Enrich a domain",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/ioc/search/domain",
          "method": "GET"
        }
      },
      "description": "Reputation, WHOIS, DNS, certificates, categories, and relationships",
      "resource": "vectorSnap"
    },
    {
      "name": "Scan URL",
      "value": "url",
      "action": "Scan a URL",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/pulse-snap/scan/url",
          "method": "GET"
        }
      },
      "description": "Threat-intelligence pulse summary for a URL",
      "resource": "pulseSnap"
    },
    {
      "name": "Scan Hash",
      "value": "hash",
      "action": "Scan a file hash",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/pulse-snap/scan/hash",
          "method": "GET"
        }
      },
      "description": "Threat-intelligence pulse summary for a file hash",
      "resource": "pulseSnap"
    },
    {
      "name": "Scan IP",
      "value": "ip",
      "action": "Scan an IP address",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/pulse-snap/scan/ip",
          "method": "GET"
        }
      },
      "description": "Threat-intelligence pulse summary for an IP address",
      "resource": "pulseSnap"
    },
    {
      "name": "Scan Domain",
      "value": "domain",
      "action": "Scan a domain",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/pulse-snap/scan/domain",
          "method": "GET"
        }
      },
      "description": "Threat-intelligence pulse summary for a domain",
      "resource": "pulseSnap"
    },
    {
      "name": "Scan Subdomains",
      "value": "scan",
      "action": "Enumerate subdomains for a domain",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/v1/subdo-snap/scan",
          "method": "GET"
        }
      },
      "description": "Paginated subdomain enumeration for a domain",
      "resource": "subdoSnap"
    }
  ]

npm_readme:
  # n8n-nodes-crawlsnap

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

  CrawlSnap is a data intelligence platform that delivers structured, on-demand
  data through fast, typed HTTP APIs. This node exposes the CrawlSnap data
  products as n8n operations:

  - **VectorSnap** — IoC reputation enrichment (reputation, detections,
    categories, relationships) for a url, hash, IP, or domain.
  - **PulseSnap** — threat-intelligence pulse enrichment for a url, hash, IP, or
    domain.
  - **SubdoSnap** — paginated subdomain enumeration for a domain.

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

  ## Installation

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

  In short: **Settings → Community Nodes → Install**, then enter
  `n8n-nodes-crawlsnap`.

  ## Credentials

  You need a CrawlSnap API key (starts with `sk-cs-`). Create and rotate keys
  from your [CrawlSnap dashboard](https://crawlsnap.com).

  In n8n, create a **CrawlSnap API** credential and paste your key. The node
  authenticates every request with `Authorization: Bearer <key>`.

  > The credential **Test** button performs one real IP lookup to validate the
  > key, which consumes a single request from your quota.

  ## Operations

  | Resource   | Operation         | Endpoint                      |
  | ---------- | ----------------- | ----------------------------- |
  | VectorSnap | Enrich URL        | `GET /v1/ioc/search/url`      |
  | VectorSnap | Enrich Hash       | `GET /v1/ioc/search/hash`     |
  | VectorSnap | Enrich IP         | `GET /v1/ioc/search/ip`       |
  | VectorSnap | Enrich Domain     | `GET /v1/ioc/search/domain`   |
  | PulseSnap  | Scan URL          | `GET /v1/pulse-snap/scan/url` |
  | PulseSnap  | Scan Hash         | `GET /v1/pulse-snap/scan/hash`|
  | PulseSnap  | Scan IP           | `GET /v1/pulse-snap/scan/ip`  |
  | PulseSnap  | Scan Domain       | `GET /v1/pulse-snap/scan/domain` |
  | SubdoSnap  | Scan Subdomains   | `GET /v1/subdo-snap/scan`     |

  Each operation takes a single **Query** (the indicator to look up). The node
  returns the unwrapped `data` payload of the CrawlSnap response envelope.

  ### Pagination (SubdoSnap)

  `Scan Subdomains` is paginated. When more results are available the response
  contains a non-empty `cursor`. Pass it back via the **Cursor** field to fetch
  the next page.

  ## Usage

  1. Add a **CrawlSnap** node to your workflow.
  2. Select a **Resource** (VectorSnap / PulseSnap / SubdoSnap) and **Operation**.
  3. Enter the **Query** — a URL, file hash, IPv4 address, or domain.
  4. Run. The node outputs the typed enrichment data.

  The node is also usable as a tool by the n8n AI Agent node.

  ## Compatibility

  Requires n8n with `n8nNodesApiVersion` 1 (n8n 1.x). Tested on Node.js 20+.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [CrawlSnap website](https://crawlsnap.com)
  - [CrawlSnap API reference](https://api.crawlsnap.com)

  ## Version history

  | Version | Changes                                                              |
  | ------- | ------------------------------------------------------------------- |
  | 0.1.0   | Initial release: VectorSnap, PulseSnap, and SubdoSnap operations.   |

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"CrawlSnap lets n8n workflows query CrawlSnap data intelligence APIs for structured enrichment and enumeration data. It provides typed access to VectorSnap, PulseSnap, and SubdoSnap endpoints for indicators, threat intelligence, and subdomains.","capabilities":["Enrich URLs, hashes, IPs, and domains with VectorSnap IoC reputation data","Scan URLs, hashes, IPs, and domains with PulseSnap threat-intelligence data","Enumerate subdomains for a domain with SubdoSnap","Handle paginated SubdoSnap results using a cursor","Return the unwrapped data payload from CrawlSnap responses","Use the node as a tool in the n8n AI Agent node"],"authentication":"CrawlSnap API key required; stored in an n8n CrawlSnap API credential and sent as Authorization: Bearer <key>","commonUseCases":["Threat intelligence enrichment of suspicious URLs, files, IPs, or domains","Checking reputation, detections, categories, and relationships for indicators of compromise","Enumerating subdomains for reconnaissance or asset discovery","Using CrawlSnap enrichment results inside AI Agent workflows"],"limitations":["SubdoSnap Scan Subdomains is paginated and may require passing a cursor to retrieve additional pages","Credential test consumes one real IP lookup request from the API quota","Requires n8nNodesApiVersion 1 (n8n 1.x)"],"relatedNodes":["n8n AI Agent","HTTP Request"]}


node_type: @scopebound/n8n-nodes-scopebound.scopebound
package_name: @scopebound/n8n-nodes-scopebound
display_name: Scopebound Scope Check
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main",
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: scopeboundai
author_github_url: https://github.com/scopebound-ai/n8n-nodes-scopebound.git
npm_package_name: @scopebound/n8n-nodes-scopebound
npm_version: 0.1.0-preview.9
community_fetched_at: 2026-07-14T14:40:34.601Z
description:
  Pre-execution scope enforcement: validates workflows against an agent role authorization scope before they run


node_type: n8n-nodes-bolten.bolten
package_name: n8n-nodes-bolten
display_name: Bolten
description: Interact with the Bolten CRM, WhatsApp and AI platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: renancpinheiro
author_github_url: https://github.com/renancpinheiro/
npm_package_name: n8n-nodes-bolten
npm_version: 0.2.8
community_fetched_at: 2026-07-14T14:40:34.602Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Project",
          "value": "project"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many projects",
          "description": "List many projects"
        },
        {
          "name": "Get Components",
          "value": "getComponents",
          "action": "Get project components",
          "description": "List components of a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "List many contacts"
        },
        {
          "name": "Get Schema",
          "value": "getSchema",
          "action": "Get contact schema",
          "description": "Get the dynamic field schema for contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Product",
          "value": "addProduct",
          "action": "Add product to opportunity",
          "description": "Add a product to an opportunity"
        },
        {
          "name": "Associate Contact",
          "value": "associateContact",
          "action": "Associate contact to opportunity",
          "description": "Link a contact to an opportunity"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an opportunity",
          "description": "Create an opportunity"
        },
        {
          "name": "Create Task",
          "value": "createTask",
          "action": "Create task on opportunity",
          "description": "Create a task on an opportunity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an opportunity",
          "description": "Delete an opportunity"
        },
        {
          "name": "Dissociate Contact",
          "value": "dissociateContact",
          "action": "Dissociate contact from opportunity",
          "description": "Remove the linked contact from an opportunity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an opportunity",
          "description": "Get an opportunity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many opportunities",
          "description": "List many opportunities"
        },
        {
          "name": "Get Schema",
          "value": "getSchema",
          "action": "Get opportunity schema",
          "description": "Get the dynamic field schema for opportunities"
        },
        {
          "name": "Remove Product",
          "value": "removeProduct",
          "action": "Remove product from opportunity",
          "description": "Remove a product from an opportunity"
        },
        {
          "name": "Remove Task",
          "value": "removeTask",
          "action": "Remove task from opportunity",
          "description": "Remove a task from an opportunity"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an opportunity",
          "description": "Update an opportunity"
        },
        {
          "name": "Update Product",
          "value": "updateProduct",
          "action": "Update product on opportunity",
          "description": "Update a product item on an opportunity"
        },
        {
          "name": "Update Task",
          "value": "updateTask",
          "action": "Update task on opportunity",
          "description": "Update a task on an opportunity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many projects",
      "description": "List many projects",
      "resource": "project"
    },
    {
      "name": "Get Components",
      "value": "getComponents",
      "action": "Get project components",
      "description": "List components of a project",
      "resource": "project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "List many contacts",
      "resource": "contact"
    },
    {
      "name": "Get Schema",
      "value": "getSchema",
      "action": "Get contact schema",
      "description": "Get the dynamic field schema for contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update a contact",
      "resource": "contact"
    },
    {
      "name": "Add Product",
      "value": "addProduct",
      "action": "Add product to opportunity",
      "description": "Add a product to an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Associate Contact",
      "value": "associateContact",
      "action": "Associate contact to opportunity",
      "description": "Link a contact to an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an opportunity",
      "description": "Create an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Create Task",
      "value": "createTask",
      "action": "Create task on opportunity",
      "description": "Create a task on an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an opportunity",
      "description": "Delete an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Dissociate Contact",
      "value": "dissociateContact",
      "action": "Dissociate contact from opportunity",
      "description": "Remove the linked contact from an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an opportunity",
      "description": "Get an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many opportunities",
      "description": "List many opportunities",
      "resource": "opportunity"
    },
    {
      "name": "Get Schema",
      "value": "getSchema",
      "action": "Get opportunity schema",
      "description": "Get the dynamic field schema for opportunities",
      "resource": "opportunity"
    },
    {
      "name": "Remove Product",
      "value": "removeProduct",
      "action": "Remove product from opportunity",
      "description": "Remove a product from an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Remove Task",
      "value": "removeTask",
      "action": "Remove task from opportunity",
      "description": "Remove a task from an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an opportunity",
      "description": "Update an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Update Product",
      "value": "updateProduct",
      "action": "Update product on opportunity",
      "description": "Update a product item on an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Update Task",
      "value": "updateTask",
      "action": "Update task on opportunity",
      "description": "Update a task on an opportunity",
      "resource": "opportunity"
    }
  ]

npm_readme:
  # n8n-nodes-bolten

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

  This is an n8n community node for the [Bolten](https://bolten.io) platform — a unified CRM, WhatsApp, and AI solution for managing customer relationships, sales pipelines, and automated communications.

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

  [Installation](#installation)
  [Operations](#operations)
  [Credentials](#credentials)
  [Trigger node](#trigger-node)
  [Compatibility](#compatibility)
  [Resources](#resources)

  ## Installation

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

  **Package name:** `n8n-nodes-bolten`

  ### n8n Cloud

  1. Go to **Settings → Community nodes**
  2. Click **Install a community node**
  3. Enter `n8n-nodes-bolten`
  4. Accept the risk notice and click **Install**

  ### Self-hosted

  Set `N8N_COMMUNITY_PACKAGES_ENABLED=true` and install via the same UI flow above, or run inside your n8n container:

  ```bash
  npm install n8n-nodes-bolten
  ```

  ## Operations

  The package provides two nodes: **Bolten** (actions) and **Bolten Trigger** (webhook).

  ### Bolten — Project

  | Operation | Description |
  |---|---|
  | Get Many | List all projects in your Bolten workspace |
  | Get Components | Get all components (CRM, Kanban, etc) inside a project |

  ### Bolten — Contact

  | Operation | Description |
  |---|---|
  | Create | Create a contact with dynamic attributes |
  | Get | Retrieve a contact by ID |
  | Get Many | List contacts (with auto-pagination) |
  | Update | Patch a contact's attributes |
  | Delete | Remove a contact |
  | Get Schema | Fetch the dynamic field schema for the component |

  ### Bolten — Opportunity

  | Operation | Description |
  |---|---|
  | Create | Create an opportunity |
  | Get | Retrieve an opportunity by ID |
  | Get Many | List opportunities (with auto-pagination) |
  | Update | Patch an opportunity's attributes |
  | Delete | Remove an opportunity |
  | Get Schema | Fetch the dynamic field schema |
  | Associate Contact | Link a contact to an opportunity |
  | Dissociate Contact | Remove the linked contact |
  | Add Product | Add a product line item |
  | Update Product | Update an existing product line item |
  | Remove Product | Remove a product line item |
  | Create Task | Add a task to the opportunity |
  | Update Task | Update an existing task |
  | Remove Task | Delete a task |

  ### Dynamic attributes

  Bolten stores resource data inside a flexible `attributes` object whose schema is defined per workspace component. The node supports two input modes:

  - **Key/Value** — add attributes one by one with a name and value
  - **Raw JSON** — provide the full attributes object as JSON (recommended for dynamic data from expressions)

  Use the **Get Schema** operation to discover the available attribute names for your specific component.

  ## Credentials

  You need a Bolten API key. To obtain one:

  1. Log in to your Bolten workspace at [app.bolten.io](https://app.bolten.io)
  2. Navigate to **Settings → Integrations → API**
  3. Generate a new API key
  4. In n8n, create a new **Bolten API** credential and paste the key

  The credential test calls `GET /clients/api/v1/projects` to verify the key is valid.

  ## Trigger node

  The **Bolten Trigger** node receives webhook events from your Bolten workspace.

  ### Supported events

  - `opportunity.created` — fired when a new opportunity is created
  - `opportunity.transitioned` — fired when an opportunity moves between stages
  - `opportunity.won` — fired when an opportunity is marked as won
  - `opportunity.lost` — fired when an opportunity is marked as lost

  ### Setup

  1. Add a **Bolten Trigger** node to your workflow
  2. Activate the workflow to get the production webhook URL
  3. Copy the **Webhook URL** shown in the node
  4. In Bolten, go to **Settings → Integrations → Webhooks**
  5. Register the URL and select the events you want to receive
  6. Save — your workflow will now fire on each matching event

  Leave **Events** empty in the node to receive all events; or select specific events to filter at the n8n side.

  ## Compatibility

  - Minimum n8n version: **1.0.0**
  - Tested against n8n: **1.123.x**
  - Node API version: **1**

  ## Resources

  - [Bolten website](https://bolten.io)
  - [Bolten API docs](https://docs.bolten.io)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Report a bug](https://github.com/renancpinheiro/n8n-nodes-bolten/issues)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Integrates n8n with the Bolten CRM, WhatsApp, and AI platform to manage projects, contacts, opportunities, and webhook-triggered workflows. It supports both action-based operations and event-driven triggers for sales and customer management automation.","capabilities":["List projects in a Bolten workspace","Get project components such as CRM and Kanban","Create, retrieve, list, update, and delete contacts","Fetch contact dynamic field schemas","Create, retrieve, list, update, and delete opportunities","Fetch opportunity dynamic field schemas","Associate and dissociate contacts from opportunities","Add, update, and remove product line items on opportunities","Create, update, and remove tasks on opportunities","Receive webhook triggers for opportunity created, transitioned, won, and lost events"],"authentication":"Bolten API key required; create a Bolten API credential in n8n and paste the API key generated from Bolten workspace settings.","commonUseCases":["Synchronizing CRM contacts and opportunities between Bolten and other systems","Automating sales pipeline updates and task management in response to workflow events","Receiving webhook notifications when opportunities change stage or status","Creating or updating customer records with dynamic custom attributes"],"limitations":["Dynamic resource fields depend on the workspace component schema and may require using Get Schema first","The README only documents project, contact, opportunity, and trigger functionality"],"relatedNodes":["Bolten Trigger"]}


node_type: n8n-nodes-bolten.boltenTrigger
package_name: n8n-nodes-bolten
display_name: Bolten Trigger
description: Starts the workflow when a Bolten webhook event fires
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: renancpinheiro
author_github_url: https://github.com/renancpinheiro/
npm_package_name: n8n-nodes-bolten
npm_version: 0.2.8
community_fetched_at: 2026-07-14T14:40:34.603Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  # n8n-nodes-bolten

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

  This is an n8n community node for the [Bolten](https://bolten.io) platform — a unified CRM, WhatsApp, and AI solution for managing customer relationships, sales pipelines, and automated communications.

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

  [Installation](#installation)
  [Operations](#operations)
  [Credentials](#credentials)
  [Trigger node](#trigger-node)
  [Compatibility](#compatibility)
  [Resources](#resources)

  ## Installation

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

  **Package name:** `n8n-nodes-bolten`

  ### n8n Cloud

  1. Go to **Settings → Community nodes**
  2. Click **Install a community node**
  3. Enter `n8n-nodes-bolten`
  4. Accept the risk notice and click **Install**

  ### Self-hosted

  Set `N8N_COMMUNITY_PACKAGES_ENABLED=true` and install via the same UI flow above, or run inside your n8n container:

  ```bash
  npm install n8n-nodes-bolten
  ```

  ## Operations

  The package provides two nodes: **Bolten** (actions) and **Bolten Trigger** (webhook).

  ### Bolten — Project

  | Operation | Description |
  |---|---|
  | Get Many | List all projects in your Bolten workspace |
  | Get Components | Get all components (CRM, Kanban, etc) inside a project |

  ### Bolten — Contact

  | Operation | Description |
  |---|---|
  | Create | Create a contact with dynamic attributes |
  | Get | Retrieve a contact by ID |
  | Get Many | List contacts (with auto-pagination) |
  | Update | Patch a contact's attributes |
  | Delete | Remove a contact |
  | Get Schema | Fetch the dynamic field schema for the component |

  ### Bolten — Opportunity

  | Operation | Description |
  |---|---|
  | Create | Create an opportunity |
  | Get | Retrieve an opportunity by ID |
  | Get Many | List opportunities (with auto-pagination) |
  | Update | Patch an opportunity's attributes |
  | Delete | Remove an opportunity |
  | Get Schema | Fetch the dynamic field schema |
  | Associate Contact | Link a contact to an opportunity |
  | Dissociate Contact | Remove the linked contact |
  | Add Product | Add a product line item |
  | Update Product | Update an existing product line item |
  | Remove Product | Remove a product line item |
  | Create Task | Add a task to the opportunity |
  | Update Task | Update an existing task |
  | Remove Task | Delete a task |

  ### Dynamic attributes

  Bolten stores resource data inside a flexible `attributes` object whose schema is defined per workspace component. The node supports two input modes:

  - **Key/Value** — add attributes one by one with a name and value
  - **Raw JSON** — provide the full attributes object as JSON (recommended for dynamic data from expressions)

  Use the **Get Schema** operation to discover the available attribute names for your specific component.

  ## Credentials

  You need a Bolten API key. To obtain one:

  1. Log in to your Bolten workspace at [app.bolten.io](https://app.bolten.io)
  2. Navigate to **Settings → Integrations → API**
  3. Generate a new API key
  4. In n8n, create a new **Bolten API** credential and paste the key

  The credential test calls `GET /clients/api/v1/projects` to verify the key is valid.

  ## Trigger node

  The **Bolten Trigger** node receives webhook events from your Bolten workspace.

  ### Supported events

  - `opportunity.created` — fired when a new opportunity is created
  - `opportunity.transitioned` — fired when an opportunity moves between stages
  - `opportunity.won` — fired when an opportunity is marked as won
  - `opportunity.lost` — fired when an opportunity is marked as lost

  ### Setup

  1. Add a **Bolten Trigger** node to your workflow
  2. Activate the workflow to get the production webhook URL
  3. Copy the **Webhook URL** shown in the node
  4. In Bolten, go to **Settings → Integrations → Webhooks**
  5. Register the URL and select the events you want to receive
  6. Save — your workflow will now fire on each matching event

  Leave **Events** empty in the node to receive all events; or select specific events to filter at the n8n side.

  ## Compatibility

  - Minimum n8n version: **1.0.0**
  - Tested against n8n: **1.123.x**
  - Node API version: **1**

  ## Resources

  - [Bolten website](https://bolten.io)
  - [Bolten API docs](https://docs.bolten.io)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Report a bug](https://github.com/renancpinheiro/n8n-nodes-bolten/issues)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow when a Bolten webhook event occurs. It listens for Bolten opportunity-related events and starts the workflow with the received payload.","capabilities":["Receive Bolten webhook events","Support opportunity.created events","Support opportunity.transitioned events","Support opportunity.won events","Support opportunity.lost events","Filter incoming events by selected event types or receive all events"],"authentication":"Webhook-based trigger; no direct API authentication for the trigger node itself. Webhook registration is done in Bolten, while the separate Bolten action node uses a Bolten API key.","commonUseCases":["Start automations when a new opportunity is created in Bolten","Trigger workflows when an opportunity changes stage, is won, or is lost","Route Bolten CRM events into downstream n8n automations"],"limitations":["Only supports the listed opportunity-related webhook events","Requires the workflow to be activated to obtain the production webhook URL","Event selection can be done either in Bolten webhook settings or by leaving the node event filter empty to receive all events"],"relatedNodes":["Bolten"]}


node_type: n8n-nodes-serpstat.serpstat
package_name: n8n-nodes-serpstat
display_name: Serpstat
description: Search marketing and AI data with Serpstat API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alexdanilin
author_github_url: https://github.com/alex-danilin/
npm_package_name: n8n-nodes-serpstat
npm_version: 0.9.3
community_fetched_at: 2026-07-14T14:40:34.604Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "domain",
      "options": [
        {
          "name": "Audit",
          "value": "audit"
        },
        {
          "name": "Backlink",
          "value": "backlinks"
        },
        {
          "name": "Credit",
          "value": "credits"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Keyword",
          "value": "keyword"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Rank Tracker",
          "value": "rankTracker"
        },
        {
          "name": "URL",
          "value": "url"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOrganicCompetitors",
      "options": [
        {
          "name": "Export Domain Positions",
          "value": "exportPositions",
          "action": "Export domain positions",
          "description": "Export list of keywords and domain positions in organic search"
        },
        {
          "name": "Get Category Top Domains",
          "value": "getCategoryTopDomains",
          "action": "Get category top domains",
          "description": "Get list of top domains for a specific market category"
        },
        {
          "name": "Get Domain All Regions Traffic",
          "value": "getAllRegionsTraffic",
          "action": "Get traffic for all regions",
          "description": "Get traffic data for a domain across all regions"
        },
        {
          "name": "Get Domain Keywords",
          "value": "getDomainKeywords",
          "action": "Get keywords for a domain",
          "description": "Get a list of keywords that a domain ranks for in the top of search results"
        },
        {
          "name": "Get Domain Keywords By Language",
          "value": "getDomainKeywordsByLanguage",
          "action": "Get domain keywords by language",
          "description": "Get list of keywords for a domain filtered by language"
        },
        {
          "name": "Get Domain Organic Competitors",
          "value": "getOrganicCompetitors",
          "action": "Get organic competitors for a domain",
          "description": "Get organic competitors for a domain"
        },
        {
          "name": "Get Domain PPC Competitors",
          "value": "getAdsCompetitors",
          "action": "Get PPC competitors for a domain",
          "description": "Get a list of domain competitors in PPC ads"
        },
        {
          "name": "Get Domain PPC Keywords",
          "value": "getAdKeywords",
          "action": "Get PPC keywords for a domain",
          "description": "Get a list of keywords used in PPC ads for a domain"
        },
        {
          "name": "Get Domain Regions Count",
          "value": "getRegionsCount",
          "action": "Get regions count",
          "description": "Get the number of keywords a domain ranks for in each search engine database (region)"
        },
        {
          "name": "Get Domain Search History",
          "value": "getDomainsHistory",
          "action": "Get domain search history",
          "description": "Get search history of domain changes (keywords, visibility, traffic, etc.)"
        },
        {
          "name": "Get Domain Top URLs",
          "value": "getTopUrlsV2",
          "action": "Get top urls",
          "description": "Get list of top URLs for a domain sorted by traffic or keywords count"
        },
        {
          "name": "Get Domain URLs",
          "value": "getDomainUrls",
          "action": "Get domain urls",
          "description": "Get a list of URLs for a domain with keywords count"
        },
        {
          "name": "Get Domains AIO Brand Opportunities",
          "value": "getAIOBrandOpportunities",
          "action": "Get domains AIO brand opportunities",
          "description": "Get keyword-level AI Overview data showing brand and domain citation types"
        },
        {
          "name": "Get Domains AIO Summary",
          "value": "getAIOSummary",
          "action": "Get domains AIO summary",
          "description": "Get a summary of AI Overview brand and domain citation counts for a list of domains"
        },
        {
          "name": "Get Domains Intersection",
          "value": "getDomainsIntersection",
          "action": "Get domains intersection",
          "description": "Get list of keywords that are common to multiple domains"
        },
        {
          "name": "Get Domains Rating Data",
          "value": "getDomainsRatingData",
          "action": "Get domains rating data",
          "description": "Get market ranking metrics (traffic, visibility, SDR, backlinks, etc.) for a list of domains"
        },
        {
          "name": "Get Domains Search Summary",
          "value": "getDomainsInfo",
          "action": "Get domains search summary info",
          "description": "Get search summary information for a list of domains"
        },
        {
          "name": "Get Domains Unique Keywords",
          "value": "getDomainsUniqKeywords",
          "action": "Get domains unique keywords",
          "description": "Get list of keywords unique to the input domains relative to a minus domain"
        },
        {
          "name": "Get Market Categories",
          "value": "getMarketCategories",
          "action": "Get market categories",
          "description": "Get a list of market research categories used for domain classification"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUrlKeywords",
      "options": [
        {
          "name": "Get URL Competitors",
          "value": "getUrlCompetitors",
          "action": "Get URL competitors",
          "description": "Get list of competitor URLs ranking for the same keywords as the queried URL"
        },
        {
          "name": "Get URL Keywords",
          "value": "getUrlKeywords",
          "action": "Get URL keywords",
          "description": "Get list of keywords for which the specified URL ranks in top search results"
        },
        {
          "name": "Get URL Missing Keywords",
          "value": "getUrlMissingKeywords",
          "action": "Get URL missing keywords",
          "description": "Get keywords that competitors rank for but the given URL does not"
        },
        {
          "name": "Get URL Summary Traffic",
          "value": "getUrlSummaryTraffic",
          "action": "Get URL summary traffic",
          "description": "Get traffic and keyword statistics for pages matching a URL mask"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "url"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getKeywords",
      "options": [
        {
          "name": "Export Keyword Organic Keywords",
          "value": "exportKeywordsPhrase",
          "action": "Export organic keywords for a keyword",
          "description": "Export all organic keywords associated with the researched keyword to a CSV format list"
        },
        {
          "name": "Export Keyword Suggestions",
          "value": "exportSuggestions",
          "action": "Export search suggestions for a keyword",
          "description": "Export search suggestions and questions for a keyword to a CSV format list"
        },
        {
          "name": "Get Keyword Ad Keywords",
          "value": "getAdKeywords",
          "action": "Get ad keywords for a keyword",
          "description": "Get paid keywords and ad copies shown for the queried keyword in search results"
        },
        {
          "name": "Get Keyword Competitors",
          "value": "getCompetitors",
          "action": "Get competitors for a keyword",
          "description": "Get list of domain competitors ranking for the given keyword in top search results"
        },
        {
          "name": "Get Keyword Full Top",
          "value": "getKeywordFullTop",
          "action": "Get keyword full top",
          "description": "Get Google's top-100 search results for the analyzed keyword"
        },
        {
          "name": "Get Keyword Organic Keywords",
          "value": "getKeywords",
          "action": "Get keyword keywords",
          "description": "Get organic keywords associated with the researched keyword that domains rank for"
        },
        {
          "name": "Get Keyword PPC Competitors",
          "value": "getAdsCompetitors",
          "action": "Get PPC competitors for a keyword",
          "description": "Get domain competitors in PPC ads for the keyword"
        },
        {
          "name": "Get Keyword Related Keywords",
          "value": "getRelatedKeywords",
          "action": "Get related keywords",
          "description": "Get all search queries that are semantically related to the searched keyword"
        },
        {
          "name": "Get Keyword Suggestions",
          "value": "getSuggestions",
          "action": "Get suggestions for a keyword",
          "description": "Get search suggestions for the keyword found by full-text search"
        },
        {
          "name": "Get Keyword Top",
          "value": "getKeywordTop",
          "action": "Get keyword top",
          "description": "Get Google's top-100 search results (organic top) with ads and types for the analyzed keyword"
        },
        {
          "name": "Get Keyword Top URLs",
          "value": "getTopUrls",
          "action": "Get top ur ls for a keyword",
          "description": "Get website pages that rank for the largest amount of analyzed keyword variations"
        },
        {
          "name": "Get Keywords Search Summary",
          "value": "getKeywordsInfo",
          "action": "Get keywords info",
          "description": "Get search summary information (volume, CPC, competition) for a list of keywords"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "keyword"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getList",
      "options": [
        {
          "name": "Export Audit Report",
          "value": "export",
          "action": "Export audit report",
          "description": "Export a complete site audit report in a convenient format"
        },
        {
          "name": "Get Audit Basic Info",
          "value": "getBasicInfo",
          "action": "Get audit basic info",
          "description": "Get essential summary information from the latest site audit for a project"
        },
        {
          "name": "Get Audit Categories Statistic",
          "value": "getCategoriesStatistic",
          "action": "Get audit categories statistic",
          "description": "Get statistics grouped by issue categories, allowing you to determine the number of issues related to each specific category present on the site"
        },
        {
          "name": "Get Audit Default Settings",
          "value": "getDefaultSettings",
          "action": "Get audit default settings",
          "description": "Get a list of default configuration values for a project"
        },
        {
          "name": "Get Audit Error Elements",
          "value": "getErrorElements",
          "action": "Get audit error elements",
          "description": "Get a list of all pages where a specific audit error was detected"
        },
        {
          "name": "Get Audit History by Error Count",
          "value": "getHistoryByCountError",
          "action": "Get audit history by error count",
          "description": "Get the number of changed errors and information messages for each issue category across all reports within a project"
        },
        {
          "name": "Get Audit List",
          "value": "getList",
          "action": "Get audit list",
          "description": "Get a list of audits carried out by project ID"
        },
        {
          "name": "Get Audit Report Without Details",
          "value": "getReportWithoutDetails",
          "action": "Get audit report without details",
          "description": "Get the number of errors/issues, categorized by issue type, found in a specific report"
        },
        {
          "name": "Get Audit Scan User URL List",
          "value": "getScanUserUrlList",
          "action": "Get audit scan user URL list",
          "description": "Get a list of URLs audited during the scan, provided the scan type was configured for assigned URLs"
        },
        {
          "name": "Get Audit Settings",
          "value": "getSettings",
          "action": "Get audit settings",
          "description": "Get a list of settings in a specific project"
        },
        {
          "name": "Get Audit Sub-Elements by CRC",
          "value": "getSubElementsByCrc",
          "action": "Get audit sub elements by crc",
          "description": "Get a list of subelements which contains a specific error/issue"
        },
        {
          "name": "Set Audit Settings",
          "value": "setSettings",
          "action": "Set audit settings",
          "description": "Saves settings in a suggested project"
        },
        {
          "name": "Start Audit",
          "value": "start",
          "action": "Start audit",
          "description": "Starts an audit session for a specified project"
        },
        {
          "name": "Stop Audit",
          "value": "stop",
          "action": "Stop audit",
          "description": "Stops an active audit session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "audit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSummaryV2",
      "options": [
        {
          "name": "Get Anchors",
          "value": "getAnchors",
          "action": "Get backlinks anchors",
          "description": "Get backlinks anchor texts"
        },
        {
          "name": "Get Backlinks Summary",
          "value": "getSummaryV2",
          "action": "Get backlinks summary",
          "description": "Get general information about domain link profile, such as referring domains, pages, etc"
        },
        {
          "name": "Get Changes History",
          "value": "getBacklinksChangesHistory",
          "action": "Get changes history",
          "description": "Get the history of changes in the number of backlinks and referring domains"
        },
        {
          "name": "Get Intersecting Domains",
          "value": "getIntersect",
          "action": "Get intersecting domains",
          "description": "Get domains that link to the analyzed domains at the same time"
        },
        {
          "name": "Get Intersecting Domains Summary",
          "value": "getIntersectSummary",
          "action": "Get intersecting domains summary",
          "description": "Get summary data for intersecting domains"
        },
        {
          "name": "Get Lost Backlinks",
          "value": "getLostBacklinks",
          "action": "Get lost backlinks",
          "description": "Get lost backlinks for the analyzed domain"
        },
        {
          "name": "Get Lost Outlinks",
          "value": "getLostOutlinks",
          "action": "Get lost outlinks",
          "description": "Get lost outgoing links from the analyzed domain"
        },
        {
          "name": "Get New Backlinks",
          "value": "getNewBacklinks",
          "action": "Get new backlinks",
          "description": "Get new backlinks for the analyzed domain"
        },
        {
          "name": "Get Outlink Domains",
          "value": "getOutDomains",
          "action": "Get outlink domains",
          "description": "Get domains to which the analyzed domain links"
        },
        {
          "name": "Get Outlink Threat Domains",
          "value": "getOutThreats",
          "action": "Get outlink threat domains",
          "description": "Get malicious domains to which the analyzed domain links"
        },
        {
          "name": "Get Outlink Threat Links",
          "value": "getOutThreatsLinks",
          "action": "Get outlink threat links",
          "description": "Get outgoing malicious links from the analyzed domain"
        },
        {
          "name": "Get Outlinks",
          "value": "getOutlinks",
          "action": "Get outlinks",
          "description": "Get outgoing links from the analyzed domain"
        },
        {
          "name": "Get Redirected Domains",
          "value": "getRedirectedDomains",
          "action": "Get redirected domains",
          "description": "Get domains from which redirects are configured to the analyzed domain"
        },
        {
          "name": "Get Referring Domains",
          "value": "getRefDomains",
          "action": "Get referring domains",
          "description": "Get domains that link to the analyzed domain"
        },
        {
          "name": "Get Referring Threat Domains",
          "value": "getThreats",
          "action": "Get referring threat domains",
          "description": "Get referring malicious domains linking to the analyzed domain"
        },
        {
          "name": "Get Referring Threat Links",
          "value": "getThreatsLinks",
          "action": "Get referring threat links",
          "description": "Get referring malicious links linking to the analyzed domain"
        },
        {
          "name": "Get SDR Distribution",
          "value": "getDistributionSDR",
          "action": "Get SDR distribution",
          "description": "Get the distribution of referring domains by SDR (Serpstat Domain Rank)"
        },
        {
          "name": "Get TLD Distribution",
          "value": "getDistributionTLD",
          "action": "Get TLD distribution",
          "description": "Get the distribution of referring domains by TLDs (top-level domains)"
        },
        {
          "name": "Get Top Anchors",
          "value": "getTopAnchors",
          "action": "Get top anchors",
          "description": "Get top backlinks anchors"
        },
        {
          "name": "Get Top Pages",
          "value": "getTopPages",
          "action": "Get top pages",
          "description": "Get pages on the analyzed domain with the largest number of backlinks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "backlinks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProjects",
      "options": [
        {
          "name": "Get Rank Tracker Keyword SERP History",
          "value": "getKeywordsSerpResultsHistory",
          "action": "Get rank tracker keyword SERP history",
          "description": "Get Google's top-100 search results for the required region and project keywords"
        },
        {
          "name": "Get Rank Tracker Project Regions",
          "value": "getProjectRegions",
          "action": "Get rank tracker project regions",
          "description": "Get the list of project regions and their status"
        },
        {
          "name": "Get Rank Tracker Project Status",
          "value": "getProjectStatus",
          "action": "Get rank tracker project status",
          "description": "Get the current status of the position update process for the given project and region"
        },
        {
          "name": "Get Rank Tracker Projects",
          "value": "getProjects",
          "action": "Get rank tracker projects",
          "description": "Get a list of your projects"
        },
        {
          "name": "Get Rank Tracker Top Competitors History",
          "value": "getTopCompetitorsDomainsHistory",
          "action": "Get rank tracker top competitors history",
          "description": "Get the list of domains for the required region which were listed in the top-20 for any two project keywords"
        },
        {
          "name": "Get Rank Tracker URL SERP History",
          "value": "getUrlsSerpResultsHistory",
          "action": "Get rank tracker URL SERP history",
          "description": "Get the ranking history of URLs for project keywords in the required region"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "rankTracker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "description": "Create a new project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "description": "Delete an existing project"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many projects",
          "description": "Retrieve a list of projects associated with the account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStats",
      "options": [
        {
          "name": "Get API Statistics",
          "value": "getStats",
          "action": "Get API statistics",
          "description": "Check the number of available and used API and Serpstat extension credits"
        },
        {
          "name": "Get Audit Statistics",
          "value": "getAuditStats",
          "action": "Get audit statistics",
          "description": "Check how many audit credits you have left"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credits"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Export Domain Positions",
      "value": "exportPositions",
      "action": "Export domain positions",
      "description": "Export list of keywords and domain positions in organic search",
      "resource": "domain"
    },
    {
      "name": "Get Category Top Domains",
      "value": "getCategoryTopDomains",
      "action": "Get category top domains",
      "description": "Get list of top domains for a specific market category",
      "resource": "domain"
    },
    {
      "name": "Get Domain All Regions Traffic",
      "value": "getAllRegionsTraffic",
      "action": "Get traffic for all regions",
      "description": "Get traffic data for a domain across all regions",
      "resource": "domain"
    },
    {
      "name": "Get Domain Keywords",
      "value": "getDomainKeywords",
      "action": "Get keywords for a domain",
      "description": "Get a list of keywords that a domain ranks for in the top of search results",
      "resource": "domain"
    },
    {
      "name": "Get Domain Keywords By Language",
      "value": "getDomainKeywordsByLanguage",
      "action": "Get domain keywords by language",
      "description": "Get list of keywords for a domain filtered by language",
      "resource": "domain"
    },
    {
      "name": "Get Domain Organic Competitors",
      "value": "getOrganicCompetitors",
      "action": "Get organic competitors for a domain",
      "description": "Get organic competitors for a domain",
      "resource": "domain"
    },
    {
      "name": "Get Domain PPC Competitors",
      "value": "getAdsCompetitors",
      "action": "Get PPC competitors for a domain",
      "description": "Get a list of domain competitors in PPC ads",
      "resource": "domain"
    },
    {
      "name": "Get Domain PPC Keywords",
      "value": "getAdKeywords",
      "action": "Get PPC keywords for a domain",
      "description": "Get a list of keywords used in PPC ads for a domain",
      "resource": "domain"
    },
    {
      "name": "Get Domain Regions Count",
      "value": "getRegionsCount",
      "action": "Get regions count",
      "description": "Get the number of keywords a domain ranks for in each search engine database (region)",
      "resource": "domain"
    },
    {
      "name": "Get Domain Search History",
      "value": "getDomainsHistory",
      "action": "Get domain search history",
      "description": "Get search history of domain changes (keywords, visibility, traffic, etc.)",
      "resource": "domain"
    },
    {
      "name": "Get Domain Top URLs",
      "value": "getTopUrlsV2",
      "action": "Get top urls",
      "description": "Get list of top URLs for a domain sorted by traffic or keywords count",
      "resource": "domain"
    },
    {
      "name": "Get Domain URLs",
      "value": "getDomainUrls",
      "action": "Get domain urls",
      "description": "Get a list of URLs for a domain with keywords count",
      "resource": "domain"
    },
    {
      "name": "Get Domains AIO Brand Opportunities",
      "value": "getAIOBrandOpportunities",
      "action": "Get domains AIO brand opportunities",
      "description": "Get keyword-level AI Overview data showing brand and domain citation types",
      "resource": "domain"
    },
    {
      "name": "Get Domains AIO Summary",
      "value": "getAIOSummary",
      "action": "Get domains AIO summary",
      "description": "Get a summary of AI Overview brand and domain citation counts for a list of domains",
      "resource": "domain"
    },
    {
      "name": "Get Domains Intersection",
      "value": "getDomainsIntersection",
      "action": "Get domains intersection",
      "description": "Get list of keywords that are common to multiple domains",
      "resource": "domain"
    },
    {
      "name": "Get Domains Rating Data",
      "value": "getDomainsRatingData",
      "action": "Get domains rating data",
      "description": "Get market ranking metrics (traffic, visibility, SDR, backlinks, etc.) for a list of domains",
      "resource": "domain"
    },
    {
      "name": "Get Domains Search Summary",
      "value": "getDomainsInfo",
      "action": "Get domains search summary info",
      "description": "Get search summary information for a list of domains",
      "resource": "domain"
    },
    {
      "name": "Get Domains Unique Keywords",
      "value": "getDomainsUniqKeywords",
      "action": "Get domains unique keywords",
      "description": "Get list of keywords unique to the input domains relative to a minus domain",
      "resource": "domain"
    },
    {
      "name": "Get Market Categories",
      "value": "getMarketCategories",
      "action": "Get market categories",
      "description": "Get a list of market research categories used for domain classification",
      "resource": "domain"
    },
    {
      "name": "Get URL Competitors",
      "value": "getUrlCompetitors",
      "action": "Get URL competitors",
      "description": "Get list of competitor URLs ranking for the same keywords as the queried URL",
      "resource": "url"
    },
    {
      "name": "Get URL Keywords",
      "value": "getUrlKeywords",
      "action": "Get URL keywords",
      "description": "Get list of keywords for which the specified URL ranks in top search results",
      "resource": "url"
    },
    {
      "name": "Get URL Missing Keywords",
      "value": "getUrlMissingKeywords",
      "action": "Get URL missing keywords",
      "description": "Get keywords that competitors rank for but the given URL does not",
      "resource": "url"
    },
    {
      "name": "Get URL Summary Traffic",
      "value": "getUrlSummaryTraffic",
      "action": "Get URL summary traffic",
      "description": "Get traffic and keyword statistics for pages matching a URL mask",
      "resource": "url"
    },
    {
      "name": "Export Keyword Organic Keywords",
      "value": "exportKeywordsPhrase",
      "action": "Export organic keywords for a keyword",
      "description": "Export all organic keywords associated with the researched keyword to a CSV format list",
      "resource": "keyword"
    },
    {
      "name": "Export Keyword Suggestions",
      "value": "exportSuggestions",
      "action": "Export search suggestions for a keyword",
      "description": "Export search suggestions and questions for a keyword to a CSV format list",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Ad Keywords",
      "value": "getAdKeywords",
      "action": "Get ad keywords for a keyword",
      "description": "Get paid keywords and ad copies shown for the queried keyword in search results",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Competitors",
      "value": "getCompetitors",
      "action": "Get competitors for a keyword",
      "description": "Get list of domain competitors ranking for the given keyword in top search results",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Full Top",
      "value": "getKeywordFullTop",
      "action": "Get keyword full top",
      "description": "Get Google's top-100 search results for the analyzed keyword",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Organic Keywords",
      "value": "getKeywords",
      "action": "Get keyword keywords",
      "description": "Get organic keywords associated with the researched keyword that domains rank for",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword PPC Competitors",
      "value": "getAdsCompetitors",
      "action": "Get PPC competitors for a keyword",
      "description": "Get domain competitors in PPC ads for the keyword",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Related Keywords",
      "value": "getRelatedKeywords",
      "action": "Get related keywords",
      "description": "Get all search queries that are semantically related to the searched keyword",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Suggestions",
      "value": "getSuggestions",
      "action": "Get suggestions for a keyword",
      "description": "Get search suggestions for the keyword found by full-text search",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Top",
      "value": "getKeywordTop",
      "action": "Get keyword top",
      "description": "Get Google's top-100 search results (organic top) with ads and types for the analyzed keyword",
      "resource": "keyword"
    },
    {
      "name": "Get Keyword Top URLs",
      "value": "getTopUrls",
      "action": "Get top ur ls for a keyword",
      "description": "Get website pages that rank for the largest amount of analyzed keyword variations",
      "resource": "keyword"
    },
    {
      "name": "Get Keywords Search Summary",
      "value": "getKeywordsInfo",
      "action": "Get keywords info",
      "description": "Get search summary information (volume, CPC, competition) for a list of keywords",
      "resource": "keyword"
    },
    {
      "name": "Export Audit Report",
      "value": "export",
      "action": "Export audit report",
      "description": "Export a complete site audit report in a convenient format",
      "resource": "audit"
    },
    {
      "name": "Get Audit Basic Info",
      "value": "getBasicInfo",
      "action": "Get audit basic info",
      "description": "Get essential summary information from the latest site audit for a project",
      "resource": "audit"
    },
    {
      "name": "Get Audit Categories Statistic",
      "value": "getCategoriesStatistic",
      "action": "Get audit categories statistic",
      "description": "Get statistics grouped by issue categories, allowing you to determine the number of issues related to each specific category present on the site",
      "resource": "audit"
    },
    {
      "name": "Get Audit Default Settings",
      "value": "getDefaultSettings",
      "action": "Get audit default settings",
      "description": "Get a list of default configuration values for a project",
      "resource": "audit"
    },
    {
      "name": "Get Audit Error Elements",
      "value": "getErrorElements",
      "action": "Get audit error elements",
      "description": "Get a list of all pages where a specific audit error was detected",
      "resource": "audit"
    },
    {
      "name": "Get Audit History by Error Count",
      "value": "getHistoryByCountError",
      "action": "Get audit history by error count",
      "description": "Get the number of changed errors and information messages for each issue category across all reports within a project",
      "resource": "audit"
    },
    {
      "name": "Get Audit List",
      "value": "getList",
      "action": "Get audit list",
      "description": "Get a list of audits carried out by project ID",
      "resource": "audit"
    },
    {
      "name": "Get Audit Report Without Details",
      "value": "getReportWithoutDetails",
      "action": "Get audit report without details",
      "description": "Get the number of errors/issues, categorized by issue type, found in a specific report",
      "resource": "audit"
    },
    {
      "name": "Get Audit Scan User URL List",
      "value": "getScanUserUrlList",
      "action": "Get audit scan user URL list",
      "description": "Get a list of URLs audited during the scan, provided the scan type was configured for assigned URLs",
      "resource": "audit"
    },
    {
      "name": "Get Audit Settings",
      "value": "getSettings",
      "action": "Get audit settings",
      "description": "Get a list of settings in a specific project",
      "resource": "audit"
    },
    {
      "name": "Get Audit Sub-Elements by CRC",
      "value": "getSubElementsByCrc",
      "action": "Get audit sub elements by crc",
      "description": "Get a list of subelements which contains a specific error/issue",
      "resource": "audit"
    },
    {
      "name": "Set Audit Settings",
      "value": "setSettings",
      "action": "Set audit settings",
      "description": "Saves settings in a suggested project",
      "resource": "audit"
    },
    {
      "name": "Start Audit",
      "value": "start",
      "action": "Start audit",
      "description": "Starts an audit session for a specified project",
      "resource": "audit"
    },
    {
      "name": "Stop Audit",
      "value": "stop",
      "action": "Stop audit",
      "description": "Stops an active audit session",
      "resource": "audit"
    },
    {
      "name": "Get Anchors",
      "value": "getAnchors",
      "action": "Get backlinks anchors",
      "description": "Get backlinks anchor texts",
      "resource": "backlinks"
    },
    {
      "name": "Get Backlinks Summary",
      "value": "getSummaryV2",
      "action": "Get backlinks summary",
      "description": "Get general information about domain link profile, such as referring domains, pages, etc",
      "resource": "backlinks"
    },
    {
      "name": "Get Changes History",
      "value": "getBacklinksChangesHistory",
      "action": "Get changes history",
      "description": "Get the history of changes in the number of backlinks and referring domains",
      "resource": "backlinks"
    },
    {
      "name": "Get Intersecting Domains",
      "value": "getIntersect",
      "action": "Get intersecting domains",
      "description": "Get domains that link to the analyzed domains at the same time",
      "resource": "backlinks"
    },
    {
      "name": "Get Intersecting Domains Summary",
      "value": "getIntersectSummary",
      "action": "Get intersecting domains summary",
      "description": "Get summary data for intersecting domains",
      "resource": "backlinks"
    },
    {
      "name": "Get Lost Backlinks",
      "value": "getLostBacklinks",
      "action": "Get lost backlinks",
      "description": "Get lost backlinks for the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Lost Outlinks",
      "value": "getLostOutlinks",
      "action": "Get lost outlinks",
      "description": "Get lost outgoing links from the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get New Backlinks",
      "value": "getNewBacklinks",
      "action": "Get new backlinks",
      "description": "Get new backlinks for the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Outlink Domains",
      "value": "getOutDomains",
      "action": "Get outlink domains",
      "description": "Get domains to which the analyzed domain links",
      "resource": "backlinks"
    },
    {
      "name": "Get Outlink Threat Domains",
      "value": "getOutThreats",
      "action": "Get outlink threat domains",
      "description": "Get malicious domains to which the analyzed domain links",
      "resource": "backlinks"
    },
    {
      "name": "Get Outlink Threat Links",
      "value": "getOutThreatsLinks",
      "action": "Get outlink threat links",
      "description": "Get outgoing malicious links from the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Outlinks",
      "value": "getOutlinks",
      "action": "Get outlinks",
      "description": "Get outgoing links from the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Redirected Domains",
      "value": "getRedirectedDomains",
      "action": "Get redirected domains",
      "description": "Get domains from which redirects are configured to the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Domains",
      "value": "getRefDomains",
      "action": "Get referring domains",
      "description": "Get domains that link to the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Threat Domains",
      "value": "getThreats",
      "action": "Get referring threat domains",
      "description": "Get referring malicious domains linking to the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get Referring Threat Links",
      "value": "getThreatsLinks",
      "action": "Get referring threat links",
      "description": "Get referring malicious links linking to the analyzed domain",
      "resource": "backlinks"
    },
    {
      "name": "Get SDR Distribution",
      "value": "getDistributionSDR",
      "action": "Get SDR distribution",
      "description": "Get the distribution of referring domains by SDR (Serpstat Domain Rank)",
      "resource": "backlinks"
    },
    {
      "name": "Get TLD Distribution",
      "value": "getDistributionTLD",
      "action": "Get TLD distribution",
      "description": "Get the distribution of referring domains by TLDs (top-level domains)",
      "resource": "backlinks"
    },
    {
      "name": "Get Top Anchors",
      "value": "getTopAnchors",
      "action": "Get top anchors",
      "description": "Get top backlinks anchors",
      "resource": "backlinks"
    },
    {
      "name": "Get Top Pages",
      "value": "getTopPages",
      "action": "Get top pages",
      "description": "Get pages on the analyzed domain with the largest number of backlinks",
      "resource": "backlinks"
    },
    {
      "name": "Get Rank Tracker Keyword SERP History",
      "value": "getKeywordsSerpResultsHistory",
      "action": "Get rank tracker keyword SERP history",
      "description": "Get Google's top-100 search results for the required region and project keywords",
      "resource": "rankTracker"
    },
    {
      "name": "Get Rank Tracker Project Regions",
      "value": "getProjectRegions",
      "action": "Get rank tracker project regions",
      "description": "Get the list of project regions and their status",
      "resource": "rankTracker"
    },
    {
      "name": "Get Rank Tracker Project Status",
      "value": "getProjectStatus",
      "action": "Get rank tracker project status",
      "description": "Get the current status of the position update process for the given project and region",
      "resource": "rankTracker"
    },
    {
      "name": "Get Rank Tracker Projects",
      "value": "getProjects",
      "action": "Get rank tracker projects",
      "description": "Get a list of your projects",
      "resource": "rankTracker"
    },
    {
      "name": "Get Rank Tracker Top Competitors History",
      "value": "getTopCompetitorsDomainsHistory",
      "action": "Get rank tracker top competitors history",
      "description": "Get the list of domains for the required region which were listed in the top-20 for any two project keywords",
      "resource": "rankTracker"
    },
    {
      "name": "Get Rank Tracker URL SERP History",
      "value": "getUrlsSerpResultsHistory",
      "action": "Get rank tracker URL SERP history",
      "description": "Get the ranking history of URLs for project keywords in the required region",
      "resource": "rankTracker"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "description": "Create a new project",
      "resource": "project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "description": "Delete an existing project",
      "resource": "project"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many projects",
      "description": "Retrieve a list of projects associated with the account",
      "resource": "project"
    },
    {
      "name": "Get API Statistics",
      "value": "getStats",
      "action": "Get API statistics",
      "description": "Check the number of available and used API and Serpstat extension credits",
      "resource": "credits"
    },
    {
      "name": "Get Audit Statistics",
      "value": "getAuditStats",
      "action": "Get audit statistics",
      "description": "Check how many audit credits you have left",
      "resource": "credits"
    }
  ]

npm_readme:
  # n8n-nodes-serpstat

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

  [Serpstat](https://serpstat.com/) is AI-based SEO platform used for competitive intelligence, keyword and backlinks research, tracking keyword rankings, SEO audits, and managing SEO tasks.

  [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

  To install this node in your n8n instance:

  1. Go to **Settings > Community Nodes**.
  2. Click **Install a node**.
  3. Enter `n8n-nodes-serpstat` as the **npm Package Name**.
  4. Agree to the terms and click **Install**.

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

  ## Operations

  This node supports operations across twelve main resources:

  ### Audit Analysis
  * Export Audit Report (`export`)
  * Get Audit Basic Info (`getBasicInfo`)
  * Get Audit Categories Statistic (`getCategoriesStatistic`)
  * Get Audit Default Settings (`getDefaultSettings`)
  * Get Audit Error Elements (`getErrorElements`)
  * Get Audit History by Error Count (`getHistoryByCountError`)
  * Get Audit List (`getList`)
  * Get Audit Report Without Details (`getReportWithoutDetails`)
  * Get Audit Scan User URL List (`getScanUserUrlList`)
  * Get Audit Settings (`getSettings`)
  * Get Audit Sub-Elements by CRC (`getSubElementsByCrc`)
  * Set Audit Settings (`setSettings`)
  * Start Audit (`start`)
  * Stop Audit (`stop`)

  ### Backlink Analysis
  * Get Anchors (`getAnchors`)
  * Get Backlinks Summary (`getSummaryV2`)
  * Get Changes History (`getBacklinksChangesHistory`)
  * Get Intersecting Domains (`getIntersect`)
  * Get Intersecting Domains Summary (`getIntersectSummary`)
  * Get Lost Backlinks (`getLostBacklinks`)
  * Get Lost Outlinks (`getLostOutlinks`)
  * Get New Backlinks (`getNewBacklinks`)
  * Get Outlink Domains (`getOutDomains`)
  * Get Outlink Threat Domains (`getOutThreats`)
  * Get Outlink Threat Links (`getOutThreatsLinks`)
  * Get Outlinks (`getOutlinks`)
  * Get Redirected Domains (`getRedirectedDomains`)
  * Get Referring Domains (`getRefDomains`)
  * Get Referring Threat Domains (`getThreats`)
  * Get Referring Threat Links (`getThreatsLinks`)
  * Get SDR Distribution (`getDistributionSDR`)
  * Get TLD Distribution (`getDistributionTLD`)
  * Get Top Anchors (`getTopAnchors`)
  * Get Top Pages (`getTopPages`)

  ### Credit Analysis
  * Get API Statistics (`getStats`)
  * Get Audit Statistics (`getAuditStats`)

  ### Domain Analysis
  * Export Domain Positions (`exportPositions`)
  * Get Category Top Domains (`getCategoryTopDomains`)
  * Get Domain All Regions Traffic (`getAllRegionsTraffic`)
  * Get Domain Keywords (`getDomainKeywords`)
  * Get Domain Keywords By Language (`getDomainKeywordsByLanguage`)
  * Get Domain Organic Competitors (`getOrganicCompetitors`)
  * Get Domain PPC Competitors (`getAdsCompetitors`)
  * Get Domain PPC Keywords (`getAdKeywords`)
  * Get Domain Regions Count (`getRegionsCount`)
  * Get Domain Search History (`getDomainsHistory`)
  * Get Domain Top URLs (`getTopUrlsV2`)
  * Get Domain URLs (`getDomainUrls`)
  * Get Domains AIO Brand Opportunities (`getAIOBrandOpportunities`)
  * Get Domains AIO Summary (`getAIOSummary`)
  * Get Domains Intersection (`getDomainsIntersection`)
  * Get Domains Rating Data (`getDomainsRatingData`)
  * Get Domains Search Summary (`getDomainsInfo`)
  * Get Domains Unique Keywords (`getDomainsUniqKeywords`)
  * Get Market Categories (`getMarketCategories`)

  ### Domain Classification
  * Add Domains Classification Task (`addTask`)
  * Get Domain Classification Task Result (`getTask`)
  * Get Domain Classification Tasks (`getTaskList`)

  ### Keyword Analysis
  * Export Keyword Organic Keywords (`exportKeywordsPhrase`)
  * Export Keyword Suggestions (`exportSuggestions`)
  * Get Keyword Ad Keywords (`getAdKeywords`)
  * Get Keyword Competitors (`getCompetitors`)
  * Get Keyword Full Top (`getKeywordFullTop`)
  * Get Keyword Organic Keywords (`getKeywords`)
  * Get Keyword PPC Competitors (`getAdsCompetitors`)
  * Get Keyword Related Keywords (`getRelatedKeywords`)
  * Get Keyword Suggestions (`getSuggestions`)
  * Get Keyword Top (`getKeywordTop`)
  * Get Keyword Top URLs (`getTopUrls`)
  * Get Keywords Search Summary (`getKeywordsInfo`)

  ### Keyword Volume Checker
  * Add Keyword Volume Checker Task (`addTask`)
  * Get Keyword Volume Checker Task Result (`getTaskResult`)
  * Get Keyword Volume Checker Task Status (`getTaskStatus`)

  ### Project Management
  * Create (`create`)
  * Delete (`delete`)
  * Get Many (`getMany`)

  ### Rank Tracker
  * Get Rank Tracker Keyword SERP History (`getKeywordsSerpResultsHistory`)
  * Get Rank Tracker Project Regions (`getProjectRegions`)
  * Get Rank Tracker Project Status (`getProjectStatus`)
  * Get Rank Tracker Projects (`getProjects`)
  * Get Rank Tracker Top Competitors History (`getTopCompetitorsDomainsHistory`)
  * Get Rank Tracker URL SERP History (`getUrlsSerpResultsHistory`)

  ### SERP Crawling
  * Add SERP Crawling Task (`addTask`)
  * Get SERP Crawling Keyword SERP (`getKeywordSerp`)
  * Get SERP Crawling Parsing Balance (`getParsingBalance`)
  * Get SERP Crawling Task Result (`getTaskResult`)
  * Get SERP Crawling Tasks (`getTaskList`)

  ### Team Management
  * Activate (`activate`)
  * Deactivate (`deactivate`)
  * Delete (`delete`)
  * Get Many (`getMany`)
  * Invite (`invite`)

  ### URL Analysis
  * Get URL Competitors (`getUrlCompetitors`)
  * Get URL Keywords (`getUrlKeywords`)
  * Get URL Missing Keywords (`getUrlMissingKeywords`)
  * Get URL Summary Traffic (`getUrlSummaryTraffic`)

  ## Credentials

  You need a Serpstat API token to use this node. You can test Serpstat API with a [free trial](https://serpstat.com/page/free-trial/). 
  Consider purchasing Serpstat [subscription plans](https://serpstat.com/pay/) to increase data volume.
  For heavy API usage, we offer special API plans. [Contact us](https://data.serpstat.com/#contact-us) for the details.
  After you get access to the Serpstat API, create a new token in your [user profile](https://serpstat.com/users/profile/).

  ## Compatibility

  Compatible with n8n version 1.105.3 or higher.

  ## Usage

  Each user can have only one API token. There are no sandboxes, test endpoints, or any other test environment.
  During the testing phase, limit the data size by using the Page and Size optional fields. This way, you can test your workflows without burning all API credits. 
  If you are not familiar with n8n, check [quickstart guides](https://docs.n8n.io/try-it-out/).

  ### Usage Example: Get Organic Competitors

  Here is a worked example showing how to configure the node to get organic search competitors for a domain.

  #### 1. Configure Node Parameters
  - **Resource**: `Domain`
  - **Operation**: `Get Organic Competitors`
  - **Domain**: `palantir.com`
  - **Search Engine**: `G_us` (Google US)
  - **Additional Fields** (Optional):
    - **Page**: `1`
    - **Size**: `10`

  #### 2. Expected Output
  The node returns an array of organic search competitors and their associated SEO metrics, which you can use directly in your workflow.

  Example JSON output structure:
  ```json
  [
    {
      "json": {
        "domain": "palantir.com",
        "favicon": "https://www.google.com/s2/favicons?domain=palantir.com",
        "all": {
          "currentValue": 8242,
          "dynamicValue": -220
        },
        "common": {
          "currentValue": 8053,
          "dynamicValue": 100
        },
        "visibility": {
          "currentValue": 0.2578,
          "dynamicValue": 0.24804999999999996
        },
        "missing": 0,
        "relevance": 100,
        "our_relevance": 100,
        "traff": 190009
      }
    },
    {
      "json": {
        "domain": "community.palantir.com",
        "favicon": "https://www.google.com/s2/favicons?domain=community.palantir.com",
        "all": {
          "currentValue": 353,
          "dynamicValue": null
        },
        "common": {
          "currentValue": 302,
          "dynamicValue": 3.75
        },
        "visibility": {
          "currentValue": null,
          "dynamicValue": null
        },
        "missing": 51,
        "relevance": 85.55,
        "our_relevance": 3.75,
        "traff": 0
      }
    },
    {
      "json": {
        "domain": "investors.palantir.com",
        "favicon": "https://www.google.com/s2/favicons?domain=investors.palantir.com",
        "all": {
          "currentValue": 439,
          "dynamicValue": null
        },
        "common": {
          "currentValue": 344,
          "dynamicValue": 4.27
        },
        "visibility": {
          "currentValue": null,
          "dynamicValue": null
        },
        "missing": 95,
        "relevance": 78.36,
        "our_relevance": 4.27,
        "traff": 0
      }
    },
    {
      "json": {
        "domain": "blog.palantir.com",
        "favicon": "https://www.google.com/s2/favicons?domain=blog.palantir.com",
        "all": {
          "currentValue": 562,
          "dynamicValue": null
        },
        "common": {
          "currentValue": 435,
          "dynamicValue": 5.4
        },
        "visibility": {
          "currentValue": null,
          "dynamicValue": null
        },
        "missing": 127,
        "relevance": 77.4,
        "our_relevance": 5.4,
        "traff": 0
      }
    },
    {
      "json": {
        "domain": "careers.snap.com",
        "favicon": "https://www.google.com/s2/favicons?domain=careers.snap.com",
        "all": {
          "currentValue": 4019,
          "dynamicValue": null
        },
        "common": {
          "currentValue": 242,
          "dynamicValue": 3.01
        },
        "visibility": {
          "currentValue": null,
          "dynamicValue": null
        },
        "missing": 3777,
        "relevance": 6.02,
        "our_relevance": 3.01,
        "traff": 0
      }
    },
    {
      "json": {
        "domain": "anduril.com",
        "favicon": "https://www.google.com/s2/favicons?domain=anduril.com",
        "all": {
          "currentValue": 7957,
          "dynamicValue": -510
        },
        "common": {
          "currentValue": 256,
          "dynamicValue": 3.18
        },
        "visibility": {
          "currentValue": 0.54487,
          "dynamicValue": -0.0047599999999999865
        },
        "missing": 7701,
        "relevance": 3.22,
        "our_relevance": 3.18,
        "traff": 49314
      }
    },
    {
      "json": {
        "domain": "spark.apache.org",
        "favicon": "https://www.google.com/s2/favicons?domain=spark.apache.org",
        "all": {
          "currentValue": 15046,
          "dynamicValue": -36
        },
        "common": {
          "currentValue": 388,
          "dynamicValue": 4.82
        },
        "visibility": {
          "currentValue": 0.07158,
          "dynamicValue": -0.17115
        },
        "missing": 14658,
        "relevance": 2.58,
        "our_relevance": 4.82,
        "traff": 121393
      }
    },
    {
      "json": {
        "domain": "databricks.com",
        "favicon": "https://www.google.com/s2/favicons?domain=databricks.com",
        "all": {
          "currentValue": 59807,
          "dynamicValue": -392
        },
        "common": {
          "currentValue": 1054,
          "dynamicValue": 13.09
        },
        "visibility": {
          "currentValue": 2.79894,
          "dynamicValue": -0.31820000000000004
        },
        "missing": 58753,
        "relevance": 1.76,
        "our_relevance": 13.09,
        "traff": 622654
      }
    },
    {
      "json": {
        "domain": "docs.databricks.com",
        "favicon": "https://www.google.com/s2/favicons?domain=docs.databricks.com",
        "all": {
          "currentValue": 22335,
          "dynamicValue": null
        },
        "common": {
          "currentValue": 347,
          "dynamicValue": 4.31
        },
        "visibility": {
          "currentValue": null,
          "dynamicValue": null
        },
        "missing": 21988,
        "relevance": 1.55,
        "our_relevance": 4.31,
        "traff": 0
      }
    },
    {
      "json": {
        "domain": "jobs.apple.com",
        "favicon": "https://www.google.com/s2/favicons?domain=jobs.apple.com",
        "all": {
          "currentValue": 23799,
          "dynamicValue": -1114
        },
        "common": {
          "currentValue": 294,
          "dynamicValue": 3.65
        },
        "visibility": {
          "currentValue": 2.94061,
          "dynamicValue": -0.26141000000000014
        },
        "missing": 23505,
        "relevance": 1.24,
        "our_relevance": 3.65,
        "traff": 992591
      }
    }
  ]
  ```

  ### Usage Example: Get Domain Search History

  Here is a worked example showing how to configure the node to get the search history of changes for a domain.

  #### 1. Configure Node Parameters
  - **Resource**: `Domain`
  - **Operation**: `Get Domain Search History`
  - **Domain**: `nike.com`
  - **Search Engine**: `G_us` (Google US)
  - **Additional Fields** (Optional):
    - **Size**: `5`
    - **With Subdomains**: `true`

  #### 2. Expected Output
  The node returns an array of data entries representing the historical metrics of the domain over time.

  Example JSON output structure:
  ```json
  [
    {
      "domain": "nike.com",
      "keywords": 3164090,
      "traff": 171700098,
      "visible_static": 376.81473,
      "new_keywords": 97474,
      "out_keywords": 125533,
      "rised_keywords": 111684,
      "down_keywords": 150290,
      "ad_keywords": 288,
      "ads": 222,
      "date": "2025-06-02",
      "aio_keywords": 1250,
      "aio_citations": 42
    }
  ]
  ```

  ## Development

  ### Setup
  Install dependencies:
  ```bash
  npm install --legacy-peer-deps
  ```

  ### Commands
  * `npm run build`: Compile the node files and build icons.
  * `npm run dev`: Build and watch for code changes.
  * `npm run lint`: Lint the codebase.
  * `npm run release`: Interactive CLI to bump versions and release a new tag (triggers GitHub Actions publication).

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Serpstat API documentation](https://api-docs.serpstat.com/docs/serpstat-public-api/jenasqbwtxdlr-introduction-to-serpstat-api)

  ## Version history

  * 0.9.6 - Added Domain Classification, SERP Crawling, and Keyword Volume Checker resources and operations.
  * 0.9.5 - Added Team resource and operations.
  * 0.9.0 - Added Audit resource and operations.
  * 0.8.1 - Documentation fix.
  * 0.8.0 - Added Project and Credit resources and operations.
  * 0.7.0 - Added Rank Tracker resource and operations.
  * 0.6.0 - Added Backlink resource with 20 operations (Get Anchors, Get Backlinks Summary, Get Changes History, etc.).
  * 0.5.0 - Added Keyword resource and operations.
  * 0.4.2 - Corrected getTopUrlsV2 handler, corrected getRegionsCount description.
  * 0.4.1 - Added URL resource and operations.
  * 0.4.0 - Added all missing Serpstat Domain Analysis API operations.
  * 0.3.0 - Added domain search history operation and configured agent rules.
  * 0.2.0 - Added domain search summary.
  * 0.1.0 - Initial community node release.

ai_documentation_summary:
  {"purpose":"Provides access to the Serpstat API in n8n workflows for SEO, competitive intelligence, keyword research, backlink analysis, audits, rank tracking, and related search marketing data. It allows workflows to create, query, and manage Serpstat projects and reports.","capabilities":["Audit analysis: export reports, get basic info, categories statistics, default settings, error elements, history, lists, report without details, scan URL lists, settings, sub-elements, set settings, start and stop audits","Backlink analysis: get anchors, backlinks summaries, change history, intersecting domains, lost/new backlinks and outlinks, outlink domains/threats, redirected domains, referring domains, threat domains/links, SDR distribution, TLD distribution, top anchors, and top pages","Credit analysis: get API statistics and audit statistics","Domain analysis: export domain positions, get traffic by region, keywords, competitors, regions count, search history, top URLs, URLs, AI-related summaries/opportunities, domains intersections, rating data, search summaries, unique keywords, and market categories","Keyword analysis: export keyword organic keywords and suggestions, get ad/organic/related/suggested keywords, competitors, keyword top/full top, top URLs, and keyword search summaries","Project management: create, delete, and get projects","Rank tracker: get SERP history for keywords and URLs, project regions, project status, projects, and top competitors history","URL analysis: get URL competitors, keywords, missing keywords, and summary traffic"],"authentication":"Serpstat API token required","commonUseCases":["Automating SEO audits and monitoring audit results over time","Researching keywords, competitors, and backlink profiles for domains or URLs","Tracking rankings and SERP history for projects, keywords, and URLs","Managing Serpstat projects and retrieving reporting data for dashboards"],"limitations":["Only one API token per user","No sandbox or test environment is available","API usage may be limited by credits/data volume, so Page and Size fields are recommended during testing"],"relatedNodes":[]}


node_type: n8n-nodes-anyapi.anyApi
package_name: n8n-nodes-anyapi
display_name: AnyAPI
description: Run any scraping or data API through AnyAPI, billed per request in USD
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kevinwang-anyapi
author_github_url: https://github.com/getanyapi-com/
npm_package_name: n8n-nodes-anyapi
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:34.605Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "run",
      "options": [
        {
          "name": "Run API",
          "value": "run",
          "action": "Run an API",
          "description": "Execute an API by SKU with a normalized input payload"
        },
        {
          "name": "Get API Schema",
          "value": "getSchema",
          "action": "Get an API schema",
          "description": "Fetch the input and output schema for one API"
        },
        {
          "name": "List APIs",
          "value": "list",
          "action": "List available data sources",
          "description": "Browse the AnyAPI catalog"
        },
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get wallet balance",
          "description": "Return the remaining wallet balance in USD"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run API",
      "value": "run",
      "action": "Run an API",
      "description": "Execute an API by SKU with a normalized input payload"
    },
    {
      "name": "Get API Schema",
      "value": "getSchema",
      "action": "Get an API schema",
      "description": "Fetch the input and output schema for one API"
    },
    {
      "name": "List APIs",
      "value": "list",
      "action": "List available data sources",
      "description": "Browse the AnyAPI catalog"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get wallet balance",
      "description": "Return the remaining wallet balance in USD"
    }
  ]

npm_readme:
  # n8n-nodes-anyapi

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

  AnyAPI is a unified marketplace for scraping and data APIs: reach hundreds of third-party APIs through one key, pay per request in real USD, no subscription. AnyAPI normalizes the response schema across providers and fails over automatically on error.

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

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

  ## Installation

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

  In n8n, go to **Settings > Community Nodes**, select **Install**, and enter:

  ```
  n8n-nodes-anyapi
  ```

  ## Operations

  The node exposes one **AnyAPI** node with four operations:

  - **Run API** - execute any API by SKU. Inputs render as typed fields loaded from the API schema (or raw JSON if you prefer). Returns `output`, `provider`, `costUsd`, and `items`.
  - **Get API Schema** - fetch the input and output JSON Schema for one API.
  - **List APIs** - browse the AnyAPI catalog, optionally filtered by query and category.
  - **Get Balance** - return the remaining wallet balance in USD.

  The **API** dropdown loads live from the AnyAPI catalog, so every available SKU is selectable and newly added providers appear automatically.

  ### Response budget options (Run API)

  These trim the response payload without changing what you are charged:

  - **Fields** - comma-separated keys to keep on each result item (dotted paths like `author.name` allowed).
  - **Max Items** - cap the number of result items returned.
  - **Summary Only** - return only a structural outline instead of the full data.

  ## Credentials

  You need an AnyAPI key.

  1. Create an account at [getanyapi.com/dashboard](https://getanyapi.com/dashboard).
  2. Copy your API key.
  3. In n8n, create new **AnyAPI API** credentials and paste the key.

  The credential is validated against the wallet balance endpoint when you save it. New accounts start with a small free credit, so you can test before topping up.

  ## Usage

  1. Add the **AnyAPI** node to your workflow.
  2. Select **Run API**.
  3. Pick an API from the dropdown, for example **Google Search** or **Reddit Search**. Each option shows its live price (per request, per result, or both).
  4. Provide the input. There are two **Input Mode** choices:
     - **Fields (from schema)** - the default. The node loads the selected API's input schema and renders typed fields, with required fields flagged and enum fields shown as dropdowns. No JSON to hand write.
     - **JSON** - provide the raw payload, useful for expressions, for example:

       ```json
       { "query": "apify alternative" }
       ```

  5. Execute. The node returns clean JSON plus the exact `costUsd` of the call.

  ## Example workflows

  **Local lead machine** - type a niche and a city, scrape Google Maps with contact details, and write a personalized opener per business:

  1. **Form Trigger** - fields: `Business type`, `Location`.
  2. **AnyAPI** (Run API) - select **Google Maps Contacts** (`maps.contacts`), input:

     ```json
     { "query": "{{ $json['Business type'] }}", "location": "{{ $json['Location'] }}", "limit": 10 }
     ```

  3. **Split Out** on `output.data.items` to get one item per business.
  4. **AI Agent** - drafts a personalized outreach line from each business.
  5. **Google Sheets** (Append) - log the enriched leads.

  **Company 360 brief** - fan out across several AnyAPI endpoints on one key (Google News, Trustpilot, Similarweb, Reddit, LinkedIn), merge them, and have an AI agent write a one-page company brief. Because every source shares the same credential and response envelope (`output` + `costUsd`), adding a sixth source is just another AnyAPI node.

  ## Resources

  - [AnyAPI documentation](https://getanyapi.com/docs)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Connects n8n workflows to AnyAPI, a unified marketplace for scraping and data APIs. It lets you run many third-party APIs through one key with normalized responses, automatic failover, and per-request billing.","capabilities":["Run any API by SKU with inputs rendered from the API schema or entered as raw JSON","Get API Schema to fetch input and output JSON Schema for a selected API","List APIs in the AnyAPI catalog, optionally filtered by query and category","Get wallet balance in USD","Load available APIs live from the AnyAPI catalog so new providers appear automatically","Trim Run API response payloads with Fields, Max Items, and Summary Only options"],"authentication":"API key required (AnyAPI API credential)","commonUseCases":["Scrape search, maps, social, review, or company data from multiple providers through one workflow node","Build lead generation workflows using APIs like Google Maps Contacts and enrich results for outreach","Create company research or briefing workflows by fanning out across multiple data sources and merging results"],"limitations":["Pricing is per request in USD, so usage incurs costs per API call","The node only supports the four documented operations","Response budget options reduce returned data size but do not reduce billing"],"relatedNodes":["Split Out","AI Agent","Google Sheets","Form Trigger"]}


node_type: n8n-nodes-ibm-quantum.ibmQuantumTrigger
package_name: n8n-nodes-ibm-quantum
display_name: IBM Quantum Trigger (Unofficial)
description: Starts the workflow when an IBM Quantum job finishes (completed, failed or canceled)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: tuguidragos
author_github_url: https://github.com/TuguiDragos/
npm_package_name: n8n-nodes-ibm-quantum
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.606Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  <h1 align="center">n8n-nodes-ibm-quantum</h1>

  <p align="center">Build, run and retrieve quantum circuits on the IBM Quantum Platform, straight from n8n.</p>

  <p align="center">
    <a href="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml"><img src="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/npm/v/n8n-nodes-ibm-quantum?style=flat&logo=npm&logoColor=white&color=CB3837" alt="npm version"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/badge/n8n-verified%20community%20node-EA4B71?style=flat&logo=n8n&logoColor=white" alt="Verified n8n community node"></a>
    <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-2E7D32?style=flat" alt="License: MIT"></a>
  </p>

  <p align="center"><sub>Unofficial, community-maintained node. Not affiliated with, endorsed by, or sponsored by IBM. IBM Quantum and Qiskit are trademarks of International Business Machines Corporation.</sub></p>

  <p align="center"><sub>Verified by n8n, so it installs on n8n Cloud as well as self-hosted.</sub></p>

  ## What it does

  The node groups its work into five resources.

  | Resource | Operations |
  | --- | --- |
  | Backend | List, Get Configuration, Get Properties, Get Status, Get Least Busy |
  | Circuit | Build (from a gate list), Import OpenQASM 3 |
  | Job | Submit to Sampler, Submit to Estimator, Get Status, Get Results, Get Logs, Get Metrics, List (with filters), Update Tags, Cancel, Delete |
  | Session | Create (batch or dedicated), Get, Set Accepting Jobs, Close |
  | Account | Get Usage, Get Instance, Get Configuration |

  It ships three nodes: the main **IBM Quantum** action node and two polling triggers (**IBM Quantum Trigger** and **IBM Quantum Error Trigger**).

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Trigger%20Picker.png" alt="IBM Quantum trigger and error-trigger nodes shown in the n8n trigger picker" width="460">
  </p>
  <p align="center"><sub>Both trigger nodes appear in the n8n trigger picker.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20A.png" alt="IBM Quantum node details listing the trigger and the Account and Backend actions" width="330">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20B.png" alt="IBM Quantum node details listing the Circuit, Job and Session actions" width="330">
  </p>
  <p align="center"><sub>All five resources and their operations in the node's action list.</sub></p>

  ## Articles

  - [My IBM Quantum node for n8n is now live](https://tuguidragos.com/ibm-quantum-node-for-n8n/) — the launch, the n8n verification, and what the three nodes do.
  - [Running Quantum Circuits on Real IBM Hardware from n8n](https://tuguidragos.com/quantum-circuits-ibm-hardware-n8n/) — an end-to-end Bell state on a real QPU (ibm_kingston), including the transpilation step that trips up most first attempts.

  ## Architecture

  The node is a thin REST wrapper with no runtime dependencies. It does not bundle Qiskit or any quantum library. Circuits are expressed as OpenQASM 3 strings, either built by the node from a gate list or passed in directly. The IBM Cloud API key is exchanged for a short-lived IAM bearer token, which n8n caches and refreshes automatically.

  ## Installation

  On self-hosted n8n, open the community nodes screen and enter the package name `n8n-nodes-ibm-quantum`. It is verified by n8n, so it is also installable directly on n8n Cloud.

  ## Prerequisites

  - An IBM Cloud account with access to the IBM Quantum Platform
  - An IBM Cloud API key
  - The Cloud Resource Name (CRN) of your Qiskit Runtime instance
  - n8n on a recent version that supports community nodes

  ## Getting your credentials

  Create an **IBM Quantum API** credential in n8n with these fields.

  1. **API Key**: in the IBM Cloud console open [Manage > Access (IAM) > API keys](https://cloud.ibm.com/iam/apikeys), create a key, and copy it immediately (it is shown only once). The node exchanges it for a short-lived IAM token at request time.
  2. **Instance CRN**: open the [IBM Quantum Platform instances page](https://quantum.cloud.ibm.com/instances) and copy the CRN of your Qiskit Runtime instance. It is sent as the `Service-CRN` header.
  3. **Region**: pick US East or EU (Germany) to match your instance. This selects the API host.
  4. **API Version**: the date sent in the `IBM-API-Version` header. The response schema is versioned by this date. The default is a known good value that you can update as IBM publishes newer versions.

  The credential includes a test that calls the backends endpoint, so you can confirm all four fields at once with the **Test** button.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20account%20-%20Credentials.png" alt="IBM Quantum API credential in n8n showing a successful connection test" width="720">
  </p>
  <p align="center"><sub>The credential form after a successful connection test.</sub></p>

  ## Example workflow

  A four-node flow that prepares a Bell state, picks a backend, runs it and reads the counts.

  1. **Circuit > Build**: Number of Qubits `2`, Number of Classical Bits `2`. Add gates in order: Hadamard on qubits `0`; CNOT / CX on qubits `0,1`; Measure on qubits `0` with Classical Bit `0`; Measure on qubits `1` with Classical Bit `1`. Outputs `qasm3`, `numQubits`, `numClbits`, `gateCount`.
  2. **Backend > Get Least Busy**: Minimum Qubits `2`, Include Simulators off. Outputs `leastBusy` with the backend name.
  3. **Job > Submit**: Primitive Sampler, Backend `={{ $json.leastBusy }}`, OpenQASM 3 Circuit `={{ $('Build').item.json.qasm3 }}` (use the name of your Circuit node), Shots `1024`. Outputs `jobId`.
  4. **Job > Get Results**: Job ID `={{ $json.jobId }}`, Poll Interval `5`, Max Wait `300`. Outputs the parsed `pubs`, each carrying `counts` for the Sampler.

  <p align="center">
    <img src=".github/images/Get%20Least%20Busy%20QPU.png" alt="Get Least Busy backend node choosing the least busy QPU" width="720">
  </p>
  <p align="center"><sub>Get Least Busy ranks the online devices by queue length and returns the best one.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20A.png" alt="Submit to Sampler node with an ISA circuit, returning a job ID" width="720">
  </p>
  <p align="center"><sub>Submit to Sampler sends the circuit and returns immediately with a <code>jobId</code>.</sub></p>

  ## Long-running jobs

  Real hardware jobs can spend a long time in the queue, sometimes minutes to hours. How you wait for the result matters.

  **Get Results blocks the execution while it polls.** It calls the job endpoint every Poll Interval seconds until the job finishes or Max Wait is reached, holding that one execution open the whole time. That is fine for quick jobs and simulators, but for a long hardware queue it is fragile: if n8n restarts or the run hits a limit, the execution is interrupted and you see "Execution stopped at this node". IBM exposes no push or callback (verified against the API), so something has to poll; the question is whether it blocks a running execution.

  **The healthy pattern is to decouple submission from result handling** with the **IBM Quantum Trigger**:

  - One workflow submits the job and finishes immediately with the `jobId`. Nothing blocks.
  - A second, **active** workflow starts with the IBM Quantum Trigger. It polls IBM in the background (the n8n scheduler, not a held-open execution) and fires only when a job reaches a terminal state. Its Get Results then returns at once, because the job is already finished.

  So polling still happens, but in the background instead of inside a blocking node held open for the whole Max Wait window (300 seconds by default). Use Get Results directly for short jobs and simulators; use Submit plus the trigger for long hardware runs.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20B.png" alt="IBM Quantum Trigger firing on job completion, then Get Results returning measurement counts" width="720">
  </p>
  <p align="center"><sub>The IBM Quantum Trigger fires when the job finishes, and Get Results returns the measurement counts at once.</sub></p>

  IBM does not push notifications, so the trigger polls. Set the interval with the built-in Poll Times field, and choose which terminal status should fire it. The trigger only polls while its workflow is **active** (toggle Active); for a one-off test use Fetch Test Event. Each poll scans only finished jobs and skips the circuit payloads, so it stays light. If several workflows share one instance, set **Tags** on the Submit operation and the matching **Tag** filter on the trigger, so each workflow reacts only to its own jobs.

  For production, pair it with the **IBM Quantum Error Trigger**, which fires only when a job fails or is canceled (queue timeout, a calibration fault, or a manual cancel from the IBM dashboard). It emits the failure `reason`, `reasonCode` and `reasonSolution` from the job, so a second workflow can alert an engineer or fall back to a simulator instead of stalling.

  ## Sessions and batches

  Hybrid quantum-classical loops (VQE, QAOA) submit many circuits in sequence, adjusting parameters between iterations. Submitting each as a standalone job sends every iteration back to the general queue. The **Session** resource avoids that:

  - **Create** a session with mode **Batch** (queues jobs to run consecutively; the default and the only mode the Open plan allows) or **Dedicated** (reserves the backend for low-latency back-to-back jobs, paid plans only). It returns a `sessionId`.
  - Pass that `sessionId` into the **Session ID** field of each Submit, so the jobs run inside the reservation.
  - **Close** the session at the end of the workflow (or set Accepting Jobs to false), so it does not hold the backend.

  Use the **Account** resource (Get Usage) to check `usage_consumed_seconds` against `usage_limit_seconds` before launching a large run.

  ## Gate syntax

  In the Circuit Build operation each gate has a Qubits field and, for parametric gates, a Parameters field. Both are comma separated.

  - Single qubit gates take one qubit index, for example `0`.
  - Two qubit controlled gates take the control first and the target last, for example `0,1` for control 0 and target 1.
  - The Toffoli (CCX) gate takes two controls and a target, for example `0,1,2`.
  - Parametric gates read their angles in radians from the Parameters field. RX, RY, RZ, Phase and the Controlled-R gates take one value; the U gate takes exactly three (theta, phi, lambda).
  - The Measure instruction writes to the classical bit given in the Classical Bit field.

  Invalid input (wrong number of qubits or parameters, an out-of-range index, or a non-numeric value) is rejected at build time with a clear error, so a malformed program never reaches IBM.

  The Build operation outputs a `qasm3` string that you pass into a Job Submit node using an expression.

  ## Primitives and options

  The Submit operation is split per primitive, since their inputs differ:

  - **Submit to Sampler** returns measurement counts. Set Shots to the number of repetitions.
  - **Submit to Estimator** returns expectation values. Set Observables to a Pauli string whose length matches the qubit count (for example `ZZ` for two qubits) or an array of such strings, pick a Resilience Level, and optionally a Precision.

  Both share error-suppression toggles that matter on real hardware: **Dynamical Decoupling**, **Gate Twirling** and **Measurement Twirling**. For parametrized circuits, set **Parameters** to a JSON object binding parameter names to values, e.g. `{"theta": 1.5708}`. **Additional Options** is a JSON escape hatch merged into the primitive `options`, for example `{"default_shots": 4096}`.

  Both Submit operations also accept **Tags** (comma separated, stored on the job and usable as a filter in Job List and in the triggers) and a **Private** toggle that hides the job's inputs and results from other collaborators on plans that support private jobs.

  ## Bit order

  Sampler counts follow the classical register order. The bit `c[0]` is the rightmost bit in each output bitstring, which matches the standard Qiskit convention.

  ## Transpilation

  This is the single most common reason a real-hardware job fails, so it is worth understanding.

  ### Why it is needed

  A textbook circuit uses high-level gates such as `h` (Hadamard) and `cx` (CNOT). A real quantum chip does not run those directly. Each backend executes only a small set of **native gates** (for example a Heron processor like `ibm_fez` runs `rz`, `sx`, `x`, `cz`, plus measure and reset), and its qubits are wired in a fixed topology. Translating a circuit into a backend's native gates and connectivity is called **transpilation**, and the result is an **ISA** (Instruction Set Architecture) circuit.

  The Qiskit Runtime REST API **does not transpile**. It expects an ISA circuit and rejects anything else. If you submit a raw circuit to a real backend you get a failed job with `reason_code: 1517`:

  ```
  The instruction h on qubits (0,) is not supported by the target system.
  Transpile your circuits for the target before submitting a primitive query.
  ```

  This is not a node bug. The node builds, submits and reads the job correctly; the hardware refuses a non-ISA circuit.

  ### How to transpile (free, any plan)

  Transpile locally with Qiskit, then feed the ISA string into the node. You do not need live credentials: a fake backend carries the real topology and native gate set. Current Qiskit (2.5+) requires Python with NumPy 2.0 or newer.

  ```python
  from qiskit import QuantumCircuit, qasm3
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
  from qiskit_ibm_runtime.fake_provider import FakeFez  # mirrors ibm_fez

  backend = FakeFez()

  qc = QuantumCircuit(2, 2)
  qc.h(0)
  qc.cx(0, 1)
  qc.measure(0, 0)
  qc.measure(1, 1)

  isa = generate_preset_pass_manager(optimization_level=1, backend=backend).run(qc)
  print(qasm3.dumps(isa))  # paste this ISA string into the node
  ```

  For a real run, swap the fake backend for the live one (`QiskitRuntimeService(channel="ibm_cloud", token=..., instance=...).backend("ibm_fez")`) so the layout matches the exact device.

  A Bell circuit transpiled for `ibm_fez` comes out in native gates only:

  ```
  OPENQASM 3.0;
  include "stdgates.inc";
  bit[2] c;
  rz(pi/2) $0;
  sx $0;
  rz(pi/2) $0;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  cz $0, $1;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  c[0] = measure $0;
  c[1] = measure $1;
  ```

  ### How to run it in the node

  1. Put the ISA string into **Circuit, Import OpenQASM 3**, or paste it straight into the **OpenQASM 3 Circuit** field of a Submit operation.
  2. Pin **Backend** to the exact device you transpiled for (for example `ibm_fez`), not Get Least Busy. An ISA circuit is specific to one topology; another device may reject it.
  3. Submit to Sampler or Estimator as usual.

  ### The cloud Transpiler Service (paid plans only)

  IBM also offers the [Qiskit Transpiler Service](https://quantum.cloud.ibm.com/docs/en/api/qiskit-transpiler-service-rest/tags/transpiler-methods), a separate cloud API (`https://cloud-transpiler.quantum.ibm.com/transpile`) that transpiles remotely, optionally with AI-powered passes. It is **only available on the Premium, Flex and On-Prem plans**, not the free Open plan, and it lives at a different host from the Qiskit Runtime API, so it is not wired into this node. On the Open plan, transpile locally as shown above.

  ### Simulators

  Simulators accept any gate and need no transpilation, so setting **Include Simulators** on Get Least Busy lets a circuit run as written. Note that the current IBM Quantum Platform has largely retired cloud simulators, so an instance may have none available and fall back to hardware.

  ## Troubleshooting

  - **401 or IAM token errors on every call**: the API key is wrong, revoked or expired. Regenerate it in IBM Cloud and update the credential.
  - **404 or an empty backends list**: the Region does not match the region of your instance CRN. US East and EU (Germany) are separate hosts.
  - **Job never completes in Get Results**: large hardware queues can exceed the Max Wait. Raise Max Wait, or poll separately with Get Status and call Get Results once the job is done.
  - **Job fails with `reason_code: 1517` (instruction not supported)**: the circuit was not transpiled to the backend's native gates. See the Transpilation section above.
  - **Submit rejected by IBM**: the Observables length does not match the qubit count, or the circuit is not valid ISA for the chosen backend.

  ## Development

  ```bash
  npm install   # on Node 24+, use: npm install --ignore-scripts
  npm run lint
  npm run build
  npm test
  ```

  See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow. Release history lives in [CHANGELOG.md](CHANGELOG.md) and the GitHub Releases page.

  ## Releasing

  Releases publish to npm with provenance through the `publish.yml` GitHub Actions workflow when a GitHub release is created. Authentication uses an npm automation token stored as the `NPM_TOKEN` repository secret; provenance still works because the repo is public and the job has `id-token: write`. The package version must match the release tag.

  ## Notes on the live API

  The request and response shapes follow the published Qiskit Runtime REST API reference. The job body sends the primitive as `program_id`, the circuit inside a PUB, and `version` 2 in `params`, with `resilience_level` at the params level for the Estimator. Sampler results are read from `results[i].data[register].samples` as hex strings, and the least busy backend is chosen from the backends list, which already carries the status, qubit count and queue length for each device.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Starts a workflow when an IBM Quantum job changes state, specifically when it completes, fails, or is canceled. It is part of a community node package for interacting with the IBM Quantum Platform from n8n.","capabilities":["Polling trigger for IBM Quantum job completion events","Triggers on job finished states such as completed, failed, or canceled","Works alongside the main IBM Quantum action node and IBM Quantum Error Trigger","Integrates with IBM Quantum jobs created through the package's job submission operations"],"authentication":"IBM Quantum API credential using an IBM Cloud API key, Instance CRN, Region, and API Version; the API key is exchanged for a short-lived IAM bearer token automatically","commonUseCases":["Continue a workflow after a long-running IBM Quantum job finishes","Notify or process results when a quantum computation completes or fails","Monitor job lifecycle events in automated quantum workflows"],"limitations":["Unofficial, community-maintained node not affiliated with IBM","Polling trigger rather than a real-time push/webhook trigger","Only starts workflows for job completion-related states (completed, failed, canceled)"],"relatedNodes":["IBM Quantum","IBM Quantum Error Trigger"]}


node_type: n8n-nodes-ibm-quantum.ibmQuantum
package_name: n8n-nodes-ibm-quantum
display_name: IBM Quantum (Unofficial)
description: Build, run and retrieve quantum circuits on the IBM Quantum Platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: tuguidragos
author_github_url: https://github.com/TuguiDragos/
npm_package_name: n8n-nodes-ibm-quantum
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.607Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "job",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Backend",
          "value": "backend"
        },
        {
          "name": "Circuit",
          "value": "circuit"
        },
        {
          "name": "Job",
          "value": "job"
        },
        {
          "name": "Session",
          "value": "session"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUsage",
      "options": [
        {
          "name": "Get Instance",
          "value": "getInstance",
          "action": "Get the current instance details"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get instance usage and allocation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Configuration",
          "value": "getConfiguration",
          "action": "Get backend configuration"
        },
        {
          "name": "Get Least Busy",
          "value": "getLeastBusy",
          "action": "Get the least busy backend"
        },
        {
          "name": "Get Properties",
          "value": "getProperties",
          "action": "Get backend properties"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get backend status"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List available backends"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "backend"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "build",
      "options": [
        {
          "name": "Build",
          "value": "build",
          "action": "Build a circuit from gates"
        },
        {
          "name": "Import OpenQASM 3",
          "value": "import",
          "action": "Import an existing OpenQASM 3 circuit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "circuit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "submitSampler",
      "options": [
        {
          "name": "Cancel",
          "value": "cancel",
          "action": "Cancel a job"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a job"
        },
        {
          "name": "Get Results",
          "value": "getResults",
          "action": "Poll until the job finishes, then retrieve its results"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get the status of a job"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List recent jobs"
        },
        {
          "name": "Submit to Estimator",
          "value": "submitEstimator",
          "action": "Submit a circuit to the Estimator primitive"
        },
        {
          "name": "Submit to Sampler",
          "value": "submitSampler",
          "action": "Submit a circuit to the Sampler primitive"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "job"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Close",
          "value": "close",
          "action": "Close a session"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a session or batch"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a session"
        },
        {
          "name": "Set Accepting Jobs",
          "value": "setAccepting",
          "action": "Set whether the session accepts new jobs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Instance",
      "value": "getInstance",
      "action": "Get the current instance details",
      "resource": "account"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get instance usage and allocation",
      "resource": "account"
    },
    {
      "name": "Get Configuration",
      "value": "getConfiguration",
      "action": "Get backend configuration",
      "resource": "backend"
    },
    {
      "name": "Get Least Busy",
      "value": "getLeastBusy",
      "action": "Get the least busy backend",
      "resource": "backend"
    },
    {
      "name": "Get Properties",
      "value": "getProperties",
      "action": "Get backend properties",
      "resource": "backend"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get backend status",
      "resource": "backend"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List available backends",
      "resource": "backend"
    },
    {
      "name": "Build",
      "value": "build",
      "action": "Build a circuit from gates",
      "resource": "circuit"
    },
    {
      "name": "Import OpenQASM 3",
      "value": "import",
      "action": "Import an existing OpenQASM 3 circuit",
      "resource": "circuit"
    },
    {
      "name": "Cancel",
      "value": "cancel",
      "action": "Cancel a job",
      "resource": "job"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a job",
      "resource": "job"
    },
    {
      "name": "Get Results",
      "value": "getResults",
      "action": "Poll until the job finishes, then retrieve its results",
      "resource": "job"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get the status of a job",
      "resource": "job"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List recent jobs",
      "resource": "job"
    },
    {
      "name": "Submit to Estimator",
      "value": "submitEstimator",
      "action": "Submit a circuit to the Estimator primitive",
      "resource": "job"
    },
    {
      "name": "Submit to Sampler",
      "value": "submitSampler",
      "action": "Submit a circuit to the Sampler primitive",
      "resource": "job"
    },
    {
      "name": "Close",
      "value": "close",
      "action": "Close a session",
      "resource": "session"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a session or batch",
      "resource": "session"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a session",
      "resource": "session"
    },
    {
      "name": "Set Accepting Jobs",
      "value": "setAccepting",
      "action": "Set whether the session accepts new jobs",
      "resource": "session"
    }
  ]

npm_readme:
  <h1 align="center">n8n-nodes-ibm-quantum</h1>

  <p align="center">Build, run and retrieve quantum circuits on the IBM Quantum Platform, straight from n8n.</p>

  <p align="center">
    <a href="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml"><img src="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/npm/v/n8n-nodes-ibm-quantum?style=flat&logo=npm&logoColor=white&color=CB3837" alt="npm version"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/badge/n8n-verified%20community%20node-EA4B71?style=flat&logo=n8n&logoColor=white" alt="Verified n8n community node"></a>
    <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-2E7D32?style=flat" alt="License: MIT"></a>
  </p>

  <p align="center"><sub>Unofficial, community-maintained node. Not affiliated with, endorsed by, or sponsored by IBM. IBM Quantum and Qiskit are trademarks of International Business Machines Corporation.</sub></p>

  <p align="center"><sub>Verified by n8n, so it installs on n8n Cloud as well as self-hosted.</sub></p>

  ## What it does

  The node groups its work into five resources.

  | Resource | Operations |
  | --- | --- |
  | Backend | List, Get Configuration, Get Properties, Get Status, Get Least Busy |
  | Circuit | Build (from a gate list), Import OpenQASM 3 |
  | Job | Submit to Sampler, Submit to Estimator, Get Status, Get Results, Get Logs, Get Metrics, List (with filters), Update Tags, Cancel, Delete |
  | Session | Create (batch or dedicated), Get, Set Accepting Jobs, Close |
  | Account | Get Usage, Get Instance, Get Configuration |

  It ships three nodes: the main **IBM Quantum** action node and two polling triggers (**IBM Quantum Trigger** and **IBM Quantum Error Trigger**).

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Trigger%20Picker.png" alt="IBM Quantum trigger and error-trigger nodes shown in the n8n trigger picker" width="460">
  </p>
  <p align="center"><sub>Both trigger nodes appear in the n8n trigger picker.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20A.png" alt="IBM Quantum node details listing the trigger and the Account and Backend actions" width="330">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20B.png" alt="IBM Quantum node details listing the Circuit, Job and Session actions" width="330">
  </p>
  <p align="center"><sub>All five resources and their operations in the node's action list.</sub></p>

  ## Articles

  - [My IBM Quantum node for n8n is now live](https://tuguidragos.com/ibm-quantum-node-for-n8n/) — the launch, the n8n verification, and what the three nodes do.
  - [Running Quantum Circuits on Real IBM Hardware from n8n](https://tuguidragos.com/quantum-circuits-ibm-hardware-n8n/) — an end-to-end Bell state on a real QPU (ibm_kingston), including the transpilation step that trips up most first attempts.

  ## Architecture

  The node is a thin REST wrapper with no runtime dependencies. It does not bundle Qiskit or any quantum library. Circuits are expressed as OpenQASM 3 strings, either built by the node from a gate list or passed in directly. The IBM Cloud API key is exchanged for a short-lived IAM bearer token, which n8n caches and refreshes automatically.

  ## Installation

  On self-hosted n8n, open the community nodes screen and enter the package name `n8n-nodes-ibm-quantum`. It is verified by n8n, so it is also installable directly on n8n Cloud.

  ## Prerequisites

  - An IBM Cloud account with access to the IBM Quantum Platform
  - An IBM Cloud API key
  - The Cloud Resource Name (CRN) of your Qiskit Runtime instance
  - n8n on a recent version that supports community nodes

  ## Getting your credentials

  Create an **IBM Quantum API** credential in n8n with these fields.

  1. **API Key**: in the IBM Cloud console open [Manage > Access (IAM) > API keys](https://cloud.ibm.com/iam/apikeys), create a key, and copy it immediately (it is shown only once). The node exchanges it for a short-lived IAM token at request time.
  2. **Instance CRN**: open the [IBM Quantum Platform instances page](https://quantum.cloud.ibm.com/instances) and copy the CRN of your Qiskit Runtime instance. It is sent as the `Service-CRN` header.
  3. **Region**: pick US East or EU (Germany) to match your instance. This selects the API host.
  4. **API Version**: the date sent in the `IBM-API-Version` header. The response schema is versioned by this date. The default is a known good value that you can update as IBM publishes newer versions.

  The credential includes a test that calls the backends endpoint, so you can confirm all four fields at once with the **Test** button.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20account%20-%20Credentials.png" alt="IBM Quantum API credential in n8n showing a successful connection test" width="720">
  </p>
  <p align="center"><sub>The credential form after a successful connection test.</sub></p>

  ## Example workflow

  A four-node flow that prepares a Bell state, picks a backend, runs it and reads the counts.

  1. **Circuit > Build**: Number of Qubits `2`, Number of Classical Bits `2`. Add gates in order: Hadamard on qubits `0`; CNOT / CX on qubits `0,1`; Measure on qubits `0` with Classical Bit `0`; Measure on qubits `1` with Classical Bit `1`. Outputs `qasm3`, `numQubits`, `numClbits`, `gateCount`.
  2. **Backend > Get Least Busy**: Minimum Qubits `2`, Include Simulators off. Outputs `leastBusy` with the backend name.
  3. **Job > Submit**: Primitive Sampler, Backend `={{ $json.leastBusy }}`, OpenQASM 3 Circuit `={{ $('Build').item.json.qasm3 }}` (use the name of your Circuit node), Shots `1024`. Outputs `jobId`.
  4. **Job > Get Results**: Job ID `={{ $json.jobId }}`, Poll Interval `5`, Max Wait `300`. Outputs the parsed `pubs`, each carrying `counts` for the Sampler.

  <p align="center">
    <img src=".github/images/Get%20Least%20Busy%20QPU.png" alt="Get Least Busy backend node choosing the least busy QPU" width="720">
  </p>
  <p align="center"><sub>Get Least Busy ranks the online devices by queue length and returns the best one.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20A.png" alt="Submit to Sampler node with an ISA circuit, returning a job ID" width="720">
  </p>
  <p align="center"><sub>Submit to Sampler sends the circuit and returns immediately with a <code>jobId</code>.</sub></p>

  ## Long-running jobs

  Real hardware jobs can spend a long time in the queue, sometimes minutes to hours. How you wait for the result matters.

  **Get Results blocks the execution while it polls.** It calls the job endpoint every Poll Interval seconds until the job finishes or Max Wait is reached, holding that one execution open the whole time. That is fine for quick jobs and simulators, but for a long hardware queue it is fragile: if n8n restarts or the run hits a limit, the execution is interrupted and you see "Execution stopped at this node". IBM exposes no push or callback (verified against the API), so something has to poll; the question is whether it blocks a running execution.

  **The healthy pattern is to decouple submission from result handling** with the **IBM Quantum Trigger**:

  - One workflow submits the job and finishes immediately with the `jobId`. Nothing blocks.
  - A second, **active** workflow starts with the IBM Quantum Trigger. It polls IBM in the background (the n8n scheduler, not a held-open execution) and fires only when a job reaches a terminal state. Its Get Results then returns at once, because the job is already finished.

  So polling still happens, but in the background instead of inside a blocking node held open for the whole Max Wait window (300 seconds by default). Use Get Results directly for short jobs and simulators; use Submit plus the trigger for long hardware runs.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20B.png" alt="IBM Quantum Trigger firing on job completion, then Get Results returning measurement counts" width="720">
  </p>
  <p align="center"><sub>The IBM Quantum Trigger fires when the job finishes, and Get Results returns the measurement counts at once.</sub></p>

  IBM does not push notifications, so the trigger polls. Set the interval with the built-in Poll Times field, and choose which terminal status should fire it. The trigger only polls while its workflow is **active** (toggle Active); for a one-off test use Fetch Test Event. Each poll scans only finished jobs and skips the circuit payloads, so it stays light. If several workflows share one instance, set **Tags** on the Submit operation and the matching **Tag** filter on the trigger, so each workflow reacts only to its own jobs.

  For production, pair it with the **IBM Quantum Error Trigger**, which fires only when a job fails or is canceled (queue timeout, a calibration fault, or a manual cancel from the IBM dashboard). It emits the failure `reason`, `reasonCode` and `reasonSolution` from the job, so a second workflow can alert an engineer or fall back to a simulator instead of stalling.

  ## Sessions and batches

  Hybrid quantum-classical loops (VQE, QAOA) submit many circuits in sequence, adjusting parameters between iterations. Submitting each as a standalone job sends every iteration back to the general queue. The **Session** resource avoids that:

  - **Create** a session with mode **Batch** (queues jobs to run consecutively; the default and the only mode the Open plan allows) or **Dedicated** (reserves the backend for low-latency back-to-back jobs, paid plans only). It returns a `sessionId`.
  - Pass that `sessionId` into the **Session ID** field of each Submit, so the jobs run inside the reservation.
  - **Close** the session at the end of the workflow (or set Accepting Jobs to false), so it does not hold the backend.

  Use the **Account** resource (Get Usage) to check `usage_consumed_seconds` against `usage_limit_seconds` before launching a large run.

  ## Gate syntax

  In the Circuit Build operation each gate has a Qubits field and, for parametric gates, a Parameters field. Both are comma separated.

  - Single qubit gates take one qubit index, for example `0`.
  - Two qubit controlled gates take the control first and the target last, for example `0,1` for control 0 and target 1.
  - The Toffoli (CCX) gate takes two controls and a target, for example `0,1,2`.
  - Parametric gates read their angles in radians from the Parameters field. RX, RY, RZ, Phase and the Controlled-R gates take one value; the U gate takes exactly three (theta, phi, lambda).
  - The Measure instruction writes to the classical bit given in the Classical Bit field.

  Invalid input (wrong number of qubits or parameters, an out-of-range index, or a non-numeric value) is rejected at build time with a clear error, so a malformed program never reaches IBM.

  The Build operation outputs a `qasm3` string that you pass into a Job Submit node using an expression.

  ## Primitives and options

  The Submit operation is split per primitive, since their inputs differ:

  - **Submit to Sampler** returns measurement counts. Set Shots to the number of repetitions.
  - **Submit to Estimator** returns expectation values. Set Observables to a Pauli string whose length matches the qubit count (for example `ZZ` for two qubits) or an array of such strings, pick a Resilience Level, and optionally a Precision.

  Both share error-suppression toggles that matter on real hardware: **Dynamical Decoupling**, **Gate Twirling** and **Measurement Twirling**. For parametrized circuits, set **Parameters** to a JSON object binding parameter names to values, e.g. `{"theta": 1.5708}`. **Additional Options** is a JSON escape hatch merged into the primitive `options`, for example `{"default_shots": 4096}`.

  Both Submit operations also accept **Tags** (comma separated, stored on the job and usable as a filter in Job List and in the triggers) and a **Private** toggle that hides the job's inputs and results from other collaborators on plans that support private jobs.

  ## Bit order

  Sampler counts follow the classical register order. The bit `c[0]` is the rightmost bit in each output bitstring, which matches the standard Qiskit convention.

  ## Transpilation

  This is the single most common reason a real-hardware job fails, so it is worth understanding.

  ### Why it is needed

  A textbook circuit uses high-level gates such as `h` (Hadamard) and `cx` (CNOT). A real quantum chip does not run those directly. Each backend executes only a small set of **native gates** (for example a Heron processor like `ibm_fez` runs `rz`, `sx`, `x`, `cz`, plus measure and reset), and its qubits are wired in a fixed topology. Translating a circuit into a backend's native gates and connectivity is called **transpilation**, and the result is an **ISA** (Instruction Set Architecture) circuit.

  The Qiskit Runtime REST API **does not transpile**. It expects an ISA circuit and rejects anything else. If you submit a raw circuit to a real backend you get a failed job with `reason_code: 1517`:

  ```
  The instruction h on qubits (0,) is not supported by the target system.
  Transpile your circuits for the target before submitting a primitive query.
  ```

  This is not a node bug. The node builds, submits and reads the job correctly; the hardware refuses a non-ISA circuit.

  ### How to transpile (free, any plan)

  Transpile locally with Qiskit, then feed the ISA string into the node. You do not need live credentials: a fake backend carries the real topology and native gate set. Current Qiskit (2.5+) requires Python with NumPy 2.0 or newer.

  ```python
  from qiskit import QuantumCircuit, qasm3
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
  from qiskit_ibm_runtime.fake_provider import FakeFez  # mirrors ibm_fez

  backend = FakeFez()

  qc = QuantumCircuit(2, 2)
  qc.h(0)
  qc.cx(0, 1)
  qc.measure(0, 0)
  qc.measure(1, 1)

  isa = generate_preset_pass_manager(optimization_level=1, backend=backend).run(qc)
  print(qasm3.dumps(isa))  # paste this ISA string into the node
  ```

  For a real run, swap the fake backend for the live one (`QiskitRuntimeService(channel="ibm_cloud", token=..., instance=...).backend("ibm_fez")`) so the layout matches the exact device.

  A Bell circuit transpiled for `ibm_fez` comes out in native gates only:

  ```
  OPENQASM 3.0;
  include "stdgates.inc";
  bit[2] c;
  rz(pi/2) $0;
  sx $0;
  rz(pi/2) $0;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  cz $0, $1;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  c[0] = measure $0;
  c[1] = measure $1;
  ```

  ### How to run it in the node

  1. Put the ISA string into **Circuit, Import OpenQASM 3**, or paste it straight into the **OpenQASM 3 Circuit** field of a Submit operation.
  2. Pin **Backend** to the exact device you transpiled for (for example `ibm_fez`), not Get Least Busy. An ISA circuit is specific to one topology; another device may reject it.
  3. Submit to Sampler or Estimator as usual.

  ### The cloud Transpiler Service (paid plans only)

  IBM also offers the [Qiskit Transpiler Service](https://quantum.cloud.ibm.com/docs/en/api/qiskit-transpiler-service-rest/tags/transpiler-methods), a separate cloud API (`https://cloud-transpiler.quantum.ibm.com/transpile`) that transpiles remotely, optionally with AI-powered passes. It is **only available on the Premium, Flex and On-Prem plans**, not the free Open plan, and it lives at a different host from the Qiskit Runtime API, so it is not wired into this node. On the Open plan, transpile locally as shown above.

  ### Simulators

  Simulators accept any gate and need no transpilation, so setting **Include Simulators** on Get Least Busy lets a circuit run as written. Note that the current IBM Quantum Platform has largely retired cloud simulators, so an instance may have none available and fall back to hardware.

  ## Troubleshooting

  - **401 or IAM token errors on every call**: the API key is wrong, revoked or expired. Regenerate it in IBM Cloud and update the credential.
  - **404 or an empty backends list**: the Region does not match the region of your instance CRN. US East and EU (Germany) are separate hosts.
  - **Job never completes in Get Results**: large hardware queues can exceed the Max Wait. Raise Max Wait, or poll separately with Get Status and call Get Results once the job is done.
  - **Job fails with `reason_code: 1517` (instruction not supported)**: the circuit was not transpiled to the backend's native gates. See the Transpilation section above.
  - **Submit rejected by IBM**: the Observables length does not match the qubit count, or the circuit is not valid ISA for the chosen backend.

  ## Development

  ```bash
  npm install   # on Node 24+, use: npm install --ignore-scripts
  npm run lint
  npm run build
  npm test
  ```

  See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow. Release history lives in [CHANGELOG.md](CHANGELOG.md) and the GitHub Releases page.

  ## Releasing

  Releases publish to npm with provenance through the `publish.yml` GitHub Actions workflow when a GitHub release is created. Authentication uses an npm automation token stored as the `NPM_TOKEN` repository secret; provenance still works because the repo is public and the job has `id-token: write`. The package version must match the release tag.

  ## Notes on the live API

  The request and response shapes follow the published Qiskit Runtime REST API reference. The job body sends the primitive as `program_id`, the circuit inside a PUB, and `version` 2 in `params`, with `resilience_level` at the params level for the Estimator. Sampler results are read from `results[i].data[register].samples` as hex strings, and the least busy backend is chosen from the backends list, which already carries the status, qubit count and queue length for each device.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Build, run, and retrieve quantum circuits on the IBM Quantum Platform from n8n. It provides actions for managing backends, circuits, jobs, sessions, and account usage, plus trigger nodes for polling and errors.","capabilities":["List, get configuration, get properties, get status, and get least-busy backend","Build quantum circuits from a gate list or import OpenQASM 3","Submit jobs to Sampler or Estimator primitives","Check job status, get results, list jobs, cancel jobs, and delete jobs","Create, get, update accepting-jobs state, and close sessions","Get account usage and Qiskit Runtime instance details","Provide IBM Quantum Trigger and IBM Quantum Error Trigger nodes for polling and error handling"],"authentication":"IBM Quantum API credential using IBM Cloud API key, Instance CRN, Region, and API Version; the API key is exchanged for a short-lived IAM bearer token","commonUseCases":["Build a Bell-state circuit, select the least busy backend, submit it as a Sampler job, and retrieve counts","Query backend availability and configuration before submitting a quantum workload","Track long-running hardware jobs with polling or trigger-based workflows","Manage Qiskit Runtime sessions for batched or dedicated execution"],"limitations":["Unofficial community-maintained node, not affiliated with or endorsed by IBM","Thin REST wrapper with no runtime dependencies; does not bundle Qiskit or other quantum libraries","Circuits are handled as OpenQASM 3 strings rather than through an embedded quantum SDK"],"relatedNodes":["IBM Quantum Trigger","IBM Quantum Error Trigger"]}


node_type: n8n-nodes-ibm-quantum.ibmQuantumErrorTrigger
package_name: n8n-nodes-ibm-quantum
display_name: IBM Quantum Error Trigger (Unofficial)
description: Starts the workflow when an IBM Quantum job fails or is canceled, with the failure reason and code
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: tuguidragos
author_github_url: https://github.com/TuguiDragos/
npm_package_name: n8n-nodes-ibm-quantum
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.608Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  <h1 align="center">n8n-nodes-ibm-quantum</h1>

  <p align="center">Build, run and retrieve quantum circuits on the IBM Quantum Platform, straight from n8n.</p>

  <p align="center">
    <a href="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml"><img src="https://github.com/TuguiDragos/n8n-nodes-ibm-quantum/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/npm/v/n8n-nodes-ibm-quantum?style=flat&logo=npm&logoColor=white&color=CB3837" alt="npm version"></a>
    <a href="https://www.npmjs.com/package/n8n-nodes-ibm-quantum"><img src="https://img.shields.io/badge/n8n-verified%20community%20node-EA4B71?style=flat&logo=n8n&logoColor=white" alt="Verified n8n community node"></a>
    <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-2E7D32?style=flat" alt="License: MIT"></a>
  </p>

  <p align="center"><sub>Unofficial, community-maintained node. Not affiliated with, endorsed by, or sponsored by IBM. IBM Quantum and Qiskit are trademarks of International Business Machines Corporation.</sub></p>

  <p align="center"><sub>Verified by n8n, so it installs on n8n Cloud as well as self-hosted.</sub></p>

  ## What it does

  The node groups its work into five resources.

  | Resource | Operations |
  | --- | --- |
  | Backend | List, Get Configuration, Get Properties, Get Status, Get Least Busy |
  | Circuit | Build (from a gate list), Import OpenQASM 3 |
  | Job | Submit to Sampler, Submit to Estimator, Get Status, Get Results, Get Logs, Get Metrics, List (with filters), Update Tags, Cancel, Delete |
  | Session | Create (batch or dedicated), Get, Set Accepting Jobs, Close |
  | Account | Get Usage, Get Instance, Get Configuration |

  It ships three nodes: the main **IBM Quantum** action node and two polling triggers (**IBM Quantum Trigger** and **IBM Quantum Error Trigger**).

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Trigger%20Picker.png" alt="IBM Quantum trigger and error-trigger nodes shown in the n8n trigger picker" width="460">
  </p>
  <p align="center"><sub>Both trigger nodes appear in the n8n trigger picker.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20A.png" alt="IBM Quantum node details listing the trigger and the Account and Backend actions" width="330">
    <img src=".github/images/IBM%20Quantum%20-%20Actions%20B.png" alt="IBM Quantum node details listing the Circuit, Job and Session actions" width="330">
  </p>
  <p align="center"><sub>All five resources and their operations in the node's action list.</sub></p>

  ## Articles

  - [My IBM Quantum node for n8n is now live](https://tuguidragos.com/ibm-quantum-node-for-n8n/) — the launch, the n8n verification, and what the three nodes do.
  - [Running Quantum Circuits on Real IBM Hardware from n8n](https://tuguidragos.com/quantum-circuits-ibm-hardware-n8n/) — an end-to-end Bell state on a real QPU (ibm_kingston), including the transpilation step that trips up most first attempts.

  ## Architecture

  The node is a thin REST wrapper with no runtime dependencies. It does not bundle Qiskit or any quantum library. Circuits are expressed as OpenQASM 3 strings, either built by the node from a gate list or passed in directly. The IBM Cloud API key is exchanged for a short-lived IAM bearer token, which n8n caches and refreshes automatically.

  ## Installation

  On self-hosted n8n, open the community nodes screen and enter the package name `n8n-nodes-ibm-quantum`. It is verified by n8n, so it is also installable directly on n8n Cloud.

  ## Prerequisites

  - An IBM Cloud account with access to the IBM Quantum Platform
  - An IBM Cloud API key
  - The Cloud Resource Name (CRN) of your Qiskit Runtime instance
  - n8n on a recent version that supports community nodes

  ## Getting your credentials

  Create an **IBM Quantum API** credential in n8n with these fields.

  1. **API Key**: in the IBM Cloud console open [Manage > Access (IAM) > API keys](https://cloud.ibm.com/iam/apikeys), create a key, and copy it immediately (it is shown only once). The node exchanges it for a short-lived IAM token at request time.
  2. **Instance CRN**: open the [IBM Quantum Platform instances page](https://quantum.cloud.ibm.com/instances) and copy the CRN of your Qiskit Runtime instance. It is sent as the `Service-CRN` header.
  3. **Region**: pick US East or EU (Germany) to match your instance. This selects the API host.
  4. **API Version**: the date sent in the `IBM-API-Version` header. The response schema is versioned by this date. The default is a known good value that you can update as IBM publishes newer versions.

  The credential includes a test that calls the backends endpoint, so you can confirm all four fields at once with the **Test** button.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20account%20-%20Credentials.png" alt="IBM Quantum API credential in n8n showing a successful connection test" width="720">
  </p>
  <p align="center"><sub>The credential form after a successful connection test.</sub></p>

  ## Example workflow

  A four-node flow that prepares a Bell state, picks a backend, runs it and reads the counts.

  1. **Circuit > Build**: Number of Qubits `2`, Number of Classical Bits `2`. Add gates in order: Hadamard on qubits `0`; CNOT / CX on qubits `0,1`; Measure on qubits `0` with Classical Bit `0`; Measure on qubits `1` with Classical Bit `1`. Outputs `qasm3`, `numQubits`, `numClbits`, `gateCount`.
  2. **Backend > Get Least Busy**: Minimum Qubits `2`, Include Simulators off. Outputs `leastBusy` with the backend name.
  3. **Job > Submit**: Primitive Sampler, Backend `={{ $json.leastBusy }}`, OpenQASM 3 Circuit `={{ $('Build').item.json.qasm3 }}` (use the name of your Circuit node), Shots `1024`. Outputs `jobId`.
  4. **Job > Get Results**: Job ID `={{ $json.jobId }}`, Poll Interval `5`, Max Wait `300`. Outputs the parsed `pubs`, each carrying `counts` for the Sampler.

  <p align="center">
    <img src=".github/images/Get%20Least%20Busy%20QPU.png" alt="Get Least Busy backend node choosing the least busy QPU" width="720">
  </p>
  <p align="center"><sub>Get Least Busy ranks the online devices by queue length and returns the best one.</sub></p>

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20A.png" alt="Submit to Sampler node with an ISA circuit, returning a job ID" width="720">
  </p>
  <p align="center"><sub>Submit to Sampler sends the circuit and returns immediately with a <code>jobId</code>.</sub></p>

  ## Long-running jobs

  Real hardware jobs can spend a long time in the queue, sometimes minutes to hours. How you wait for the result matters.

  **Get Results blocks the execution while it polls.** It calls the job endpoint every Poll Interval seconds until the job finishes or Max Wait is reached, holding that one execution open the whole time. That is fine for quick jobs and simulators, but for a long hardware queue it is fragile: if n8n restarts or the run hits a limit, the execution is interrupted and you see "Execution stopped at this node". IBM exposes no push or callback (verified against the API), so something has to poll; the question is whether it blocks a running execution.

  **The healthy pattern is to decouple submission from result handling** with the **IBM Quantum Trigger**:

  - One workflow submits the job and finishes immediately with the `jobId`. Nothing blocks.
  - A second, **active** workflow starts with the IBM Quantum Trigger. It polls IBM in the background (the n8n scheduler, not a held-open execution) and fires only when a job reaches a terminal state. Its Get Results then returns at once, because the job is already finished.

  So polling still happens, but in the background instead of inside a blocking node held open for the whole Max Wait window (300 seconds by default). Use Get Results directly for short jobs and simulators; use Submit plus the trigger for long hardware runs.

  <p align="center">
    <img src=".github/images/IBM%20Quantum%20-%20Workflow%20B.png" alt="IBM Quantum Trigger firing on job completion, then Get Results returning measurement counts" width="720">
  </p>
  <p align="center"><sub>The IBM Quantum Trigger fires when the job finishes, and Get Results returns the measurement counts at once.</sub></p>

  IBM does not push notifications, so the trigger polls. Set the interval with the built-in Poll Times field, and choose which terminal status should fire it. The trigger only polls while its workflow is **active** (toggle Active); for a one-off test use Fetch Test Event. Each poll scans only finished jobs and skips the circuit payloads, so it stays light. If several workflows share one instance, set **Tags** on the Submit operation and the matching **Tag** filter on the trigger, so each workflow reacts only to its own jobs.

  For production, pair it with the **IBM Quantum Error Trigger**, which fires only when a job fails or is canceled (queue timeout, a calibration fault, or a manual cancel from the IBM dashboard). It emits the failure `reason`, `reasonCode` and `reasonSolution` from the job, so a second workflow can alert an engineer or fall back to a simulator instead of stalling.

  ## Sessions and batches

  Hybrid quantum-classical loops (VQE, QAOA) submit many circuits in sequence, adjusting parameters between iterations. Submitting each as a standalone job sends every iteration back to the general queue. The **Session** resource avoids that:

  - **Create** a session with mode **Batch** (queues jobs to run consecutively; the default and the only mode the Open plan allows) or **Dedicated** (reserves the backend for low-latency back-to-back jobs, paid plans only). It returns a `sessionId`.
  - Pass that `sessionId` into the **Session ID** field of each Submit, so the jobs run inside the reservation.
  - **Close** the session at the end of the workflow (or set Accepting Jobs to false), so it does not hold the backend.

  Use the **Account** resource (Get Usage) to check `usage_consumed_seconds` against `usage_limit_seconds` before launching a large run.

  ## Gate syntax

  In the Circuit Build operation each gate has a Qubits field and, for parametric gates, a Parameters field. Both are comma separated.

  - Single qubit gates take one qubit index, for example `0`.
  - Two qubit controlled gates take the control first and the target last, for example `0,1` for control 0 and target 1.
  - The Toffoli (CCX) gate takes two controls and a target, for example `0,1,2`.
  - Parametric gates read their angles in radians from the Parameters field. RX, RY, RZ, Phase and the Controlled-R gates take one value; the U gate takes exactly three (theta, phi, lambda).
  - The Measure instruction writes to the classical bit given in the Classical Bit field.

  Invalid input (wrong number of qubits or parameters, an out-of-range index, or a non-numeric value) is rejected at build time with a clear error, so a malformed program never reaches IBM.

  The Build operation outputs a `qasm3` string that you pass into a Job Submit node using an expression.

  ## Primitives and options

  The Submit operation is split per primitive, since their inputs differ:

  - **Submit to Sampler** returns measurement counts. Set Shots to the number of repetitions.
  - **Submit to Estimator** returns expectation values. Set Observables to a Pauli string whose length matches the qubit count (for example `ZZ` for two qubits) or an array of such strings, pick a Resilience Level, and optionally a Precision.

  Both share error-suppression toggles that matter on real hardware: **Dynamical Decoupling**, **Gate Twirling** and **Measurement Twirling**. For parametrized circuits, set **Parameters** to a JSON object binding parameter names to values, e.g. `{"theta": 1.5708}`. **Additional Options** is a JSON escape hatch merged into the primitive `options`, for example `{"default_shots": 4096}`.

  Both Submit operations also accept **Tags** (comma separated, stored on the job and usable as a filter in Job List and in the triggers) and a **Private** toggle that hides the job's inputs and results from other collaborators on plans that support private jobs.

  ## Bit order

  Sampler counts follow the classical register order. The bit `c[0]` is the rightmost bit in each output bitstring, which matches the standard Qiskit convention.

  ## Transpilation

  This is the single most common reason a real-hardware job fails, so it is worth understanding.

  ### Why it is needed

  A textbook circuit uses high-level gates such as `h` (Hadamard) and `cx` (CNOT). A real quantum chip does not run those directly. Each backend executes only a small set of **native gates** (for example a Heron processor like `ibm_fez` runs `rz`, `sx`, `x`, `cz`, plus measure and reset), and its qubits are wired in a fixed topology. Translating a circuit into a backend's native gates and connectivity is called **transpilation**, and the result is an **ISA** (Instruction Set Architecture) circuit.

  The Qiskit Runtime REST API **does not transpile**. It expects an ISA circuit and rejects anything else. If you submit a raw circuit to a real backend you get a failed job with `reason_code: 1517`:

  ```
  The instruction h on qubits (0,) is not supported by the target system.
  Transpile your circuits for the target before submitting a primitive query.
  ```

  This is not a node bug. The node builds, submits and reads the job correctly; the hardware refuses a non-ISA circuit.

  ### How to transpile (free, any plan)

  Transpile locally with Qiskit, then feed the ISA string into the node. You do not need live credentials: a fake backend carries the real topology and native gate set. Current Qiskit (2.5+) requires Python with NumPy 2.0 or newer.

  ```python
  from qiskit import QuantumCircuit, qasm3
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
  from qiskit_ibm_runtime.fake_provider import FakeFez  # mirrors ibm_fez

  backend = FakeFez()

  qc = QuantumCircuit(2, 2)
  qc.h(0)
  qc.cx(0, 1)
  qc.measure(0, 0)
  qc.measure(1, 1)

  isa = generate_preset_pass_manager(optimization_level=1, backend=backend).run(qc)
  print(qasm3.dumps(isa))  # paste this ISA string into the node
  ```

  For a real run, swap the fake backend for the live one (`QiskitRuntimeService(channel="ibm_cloud", token=..., instance=...).backend("ibm_fez")`) so the layout matches the exact device.

  A Bell circuit transpiled for `ibm_fez` comes out in native gates only:

  ```
  OPENQASM 3.0;
  include "stdgates.inc";
  bit[2] c;
  rz(pi/2) $0;
  sx $0;
  rz(pi/2) $0;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  cz $0, $1;
  rz(pi/2) $1;
  sx $1;
  rz(pi/2) $1;
  c[0] = measure $0;
  c[1] = measure $1;
  ```

  ### How to run it in the node

  1. Put the ISA string into **Circuit, Import OpenQASM 3**, or paste it straight into the **OpenQASM 3 Circuit** field of a Submit operation.
  2. Pin **Backend** to the exact device you transpiled for (for example `ibm_fez`), not Get Least Busy. An ISA circuit is specific to one topology; another device may reject it.
  3. Submit to Sampler or Estimator as usual.

  ### The cloud Transpiler Service (paid plans only)

  IBM also offers the [Qiskit Transpiler Service](https://quantum.cloud.ibm.com/docs/en/api/qiskit-transpiler-service-rest/tags/transpiler-methods), a separate cloud API (`https://cloud-transpiler.quantum.ibm.com/transpile`) that transpiles remotely, optionally with AI-powered passes. It is **only available on the Premium, Flex and On-Prem plans**, not the free Open plan, and it lives at a different host from the Qiskit Runtime API, so it is not wired into this node. On the Open plan, transpile locally as shown above.

  ### Simulators

  Simulators accept any gate and need no transpilation, so setting **Include Simulators** on Get Least Busy lets a circuit run as written. Note that the current IBM Quantum Platform has largely retired cloud simulators, so an instance may have none available and fall back to hardware.

  ## Troubleshooting

  - **401 or IAM token errors on every call**: the API key is wrong, revoked or expired. Regenerate it in IBM Cloud and update the credential.
  - **404 or an empty backends list**: the Region does not match the region of your instance CRN. US East and EU (Germany) are separate hosts.
  - **Job never completes in Get Results**: large hardware queues can exceed the Max Wait. Raise Max Wait, or poll separately with Get Status and call Get Results once the job is done.
  - **Job fails with `reason_code: 1517` (instruction not supported)**: the circuit was not transpiled to the backend's native gates. See the Transpilation section above.
  - **Submit rejected by IBM**: the Observables length does not match the qubit count, or the circuit is not valid ISA for the chosen backend.

  ## Development

  ```bash
  npm install   # on Node 24+, use: npm install --ignore-scripts
  npm run lint
  npm run build
  npm test
  ```

  See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow. Release history lives in [CHANGELOG.md](CHANGELOG.md) and the GitHub Releases page.

  ## Releasing

  Releases publish to npm with provenance through the `publish.yml` GitHub Actions workflow when a GitHub release is created. Authentication uses an npm automation token stored as the `NPM_TOKEN` repository secret; provenance still works because the repo is public and the job has `id-token: write`. The package version must match the release tag.

  ## Notes on the live API

  The request and response shapes follow the published Qiskit Runtime REST API reference. The job body sends the primitive as `program_id`, the circuit inside a PUB, and `version` 2 in `params`, with `resilience_level` at the params level for the Estimator. Sampler results are read from `results[i].data[register].samples` as hex strings, and the least busy backend is chosen from the backends list, which already carries the status, qubit count and queue length for each device.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Provides IBM Quantum Platform integration in n8n for building circuits, managing backends/jobs/sessions, and receiving trigger events when quantum jobs fail or are canceled. The error trigger starts workflows with the failure reason and code.","capabilities":["Backend operations: list backends, get configuration, get properties, get status, and get least busy backend","Circuit operations: build OpenQASM 3 circuits from a gate list and import OpenQASM 3 directly","Job operations: submit jobs to Sampler or Estimator, get job status, get results, list jobs, cancel jobs, and delete jobs","Session operations: create sessions (batch or dedicated), get session details, set accepting jobs, and close sessions","Account operations: get usage and get instance information","Polling triggers for IBM Quantum job events, including a trigger for failed or canceled jobs with error details"],"authentication":"IBM Quantum API credential using IBM Cloud API key, plus Instance CRN, Region, and API Version; the API key is exchanged for a short-lived IAM bearer token automatically.","commonUseCases":["Build and run quantum circuits on IBM Quantum from n8n workflows","Select the least busy backend and submit sampler/estimator jobs","Monitor quantum job completion or failure and react in automated workflows","Manage IBM Quantum sessions and inspect account usage"],"limitations":["Unofficial, community-maintained node and not affiliated with IBM","Does not bundle Qiskit or any quantum library","Circuits must be expressed as OpenQASM 3 strings or built from supported gate lists","Requires a recent n8n version that supports community nodes"],"relatedNodes":["IBM Quantum","IBM Quantum Trigger","IBM Quantum Error Trigger"]}


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

updated_at: 2026-07-14 14:40:34
author_name: priventorg
author_github_url: https://github.com/privent-ai/
npm_package_name: n8n-nodes-privent
npm_version: 2.3.1
community_fetched_at: 2026-07-14T14:40:34.609Z
ai_summary_generated_at: 2026-07-06 09:55:11
description:
  Privent DLP: session-scoped tokenization, detokenization, risk scoring, audit events and agent handoffs for AI agent workflows.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tokenize",
      "options": [
        {
          "name": "Session",
          "value": "session"
        },
        {
          "name": "Tokenize",
          "value": "tokenize"
        },
        {
          "name": "Detokenize",
          "value": "detokenize"
        },
        {
          "name": "Risk Check",
          "value": "riskCheck"
        },
        {
          "name": "Audit",
          "value": "audit"
        },
        {
          "name": "Handoff",
          "value": "handoff"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "authentication": [
            "apiKey"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "tokenize",
      "options": [
        {
          "name": "Session",
          "value": "session"
        },
        {
          "name": "Tokenize",
          "value": "tokenize"
        },
        {
          "name": "Detokenize",
          "value": "detokenize"
        },
        {
          "name": "Risk Check",
          "value": "riskCheck"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "authentication": [
            "tokenless"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "resource",
      "type": "options",
      "default": "tokenize",
      "options": [
        {
          "name": "Tokenize",
          "value": "tokenize"
        },
        {
          "name": "Detokenize",
          "value": "detokenize"
        }
      ],
      "displayName": "Resource",
      "displayOptions": {
        "show": {
          "authentication": [
            "local"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "open",
      "options": [
        {
          "name": "Open",
          "value": "open",
          "action": "Open a session",
          "description": "Opens a Privent session vault at the start of your workflow. Place this node before any Tokenize operations. The sessionId output must be passed to all downstream Privent nodes."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ],
          "authentication": [
            "apiKey",
            "tokenless"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "tokenize",
      "options": [
        {
          "name": "Tokenize",
          "value": "tokenize",
          "action": "Tokenize sensitive text",
          "description": "Replaces sensitive values with reversible [KIND_NNN] placeholders before the text reaches an LLM or external service"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tokenize"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "detokenize",
      "options": [
        {
          "name": "Detokenize",
          "value": "detokenize",
          "action": "Detokenize text",
          "description": "⚠ Agent-reachable as a tool: an agent could un-mask data with this operation. Use Strict Mode + Trusted Sinks to control egress. Resolves [KIND_NNN] placeholders back to their original values before data leaves the workflow."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "detokenize"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "score",
      "options": [
        {
          "name": "Score",
          "value": "score",
          "action": "Score text risk",
          "description": "Scores text for data-leak risk using Privent ML. Returns risk_score (0–1), risk_level, and per-category probabilities."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "riskCheck"
          ],
          "authentication": [
            "apiKey",
            "tokenless"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "emit",
      "options": [
        {
          "name": "Emit",
          "value": "emit",
          "action": "Emit an audit event",
          "description": "Emits a Privent audit event for non-tokenization steps (LLM call cost tracking, policy decisions, egress, errors)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "audit"
          ],
          "authentication": [
            "apiKey"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "record",
      "options": [
        {
          "name": "Record",
          "value": "record",
          "action": "Record an agent handoff",
          "description": "Marks an explicit agent → agent (or agent → external sink) handoff for the Trust Map"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "handoff"
          ],
          "authentication": [
            "apiKey"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Open",
      "value": "open",
      "action": "Open a session",
      "description": "Opens a Privent session vault at the start of your workflow. Place this node before any Tokenize operations. The sessionId output must be passed to all downstream Privent nodes.",
      "resource": "session"
    },
    {
      "name": "Tokenize",
      "value": "tokenize",
      "action": "Tokenize sensitive text",
      "description": "Replaces sensitive values with reversible [KIND_NNN] placeholders before the text reaches an LLM or external service",
      "resource": "tokenize"
    },
    {
      "name": "Detokenize",
      "value": "detokenize",
      "action": "Detokenize text",
      "description": "⚠ Agent-reachable as a tool: an agent could un-mask data with this operation. Use Strict Mode + Trusted Sinks to control egress. Resolves [KIND_NNN] placeholders back to their original values before data leaves the workflow.",
      "resource": "detokenize"
    },
    {
      "name": "Score",
      "value": "score",
      "action": "Score text risk",
      "description": "Scores text for data-leak risk using Privent ML. Returns risk_score (0–1), risk_level, and per-category probabilities.",
      "resource": "riskCheck"
    },
    {
      "name": "Emit",
      "value": "emit",
      "action": "Emit an audit event",
      "description": "Emits a Privent audit event for non-tokenization steps (LLM call cost tracking, policy decisions, egress, errors)",
      "resource": "audit"
    },
    {
      "name": "Record",
      "value": "record",
      "action": "Record an agent handoff",
      "description": "Marks an explicit agent → agent (or agent → external sink) handoff for the Trust Map",
      "resource": "handoff"
    }
  ]

npm_readme:
  <div align="center">
    
  # n8n-nodes-privent

  **The DLP layer n8n's Guardrails doesn't have: reversible tokenization for AI workflows.**

  Guardrails masks PII and throws it away. Privent masks it, hands it to your LLM safely, and gives you the real value back exactly where you need it.

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-privent.svg)](https://www.npmjs.com/package/n8n-nodes-privent)
  [![npm downloads](https://img.shields.io/npm/dw/n8n-nodes-privent.svg)](https://www.npmjs.com/package/n8n-nodes-privent)
  [![n8n Cloud Verified](https://img.shields.io/badge/n8n%20Cloud-Verified-brightgreen)](https://www.privent.ai)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  [![GitHub stars](https://img.shields.io/github/stars/privent-ai/n8n-nodes-privent?style=social)](https://github.com/privent-ai/n8n-nodes-privent)

  **[Quick Start](#-quick-start--30-seconds-no-api-key)** · **[Why Privent](#why)** · **[vs. Guardrails](#privent-vs-n8n-guardrails)** · **[Docs](https://www.privent.ai/docs)** · **[Discord](https://discord.gg/yZhFGqMS5Y)** · **[ProductHunt](https://www.producthunt.com/products/privent)**

  </div>

  ---

  ```
  [Webhook] → [Privent: Session] → [Privent: Tokenize] → [OpenAI Chat]
                                 → [Privent: Detokenize] → [Respond]
  ```

  Privent ships as a single node with a Resource → Operation selector. Each box above is the same node configured to a different resource (Session, Tokenize, Detokenize, Risk Check, Audit, Handoff).

  If this is useful to you, **star the repo** — it helps other n8n builders find it.

  ---

  ## ⚡ Quick start — 30 seconds, no API key

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

  Restart n8n, add the **Privent** node, set **Authentication = Tokenless (Visitor)**. That's it — no signup, no waiting.

  ```
  [Privent: Session]   → opens a session (auto sessionId)
  [Privent: Tokenize]   → masks PII with [EMAIL_001], [PHONE_002], etc.
  [Privent: Detokenize] → restores the originals at your trusted output
  ```

  Raw values never leave your n8n instance in this mode. See [Tokenless mode](#tokenless-visitor-mode) for exactly what's included.

  Want a persistent vault, ML detection, or audit trail? See [Privent Cloud](#privent-cloud--when-youre-ready-for-more).

  ---

  ## Why

  LLM-powered workflows leak data. A naive `{{ $json.prompt }}` into ChatGPT sends customer emails, card numbers, and API keys straight to a third party.

  Privent sits in the middle: it replaces sensitive values with reversible placeholders (`[EMAIL_001]`, `[CREDIT_CARD_002]`) before the LLM call, then restores them only at sinks you trust.

  That reversibility is the whole point. Most guardrail tools redact — the data is gone the moment it's masked. Privent tokenizes — you get it back.

  **A concrete case:** you summarize a support ticket with an LLM, then write that summary back to your CRM. With redaction, the customer's name is just gone — replaced by `[REDACTED]` forever. With Privent, the summary comes back referencing `[NAME_001]`, and Detokenize restores it to the real name before it hits your CRM record.

  ---

  ## Privent vs. n8n Guardrails

  n8n's built-in Guardrails node is a good default for blocking jailbreaks and masking obvious PII. Privent isn't a replacement for it — it solves a different problem: getting the real value back after the LLM step.

  | | n8n Guardrails | Privent |
  |---|---|---|
  | Mask PII before an LLM call | ✅ | ✅ |
  | Jailbreak / prompt injection detection | ✅ | ❌ (not the focus) |
  | **Restore original value after the LLM call** | ❌ | ✅ |
  | Deterministic tokens (`[EMAIL_001]`) | ❌ | ✅ |
  | Works with zero setup, no API key | ✅ | ✅ (Tokenless mode) |
  | Audit trail per token / agent handoff | ❌ | ✅ (Cloud mode) |

  Use Guardrails when you only need to block or mask. Reach for Privent when you need the value back on the other side.

  ---

  ## Tokenless (Visitor) mode

  The default way to try Privent, and the recommended mode for single-workflow use. Set **Authentication = Tokenless (Visitor)** on the node. It mints an anonymous, signed visitor ID against the backend (`POST /v1/visitor/credentials`) and sends it as `X-Visitor-Id` — no Bearer key, no account.

  | | Available |
  |---|---|
  | Session, Tokenize, Detokenize (in-memory) | ✅ |
  | Risk Check | ✅ |
  | Audit, Handoff | ❌ (needs API key) |
  | Persistent / managed Privent Cloud vault | ❌ (needs API key) |

  **In-memory vault.** In tokenless mode, tokens are stored in n8n workflow static data, keyed by `sessionId` — never in the Privent Cloud vault.

  - Tokenize and Detokenize must run in the **same workflow** and share the same `sessionId`.
  - Raw values rest inside your own n8n and are never sent to Privent, *as long as Detection Mode is set to `Local (Regex)`*. (Risk Check and `Cloud` detection mode do send text to the backend for scoring — use `Local (Regex)` for a fully offline round-trip.)
  - On multi-worker n8n Cloud setups, token sharing relies on n8n persisting static data across workers.

  ### Example — fully offline round-trip

  1. **Privent** node → `Tokenless`, Resource `Session`, Operation `Open`.
  2. **Privent** node → `Tokenless`, Resource `Tokenize` — same `sessionId`; **Detection Mode = `Local (Regex)`**.
  3. **Privent** node → `Tokenless`, Resource `Detokenize` — same `sessionId` — restores the original values at your trusted output.

  Nothing in this round-trip leaves your n8n instance.

  ---

  ## Privent Cloud — when you're ready for more

  | | Tokenless (free) | Privent Cloud (API key) |
  |---|---|---|
  | Setup | `npm install`, 30 seconds | [Request access](#request-access) |
  | Vault | In-memory, n8n workflow static data | Server-side, persistent |
  | Cross-session detokenize | ❌ (same workflow only) | ✅ |
  | ML-based risk scoring | ❌ (regex only) | ✅ |
  | Audit trail / Handoff tracking | ❌ | ✅ |
  | Self-hosted backend option | — | ✅ |

  Create a `PriventApi` credential to switch a node to Cloud mode:

  | Field | Description | Default |
  |---|---|---|
  | API Key | Privent API key — [request access](#request-access). Encrypted at rest by n8n. | — |
  | Base URL | Privent backend endpoint (Cloud or self-hosted) | `https://api.privent.ai` |

  Point **Base URL** at your self-hosted deployment to keep all token/risk/audit traffic on-prem.

  ### Request access

  [Request access](https://www.privent.ai/request-access) for a production API key. Most n8n usage doesn't need this — start with Tokenless mode above and request Cloud access only once you need persistent vault, audit trail, or ML detection.

  ---

  ## Local (No Backend) mode

  Even more offline than Tokenless: **no API key, no backend, no network at all**. Set **Authentication = Local (No Backend)** on the node — Tokenize and Detokenize run entirely inside n8n with local regex detection, so **your data never leaves your n8n instance**.

  > **This is the default for newly-added nodes** — a fresh Privent node lands on Local → Tokenize with no credential needed. Switch the **Authentication** dropdown to Tokenless or API Key to opt in. (Existing nodes keep whatever mode they were saved with.)

  | | Available |
  |---|---|
  | Tokenize, Detokenize (in-memory) | ✅ |
  | Session, Risk Check, Audit, Handoff | ❌ (need a backend) |

  - **No credential** — local mode requests neither the API key nor the visitor credential.
  - **575 detectors** — core structured PII plus a large catalog of regex patterns vendored from [openredaction](https://github.com/sam247/openredaction) (MIT — see [`NOTICE`](./NOTICE)).
  - **In-memory token map** — tokens live in n8n workflow static data, keyed by `sessionId`, same as Tokenless. Tokenize and Detokenize must run in the same workflow.
  - **Session optional** — no Privent Session node needed. Leave **Session ID** empty and a fresh id is generated and written to the item; a downstream local Detokenize reads it back automatically.

  **Detection Level** (Tokenize):

  | Level | Masks | Trade-off |
  |---|---|---|
  | **Standard** (recommended) | High-precision structured PII — emails, phones, financial, government IDs with checksums, secrets, API keys | Low false positives, safe to send downstream |
  | **Aggressive** | Also names, addresses, bare-number IDs, crypto addresses | Broader coverage, **more false positives — review the output first** |

  ### Example — local round-trip, no key, no Session

  1. **Privent** node → `Local (No Backend)`, Resource `Tokenize` — set **Text Field**, leave **Session ID** empty, **Detection Level** = `Standard`. Sensitive values become `[KIND_NNN]` tokens.
  2. **Privent** node → `Local (No Backend)`, Resource `Detokenize` — leave **Session ID** empty (read from the item) — restores the originals at your trusted output.

  ---

  ## ✅ Verified on n8n Cloud

  Available as a verified community node — installable directly on n8n Cloud, no self-hosting required. Zero runtime dependencies, free of restricted globals/filesystem/network primitives.

  ## Installation

  **n8n Cloud (verified node):** open the nodes panel, search **Privent**, and add it directly — no community-node install step or instance-owner approval needed.

  **Self-hosted — in n8n:** Settings → Community Nodes → Install → enter `n8n-nodes-privent`.

  **Manual install (self-hosted):**
  ```bash
  cd ~/.n8n
  npm install n8n-nodes-privent
  ```
  Restart n8n. The Privent node appears in the node panel.

  ## Requirements

  | Component | Minimum |
  |---|---|
  | n8n | 1.22.0 |
  | Node.js | 20 |
  | Privent backend | Only required for Cloud mode — reachable Base URL + API key |

  ---

  ## Architecture: stateless nodes + optional server-side vault

  The nodes hold no state in the n8n process by default. In **Tokenless mode**, token state lives in n8n's own workflow static data. In **Cloud mode**, token state, risk scoring, and audit ingest live in a Privent backend (Privent Cloud or a self-hosted deployment) reached over HTTP through the `priventApi` credential's Base URL.

  - Correlation context (`sessionId`, `traceId`, `agentName`) travels on the n8n item between nodes — the Session resource writes it; downstream resources read it via expression defaults.
  - Entity detection for tokenization runs in-node (regex); ML risk scoring is server-side (Cloud mode only).

  ---

  ## `usableAsTool`

  Tool-callability in n8n is node-level (all-or-nothing) — it cannot be gated per operation. The Privent node sets `usableAsTool: true` so agents can call the safe operations (Tokenize, Risk Check, Audit). A side effect is that every operation — including Detokenize — becomes agent-reachable.

  | Operation | Agent-safe? | Why |
  |---|---|---|
  | Tokenize | ✅ | Masks PII before egress. |
  | Risk Check | ✅ | Read-only scoring. |
  | Audit | ✅ | Records an event; no data exposure. |
  | Session | ➖ | Lifecycle/setup, not a meaningful agent action. |
  | Handoff | ➖ | Trust-graph marker, not a meaningful agent action. |
  | Detokenize | ⚠️ | Restores raw PII. Agent-reachable — guard it with Strict Mode + Trusted Sinks so an agent cannot un-mask data to an untrusted destination. The Detokenize operation description carries this warning in the UI. |

  ---

  ## The Privent node — resources & operations

  One node, selected by Resource then Operation:

  | Resource | Operation | Purpose |
  |---|---|---|
  | Session | Open | Opens a session; seeds correlation context. |
  | Tokenize | Tokenize | Masks PII/secrets with `[KIND_NNN]` tokens. |
  | Detokenize | Detokenize | Restores tokens at a trusted egress point. |
  | Risk Check | Score | Scores text for data-leak risk (sessionless). |
  | Audit | Emit | Emits an audit event (LLM cost, policy, egress, error). Cloud only. |
  | Handoff | Record | Marks an agent → agent / agent → sink handoff. Cloud only. |

  ### Resource: Session

  Opens a Privent session. Place this first — downstream nodes consume its `sessionId`/`traceId`/`agentName`.

  **Output:** `sessionId` (UUID), `traceId`, `startedAt` (Unix ms), `executionId`, `agentName`.

  **Parameters:** Session ID Mode (`auto` = new UUID per execution; `manual` = supply your own, must be a UUID), Agent Name (logical agent id, written to the item and audit metadata `agent_name`), Framework (n8n/manual), Webhook Node Name (optional; extracts client IP / User-Agent from an upstream Webhook trigger).

  ### Resource: Tokenize

  Detects PII and secrets in a text field (regex) and replaces them with `[KIND_NNN]` tokens.

  **Parameters:** Session ID, Trace ID, Agent Name (the last two default to the upstream Session via expressions), Text Field, Detection Mode (`auto`/`local`/`cloud` — gates whether server risk scoring runs), Flag for Review Above Risk Score.

  ```json
  {
    "text": "Hi [EMAIL_001], your number is [PHONE_002].",
    "privent": {
      "sessionId": "...",
      "entities": [
        { "token": "[EMAIL_001]", "kind": "EMAIL", "confidence": 0.95 },
        { "token": "[PHONE_002]", "kind": "PHONE", "confidence": 0.80 }
      ],
      "risk": { "risk_score": 0.87, "risk_level": "HIGH", "categories": { "pii": 0.95 }, "model": "...", "latencyMs": 43 },
      "flaggedForReview": true
    }
  }
  ```

  `risk` is `null` when Detection Mode is `local` (server risk scoring is skipped).

  ### Resource: Detokenize

  Replaces tokens with their original values (one batched vault retrieve in Cloud mode; in-memory lookup in Tokenless mode). Use at trusted egress points after the LLM step. Agent-reachable as a tool — pair with Strict Mode + Trusted Sinks.

  **Parameters:** Session ID, Trace ID, Agent Name, Target Field (`*` deep-walks every string field), Strict Mode, Destination URL, Trusted Sinks, Target Agent Name (Trust Map). In strict mode, detokenization is blocked unless the Destination URL matches a Trusted Sink — the item passes through with `privent: { detokenized: false }` and a `detokenize` audit event with `reason: strict-mode-block` (it does not throw).

  ### Resource: Risk Check

  Scores text for data-leak risk via the server ML pipeline. Sessionless — no Session required. **Cloud mode only.**

  **Parameters:** Text Field, Trace ID, Agent Name (optional, for audit correlation). Auto-batches all input items into a single call.

  ```json
  { "privent": { "risk_score": 0.92, "risk_level": "HIGH", "categories": { "pii": 0.95 }, "model": "...", "latencyMs": 43 } }
  ```

  ### Resource: Audit

  Emits a Privent audit event for non-tokenization steps (LLM-call cost tracking, policy decisions, egress, errors). Cloud mode only. Place after an HTTP Request to an LLM provider to record provider/model/token usage; the backend computes USD cost from your org's ModelPricing table.

  **Parameters:** Session ID, Trace ID, Agent Name, Event Type (`llm_call`/`policy_decision`/`egress`/`error`), LLM Model (searchable picker, `llm_call` only), Prompt/Completion Tokens (`llm_call` only), Extra Metadata (JSON, merged into the event).

  ### Resource: Handoff

  Marks an explicit agent → agent (or agent → external sink) handoff. Cloud mode only. The backend Trust Map aggregator turns each event into an `AgentInteraction` edge.

  **Parameters:** Session ID, Trace ID, From Agent Name (the "from" side, from the upstream Session), Target Kind (`agent`/`sink`), Target Agent Name or External Sink ID, Reason, Payload Token Count. Requires an upstream Session with an Agent Name set.

  ---

  ## Example workflow (Cloud mode)

  ```
  [Webhook] → [Privent: Session] → [Privent: Tokenize]
           → [OpenAI Chat] → [Privent: Detokenize] → [Respond to Webhook]
  ```

  Each Privent box is the same node with a different Resource selected.

  1. **Privent · Session** — generates a `sessionId`, seeds correlation context.
  2. **Privent · Tokenize** — masks every PII / secret in the prompt.
  3. **OpenAI Chat** — sees only tokens, never raw data.
  4. **Privent · Detokenize** — restores tokens in the LLM response at a trusted sink.

  ---

  ## Token format

  `[KIND_NNN]`

  | Example | Meaning |
  |---|---|
  | `[EMAIL_001]` | Email address |
  | `[PHONE_002]` | Phone number |
  | `[CREDIT_CARD_003]` | Credit card number |
  | `[SSN_004]` | Social Security Number |
  | `[API_KEY_005]` | API key |
  | `[JWT_006]` | JSON Web Token |

  Tokens are session-scoped: the same value maps to the same token within one session, but token IDs do not correlate across sessions.

  ---

  ## Audit emission (Cloud mode)

  Every operation emits a typed audit event to the Privent backend after a successful run. Context populated by the Session resource (`agent_name`, `workflow_id`, `workflow_name`, `execution_id`) rides along on the item and attaches to every downstream event.

  | Resource | `event.type` |
  |---|---|
  | Session | `session_open` |
  | Tokenize | `tokenize` |
  | Detokenize | `detokenize` |
  | Risk Check | `risk_check` |
  | Audit | `llm_call` / `policy_decision` / `egress` / `error` |
  | Handoff | `agent_handoff` |

  The Detokenize resource writes `sink_id`, `sink_url_host`, and `sink_trusted` into metadata on both the trusted-egress and strict-mode-block paths.

  Metadata never contains raw text, tokenized text, or token literals. Audit emission is best-effort — network/transport failures are swallowed and never break workflow execution. The audit wire contract requires UUID `session_id`/`trace_id`, which is why manual Session IDs must be UUIDs.

  ---

  ## Error handling

  HTTP-origin failures (vault, risk scoring) surface as an n8n `NodeApiError`, so the backend HTTP status and response body are visible in the UI; validation/logic failures surface as `NodeOperationError`. Continue On Fail is honored on every resource, including the batched Risk Check. Audit emission is the one exception — it is fire-and-forget and never fails the node.

  ---

  ## Security properties

  - No vault or token state is serialized into n8n execution JSON — in Tokenless mode it lives in n8n's own workflow static data; in Cloud mode it lives server-side.
  - In Tokenless mode with `Detection Mode = Local (Regex)`, raw PII never leaves your n8n instance.
  - Tenancy is isolated by API key at the backend (Cloud mode).
  - Detokenization at egress is gated by Strict Mode + Trusted Sinks.
  - Audit emission is fail-open: backend unreachable never blocks the workflow.

  ---

  ## Telemetry

  Tokenless mode sends **anonymous** usage telemetry so we can see how tokenless is adopted and whether it's healthy. There is no opt-out, so here is exactly what it does:

  - **When:** one fire-and-forget event per node execution, and **only in Tokenless mode**. **API Key** mode sends nothing here (it already reports through the audit stream); **Local (No Backend)** mode sends nothing at all — its zero-network guarantee is unchanged.
  - **Where:** `POST {baseUrl}/v1/telemetry/events` — the **same Tokenless Base URL you configured**. Self-hosters hit their own backend; nothing is ever sent to Privent unless you point the credential at Privent.
  - **Anonymous:** the only identifier is a random `install_id` (UUID) generated on first send and cached in n8n workflow static data. No organization, no API key, no IP, no account.
  - **Exact fields sent — nothing else:** `install_id`, `event` (`node_execution`), `operation` (the resource, e.g. `tokenize`), `auth_mode` (`tokenless`), `node_version`, `n8n_version`, `item_count`, `status` (`success`/`error`), `error_type` (the error **class name** only), `timestamp`.
  - **Never sent:** raw text, tokens, detected entity values or kinds, field/session/trace IDs, workflow or node names, organization, key, sink, or IP. A telemetry failure never affects the workflow.

  ---

  ## Upgrading from 1.x

  2.0 is a breaking change. The six standalone nodes (Privent Session, Tokenize, Detokenize, Risk Check, Audit Event, Handoff) are now a single Privent node with a Resource → Operation selector. Behaviour is unchanged — same fields, defaults, endpoints, outputs and audit events — but the node identity changed, so existing workflows must be updated:

  1. Add the Privent node where the old node was.
  2. Pick the Resource matching the old node (e.g. old Privent Tokenize → Resource `Tokenize`), then its Operation.
  3. Re-enter the parameters (the field names and expression defaults are identical).
  4. Delete the old node.

  ---

  ## Contributing

  Issues and PRs are welcome — especially new regex patterns for region-specific PII (national IDs, local phone formats) and example workflows. Found a bug? [Open an issue](https://github.com/privent-ai/n8n-nodes-privent/issues). Built something with Privent? [Share it in Discussions](https://github.com/privent-ai/n8n-nodes-privent/discussions) — we feature community workflows.

  ## Links

  - [n8n Setup Guide](https://www.privent.ai/docs)
  - [Request Cloud access](https://www.privent.ai/request-access) — only needed for persistent vault, audit trail, or ML detection
  - [Discord community](https://discord.gg/yZhFGqMS5Y)

  ## License

  MIT © Privent AI

  Questions? Contact us at hello@privent.ai.

  ---

  <div align="center">

  If Privent saved you from writing this tokenization logic yourself, **a star helps other n8n builders find it too.** ⭐

  </div>

ai_documentation_summary:
  {"purpose":"Privent provides reversible PII tokenization for n8n AI workflows, letting you mask sensitive data before sending it to an LLM and restore the original values afterward. It also supports risk scoring, audit events, and agent handoff tracking in cloud mode.","capabilities":["Open/manage a session","Tokenize sensitive values into deterministic placeholders","Detokenize placeholders back to original values","Run risk checks on text","Record audit events","Track agent handoffs","Support tokenless in-memory mode with no API key","Support cloud mode with persistent vault and ML-based scoring"],"authentication":"Tokenless (Visitor) mode with no API key for local/in-memory use, or PriventApi credential/API key for Privent Cloud features","commonUseCases":["Mask customer PII before passing text to an LLM and restore it after the model response","Protect support-ticket, CRM, or agent-workflow data while keeping values reversible","Perform lightweight offline tokenization/detokenization inside a single n8n workflow","Enable audit trails, risk scoring, and handoff tracking in Privent Cloud"],"limitations":["Tokenless mode requires tokenize and detokenize to run in the same workflow and share the same sessionId","In tokenless mode, audit and handoff features are unavailable","Cross-session detokenization is not available in tokenless mode","For fully offline behavior, Detection Mode must be set to Local (Regex); cloud detection sends text to the backend","Multi-worker n8n Cloud setups rely on static data persistence for token sharing"],"relatedNodes":["n8n Guardrails","OpenAI Chat"]}


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

updated_at: 2026-07-14 14:40:34
author_name: evgeny04
author_github_url: https://github.com/nocrashio/
npm_package_name: n8n-nodes-nocrash
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:34.610Z
ai_summary_generated_at: 2026-07-06 09:55:11
description:
  Audit your entire n8n in 30 seconds, free. Then connect to catch silent failures before your customers do.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "audit",
      "options": [
        {
          "name": "Audit My n8n",
          "value": "audit",
          "action": "Audit my n8n",
          "description": "Grade every workflow in your n8n and get an instance scorecard (free, static design grade)"
        },
        {
          "name": "Heartbeat",
          "value": "heartbeat",
          "action": "Send a heartbeat",
          "description": "Send a heartbeat to confirm a workflow is running"
        },
        {
          "name": "Report Failure",
          "value": "reportFailure",
          "action": "Report a failure",
          "description": "Record that a workflow failed, with error details"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Audit My n8n",
      "value": "audit",
      "action": "Audit my n8n",
      "description": "Grade every workflow in your n8n and get an instance scorecard (free, static design grade)"
    },
    {
      "name": "Heartbeat",
      "value": "heartbeat",
      "action": "Send a heartbeat",
      "description": "Send a heartbeat to confirm a workflow is running"
    },
    {
      "name": "Report Failure",
      "value": "reportFailure",
      "action": "Report a failure",
      "description": "Record that a workflow failed, with error details"
    }
  ]

npm_readme:
  # n8n-nodes-nocrash

  **Grade your entire n8n in 30 seconds. Free.**

  This is an [n8n community node](https://docs.n8n.io/integrations/community-nodes/). Drop it into a workflow, point it at your own n8n, and get an instant X-ray of how well every workflow is built — a design grade out of 100, a per-workflow scorecard, and the one issue holding each one back. No account required to try it.

  The grade tells you how *solid* your workflows are. It doesn't tell you when one quietly stops running. For that, connect your instance to NoCrash — and we'll watch every workflow around the clock and tell you, in plain language, the moment something breaks. Before your customers do.

  ---

  ## Sample audit output

  ```
  Instance grade:  72 / 100   ·   Needs a look   ·   18 workflows graded

    ┌─────────────────────────────────┬───────┬─────────┬──────────────────────────────┐
    │ Workflow                        │ Score │ Band    │ Top issue                    │
    ├─────────────────────────────────┼───────┼─────────┼──────────────────────────────┤
    │ Sync orders to Sheets           │  88   │ green   │ No error handling on HTTP    │
    │ Lead enrichment                 │  56   │ yellow  │ No retry on failed requests  │
    │ Nightly DB backup               │  34   │ red     │ Silent fail: no alert path   │
    └─────────────────────────────────┴───────┴─────────┴──────────────────────────────┘

    Connect to NoCrash and we watch every workflow 24/7: a runtime Reliability
    Score, AI root-cause + fix, a daily plain-language brief, and a 3am alert
    (Telegram, email, Discord, or Slack) the moment one silently breaks.

    → Start free: https://nocrash.io/?utm_source=n8n-node&utm_medium=community&utm_campaign=node-launch-2026
  ```

  ---

  ## Your data stays yours

  > **The grading runs inside your own n8n with your own API key. Every credential and secret is stripped out on your machine before anything leaves it. We never store your workflow definitions.**

  The node lists your workflows and reads how they're built, using your own n8n API key. Before any workflow is sent to the NoCrash Grader, every credential reference and secret-bearing field is removed locally (see [`stripCredentials`](nodes/Nocrash/shared/stripCredentials.ts)). The free grade looks at **design only** — it never reads what your workflows actually ran or any of your data.

  ---

  ## Free vs Connected

  | | **Free (this node)** | **Connected to NoCrash** |
  |---|---|---|
  | Static workflow **Grade** (how well it's built) | ✅ | ✅ |
  | Design-issue detection | ✅ | ✅ |
  | Instance scorecard | ✅ | ✅ |
  | Runtime **Reliability Score** (how it's actually behaving) | — | ✅ |
  | AI root-cause + fix | — | ✅ |
  | 24/7 watch — we notice when a workflow goes quiet | — | ✅ |
  | 3am alerts — Telegram, email, Discord, and Slack | — | ✅ |
  | Daily plain-language brief | — | ✅ |

  The free grade is a one-time, design-only check — it tells you how well your workflows are built. It does **not** watch them or know when something breaks. Connecting to NoCrash adds the runtime side: continuous watching, plain-language alerts, and a daily brief.

  ---

  ## Operations

  ### Audit my n8n (default)

  Grades every workflow in your instance and returns one item: the instance grade, a per-workflow scorecard, and a link to start watching them for real.

  - **Credential:** *NoCrash — Your n8n API* (your own n8n instance URL + API key)
  - **Scope:** All workflows / Active only
  - **Max Workflows:** up to 50 per audit

  ### Heartbeat

  Confirms a workflow ran by sending a ping to a NoCrash watch.

  - **Credential:** *NoCrash API* (your `nc_` key)
  - **Monitor ID** (required), optional Execution ID / Duration / Metadata

  ### Report Failure

  Records that a workflow failed, with error details.

  - **Credential:** *NoCrash API* (your `nc_` key)
  - **Monitor ID** + **Error Message** (required), optional Failed Node / Execution ID

  ---

  ## Install

  In n8n: **Settings → Community Nodes → Install**, then enter:

  ```
  n8n-nodes-nocrash
  ```

  Or via npm in a self-hosted instance:

  ```bash
  npm install n8n-nodes-nocrash
  ```

  ---

  ## Credentials

  - **NoCrash — Your n8n API** — your n8n instance URL + an n8n API key (Settings → API in your n8n). Used only for the audit. Credentials are stripped before any workflow design is sent.
  - **NoCrash API** — your NoCrash key (starts with `nc_`), created in the NoCrash dashboard under Settings → API keys. Used for Heartbeat and Report Failure.

  > **One third-party service.** This package integrates a single third-party service — **NoCrash**. The *NoCrash — Your n8n API* credential is your own n8n instance's API key, used only by the Audit operation to read your workflow design locally (credentials are stripped before anything is sent). It is not a second third-party integration.

  ---

  ## Templates

  Five ready-to-import starter workflows live in [`templates/`](templates/) — a daily self-grade to Slack or Telegram, a dead-man's-switch heartbeat, an auto-report-on-error workflow, and a weekly reliability scorecard. Each one is a well-built n8n workflow you can adapt to your own steps. See [`templates/README.md`](templates/README.md).

  ---

  ## Links

  - Public n8n Workflow Grader: <https://nocrash.io/tools/n8n-workflow-grader?utm_source=n8n-node&utm_medium=community&utm_campaign=node-launch-2026>
  - Start watching your n8n: <https://nocrash.io/?utm_source=n8n-node&utm_medium=community&utm_campaign=node-launch-2026>

  ---

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"NoCrash audits an n8n instance by grading workflow design and identifying issues that reduce reliability. It can also connect to NoCrash to monitor workflows continuously and alert when they silently fail.","capabilities":["Audit all workflows in an n8n instance and return an instance grade out of 100","Produce per-workflow scorecards with top issues holding each workflow back","Audit active workflows only","Watch workflows 24/7 when connected to NoCrash","Send heartbeat pings for monitored workflows","Report workflow failures with error details","Provide runtime reliability scoring, AI root-cause analysis, and fix suggestions when connected"],"authentication":"Two credential types: 'NoCrash — Your n8n API' for auditing using your own n8n instance URL plus n8n API key, and 'NoCrash API' using an nc_ key for Heartbeat and Report Failure.","commonUseCases":["Run a one-time audit to assess workflow design quality across an n8n instance","Monitor workflows for silent failures and get alerts when a workflow stops running","Send a heartbeat from a workflow to confirm it executed successfully","Report an execution failure to NoCrash with error context","Set up starter workflows for self-grading, dead-man's-switch monitoring, or weekly reliability reporting"],"limitations":["The free audit is design-only and does not monitor runtime behavior or detect when workflows stop running","Audit is limited to up to 50 workflows per run","Credentials and secrets are stripped locally before workflow data is sent for grading"],"relatedNodes":[]}


node_type: @seamless-oss/n8n-nodes-seamless.seamless
package_name: @seamless-oss/n8n-nodes-seamless
display_name: Seamless
description: Interact with Seamless.ai
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: seamless-npm
author_github_url: https://github.com/SeamlessAI/n8n-nodes-seamless.git
npm_package_name: @seamless-oss/n8n-nodes-seamless
npm_version: 0.6.6
community_fetched_at: 2026-07-14T14:40:34.611Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Activity",
          "value": "activity"
        },
        {
          "name": "Call",
          "value": "call"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Campaign Step",
          "value": "campaignStep"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Credit",
          "value": "credits"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Email Account",
          "value": "emailAccount"
        },
        {
          "name": "Email Footer",
          "value": "emailFooter"
        },
        {
          "name": "List",
          "value": "list"
        },
        {
          "name": "Saved Search",
          "value": "savedSearch"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Template",
          "value": "template"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many contacts",
          "description": "Retrieve a list of researched contacts"
        },
        {
          "name": "Poll Research",
          "value": "pollResearch",
          "action": "Poll contact research results",
          "description": "Check the status of a pending research request"
        },
        {
          "name": "Research",
          "value": "research",
          "action": "Research contacts",
          "description": "Enrich contacts with verified data (consumes credits)"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search contacts",
          "description": "Find contacts matching filter criteria"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many companies",
          "description": "Retrieve a list of researched companies"
        },
        {
          "name": "Poll Research",
          "value": "pollResearch",
          "action": "Poll company research results",
          "description": "Check the status of a pending research request"
        },
        {
          "name": "Research",
          "value": "research",
          "action": "Research companies",
          "description": "Enrich companies with verified data (consumes credits)"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search companies",
          "description": "Find companies matching filter criteria"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create list",
          "description": "Create a new contact list"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete list",
          "description": "Permanently remove a contact list"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get list",
          "description": "Retrieve a single contact list by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many lists",
          "description": "Retrieve all contact lists"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update list",
          "description": "Rename a contact list"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "list"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get credit balance",
          "description": "Retrieve the current credit balance and usage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credits"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Contacts",
          "value": "addContacts",
          "action": "Add contacts to campaign",
          "description": "Add contacts to a campaign by ID (max 500)"
        },
        {
          "name": "Clone",
          "value": "clone",
          "action": "Clone campaign",
          "description": "Create a copy of an existing campaign"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create campaign",
          "description": "Create a new campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete campaign",
          "description": "Permanently delete a campaign"
        },
        {
          "name": "Execute Action",
          "value": "executeAction",
          "action": "Execute action on campaign",
          "description": "Start, pause, resume, complete, archive, unarchive, or delete a campaign"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get campaign",
          "description": "Retrieve a campaign by ID"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get campaign contacts",
          "description": "Retrieve contacts in a campaign"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many campaigns",
          "description": "Retrieve a list of campaigns"
        },
        {
          "name": "Get Metrics",
          "value": "getMetrics",
          "action": "Get campaign metrics",
          "description": "Retrieve performance metrics for a campaign"
        },
        {
          "name": "Remove Contacts",
          "value": "removeContacts",
          "action": "Remove contacts from campaign",
          "description": "Remove contacts from a campaign by ID (max 500)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update campaign",
          "description": "Update campaign properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create campaign step",
          "description": "Add a new step to a campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete campaign step",
          "description": "Remove a step from a campaign"
        },
        {
          "name": "Execute Action",
          "value": "executeAction",
          "action": "Execute action on campaign step",
          "description": "Pause, resume, or skip a campaign step"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many campaign steps",
          "description": "Retrieve all steps in a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update campaign step",
          "description": "Update properties of a campaign step"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaignStep"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create saved search",
          "description": "Create a new saved search"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete saved search",
          "description": "Permanently remove a saved search"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get saved search",
          "description": "Retrieve a saved search by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many saved searches",
          "description": "Retrieve a list of saved searches"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update saved search",
          "description": "Update an existing saved search"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "savedSearch"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create template",
          "description": "Create a new email template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete template",
          "description": "Permanently remove an email template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get template",
          "description": "Retrieve an email template by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many templates",
          "description": "Retrieve a list of email templates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update template",
          "description": "Update an existing email template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Create Draft",
          "value": "createDraft",
          "action": "Create email draft",
          "description": "Create a new email draft for a contact"
        },
        {
          "name": "Get Draft",
          "value": "getDraft",
          "action": "Get email draft",
          "description": "Retrieve an email draft by ID"
        },
        {
          "name": "Preview",
          "value": "preview",
          "action": "Preview email",
          "description": "Send a preview of an email to a specified address"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send email",
          "description": "Send an email immediately to a contact"
        },
        {
          "name": "Send Bulk",
          "value": "sendBulk",
          "action": "Send bulk emails",
          "description": "Send an email to multiple contacts matching filters"
        },
        {
          "name": "Send Draft",
          "value": "sendDraft",
          "action": "Send email draft",
          "description": "Send a previously created email draft"
        },
        {
          "name": "Update Draft",
          "value": "updateDraft",
          "action": "Update email draft",
          "description": "Update properties of an email draft"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create task",
          "description": "Create a new task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete task",
          "description": "Permanently remove a task"
        },
        {
          "name": "Execute Action",
          "value": "executeAction",
          "action": "Execute action on task",
          "description": "Change the state of a task (e.g. pause, start, complete)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get task",
          "description": "Retrieve a task by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many tasks",
          "description": "Retrieve a list of tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update task",
          "description": "Update task properties"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "log",
      "options": [
        {
          "name": "Get Dispositions",
          "value": "getDispositions",
          "action": "Get call dispositions",
          "description": "Retrieve available call disposition options"
        },
        {
          "name": "Get Sentiments",
          "value": "getSentiments",
          "action": "Get call sentiments",
          "description": "Retrieve available call sentiment options"
        },
        {
          "name": "Log",
          "value": "log",
          "action": "Log call",
          "description": "Log a completed call for a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many activities",
          "description": "Retrieve engagement activity events"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "activity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many email accounts",
          "description": "Retrieve a list of connected email accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many email footers",
          "description": "Retrieve a list of email footers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailFooter"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many contacts",
      "description": "Retrieve a list of researched contacts",
      "resource": "contact"
    },
    {
      "name": "Poll Research",
      "value": "pollResearch",
      "action": "Poll contact research results",
      "description": "Check the status of a pending research request",
      "resource": "contact"
    },
    {
      "name": "Research",
      "value": "research",
      "action": "Research contacts",
      "description": "Enrich contacts with verified data (consumes credits)",
      "resource": "contact"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search contacts",
      "description": "Find contacts matching filter criteria",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many companies",
      "description": "Retrieve a list of researched companies",
      "resource": "company"
    },
    {
      "name": "Poll Research",
      "value": "pollResearch",
      "action": "Poll company research results",
      "description": "Check the status of a pending research request",
      "resource": "company"
    },
    {
      "name": "Research",
      "value": "research",
      "action": "Research companies",
      "description": "Enrich companies with verified data (consumes credits)",
      "resource": "company"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search companies",
      "description": "Find companies matching filter criteria",
      "resource": "company"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create list",
      "description": "Create a new contact list",
      "resource": "list"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete list",
      "description": "Permanently remove a contact list",
      "resource": "list"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get list",
      "description": "Retrieve a single contact list by ID",
      "resource": "list"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many lists",
      "description": "Retrieve all contact lists",
      "resource": "list"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update list",
      "description": "Rename a contact list",
      "resource": "list"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get credit balance",
      "description": "Retrieve the current credit balance and usage",
      "resource": "credits"
    },
    {
      "name": "Add Contacts",
      "value": "addContacts",
      "action": "Add contacts to campaign",
      "description": "Add contacts to a campaign by ID (max 500)",
      "resource": "campaign"
    },
    {
      "name": "Clone",
      "value": "clone",
      "action": "Clone campaign",
      "description": "Create a copy of an existing campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create campaign",
      "description": "Create a new campaign",
      "resource": "campaign"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete campaign",
      "description": "Permanently delete a campaign",
      "resource": "campaign"
    },
    {
      "name": "Execute Action",
      "value": "executeAction",
      "action": "Execute action on campaign",
      "description": "Start, pause, resume, complete, archive, unarchive, or delete a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get campaign",
      "description": "Retrieve a campaign by ID",
      "resource": "campaign"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get campaign contacts",
      "description": "Retrieve contacts in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many campaigns",
      "description": "Retrieve a list of campaigns",
      "resource": "campaign"
    },
    {
      "name": "Get Metrics",
      "value": "getMetrics",
      "action": "Get campaign metrics",
      "description": "Retrieve performance metrics for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Remove Contacts",
      "value": "removeContacts",
      "action": "Remove contacts from campaign",
      "description": "Remove contacts from a campaign by ID (max 500)",
      "resource": "campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update campaign",
      "description": "Update campaign properties",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create campaign step",
      "description": "Add a new step to a campaign",
      "resource": "campaignStep"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete campaign step",
      "description": "Remove a step from a campaign",
      "resource": "campaignStep"
    },
    {
      "name": "Execute Action",
      "value": "executeAction",
      "action": "Execute action on campaign step",
      "description": "Pause, resume, or skip a campaign step",
      "resource": "campaignStep"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many campaign steps",
      "description": "Retrieve all steps in a campaign",
      "resource": "campaignStep"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update campaign step",
      "description": "Update properties of a campaign step",
      "resource": "campaignStep"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create saved search",
      "description": "Create a new saved search",
      "resource": "savedSearch"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete saved search",
      "description": "Permanently remove a saved search",
      "resource": "savedSearch"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get saved search",
      "description": "Retrieve a saved search by ID",
      "resource": "savedSearch"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many saved searches",
      "description": "Retrieve a list of saved searches",
      "resource": "savedSearch"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update saved search",
      "description": "Update an existing saved search",
      "resource": "savedSearch"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create template",
      "description": "Create a new email template",
      "resource": "template"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete template",
      "description": "Permanently remove an email template",
      "resource": "template"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get template",
      "description": "Retrieve an email template by ID",
      "resource": "template"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many templates",
      "description": "Retrieve a list of email templates",
      "resource": "template"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update template",
      "description": "Update an existing email template",
      "resource": "template"
    },
    {
      "name": "Create Draft",
      "value": "createDraft",
      "action": "Create email draft",
      "description": "Create a new email draft for a contact",
      "resource": "email"
    },
    {
      "name": "Get Draft",
      "value": "getDraft",
      "action": "Get email draft",
      "description": "Retrieve an email draft by ID",
      "resource": "email"
    },
    {
      "name": "Preview",
      "value": "preview",
      "action": "Preview email",
      "description": "Send a preview of an email to a specified address",
      "resource": "email"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send email",
      "description": "Send an email immediately to a contact",
      "resource": "email"
    },
    {
      "name": "Send Bulk",
      "value": "sendBulk",
      "action": "Send bulk emails",
      "description": "Send an email to multiple contacts matching filters",
      "resource": "email"
    },
    {
      "name": "Send Draft",
      "value": "sendDraft",
      "action": "Send email draft",
      "description": "Send a previously created email draft",
      "resource": "email"
    },
    {
      "name": "Update Draft",
      "value": "updateDraft",
      "action": "Update email draft",
      "description": "Update properties of an email draft",
      "resource": "email"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create task",
      "description": "Create a new task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete task",
      "description": "Permanently remove a task",
      "resource": "task"
    },
    {
      "name": "Execute Action",
      "value": "executeAction",
      "action": "Execute action on task",
      "description": "Change the state of a task (e.g. pause, start, complete)",
      "resource": "task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get task",
      "description": "Retrieve a task by ID",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many tasks",
      "description": "Retrieve a list of tasks",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update task",
      "description": "Update task properties",
      "resource": "task"
    },
    {
      "name": "Get Dispositions",
      "value": "getDispositions",
      "action": "Get call dispositions",
      "description": "Retrieve available call disposition options",
      "resource": "call"
    },
    {
      "name": "Get Sentiments",
      "value": "getSentiments",
      "action": "Get call sentiments",
      "description": "Retrieve available call sentiment options",
      "resource": "call"
    },
    {
      "name": "Log",
      "value": "log",
      "action": "Log call",
      "description": "Log a completed call for a contact",
      "resource": "call"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many activities",
      "description": "Retrieve engagement activity events",
      "resource": "activity"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many email accounts",
      "description": "Retrieve a list of connected email accounts",
      "resource": "emailAccount"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many email footers",
      "description": "Retrieve a list of email footers",
      "resource": "emailFooter"
    }
  ]

npm_readme:
  # n8n-nodes-seamless

  [Seamless.ai](https://seamless.ai) community nodes for [n8n](https://n8n.io) — search contacts, enrich leads, run campaigns, and automate your sales pipeline.

  [![npm version](https://img.shields.io/npm/v/@seamless-oss/n8n-nodes-seamless)](https://www.npmjs.com/package/@seamless-oss/n8n-nodes-seamless)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  [![n8n community](https://img.shields.io/badge/n8n-community%20node-ff6d5a)](https://docs.n8n.io/integrations/community-nodes/)

  ## Compatibility

  | Requirement | Version |
  |---|---|
  | n8n | >= 1.71.0 |
  | n8n-workflow | >= 1.120.0 |
  | Node.js | >= 20 |

  ## Nodes

  ### Seamless

  Full REST API node for managing Seamless.ai resources:

  - **Contact** — Search, research, get, and poll contacts
  - **Company** — Search, research, get, and poll companies
  - **Campaign** — Create, update, clone, manage contacts, and execute actions
  - **Campaign Step** — Create, update, delete, and execute campaign steps
  - **List** — Create, get, update, and delete lists
  - **Saved Search** — Create, get, update, and delete saved searches
  - **Template** — Create, get, update, and delete email templates
  - **Email** — Create drafts, send, preview, and send bulk emails
  - **Task** — Create, get, update, delete, and execute task actions
  - **Call** — Log and retrieve calls
  - **Activity** — Retrieve engagement activity events
  - **Email Account** — Manage email accounts
  - **Credits** — Check credit balance
  - **Email Footer** — Retrieve email footers

  This node is also usable as an [AI tool](https://docs.n8n.io/advanced-ai/examples/using-tools/) in n8n's AI agent workflows.

  ### Seamless Trigger

  Polling trigger node that watches for new events:

  - **Activity Event** — Triggers on new engagement activity
  - **Company Researched** — Triggers when a company research completes
  - **Contact Researched** — Triggers when a contact research completes

  ## Installation

  ### From npm (recommended)

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

  ```
  @seamless-oss/n8n-nodes-seamless
  ```

  ### Local development

  ```bash
  git clone https://github.com/SeamlessAI/n8n-nodes-seamless.git
  cd n8n-nodes-seamless
  npm install
  npm run dev   # Starts local n8n with the node loaded at localhost:5678
  ```

  ## Credentials

  Two authentication methods are supported:

  ### OAuth2 (recommended)

  Select **OAuth2** in the node's **Authentication** dropdown and follow n8n's standard OAuth2 flow to connect your Seamless.ai account — no manual key management required.

  ### API Key

  Select **API Key** in the node's **Authentication** dropdown, then create **Seamless API** credentials and provide:

  | Field | Description |
  |-------|-------------|
  | **MCP Server URL** | The Seamless MCP endpoint (defaults to `https://mcp.seamless.ai/mcp`) |
  | **API Key** | Your Seamless.ai API key |

  You can find your API key in the [Seamless.ai app](https://login.seamless.ai) under **Settings > Integrations > API**.

  ## Usage example

  1. Add the **Seamless** node to your workflow.
  2. Select a **Resource** (e.g. Contact) and an **Operation** (e.g. Search).
  3. Fill in the required fields and any optional filters.
  4. Execute the workflow to retrieve data from Seamless.ai.

  For trigger-based workflows, add the **Seamless Trigger** node and choose the event type to poll for.

  ## Contributing

  Contributions are welcome! Please open an issue or submit a pull request.

  1. Fork the repository
  2. Create your feature branch (`git checkout -b feature/my-feature`)
  3. Run linting: `npm run lint`
  4. Commit your changes (`git commit -m 'feat: add my feature'`)
  5. Push to the branch (`git push origin feature/my-feature`)
  6. Open a Pull Request

  ## Publishing

  This package is published to npm via a GitHub Actions workflow with provenance, triggered by pushing a version tag:

  1. Update `version` in `package.json`
  2. Commit: `chore: release vX.Y.Z`
  3. Tag: `git tag vX.Y.Z`
  4. Push: `git push origin vX.Y.Z`

  ## Support

  - [Open an issue](https://github.com/SeamlessAI/n8n-nodes-seamless/issues) for bug reports or feature requests
  - [Seamless.ai API docs](https://docs.seamless.ai)
  - [n8n community forum](https://community.n8n.io)

  ## Changelog

  See [GitHub Releases](https://github.com/SeamlessAI/n8n-nodes-seamless/releases) for version history.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Integrates n8n with Seamless.ai to search and enrich contacts/companies, manage sales assets like campaigns and lists, and automate outreach and pipeline workflows. It also includes a polling trigger node for monitoring Seamless events.","capabilities":["Search, research, get, and poll contacts","Search, research, get, and poll companies","Create, update, clone, manage contacts, and execute campaign actions","Create, update, delete, and execute campaign steps","Create, get, update, and delete lists","Create, get, update, and delete saved searches","Create, get, update, and delete email templates","Create drafts, send, preview, and send bulk emails","Create, get, update, delete, and execute task actions","Log and retrieve calls"],"authentication":"OAuth2 recommended, or API Key with Seamless API credentials (MCP Server URL and API Key).","commonUseCases":["Lead search and enrichment in CRM/sales automation workflows","Running and managing outbound email campaigns","Monitoring engagement activity and research completion events via polling triggers","Managing sales tasks, lists, templates, and contact/company records"],"limitations":["Trigger node is polling-based rather than event/webhook-based","API Key authentication requires configuring the MCP Server URL and API Key"],"relatedNodes":["Seamless Trigger","n8n AI Agent"]}


node_type: @seamless-oss/n8n-nodes-seamless.seamlessTrigger
package_name: @seamless-oss/n8n-nodes-seamless
display_name: Seamless Trigger
description: Starts the workflow when Seamless events occur
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: seamless-npm
author_github_url: https://github.com/SeamlessAI/n8n-nodes-seamless.git
npm_package_name: @seamless-oss/n8n-nodes-seamless
npm_version: 0.6.6
community_fetched_at: 2026-07-14T14:40:34.613Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  # n8n-nodes-seamless

  [Seamless.ai](https://seamless.ai) community nodes for [n8n](https://n8n.io) — search contacts, enrich leads, run campaigns, and automate your sales pipeline.

  [![npm version](https://img.shields.io/npm/v/@seamless-oss/n8n-nodes-seamless)](https://www.npmjs.com/package/@seamless-oss/n8n-nodes-seamless)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  [![n8n community](https://img.shields.io/badge/n8n-community%20node-ff6d5a)](https://docs.n8n.io/integrations/community-nodes/)

  ## Compatibility

  | Requirement | Version |
  |---|---|
  | n8n | >= 1.71.0 |
  | n8n-workflow | >= 1.120.0 |
  | Node.js | >= 20 |

  ## Nodes

  ### Seamless

  Full REST API node for managing Seamless.ai resources:

  - **Contact** — Search, research, get, and poll contacts
  - **Company** — Search, research, get, and poll companies
  - **Campaign** — Create, update, clone, manage contacts, and execute actions
  - **Campaign Step** — Create, update, delete, and execute campaign steps
  - **List** — Create, get, update, and delete lists
  - **Saved Search** — Create, get, update, and delete saved searches
  - **Template** — Create, get, update, and delete email templates
  - **Email** — Create drafts, send, preview, and send bulk emails
  - **Task** — Create, get, update, delete, and execute task actions
  - **Call** — Log and retrieve calls
  - **Activity** — Retrieve engagement activity events
  - **Email Account** — Manage email accounts
  - **Credits** — Check credit balance
  - **Email Footer** — Retrieve email footers

  This node is also usable as an [AI tool](https://docs.n8n.io/advanced-ai/examples/using-tools/) in n8n's AI agent workflows.

  ### Seamless Trigger

  Polling trigger node that watches for new events:

  - **Activity Event** — Triggers on new engagement activity
  - **Company Researched** — Triggers when a company research completes
  - **Contact Researched** — Triggers when a contact research completes

  ## Installation

  ### From npm (recommended)

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

  ```
  @seamless-oss/n8n-nodes-seamless
  ```

  ### Local development

  ```bash
  git clone https://github.com/SeamlessAI/n8n-nodes-seamless.git
  cd n8n-nodes-seamless
  npm install
  npm run dev   # Starts local n8n with the node loaded at localhost:5678
  ```

  ## Credentials

  Two authentication methods are supported:

  ### OAuth2 (recommended)

  Select **OAuth2** in the node's **Authentication** dropdown and follow n8n's standard OAuth2 flow to connect your Seamless.ai account — no manual key management required.

  ### API Key

  Select **API Key** in the node's **Authentication** dropdown, then create **Seamless API** credentials and provide:

  | Field | Description |
  |-------|-------------|
  | **MCP Server URL** | The Seamless MCP endpoint (defaults to `https://mcp.seamless.ai/mcp`) |
  | **API Key** | Your Seamless.ai API key |

  You can find your API key in the [Seamless.ai app](https://login.seamless.ai) under **Settings > Integrations > API**.

  ## Usage example

  1. Add the **Seamless** node to your workflow.
  2. Select a **Resource** (e.g. Contact) and an **Operation** (e.g. Search).
  3. Fill in the required fields and any optional filters.
  4. Execute the workflow to retrieve data from Seamless.ai.

  For trigger-based workflows, add the **Seamless Trigger** node and choose the event type to poll for.

  ## Contributing

  Contributions are welcome! Please open an issue or submit a pull request.

  1. Fork the repository
  2. Create your feature branch (`git checkout -b feature/my-feature`)
  3. Run linting: `npm run lint`
  4. Commit your changes (`git commit -m 'feat: add my feature'`)
  5. Push to the branch (`git push origin feature/my-feature`)
  6. Open a Pull Request

  ## Publishing

  This package is published to npm via a GitHub Actions workflow with provenance, triggered by pushing a version tag:

  1. Update `version` in `package.json`
  2. Commit: `chore: release vX.Y.Z`
  3. Tag: `git tag vX.Y.Z`
  4. Push: `git push origin vX.Y.Z`

  ## Support

  - [Open an issue](https://github.com/SeamlessAI/n8n-nodes-seamless/issues) for bug reports or feature requests
  - [Seamless.ai API docs](https://docs.seamless.ai)
  - [n8n community forum](https://community.n8n.io)

  ## Changelog

  See [GitHub Releases](https://github.com/SeamlessAI/n8n-nodes-seamless/releases) for version history.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Polling trigger node for Seamless.ai that starts an n8n workflow when new Seamless events occur. It watches for activity events and completed research events for companies or contacts.","capabilities":["Triggers on new engagement activity events","Triggers when company research completes","Triggers when contact research completes","Polling-based event monitoring"],"authentication":"OAuth2 or API Key","commonUseCases":["Start workflows when new Seamless engagement activity is detected","Automate follow-up actions when company research finishes","Automate follow-up actions when contact research finishes"],"limitations":["Polling trigger only; not described as a real-time/webhook trigger","Limited to activity events, company researched, and contact researched event types"],"relatedNodes":["Seamless"]}


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

updated_at: 2026-07-14 14:40:34
author_name: periskop
author_github_url: https://github.com/Periskop-ai/
npm_package_name: n8n-nodes-periskop
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:34.614Z
ai_summary_generated_at: 2026-07-06 09:55:11
description:
  Product discovery for AI agents and workflows — turn a shopping prompt into structured product results. Discovery only: no checkout, payments, or stock reservation.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "runShoppingDiscovery",
      "options": [
        {
          "name": "Run Shopping Discovery",
          "value": "runShoppingDiscovery",
          "action": "Run a shopping discovery from a prompt",
          "description": "Turn a natural-language shopping prompt into structured product results"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run Shopping Discovery",
      "value": "runShoppingDiscovery",
      "action": "Run a shopping discovery from a prompt",
      "description": "Turn a natural-language shopping prompt into structured product results"
    }
  ]

npm_readme:
  # n8n-nodes-periskop

  An [n8n](https://n8n.io) community node for **Periskop** — product discovery for
  AI agents and workflows.

  Periskop turns natural-language shopping intent into structured product results:
  recommendations, ranked alternatives, merchant product URLs, price/currency when
  available, caveats, no-match results, request IDs, and machine-readable errors.

  > **Discovery only.** Periskop does not buy products, process payments, create
  > merchant carts or checkout, reserve stock, or place orders, and it does not
  > guarantee live price or availability. Your users complete the purchase on the
  > merchant website. Every response includes an explicit `purchase_boundary`.

  ## Node

  - **Node:** `Periskop`
  - **Operation:** `Run Shopping Discovery`
  - **Endpoint:** `POST https://mcp.periskop.ai/v1/mcp/shopping/discover`

  ### Fields

  | Field | Required | Notes |
  |---|---|---|
  | Prompt | yes | Natural-language shopping intent |
  | Response Format | no | `simple` (default) or `full` |
  | Country | no | ISO country code, e.g. `PT` |
  | Currency | no | ISO currency code, e.g. `EUR` |
  | Language | no | BCP 47 tag, e.g. `en` |
  | Mode | no | `auto` (default), `browse`, `recommend`, `best`, `bundle` |
  | Max Results | no | 1–50 (default `3`) |
  | Store | no | Store id or natural store hint |
  | External User ID | no | Your own analytics id |
  | Previous Result ID | no | Optional prior result id for follow-up discovery |
  | Constraints (JSON) | no | e.g. `{"max_price": 200, "optimization": "best_quality"}` |

  The node returns the Periskop JSON response as-is (one output item per input
  item), so you can reference `result_id`, `request_id`, `items`, `caveats`,
  `purchase_boundary`, and `errors` directly in downstream nodes.

  ## Credential

  - **Name:** `Periskop API`
  - **Field:** `API Key` (your `dp_...` key — create one at
    <https://periskop.ai/developer/keys>)
  - The node sends `Authorization: Bearer <API Key>` automatically — do **not**
    type the word `Bearer`.
  - **Credential test:** the credential is verified against `GET /v1/mcp/stores`,
    an auth-safe, **non-billable** endpoint — testing credentials never burns
    credits.
  - An optional **Base URL** field defaults to `https://mcp.periskop.ai` and only
    needs changing for sandbox/self-hosted environments.

  ## Installation

  ### In n8n (GUI)

  Install via **Settings → Community Nodes → Install** and enter
  `n8n-nodes-periskop`.

  ### Local development

  ```bash
  # from integrations/n8n-nodes-periskop
  npm install
  npm run build      # tsc + copies the SVG icon into dist/
  npm run lint       # eslint-plugin-n8n-nodes-base checks

  # link into a local n8n install for manual testing
  npm link
  cd ~/.n8n/custom    # create this folder if it does not exist
  npm link n8n-nodes-periskop
  # restart n8n; the Periskop node now appears in the node panel
  ```

  See the n8n docs on
  [running community nodes locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/)
  for the authoritative, version-specific steps.

  ## Example workflow

  1. **Manual Trigger**
  2. **Periskop → Run Shopping Discovery**
     - Prompt: `best desk chair under 60€`
     - Response Format: `simple`
  3. Inspect the output: `result_id`, `request_id`, `items[]`, `caveats`,
     `purchase_boundary`.

  ## Pricing

  Billed per successful request in EUR. Errors, rate limits, and hard no-match
  responses are not billed. See <https://periskop.ai/developer> for current
  pricing and any introductory credits.

  ## Known limitations

  - One operation (`Run Shopping Discovery`) in this first version. Additional
    operations may be added later.
  - A genuine no-result is a `200` with `answer_type: "no_match"`, not an error;
    infrastructure failures surface in `errors[]` and/or as HTTP `4xx/5xx` with a
    machine-readable `code`.

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Periskop is an n8n community node for product discovery that turns natural-language shopping prompts into structured product results for AI agents and workflows. It returns recommendations, alternatives, merchant links, pricing details when available, and machine-readable response metadata.","capabilities":["Run shopping discovery from a natural-language prompt","Return structured product results including recommendations and ranked alternatives","Provide merchant product URLs, price/currency when available, caveats, request IDs, and result IDs","Support discovery options such as response format, country, currency, language, mode, max results, store, external user ID, previous result ID, and JSON constraints","Return no-match responses and machine-readable errors","Expose purchase boundary metadata in every response"],"authentication":"API key required via the Periskop API credential; the node sends it as a Bearer token automatically. Base URL is configurable.","commonUseCases":["Product recommendation and shopping assistant workflows","AI agent shopping discovery with structured product outputs","Generating merchant links and candidate products for downstream comparison or user review","Follow-up discovery using a previous result ID with constraints"],"limitations":["Discovery only: it does not buy products, process payments, create carts or checkout, reserve stock, or place orders","It does not guarantee live price or availability","Only one operation is available in this version: Run Shopping Discovery","A genuine no-result is returned as a 200 response with answer_type no_match rather than as an error"],"relatedNodes":[]}


node_type: @woopsocial/n8n-nodes-woopsocial.woopSocialPostPublishedTrigger
package_name: @woopsocial/n8n-nodes-woopsocial
display_name: WoopSocial Watch Published Posts Trigger
description: Fires when a WoopSocial post is delivered successfully
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: frankwoop
author_github_url: https://github.com/WoopSocial/n8n-nodes-woopsocial.git
npm_package_name: @woopsocial/n8n-nodes-woopsocial
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:34.614Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  # n8n-nodes-woopsocial

  Post to Facebook, X/Twitter, Instagram, LinkedIn, YouTube, Pinterest and TikTok with one API key using WoopSocial inside n8n to create social posts, fetch WoopSocial data, and trigger workflows from WoopSocial delivery events without separate platform-based API keys or App IDs.

  [![npm version](https://img.shields.io/npm/v/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![npm downloads](https://img.shields.io/npm/dm/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE.md)

  `n8n-nodes-woopsocial` is a community node that helps teams automate social publishing workflows with WoopSocial.

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

  ## Quick Start

  1. Install `n8n-nodes-woopsocial` in n8n Community Nodes.
  2. Create a **WoopSocial API** credential with your WoopSocial API key.
  3. Add the **WoopSocial** node and run:
     - `Project -> Get Many` to verify connection.
     - `Post -> Create` to publish text or media posts.
  4. Add trigger nodes to listen for publish success/failure events.

  For trigger testing on local n8n, expose a public HTTPS URL and set `WEBHOOK_URL`.

  ## Installation

  ### In n8n UI (recommended)

  1. Open **Settings** -> **Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-woopsocial`.
  4. Confirm the installation and restart n8n if prompted.

  ### With npm (self-hosted)

  Install in your n8n environment:

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

  Then restart n8n.

  ## Credentials

  This node uses a single credential type:

  - **WoopSocial API**
    - **API Key**: your WoopSocial bearer token.
    - Credential test endpoint: `GET /v1/health`.

  The node sends requests to `https://api.woopsocial.com/v1` using:

  ```http
  Authorization: Bearer <API_KEY>
  ```

  ## Supported Nodes

  - **WoopSocial** (action node)
  - **WoopSocial Watch Published Posts Trigger**
  - **WoopSocial Watch Failed Posts Trigger**

  ## Why This Node

  - Publish content to multiple social platforms from a single workflow.
  - Attach media from n8n binary data.
  - Pull projects and social accounts for dynamic workflow logic.
  - React in real time to successful or failed deliveries.

  ## Operations

  ### WoopSocial (Action)

  - **Post**
    - **Create**: publish a post now, with text and optional media upload.
    - **Get**: fetch a post by ID.
  - **Social Account**
    - **Get Many**: list connected social accounts (optional project filter).
  - **Project**
    - **Get Many**: list projects.

  ### Trigger Nodes

  - **WoopSocial Watch Published Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.published`.
  - **WoopSocial Watch Failed Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.failed`.

  ## Usage Notes

  - **Actions can be tested locally** on `localhost`.
  - **Triggers require a public HTTPS webhook URL**. For local development, expose n8n via a tunnel and set `WEBHOOK_URL` before starting n8n.
  - **Post -> Create** supports platform-specific options for:
    - X
    - LinkedIn
    - LinkedIn Pages
    - Instagram
    - Facebook
    - TikTok
    - YouTube
    - Pinterest (board selection)
  - **Media upload** uses n8n binary input and sends bytes to WoopSocial `POST /media`.

  ## Pinterest Board Selector Behavior

  n8n fixed collection UI context can be inconsistent in nested rows. To keep board selection reliable, the node includes a fallback that can show options as:

  - `Account Username: Board Name`

  When fallback mode is used, the node still resolves and sends the correct account and board IDs at execution time.

  ## Troubleshooting

  - **No boards shown for a Pinterest account**
    - Confirm the selected account is connected in WoopSocial and still has access to that business profile and boards.
    - Re-select the project and account in the node to refresh dynamic options.
  - **Trigger activation fails with local URL**
    - Use a public HTTPS URL via tunnel and set `WEBHOOK_URL`.
  - **Community node not visible**
    - Confirm install succeeded and restart n8n.

  ## Compatibility

  - Built with `@n8n/node-cli` community node tooling.
  - TypeScript implementation with no runtime dependencies.
  - For development/build, Node.js 22+ is recommended.

  ## Publishing (maintainers)

  Releases are published to npm from GitHub Actions when a `v*` tag is pushed.

  ### 1. Create `NPM_TOKEN` (must bypass 2FA for CI)

  1. https://www.npmjs.com/settings/~tokens → **Generate New Token** → **Granular Access Token**
  2. Permissions: **Read and write** on `@woopsocial/n8n-nodes-woopsocial` (or the whole `@woopsocial` scope)
  3. **Enable “Bypass two-factor authentication for automation”** (required — without this, CI fails with `EOTP`)
  4. Copy the token → GitHub repo → **Settings** → **Secrets and variables** → **Actions** → secret name **`NPM_TOKEN`**

  ### 2. npm package setting (one-time)

  On https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial → **Settings** → **Publishing access**:

  - Use **“Require two-factor authentication or a granular access token with bypass 2fa enabled”** (default)
  - Do **not** use **“Require two-factor authentication and disallow tokens”** (blocks CI)

  ### 3. Release

  1. Bump `version` in `package.json`, commit, push to `main`
  2. `git tag v0.1.8 && git push origin v0.1.8` (use the version from `package.json`)

  Or **re-run** the failed GitHub Actions job after updating `NPM_TOKEN` (no new tag needed if that version is not on npm yet).

  The workflow publishes with npm **provenance** (required for n8n verified community nodes).

  ## Resources

  - [WoopSocial](https://www.woopsocial.com/)
  - [WoopSocial API base URL](https://api.woopsocial.com/v1)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [n8n expressions docs](https://docs.n8n.io/code/expressions/)

  ## License

  [MIT](./LICENSE.md)

  ## Changelog

  See [CHANGELOG.md](./CHANGELOG.md).

ai_documentation_summary:
  {"purpose":"This trigger node fires when a WoopSocial post is successfully delivered/published. It is used to start n8n workflows in response to social post delivery events from WoopSocial.","capabilities":["Subscribes to WoopSocial socialAccountPost.delivery.published events","Triggers workflows when a post is published successfully","Integrates with WoopSocial delivery event webhooks","Works alongside WoopSocial action nodes for social publishing automation"],"authentication":"WoopSocial API credential using an API key bearer token","commonUseCases":["Start a workflow after a social post is published successfully","Track successful delivery of scheduled or automated social posts","Trigger follow-up actions such as logging, notifications, or reporting after publication"],"limitations":["Triggers require a public HTTPS webhook URL and do not work with a local-only URL unless n8n is exposed via a tunnel","For local development, WEBHOOK_URL must be set before starting n8n"],"relatedNodes":["WoopSocial","WoopSocial Watch Failed Posts Trigger"]}


node_type: @woopsocial/n8n-nodes-woopsocial.woopSocial
package_name: @woopsocial/n8n-nodes-woopsocial
display_name: WoopSocial
description: Create and retrieve WoopSocial resources
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: frankwoop
author_github_url: https://github.com/WoopSocial/n8n-nodes-woopsocial.git
npm_package_name: @woopsocial/n8n-nodes-woopsocial
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:34.615Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Social Account",
          "value": "socialAccount"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a post",
          "description": "Create a post"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a post",
          "description": "Get a post by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many social accounts",
          "description": "List social accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "socialAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many projects",
          "description": "List projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a post",
      "description": "Create a post",
      "resource": "post"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a post",
      "description": "Get a post by ID",
      "resource": "post"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many social accounts",
      "description": "List social accounts",
      "resource": "socialAccount"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many projects",
      "description": "List projects",
      "resource": "project"
    }
  ]

npm_readme:
  # n8n-nodes-woopsocial

  Post to Facebook, X/Twitter, Instagram, LinkedIn, YouTube, Pinterest and TikTok with one API key using WoopSocial inside n8n to create social posts, fetch WoopSocial data, and trigger workflows from WoopSocial delivery events without separate platform-based API keys or App IDs.

  [![npm version](https://img.shields.io/npm/v/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![npm downloads](https://img.shields.io/npm/dm/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE.md)

  `n8n-nodes-woopsocial` is a community node that helps teams automate social publishing workflows with WoopSocial.

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

  ## Quick Start

  1. Install `n8n-nodes-woopsocial` in n8n Community Nodes.
  2. Create a **WoopSocial API** credential with your WoopSocial API key.
  3. Add the **WoopSocial** node and run:
     - `Project -> Get Many` to verify connection.
     - `Post -> Create` to publish text or media posts.
  4. Add trigger nodes to listen for publish success/failure events.

  For trigger testing on local n8n, expose a public HTTPS URL and set `WEBHOOK_URL`.

  ## Installation

  ### In n8n UI (recommended)

  1. Open **Settings** -> **Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-woopsocial`.
  4. Confirm the installation and restart n8n if prompted.

  ### With npm (self-hosted)

  Install in your n8n environment:

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

  Then restart n8n.

  ## Credentials

  This node uses a single credential type:

  - **WoopSocial API**
    - **API Key**: your WoopSocial bearer token.
    - Credential test endpoint: `GET /v1/health`.

  The node sends requests to `https://api.woopsocial.com/v1` using:

  ```http
  Authorization: Bearer <API_KEY>
  ```

  ## Supported Nodes

  - **WoopSocial** (action node)
  - **WoopSocial Watch Published Posts Trigger**
  - **WoopSocial Watch Failed Posts Trigger**

  ## Why This Node

  - Publish content to multiple social platforms from a single workflow.
  - Attach media from n8n binary data.
  - Pull projects and social accounts for dynamic workflow logic.
  - React in real time to successful or failed deliveries.

  ## Operations

  ### WoopSocial (Action)

  - **Post**
    - **Create**: publish a post now, with text and optional media upload.
    - **Get**: fetch a post by ID.
  - **Social Account**
    - **Get Many**: list connected social accounts (optional project filter).
  - **Project**
    - **Get Many**: list projects.

  ### Trigger Nodes

  - **WoopSocial Watch Published Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.published`.
  - **WoopSocial Watch Failed Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.failed`.

  ## Usage Notes

  - **Actions can be tested locally** on `localhost`.
  - **Triggers require a public HTTPS webhook URL**. For local development, expose n8n via a tunnel and set `WEBHOOK_URL` before starting n8n.
  - **Post -> Create** supports platform-specific options for:
    - X
    - LinkedIn
    - LinkedIn Pages
    - Instagram
    - Facebook
    - TikTok
    - YouTube
    - Pinterest (board selection)
  - **Media upload** uses n8n binary input and sends bytes to WoopSocial `POST /media`.

  ## Pinterest Board Selector Behavior

  n8n fixed collection UI context can be inconsistent in nested rows. To keep board selection reliable, the node includes a fallback that can show options as:

  - `Account Username: Board Name`

  When fallback mode is used, the node still resolves and sends the correct account and board IDs at execution time.

  ## Troubleshooting

  - **No boards shown for a Pinterest account**
    - Confirm the selected account is connected in WoopSocial and still has access to that business profile and boards.
    - Re-select the project and account in the node to refresh dynamic options.
  - **Trigger activation fails with local URL**
    - Use a public HTTPS URL via tunnel and set `WEBHOOK_URL`.
  - **Community node not visible**
    - Confirm install succeeded and restart n8n.

  ## Compatibility

  - Built with `@n8n/node-cli` community node tooling.
  - TypeScript implementation with no runtime dependencies.
  - For development/build, Node.js 22+ is recommended.

  ## Publishing (maintainers)

  Releases are published to npm from GitHub Actions when a `v*` tag is pushed.

  ### 1. Create `NPM_TOKEN` (must bypass 2FA for CI)

  1. https://www.npmjs.com/settings/~tokens → **Generate New Token** → **Granular Access Token**
  2. Permissions: **Read and write** on `@woopsocial/n8n-nodes-woopsocial` (or the whole `@woopsocial` scope)
  3. **Enable “Bypass two-factor authentication for automation”** (required — without this, CI fails with `EOTP`)
  4. Copy the token → GitHub repo → **Settings** → **Secrets and variables** → **Actions** → secret name **`NPM_TOKEN`**

  ### 2. npm package setting (one-time)

  On https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial → **Settings** → **Publishing access**:

  - Use **“Require two-factor authentication or a granular access token with bypass 2fa enabled”** (default)
  - Do **not** use **“Require two-factor authentication and disallow tokens”** (blocks CI)

  ### 3. Release

  1. Bump `version` in `package.json`, commit, push to `main`
  2. `git tag v0.1.8 && git push origin v0.1.8` (use the version from `package.json`)

  Or **re-run** the failed GitHub Actions job after updating `NPM_TOKEN` (no new tag needed if that version is not on npm yet).

  The workflow publishes with npm **provenance** (required for n8n verified community nodes).

  ## Resources

  - [WoopSocial](https://www.woopsocial.com/)
  - [WoopSocial API base URL](https://api.woopsocial.com/v1)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [n8n expressions docs](https://docs.n8n.io/code/expressions/)

  ## License

  [MIT](./LICENSE.md)

  ## Changelog

  See [CHANGELOG.md](./CHANGELOG.md).

ai_documentation_summary:
  {"purpose":"This node connects n8n to WoopSocial for social publishing automation. It lets users create and retrieve WoopSocial resources, publish posts to multiple social platforms, and react to delivery events.","capabilities":["Create posts with text and optional media upload","Get a post by ID","List projects","List connected social accounts, optionally filtered by project","Trigger workflows on published post delivery events","Trigger workflows on failed post delivery events","Support platform-specific post options for X, LinkedIn, LinkedIn Pages, Instagram, Facebook, TikTok, YouTube, and Pinterest","Upload media from n8n binary data","Select Pinterest boards with account and board resolution"],"authentication":"API key required via the WoopSocial API credential using a Bearer token","commonUseCases":["Automating social media publishing from a single n8n workflow","Fetching WoopSocial projects and social accounts for dynamic workflow logic","Listening for successful or failed post deliveries to trigger downstream automation"],"limitations":["Trigger nodes require a public HTTPS webhook URL; local testing needs a tunnel and WEBHOOK_URL set","Pinterest board selection may require refreshing project/account options if boards do not appear"],"relatedNodes":["WoopSocial Watch Published Posts Trigger","WoopSocial Watch Failed Posts Trigger"]}


node_type: @woopsocial/n8n-nodes-woopsocial.woopSocialPostFailedTrigger
package_name: @woopsocial/n8n-nodes-woopsocial
display_name: WoopSocial Watch Failed Posts Trigger
description: Fires when a WoopSocial post delivery fails
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: frankwoop
author_github_url: https://github.com/WoopSocial/n8n-nodes-woopsocial.git
npm_package_name: @woopsocial/n8n-nodes-woopsocial
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:34.616Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  # n8n-nodes-woopsocial

  Post to Facebook, X/Twitter, Instagram, LinkedIn, YouTube, Pinterest and TikTok with one API key using WoopSocial inside n8n to create social posts, fetch WoopSocial data, and trigger workflows from WoopSocial delivery events without separate platform-based API keys or App IDs.

  [![npm version](https://img.shields.io/npm/v/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![npm downloads](https://img.shields.io/npm/dm/%40woopsocial%2Fn8n-nodes-woopsocial.svg)](https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE.md)

  `n8n-nodes-woopsocial` is a community node that helps teams automate social publishing workflows with WoopSocial.

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

  ## Quick Start

  1. Install `n8n-nodes-woopsocial` in n8n Community Nodes.
  2. Create a **WoopSocial API** credential with your WoopSocial API key.
  3. Add the **WoopSocial** node and run:
     - `Project -> Get Many` to verify connection.
     - `Post -> Create` to publish text or media posts.
  4. Add trigger nodes to listen for publish success/failure events.

  For trigger testing on local n8n, expose a public HTTPS URL and set `WEBHOOK_URL`.

  ## Installation

  ### In n8n UI (recommended)

  1. Open **Settings** -> **Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-woopsocial`.
  4. Confirm the installation and restart n8n if prompted.

  ### With npm (self-hosted)

  Install in your n8n environment:

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

  Then restart n8n.

  ## Credentials

  This node uses a single credential type:

  - **WoopSocial API**
    - **API Key**: your WoopSocial bearer token.
    - Credential test endpoint: `GET /v1/health`.

  The node sends requests to `https://api.woopsocial.com/v1` using:

  ```http
  Authorization: Bearer <API_KEY>
  ```

  ## Supported Nodes

  - **WoopSocial** (action node)
  - **WoopSocial Watch Published Posts Trigger**
  - **WoopSocial Watch Failed Posts Trigger**

  ## Why This Node

  - Publish content to multiple social platforms from a single workflow.
  - Attach media from n8n binary data.
  - Pull projects and social accounts for dynamic workflow logic.
  - React in real time to successful or failed deliveries.

  ## Operations

  ### WoopSocial (Action)

  - **Post**
    - **Create**: publish a post now, with text and optional media upload.
    - **Get**: fetch a post by ID.
  - **Social Account**
    - **Get Many**: list connected social accounts (optional project filter).
  - **Project**
    - **Get Many**: list projects.

  ### Trigger Nodes

  - **WoopSocial Watch Published Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.published`.
  - **WoopSocial Watch Failed Posts Trigger**
    - Subscribes to `socialAccountPost.delivery.failed`.

  ## Usage Notes

  - **Actions can be tested locally** on `localhost`.
  - **Triggers require a public HTTPS webhook URL**. For local development, expose n8n via a tunnel and set `WEBHOOK_URL` before starting n8n.
  - **Post -> Create** supports platform-specific options for:
    - X
    - LinkedIn
    - LinkedIn Pages
    - Instagram
    - Facebook
    - TikTok
    - YouTube
    - Pinterest (board selection)
  - **Media upload** uses n8n binary input and sends bytes to WoopSocial `POST /media`.

  ## Pinterest Board Selector Behavior

  n8n fixed collection UI context can be inconsistent in nested rows. To keep board selection reliable, the node includes a fallback that can show options as:

  - `Account Username: Board Name`

  When fallback mode is used, the node still resolves and sends the correct account and board IDs at execution time.

  ## Troubleshooting

  - **No boards shown for a Pinterest account**
    - Confirm the selected account is connected in WoopSocial and still has access to that business profile and boards.
    - Re-select the project and account in the node to refresh dynamic options.
  - **Trigger activation fails with local URL**
    - Use a public HTTPS URL via tunnel and set `WEBHOOK_URL`.
  - **Community node not visible**
    - Confirm install succeeded and restart n8n.

  ## Compatibility

  - Built with `@n8n/node-cli` community node tooling.
  - TypeScript implementation with no runtime dependencies.
  - For development/build, Node.js 22+ is recommended.

  ## Publishing (maintainers)

  Releases are published to npm from GitHub Actions when a `v*` tag is pushed.

  ### 1. Create `NPM_TOKEN` (must bypass 2FA for CI)

  1. https://www.npmjs.com/settings/~tokens → **Generate New Token** → **Granular Access Token**
  2. Permissions: **Read and write** on `@woopsocial/n8n-nodes-woopsocial` (or the whole `@woopsocial` scope)
  3. **Enable “Bypass two-factor authentication for automation”** (required — without this, CI fails with `EOTP`)
  4. Copy the token → GitHub repo → **Settings** → **Secrets and variables** → **Actions** → secret name **`NPM_TOKEN`**

  ### 2. npm package setting (one-time)

  On https://www.npmjs.com/package/@woopsocial/n8n-nodes-woopsocial → **Settings** → **Publishing access**:

  - Use **“Require two-factor authentication or a granular access token with bypass 2fa enabled”** (default)
  - Do **not** use **“Require two-factor authentication and disallow tokens”** (blocks CI)

  ### 3. Release

  1. Bump `version` in `package.json`, commit, push to `main`
  2. `git tag v0.1.8 && git push origin v0.1.8` (use the version from `package.json`)

  Or **re-run** the failed GitHub Actions job after updating `NPM_TOKEN` (no new tag needed if that version is not on npm yet).

  The workflow publishes with npm **provenance** (required for n8n verified community nodes).

  ## Resources

  - [WoopSocial](https://www.woopsocial.com/)
  - [WoopSocial API base URL](https://api.woopsocial.com/v1)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [n8n expressions docs](https://docs.n8n.io/code/expressions/)

  ## License

  [MIT](./LICENSE.md)

  ## Changelog

  See [CHANGELOG.md](./CHANGELOG.md).

ai_documentation_summary:
  {"purpose":"This trigger node fires when a WoopSocial social post delivery fails. It is used to react to failed publishing events within n8n workflows.","capabilities":["Subscribes to WoopSocial delivery failed events","Triggers workflows on socialAccountPost.delivery.failed","Works alongside WoopSocial action nodes for social publishing automation"],"authentication":"WoopSocial API credential using an API key (Bearer token) in the Authorization header","commonUseCases":["Notify a team when a scheduled social post fails to publish","Retry or route failed social publishing jobs to an error-handling workflow","Audit or log failed WoopSocial delivery events"],"limitations":["Triggers require a public HTTPS webhook URL; local development needs a tunnel and WEBHOOK_URL set","This node only listens for failed delivery events and does not publish posts itself"],"relatedNodes":["WoopSocial","WoopSocial Watch Published Posts Trigger"]}


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

updated_at: 2026-07-14 14:40:34
author_name: webagentbridge
author_github_url: https://github.com/abokenan444/
npm_package_name: n8n-nodes-signatrust
npm_version: 0.3.3
community_fetched_at: 2026-07-14T14:40:34.617Z
ai_summary_generated_at: 2026-07-06 09:55:11
description:
  Generate, verify, and retrieve cryptographically signed AI Decision Receipts (Ed25519) using Signatrust. Cloud or self-hosted.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "generateReceipt",
      "options": [
        {
          "name": "Generate Decision Receipt",
          "value": "generateReceipt",
          "action": "Generate a decision receipt",
          "description": "Cryptographically seal an AI decision into a Signatrust Decision Receipt"
        },
        {
          "name": "Get Decision Receipt",
          "value": "getReceipt",
          "action": "Get a decision receipt",
          "description": "Retrieve the full details of a receipt by its ID"
        },
        {
          "name": "Verify Decision Receipt",
          "value": "verifyReceipt",
          "action": "Verify a decision receipt",
          "description": "Verify the authenticity and integrity of an existing receipt"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Decision Receipt",
      "value": "generateReceipt",
      "action": "Generate a decision receipt",
      "description": "Cryptographically seal an AI decision into a Signatrust Decision Receipt"
    },
    {
      "name": "Get Decision Receipt",
      "value": "getReceipt",
      "action": "Get a decision receipt",
      "description": "Retrieve the full details of a receipt by its ID"
    },
    {
      "name": "Verify Decision Receipt",
      "value": "verifyReceipt",
      "action": "Verify a decision receipt",
      "description": "Verify the authenticity and integrity of an existing receipt"
    }
  ]

npm_readme:
  # n8n-nodes-signatrust

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-signatrust.svg)](https://www.npmjs.com/package/n8n-nodes-signatrust)
  [![license](https://img.shields.io/npm/l/n8n-nodes-signatrust.svg)](./LICENSE)

  Sign every AI decision in your n8n workflow with **[Signatrust](https://signatrust.net)** &mdash; the trust, verification and accountability layer for autonomous AI agents.

  This community node lets any n8n workflow **generate, verify and retrieve cryptographically signed AI Decision Receipts** against Signatrust Cloud or your self-hosted enterprise endpoint.

  - **One unified credential** for Cloud and Self-Hosted (Connection Type selector)
  - **Three focused operations** &mdash; nothing more, by design
  - **Privacy-first** &mdash; raw prompts and outputs are SHA-256 hashed; only the hash is stored unless you opt in
  - **MIT-licensed**, open source
  - Production-deployed adapter at `https://signatrust.net/api/v1/n8n`

  > Full landing page, recipes and FAQ: **<https://signatrust.net/n8n>**

  ---

  ## What this node is &mdash; and what it isn't

  | Does | Doesn't |
  | --- | --- |
  | Cryptographically signs the AI output you hand it (Ed25519 over canonical JSON) | Stream or persist your workflow execution logs |
  | Returns receipt id, signature, hash, public verify URL, full receipt | Replace n8n Enterprise Log Streaming, Audit Logs, RBAC or Workflow Monitoring |
  | Hashes raw inputs/outputs server-side, storing only the hash | Send raw prompts or business data to Signatrust unless you opt in |
  | Verifies and retrieves any previously sealed receipt | Embed analytics or telemetry beyond the three operations you trigger |
  | Works against Cloud **or** self-hosted via one credential | Require a separate package or credential per deployment |

  ---

  ## Install

  In your n8n instance go to **Settings &rarr; Community Nodes &rarr; Install** and enter:

  ```
  n8n-nodes-signatrust
  ```

  Or, in a self-hosted n8n:

  ```bash
  npm install n8n-nodes-signatrust
  ```

  Requires n8n `>= 1.0` and Node.js `>= 20`.

  ---

  ## Set up the credential

  1. Sign up at <https://signatrust.net/register> &mdash; register an agent and copy the `sk_live_…` API key it issues (shown once).
  2. In n8n, create a new **Signatrust API** credential.
  3. Pick the **Connection Type**:
     - **Signatrust Cloud** (default) &mdash; Base URL is `https://signatrust.net/api/v1/n8n`, no further config needed.
     - **Self-Hosted Enterprise** &mdash; Base URL field appears; set it to e.g. `https://signatrust.your-company.com/api/v1/n8n`.
  4. Paste the API key.
  5. Click **Test** &mdash; the node hits `GET /ping` against your endpoint; a green check means the credential resolved to a live, non-suspended agent.

  ---

  ## Operations

  ### Generate Decision Receipt

  | Field | Required | Notes |
  | --- | --- | --- |
  | Agent Name | yes | Display name of the AI agent that made the decision |
  | Workflow Name | yes | Defaults to `{{$workflow.name}}` |
  | Action Taken | yes | Short description of what the agent did |
  | Decision Output | yes | The AI output. Only its SHA-256 hash is stored unless you opt in |
  | AI Model / Provider / Version | no | e.g. `gpt-4o` / `openai` / `2025-08-01` |
  | Input / Prompt | no | Raw prompt &mdash; only the hash is stored |
  | Decision Type | no | Semantic label (e.g. `loan_decision`) |
  | Risk Level | no | `low` &middot; `medium` &middot; `high` &middot; `critical` |
  | Human Review Took Place | no | Boolean |
  | Policies / Permissions / Tags | no | Comma-separated lists |
  | Include Raw Decision in Metadata | no | Off by default &mdash; opt in to persist the raw text |
  | Receipt Mode | no | `final_decision_only` (default), `every_tool_call`, `every_agent_step`, `custom` |
  | Trace ID / Step fields | no | Optional timeline controls (`trace_id`, `step_index`, `step_type`, `step_name`, `tool_name`) |

  The node also automatically attaches `workflow_id`, `execution_id` and `node_name` from n8n's execution context.

  Response (handed to the next n8n step verbatim):

  ```jsonc
  {
    "ok": true,
    "receipt_id": "STR-3525207773",
    "sequence": 324,
    "timestamp": "2026-06-26T15:20:26.592Z",
    "hash": "sha256:3a58bff6...",
    "signature": "fj9FpBMPgP...",
    "public_key": "MCowBQYDK2VwAyEA0Cv4w...",
    "algorithm": "ed25519",
    "verify_url": "https://signatrust.net/api/v1/n8n/receipts/STR-3525207773/verify",
    "share_url": "https://signatrust.net/verify?id=STR-3525207773",
    "fetch_url": "https://signatrust.net/api/v1/n8n/receipts/STR-3525207773",
    "trace": { "trace_id": "exec_123", "receipt_mode": "every_agent_step", "step_count": 4, "steps": [] },
    "receipt": { "id": "STR-3525207773", "type": "decision_receipt", "...": "..." }
  }
  ```

  ### Verify Decision Receipt

  Looks up a receipt by id and returns the four-pillar verdict used on the public [verify portal](https://signatrust.net/verify):

  ```jsonc
  {
    "ok": true,
    "receipt_id": "STR-3525207773",
    "valid": true,
    "signed": true,
    "integrity": true,
    "chain": true,
    "checks": { "hash_matches": true, "signature_valid": true, "chain_linked": true },
    "errors": [],
    "timestamp": "...",
    "sequence": 324,
    "share_url": "https://signatrust.net/verify?id=STR-3525207773"
  }
  ```

  ### Get Decision Receipt

  Fetches the full canonical receipt body for archival, downstream signing, or to render inside Slack / Notion / your CRM alongside the original decision.

  ---

  ## Example workflows

  A minimal example workflow ships in this package as [`example-workflow.json`](./example-workflow.json). Three full recipes are documented at **<https://signatrust.net/n8n>**:

  - Loan rejection &rarr; signed receipt &rarr; Slack
  - Claude approval &rarr; signed receipt &rarr; CRM
  - Inbound webhook &rarr; verify &rarr; IF branch &rarr; fulfilment

  ### 24 ready-to-import workflows

  A full, free library of **24 production-style workflows** built on this node lives in a companion repo &mdash; every workflow seals its AI decision with a signed receipt, covering finance, payments, support, HR, healthcare, governance and verification utilities:

  **&rarr; [abokenan444/n8n-signatrust-workflows](https://github.com/abokenan444/n8n-signatrust-workflows)** ([browse the showcase](https://abokenan444.github.io/n8n-signatrust-workflows/))

  Each workflow can be imported straight into n8n via **Import from URL** using the raw links listed in that repo's README.

  ---

  ## Release notes (0.3.5)

  - Removed dead `requestDefaults` config from the programmatic node (n8n review fix); request headers are handled per-request via `json: true` and the credential's `X-API-Key` authenticate block.
  - Published from the dedicated GitHub repository via GitHub Actions with npm provenance.

  ## Release notes (0.3.3)

  - Added **Receipt Mode** controls: `final_decision_only`, `every_tool_call`, `every_agent_step`, `custom`.
  - Added trace controls in Generate operation: `trace_id`, `step_index`, `step_type`, `step_name`, `tool_name`.
  - Node now forwards trace fields to the Signatrust n8n API so responses can include execution timeline metadata.

  ---

  ## Error handling

  - `401` &mdash; missing or revoked API key
  - `402` &mdash; plan quota exceeded; response carries `tier`, `used`, `limit`, `upgrade_url`
  - `403` &mdash; agent suspended
  - `404` &mdash; receipt id not found (on Verify / Get)

  Enable **Continue On Fail** on the node to route over-quota or invalid-receipt errors to a fallback branch.

  ---

  ## Links

  - **Landing page**: <https://signatrust.net/n8n>
  - **REST docs**: <https://signatrust.net/docs>
  - **Receipt specification (ADR v1.0)**: <https://signatrust.net/adr>
  - **Discovery document**: <https://signatrust.net/.well-known/signatrust.json>
  - **Public verify portal**: <https://signatrust.net/verify>
  - **Source**: <https://github.com/abokenan444/n8n-nodes-signatrust>
  - **Workflow library (24 recipes)**: <https://github.com/abokenan444/n8n-signatrust-workflows>

  ---

  ## Compatibility

  - n8n `>= 1.0.0`
  - Node.js `>= 20`

  ---

  ## License

  [MIT](LICENSE) &copy; Signatrust

ai_documentation_summary:
  {"purpose":"Generates, verifies, and retrieves cryptographically signed AI Decision Receipts in n8n using Signatrust. It supports both Signatrust Cloud and self-hosted enterprise endpoints for accountability and auditability of AI decisions.","capabilities":["Generate decision receipts for AI outputs with Ed25519 signatures","Verify previously sealed receipt IDs and return integrity/signature verdicts","Fetch full canonical decision receipt bodies for archival or downstream use","Support a unified credential for Cloud and self-hosted deployments","Hash raw prompts and outputs server-side using SHA-256 by default","Attach n8n execution context fields such as workflow_id, execution_id, and node_name"],"authentication":"API key required via a Signatrust API credential (sk_live_...); supports Signatrust Cloud or self-hosted base URL configuration","commonUseCases":["Signing AI decisions before sending results to Slack, CRM, or other systems","Verifying a receipt before continuing a workflow branch","Retrieving archived receipts for compliance, audit, or display alongside an original decision","Recording accountable decision trails for autonomous AI agents"],"limitations":["Only three operations are provided by design: generate, verify, and get receipt","Does not stream or persist workflow execution logs","Does not replace n8n Enterprise Log Streaming, Audit Logs, RBAC, or Workflow Monitoring","Raw prompts and outputs are hashed server-side and not stored unless explicitly opted in","Separate analytics or telemetry are not included"],"relatedNodes":[]}


node_type: n8n-nodes-onetap.onetap
package_name: n8n-nodes-onetap
display_name: OneTap
description: Manage visitors, check-ins, and attendance with OneTap
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: karsh-2-onetap
author_github_url: https://github.com/one-tap-inc/one-tap-n8n.git
npm_package_name: n8n-nodes-onetap
npm_version: 0.9.1
community_fetched_at: 2026-07-14T14:40:34.618Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "profile",
      "options": [
        {
          "name": "List",
          "value": "lists"
        },
        {
          "name": "Participant",
          "value": "participants"
        },
        {
          "name": "Passport",
          "value": "passports"
        },
        {
          "name": "Profile",
          "value": "profile"
        },
        {
          "name": "Punch Pass",
          "value": "punchPasses"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a profile",
          "description": "Create a new profile"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a profile",
          "description": "Delete a specific profile"
        },
        {
          "name": "Delete Multiple",
          "value": "deleteMultiple",
          "action": "Delete multiple profiles",
          "description": "Delete multiple profiles"
        },
        {
          "name": "Find by Check-in Code",
          "value": "findByCheckInCode",
          "action": "Find profile by check in code",
          "description": "Find profile by check-in code"
        },
        {
          "name": "Get Custom Fields",
          "value": "getCustomFields",
          "action": "Get custom fields schema",
          "description": "Get custom fields schema"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many profiles",
          "description": "Fetch many profiles"
        },
        {
          "name": "Get Single",
          "value": "getSingle",
          "action": "Get a specific profile",
          "description": "Get a specific profile by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a profile",
          "description": "Update a profile"
        },
        {
          "name": "Update Avatar",
          "value": "updateAvatar",
          "action": "Update profile avatar",
          "description": "Update profile avatar image"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "profile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a group pass",
          "description": "Delete a group pass"
        },
        {
          "name": "Get by Participant",
          "value": "getByParticipant",
          "action": "Get passport for a specific participant",
          "description": "Fetch passport for a specific participant (DEPRECATED)"
        },
        {
          "name": "Get by Profile",
          "value": "getByProfile",
          "action": "Get passes for a specific profile",
          "description": "Fetch passes for a specific profile (DEPRECATED)"
        },
        {
          "name": "Get Groups",
          "value": "getGroups",
          "action": "Get all group passes",
          "description": "Fetch all group passes"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many passes for a profile or participant",
          "description": "Fetch many passes for a profile or participant"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a passport via SMS or email",
          "description": "Send a passport via SMS or email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "passports"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new punch passport",
          "description": "Create a new punch passport"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many punch passes for a profile",
          "description": "Get many punch passes for a profile"
        },
        {
          "name": "Get Single",
          "value": "getSingle",
          "action": "Get a single punch pass with check ins",
          "description": "Get a single punch pass with check-ins"
        },
        {
          "name": "Redeem",
          "value": "redeem",
          "action": "Redeem a punch passport by associating a check in",
          "description": "Redeem a punch passport by associating a check-in"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a punch passport",
          "description": "Update a punch passport"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "punchPasses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Check In",
          "value": "checkIn",
          "action": "Check in a participant",
          "description": "Check in a participant"
        },
        {
          "name": "Check Out",
          "value": "checkOut",
          "action": "Check out a participant",
          "description": "Check out a participant"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create participant s",
          "description": "Create participant(s)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a participant",
          "description": "Delete a participant"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many participants",
          "description": "Get many participants"
        },
        {
          "name": "Get Single",
          "value": "getSingle",
          "action": "Get a single participant",
          "description": "Get a single participant"
        },
        {
          "name": "Undo Check In",
          "value": "undoCheckIn",
          "action": "Undo check in for a participant",
          "description": "Undo check-in for a participant"
        },
        {
          "name": "Undo Check Out",
          "value": "undoCheckOut",
          "action": "Undo check out for a participant",
          "description": "Undo check-out for a participant"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a participant",
          "description": "Update a participant"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "participants"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new list",
          "description": "Create a new list"
        },
        {
          "name": "Delete Multiple",
          "value": "deleteMultiple",
          "action": "Delete multiple lists",
          "description": "Delete multiple lists"
        },
        {
          "name": "Delete Single",
          "value": "deleteSingle",
          "action": "Delete a single list",
          "description": "Delete a single list"
        },
        {
          "name": "Get List Survey Data",
          "value": "getListSurveyData",
          "action": "Get survey data for a list",
          "description": "Get survey data for a list"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many lists",
          "description": "Get many lists"
        },
        {
          "name": "Get Single",
          "value": "getSingle",
          "action": "Get a single list",
          "description": "Get a single list"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a list",
          "description": "Update a list"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lists"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a profile",
      "description": "Create a new profile",
      "resource": "profile"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a profile",
      "description": "Delete a specific profile",
      "resource": "profile"
    },
    {
      "name": "Delete Multiple",
      "value": "deleteMultiple",
      "action": "Delete multiple profiles",
      "description": "Delete multiple profiles",
      "resource": "profile"
    },
    {
      "name": "Find by Check-in Code",
      "value": "findByCheckInCode",
      "action": "Find profile by check in code",
      "description": "Find profile by check-in code",
      "resource": "profile"
    },
    {
      "name": "Get Custom Fields",
      "value": "getCustomFields",
      "action": "Get custom fields schema",
      "description": "Get custom fields schema",
      "resource": "profile"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many profiles",
      "description": "Fetch many profiles",
      "resource": "profile"
    },
    {
      "name": "Get Single",
      "value": "getSingle",
      "action": "Get a specific profile",
      "description": "Get a specific profile by ID",
      "resource": "profile"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a profile",
      "description": "Update a profile",
      "resource": "profile"
    },
    {
      "name": "Update Avatar",
      "value": "updateAvatar",
      "action": "Update profile avatar",
      "description": "Update profile avatar image",
      "resource": "profile"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a group pass",
      "description": "Delete a group pass",
      "resource": "passports"
    },
    {
      "name": "Get by Participant",
      "value": "getByParticipant",
      "action": "Get passport for a specific participant",
      "description": "Fetch passport for a specific participant (DEPRECATED)",
      "resource": "passports"
    },
    {
      "name": "Get by Profile",
      "value": "getByProfile",
      "action": "Get passes for a specific profile",
      "description": "Fetch passes for a specific profile (DEPRECATED)",
      "resource": "passports"
    },
    {
      "name": "Get Groups",
      "value": "getGroups",
      "action": "Get all group passes",
      "description": "Fetch all group passes",
      "resource": "passports"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many passes for a profile or participant",
      "description": "Fetch many passes for a profile or participant",
      "resource": "passports"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a passport via SMS or email",
      "description": "Send a passport via SMS or email",
      "resource": "passports"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new punch passport",
      "description": "Create a new punch passport",
      "resource": "punchPasses"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many punch passes for a profile",
      "description": "Get many punch passes for a profile",
      "resource": "punchPasses"
    },
    {
      "name": "Get Single",
      "value": "getSingle",
      "action": "Get a single punch pass with check ins",
      "description": "Get a single punch pass with check-ins",
      "resource": "punchPasses"
    },
    {
      "name": "Redeem",
      "value": "redeem",
      "action": "Redeem a punch passport by associating a check in",
      "description": "Redeem a punch passport by associating a check-in",
      "resource": "punchPasses"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a punch passport",
      "description": "Update a punch passport",
      "resource": "punchPasses"
    },
    {
      "name": "Check In",
      "value": "checkIn",
      "action": "Check in a participant",
      "description": "Check in a participant",
      "resource": "participants"
    },
    {
      "name": "Check Out",
      "value": "checkOut",
      "action": "Check out a participant",
      "description": "Check out a participant",
      "resource": "participants"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create participant s",
      "description": "Create participant(s)",
      "resource": "participants"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a participant",
      "description": "Delete a participant",
      "resource": "participants"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many participants",
      "description": "Get many participants",
      "resource": "participants"
    },
    {
      "name": "Get Single",
      "value": "getSingle",
      "action": "Get a single participant",
      "description": "Get a single participant",
      "resource": "participants"
    },
    {
      "name": "Undo Check In",
      "value": "undoCheckIn",
      "action": "Undo check in for a participant",
      "description": "Undo check-in for a participant",
      "resource": "participants"
    },
    {
      "name": "Undo Check Out",
      "value": "undoCheckOut",
      "action": "Undo check out for a participant",
      "description": "Undo check-out for a participant",
      "resource": "participants"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a participant",
      "description": "Update a participant",
      "resource": "participants"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new list",
      "description": "Create a new list",
      "resource": "lists"
    },
    {
      "name": "Delete Multiple",
      "value": "deleteMultiple",
      "action": "Delete multiple lists",
      "description": "Delete multiple lists",
      "resource": "lists"
    },
    {
      "name": "Delete Single",
      "value": "deleteSingle",
      "action": "Delete a single list",
      "description": "Delete a single list",
      "resource": "lists"
    },
    {
      "name": "Get List Survey Data",
      "value": "getListSurveyData",
      "action": "Get survey data for a list",
      "description": "Get survey data for a list",
      "resource": "lists"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many lists",
      "description": "Get many lists",
      "resource": "lists"
    },
    {
      "name": "Get Single",
      "value": "getSingle",
      "action": "Get a single list",
      "description": "Get a single list",
      "resource": "lists"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a list",
      "description": "Update a list",
      "resource": "lists"
    }
  ]

npm_readme:
  # n8n-nodes-onetap

  <img src="https://onetap-web-assets.sfo2.cdn.digitaloceanspaces.com/logos/onetap-logo-light.png" alt="OneTap Logo" width="100" height="100">

  ![OneTap Check-in Journey](https://onetap-web-assets.sfo2.cdn.digitaloceanspaces.com/app-assets/check-in-journey.jpg)

  An n8n community node for integrating with [OneTap](https://onetapcheckin.com) - a powerful visitor management and check-in system.

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

  [Installation](#installation)  
  [Quick Start Guide](#quick-start-guide)  
  [Available Nodes](#available-nodes)  
  [Supported Resources & Operations](#supported-resources--operations)  
  [Usage Examples](#usage-examples)  
  [Advanced Features](#advanced-features)  
  [Troubleshooting](#troubleshooting)  
  [Authentication](#authentication)  
  [Compatibility](#compatibility)  
  [Developer](#developer)  
  [Resources](#resources)  
  [Version](#version)  
  [Support](#support)  

  ## About OneTap

  OneTap Check-in is a digital check-in platform designed to simplify guest registration and tracking. It enables fast, touchless check-ins for events, offices, or secure locations, enhancing the experience for both visitors and organizers.

  > **Note**: This integration is maintained by One Tap, Inc.

  ## Features

  - **Complete API Coverage**: All 36 operations across 5 resources
  - **Profile Management**: Get, create, update, delete profiles with custom fields and avatar support
  - **Advanced Search**: Search profiles by name, email, or phone number with sorting
  - **Passport Operations**: Manage visitor passes with SMS/email sending capabilities
  - **Punch Pass System**: Create, track, and redeem punch passes with check-in limits
  - **Participant Management**: Handle event participants with check-in/check-out workflows
  - **List Management**: Create and manage event lists with scheduling and survey data
  - **Real-time Triggers**: Webhook and polling support for live event monitoring
  - **Flexible Filtering**: Advanced filtering options with pagination support
  - **Environment Support**: Production and staging environment configurations
  - **Custom Fields**: Dynamic custom field support for profiles and participants
  - **Check-in Codes**: Manage unique alphanumeric check-in codes

  ## Installation

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

  Alternatively, you can install this community node in n8n:

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

  You can also install it via npm in your n8n installation:

  ```bash
  npm install n8n-nodes-onetap
  ```

  ## Configuration

  ### Credentials

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

  1. In n8n, go to **Credentials** → **Add Credential**
  2. Search for **OneTap API**
  3. Enter your **API Key** (obtainable from your OneTap dashboard)
  4. Test the connection

  ### API Documentation

  For detailed API information, visit: [https://apidocs.onetapcheckin.io](https://apidocs.onetapcheckin.io)

  More comprehensive documentation on the OneTap public API, including detailed endpoint references, request/response examples, and authentication guides, can be found at [https://apidocs.onetapcheckin.io/](https://apidocs.onetapcheckin.io/).

  ## Quick Start Guide

  ### Step 1: Install the Node
  1. In n8n, go to **Settings** → **Community Nodes**
  2. Click **Install a community node**
  3. Enter `n8n-nodes-onetap`
  4. Click **Install** and wait for completion

  ### Step 2: Set Up Credentials
  1. Visit the [OneTap Dashboard](https://dashboard.onetapcheckin.com/)
  2. Navigate to **Account Settings** → **API Integrations**
  3. Copy your API key
  4. In n8n, go to **Credentials** → **Add Credential**
  5. Search for **OneTap API** and select it
  6. Paste your API key and click **Test** to verify connection

  ### Step 3: Create Your First Workflow
  1. Create a new workflow in n8n
  2. Add a **Manual Trigger** node
  3. Add an **OneTap** node
  4. Configure the node:
     - **Resource**: Profile
     - **Operation**: Get All Profiles
     - **Credentials**: Select your OneTap API credential
  5. Click **Test workflow** to fetch your profiles

  ### Step 4: Explore Advanced Features
  - Try different resources (Participants, Lists, Passports)
  - Set up webhooks using the **OneTap Trigger** node
  - Use the **OneTap Webhook Manager** to register webhooks
  - Combine with other n8n nodes for powerful automations

  ## Available Nodes

  This package includes a single node:

  ### OneTap Node
  The main node for all OneTap operations across 5 resources (Profile, Participant, List, Passport, Punch Pass).

  ## Supported Resources & Operations

  ### Profile Resource (9 operations)
  - **Get All Profiles**: Retrieve all visitor profiles with filtering and search
  - **Get Single Profile**: Get a specific profile by ID
  - **Create Profile**: Create new visitor profiles
  - **Update Profile**: Update existing profiles with custom fields
  - **Delete Profile**: Delete a specific profile
  - **Delete Multiple Profiles**: Bulk delete profiles
  - **Update Avatar**: Update profile avatar image
  - **Get Custom Fields**: Retrieve custom fields schema
  - **Find by Check-in Code**: Locate profile using check-in code

  ### Passport Resource (6 operations)
  - **Get All Passports**: Fetch passes for profiles or participants
  - **Get by Participant**: Get passport for specific participant
  - **Get by Profile**: Get passes for specific profile
  - **Get Groups**: Fetch all group passes
  - **Delete Passport**: Delete a group pass
  - **Send Passport**: Send passport via SMS or email

  ### Punch Pass Resource (5 operations)
  - **Create Punch Pass**: Create new punch passport with check-in limits
  - **Get All Punch Passes**: Retrieve punch passes for a profile
  - **Get Single Punch Pass**: Get punch pass with associated check-ins
  - **Update Punch Pass**: Update punch passport details
  - **Redeem Punch Pass**: Associate check-in with punch passport

  ### Participant Resource (9 operations)
  - **Create Participants**: Add participants to events and lists
  - **Get Single Participant**: Retrieve specific participant details
  - **Update Participant**: Modify participant information
  - **Get All Participants**: Fetch participants with advanced filtering
  - **Delete Participant**: Remove participant from events
  - **Check In**: Process participant check-in with location/method tracking
  - **Check Out**: Process participant check-out
  - **Undo Check In**: Reverse check-in operation
  - **Undo Check Out**: Reverse check-out operation

  ### List Resource (7 operations)
  - **Create List**: Create new event lists with scheduling
  - **Get All Lists**: Retrieve lists with filtering and sorting
  - **Get Single List**: Get specific list details
  - **Update List**: Modify list configuration
  - **Delete Single List**: Remove specific list
  - **Delete Multiple Lists**: Bulk delete lists
  - **Get Survey Data**: Retrieve survey data for lists

  ## Usage Examples

  ### Search for Profiles
  ```json
  {
    "resource": "profile",
    "operation": "getAll",
    "additionalFields": {
      "search": "john@example.com",
      "sortBy": "name",
      "sortOrder": "asc",
      "favorite": true
    }
  }
  ```

  ### Create Participant and Check In
  ```json
  {
    "resource": "participants",
    "operation": "create",
    "listId": "list123",
    "profileId": "profile456",
    "additionalFields": {
      "source": "n8n-automation",
      "notes": "VIP guest"
    }
  }
  ```

  ### Set Up Event Trigger
  ```json
  {
    "triggerOn": "checkin",
    "triggerMethod": "webhook",
    "additionalFilters": {
      "method": ["TAP", "QR"],
      "source": "mobile-app"
    }
  }
  ```

  ### Create Punch Pass
  ```json
  {
    "resource": "punchPasses",
    "operation": "create",
    "profileId": "profile123",
    "startsAt": "2024-01-01T00:00:00Z",
    "createFields": {
      "name": "Coffee Loyalty Card",
      "checkInsLimit": 10,
      "expiresAt": "2024-12-31T23:59:59Z"
    }
  }
  ```

  ### Register Webhook
  ```json
  {
    "operation": "register",
    "webhookUrl": "https://your-n8n-instance.com/webhook/abc123",
    "events": ["participant.checkin", "participant.checkout"],
    "additionalSettings": {
      "name": "n8n-checkin-webhook",
      "description": "Process check-ins in n8n workflow"
    }
  }
  ```

  ## Example Workflows

  ### Check-in Analytics with Airtable Integration

  We've included a complete example workflow that demonstrates how to build a powerful check-in analytics system using OneTap and Airtable:

  **📁 [Example Workflow](./examples/example_n8n_workflow.json)**

  [Example workflow /w video 📺](https://community.onetapcheckin.com/t/n8n-integration-coming-out-soon/155)

  This workflow:
  1. **Fetches all profiles** from your OneTap account using your API key
  2. **Loops through each profile** to get the number of check-ins performed
  3. **Updates an Airtable sheet** with the check-in analytics data

  **Key Features:**
  - **Manual Trigger**: Currently triggered manually, but easily configurable for automation
  - **Scheduled Execution**: Can be automated to run on a schedule (daily, weekly, etc.)
  - **Webhook Integration**: For advanced setups, connect to webhooks for real-time updates when check-ins happen
  - **Analytics Dashboard**: Creates a comprehensive view of check-in activity in Airtable

  **Use Cases:**
  - Track employee attendance and check-in frequency
  - Monitor event participation rates
  - Generate check-in reports for compliance
  - Create automated attendance dashboards

  To use this workflow:
  1. Import the JSON file into your n8n instance
  2. Configure your OneTap API credentials
  3. Set up your Airtable connection
  4. Customize the schedule or webhook triggers as needed


  ## Advanced Features

  ### Custom Fields Support
  The node supports dynamic custom fields for profiles:
  ```json
  {
    "customFields": {
      "customField": [
        {
          "name": "employeeId",
          "type": "string",
          "value": "EMP001"
        },
        {
          "name": "department",
          "type": "string", 
          "value": "Engineering"
        }
      ]
    }
  }
  ```

  ### Environment Configuration
  Select between production and staging environments:
  - **Production**: `https://api.onetapcheckin.com`
  - **Staging**: For development and testing

  ### Pagination & Filtering
  Most operations support advanced pagination and filtering:
  - **Return All**: Automatically paginate through all results
  - **Custom Pagination**: Control page size and offset
  - **Advanced Filtering**: Filter by dates, locations, methods, and custom criteria
  - **Sorting**: Sort by multiple fields with ascending/descending order

  ## Troubleshooting

  ### Authentication Issues

  **Problem**: "Invalid API key" or "Unauthorized" errors
  - **Solution**: Verify your API key in the [OneTap Dashboard](https://dashboard.onetapcheckin.com/) under Account Settings → API Integrations
  - **Check**: Ensure you have a Pro Plus plan or higher for API access
  - **Verify**: Test the credential in n8n using the "Test" button

  **Problem**: "403 Forbidden" errors
  - **Solution**: Check your OneTap plan - API access requires Pro Plus plans or higher
  - **Upgrade**: Visit the [pricing page](https://www.onetapcheckin.com/pricing) to upgrade your plan

  ### Common API Errors

  **Problem**: "Profile not found" or "Invalid ID" errors
  - **Solution**: Verify the profile/participant/list ID exists in your OneTap account
  - **Check**: IDs are case-sensitive and must match exactly
  - **Test**: Try fetching all profiles first to get valid IDs

  **Problem**: "Rate limit exceeded" errors
  - **Solution**: Reduce the frequency of API calls
  - **Implement**: Add delays between requests using n8n's "Wait" node
  - **Contact**: Reach out to support for rate limit increases if needed

  ### Webhook Issues

  **Problem**: Webhooks not triggering
  - **Solution**: Check that your n8n instance is publicly accessible
  - **Verify**: Ensure the webhook URL is correct and responding
  - **Test**: Use the OneTap Webhook Manager to re-register webhooks
  - **Debug**: Check n8n execution logs for incoming webhook data

  **Problem**: Webhook registration fails
  - **Solution**: Verify your webhook URL is publicly accessible
  - **Check**: Ensure the URL returns a 200 status code
  - **Format**: URL should be `https://your-n8n-instance.com/webhook/your-webhook-id`

  ### Node Configuration Issues

  **Problem**: "Required parameter missing" errors
  - **Solution**: Check that all required fields are filled
  - **Profile operations**: Profile ID is required for single profile operations
  - **Participant operations**: Participant ID and List ID may be required
  - **Validation**: Use the node's built-in validation hints

  **Problem**: Custom fields not updating
  - **Solution**: Ensure custom field names match exactly (case-sensitive)
  - **Check**: Verify custom field types (string, number, boolean, date, array)
  - **Test**: Use "Get Custom Fields" operation to see available fields

  ### Performance Issues

  **Problem**: Slow response times
  - **Solution**: Use pagination instead of "Return All" for large datasets
  - **Optimize**: Implement proper filtering to reduce data transfer
  - **Batch**: Process operations in smaller batches

  **Problem**: Memory issues with large datasets
  - **Solution**: Enable pagination and process data in chunks
  - **Limit**: Set reasonable page sizes (50-100 items per page)
  - **Stream**: Process data as it arrives rather than loading all at once

  ### Need More Help?

  If you're still experiencing issues:
  1. Check the [OneTap Community](https://community.onetapcheckin.com/) for similar issues
  2. Review the [API documentation](https://apidocs.onetapcheckin.io/) for detailed endpoint information
  3. Contact the developer at developer@onetapcheckin.com
  4. Report bugs on the [GitHub repository](https://github.com/one-tap-inc/one-tap-n8n)

  ## Authentication

  This node uses API Key authentication. The API key is sent via the `X-API-Key` header to the OneTap API.

  ### Getting Your API Key

  1. Visit the [OneTap Dashboard](https://dashboard.onetapcheckin.com/)
  2. Navigate to **Account Settings** → **API Integrations**
  3. Copy your API key from this section

  ### Plan Requirements

  **Important**: Public API integrations are available starting from the **Pro Plus plans** and above. Please check the [pricing page](https://www.onetapcheckin.com/pricing) and your current plan details to ensure you have API access.

  If you're on a lower plan (Individual, Basic, Standard, or Pro), you'll need to upgrade to access the API functionality.

  ## Compatibility

  | Requirement | Version/Details |
  |-------------|----------------|
  | **Minimum n8n version** | 0.190.0 |
  | **Tested with n8n versions** | 0.190.0, 1.0.0+ |
  | **Node.js version** | 20.15 or higher |
  | **n8n API version** | 1 |
  | **Compatibility** | Self-hosted and cloud versions |

  ## Developer

  ### Local Development Setup

  1. **Clone the repository:**
     ```bash
     git clone https://github.com/one-tap-inc/one-tap-n8n.git
     cd one-tap-n8n
     ```

  2. **Install dependencies:**
     ```bash
     npm install
     ```

  3. **Build the node:**
     ```bash
     npm run build
     ```

  4. **Run n8n locally:**
     ```bash
     # Install n8n globally if not already installed
     npm install -g n8n
     
     # Start n8n
     n8n start
     ```

  ### Side-loading the Node into n8n

  If you want to manually install the node without using the community nodes installation:

  #### Method 1: Custom Nodes Directory
  1. **Locate your n8n custom nodes directory:**
     - **Linux/Mac**: `~/.n8n/custom/`
     - **Windows**: `%USERPROFILE%\.n8n\custom\`

  2. **Copy the built node files:**
     ```bash
     # After building the project
     cp -r dist/* ~/.n8n/custom/
     ```

  3. **Restart n8n:**
     ```bash
     n8n start
     ```

  #### Method 2: Using N8N_CUSTOM_EXTENSIONS Environment Variable
  1. **Set the custom extensions path:**
     ```bash
     export N8N_CUSTOM_EXTENSIONS="./dist"
     ```

  2. **Start n8n:**
     ```bash
     n8n start
     ```

  #### Method 3: Development Mode (Symlink)
  1. **Create a symlink in the custom directory:**
     ```bash
     # Create custom directory if it doesn't exist
     mkdir -p ~/.n8n/custom
     
     # Create symlink to your development directory
     ln -s /path/to/one-tap-n8n/dist ~/.n8n/custom/n8n-nodes-onetap
     ```

  2. **Restart n8n:**
     ```bash
     n8n start
     ```

  ### Development Commands

  | Command | Description |
  |---------|-------------|
  | `npm run build` | Build the node for production |
  | `npm run dev` | Watch for changes and rebuild automatically |
  | `npm run lint` | Run ESLint to check code quality |
  | `npm run lintfix` | Automatically fix linting issues |
  | `npm run format` | Format code with Prettier |

  ### Testing Your Changes

  1. **Make your changes** to the node files
  2. **Rebuild the node**: `npm run build`
  3. **Restart n8n** to load the updated node
  4. **Test the changes** in n8n workflows

  ### Resources for n8n Node Development

  - [n8n Node Development Documentation](https://docs.n8n.io/integrations/creating-nodes/)
  - [n8n Community Nodes Guidelines](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n TypeScript Node Template](https://github.com/n8n-io/n8n-nodes-starter)

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [OneTap API Documentation](https://apidocs.onetapcheckin.io/)
  * [OneTap Platform](https://onetapcheckin.com/)
  * [OneTap Community](https://community.onetapcheckin.com/)
  * [OneTap Pricing](https://www.onetapcheckin.com/pricing)
  * [OneTap n8n Integration Discussion](https://community.onetapcheckin.com/t/n8n-integration-coming-out-soon/155)

  ## API Endpoints

  - **Production**: `https://api.onetapcheckin.com`
  - **Staging**: Available for development/testing

  ## Version

  Current version: **0.8.0**

  ## License

  MIT

  ## Repository

  [https://github.com/one-tap-inc/one-tap-n8n](https://github.com/one-tap-inc/one-tap-n8n)

  ## Support

  For support and questions:
  - **OneTap Support**: hello@onetapcheckin.com
  - **Developer Contact**: developer@onetapcheckin.com
  - **OneTap Community**: Join the [OneTap Community](https://community.onetapcheckin.com/) to share your use cases, discuss this integration, and get help from other users
  - **Node Issues**: Please report issues on the [GitHub repository](https://github.com/one-tap-inc/one-tap-n8n)
  - **n8n Community**: Join the [n8n community](https://community.n8n.io/) for general n8n support

  ## Contributing

  Contributions are welcome! Please feel free to submit pull requests or report issues on the GitHub repository.

ai_documentation_summary:
  {"purpose":"OneTap is an n8n community node for integrating with the OneTap visitor management and check-in platform. It lets workflows manage visitor profiles, passes, participants, lists, and attendance-related data through OneTap's API.","capabilities":["Manage visitor profiles: get, create, update, delete, bulk delete, and update avatars","Search profiles by name, email, phone number, or check-in code, with filtering and sorting","Handle passports/passes: fetch, send via SMS or email, and delete group passes","Manage participants with check-in and check-out workflows","Create and manage lists, including scheduling and survey data","Support custom fields for profiles and participants","Use webhooks and polling triggers for real-time event monitoring","Work with production and staging environments","Support pagination and advanced filtering"],"authentication":"API key required via the OneTap API credential in n8n","commonUseCases":["Automating visitor registration and profile maintenance","Sending or managing digital passes for guests or event attendees","Tracking participant check-ins and check-outs for events, offices, or secure locations"],"limitations":["The README states complete API coverage but only partial operation details are visible in the provided excerpt","Authentication appears to be API-key based only; no OAuth2 flow is mentioned"],"relatedNodes":["OneTap Trigger","OneTap Webhook Manager","Manual Trigger"]}


node_type: n8n-nodes-datahyena.datahyena
package_name: n8n-nodes-datahyena
display_name: Datahyena
description: B2B growth signals: funding rounds, acquisitions, exec moves, companies, investors
category: Community
development_style: declarative
version: 1
operations:
  [
  {
  "name": "Get Many",
  "value": "getMany",
  "action": "Get many records"
  }
  ]

credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: akashrajpurohit
author_github_url: https://github.com/AkashRajpurohit/
npm_package_name: n8n-nodes-datahyena
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:34.619Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "fundingEvent",
      "options": [
        {
          "name": "Acquisition",
          "value": "acquisition"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Executive Move",
          "value": "execMove"
        },
        {
          "name": "Funding Event",
          "value": "fundingEvent"
        },
        {
          "name": "Investor",
          "value": "investor"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many records"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n-nodes-datahyena

  n8n community node for [Datahyena](https://datahyena.com): B2B growth signals as one API. Pull funding rounds, acquisitions (M&A), executive moves, company data, and investor data, deduped and matched to a single company.

  ## Installation

  In n8n: Settings, Community Nodes, Install, enter `n8n-nodes-datahyena`.

  ## Credentials

  Create a **Datahyena API** credential with your API key. Free key (50 credits, no card) at https://app.datahyena.com/register. The node adds the `X-API-Key` header for you, so you only paste the key.

  ## Resources

  - **Funding Event**: company, amount, round, date, investors
  - **Acquisition**: acquirer, target, deal value, payment type, date
  - **Executive Move**: person, company, role, seniority, move type
  - **Company**: domain, LinkedIn, HQ, industry, employee count, founded year
  - **Investor**: name, type, HQ, domain

  Each supports **Get Many** with filters (date, country, round, amount, move type, seniority, investor type, and more) and returns all results via cursor pagination.

  ## Usage example

  Fetch US funding rounds above $1M announced since the start of 2026:

  1. Add the **Datahyena** node and select your **Datahyena API** credential.
  2. Set **Resource** to `Funding Event` and **Operation** to `Get Many`.
  3. Configure the filters:
     - **HQ Country**: `United States`
     - **Funding Rounds**: `Seed`, `Series A` (or leave empty for all rounds)
     - **Min Amount (USD)**: `1000000`
     - **Since (ISO-8601)**: `2026-01-01T00:00:00.000Z`
  4. Set **Limit** to `25` (or enable **Return All** to page through every match).
  5. Execute. Each item is one funding round, for example:

  ```json
  {
    "company": { "name": "Acme AI", "domain": "acme.ai" },
    "round": "series-a",
    "amountUsd": 12000000,
    "announcedAt": "2026-02-14",
    "investors": [{ "name": "Sequoia" }],
    "sources": [{ "url": "https://techcrunch.com/..." }]
  }
  ```

  You can then pass these items to Slack, a spreadsheet, an AI node, or your CRM. The Datahyena node also works as a tool for AI Agents — attach it to an Agent's **Tool** input and it can fetch signals on demand.

  ## Links

  [datahyena.com](https://datahyena.com) · [Docs](https://datahyena.com/docs) · [API reference](https://datahyena.com/docs)

ai_documentation_summary:
  {"purpose":"Datahyena provides B2B growth signals through a single API, including funding rounds, acquisitions, executive moves, company data, and investor data. It returns deduplicated, matched records for a single company across multiple signal types.","capabilities":["Fetch funding events with company, amount, round, date, and investors","Fetch acquisition events with acquirer, target, deal value, payment type, and date","Fetch executive moves with person, company, role, seniority, and move type","Fetch company data including domain, LinkedIn, headquarters, industry, employee count, and founded year","Fetch investor data including name, type, HQ, and domain","Get Many operations for all supported resources","Filter results by date, country, round, amount, move type, seniority, investor type, and more","Return all results using cursor pagination","Support use as a tool for AI Agents"],"authentication":"API key required via a Datahyena API credential; the node automatically adds the X-API-Key header.","commonUseCases":["Tracking recent funding rounds for lead generation or market intelligence","Monitoring acquisitions and executive changes for sales outreach","Enriching company and investor records in CRMs or spreadsheets","Supplying real-time growth signals to AI agents and automations"],"limitations":["README only mentions Get Many support for the listed resources; no create/update/delete operations are documented","Access requires a Datahyena API key, though a free key is available"],"relatedNodes":["Slack","Spreadsheet","AI node","CRM"]}


node_type: n8n-nodes-upvoty.upvoty
package_name: n8n-nodes-upvoty
display_name: Upvoty
description: Manage feedback, changelog, roadmap, and users in Upvoty
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alexandru-dodon
author_github_url: https://github.com/CopyPasteTM/
npm_package_name: n8n-nodes-upvoty
npm_version: 1.2.0
community_fetched_at: 2026-07-14T14:40:34.621Z
ai_summary_generated_at: 2026-07-06 09:55:11
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "feedback",
      "options": [
        {
          "name": "Changelog",
          "value": "changelog"
        },
        {
          "name": "Feedback",
          "value": "feedback"
        },
        {
          "name": "Feedback Comment",
          "value": "feedbackComment"
        },
        {
          "name": "Feedback Vote",
          "value": "feedbackVote"
        },
        {
          "name": "Roadmap",
          "value": "roadmap"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Archive",
          "value": "archive",
          "action": "Archive a feedback item"
        },
        {
          "name": "Change Status",
          "value": "changeStatus",
          "action": "Change feedback status"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a feedback item",
          "description": "Create a new feedback item. When an author is set, an upvote from that author is added automatically."
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a feedback item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a feedback item"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many feedback items"
        },
        {
          "name": "Unarchive",
          "value": "unarchive",
          "action": "Unarchive a feedback item"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a feedback item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feedback"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a comment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a comment"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many comments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feedbackComment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add Vote",
          "value": "add",
          "action": "Add a vote to feedback"
        },
        {
          "name": "List Votes",
          "value": "list",
          "action": "List votes on feedback"
        },
        {
          "name": "Remove Vote",
          "value": "remove",
          "action": "Remove a vote from feedback"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feedbackVote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a changelog entry"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a changelog entry"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a changelog entry"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many changelog entries"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a changelog entry"
        },
        {
          "name": "Unpublish",
          "value": "unpublish",
          "action": "Unpublish a changelog entry"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a changelog entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "changelog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a roadmap item"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a roadmap item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a roadmap item"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many roadmap items"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a roadmap item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "roadmap"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a user"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many users"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Archive",
      "value": "archive",
      "action": "Archive a feedback item",
      "resource": "feedback"
    },
    {
      "name": "Change Status",
      "value": "changeStatus",
      "action": "Change feedback status",
      "resource": "feedback"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a feedback item",
      "description": "Create a new feedback item. When an author is set, an upvote from that author is added automatically.",
      "resource": "feedback"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a feedback item",
      "resource": "feedback"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a feedback item",
      "resource": "feedback"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many feedback items",
      "resource": "feedback"
    },
    {
      "name": "Unarchive",
      "value": "unarchive",
      "action": "Unarchive a feedback item",
      "resource": "feedback"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a feedback item",
      "resource": "feedback"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a comment",
      "resource": "feedbackComment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a comment",
      "resource": "feedbackComment"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many comments",
      "resource": "feedbackComment"
    },
    {
      "name": "Add Vote",
      "value": "add",
      "action": "Add a vote to feedback",
      "resource": "feedbackVote"
    },
    {
      "name": "List Votes",
      "value": "list",
      "action": "List votes on feedback",
      "resource": "feedbackVote"
    },
    {
      "name": "Remove Vote",
      "value": "remove",
      "action": "Remove a vote from feedback",
      "resource": "feedbackVote"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many changelog entries",
      "resource": "changelog"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Unpublish",
      "value": "unpublish",
      "action": "Unpublish a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a changelog entry",
      "resource": "changelog"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a roadmap item",
      "resource": "roadmap"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a roadmap item",
      "resource": "roadmap"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a roadmap item",
      "resource": "roadmap"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many roadmap items",
      "resource": "roadmap"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a roadmap item",
      "resource": "roadmap"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a user",
      "resource": "user"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many users",
      "resource": "user"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a user",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-upvoty

  n8n community node for [Upvoty](https://upvoty.com) — feedback management platform.

  Manage feedback, changelogs, roadmaps, and users directly from your n8n workflows.

  ## Installation

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

  ```
  n8n-nodes-upvoty
  ```

  Or install via CLI:

  ```bash
  npm install n8n-nodes-upvoty
  ```

  ## Setup

  1. In n8n, go to **Credentials → New Credential → Upvoty OAuth2 API**
  2. Click **Connect** — you'll be redirected to Upvoty to authorize access
  3. Select your project and approve — done

  ## Nodes

  ### Upvoty

  Perform actions on your Upvoty project:

  - **Feedback** — Create, Get, List, Update, Delete, Change Status, Archive/Unarchive
  - **Feedback Comments** — Create, List, Delete
  - **Feedback Votes** — Add, Remove, List
  - **Changelog** — Create, Get, List, Update, Delete, Publish, Unpublish
  - **Roadmap** — Create, Get, List, Update, Delete
  - **Users** — Create, Get, List, Update

  Dynamic dropdowns for categories, statuses, and tags — no need to look up IDs manually.

  ### Upvoty Trigger

  Receive real-time events from Upvoty via webhooks. Supports 55 event types including:

  - Feedback created, updated, deleted, status changed
  - Votes and comments added
  - Changelog published
  - Roadmap items updated
  - And more

  ## Resources

  - [Upvoty API Documentation](https://api.upvotyfeedback.com/docs)
  - [Upvoty Website](https://upvoty.com)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Provides n8n integration with Upvoty to manage feedback, changelogs, roadmaps, users, and related engagement actions from workflows. It also supports webhook-triggered automation for Upvoty events.","capabilities":["Create, get, list, update, delete feedback","Change feedback status and archive/unarchive feedback","Create, list, and delete feedback comments","Add, remove, and list feedback votes","Create, get, list, update, delete, publish, and unpublish changelogs","Create, get, list, update, and delete roadmap items","Create, get, list, and update users","Use dynamic dropdowns for categories, statuses, and tags","Trigger workflows from Upvoty webhooks for 55 event types"],"authentication":"OAuth2 (Upvoty OAuth2 API via n8n credential connection)","commonUseCases":["Automatically create or update Upvoty feedback items from form submissions or support tickets","Sync product roadmap or changelog updates from internal workflow systems into Upvoty","React to Upvoty webhook events such as new feedback, comments, votes, or status changes","Manage Upvoty users and moderation tasks from automated workflows"],"limitations":[],"relatedNodes":["Upvoty Trigger"]}


node_type: n8n-nodes-upvoty.upvotyTrigger
package_name: n8n-nodes-upvoty
display_name: Upvoty Trigger
description: Triggers when events occur in Upvoty
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alexandru-dodon
author_github_url: https://github.com/CopyPasteTM/
npm_package_name: n8n-nodes-upvoty
npm_version: 1.2.0
community_fetched_at: 2026-07-14T14:40:34.621Z
ai_summary_generated_at: 2026-07-06 09:55:11
npm_readme:
  # n8n-nodes-upvoty

  n8n community node for [Upvoty](https://upvoty.com) — feedback management platform.

  Manage feedback, changelogs, roadmaps, and users directly from your n8n workflows.

  ## Installation

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

  ```
  n8n-nodes-upvoty
  ```

  Or install via CLI:

  ```bash
  npm install n8n-nodes-upvoty
  ```

  ## Setup

  1. In n8n, go to **Credentials → New Credential → Upvoty OAuth2 API**
  2. Click **Connect** — you'll be redirected to Upvoty to authorize access
  3. Select your project and approve — done

  ## Nodes

  ### Upvoty

  Perform actions on your Upvoty project:

  - **Feedback** — Create, Get, List, Update, Delete, Change Status, Archive/Unarchive
  - **Feedback Comments** — Create, List, Delete
  - **Feedback Votes** — Add, Remove, List
  - **Changelog** — Create, Get, List, Update, Delete, Publish, Unpublish
  - **Roadmap** — Create, Get, List, Update, Delete
  - **Users** — Create, Get, List, Update

  Dynamic dropdowns for categories, statuses, and tags — no need to look up IDs manually.

  ### Upvoty Trigger

  Receive real-time events from Upvoty via webhooks. Supports 55 event types including:

  - Feedback created, updated, deleted, status changed
  - Votes and comments added
  - Changelog published
  - Roadmap items updated
  - And more

  ## Resources

  - [Upvoty API Documentation](https://api.upvotyfeedback.com/docs)
  - [Upvoty Website](https://upvoty.com)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when real-time events occur in Upvoty via webhooks. This community node integrates Upvoty feedback management features with n8n automation.","capabilities":["Receive real-time webhook events from Upvoty","Support 55 event types including feedback, votes, comments, changelog, and roadmap events","Trigger on feedback created, updated, deleted, and status-changed events","Trigger on votes and comments added events","Trigger on changelog published and roadmap item updated events"],"authentication":"Upvoty OAuth2 API","commonUseCases":["Automate workflows when new feedback is created or updated in Upvoty","Notify teams when comments or votes are added to feedback","Sync Upvoty changelog or roadmap changes with other tools"],"limitations":["Operates via webhooks and requires Upvoty event delivery to n8n","The README does not list all 55 supported event types individually"],"relatedNodes":["Upvoty"]}


node_type: n8n-nodes-statista-api.statistaApi
package_name: n8n-nodes-statista-api
display_name: Statista API
category: Data & Storage
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: anasasghar
author_github_url: https://github.com/statista-oss/statista-n8n-api-node.git
npm_package_name: n8n-nodes-statista-api
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.622Z
ai_summary_generated_at: 2026-07-06 09:55:11
description:
  Consume the Statista REST API for statistics, consumer insights, and market insights (search and data endpoints).

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "statistics",
      "options": [
        {
          "name": "Consumer Insight",
          "value": "consumerInsights"
        },
        {
          "name": "Market Insight",
          "value": "marketInsights"
        },
        {
          "name": "Statistic",
          "value": "statistics"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get statistic data",
          "description": "Retrieve full chart data for a statistic by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search statistics",
          "description": "Search statistics by natural language or keywords"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statistics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get consumer insights data",
          "description": "Fetch cross-tabulated survey data for question/answer IDs"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search consumer insights",
          "description": "Search survey questions and answers by topic"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "consumerInsights"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get market insights data",
          "description": "Fetch chart data for a market insights indicator by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search market insights",
          "description": "Search market insights indicators by topic"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "marketInsights"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get statistic data",
      "description": "Retrieve full chart data for a statistic by ID",
      "resource": "statistics"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search statistics",
      "description": "Search statistics by natural language or keywords",
      "resource": "statistics"
    },
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get consumer insights data",
      "description": "Fetch cross-tabulated survey data for question/answer IDs",
      "resource": "consumerInsights"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search consumer insights",
      "description": "Search survey questions and answers by topic",
      "resource": "consumerInsights"
    },
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get market insights data",
      "description": "Fetch chart data for a market insights indicator by ID",
      "resource": "marketInsights"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search market insights",
      "description": "Search market insights indicators by topic",
      "resource": "marketInsights"
    }
  ]

npm_readme:
  # n8n-nodes-statista-api

  Official community node for the [Statista REST API](https://docs.platform.statista.ai/api-reference/introduction). Search and retrieve statistics, consumer insights, and market insights from Statista inside n8n workflows.

  ## Installation

  ### Community Nodes (recommended)

  1. Open **Settings → Community Nodes** in n8n.
  2. Click **Install**.
  3. Enter `n8n-nodes-statista-api`.

  ### Self-hosted (custom mount)

  ```bash
  cd n8n-nodes-statista-api
  npm install
  npm run build
  ```

  Mount the package folder to your n8n custom extensions directory, then restart n8n.

  ## Credentials

  Create **Statista API** credentials with your API key.

  - Get an API key at [platform.statista.ai/join](https://platform.statista.ai/join)
  - Authentication docs: [Statista authentication](https://docs.platform.statista.ai/start/authentication)

  The credential test runs a lightweight statistics search to verify your key.

  ## Operations

  ### Statistics

  | Operation | Description |
  |---|---|
  | **Search** | Search statistics by natural language or keywords |
  | **Get Data** | Retrieve full chart data for a statistic by ID |

  ### Consumer Insights

  | Operation | Description |
  |---|---|
  | **Search** | Search survey questions and answers by topic |
  | **Get Data** | Fetch cross-tabulated survey data for question/answer IDs |

  ### Market Insights

  | Operation | Description |
  |---|---|
  | **Search** | Search market insights indicators by topic |
  | **Get Data** | Fetch chart data for a market insights indicator by ID |

  ## Example workflow

  1. Add a **Statista API** node.
  2. Select **Resource → Statistics**, **Operation → Search**.
  3. Set **Query** to `e.g. electric vehicles`.
  4. Connect a second **Statista API** node with **Operation → Get Data** and pass a statistic ID from the search results.

  ## Resources

  - [Statista API reference](https://docs.platform.statista.ai/api-reference/introduction)
  - [Statista platform](https://platform.statista.ai/)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This node connects n8n workflows to the Statista REST API. It lets you search and retrieve statistics, consumer insights, and market insights from Statista.","capabilities":["Search statistics by natural language or keywords","Retrieve full chart data for a statistic by ID","Search survey questions and answers by topic","Fetch cross-tabulated survey data for question/answer IDs","Search market insights indicators by topic","Fetch chart data for a market insights indicator by ID"],"authentication":"API key required via Statista API credentials","commonUseCases":["Finding relevant statistics or market insights from a topic query","Pulling chart or survey data into an n8n workflow for analysis or reporting","Looking up Statista IDs in one step and retrieving the underlying data in another"],"limitations":["Requires a valid Statista API key","The credential test uses a lightweight statistics search, so access is dependent on search availability"],"relatedNodes":[]}


