# nodes

node_type: n8n-nodes-lumifyhub.lumifyhub
package_name: n8n-nodes-lumifyhub
display_name: LumifyHub
description: Create and manage pages and databases in LumifyHub workspace
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: lumifyhub
author_github_url: https://github.com/LumifyHub-io/
npm_package_name: n8n-nodes-lumifyhub
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:33.766Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "page",
      "options": [
        {
          "name": "Page",
          "value": "page"
        },
        {
          "name": "Database",
          "value": "database"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new page",
          "routing": {
            "request": {
              "url": "/integrations/pages",
              "method": "POST"
            }
          },
          "description": "Create a new page in your LumifyHub workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createRow",
      "options": [
        {
          "name": "Create Row",
          "value": "createRow",
          "action": "Create a database row",
          "routing": {
            "request": {
              "url": "=/integrations/databases/{{$parameter[\"database_id\"]}}/rows",
              "method": "POST"
            }
          },
          "description": "Create a new row in a database"
        },
        {
          "name": "Delete Row",
          "value": "deleteRow",
          "action": "Delete a database row",
          "routing": {
            "request": {
              "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a row by ID"
        },
        {
          "name": "Get Row",
          "value": "getRow",
          "action": "Get a database row",
          "routing": {
            "request": {
              "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a single row by ID"
        },
        {
          "name": "Get Rows",
          "value": "getRows",
          "action": "Get all database rows",
          "routing": {
            "request": {
              "url": "=/integrations/databases/{{$parameter[\"database_id\"]}}/rows",
              "method": "GET"
            }
          },
          "description": "Get all rows from a database"
        },
        {
          "name": "Update Row",
          "value": "updateRow",
          "action": "Update a database row",
          "routing": {
            "request": {
              "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing row by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "database"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new page",
      "routing": {
        "request": {
          "url": "/integrations/pages",
          "method": "POST"
        }
      },
      "description": "Create a new page in your LumifyHub workspace",
      "resource": "page"
    },
    {
      "name": "Create Row",
      "value": "createRow",
      "action": "Create a database row",
      "routing": {
        "request": {
          "url": "=/integrations/databases/{{$parameter[\"database_id\"]}}/rows",
          "method": "POST"
        }
      },
      "description": "Create a new row in a database",
      "resource": "database"
    },
    {
      "name": "Delete Row",
      "value": "deleteRow",
      "action": "Delete a database row",
      "routing": {
        "request": {
          "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a row by ID",
      "resource": "database"
    },
    {
      "name": "Get Row",
      "value": "getRow",
      "action": "Get a database row",
      "routing": {
        "request": {
          "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a single row by ID",
      "resource": "database"
    },
    {
      "name": "Get Rows",
      "value": "getRows",
      "action": "Get all database rows",
      "routing": {
        "request": {
          "url": "=/integrations/databases/{{$parameter[\"database_id\"]}}/rows",
          "method": "GET"
        }
      },
      "description": "Get all rows from a database",
      "resource": "database"
    },
    {
      "name": "Update Row",
      "value": "updateRow",
      "action": "Update a database row",
      "routing": {
        "request": {
          "url": "=/integrations/rows/{{$parameter[\"row_id\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing row by ID",
      "resource": "database"
    }
  ]

npm_readme:
  # n8n-nodes-lumifyhub

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

  LumifyHub is a collaborative workspace platform for creating and managing pages, notes, databases, and knowledge bases with your team.

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

  [Installation](#installation) •
  [Operations](#operations) •
  [Credentials](#credentials) •
  [Compatibility](#compatibility) •
  [Usage](#usage) •
  [Example Workflows](#example-workflows) •
  [Troubleshooting](#troubleshooting) •
  [Resources](#resources)

  ## Installation

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

  ### Community Installation

  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Select **Install** and enter `n8n-nodes-lumifyhub`
  3. Agree to the risks and select **Install**
  4. The node will appear in your nodes panel

  ### Manual Installation

  To install manually using npm:

  ```bash
  npm install n8n-nodes-lumifyhub
  ```

  ## Operations

  ### Page Resource

  - **Create**: Create a new page in your LumifyHub workspace

  ### Database Resource

  - **Create Row**: Create a new row in a database with dynamic property fields
  - **Get Rows**: Get all rows from a database data source
  - **Get Row**: Get a single row by ID
  - **Update Row**: Update an existing row's properties
  - **Delete Row**: Delete a row by ID

  ## Credentials

  To use this node, you need to create API credentials in your LumifyHub workspace:

  ### Prerequisites

  1. Have an active LumifyHub account at [lumifyhub.io](https://lumifyhub.io)
  2. Be an owner of a workspace (only workspace owners can generate API keys)

  ### Setup Instructions

  1. Log in to your LumifyHub account
  2. Navigate to your workspace settings
  3. Go to the **Integrations** tab
  4. Click **Generate API Key**
  5. (Optional) Give your API key a descriptive name (e.g., "n8n Integration")
  6. Copy the generated API key - **you won't be able to see it again**

  ### Configuring in n8n

  1. In n8n, create a new credential of type **Lumifyhub API**
  2. Paste your API key into the **API Key** field
  3. (Optional) For local development, change the **Base URL** to `http://localhost:3001/api/v1`
  4. Save the credential

  **Notes**:

  - The workspace ID is automatically determined from your API key, so you don't need to provide it separately
  - The Base URL defaults to production (`https://lumifyhub.io/api/v1`) but can be changed for local development or self-hosted instances

  ## Compatibility

  - Minimum n8n version: `1.0.0`
  - Tested against n8n versions: `1.0.0+`

  ## Usage

  ### Creating a Page

  The **Create Page** operation allows you to create new pages in your LumifyHub workspace from any workflow.

  #### Required Fields

  - **Title**: The title of the page (max 255 characters)

  #### Optional Fields

  - **Content**: The content of the page (plain text, max 1MB)
  - **Parent Page ID**: Create the page as a child of another page (leave empty for root-level)
  - **Icon**: An emoji icon for the page (e.g., 📄, 📝, 💡)
  - **Cover Image URL**: A URL to an image to use as the page cover

  #### Dynamic Data

  You can use n8n's expression system to inject data from previous nodes:

  ```
  Title: {{$json["subject"]}}
  Content: {{$json["body"]}}
  ```

  ## Local Development Testing

  If you're testing against a local LumifyHub development server:

  1. Start your local LumifyHub server: `npm run dev` (typically runs on `http://localhost:3001`)
  2. Generate an API key from your local instance's workspace settings
  3. In n8n credentials, set:
     - **API Key**: Your local API key
     - **Base URL**: `http://localhost:3001/api/v1`
  4. Test the Create Page operation

  This allows you to develop and test n8n workflows against your local LumifyHub instance before deploying to production.

  ## Example Workflows

  ### 1. Email to LumifyHub

  Automatically create pages from incoming emails:

  1. **Email Trigger** - Receives emails
  2. **Lumifyhub** - Creates page with:
     - Title: `{{$json["subject"]}}`
     - Content: `{{$json["text"]}}`

  ### 2. Slack to LumifyHub

  Save important Slack messages as pages:

  1. **Slack Trigger** - New message in channel
  2. **Filter** - Only messages with specific reaction
  3. **Lumifyhub** - Creates page with:
     - Title: `Slack: {{$json["user"]}} - {{$json["ts"]}}`
     - Content: `{{$json["text"]}}`
     - Icon: 💬

  ### 3. Webhook to LumifyHub

  Create pages from external form submissions:

  1. **Webhook Trigger** - Receives form data
  2. **Lumifyhub** - Creates page with:
     - Title: `{{$json["form_title"]}}`
     - Content: `{{$json["form_content"]}}`
     - Parent Page ID: `{{$json["project_id"]}}`

  ### 4. RSS to Knowledge Base

  Automatically save RSS feed items:

  1. **RSS Read** - Fetch RSS feed
  2. **Lumifyhub** - For each item, create page with:
     - Title: `{{$json["title"]}}`
     - Content: `{{$json["content"]}}\n\nSource: {{$json["link"]}}`

  ## Troubleshooting

  ### Authentication Failed

  **Error**: `Authentication failed: Invalid API key`

  **Solutions**:

  - Verify your API key is correct (no extra spaces)
  - Check that the API key hasn't been revoked
  - Ensure you're using the correct workspace
  - Regenerate a new API key if needed

  ### Page Creation Failed

  **Error**: `Failed to create page: Invalid parent_page_id`

  **Solutions**:

  - Verify the parent page ID exists and belongs to your workspace
  - Leave parent_page_id empty to create a root-level page
  - Ensure you have permission to create pages in this workspace

  **Error**: `Failed to create page: Title is required`

  **Solutions**:

  - Ensure the Title field is not empty
  - Check that your expression is evaluating to a string
  - Verify the data from previous nodes is available

  ### Content Too Large

  **Error**: `Content exceeds maximum size of 1MB`

  **Solutions**:

  - Reduce the content size
  - Split content across multiple pages
  - Consider storing large content externally and linking to it

  ### Rate Limiting

  **Error**: `Too many requests`

  **Solutions**:

  - Add a delay between requests using the Wait node
  - Reduce workflow execution frequency
  - Contact LumifyHub support for higher rate limits

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [LumifyHub n8n Integration Guide](https://lumifyhub.io/n8n-docs)
  - [LumifyHub API Documentation](https://docs.lumifyhub.io/api)
  - [Report issues](https://github.com/lumifyhub/n8n-nodes-lumifyhub/issues)

  ## Version History

  ### 0.1.2 (Database Operations)

  - ✨ Create, read, update, and delete database rows
  - 🔄 Dynamic property fields based on database schema
  - 🎯 Automatic type conversion and validation
  - 🔍 Get all rows from a data source
  - 📋 Support for all property types (text, number, select, date, etc.)

  ### 0.1.0 (Initial Release)

  - ✨ Create pages in LumifyHub workspaces
  - 🔑 API key authentication
  - 📝 Plain text content support
  - 🎨 Icon and cover image support
  - 📂 Parent page support for nested pages

  ## License

  MIT

  ## Support

  For issues, questions, or feature requests:

  - GitHub Issues: [n8n-nodes-lumifyhub/issues](https://github.com/lumifyhub/n8n-nodes-lumifyhub/issues)
  - Email: support@lumifyhub.io
  - Documentation: [lumifyhub.io/n8n-docs](https://lumifyhub.io/n8n-docs)

ai_documentation_summary:
  {"purpose":"Integrates LumifyHub, a collaborative workspace platform, into n8n workflows to create and manage pages, notes, databases, and knowledge bases.","capabilities":["Create new pages with title, content, icon, and cover image","Create new rows in databases with dynamic property fields","Retrieve all rows from a database data source","Retrieve a single row by ID","Update existing row properties","Delete rows by ID","Support for hierarchical page creation via Parent Page ID"],"authentication":"API key required","commonUseCases":["Automatically create pages from incoming emails","Save important Slack messages as knowledge base pages","Create pages from external form submissions via webhooks","Automatically save RSS feed items to a knowledge base"],"limitations":["Page content is limited to a maximum size of 1MB","Only workspace owners can generate API keys for authentication","Parent page ID must exist and belong to the same workspace","Title field is mandatory for page creation"],"relatedNodes":["n8n-nodes-email","n8n-nodes-slack","n8n-nodes-webhook","n8n-nodes-rss"]}


node_type: n8n-nodes-wcrm.wcrm
package_name: n8n-nodes-wcrm
display_name: wCRM
description: Send messages via wCRM WhatsApp Cloud API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: srlines
author_github_url: https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM.git
npm_package_name: n8n-nodes-wcrm
npm_version: 1.0.28
community_fetched_at: 2026-07-14T14:40:33.768Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message",
          "description": "Send a WhatsApp message"
        },
        {
          "name": "Message Store",
          "value": "messageStore",
          "description": "Manage stored incoming messages for chatbot reference"
        },
        {
          "name": "Template",
          "value": "template",
          "description": "Send a WhatsApp template message"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Send Audio",
          "value": "sendAudio",
          "action": "Send an audio message",
          "description": "Send an audio message"
        },
        {
          "name": "Send Document",
          "value": "sendDocument",
          "action": "Send a document message",
          "description": "Send a document message"
        },
        {
          "name": "Send Image",
          "value": "sendImage",
          "action": "Send an image message",
          "description": "Send an image message"
        },
        {
          "name": "Send Interactive Buttons",
          "value": "sendInteractiveButtons",
          "action": "Send an interactive button message",
          "description": "Send an interactive button message"
        },
        {
          "name": "Send Interactive List",
          "value": "sendInteractiveList",
          "action": "Send an interactive list message",
          "description": "Send an interactive list message"
        },
        {
          "name": "Send Text",
          "value": "sendText",
          "action": "Send a text message",
          "description": "Send a text message"
        },
        {
          "name": "Send Video",
          "value": "sendVideo",
          "action": "Send a video message",
          "description": "Send a video message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendTemplate",
      "options": [
        {
          "name": "Send Template",
          "value": "sendTemplate",
          "action": "Send a template message",
          "description": "Send a template message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllMessages",
      "options": [
        {
          "name": "Clear Messages",
          "value": "clearMessages",
          "action": "Clear all stored messages",
          "description": "Clear all stored messages"
        },
        {
          "name": "Get All Messages",
          "value": "getAllMessages",
          "action": "Retrieve all stored messages",
          "description": "Retrieve all stored incoming messages"
        },
        {
          "name": "Get Messages by Phone",
          "value": "getMessagesByPhone",
          "action": "Get messages by phone number",
          "description": "Retrieve stored messages filtered by sender phone number"
        },
        {
          "name": "Save Message",
          "value": "saveMessage",
          "action": "Save a message to the store",
          "description": "Manually save a message payload to the internal store"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "messageStore"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Audio",
      "value": "sendAudio",
      "action": "Send an audio message",
      "description": "Send an audio message",
      "resource": "message"
    },
    {
      "name": "Send Document",
      "value": "sendDocument",
      "action": "Send a document message",
      "description": "Send a document message",
      "resource": "message"
    },
    {
      "name": "Send Image",
      "value": "sendImage",
      "action": "Send an image message",
      "description": "Send an image message",
      "resource": "message"
    },
    {
      "name": "Send Interactive Buttons",
      "value": "sendInteractiveButtons",
      "action": "Send an interactive button message",
      "description": "Send an interactive button message",
      "resource": "message"
    },
    {
      "name": "Send Interactive List",
      "value": "sendInteractiveList",
      "action": "Send an interactive list message",
      "description": "Send an interactive list message",
      "resource": "message"
    },
    {
      "name": "Send Text",
      "value": "sendText",
      "action": "Send a text message",
      "description": "Send a text message",
      "resource": "message"
    },
    {
      "name": "Send Video",
      "value": "sendVideo",
      "action": "Send a video message",
      "description": "Send a video message",
      "resource": "message"
    },
    {
      "name": "Send Template",
      "value": "sendTemplate",
      "action": "Send a template message",
      "description": "Send a template message",
      "resource": "template"
    },
    {
      "name": "Clear Messages",
      "value": "clearMessages",
      "action": "Clear all stored messages",
      "description": "Clear all stored messages",
      "resource": "messageStore"
    },
    {
      "name": "Get All Messages",
      "value": "getAllMessages",
      "action": "Retrieve all stored messages",
      "description": "Retrieve all stored incoming messages",
      "resource": "messageStore"
    },
    {
      "name": "Get Messages by Phone",
      "value": "getMessagesByPhone",
      "action": "Get messages by phone number",
      "description": "Retrieve stored messages filtered by sender phone number",
      "resource": "messageStore"
    },
    {
      "name": "Save Message",
      "value": "saveMessage",
      "action": "Save a message to the store",
      "description": "Manually save a message payload to the internal store",
      "resource": "messageStore"
    }
  ]

npm_readme:
  # n8n-nodes-wcrm

  This is an n8n community node for the **wCRM WhatsApp Cloud API**. It allows you to send and receive WhatsApp messages directly from your n8n workflows, build complex AI-powered chatbots, and manage conversation history — making it a comprehensive alternative to the official WhatsApp API node.

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

  ## Documentation & Support

  - **wCRM Application/API Base URL:** https://crm.srlines.net
  - **Package Documentation (this README):** https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM#readme
  - **Main Website:** https://srlines.net
  - **Support Email:** contact@srlines.net
  - **WhatsApp Support:** +92 333 9776136

  > Note: This package only integrates with the existing `crm.srlines.net` service.

  ## Features

  - **Send Messages** — Text, Image, Audio, Document, Video, Interactive Lists, Interactive Buttons
  - **Send Templates** — Pre-approved WhatsApp template messages with variable substitution and media
  - **Receive Incoming Messages** — Webhook trigger node to capture all incoming WhatsApp messages in real time
  - **Internal Message Store** — Save, retrieve, filter, and clear incoming message payloads for chatbot context and conversation history
  - **Chatbot Ready** — Designed for complex chatbot workflows with OpenAI, database queries, catalog integrations, and more

  ## Installation

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

  1. Go to **Settings > Community Nodes** in your n8n instance.
  2. Select **Install**.
  3. Enter `n8n-nodes-wcrm` in the **Enter npm package name** field.
  4. Agree to the risks of using community nodes and select **Install**.

  ## Credentials

  To use this node you need a **wCRM API Key**.

  1. In n8n, go to **Credentials** and create a new credential of type **wCRM API**.
  2. Enter your **API Key** obtained from your wCRM dashboard.
  3. Save the credential.

  This single API Key is used to authenticate all requests to the wCRM API.

  ### Incoming Messages — Callback URI Setup

  The wCRM platform forwards all incoming WhatsApp message payloads to your n8n webhook URL.

  - **If you are using the SRLINES n8n instance**, your callback URI is already configured — no action needed.
  - **If you are self-hosting n8n**, copy your wCRM Trigger webhook URL from the active workflow and provide it to **SRLINES support** so they can configure it in your wCRM account.

  ## Nodes

  This package includes two nodes:

  | Node | Type | Description |
  |---|---|---|
  | **wCRM** | Action | Send messages, templates, and manage the internal message store |
  | **wCRM Trigger** | Trigger | Receives incoming WhatsApp messages via webhook |

  ## Operations

  ### Message (Send)

  Send WhatsApp messages of various types:

  | Operation | Description |
  |---|---|
  | **Send Text** | Send a plain text message with optional URL preview |
  | **Send Image** | Send an image by providing a URL |
  | **Send Audio** | Send an audio file by providing a URL |
  | **Send Document** | Send a document with an optional caption |
  | **Send Video** | Send a video with an optional caption |
  | **Send Interactive List** | Send an interactive list message with sections and rows |
  | **Send Interactive Buttons** | Send an interactive button message with reply buttons |

  ### Template (Send)

  | Operation | Description |
  |---|---|
  | **Send Template** | Send a pre-approved WhatsApp template message with variable substitution and optional media |

  ### Message Store

  Manage stored incoming messages for chatbot context and conversation history:

  | Operation | Description |
  |---|---|
  | **Get All Messages** | Retrieve all stored incoming messages |
  | **Get Messages by Phone** | Retrieve messages filtered by sender phone number |
  | **Save Message** | Manually save a message payload to the internal store |
  | **Clear Messages** | Clear all stored messages |

  ## Usage

  ### Receiving Incoming Messages (wCRM Trigger)

  1. Add the **wCRM Trigger** node to your workflow as the starting node.
  2. Configure your wCRM API credentials.
  3. Activate the workflow — n8n generates a webhook URL.
  4. If self-hosting, provide the webhook URL to SRLINES support for callback configuration.
  5. Incoming WhatsApp messages will now trigger your workflow with the full message payload.

  The trigger node outputs:
  - `body` — The raw incoming message payload from WhatsApp
  - `from` — Sender's phone number
  - `messageType` — Type of message (text, image, audio, etc.)
  - `textBody` — The text content (for text messages)
  - `timestamp` — Message timestamp
  - `headers` — HTTP headers from the webhook request

  The trigger node can also **automatically store** incoming messages in the workflow's internal data store (enabled by default) for later reference in chatbot conversations.

  ### Sending a Text Message

  1. Add the **wCRM** node to your workflow.
  2. Select **Message** as the Resource and **Send Text** as the Operation.
  3. Enter the recipient's phone number (with country code, e.g. `+1234567890`).
  4. Enter the message body text.
  5. Optionally enable URL preview.

  ### Sending Media (Image/Audio/Document/Video)

  1. Select the appropriate operation (Send Image, Send Audio, etc.).
  2. Enter the recipient's phone number.
  3. Provide the publicly accessible URL of the media file.
  4. For documents and videos, you can add an optional caption.

  ### Sending Interactive List

  1. Select **Send Interactive List** as the operation.
  2. Provide header text, body text, footer text, and button text.
  3. Define sections as JSON, for example:
  ```json
  [
    {
      "title": "Section 1",
      "rows": [
        {
          "id": "row_1",
          "title": "Option 1",
          "description": "Description for option 1"
        }
      ]
    }
  ]
  ```

  ### Sending Interactive Buttons

  1. Select **Send Interactive Buttons** as the operation.
  2. Provide the body text.
  3. Define buttons as JSON, for example:
  ```json
  [
    {
      "type": "reply",
      "reply": {
        "id": "btn_yes",
        "title": "Yes"
      }
    },
    {
      "type": "reply",
      "reply": {
        "id": "btn_no",
        "title": "No"
      }
    }
  ]
  ```

  ### Sending a Template Message

  1. Select **Template** as the Resource and **Send Template** as the Operation.
  2. Enter the recipient's phone number.
  3. Enter the template name as configured in your WhatsApp Business account.
  4. Provide template variables as a JSON array (e.g. `["John", "Order #123"]`).
  5. Optionally provide a media URI to attach media to the template.

  ### Using the Message Store

  The internal message store allows you to save and reference past messages within your chatbot workflows:

  1. **Auto-storage via Trigger** — Enable "Store Incoming Messages" on the wCRM Trigger node to automatically save all incoming messages.
  2. **Manual save** — Use the wCRM node with Resource: **Message Store** → Operation: **Save Message** to save any message payload.
  3. **Retrieve all** — Use **Get All Messages** to fetch the complete conversation history.
  4. **Filter by phone** — Use **Get Messages by Phone** to get messages from a specific sender.
  5. **Clear** — Use **Clear Messages** to reset the store.

  ## Building Complex Chatbot Workflows

  The wCRM node is designed for building sophisticated WhatsApp chatbots. Here are common patterns:

  ### AI-Powered Chatbot (with OpenAI)

  ```
  [wCRM Trigger] → [wCRM: Get Messages by Phone] → [OpenAI] → [wCRM: Send Text]
  ```

  1. **wCRM Trigger** receives the incoming message.
  2. **wCRM (Message Store: Get Messages by Phone)** retrieves conversation history for that sender.
  3. Pass the incoming message + conversation history to an **OpenAI** node as context.
  4. **wCRM (Send Text)** sends the AI-generated response back to the user.

  ### Catalog / Database Lookup Bot

  ```
  [wCRM Trigger] → [IF: Check Message Type] → [Database/HTTP Node] → [OpenAI] → [wCRM: Send Text/Image/Document]
  ```

  1. **wCRM Trigger** receives the incoming query from the customer.
  2. **IF node** checks the message type or content to determine intent.
  3. Query your **database** (MySQL, PostgreSQL, etc.) or **HTTP Request** node to fetch product catalog, order status, etc.
  4. Merge the query results with the customer question and send to **OpenAI** for a natural language response.
  5. **wCRM** sends the response back — as text, image, document, or interactive list depending on the content.

  ### Interactive Menu Bot

  ```
  [wCRM Trigger] → [Switch] → [wCRM: Send Interactive List/Buttons] → [wCRM Trigger] → [Process Selection]
  ```

  1. Send an interactive list or button message to present options.
  2. When the user selects an option, the trigger receives the selection.
  3. Process the selection (query database, call API, generate AI response, etc.).
  4. Reply with the result or present further options.

  ### Multi-Step Workflow with Message History

  ```
  [wCRM Trigger] → [wCRM: Save Message] → [wCRM: Get Messages by Phone] → [Code/Function] → [OpenAI] → [wCRM: Send Text]
  ```

  1. Save each incoming message to the store for context.
  2. Retrieve full conversation history for the sender.
  3. Use a **Code** or **Function** node to format the conversation as a prompt.
  4. Send to **OpenAI** with full context for an informed response.
  5. Reply via wCRM.

  ### Key Tips for Chatbot Workflows

  - **Use the Message Store** to maintain conversation context across multiple interactions.
  - **Combine with n8n's built-in nodes** — IF, Switch, Merge, Code, HTTP Request, database nodes.
  - **Chain with OpenAI/AI nodes** for intelligent, context-aware responses.
  - **Use Interactive Lists and Buttons** for structured user input (menus, confirmations, selections).
  - **Use Templates** for standardized messages (order confirmations, appointment reminders, etc.).
  - **Reference old messages** via the Message Store to provide contextual responses.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables sending and receiving WhatsApp messages via the wCRM WhatsApp Cloud API, allowing users to build AI-powered chatbots and manage conversation history within n8n workflows.","capabilities":["Send text messages with optional URL previews","Send images, audio, documents, and videos via public URLs","Send interactive list messages with sections and rows","Send interactive button messages with reply buttons","Send pre-approved WhatsApp template messages with variable substitution","Receive incoming WhatsApp messages via webhook trigger","Store, retrieve, filter, and clear incoming message payloads for chatbot context","Manage conversation history for complex chatbot workflows"],"authentication":"API key required","commonUseCases":["Building AI-powered chatbots with OpenAI integration","Automating customer support responses via WhatsApp","Sending marketing templates and media to customers","Managing conversation history for context-aware responses","Integrating WhatsApp messaging with database queries and catalogs"],"limitations":["Only integrates with the existing crm.srlines.net service","Requires self-hosted n8n users to provide their webhook URL to SRLINES support for callback configuration","Media files must be hosted at publicly accessible URLs"],"relatedNodes":["n8n-nodes-openai","n8n-nodes-weather","n8n-nodes-sql","n8n-nodes-ftp"]}


node_type: n8n-nodes-wcrm.wcrmTrigger
package_name: n8n-nodes-wcrm
display_name: wCRM Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: srlines
author_github_url: https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM.git
npm_package_name: n8n-nodes-wcrm
npm_version: 1.0.28
community_fetched_at: 2026-07-14T14:40:33.769Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Receives incoming WhatsApp messages forwarded by wCRM via webhook. Use this as the starting point for chatbot workflows.

npm_readme:
  # n8n-nodes-wcrm

  This is an n8n community node for the **wCRM WhatsApp Cloud API**. It allows you to send and receive WhatsApp messages directly from your n8n workflows, build complex AI-powered chatbots, and manage conversation history — making it a comprehensive alternative to the official WhatsApp API node.

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

  ## Documentation & Support

  - **wCRM Application/API Base URL:** https://crm.srlines.net
  - **Package Documentation (this README):** https://github.com/srlinessoftwarehouse/n8n-community-node-for-wCRM#readme
  - **Main Website:** https://srlines.net
  - **Support Email:** contact@srlines.net
  - **WhatsApp Support:** +92 333 9776136

  > Note: This package only integrates with the existing `crm.srlines.net` service.

  ## Features

  - **Send Messages** — Text, Image, Audio, Document, Video, Interactive Lists, Interactive Buttons
  - **Send Templates** — Pre-approved WhatsApp template messages with variable substitution and media
  - **Receive Incoming Messages** — Webhook trigger node to capture all incoming WhatsApp messages in real time
  - **Internal Message Store** — Save, retrieve, filter, and clear incoming message payloads for chatbot context and conversation history
  - **Chatbot Ready** — Designed for complex chatbot workflows with OpenAI, database queries, catalog integrations, and more

  ## Installation

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

  1. Go to **Settings > Community Nodes** in your n8n instance.
  2. Select **Install**.
  3. Enter `n8n-nodes-wcrm` in the **Enter npm package name** field.
  4. Agree to the risks of using community nodes and select **Install**.

  ## Credentials

  To use this node you need a **wCRM API Key**.

  1. In n8n, go to **Credentials** and create a new credential of type **wCRM API**.
  2. Enter your **API Key** obtained from your wCRM dashboard.
  3. Save the credential.

  This single API Key is used to authenticate all requests to the wCRM API.

  ### Incoming Messages — Callback URI Setup

  The wCRM platform forwards all incoming WhatsApp message payloads to your n8n webhook URL.

  - **If you are using the SRLINES n8n instance**, your callback URI is already configured — no action needed.
  - **If you are self-hosting n8n**, copy your wCRM Trigger webhook URL from the active workflow and provide it to **SRLINES support** so they can configure it in your wCRM account.

  ## Nodes

  This package includes two nodes:

  | Node | Type | Description |
  |---|---|---|
  | **wCRM** | Action | Send messages, templates, and manage the internal message store |
  | **wCRM Trigger** | Trigger | Receives incoming WhatsApp messages via webhook |

  ## Operations

  ### Message (Send)

  Send WhatsApp messages of various types:

  | Operation | Description |
  |---|---|
  | **Send Text** | Send a plain text message with optional URL preview |
  | **Send Image** | Send an image by providing a URL |
  | **Send Audio** | Send an audio file by providing a URL |
  | **Send Document** | Send a document with an optional caption |
  | **Send Video** | Send a video with an optional caption |
  | **Send Interactive List** | Send an interactive list message with sections and rows |
  | **Send Interactive Buttons** | Send an interactive button message with reply buttons |

  ### Template (Send)

  | Operation | Description |
  |---|---|
  | **Send Template** | Send a pre-approved WhatsApp template message with variable substitution and optional media |

  ### Message Store

  Manage stored incoming messages for chatbot context and conversation history:

  | Operation | Description |
  |---|---|
  | **Get All Messages** | Retrieve all stored incoming messages |
  | **Get Messages by Phone** | Retrieve messages filtered by sender phone number |
  | **Save Message** | Manually save a message payload to the internal store |
  | **Clear Messages** | Clear all stored messages |

  ## Usage

  ### Receiving Incoming Messages (wCRM Trigger)

  1. Add the **wCRM Trigger** node to your workflow as the starting node.
  2. Configure your wCRM API credentials.
  3. Activate the workflow — n8n generates a webhook URL.
  4. If self-hosting, provide the webhook URL to SRLINES support for callback configuration.
  5. Incoming WhatsApp messages will now trigger your workflow with the full message payload.

  The trigger node outputs:
  - `body` — The raw incoming message payload from WhatsApp
  - `from` — Sender's phone number
  - `messageType` — Type of message (text, image, audio, etc.)
  - `textBody` — The text content (for text messages)
  - `timestamp` — Message timestamp
  - `headers` — HTTP headers from the webhook request

  The trigger node can also **automatically store** incoming messages in the workflow's internal data store (enabled by default) for later reference in chatbot conversations.

  ### Sending a Text Message

  1. Add the **wCRM** node to your workflow.
  2. Select **Message** as the Resource and **Send Text** as the Operation.
  3. Enter the recipient's phone number (with country code, e.g. `+1234567890`).
  4. Enter the message body text.
  5. Optionally enable URL preview.

  ### Sending Media (Image/Audio/Document/Video)

  1. Select the appropriate operation (Send Image, Send Audio, etc.).
  2. Enter the recipient's phone number.
  3. Provide the publicly accessible URL of the media file.
  4. For documents and videos, you can add an optional caption.

  ### Sending Interactive List

  1. Select **Send Interactive List** as the operation.
  2. Provide header text, body text, footer text, and button text.
  3. Define sections as JSON, for example:
  ```json
  [
    {
      "title": "Section 1",
      "rows": [
        {
          "id": "row_1",
          "title": "Option 1",
          "description": "Description for option 1"
        }
      ]
    }
  ]
  ```

  ### Sending Interactive Buttons

  1. Select **Send Interactive Buttons** as the operation.
  2. Provide the body text.
  3. Define buttons as JSON, for example:
  ```json
  [
    {
      "type": "reply",
      "reply": {
        "id": "btn_yes",
        "title": "Yes"
      }
    },
    {
      "type": "reply",
      "reply": {
        "id": "btn_no",
        "title": "No"
      }
    }
  ]
  ```

  ### Sending a Template Message

  1. Select **Template** as the Resource and **Send Template** as the Operation.
  2. Enter the recipient's phone number.
  3. Enter the template name as configured in your WhatsApp Business account.
  4. Provide template variables as a JSON array (e.g. `["John", "Order #123"]`).
  5. Optionally provide a media URI to attach media to the template.

  ### Using the Message Store

  The internal message store allows you to save and reference past messages within your chatbot workflows:

  1. **Auto-storage via Trigger** — Enable "Store Incoming Messages" on the wCRM Trigger node to automatically save all incoming messages.
  2. **Manual save** — Use the wCRM node with Resource: **Message Store** → Operation: **Save Message** to save any message payload.
  3. **Retrieve all** — Use **Get All Messages** to fetch the complete conversation history.
  4. **Filter by phone** — Use **Get Messages by Phone** to get messages from a specific sender.
  5. **Clear** — Use **Clear Messages** to reset the store.

  ## Building Complex Chatbot Workflows

  The wCRM node is designed for building sophisticated WhatsApp chatbots. Here are common patterns:

  ### AI-Powered Chatbot (with OpenAI)

  ```
  [wCRM Trigger] → [wCRM: Get Messages by Phone] → [OpenAI] → [wCRM: Send Text]
  ```

  1. **wCRM Trigger** receives the incoming message.
  2. **wCRM (Message Store: Get Messages by Phone)** retrieves conversation history for that sender.
  3. Pass the incoming message + conversation history to an **OpenAI** node as context.
  4. **wCRM (Send Text)** sends the AI-generated response back to the user.

  ### Catalog / Database Lookup Bot

  ```
  [wCRM Trigger] → [IF: Check Message Type] → [Database/HTTP Node] → [OpenAI] → [wCRM: Send Text/Image/Document]
  ```

  1. **wCRM Trigger** receives the incoming query from the customer.
  2. **IF node** checks the message type or content to determine intent.
  3. Query your **database** (MySQL, PostgreSQL, etc.) or **HTTP Request** node to fetch product catalog, order status, etc.
  4. Merge the query results with the customer question and send to **OpenAI** for a natural language response.
  5. **wCRM** sends the response back — as text, image, document, or interactive list depending on the content.

  ### Interactive Menu Bot

  ```
  [wCRM Trigger] → [Switch] → [wCRM: Send Interactive List/Buttons] → [wCRM Trigger] → [Process Selection]
  ```

  1. Send an interactive list or button message to present options.
  2. When the user selects an option, the trigger receives the selection.
  3. Process the selection (query database, call API, generate AI response, etc.).
  4. Reply with the result or present further options.

  ### Multi-Step Workflow with Message History

  ```
  [wCRM Trigger] → [wCRM: Save Message] → [wCRM: Get Messages by Phone] → [Code/Function] → [OpenAI] → [wCRM: Send Text]
  ```

  1. Save each incoming message to the store for context.
  2. Retrieve full conversation history for the sender.
  3. Use a **Code** or **Function** node to format the conversation as a prompt.
  4. Send to **OpenAI** with full context for an informed response.
  5. Reply via wCRM.

  ### Key Tips for Chatbot Workflows

  - **Use the Message Store** to maintain conversation context across multiple interactions.
  - **Combine with n8n's built-in nodes** — IF, Switch, Merge, Code, HTTP Request, database nodes.
  - **Chain with OpenAI/AI nodes** for intelligent, context-aware responses.
  - **Use Interactive Lists and Buttons** for structured user input (menus, confirmations, selections).
  - **Use Templates** for standardized messages (order confirmations, appointment reminders, etc.).
  - **Reference old messages** via the Message Store to provide contextual responses.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The wCRM Trigger node serves as a webhook entry point to receive incoming WhatsApp messages forwarded by the wCRM platform, acting as the starting node for chatbot and automation workflows.","capabilities":["Receive incoming WhatsApp messages via webhook","Output raw message payload, sender phone number, message type, text body, and timestamp","Automatically store incoming messages in an internal data store for conversation history","Integrate with AI models and databases for complex chatbot logic"],"authentication":"API key required","commonUseCases":["Building AI-powered WhatsApp chatbots","Automating customer support responses","Processing incoming WhatsApp messages in real-time workflows","Maintaining conversation history for context-aware interactions"],"limitations":["Only integrates with the existing crm.srlines.net service","Self-hosted n8n instances require manual callback URI configuration via SRLINES support"],"relatedNodes":["wCRM","OpenAI","Database nodes"]}


node_type: @mivalabs/n8n-nodes-miva.miva
package_name: @mivalabs/n8n-nodes-miva
display_name: Miva
description: Interact with Miva eCommerce API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: nickmiva
author_github_url: https://github.com/mivaecommerce/n8n-nodes-miva.git
npm_package_name: @mivalabs/n8n-nodes-miva
npm_version: 1.0.7
community_fetched_at: 2026-07-14T14:40:33.770Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getProducts",
      "options": [
        {
          "name": "Acknowledge Orders",
          "value": "acknowledgeOrders",
          "action": "Acknowledge orders as received",
          "description": "Mark orders as received in the order workflow system"
        },
        {
          "name": "Adjust Inventory",
          "value": "adjustInventory",
          "action": "Adjust product inventory levels",
          "description": "Adjust product inventory levels"
        },
        {
          "name": "Create Returns",
          "value": "createReturns",
          "action": "Create RMA returns for order items",
          "description": "Create RMA returns for order items"
        },
        {
          "name": "Create Shipment",
          "value": "createShipment",
          "action": "Create a shipment",
          "description": "Create a shipment from order line items"
        },
        {
          "name": "Delete Product Image",
          "value": "deleteProductImage",
          "action": "Delete product image",
          "description": "Delete image from product"
        },
        {
          "name": "Get Customers",
          "value": "getCustomers",
          "action": "Get customer data",
          "description": "Retrieve customer data"
        },
        {
          "name": "Get Orders",
          "value": "getOrders",
          "action": "Get order data",
          "description": "Retrieve order data"
        },
        {
          "name": "Get Products",
          "value": "getProducts",
          "action": "Get product data",
          "description": "Retrieve product data"
        },
        {
          "name": "Insert Product",
          "value": "insertProduct",
          "action": "Create a new product",
          "description": "Create a new product"
        },
        {
          "name": "Mark Returns Received",
          "value": "markReturnsReceived",
          "action": "Mark returns as received",
          "description": "Mark returns as received and optionally adjust inventory"
        },
        {
          "name": "Report Low Inventory",
          "value": "reportLowInventory",
          "action": "Generate low inventory alert message",
          "description": "Generate low inventory alert message"
        },
        {
          "name": "Update Product",
          "value": "updateProduct",
          "action": "Update product details",
          "description": "Update product information"
        },
        {
          "name": "Update Shipments",
          "value": "updateShipments",
          "action": "Update shipments",
          "description": "Update shipment details and mark as shipped"
        },
        {
          "name": "Upload Images",
          "value": "uploadImages",
          "action": "Upload images to products",
          "description": "Upload images to products in bulk"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Acknowledge Orders",
      "value": "acknowledgeOrders",
      "action": "Acknowledge orders as received",
      "description": "Mark orders as received in the order workflow system"
    },
    {
      "name": "Adjust Inventory",
      "value": "adjustInventory",
      "action": "Adjust product inventory levels",
      "description": "Adjust product inventory levels"
    },
    {
      "name": "Create Returns",
      "value": "createReturns",
      "action": "Create RMA returns for order items",
      "description": "Create RMA returns for order items"
    },
    {
      "name": "Create Shipment",
      "value": "createShipment",
      "action": "Create a shipment",
      "description": "Create a shipment from order line items"
    },
    {
      "name": "Delete Product Image",
      "value": "deleteProductImage",
      "action": "Delete product image",
      "description": "Delete image from product"
    },
    {
      "name": "Get Customers",
      "value": "getCustomers",
      "action": "Get customer data",
      "description": "Retrieve customer data"
    },
    {
      "name": "Get Orders",
      "value": "getOrders",
      "action": "Get order data",
      "description": "Retrieve order data"
    },
    {
      "name": "Get Products",
      "value": "getProducts",
      "action": "Get product data",
      "description": "Retrieve product data"
    },
    {
      "name": "Insert Product",
      "value": "insertProduct",
      "action": "Create a new product",
      "description": "Create a new product"
    },
    {
      "name": "Mark Returns Received",
      "value": "markReturnsReceived",
      "action": "Mark returns as received",
      "description": "Mark returns as received and optionally adjust inventory"
    },
    {
      "name": "Report Low Inventory",
      "value": "reportLowInventory",
      "action": "Generate low inventory alert message",
      "description": "Generate low inventory alert message"
    },
    {
      "name": "Update Product",
      "value": "updateProduct",
      "action": "Update product details",
      "description": "Update product information"
    },
    {
      "name": "Update Shipments",
      "value": "updateShipments",
      "action": "Update shipments",
      "description": "Update shipment details and mark as shipped"
    },
    {
      "name": "Upload Images",
      "value": "uploadImages",
      "action": "Upload images to products",
      "description": "Upload images to products in bulk"
    }
  ]

npm_readme:
  # n8n-miva-connector

  n8n community node for integrating with Miva eCommerce platforms. Provides programmatic access to Miva's JSON API for managing products, orders, customers, inventory, and fulfillment operations within n8n workflows.

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

  ## Installation

  **Build the package files**
  ```bash
  cd n8n-connector
  npm install
  npm run build
  ```
  This installs dependencies and produces the distributable files that n8n loads. The build script clears `dist/`, compiles TypeScript to JavaScript, and runs the icon build task so the node metadata is ready for packaging. The output is written to `dist/`, which is the only folder published by this package.

  **Use the package with n8n (local development)**
  ```bash
  npm link
  ```
  `npm link` makes the package available globally for local development. In your n8n installation, run `npm link n8n-nodes-miva` so n8n resolves this node from your local build. Re-run `npm run build` after code changes to refresh the `dist/` artifacts, then restart n8n to pick up the latest build.

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation for other ways to use the package file.

  ## Operations

  ### Data Retrieval
  - **Get Products**: Retrieve product information with field selection and pagination
  - **Get Orders**: Access order data with item flattening and field filtering
  - **Get Customers**: Retrieve customer information and account data

  ### Inventory Management
  - **Adjust Inventory**: Update product inventory levels in bulk
  - **Report Low Inventory**: Generate low stock alerts

  ### Order Processing
  - **Create Returns**: Create RMA returns for order items
  - **Create Shipment**: Generate shipments from order line items
  - **Update Shipments**: Modify shipment details and tracking
  - **Mark Returns Received**: Process returned items and adjust inventory
  - **Acknowledge Orders**: Mark orders as acknowledged

  ### Product Management
  - **Insert Product**: Create new products
  - **Update Product**: Modify existing product data

  ### Media Management
  - **Upload Images**: Upload images to products from URLs
  - **Delete Product Image**: Remove images from products

  ## Project Structure

  ```
  miva-n8n-connector/
  ├── credentials/
  │   └── MivaApi.credentials.ts           # API authentication
  ├── nodes/Miva/                          # Main node implementation
  │   ├── Miva.node.ts                     # Entry point & operation routing
  │   ├── Miva.node.json                   # Node metadata
  │   ├── index.ts                         # Module export
  │   ├── miva.svg                         # Node icon
  │   ├── operations/                      # Business logic implementation
  │   │   ├── getProducts.ts               # Product retrieval
  │   │   ├── getOrders.ts                 # Order retrieval with flattening
  │   │   ├── getCustomers.ts              # Customer retrieval
  │   │   ├── adjustInventory.ts           # Bulk inventory adjustments
  │   │   ├── reportLowInventory.ts        # Alert generation
  │   │   ├── createReturns.ts             # RMA return creation
  │   │   ├── createShipment.ts            # Shipment creation
  │   │   ├── updateShipments.ts           # Shipment updates
  │   │   ├── markReturnsReceived.ts       # Return processing
  │   │   ├── acknowledgeOrders.ts         # Order acknowledgment
  │   │   ├── insertProduct.ts             # Product creation
  │   │   ├── updateProduct.ts             # Product updates
  │   │   ├── uploadImages.ts              # Bulk image uploads
  │   │   ├── deleteProductImage.ts        # Image deletion
  │   │   └── index.ts                     # Operation exports
  │   ├── parameters/                      # UI parameter definitions
  │   │   ├── common.ts                    # Shared parameters
  │   │   ├── productFields.ts             # Product field options
  │   │   ├── orderFields.ts               # Order field options
  │   │   ├── customerFields.ts            # Customer field options
  │   │   └── index.ts                     # Parameter exports
  │   ├── transport/                       # API communication layer
  │   │   └── index.ts                     # HTTP client & transformers
  │   ├── utils/                           # Shared utilities
  │   │   ├── index.ts                     # Field matching & validation
  │   │   └── paginationUtils.ts           # Pagination helpers
  │   └── types/                           # TypeScript definitions
  │       └── index.ts                     # Interfaces & types
  ├── ARCHITECTURE.md                       # Technical architecture details
  └── package.json                          # Dependencies & n8n registration
  ```

  ## Architecture

  The node follows a layered architecture:

  - **Presentation Layer**: UI parameters and field selection
  - **Orchestration Layer**: Operation routing and execution coordination
  - **Business Logic Layer**: Core operation implementations
  - **Transport Layer**: API communication and response transformation
  - **Utility Layer**: Shared helper functions and validation

  ### Processing Patterns

  **Batch Operations**: Process multiple input items in single API calls
  - `getOrders`, `adjustInventory`, `createReturns`, `createShipment`, `updateShipments`, `markReturnsReceived`, `acknowledgeOrders`, `reportLowInventory`

  **Individual Operations**: Process each input item separately
  - `getProducts`, `getCustomers`, `uploadImages`, `deleteProductImage`, `updateProduct`, `insertProduct`

  ### API Integration

  - **Authentication**: HMAC-SHA256 with base64-encoded signing key
  - **Request Format**: POST requests with JSON body and timestamp
  - **Response Handling**: Automatic transformation from Miva's nested structure to flat objects
  - **Field Optimization**: Dynamic ondemand column filtering for performance

  ## Credentials

  ### Required Configuration
  1. **API Token**: Your store's API authorization token
  2. **Base URL**: Your Miva store's API endpoint (e.g., `https://yourstore.com/mm5/json.mvc`)
  3. **Signing Key**: Base64-encoded HMAC signing key for secure communication

  ### Security Features
  - All API requests use HMAC-SHA256 authentication
  - Credentials stored in n8n's encrypted credential system
  - No credential information logged or exposed in error messages

  ## Usage Examples

  ### Basic Product Retrieval
  ```
  Miva: Get Products
  ├── Store Code: your_store
  ├── Count: 100
  ├── Return Fields: product_code, product_name, product_inventory
  └── Include Custom Fields: false
  ```

  ### Order Processing with Item Flattening
  ```
  Miva: Get Orders
  ├── Store Code: your_store
  ├── Count: 50
  ├── Return Fields: id, total, customer, items
  ├── Order Item Fields: product_code, quantity, price
  └── Flatten Items: true
  ```

  ### Bulk Inventory Adjustment
  ```
  Miva: Adjust Inventory
  ├── Store Code: your_store
  ├── Product Identifier Type: product_sku
  ├── Product Identifier Field: sku
  └── Adjustment Field: adjustment_amount
  ```

  ### Image Upload
  ```
  Miva: Upload Images
  ├── Store Code: your_store
  ├── Product Identifier Type: product_code
  ├── Product Identifier Field: product_code
  ├── Image URL Field: image_url
  └── File Path Template: graphics/products/{product_code}/{filename}
  ```

  ## Field Selection

  The node supports dynamic field selection to optimize API performance:

  **Product Fields**: Basic fields like `product_code`, `product_name`, `product_inventory`
  **Order Fields**: Order data including `id`, `total`, `customer`, `items`
  **Customer Fields**: Customer information and account data

  **Ondemand Fields**: Automatically detected and optimized for performance
  - Products: `descrip`, `catcount`, `url`, `product_inventory`, `attributes`
  - Orders: `ship_method`, `cust_login`, `parts`, `items`, `charges`

  ## Error Handling

  - **Continue on Fail**: Support for n8n's continue-on-fail mode
  - **Validation**: Input parameter validation with helpful error messages
  - **API Errors**: Proper handling of Miva API error responses
  - **Context Preservation**: Error messages include operation context and item index

  ## Performance Considerations

  - **Pagination**: Built-in support for large datasets (up to 10,000 records per request)
  - **Field Filtering**: Response transformation filters unused fields
  - **Batch Processing**: Multiple operations batch data for efficiency
  - **Memory Management**: No retention of large response objects between operations

  ## Development

  ### Building
  ```bash
  npm run build
  ```

  ### Testing
  ```bash
  npm run lint
  npm run format
  ```

  ### TypeScript
  The project uses TypeScript with strict type checking and comprehensive interfaces for all API operations.

  ## Resources

  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Miva JSON API Documentation](https://docs.miva.com/developer/developer-resources/json-api/api-getting-started/)
  * [Project Architecture Documentation](ARCHITECTURE.md)

  ## Version History

  ### v1.0.0
  - Initial stable release

  ### v0.1.0
  - Complete Miva API integration with 14 core operations
  - HMAC-SHA256 authentication for all API requests
  - Support for products, orders, customers, inventory, and media management
  - Advanced features: order flattening, field selection, batch processing
  - Comprehensive error handling and validation
  - Performance optimizations with ondemand column support

  ---

  **Note**: This is a community-maintained node. For issues, feature requests, or contributions, please visit the [GitHub repository](https://github.com/mivaecommerce/n8n-nodes-miva).

ai_documentation_summary:
  {"purpose":"Enables n8n workflows to interact with Miva eCommerce platforms via their JSON API for managing products, orders, customers, and inventory operations.","capabilities":["Retrieve products with field selection and pagination","Access order data with item flattening and filtering","Retrieve customer information and account data","Adjust product inventory levels in bulk","Generate low stock alerts","Create RMA returns for order items","Create and modify shipments with tracking","Process returned items and adjust inventory","Acknowledge orders","Create and update product data"],"authentication":"API key required (HMAC-SHA256 with base64-encoded signing key)","commonUseCases":["Automating order fulfillment and shipment creation","Synchronizing inventory levels across systems","Managing product catalogs and media assets","Processing customer returns and RMAs"],"limitations":["Requires specific Miva eCommerce platform integration","Authentication relies on HMAC-SHA256 signing which requires proper key management"],"relatedNodes":[]}


node_type: n8n-nodes-smallestai.smallestai
package_name: n8n-nodes-smallestai
display_name: Smallest AI
description: Interact with Smallest AI APIs for voice synthesis and agents
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: smallestai
author_github_url: https://github.com/sosumit001/
npm_package_name: n8n-nodes-smallestai
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.771Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tts",
      "options": [
        {
          "name": "Speech (TTS)",
          "value": "tts"
        },
        {
          "name": "Transcription (STT)",
          "value": "stt"
        },
        {
          "name": "Voice Clone",
          "value": "voiceClone"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "synthesize",
      "options": [
        {
          "name": "Get Voices",
          "value": "getVoices",
          "action": "Get voices",
          "description": "Retrieve available voice models"
        },
        {
          "name": "Synthesize Speech",
          "value": "synthesize",
          "action": "Synthesize speech",
          "description": "Convert text to speech"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "transcribe",
      "options": [
        {
          "name": "Transcribe Audio",
          "value": "transcribe",
          "action": "Transcribe audio",
          "description": "Transcribe audio to text"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "addVoice",
      "options": [
        {
          "name": "Add Voice",
          "value": "addVoice",
          "action": "Add voice",
          "description": "Clone a voice from an audio file"
        },
        {
          "name": "Delete Cloned Voice",
          "value": "deleteClonedVoice",
          "action": "Delete cloned voice",
          "description": "Delete a cloned voice by its ID"
        },
        {
          "name": "Get Cloned Voices",
          "value": "getClonedVoices",
          "action": "Get cloned voices",
          "description": "Retrieve all your cloned voices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceClone"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Voices",
      "value": "getVoices",
      "action": "Get voices",
      "description": "Retrieve available voice models",
      "resource": "tts"
    },
    {
      "name": "Synthesize Speech",
      "value": "synthesize",
      "action": "Synthesize speech",
      "description": "Convert text to speech",
      "resource": "tts"
    },
    {
      "name": "Transcribe Audio",
      "value": "transcribe",
      "action": "Transcribe audio",
      "description": "Transcribe audio to text",
      "resource": "stt"
    },
    {
      "name": "Add Voice",
      "value": "addVoice",
      "action": "Add voice",
      "description": "Clone a voice from an audio file",
      "resource": "voiceClone"
    },
    {
      "name": "Delete Cloned Voice",
      "value": "deleteClonedVoice",
      "action": "Delete cloned voice",
      "description": "Delete a cloned voice by its ID",
      "resource": "voiceClone"
    },
    {
      "name": "Get Cloned Voices",
      "value": "getClonedVoices",
      "action": "Get cloned voices",
      "description": "Retrieve all your cloned voices",
      "resource": "voiceClone"
    }
  ]

npm_readme:
  # n8n-nodes-smallestai

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

  Smallest AI provides state-of-the-art voice AI APIs — including text-to-speech, speech-to-text, and voice cloning — enabling you to build powerful voice-driven automations.

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

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

  ## Installation

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

  ## Operations

  ### Speech (TTS)

  - **Synthesize Speech** — Convert text to speech using Lightning V3.1 (default voices) or Lightning Large (cloned voices). Supports PCM, MP3, WAV, and Mulaw output formats with configurable sample rate, speed, and language.
  - **Get Voices** — Retrieve available voice models for Lightning V2 or Lightning V3.1.

  ### Transcription (STT)

  - **Transcribe Audio** — Transcribe audio to text with support for 20+ languages. Optional age, gender, and emotion detection.

  ### Voice Clone

  - **Add Voice** — Clone a voice from an uploaded audio file.
  - **Get Cloned Voices** — Retrieve all your cloned voices.
  - **Delete Cloned Voice** — Delete a cloned voice by its ID.

  ## Credentials

  To use this node, you need a Smallest AI API key:

  1. Sign up at [console.smallest.ai](https://console.smallest.ai)
  2. Navigate to [API Keys](https://console.smallest.ai/apikeys)
  3. Create a new API key
  4. In n8n, create a new **Smallest.ai API** credential and paste your API key

  ## Compatibility

  - Tested with n8n v1.x and v2.x
  - Requires Node.js v22 or higher

  ## Resources

  - [Smallest AI Documentation](https://waves-docs.smallest.ai/)
  - [Smallest AI API Reference](https://waves-docs.smallest.ai/v4.0.0/content/api-references/authentication)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Interact with Smallest AI APIs to enable voice synthesis, speech-to-text transcription, and voice cloning capabilities within n8n workflows.","capabilities":["Synthesize speech using Lightning V3.1 or Lightning Large models","Retrieve available voice models for Lightning V2 or V3.1","Transcribe audio to text with support for 20+ languages","Detect age, gender, and emotion during transcription","Clone voices from uploaded audio files","Retrieve and delete cloned voices"],"authentication":"API key required","commonUseCases":["Creating voice-driven automations with custom cloned voices","Converting text documents to audio for accessibility or content distribution","Transcribing meetings or interviews with sentiment analysis","Building voice assistants with personalized voice profiles"],"limitations":["Requires Node.js v22 or higher","Limited to Smallest AI's supported languages and voice models"],"relatedNodes":[]}


node_type: n8n-nodes-salesrobot.salesrobot
package_name: n8n-nodes-salesrobot
display_name: Salesrobot
description: Interact with Salesrobot API for LinkedIn automation and outreach
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: coderman400
author_github_url: https://github.com/coderman400/
npm_package_name: n8n-nodes-salesrobot
npm_version: 0.3.1
community_fetched_at: 2026-07-14T14:40:33.773Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "AI Personalization",
          "value": "aiPersonalization"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "LinkedIn",
          "value": "linkedin"
        },
        {
          "name": "Setting",
          "value": "settings"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Add Prospect",
          "value": "addProspect",
          "action": "Add a single prospect to campaign",
          "routing": {
            "request": {
              "url": "/add-from-csv",
              "method": "POST"
            }
          },
          "description": "Add a single prospect to a campaign using their LinkedIn profile"
        },
        {
          "name": "Add Sequence Steps",
          "value": "addSequence",
          "action": "Add sequence steps to campaign",
          "routing": {
            "request": {
              "url": "/sequence/save/from-steps",
              "method": "POST"
            }
          },
          "description": "Add multiple sequence steps to a campaign"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a campaign",
          "routing": {
            "send": {
              "type": "body",
              "value": "={{$parameter.linkedinAccountUuid}}",
              "property": "linkedinAccountUuid"
            },
            "request": {
              "url": "/campaign",
              "method": "POST"
            }
          },
          "description": "Create a new campaign"
        },
        {
          "name": "Delete Prospects",
          "value": "deleteProspects",
          "action": "Delete prospects from campaign",
          "routing": {
            "request": {
              "url": "/campaign/deleteMultiple",
              "method": "POST"
            }
          },
          "description": "Delete multiple prospects from a campaign"
        },
        {
          "name": "Get Prospect Status",
          "value": "getProspectStatus",
          "action": "Get prospect execution details",
          "routing": {
            "request": {
              "url": "/campaign/prospects/execution-details",
              "method": "GET"
            }
          },
          "description": "Get execution details and status for a specific prospect"
        },
        {
          "name": "Get Prospects",
          "value": "getProspects",
          "action": "Get campaign prospects",
          "routing": {
            "request": {
              "url": "/campaign/prospects",
              "method": "GET"
            }
          },
          "description": "Get list of prospects in a campaign"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get campaign statistics",
          "routing": {
            "request": {
              "url": "/campaignTimeWiseStats",
              "method": "GET"
            }
          },
          "description": "Get time-wise statistics for a campaign"
        },
        {
          "name": "Import From CSV",
          "value": "importFromCsv",
          "action": "Import prospects from CSV data",
          "routing": {
            "request": {
              "url": "/add-from-csv",
              "method": "POST"
            }
          },
          "description": "Import multiple prospects into campaign from CSV-like data structure"
        },
        {
          "name": "Import Prospects",
          "value": "importProspects",
          "action": "Import prospects from sales navigator",
          "routing": {
            "request": {
              "url": "/add-from-lisalesnav-search",
              "method": "POST"
            }
          },
          "description": "Import prospects into campaign from LinkedIn Sales Navigator search"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List campaigns",
          "routing": {
            "request": {
              "url": "/campaigns",
              "method": "GET"
            }
          },
          "description": "Get a list of all campaigns"
        },
        {
          "name": "Pause/Resume",
          "value": "pauseResume",
          "action": "Pause or resume campaign",
          "routing": {
            "request": {
              "url": "/campaign/pause",
              "method": "POST"
            }
          },
          "description": "Pause or resume a campaign"
        },
        {
          "name": "Pause/Resume Prospect",
          "value": "pauseResumeProspect",
          "action": "Pause or resume prospect",
          "routing": {
            "request": {
              "url": "/campaign/pauseForProspect",
              "method": "POST"
            }
          },
          "description": "Pause or resume a specific prospect in a campaign"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start campaign",
          "routing": {
            "request": {
              "url": "/start",
              "method": "POST"
            }
          },
          "description": "Start a campaign"
        },
        {
          "name": "Update Configuration",
          "value": "updateConfiguration",
          "action": "Update campaign configuration",
          "routing": {
            "request": {
              "url": "/campaign/settings/update",
              "method": "POST"
            }
          },
          "description": "Update campaign settings and configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAiVariables",
      "options": [
        {
          "name": "Create AI Variable",
          "value": "createAiVariable",
          "action": "Create an AI variable",
          "routing": {
            "request": {
              "url": "/sequence/add_new_ai_variable",
              "method": "POST"
            }
          },
          "description": "Create or update an AI variable for use in campaign sequences"
        },
        {
          "name": "Create Smart Comment Variable",
          "value": "createSmartCommentVariable",
          "action": "Create a smart comment variable",
          "routing": {
            "request": {
              "url": "/sequence/add_new_smart_comment_variable",
              "method": "POST"
            }
          },
          "description": "Create or update a smart comment variable for post engagement sequences"
        },
        {
          "name": "Create Video Avatar",
          "value": "createVideoAvatar",
          "action": "Create video avatar",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/create-video-avatar",
              "method": "POST"
            }
          },
          "description": "Create a video avatar for AI video personalization"
        },
        {
          "name": "Create Voice Clone",
          "value": "createVoiceClone",
          "action": "Create voice clone",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/create-voice-clone",
              "method": "POST"
            }
          },
          "description": "Create a voice clone for AI voice personalization"
        },
        {
          "name": "Delete Voice Clone",
          "value": "deleteVoiceClone",
          "action": "Delete voice clone",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/delete-voice-clone",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing voice clone"
        },
        {
          "name": "Generate Sample Video",
          "value": "generateSampleVideo",
          "action": "Generate sample video",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/generate-video-sample",
              "method": "POST"
            }
          },
          "description": "Generate a sample video with AI video personalization"
        },
        {
          "name": "Generate Test Voice Message",
          "value": "generateTestVoiceMessage",
          "action": "Generate test voice message",
          "routing": {
            "request": {
              "url": "/ai-voice-personalization/generate-test-voice-message",
              "method": "POST"
            }
          },
          "description": "Generate a test voice message to preview voice clone"
        },
        {
          "name": "Get AI Variables",
          "value": "getAiVariables",
          "action": "Get AI variables",
          "routing": {
            "request": {
              "url": "/sequence/ai_variable",
              "method": "GET"
            }
          },
          "description": "Get list of AI variables for use in sequences"
        },
        {
          "name": "Get Smart Comment Variables",
          "value": "getSmartCommentVariables",
          "action": "Get smart comment variables",
          "routing": {
            "request": {
              "url": "/sequence/smart_comment_variable",
              "method": "GET"
            }
          },
          "description": "Get list of smart comment variables for post engagement"
        },
        {
          "name": "Get Video Avatar",
          "value": "getVideoAvatar",
          "action": "Get video avatar",
          "routing": {
            "request": {
              "url": "/ai-video-personalization/get-video-avatar",
              "method": "GET"
            }
          },
          "description": "Get video avatar for AI video personalization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiPersonalization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAccounts",
      "options": [
        {
          "name": "Get Accounts",
          "value": "getAccounts",
          "action": "Get LinkedIn accounts",
          "routing": {
            "request": {
              "url": "/linkedinAccounts",
              "method": "GET"
            }
          },
          "description": "Get all connected LinkedIn accounts"
        },
        {
          "name": "Sync Inbox",
          "value": "syncInbox",
          "action": "Sync LinkedIn inbox",
          "routing": {
            "request": {
              "url": "/syncedMessages",
              "method": "POST"
            }
          },
          "description": "Synchronize LinkedIn inbox messages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "updateQuota",
      "options": [
        {
          "name": "Automatic Warmup",
          "value": "automaticWarmup",
          "action": "Configure automatic warmup",
          "routing": {
            "request": {
              "url": "/settings/automaticWarmUp",
              "method": "POST"
            }
          },
          "description": "Configure automatic connection acceptance and suggested connections"
        },
        {
          "name": "Copy Blacklist From Account",
          "value": "copyBlacklist",
          "action": "Copy blacklist from another account",
          "routing": {
            "request": {
              "url": "/blacklist/copy_from_account",
              "method": "POST"
            }
          },
          "description": "Copy blacklist settings from another LinkedIn account"
        },
        {
          "name": "Delete Pending Invites",
          "value": "deletePendingInvites",
          "action": "Delete pending invites",
          "routing": {
            "request": {
              "url": "/settings/pendingInvite",
              "method": "POST"
            }
          },
          "description": "Delete old pending connection invites"
        },
        {
          "name": "Update Blacklist",
          "value": "updateBlacklist",
          "action": "Update blacklist settings",
          "routing": {
            "request": {
              "url": "/blacklist/update",
              "method": "POST"
            }
          },
          "description": "Update blacklisted companies and profile URLs"
        },
        {
          "name": "Update Quota",
          "value": "updateQuota",
          "action": "Update quota settings",
          "routing": {
            "request": {
              "url": "/settings/quota",
              "method": "POST"
            }
          },
          "description": "Update daily quota and warm up settings for LinkedIn account"
        },
        {
          "name": "Update Schedule",
          "value": "updateSchedule",
          "action": "Update schedule settings",
          "routing": {
            "request": {
              "url": "/schedule",
              "method": "POST"
            }
          },
          "description": "Update schedule settings including working hours and days"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "settings"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Prospect",
      "value": "addProspect",
      "action": "Add a single prospect to campaign",
      "routing": {
        "request": {
          "url": "/add-from-csv",
          "method": "POST"
        }
      },
      "description": "Add a single prospect to a campaign using their LinkedIn profile",
      "resource": "campaign"
    },
    {
      "name": "Add Sequence Steps",
      "value": "addSequence",
      "action": "Add sequence steps to campaign",
      "routing": {
        "request": {
          "url": "/sequence/save/from-steps",
          "method": "POST"
        }
      },
      "description": "Add multiple sequence steps to a campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a campaign",
      "routing": {
        "send": {
          "type": "body",
          "value": "={{$parameter.linkedinAccountUuid}}",
          "property": "linkedinAccountUuid"
        },
        "request": {
          "url": "/campaign",
          "method": "POST"
        }
      },
      "description": "Create a new campaign",
      "resource": "campaign"
    },
    {
      "name": "Delete Prospects",
      "value": "deleteProspects",
      "action": "Delete prospects from campaign",
      "routing": {
        "request": {
          "url": "/campaign/deleteMultiple",
          "method": "POST"
        }
      },
      "description": "Delete multiple prospects from a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Prospect Status",
      "value": "getProspectStatus",
      "action": "Get prospect execution details",
      "routing": {
        "request": {
          "url": "/campaign/prospects/execution-details",
          "method": "GET"
        }
      },
      "description": "Get execution details and status for a specific prospect",
      "resource": "campaign"
    },
    {
      "name": "Get Prospects",
      "value": "getProspects",
      "action": "Get campaign prospects",
      "routing": {
        "request": {
          "url": "/campaign/prospects",
          "method": "GET"
        }
      },
      "description": "Get list of prospects in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get campaign statistics",
      "routing": {
        "request": {
          "url": "/campaignTimeWiseStats",
          "method": "GET"
        }
      },
      "description": "Get time-wise statistics for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Import From CSV",
      "value": "importFromCsv",
      "action": "Import prospects from CSV data",
      "routing": {
        "request": {
          "url": "/add-from-csv",
          "method": "POST"
        }
      },
      "description": "Import multiple prospects into campaign from CSV-like data structure",
      "resource": "campaign"
    },
    {
      "name": "Import Prospects",
      "value": "importProspects",
      "action": "Import prospects from sales navigator",
      "routing": {
        "request": {
          "url": "/add-from-lisalesnav-search",
          "method": "POST"
        }
      },
      "description": "Import prospects into campaign from LinkedIn Sales Navigator search",
      "resource": "campaign"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List campaigns",
      "routing": {
        "request": {
          "url": "/campaigns",
          "method": "GET"
        }
      },
      "description": "Get a list of all campaigns",
      "resource": "campaign"
    },
    {
      "name": "Pause/Resume",
      "value": "pauseResume",
      "action": "Pause or resume campaign",
      "routing": {
        "request": {
          "url": "/campaign/pause",
          "method": "POST"
        }
      },
      "description": "Pause or resume a campaign",
      "resource": "campaign"
    },
    {
      "name": "Pause/Resume Prospect",
      "value": "pauseResumeProspect",
      "action": "Pause or resume prospect",
      "routing": {
        "request": {
          "url": "/campaign/pauseForProspect",
          "method": "POST"
        }
      },
      "description": "Pause or resume a specific prospect in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start campaign",
      "routing": {
        "request": {
          "url": "/start",
          "method": "POST"
        }
      },
      "description": "Start a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update Configuration",
      "value": "updateConfiguration",
      "action": "Update campaign configuration",
      "routing": {
        "request": {
          "url": "/campaign/settings/update",
          "method": "POST"
        }
      },
      "description": "Update campaign settings and configuration",
      "resource": "campaign"
    },
    {
      "name": "Create AI Variable",
      "value": "createAiVariable",
      "action": "Create an AI variable",
      "routing": {
        "request": {
          "url": "/sequence/add_new_ai_variable",
          "method": "POST"
        }
      },
      "description": "Create or update an AI variable for use in campaign sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Smart Comment Variable",
      "value": "createSmartCommentVariable",
      "action": "Create a smart comment variable",
      "routing": {
        "request": {
          "url": "/sequence/add_new_smart_comment_variable",
          "method": "POST"
        }
      },
      "description": "Create or update a smart comment variable for post engagement sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Video Avatar",
      "value": "createVideoAvatar",
      "action": "Create video avatar",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/create-video-avatar",
          "method": "POST"
        }
      },
      "description": "Create a video avatar for AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Create Voice Clone",
      "value": "createVoiceClone",
      "action": "Create voice clone",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/create-voice-clone",
          "method": "POST"
        }
      },
      "description": "Create a voice clone for AI voice personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Delete Voice Clone",
      "value": "deleteVoiceClone",
      "action": "Delete voice clone",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/delete-voice-clone",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing voice clone",
      "resource": "aiPersonalization"
    },
    {
      "name": "Generate Sample Video",
      "value": "generateSampleVideo",
      "action": "Generate sample video",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/generate-video-sample",
          "method": "POST"
        }
      },
      "description": "Generate a sample video with AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Generate Test Voice Message",
      "value": "generateTestVoiceMessage",
      "action": "Generate test voice message",
      "routing": {
        "request": {
          "url": "/ai-voice-personalization/generate-test-voice-message",
          "method": "POST"
        }
      },
      "description": "Generate a test voice message to preview voice clone",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get AI Variables",
      "value": "getAiVariables",
      "action": "Get AI variables",
      "routing": {
        "request": {
          "url": "/sequence/ai_variable",
          "method": "GET"
        }
      },
      "description": "Get list of AI variables for use in sequences",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Smart Comment Variables",
      "value": "getSmartCommentVariables",
      "action": "Get smart comment variables",
      "routing": {
        "request": {
          "url": "/sequence/smart_comment_variable",
          "method": "GET"
        }
      },
      "description": "Get list of smart comment variables for post engagement",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Video Avatar",
      "value": "getVideoAvatar",
      "action": "Get video avatar",
      "routing": {
        "request": {
          "url": "/ai-video-personalization/get-video-avatar",
          "method": "GET"
        }
      },
      "description": "Get video avatar for AI video personalization",
      "resource": "aiPersonalization"
    },
    {
      "name": "Get Accounts",
      "value": "getAccounts",
      "action": "Get LinkedIn accounts",
      "routing": {
        "request": {
          "url": "/linkedinAccounts",
          "method": "GET"
        }
      },
      "description": "Get all connected LinkedIn accounts",
      "resource": "linkedin"
    },
    {
      "name": "Sync Inbox",
      "value": "syncInbox",
      "action": "Sync LinkedIn inbox",
      "routing": {
        "request": {
          "url": "/syncedMessages",
          "method": "POST"
        }
      },
      "description": "Synchronize LinkedIn inbox messages",
      "resource": "linkedin"
    },
    {
      "name": "Automatic Warmup",
      "value": "automaticWarmup",
      "action": "Configure automatic warmup",
      "routing": {
        "request": {
          "url": "/settings/automaticWarmUp",
          "method": "POST"
        }
      },
      "description": "Configure automatic connection acceptance and suggested connections",
      "resource": "settings"
    },
    {
      "name": "Copy Blacklist From Account",
      "value": "copyBlacklist",
      "action": "Copy blacklist from another account",
      "routing": {
        "request": {
          "url": "/blacklist/copy_from_account",
          "method": "POST"
        }
      },
      "description": "Copy blacklist settings from another LinkedIn account",
      "resource": "settings"
    },
    {
      "name": "Delete Pending Invites",
      "value": "deletePendingInvites",
      "action": "Delete pending invites",
      "routing": {
        "request": {
          "url": "/settings/pendingInvite",
          "method": "POST"
        }
      },
      "description": "Delete old pending connection invites",
      "resource": "settings"
    },
    {
      "name": "Update Blacklist",
      "value": "updateBlacklist",
      "action": "Update blacklist settings",
      "routing": {
        "request": {
          "url": "/blacklist/update",
          "method": "POST"
        }
      },
      "description": "Update blacklisted companies and profile URLs",
      "resource": "settings"
    },
    {
      "name": "Update Quota",
      "value": "updateQuota",
      "action": "Update quota settings",
      "routing": {
        "request": {
          "url": "/settings/quota",
          "method": "POST"
        }
      },
      "description": "Update daily quota and warm up settings for LinkedIn account",
      "resource": "settings"
    },
    {
      "name": "Update Schedule",
      "value": "updateSchedule",
      "action": "Update schedule settings",
      "routing": {
        "request": {
          "url": "/schedule",
          "method": "POST"
        }
      },
      "description": "Update schedule settings including working hours and days",
      "resource": "settings"
    }
  ]

npm_readme:
  # n8n-nodes-salesrobot

  An n8n community node for integrating with SalesRobot API - a LinkedIn automation and outreach platform that helps you automate LinkedIn campaigns, manage prospects, and streamline your sales process.

  ## Features

  - **Campaign Management**: Create, list, start, pause, and manage LinkedIn campaigns
  - **Prospect Management**: Import prospects from CSV, Sales Navigator, and other sources
  - **AI Personalization**: Create AI variables, voice clones, and video avatars for personalized outreach
  - **LinkedIn Integration**: Sync inbox, manage accounts, and automate LinkedIn activities
  - **Settings Management**: Configure quotas, schedules, blacklists, and warmup settings
  - **Sequence Automation**: Add and manage sequence steps for automated outreach

  ## Installation

  ### In n8n

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

  ### Manual Installation

  ```bash
  npm install n8n-nodes-salesrobot
  ```

  ## Authentication

  ### Getting Your API Key

  1. Log in to your SalesRobot account
  2. Navigate to **Settings** → **Admin Settings** → **API Key**
  3. Generate your API key

  ### Setting Up Credentials in n8n

  1. In your n8n workflow, add a **Salesrobot** node
  2. Click on **Credentials** → **Create New Credential**
  3. Select **Salesrobot API**
  4. Enter your API key in the **API Key** field
  5. Click **Save**

  The API key will be sent as the `Authorization` header in all requests.

  ## Resources and Operations

  ### Campaign

  Manage LinkedIn campaigns and prospects:

  - **Create**: Create a new campaign
  - **List**: Get a list of all campaigns (with filtering options)
  - **Import Prospects**: Import prospects from LinkedIn Search
  - **Import From CSV**: Import multiple prospects from CSV data
  - **Add Sequence Steps**: Add sequence steps to a campaign
  - **Update Configuration**: Update campaign settings and configuration
  - **Start**: Start a campaign
  - **Pause/Resume**: Pause or resume a campaign
  - **Get Prospects**: Get list of prospects in a campaign
  - **Delete Prospects**: Delete multiple prospects from a campaign
  - **Get Prospect Status**: Get execution details for a specific prospect
  - **Pause/Resume Prospect**: Pause or resume a specific prospect
  - **Get Stats**: Get time-wise statistics for a campaign

  ### AI Personalization

  Create personalized content for your outreach:

  - **Create AI Variable**: Create or update an AI variable for use in campaign sequences
  - **Get AI Variables**: Get list of AI variables for use in sequences
  - **Create Smart Comment Variable**: Create a smart comment variable for post engagement sequences
  - **Get Smart Comment Variables**: Get list of smart comment variables
  - **Create Voice Clone**: Create a voice clone for AI voice personalization
  - **Delete Voice Clone**: Delete an existing voice clone
  - **Generate Test Voice Message**: Generate a test voice message to preview voice clone
  - **Get Video Avatar**: Get video avatar for AI video personalization
  - **Create Video Avatar**: Create a video avatar for AI video personalization
  - **Generate Sample Video**: Generate a sample video with AI video personalization

  ### LinkedIn

  Manage LinkedIn accounts and messages:

  - **Get Accounts**: Get all connected LinkedIn accounts
  - **Sync Inbox**: Synchronize LinkedIn inbox messages

  ### Settings

  Configure account settings and quotas:

  - **Update Quota**: Update daily quota and warm up settings for LinkedIn account
  - **Update Schedule**: Update schedule settings including working hours and days
  - **Delete Pending Invites**: Delete old pending connection invites
  - **Update Blacklist**: Update blacklisted companies and profile URLs
  - **Copy Blacklist From Account**: Copy blacklist settings from another LinkedIn account
  - **Automatic Warmup**: Configure automatic connection acceptance and suggested connections

  ## Example Workflows

  ### 1. Create and Start a Campaign

  ```
  1. Salesrobot Node (Campaign → Create)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign Name: "Q4 Outreach Campaign"
     - Campaign Type: Advanced
     - Campaign Family: LinkedIn

  2. Salesrobot Node (Campaign → Import Prospects)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - Search URL: [LinkedIn Sales Navigator search URL]
     - Search Type: Sales Navigator
     - Connection Levels: 2nd, 3rd

  3. Salesrobot Node (Campaign → Add Sequence Steps)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - Sequence Steps: [JSON array with sequence steps]

  4. Salesrobot Node (Campaign → Start)
     - Campaign UUID: {{ $json.campaignUuid }}
  ```

  ### 2. Import Prospects from CSV

  ```
  1. Read Binary File Node (to read CSV file)

  2. Salesrobot Node (Campaign → Import From CSV)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}
     - CSV Data: {{ $binary.data }}
  ```

  ### 3. Create AI Variable and Use in Campaign

  ```
  1. Salesrobot Node (AI Personalization → Create AI Variable)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Variable Name: "companyResearch"
     - Variable Description: "Research about the company"

  2. Salesrobot Node (Campaign → Add Sequence Steps)
     - Campaign UUID: {{ $json.campaignUuid }}
     - Sequence Steps: [Include aiVariableName and aiVariableId in mail body]
  ```

  ### 4. Monitor Campaign Performance

  ```
  1. Salesrobot Node (Campaign → Get Stats)
     - LinkedIn Account UUID: {{ $json.linkedinAccountUuid }}
     - Campaign UUID: {{ $json.campaignUuid }}

  2. Function Node (to process and format statistics)

  3. Email Node (to send daily report)
  ```

  ## API Documentation

  For detailed API documentation, visit:

  - **Postman Collection**: [SalesRobot API Documentation](https://solar-robot-476240.postman.co/workspace/salesrobot~11cc6376-ed3b-435e-926a-0a10deb24cd7/collection/10815846-ab263f3a-130f-4de2-a05f-b824b4877a20)

  ## Common Parameters

  ### LinkedIn Account UUID

  Most operations require a `linkedinAccountUuid`. You can get this by:

  1. Using the **LinkedIn → Get Accounts** operation
  2. The UUID will be in the response

  ### Campaign UUID

  Campaign operations require a `campaignUuid`. You can get this by:

  1. Creating a new campaign (returns UUID)
  2. Listing campaigns (UUID in response)

  ### Sequence Steps Format

  When adding sequence steps, use this JSON format:

  ```json
  [
  	{
  		"stepOrdinal": 1,
  		"hoursDelay": 0,
  		"sequenceStepType": "VIEW_PROFILE",
  		"multiVariateMails": [
  			{
  				"body": "",
  				"subject": "",
  				"inMailVariant": false,
  				"ordinal": 1
  			}
  		]
  	},
  	{
  		"stepOrdinal": 2,
  		"hoursDelay": 1,
  		"sequenceStepType": "SEND_CONNECTION_REQUEST",
  		"multiVariateMails": [
  			{
  				"body": "Hi {{firstName}}, I would love to connect with you!",
  				"subject": "",
  				"inMailVariant": false,
  				"ordinal": 1
  			}
  		]
  	}
  ]
  ```

  **Available Sequence Step Types:**

  - `VIEW_PROFILE`
  - `SEND_CONNECTION_REQUEST`
  - `SEND_CONNECTION_REQUEST_BROWSER`
  - `SEND_CONNECTION_USING_EMAIL`
  - `SEND_MESSAGE`
  - `SEND_VOICE_MESSAGE`
  - `SEND_VIDEO_MESSAGE`
  - `FOLLOW`
  - `ENDORSE`
  - `LIKE_POST`
  - `LIKE_AND_COMMENT`
  - `SEND_MESSAGE_IN_MAIL`
  - `SEND_EMAIL`
  - `SEND_MESSAGE_USING_GROUP`
  - `SEND_MESSAGE_USING_EVENT`

  ## Troubleshooting

  ### Authentication Errors

  - Verify your API key is correct
  - Ensure the API key hasn't expired
  - Check that the API key has the necessary permissions

  ### Missing Parameters

  - Most operations require a `linkedinAccountUuid`
  - Campaign operations require a `campaignUuid`
  - Ensure all required fields are filled in the node configuration

  ## Support

  - **GitHub Issues**: [Report Issues](https://github.com/coderman400/n8n-nodes-salesrobot/issues)
  - **SalesRobot Support**: Contact SalesRobot support for API-related questions at support@salesrobot.co
  - **n8n Community**: [n8n Community Forum](https://community.n8n.io/)

  ## License

  MIT

  ## Version

  Current version: 0.2.4

ai_documentation_summary:
  {"purpose":"Enables automation of LinkedIn outreach campaigns, prospect management, and personalized content generation through the SalesRobot API.","capabilities":["Create, list, start, pause, and manage LinkedIn campaigns","Import prospects from CSV, Sales Navigator, and LinkedIn Search","Create and manage AI variables for personalized outreach","Generate voice clones and video avatars for personalization","Manage LinkedIn account connections and inbox synchronization","Configure account quotas, schedules, and blacklists","Add and manage sequence steps for automated outreach","Retrieve campaign statistics and prospect execution details"],"authentication":"API key required","commonUseCases":["Automated LinkedIn sales outreach campaigns","Personalized messaging using AI-generated content","Bulk prospect importing from various sources","Campaign performance monitoring and reporting"],"limitations":[],"relatedNodes":[]}


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

updated_at: 2026-07-14 14:40:33
author_name: achiya
author_github_url: https://github.com/achiya-automation/
npm_package_name: n8n-nodes-typebot
npm_version: 1.3.24
community_fetched_at: 2026-07-14T14:40:33.774Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat"
        },
        {
          "name": "Folder",
          "value": "folder"
        },
        {
          "name": "Result",
          "value": "result"
        },
        {
          "name": "Typebot",
          "value": "typebot"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "startChat",
      "options": [
        {
          "name": "Continue Chat",
          "value": "continueChat",
          "action": "Continue a chat session",
          "description": "Continue an existing chat session"
        },
        {
          "name": "Generate Upload URL",
          "value": "generateUploadUrl",
          "action": "Generate upload URL",
          "description": "Generate a presigned URL for file upload"
        },
        {
          "name": "Save Logs",
          "value": "saveLogs",
          "action": "Save logs",
          "description": "Save client logs for a session"
        },
        {
          "name": "Start Chat",
          "value": "startChat",
          "action": "Start a chat session",
          "description": "Start a new chat session"
        },
        {
          "name": "Start Preview Chat",
          "value": "startPreviewChat",
          "action": "Start a preview chat session",
          "description": "Start a preview chat session"
        },
        {
          "name": "Update Typebot in Session",
          "value": "updateTypebotInSession",
          "action": "Update typebot in session",
          "description": "Update typebot configuration in an active session"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all typebots",
          "description": "List all typebots"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a typebot",
          "description": "Get a typebot"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a typebot",
          "description": "Create a typebot"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a typebot",
          "description": "Update a typebot"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a typebot",
          "description": "Delete a typebot"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a typebot",
          "description": "Publish a typebot"
        },
        {
          "name": "Unpublish",
          "value": "unpublish",
          "action": "Unpublish a typebot",
          "description": "Unpublish a typebot"
        },
        {
          "name": "Get Published",
          "value": "getPublished",
          "action": "Get published typebot",
          "description": "Get published typebot"
        },
        {
          "name": "Import",
          "value": "import",
          "action": "Import a typebot",
          "description": "Import a typebot from JSON"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "typebot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all results",
          "description": "List all results"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a result",
          "description": "Get a result"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete results",
          "description": "Delete results"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get statistics",
          "description": "Get statistics"
        },
        {
          "name": "List Logs",
          "value": "listLogs",
          "action": "List logs in result",
          "description": "List logs for a result"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "result"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all workspaces",
          "description": "List all workspaces"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a workspace",
          "description": "Get a workspace"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a workspace",
          "description": "Create a workspace"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a workspace",
          "description": "Update a workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a workspace",
          "description": "Delete a workspace"
        },
        {
          "name": "List Members",
          "value": "listMembers",
          "action": "List workspace members",
          "description": "List workspace members"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List all folders",
          "description": "List all folders"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a folder",
          "description": "Create a folder"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a folder",
          "description": "Update a folder"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a folder",
          "description": "Delete a folder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Continue Chat",
      "value": "continueChat",
      "action": "Continue a chat session",
      "description": "Continue an existing chat session",
      "resource": "chat"
    },
    {
      "name": "Generate Upload URL",
      "value": "generateUploadUrl",
      "action": "Generate upload URL",
      "description": "Generate a presigned URL for file upload",
      "resource": "chat"
    },
    {
      "name": "Save Logs",
      "value": "saveLogs",
      "action": "Save logs",
      "description": "Save client logs for a session",
      "resource": "chat"
    },
    {
      "name": "Start Chat",
      "value": "startChat",
      "action": "Start a chat session",
      "description": "Start a new chat session",
      "resource": "chat"
    },
    {
      "name": "Start Preview Chat",
      "value": "startPreviewChat",
      "action": "Start a preview chat session",
      "description": "Start a preview chat session",
      "resource": "chat"
    },
    {
      "name": "Update Typebot in Session",
      "value": "updateTypebotInSession",
      "action": "Update typebot in session",
      "description": "Update typebot configuration in an active session",
      "resource": "chat"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all typebots",
      "description": "List all typebots",
      "resource": "typebot"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a typebot",
      "description": "Get a typebot",
      "resource": "typebot"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a typebot",
      "description": "Create a typebot",
      "resource": "typebot"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a typebot",
      "description": "Update a typebot",
      "resource": "typebot"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a typebot",
      "description": "Delete a typebot",
      "resource": "typebot"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a typebot",
      "description": "Publish a typebot",
      "resource": "typebot"
    },
    {
      "name": "Unpublish",
      "value": "unpublish",
      "action": "Unpublish a typebot",
      "description": "Unpublish a typebot",
      "resource": "typebot"
    },
    {
      "name": "Get Published",
      "value": "getPublished",
      "action": "Get published typebot",
      "description": "Get published typebot",
      "resource": "typebot"
    },
    {
      "name": "Import",
      "value": "import",
      "action": "Import a typebot",
      "description": "Import a typebot from JSON",
      "resource": "typebot"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all results",
      "description": "List all results",
      "resource": "result"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a result",
      "description": "Get a result",
      "resource": "result"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete results",
      "description": "Delete results",
      "resource": "result"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get statistics",
      "description": "Get statistics",
      "resource": "result"
    },
    {
      "name": "List Logs",
      "value": "listLogs",
      "action": "List logs in result",
      "description": "List logs for a result",
      "resource": "result"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all workspaces",
      "description": "List all workspaces",
      "resource": "workspace"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a workspace",
      "description": "Get a workspace",
      "resource": "workspace"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a workspace",
      "description": "Create a workspace",
      "resource": "workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a workspace",
      "description": "Update a workspace",
      "resource": "workspace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a workspace",
      "description": "Delete a workspace",
      "resource": "workspace"
    },
    {
      "name": "List Members",
      "value": "listMembers",
      "action": "List workspace members",
      "description": "List workspace members",
      "resource": "workspace"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all folders",
      "description": "List all folders",
      "resource": "folder"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a folder",
      "description": "Create a folder",
      "resource": "folder"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a folder",
      "description": "Update a folder",
      "resource": "folder"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a folder",
      "description": "Delete a folder",
      "resource": "folder"
    }
  ]

npm_readme:
  # n8n-nodes-typebot

  This is an n8n community node that lets you use [Typebot](https://typebot.io/) in your n8n workflows.

  Typebot is a powerful open-source chatbot builder that allows you to create conversational apps and forms.

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

  ## Table of Contents

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

  ## Installation

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

  ### Community Node Installation

  1. Open your n8n instance
  2. Go to **Settings** > **Community Nodes**
  3. Click **Install**
  4. Enter `n8n-nodes-typebot` in the npm Package Name field
  5. Click **Install**

  ### Manual Installation (for development)

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

  After installation, restart your n8n instance.

  ## Prerequisites

  You will need:

  1. A Typebot account (cloud or self-hosted)
  2. An API token from your Typebot account

  ### Getting Your API Token

  1. Log into your Typebot dashboard at https://app.typebot.io
  2. Navigate to **Settings & Members** → **My account**
  3. Scroll to the **API tokens** section
  4. Click **Create**
  5. Give your token a name and click **Create**
  6. Copy the generated token (you'll need it for n8n credentials)

  ## Operations

  This node supports all major Typebot API operations:

  ### Chat Operations
  - **Start Chat** - Start a new chat session with a published typebot
  - **Continue Chat** - Continue an existing chat session
  - **Start Preview Chat** - Start a preview chat session (for testing unpublished bots)

  ### Typebot Management
  - **List** - List all typebots in your workspace
  - **Get** - Get a specific typebot by ID
  - **Create** - Create a new typebot
  - **Update** - Update an existing typebot
  - **Delete** - Delete a typebot
  - **Publish** - Publish a typebot
  - **Unpublish** - Unpublish a typebot
  - **Get Published** - Get a published typebot by public ID

  ### Results
  - **List** - List all results for a typebot
  - **Get** - Get a specific result
  - **Delete** - Delete results
  - **Get Stats** - Get statistics for a typebot

  ### Workspaces
  - **List** - List all workspaces
  - **Get** - Get a specific workspace
  - **Create** - Create a new workspace
  - **Update** - Update a workspace
  - **Delete** - Delete a workspace
  - **List Members** - List workspace members

  ### Folders
  - **List** - List all folders in a workspace
  - **Create** - Create a new folder
  - **Update** - Update a folder
  - **Delete** - Delete a folder

  ## Credentials

  To use this node, you need to set up Typebot API credentials in n8n:

  1. In n8n, go to **Credentials** → **New**
  2. Search for "Typebot API"
  3. Enter your credentials:
     - **API Token**: Your Typebot API token
     - **Base URL**:
       - For cloud: `https://app.typebot.io/api`
       - For self-hosted: `https://your-domain.com/api`
  4. Click **Save**

  ## Compatibility

  - Tested with n8n version 1.0.0+
  - Tested with Typebot API v1

  ## Usage

  ### Example 1: Start a Chat Session

  This example shows how to start a chat with a published typebot:

  1. Add the **Typebot** node to your workflow
  2. Select **Chat** as the resource
  3. Select **Start Chat** as the operation
  4. Enter your typebot's **Public ID** (found in typebot settings)
  5. Optionally add a message or prefilled variables
  6. Execute the node

  The node will return:
  - `sessionId` - Use this to continue the conversation
  - `messages` - The bot's response messages
  - `input` - The next expected input from the user

  ### Example 2: Continue a Chat Conversation

  1. Add another **Typebot** node
  2. Select **Chat** → **Continue Chat**
  3. Enter the `sessionId` from the previous chat start
  4. Enter the user's message
  5. Execute the node

  ### Example 3: Create a New Typebot

  1. Add the **Typebot** node
  2. Select **Typebot** → **Create**
  3. Enter your **Workspace ID**
  4. Enter the typebot configuration as JSON:

  ```json
  {
    "name": "My New Bot",
    "groups": [],
    "events": [{
      "type": "start",
      "graphCoordinates": { "x": 0, "y": 0 }
    }]
  }
  ```

  ### Example 4: Get Chat Results

  1. Add the **Typebot** node
  2. Select **Result** → **List**
  3. Enter your **Typebot ID**
  4. Execute to get all conversation results

  ## Tips for Usage

  ### Working with JSON Fields

  Several operations require JSON input (like creating or updating typebots). You can:

  1. Use the **Code** node to prepare the JSON data
  2. Reference data from previous nodes using expressions: `{{ $json.fieldName }}`
  3. Use the **Set** node to construct complex objects

  ### Chat Flow Pattern

  A typical chat flow in n8n might look like:

  1. **Webhook** node - Receives user message
  2. **Typebot** (Start/Continue Chat) - Processes the message
  3. **IF** node - Check if conversation is complete
  4. **Typebot** (Get Result) - Retrieve final answers
  5. **HTTP Request** - Send response back to user

  ### Error Handling

  - Enable **Continue On Fail** in node settings to handle errors gracefully
  - The node will return error information in the output if the API request fails
  - Check Typebot API documentation for specific error codes

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Typebot documentation](https://docs.typebot.io/)
  - [Typebot API reference](https://docs.typebot.io/api-reference)
  - [GitHub repository](https://github.com/yourusername/n8n-nodes-typebot) (update with your repo URL)

  ## License

  [MIT](LICENSE.md)

  ## Support

  For issues or questions:
  - Open an issue on [GitHub](https://github.com/yourusername/n8n-nodes-typebot/issues)
  - Check the [n8n community forum](https://community.n8n.io/)
  - Refer to [Typebot documentation](https://docs.typebot.io/)

  ## Contributing

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

  ## Version History

  ### 1.0.0
  - Initial release
  - Support for all major Typebot API operations
  - Chat operations (start, continue, preview)
  - Typebot management (CRUD operations)
  - Results management
  - Workspace and folder management

ai_documentation_summary:
  {"purpose":"Interact with the Typebot API to manage conversational chatbots, forms, and workflows within n8n automation scenarios.","capabilities":["Start new chat sessions","Continue existing chat conversations","Start preview chats for testing","List, create, update, delete, and publish typebots","Retrieve typebot details by ID or public ID","Manage chat results and statistics","List and manage workspaces and folders","Handle workspace members"],"authentication":"API key required","commonUseCases":["Customer support chatbots integrated into workflows","Data collection forms with conversational interfaces","Lead qualification bots","Automated onboarding assistants","Retrieving structured data from chat interactions"],"limitations":["Requires a Typebot account (cloud or self-hosted)","Dependent on Typebot API v1 compatibility","Complex typebot configurations require manual JSON construction or external nodes like Code/Set"],"relatedNodes":["Webhook","IF","Code","Set","HTTP Request"]}


node_type: n8n-nodes-plentyone.Plentymarkets
package_name: n8n-nodes-plentyone
display_name: PlentyONE
description: Work with the PlentyONE (formerly plentymarkets) REST API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: dnangelx
author_github_url: https://github.com/DNAngelX/n8n-nodes-plentymarkets.git
npm_package_name: n8n-nodes-plentyone
npm_version: 1.3.6
community_fetched_at: 2026-07-14T14:40:33.776Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "custom",
      "options": [
        {
          "name": "Custom API Call",
          "value": "custom"
        }
      ],
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Custom Request",
          "value": "custom.customRequest",
          "description": "Send a custom HTTP request"
        },
        {
          "name": "Request via JSON Definition",
          "value": "custom.jsonDefinition",
          "description": "Provide a full JSON definition for the request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "custom"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Custom Request",
      "value": "custom.customRequest",
      "description": "Send a custom HTTP request",
      "resource": "custom"
    },
    {
      "name": "Request via JSON Definition",
      "value": "custom.jsonDefinition",
      "description": "Provide a full JSON definition for the request",
      "resource": "custom"
    }
  ]

npm_readme:
  # PlentyONE n8n Community Node

  Interact with the PlentyONE (formerly plentymarkets) REST API directly from your n8n workflows.
  This community node focuses on dynamic request handling so you can cover both well-known endpoints
  and ad-hoc API calls without waiting for custom code changes.

  ## Highlights

  - ✅ Automatic session handling via n8n `preAuthentication` – the access token is cached and refreshed only when needed.
  - ✅ Classic *Custom Request* operation with support for sending payloads **even on GET/HEAD** calls (body → query parameters).
  - ✅ New *Request via JSON Definition* operation to paste or inject complete request descriptions, e.g.:
  - ✅ Optional *Fetch All Pages* toggle that follows PlentyONE pagination automatically and outputs the collected `entries`.

    ```json
    {
      "method": "GET",
      "endpoint": "/rest/v2/properties/relations",
      "body": {
        "with": "values",
        "groupId": 44,
        "propertyId": 394,
        "type": "item",
        "targetId": 99211
      }
    }
    ```

    Arrays are supported as well – just provide a JSON array of request objects to execute them sequentially in one run.

  - ✅ Local PlentyONE icon bundled with the node for easier identification inside n8n.

  ## Installation

  Install the package inside your n8n instance (desktop, self-hosted or cloud with custom packages enabled):

  ```bash
  npm install n8n-nodes-plentyone
  ```

  Restart n8n afterwards so the node metadata is reloaded.

  > **Compatibility:** The internal node type stays `n8n-nodes-plentymarkets.Plentymarkets`
  > so existing workflows continue to work after upgrading from older releases.

  ## Credentials

  Create a new credential record of type **PlentyONE API** and fill in:

  | Field        | Description                                                                 |
  |--------------|-----------------------------------------------------------------------------|
  | Base URL     | Base URL of your PlentyONE environment (e.g. `https://example.plentyone.de`) |
  | Username     | PlentyONE username used for API login                                       |
  | Password     | Corresponding password                                                      |

  The node stores the access token invisibly and refreshes it automatically before expiry.  
  No external Redis/filesystem cache is required, so the credential works in hosted/cloud setups too.

  ## Operations

  ### Custom Request

  Configure the HTTP method and endpoint in the node UI. The “Payload / Query (JSON)” parameter accepts a JSON object:

  - For `GET`/`HEAD` requests the object is sent as query parameters.
  - For all other methods the object is sent as JSON body.

  Enable **Fetch All Pages** when the API response uses the PlentyONE pagination format (`page`, `isLastPage`, `entries`, …). The node will loop through pages (ignoring any provided `page` value) until `isLastPage === true`, returning each entry as a separate item. See the [PlentyONE REST documentation](https://developers.plentymarkets.com/en-gb/plentymarkets-rest-api/index.html) for details on paginated endpoints.

  ### Request via JSON Definition

  Provide a JSON object (or array of objects) with the following optional fields:

  | Field    | Type            | Notes                                                                 |
  |----------|-----------------|-----------------------------------------------------------------------|
  | `method` | string          | Defaults to `GET`.                                                    |
  | `endpoint` | string       | Required.                                                             |
  | `body`   | object          | Used as JSON body (or merged into query for GET/HEAD).                |
  | `query`  | object          | Explicit query string parameters.                                     |
  | `headers` | object        | Custom headers added to the request.                                   |

  Example payload for a PUT request:

  ```json
  {
    "method": "PUT",
    "endpoint": "/rest/listings/markets/histories/update/",
    "body": {
      "id": [959893, 919078],
      "options": ["quantityAndPrice"]
    }
  }
  ```

  When **Fetch All Pages** is enabled for this operation, every GET request definition in the JSON will be paginated automatically, following the same logic as the Custom Request.

  ## Development

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

  `npm run build` compiles TypeScript and copies the PlentyONE icon plus operation schema into `dist/`.

  ## Licensing & Credits

  - Icon: © PlentyONE — included locally as `plentyone.svg` according to the branding assets.
  - Code: MIT License.

ai_documentation_summary:
  {"purpose":"Interact with the PlentyONE (formerly plentymarkets) REST API directly from n8n workflows, supporting dynamic request handling and automatic session management.","capabilities":["Automatic session handling with token caching and refresh","Custom Request operation with flexible payload handling for GET/HEAD (body to query params)","Request via JSON Definition for injecting complete request descriptions","Support for arrays of request objects to execute sequentially","Automatic pagination handling (Fetch All Pages toggle)","Support for custom headers and explicit query parameters"],"authentication":"API key required (via Username/Password credentials that store an access token)","commonUseCases":["Fetching product listings with automatic pagination","Managing marketplace listings and histories","Executing ad-hoc API calls without custom code","Batch processing multiple API requests in a single run"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-zarmoney.zarmoneyTrigger
package_name: n8n-nodes-zarmoney
display_name: ZarMoney Trigger
description: Starts the workflow when ZarMoney events occur.
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zarmoney
author_github_url: https://github.com/zarmoneyaccounting/
npm_package_name: n8n-nodes-zarmoney
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.777Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-zarmoney

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

  [ZarMoney](https://www.zarmoney.com) is the most powerful all-in-one accounting, invoicing & inventory solution.

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

  - [Installation](#installation)  
  - [Operations](#operations)  
  - [Triggers](#triggers)  
  - [Credentials](#credentials)  
  - [Compatibility](#compatibility)  
  - [License](#license)  

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

  ## Operations
  - Get one or more estimates
  - Get one or more invoices
  - Get one or more sales orders
  - Get one or more users

  ## Triggers
  - Create, update, and delete triggers for customers, estimates, invoices and sales orders.

  ## Credentials
  To use this node, you need to have a [ZarMoney](https://www.zarmoney.com) account and set up a new OAuth2.0 app under the development section of your ZarMoney account:

  - Go to the [ZarMoney Developer](https://accounts.zarmoney.com/Developers/Dashboard/) section.
  - Click on the "Create a new app" link, and follow the instructions.
  - The "Redirect URI" can be obtained from the connection popup of "n8n".
  - Copy and paste the Client ID and Secret from your ZarMoney app to the n8n connection settings.

  ## Compatibility
  The `n8n-nodes-zarmoney` has been tested with n8n `v1.115.3`.

  ## License
  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"The ZarMoney Trigger node initiates n8n workflows automatically when specific events occur within the ZarMoney accounting platform, such as changes to customers, estimates, invoices, or sales orders.","capabilities":["Retrieve multiple estimates","Retrieve multiple invoices","Retrieve multiple sales orders","Retrieve multiple users","Create triggers for customers","Create triggers for estimates","Create triggers for invoices","Create triggers for sales orders","Update triggers","Delete triggers"],"authentication":"OAuth2.0","commonUseCases":["Automate invoicing workflows when new invoices are created in ZarMoney","Sync customer data changes from ZarMoney to other systems","Trigger notifications or follow-up tasks when sales orders are updated","Monitor inventory or estimate changes across multiple records"],"limitations":["Requires a ZarMoney account and a pre-configured OAuth2.0 application","Compatibility tested only with n8n v1.115.3","Trigger creation is limited to customers, estimates, invoices, and sales orders"],"relatedNodes":[]}


node_type: n8n-nodes-zarmoney.zarmoney
package_name: n8n-nodes-zarmoney
display_name: ZarMoney
description: Consume ZarMoney API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: zarmoney
author_github_url: https://github.com/zarmoneyaccounting/
npm_package_name: n8n-nodes-zarmoney
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.779Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "estimate",
      "options": [
        {
          "name": "Estimate",
          "value": "estimate"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Sales Order",
          "value": "salesOrder"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "description": "Returns a single user by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users",
          "description": "Returns many users"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an estimate",
          "description": "Returns a single estimate by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many estimates",
          "description": "Returns many estimates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "estimate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an invoice",
          "description": "Returns a single invoice by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "description": "Returns many invoices"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a sales order",
          "description": "Returns a single sales order by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sales orders",
          "description": "Returns many sales orders"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesOrder"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "description": "Returns a single user by ID",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many users",
      "description": "Returns many users",
      "resource": "user"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an estimate",
      "description": "Returns a single estimate by ID",
      "resource": "estimate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many estimates",
      "description": "Returns many estimates",
      "resource": "estimate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an invoice",
      "description": "Returns a single invoice by ID",
      "resource": "invoice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "description": "Returns many invoices",
      "resource": "invoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a sales order",
      "description": "Returns a single sales order by ID",
      "resource": "salesOrder"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sales orders",
      "description": "Returns many sales orders",
      "resource": "salesOrder"
    }
  ]

npm_readme:
  # n8n-nodes-zarmoney

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

  [ZarMoney](https://www.zarmoney.com) is the most powerful all-in-one accounting, invoicing & inventory solution.

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

  - [Installation](#installation)  
  - [Operations](#operations)  
  - [Triggers](#triggers)  
  - [Credentials](#credentials)  
  - [Compatibility](#compatibility)  
  - [License](#license)  

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

  ## Operations
  - Get one or more estimates
  - Get one or more invoices
  - Get one or more sales orders
  - Get one or more users

  ## Triggers
  - Create, update, and delete triggers for customers, estimates, invoices and sales orders.

  ## Credentials
  To use this node, you need to have a [ZarMoney](https://www.zarmoney.com) account and set up a new OAuth2.0 app under the development section of your ZarMoney account:

  - Go to the [ZarMoney Developer](https://accounts.zarmoney.com/Developers/Dashboard/) section.
  - Click on the "Create a new app" link, and follow the instructions.
  - The "Redirect URI" can be obtained from the connection popup of "n8n".
  - Copy and paste the Client ID and Secret from your ZarMoney app to the n8n connection settings.

  ## Compatibility
  The `n8n-nodes-zarmoney` has been tested with n8n `v1.115.3`.

  ## License
  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the ZarMoney accounting, invoicing, and inventory solution to automate business workflows. It allows users to retrieve and manage estimates, invoices, sales orders, and users through the ZarMoney API.","capabilities":["Retrieve estimates","Retrieve invoices","Retrieve sales orders","Retrieve users","Create customers","Update customers","Delete customers","Create estimates","Update estimates","Delete estimates"],"authentication":"OAuth2.0","commonUseCases":["Automate invoice generation and tracking","Sync customer data between n8n and ZarMoney","Automate sales order processing","Manage inventory and estimates"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-liveblocks.liveblocks
package_name: n8n-nodes-liveblocks
display_name: Liveblocks
description: Call the Liveblocks REST API (rooms, comments, feeds, Yjs, AI, and more)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: nvie
author_github_url: https://github.com/liveblocks/
npm_package_name: n8n-nodes-liveblocks
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.780Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "room",
      "options": [
        {
          "name": "AI Copilot",
          "value": "aiCopilot",
          "description": "AI copilots"
        },
        {
          "name": "AI Knowledge",
          "value": "aiKnowledge",
          "description": "Knowledge sources"
        },
        {
          "name": "Attachment",
          "value": "attachment",
          "description": "Attachment metadata and URLs"
        },
        {
          "name": "Comment",
          "value": "comment",
          "description": "Comments and reactions"
        },
        {
          "name": "Feed",
          "value": "feed",
          "description": "Room feeds and feed messages"
        },
        {
          "name": "Group",
          "value": "group",
          "description": "Groups and membership"
        },
        {
          "name": "Inbox",
          "value": "inbox",
          "description": "Trigger and system inbox actions"
        },
        {
          "name": "Room",
          "value": "room",
          "description": "Rooms, presence, and broadcast"
        },
        {
          "name": "Storage",
          "value": "storage",
          "description": "Liveblocks Storage document"
        },
        {
          "name": "Thread",
          "value": "thread",
          "description": "Comment threads"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Inbox notifications, settings, and subscriptions"
        },
        {
          "name": "Yjs",
          "value": "yjs",
          "description": "Yjs documents and versions"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAiCopilots",
      "options": [
        {
          "name": "Get Many",
          "value": "getAiCopilots",
          "action": "Get many AI copilots",
          "description": "List AI copilots"
        },
        {
          "name": "Create",
          "value": "createAiCopilot",
          "action": "Create AI copilot",
          "description": "Create an AI copilot"
        },
        {
          "name": "Delete",
          "value": "deleteAiCopilot",
          "action": "Delete AI copilot",
          "description": "Delete an AI copilot"
        },
        {
          "name": "Get",
          "value": "getAiCopilot",
          "action": "Get AI copilot",
          "description": "Get an AI copilot"
        },
        {
          "name": "Update",
          "value": "updateAiCopilot",
          "action": "Update AI copilot",
          "description": "Update AI copilot configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiCopilot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getKnowledgeSources",
      "options": [
        {
          "name": "Get Many",
          "value": "getKnowledgeSources",
          "action": "Get many knowledge sources",
          "description": "List knowledge sources"
        },
        {
          "name": "Get",
          "value": "getKnowledgeSource",
          "action": "Get knowledge source",
          "description": "Get one knowledge source"
        },
        {
          "name": "Create Web Source",
          "value": "createWebKnowledgeSource",
          "action": "Create web knowledge source",
          "description": "Create web knowledge source"
        },
        {
          "name": "Create File Source",
          "value": "createFileKnowledgeSource",
          "action": "Create file knowledge source",
          "description": "Upload file knowledge source (binary input)"
        },
        {
          "name": "Delete File Source",
          "value": "deleteFileKnowledgeSource",
          "action": "Delete file knowledge source",
          "description": "Delete file knowledge source"
        },
        {
          "name": "Get File Markdown",
          "value": "getFileKnowledgeSourceMarkdown",
          "action": "Get file knowledge markdown",
          "description": "Get markdown content for file source"
        },
        {
          "name": "Delete Web Source",
          "value": "deleteWebKnowledgeSource",
          "action": "Delete web knowledge source",
          "description": "Delete web knowledge source"
        },
        {
          "name": "Get Web Links",
          "value": "getWebKnowledgeSourceLinks",
          "action": "Get web knowledge source links",
          "description": "List indexed links for web source"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiKnowledge"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAttachment",
      "options": [
        {
          "name": "Get",
          "value": "getAttachment",
          "action": "Get attachment",
          "description": "Attachment metadata and presigned URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createComment",
      "options": [
        {
          "name": "Create",
          "value": "createComment",
          "action": "Create a comment",
          "description": "Add a comment to a thread"
        },
        {
          "name": "Delete",
          "value": "deleteComment",
          "action": "Delete a comment",
          "description": "Delete a comment"
        },
        {
          "name": "Get",
          "value": "getComment",
          "action": "Get a comment",
          "description": "Get a comment"
        },
        {
          "name": "Edit",
          "value": "editComment",
          "action": "Edit a comment",
          "description": "Edit a comment body"
        },
        {
          "name": "Add Reaction",
          "value": "addCommentReaction",
          "action": "Add comment reaction",
          "description": "Add emoji reaction"
        },
        {
          "name": "Remove Reaction",
          "value": "removeCommentReaction",
          "action": "Remove comment reaction",
          "description": "Remove emoji reaction"
        },
        {
          "name": "Edit Metadata",
          "value": "editCommentMetadata",
          "action": "Edit comment metadata",
          "description": "Edit comment metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFeeds",
      "options": [
        {
          "name": "Get Many",
          "value": "getFeeds",
          "action": "Get many feeds",
          "description": "List feeds in a room (pagination via cursor and nextCursor)"
        },
        {
          "name": "Create",
          "value": "createFeed",
          "action": "Create a feed",
          "description": "Create a feed in a room"
        },
        {
          "name": "Delete",
          "value": "deleteFeed",
          "action": "Delete a feed",
          "description": "Delete a feed"
        },
        {
          "name": "Get",
          "value": "getFeed",
          "action": "Get a feed",
          "description": "Get a feed by ID"
        },
        {
          "name": "Update",
          "value": "updateFeed",
          "action": "Update a feed",
          "description": "Update feed metadata"
        },
        {
          "name": "Get Many Messages",
          "value": "getFeedMessages",
          "action": "Get many feed messages",
          "description": "List messages in a feed (pagination via cursor and nextCursor)"
        },
        {
          "name": "Create Message",
          "value": "createFeedMessage",
          "action": "Create a feed message",
          "description": "Create a message in a feed"
        },
        {
          "name": "Delete Message",
          "value": "deleteFeedMessage",
          "action": "Delete a feed message",
          "description": "Delete a feed message"
        },
        {
          "name": "Update Message",
          "value": "updateFeedMessage",
          "action": "Update a feed message",
          "description": "Update a feed message payload"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feed"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getGroups",
      "options": [
        {
          "name": "Get Many",
          "value": "getGroups",
          "action": "Get many groups",
          "description": "List groups"
        },
        {
          "name": "Create",
          "value": "createGroup",
          "action": "Create a group",
          "description": "Create a group"
        },
        {
          "name": "Delete",
          "value": "deleteGroup",
          "action": "Delete a group",
          "description": "Delete a group"
        },
        {
          "name": "Get",
          "value": "getGroup",
          "action": "Get a group",
          "description": "Get a group"
        },
        {
          "name": "Add Members",
          "value": "addGroupMembers",
          "action": "Add group members",
          "description": "Add members to group"
        },
        {
          "name": "Remove Members",
          "value": "removeGroupMembers",
          "action": "Remove group members",
          "description": "Remove members from group"
        },
        {
          "name": "Get User Groups",
          "value": "getUserGroups",
          "action": "Get user groups",
          "description": "List groups for a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "triggerInboxNotification",
      "options": [
        {
          "name": "Trigger Notification",
          "value": "triggerInboxNotification",
          "action": "Trigger inbox notification",
          "description": "Trigger an inbox notification"
        },
        {
          "name": "Mark As Read",
          "value": "markInboxNotificationAsRead",
          "action": "Mark inbox notification read",
          "description": "Mark an inbox notification as read"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRooms",
      "options": [
        {
          "name": "Get Many",
          "value": "getRooms",
          "action": "Get many rooms",
          "description": "List rooms with optional filters and pagination"
        },
        {
          "name": "Create",
          "value": "createRoom",
          "action": "Create a room",
          "description": "Create a room (enable Idempotent Create in parameters when needed)"
        },
        {
          "name": "Delete",
          "value": "deleteRoom",
          "action": "Delete a room",
          "description": "Permanently delete a room"
        },
        {
          "name": "Get",
          "value": "getRoom",
          "action": "Get a room",
          "description": "Get a room by ID"
        },
        {
          "name": "Update",
          "value": "updateRoom",
          "action": "Update a room",
          "description": "Update room properties"
        },
        {
          "name": "Prewarm",
          "value": "prewarmRoom",
          "action": "Prewarm a room",
          "description": "Prewarm a room for faster connections"
        },
        {
          "name": "Upsert",
          "value": "upsertRoom",
          "action": "Upsert a room",
          "description": "Create or update a room by ID"
        },
        {
          "name": "Update Room ID",
          "value": "updateRoomId",
          "action": "Update room ID",
          "description": "Change a room ID"
        },
        {
          "name": "Update Organization ID",
          "value": "updateRoomOrganizationId",
          "action": "Update room organization ID",
          "description": "Move a room to another organization"
        },
        {
          "name": "Get Active Users",
          "value": "getActiveUsers",
          "action": "Get active users in a room",
          "description": "Users currently present in the room"
        },
        {
          "name": "Set Presence",
          "value": "setPresence",
          "action": "Set presence in a room",
          "description": "Set ephemeral REST presence for a user"
        },
        {
          "name": "Broadcast Event",
          "value": "broadcastEvent",
          "action": "Broadcast event to room",
          "description": "Broadcast a custom event to everyone in the room"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "room"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteStorageDocument",
      "options": [
        {
          "name": "Delete",
          "value": "deleteStorageDocument",
          "action": "Delete room storage",
          "description": "Delete all Storage data for a room"
        },
        {
          "name": "Get",
          "value": "getStorageDocument",
          "action": "Get room storage",
          "description": "Get Storage document (choose Format in query parameters)"
        },
        {
          "name": "Initialize",
          "value": "initializeStorageDocument",
          "action": "Initialize room storage",
          "description": "Initialize or reinitialize Storage (LiveObject root and initial data required)"
        },
        {
          "name": "JSON Patch",
          "value": "patchStorageDocument",
          "action": "Patch room storage",
          "description": "Apply JSON Patch operations to Storage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "storage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getThreads",
      "options": [
        {
          "name": "Get Many",
          "value": "getThreads",
          "action": "Get many threads",
          "description": "List threads in a room"
        },
        {
          "name": "Create",
          "value": "createThread",
          "action": "Create a thread",
          "description": "Create a thread with first comment"
        },
        {
          "name": "Delete",
          "value": "deleteThread",
          "action": "Delete a thread",
          "description": "Delete a thread"
        },
        {
          "name": "Get",
          "value": "getThread",
          "action": "Get a thread",
          "description": "Get a thread"
        },
        {
          "name": "Edit Metadata",
          "value": "editThreadMetadata",
          "action": "Edit thread metadata",
          "description": "Edit thread metadata"
        },
        {
          "name": "Mark Resolved",
          "value": "markThreadAsResolved",
          "action": "Mark thread resolved",
          "description": "Mark thread resolved"
        },
        {
          "name": "Mark Unresolved",
          "value": "markThreadAsUnresolved",
          "action": "Mark thread unresolved",
          "description": "Mark thread unresolved"
        },
        {
          "name": "Subscribe",
          "value": "subscribeToThread",
          "action": "Subscribe to thread",
          "description": "Subscribe a user to a thread"
        },
        {
          "name": "Unsubscribe",
          "value": "unsubscribeFromThread",
          "action": "Unsubscribe from thread",
          "description": "Unsubscribe from a thread"
        },
        {
          "name": "Get Subscriptions",
          "value": "getThreadSubscriptions",
          "action": "Get thread subscriptions",
          "description": "List thread subscriptions"
        },
        {
          "name": "Get Inbox Notifications",
          "value": "getThreadInboxNotifications",
          "action": "Get thread inbox notifications",
          "description": "Inbox notifications for a thread"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "thread"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteInboxNotification",
      "options": [
        {
          "name": "Delete Inbox Notification",
          "value": "deleteInboxNotification",
          "action": "Delete inbox notification",
          "description": "Delete one inbox notification"
        },
        {
          "name": "Get Inbox Notification",
          "value": "getInboxNotification",
          "action": "Get inbox notification",
          "description": "Get one inbox notification"
        },
        {
          "name": "Delete All Inbox Notifications",
          "value": "deleteAllInboxNotifications",
          "action": "Delete all inbox notifications",
          "description": "Delete all inbox notifications for user"
        },
        {
          "name": "Get Many Inbox Notifications",
          "value": "getInboxNotifications",
          "action": "Get many inbox notifications",
          "description": "List inbox notifications"
        },
        {
          "name": "Delete Notification Settings",
          "value": "deleteNotificationSettings",
          "action": "Delete notification settings",
          "description": "Delete user notification settings"
        },
        {
          "name": "Get Notification Settings",
          "value": "getNotificationSettings",
          "action": "Get notification settings",
          "description": "Get user notification settings"
        },
        {
          "name": "Update Notification Settings",
          "value": "updateNotificationSettings",
          "action": "Update notification settings",
          "description": "Update user notification settings"
        },
        {
          "name": "Delete Room Subscription Settings",
          "value": "deleteRoomSubscriptionSettings",
          "action": "Delete room subscription settings",
          "description": "Delete per-room subscription settings"
        },
        {
          "name": "Get Room Subscription Settings",
          "value": "getRoomSubscriptionSettings",
          "action": "Get room subscription settings",
          "description": "Get subscription settings for user in room"
        },
        {
          "name": "Update Room Subscription Settings",
          "value": "updateRoomSubscriptionSettings",
          "action": "Update room subscription settings",
          "description": "Update subscription settings for user in room"
        },
        {
          "name": "Get Many Room Subscription Settings",
          "value": "getUserRoomSubscriptionSettings",
          "action": "Get many room subscription settings",
          "description": "List room subscription settings for user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getYjsDocument",
      "options": [
        {
          "name": "Get Document (JSON)",
          "value": "getYjsDocument",
          "action": "Get Yjs document",
          "description": "Yjs document as JSON"
        },
        {
          "name": "Send Binary Update",
          "value": "sendYjsBinaryUpdate",
          "action": "Send Yjs binary update",
          "description": "Upload a Yjs binary update (binary input)"
        },
        {
          "name": "Get Binary Update",
          "value": "getYjsDocumentAsBinaryUpdate",
          "action": "Get Yjs document as binary",
          "description": "Download Yjs state as a binary update"
        },
        {
          "name": "List Versions",
          "value": "getYjsVersions",
          "action": "List Yjs versions",
          "description": "List Yjs version snapshots"
        },
        {
          "name": "Get Version (Binary)",
          "value": "getYjsVersion",
          "action": "Get Yjs version binary",
          "description": "Download a specific Yjs version as binary"
        },
        {
          "name": "Create Version Snapshot",
          "value": "createYjsVersion",
          "action": "Create Yjs version snapshot",
          "description": "Create a new Yjs version snapshot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "yjs"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAiCopilots",
      "action": "Get many AI copilots",
      "description": "List AI copilots",
      "resource": "aiCopilot"
    },
    {
      "name": "Create",
      "value": "createAiCopilot",
      "action": "Create AI copilot",
      "description": "Create an AI copilot",
      "resource": "aiCopilot"
    },
    {
      "name": "Delete",
      "value": "deleteAiCopilot",
      "action": "Delete AI copilot",
      "description": "Delete an AI copilot",
      "resource": "aiCopilot"
    },
    {
      "name": "Get",
      "value": "getAiCopilot",
      "action": "Get AI copilot",
      "description": "Get an AI copilot",
      "resource": "aiCopilot"
    },
    {
      "name": "Update",
      "value": "updateAiCopilot",
      "action": "Update AI copilot",
      "description": "Update AI copilot configuration",
      "resource": "aiCopilot"
    },
    {
      "name": "Get Many",
      "value": "getKnowledgeSources",
      "action": "Get many knowledge sources",
      "description": "List knowledge sources",
      "resource": "aiKnowledge"
    },
    {
      "name": "Get",
      "value": "getKnowledgeSource",
      "action": "Get knowledge source",
      "description": "Get one knowledge source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Create Web Source",
      "value": "createWebKnowledgeSource",
      "action": "Create web knowledge source",
      "description": "Create web knowledge source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Create File Source",
      "value": "createFileKnowledgeSource",
      "action": "Create file knowledge source",
      "description": "Upload file knowledge source (binary input)",
      "resource": "aiKnowledge"
    },
    {
      "name": "Delete File Source",
      "value": "deleteFileKnowledgeSource",
      "action": "Delete file knowledge source",
      "description": "Delete file knowledge source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Get File Markdown",
      "value": "getFileKnowledgeSourceMarkdown",
      "action": "Get file knowledge markdown",
      "description": "Get markdown content for file source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Delete Web Source",
      "value": "deleteWebKnowledgeSource",
      "action": "Delete web knowledge source",
      "description": "Delete web knowledge source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Get Web Links",
      "value": "getWebKnowledgeSourceLinks",
      "action": "Get web knowledge source links",
      "description": "List indexed links for web source",
      "resource": "aiKnowledge"
    },
    {
      "name": "Get",
      "value": "getAttachment",
      "action": "Get attachment",
      "description": "Attachment metadata and presigned URL",
      "resource": "attachment"
    },
    {
      "name": "Create",
      "value": "createComment",
      "action": "Create a comment",
      "description": "Add a comment to a thread",
      "resource": "comment"
    },
    {
      "name": "Delete",
      "value": "deleteComment",
      "action": "Delete a comment",
      "description": "Delete a comment",
      "resource": "comment"
    },
    {
      "name": "Get",
      "value": "getComment",
      "action": "Get a comment",
      "description": "Get a comment",
      "resource": "comment"
    },
    {
      "name": "Edit",
      "value": "editComment",
      "action": "Edit a comment",
      "description": "Edit a comment body",
      "resource": "comment"
    },
    {
      "name": "Add Reaction",
      "value": "addCommentReaction",
      "action": "Add comment reaction",
      "description": "Add emoji reaction",
      "resource": "comment"
    },
    {
      "name": "Remove Reaction",
      "value": "removeCommentReaction",
      "action": "Remove comment reaction",
      "description": "Remove emoji reaction",
      "resource": "comment"
    },
    {
      "name": "Edit Metadata",
      "value": "editCommentMetadata",
      "action": "Edit comment metadata",
      "description": "Edit comment metadata",
      "resource": "comment"
    },
    {
      "name": "Get Many",
      "value": "getFeeds",
      "action": "Get many feeds",
      "description": "List feeds in a room (pagination via cursor and nextCursor)",
      "resource": "feed"
    },
    {
      "name": "Create",
      "value": "createFeed",
      "action": "Create a feed",
      "description": "Create a feed in a room",
      "resource": "feed"
    },
    {
      "name": "Delete",
      "value": "deleteFeed",
      "action": "Delete a feed",
      "description": "Delete a feed",
      "resource": "feed"
    },
    {
      "name": "Get",
      "value": "getFeed",
      "action": "Get a feed",
      "description": "Get a feed by ID",
      "resource": "feed"
    },
    {
      "name": "Update",
      "value": "updateFeed",
      "action": "Update a feed",
      "description": "Update feed metadata",
      "resource": "feed"
    },
    {
      "name": "Get Many Messages",
      "value": "getFeedMessages",
      "action": "Get many feed messages",
      "description": "List messages in a feed (pagination via cursor and nextCursor)",
      "resource": "feed"
    },
    {
      "name": "Create Message",
      "value": "createFeedMessage",
      "action": "Create a feed message",
      "description": "Create a message in a feed",
      "resource": "feed"
    },
    {
      "name": "Delete Message",
      "value": "deleteFeedMessage",
      "action": "Delete a feed message",
      "description": "Delete a feed message",
      "resource": "feed"
    },
    {
      "name": "Update Message",
      "value": "updateFeedMessage",
      "action": "Update a feed message",
      "description": "Update a feed message payload",
      "resource": "feed"
    },
    {
      "name": "Get Many",
      "value": "getGroups",
      "action": "Get many groups",
      "description": "List groups",
      "resource": "group"
    },
    {
      "name": "Create",
      "value": "createGroup",
      "action": "Create a group",
      "description": "Create a group",
      "resource": "group"
    },
    {
      "name": "Delete",
      "value": "deleteGroup",
      "action": "Delete a group",
      "description": "Delete a group",
      "resource": "group"
    },
    {
      "name": "Get",
      "value": "getGroup",
      "action": "Get a group",
      "description": "Get a group",
      "resource": "group"
    },
    {
      "name": "Add Members",
      "value": "addGroupMembers",
      "action": "Add group members",
      "description": "Add members to group",
      "resource": "group"
    },
    {
      "name": "Remove Members",
      "value": "removeGroupMembers",
      "action": "Remove group members",
      "description": "Remove members from group",
      "resource": "group"
    },
    {
      "name": "Get User Groups",
      "value": "getUserGroups",
      "action": "Get user groups",
      "description": "List groups for a user",
      "resource": "group"
    },
    {
      "name": "Trigger Notification",
      "value": "triggerInboxNotification",
      "action": "Trigger inbox notification",
      "description": "Trigger an inbox notification",
      "resource": "inbox"
    },
    {
      "name": "Mark As Read",
      "value": "markInboxNotificationAsRead",
      "action": "Mark inbox notification read",
      "description": "Mark an inbox notification as read",
      "resource": "inbox"
    },
    {
      "name": "Get Many",
      "value": "getRooms",
      "action": "Get many rooms",
      "description": "List rooms with optional filters and pagination",
      "resource": "room"
    },
    {
      "name": "Create",
      "value": "createRoom",
      "action": "Create a room",
      "description": "Create a room (enable Idempotent Create in parameters when needed)",
      "resource": "room"
    },
    {
      "name": "Delete",
      "value": "deleteRoom",
      "action": "Delete a room",
      "description": "Permanently delete a room",
      "resource": "room"
    },
    {
      "name": "Get",
      "value": "getRoom",
      "action": "Get a room",
      "description": "Get a room by ID",
      "resource": "room"
    },
    {
      "name": "Update",
      "value": "updateRoom",
      "action": "Update a room",
      "description": "Update room properties",
      "resource": "room"
    },
    {
      "name": "Prewarm",
      "value": "prewarmRoom",
      "action": "Prewarm a room",
      "description": "Prewarm a room for faster connections",
      "resource": "room"
    },
    {
      "name": "Upsert",
      "value": "upsertRoom",
      "action": "Upsert a room",
      "description": "Create or update a room by ID",
      "resource": "room"
    },
    {
      "name": "Update Room ID",
      "value": "updateRoomId",
      "action": "Update room ID",
      "description": "Change a room ID",
      "resource": "room"
    },
    {
      "name": "Update Organization ID",
      "value": "updateRoomOrganizationId",
      "action": "Update room organization ID",
      "description": "Move a room to another organization",
      "resource": "room"
    },
    {
      "name": "Get Active Users",
      "value": "getActiveUsers",
      "action": "Get active users in a room",
      "description": "Users currently present in the room",
      "resource": "room"
    },
    {
      "name": "Set Presence",
      "value": "setPresence",
      "action": "Set presence in a room",
      "description": "Set ephemeral REST presence for a user",
      "resource": "room"
    },
    {
      "name": "Broadcast Event",
      "value": "broadcastEvent",
      "action": "Broadcast event to room",
      "description": "Broadcast a custom event to everyone in the room",
      "resource": "room"
    },
    {
      "name": "Delete",
      "value": "deleteStorageDocument",
      "action": "Delete room storage",
      "description": "Delete all Storage data for a room",
      "resource": "storage"
    },
    {
      "name": "Get",
      "value": "getStorageDocument",
      "action": "Get room storage",
      "description": "Get Storage document (choose Format in query parameters)",
      "resource": "storage"
    },
    {
      "name": "Initialize",
      "value": "initializeStorageDocument",
      "action": "Initialize room storage",
      "description": "Initialize or reinitialize Storage (LiveObject root and initial data required)",
      "resource": "storage"
    },
    {
      "name": "JSON Patch",
      "value": "patchStorageDocument",
      "action": "Patch room storage",
      "description": "Apply JSON Patch operations to Storage",
      "resource": "storage"
    },
    {
      "name": "Get Many",
      "value": "getThreads",
      "action": "Get many threads",
      "description": "List threads in a room",
      "resource": "thread"
    },
    {
      "name": "Create",
      "value": "createThread",
      "action": "Create a thread",
      "description": "Create a thread with first comment",
      "resource": "thread"
    },
    {
      "name": "Delete",
      "value": "deleteThread",
      "action": "Delete a thread",
      "description": "Delete a thread",
      "resource": "thread"
    },
    {
      "name": "Get",
      "value": "getThread",
      "action": "Get a thread",
      "description": "Get a thread",
      "resource": "thread"
    },
    {
      "name": "Edit Metadata",
      "value": "editThreadMetadata",
      "action": "Edit thread metadata",
      "description": "Edit thread metadata",
      "resource": "thread"
    },
    {
      "name": "Mark Resolved",
      "value": "markThreadAsResolved",
      "action": "Mark thread resolved",
      "description": "Mark thread resolved",
      "resource": "thread"
    },
    {
      "name": "Mark Unresolved",
      "value": "markThreadAsUnresolved",
      "action": "Mark thread unresolved",
      "description": "Mark thread unresolved",
      "resource": "thread"
    },
    {
      "name": "Subscribe",
      "value": "subscribeToThread",
      "action": "Subscribe to thread",
      "description": "Subscribe a user to a thread",
      "resource": "thread"
    },
    {
      "name": "Unsubscribe",
      "value": "unsubscribeFromThread",
      "action": "Unsubscribe from thread",
      "description": "Unsubscribe from a thread",
      "resource": "thread"
    },
    {
      "name": "Get Subscriptions",
      "value": "getThreadSubscriptions",
      "action": "Get thread subscriptions",
      "description": "List thread subscriptions",
      "resource": "thread"
    },
    {
      "name": "Get Inbox Notifications",
      "value": "getThreadInboxNotifications",
      "action": "Get thread inbox notifications",
      "description": "Inbox notifications for a thread",
      "resource": "thread"
    },
    {
      "name": "Delete Inbox Notification",
      "value": "deleteInboxNotification",
      "action": "Delete inbox notification",
      "description": "Delete one inbox notification",
      "resource": "user"
    },
    {
      "name": "Get Inbox Notification",
      "value": "getInboxNotification",
      "action": "Get inbox notification",
      "description": "Get one inbox notification",
      "resource": "user"
    },
    {
      "name": "Delete All Inbox Notifications",
      "value": "deleteAllInboxNotifications",
      "action": "Delete all inbox notifications",
      "description": "Delete all inbox notifications for user",
      "resource": "user"
    },
    {
      "name": "Get Many Inbox Notifications",
      "value": "getInboxNotifications",
      "action": "Get many inbox notifications",
      "description": "List inbox notifications",
      "resource": "user"
    },
    {
      "name": "Delete Notification Settings",
      "value": "deleteNotificationSettings",
      "action": "Delete notification settings",
      "description": "Delete user notification settings",
      "resource": "user"
    },
    {
      "name": "Get Notification Settings",
      "value": "getNotificationSettings",
      "action": "Get notification settings",
      "description": "Get user notification settings",
      "resource": "user"
    },
    {
      "name": "Update Notification Settings",
      "value": "updateNotificationSettings",
      "action": "Update notification settings",
      "description": "Update user notification settings",
      "resource": "user"
    },
    {
      "name": "Delete Room Subscription Settings",
      "value": "deleteRoomSubscriptionSettings",
      "action": "Delete room subscription settings",
      "description": "Delete per-room subscription settings",
      "resource": "user"
    },
    {
      "name": "Get Room Subscription Settings",
      "value": "getRoomSubscriptionSettings",
      "action": "Get room subscription settings",
      "description": "Get subscription settings for user in room",
      "resource": "user"
    },
    {
      "name": "Update Room Subscription Settings",
      "value": "updateRoomSubscriptionSettings",
      "action": "Update room subscription settings",
      "description": "Update subscription settings for user in room",
      "resource": "user"
    },
    {
      "name": "Get Many Room Subscription Settings",
      "value": "getUserRoomSubscriptionSettings",
      "action": "Get many room subscription settings",
      "description": "List room subscription settings for user",
      "resource": "user"
    },
    {
      "name": "Get Document (JSON)",
      "value": "getYjsDocument",
      "action": "Get Yjs document",
      "description": "Yjs document as JSON",
      "resource": "yjs"
    },
    {
      "name": "Send Binary Update",
      "value": "sendYjsBinaryUpdate",
      "action": "Send Yjs binary update",
      "description": "Upload a Yjs binary update (binary input)",
      "resource": "yjs"
    },
    {
      "name": "Get Binary Update",
      "value": "getYjsDocumentAsBinaryUpdate",
      "action": "Get Yjs document as binary",
      "description": "Download Yjs state as a binary update",
      "resource": "yjs"
    },
    {
      "name": "List Versions",
      "value": "getYjsVersions",
      "action": "List Yjs versions",
      "description": "List Yjs version snapshots",
      "resource": "yjs"
    },
    {
      "name": "Get Version (Binary)",
      "value": "getYjsVersion",
      "action": "Get Yjs version binary",
      "description": "Download a specific Yjs version as binary",
      "resource": "yjs"
    },
    {
      "name": "Create Version Snapshot",
      "value": "createYjsVersion",
      "action": "Create Yjs version snapshot",
      "description": "Create a new Yjs version snapshot",
      "resource": "yjs"
    }
  ]

npm_readme:
  <p align="center">
    <a href="https://liveblocks.io#gh-light-mode-only">
      <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-light.svg" alt="Liveblocks" />
    </a>
    <a href="https://liveblocks.io#gh-dark-mode-only">
      <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-dark.svg" alt="Liveblocks" />
    </a>
  </p>

  # Liveblocks n8n nodes

  <p>
    <a href="https://npmjs.org/package/n8n-nodes-liveblocks"><img src="https://img.shields.io/npm/v/n8n-nodes-liveblocks?style=flat&label=npm&color=c33" alt="NPM" /></a>
    <a href="https://github.com/liveblocks/n8n-nodes-liveblocks/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License" /></a>
  </p>

  Official Liveblocks [n8n](https://n8n.io/) node repository. Use these nodes to download and modify room storage, interact with threads, comments, and attachments, send notifications and more in realtime.

  ## Install

  Install this package as a [community node](https://docs.n8n.io/integrations/community-nodes/installation/) in your n8n instance.

  1. Open n8n and go to **Settings** → **Community nodes**.
  2. Select **Install** and enter `n8n-nodes-liveblocks` as the npm package name.
  3. Check **☑︎ I understand…** and click **Install**.

  _Liveblocks_ and _Liveblocks Trigger_ will now appear in the node palette.

  ## Operations

  The package provides two nodes.

  ### Liveblocks (action node)

  Calls the [Liveblocks REST API](https://liveblocks.io/docs/api-reference/rest-api-endpoints). Choose a **resource**, then an **operation**. Operations map to the API (rooms, storage, Yjs, comments, inbox, webhooks-related server flows, etc.).

  | Resource | What you can do (examples) |
  | --- | --- |
  | **Room** | List, create, update, delete, and upsert rooms; change room or organization IDs; prewarm; list active users; **set presence**; **broadcast** custom events to the room. |
  | **Storage** | Get, initialize, patch (JSON Patch), or delete Liveblocks storage documents. |
  | **Yjs** | Read Yjs state, send binary updates, list versions, and create or fetch specific versions. |
  | **Thread** | CRUD threads; edit metadata; resolve/unresolve; subscribe/unsubscribe; list subscriptions and thread inbox notifications. |
  | **Comment** | Create, read, edit, and delete comments; add/remove reactions; edit metadata. |
  | **Attachment** | Download comment attachments (binary response when applicable). |
  | **User** | Identify users for Liveblocks features that require user metadata. |
  | **Inbox** | Inbox notifications, notification settings, room subscription settings, mark-as-read, and related triggers. |
  | **Group** | Manage groups and membership; list a user’s groups. |
  | **AI Copilot** | List, create, read, update, and delete AI copilot configurations. |
  | **AI Knowledge** | Manage web and file knowledge sources, fetch markdown or links, and delete sources. |

  The node builds requests from the fields you configure in the UI; some endpoints accept raw JSON for advanced bodies (for example JSON Patch or broadcast payloads). Refer to the [Liveblocks REST API reference](https://liveblocks.io/docs/api-reference/rest-api-endpoints) for request and response shapes.

  ### Liveblocks Trigger (webhook)

  Starts a workflow when Liveblocks sends a **webhook** to n8n. Configure the webhook URL from the trigger in your [Liveblocks dashboard](https://liveblocks.io/dashboard) webhook settings. You can filter by **event type** or leave the filter empty to receive all supported types.

  Supported event filters include: `commentCreated`, `commentDeleted`, `commentEdited`, `notification`, `storageUpdated`, `threadCreated`, `threadDeleted`, `threadMetadataUpdated`, `userEntered`, `userLeft`, `yjsUpdate`. The trigger verifies the request using your **webhook signing secret** before running the workflow.

  ## Credentials

  ### Liveblocks API (required for the Liveblocks action node)

  1. Create or open a project in the [Liveblocks dashboard](https://liveblocks.io/dashboard).
  2. Copy the **secret key** (`sk_…`) from project settings.
  3. In n8n, create a credential of type **Liveblocks API** and paste the secret key.

  The credential test calls the REST API (for example listing rooms) to confirm the key works.

  ### Liveblocks Webhook Signing Secret (required for Liveblocks Trigger)

  1. In the Liveblocks dashboard, open your project’s **webhook** configuration and copy the **signing secret** (`whsec_…`).
  2. In n8n, create a credential of type **Liveblocks Webhook Signing Secret API** and paste that value.

  This secret is only used to verify incoming webhook signatures; it is not validated with a live HTTP test in the credentials UI.

  ## Compatibility

  - This package declares **`n8nNodesApiVersion` 1** in `package.json`, in line with current n8n community node conventions.
  - It lists **`n8n-workflow`** as a peer dependency (version resolved by your n8n install).

  Use a [current n8n release](https://docs.n8n.io/release-notes/) that supports community nodes and API version 1. If you hit a compatibility issue, report it with your n8n version and this package version.

  ## Usage

  - **Action node**: Add **Liveblocks**, select **resource** and **operation**, then fill the parameters. Map data from previous nodes into room IDs, user IDs, and bodies as needed. Use **Execute step** while designing to inspect API responses and errors.
  - **Trigger**: Add **Liveblocks Trigger**, set credentials, copy the **webhook URL** into the Liveblocks dashboard, and choose which events to listen for. Use n8n’s test URL while building, then switch to the production URL when the workflow is active.
  - **Errors**: Failed API calls surface as n8n errors with HTTP status and message when the API returns them. If webhooks fail verification, check that the signing secret matches the project and that the request is actually from Liveblocks.

  New to n8n? See [Try it out](https://docs.n8n.io/try-it-out/) in the n8n docs.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Liveblocks documentation](https://liveblocks.io/docs)
  - [Liveblocks REST API reference](https://liveblocks.io/docs/api-reference/rest-api-endpoints)
  - [Liveblocks webhooks](https://liveblocks.io/docs/platform/webhooks)
  - [Liveblocks dashboard](https://liveblocks.io/dashboard)

  ## Local development

  For local development of this repository, clone the project and use the [n8n node CLI](https://docs.n8n.io/integrations/creating-nodes/build/n8n-node-cli/) (`n8n-node dev`, `n8n-node build`) as described in the project’s contributor docs.

  ## Version history

  See [CHANGELOG.md](CHANGELOG.md) for a complete changelog.

ai_documentation_summary:
  {"purpose":"Enables integration with the Liveblocks real-time collaboration platform by calling its REST API to manage rooms, storage, threads, comments, and AI features, or by triggering workflows based on Liveblocks events.","capabilities":["Create, update, and delete rooms","Manage room storage documents (get, patch, delete)","Handle Yjs state (read, send updates, list versions)","Create, edit, and delete threads with metadata management","Manage comments and reactions","Download comment attachments","Identify users and manage group memberships","Handle inbox notifications and settings","Configure AI Copilot and Knowledge sources","Broadcast custom events to rooms"],"authentication":"API key required (secret key for actions, webhook signing secret for triggers)","commonUseCases":["Building real-time collaborative applications with live document editing","Managing team communication threads and comments","Implementing real-time notifications and user presence","Integrating AI-powered features like copilot and knowledge bases","Synchronizing collaborative state using Yjs"],"limitations":["Webhook verification relies on the signing secret and does not perform live HTTP tests in the credentials UI","Some advanced endpoints may require raw JSON configuration in the request body"],"relatedNodes":["n8n-nodes-webhook","n8n-nodes-ai"]}


node_type: n8n-nodes-liveblocks.liveblocksTrigger
package_name: n8n-nodes-liveblocks
display_name: Liveblocks Trigger
description: Receives webhook events from Liveblocks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: nvie
author_github_url: https://github.com/liveblocks/
npm_package_name: n8n-nodes-liveblocks
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.782Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  <p align="center">
    <a href="https://liveblocks.io#gh-light-mode-only">
      <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-light.svg" alt="Liveblocks" />
    </a>
    <a href="https://liveblocks.io#gh-dark-mode-only">
      <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-dark.svg" alt="Liveblocks" />
    </a>
  </p>

  # Liveblocks n8n nodes

  <p>
    <a href="https://npmjs.org/package/n8n-nodes-liveblocks"><img src="https://img.shields.io/npm/v/n8n-nodes-liveblocks?style=flat&label=npm&color=c33" alt="NPM" /></a>
    <a href="https://github.com/liveblocks/n8n-nodes-liveblocks/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License" /></a>
  </p>

  Official Liveblocks [n8n](https://n8n.io/) node repository. Use these nodes to download and modify room storage, interact with threads, comments, and attachments, send notifications and more in realtime.

  ## Install

  Install this package as a [community node](https://docs.n8n.io/integrations/community-nodes/installation/) in your n8n instance.

  1. Open n8n and go to **Settings** → **Community nodes**.
  2. Select **Install** and enter `n8n-nodes-liveblocks` as the npm package name.
  3. Check **☑︎ I understand…** and click **Install**.

  _Liveblocks_ and _Liveblocks Trigger_ will now appear in the node palette.

  ## Operations

  The package provides two nodes.

  ### Liveblocks (action node)

  Calls the [Liveblocks REST API](https://liveblocks.io/docs/api-reference/rest-api-endpoints). Choose a **resource**, then an **operation**. Operations map to the API (rooms, storage, Yjs, comments, inbox, webhooks-related server flows, etc.).

  | Resource | What you can do (examples) |
  | --- | --- |
  | **Room** | List, create, update, delete, and upsert rooms; change room or organization IDs; prewarm; list active users; **set presence**; **broadcast** custom events to the room. |
  | **Storage** | Get, initialize, patch (JSON Patch), or delete Liveblocks storage documents. |
  | **Yjs** | Read Yjs state, send binary updates, list versions, and create or fetch specific versions. |
  | **Thread** | CRUD threads; edit metadata; resolve/unresolve; subscribe/unsubscribe; list subscriptions and thread inbox notifications. |
  | **Comment** | Create, read, edit, and delete comments; add/remove reactions; edit metadata. |
  | **Attachment** | Download comment attachments (binary response when applicable). |
  | **User** | Identify users for Liveblocks features that require user metadata. |
  | **Inbox** | Inbox notifications, notification settings, room subscription settings, mark-as-read, and related triggers. |
  | **Group** | Manage groups and membership; list a user’s groups. |
  | **AI Copilot** | List, create, read, update, and delete AI copilot configurations. |
  | **AI Knowledge** | Manage web and file knowledge sources, fetch markdown or links, and delete sources. |

  The node builds requests from the fields you configure in the UI; some endpoints accept raw JSON for advanced bodies (for example JSON Patch or broadcast payloads). Refer to the [Liveblocks REST API reference](https://liveblocks.io/docs/api-reference/rest-api-endpoints) for request and response shapes.

  ### Liveblocks Trigger (webhook)

  Starts a workflow when Liveblocks sends a **webhook** to n8n. Configure the webhook URL from the trigger in your [Liveblocks dashboard](https://liveblocks.io/dashboard) webhook settings. You can filter by **event type** or leave the filter empty to receive all supported types.

  Supported event filters include: `commentCreated`, `commentDeleted`, `commentEdited`, `notification`, `storageUpdated`, `threadCreated`, `threadDeleted`, `threadMetadataUpdated`, `userEntered`, `userLeft`, `yjsUpdate`. The trigger verifies the request using your **webhook signing secret** before running the workflow.

  ## Credentials

  ### Liveblocks API (required for the Liveblocks action node)

  1. Create or open a project in the [Liveblocks dashboard](https://liveblocks.io/dashboard).
  2. Copy the **secret key** (`sk_…`) from project settings.
  3. In n8n, create a credential of type **Liveblocks API** and paste the secret key.

  The credential test calls the REST API (for example listing rooms) to confirm the key works.

  ### Liveblocks Webhook Signing Secret (required for Liveblocks Trigger)

  1. In the Liveblocks dashboard, open your project’s **webhook** configuration and copy the **signing secret** (`whsec_…`).
  2. In n8n, create a credential of type **Liveblocks Webhook Signing Secret API** and paste that value.

  This secret is only used to verify incoming webhook signatures; it is not validated with a live HTTP test in the credentials UI.

  ## Compatibility

  - This package declares **`n8nNodesApiVersion` 1** in `package.json`, in line with current n8n community node conventions.
  - It lists **`n8n-workflow`** as a peer dependency (version resolved by your n8n install).

  Use a [current n8n release](https://docs.n8n.io/release-notes/) that supports community nodes and API version 1. If you hit a compatibility issue, report it with your n8n version and this package version.

  ## Usage

  - **Action node**: Add **Liveblocks**, select **resource** and **operation**, then fill the parameters. Map data from previous nodes into room IDs, user IDs, and bodies as needed. Use **Execute step** while designing to inspect API responses and errors.
  - **Trigger**: Add **Liveblocks Trigger**, set credentials, copy the **webhook URL** into the Liveblocks dashboard, and choose which events to listen for. Use n8n’s test URL while building, then switch to the production URL when the workflow is active.
  - **Errors**: Failed API calls surface as n8n errors with HTTP status and message when the API returns them. If webhooks fail verification, check that the signing secret matches the project and that the request is actually from Liveblocks.

  New to n8n? See [Try it out](https://docs.n8n.io/try-it-out/) in the n8n docs.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Liveblocks documentation](https://liveblocks.io/docs)
  - [Liveblocks REST API reference](https://liveblocks.io/docs/api-reference/rest-api-endpoints)
  - [Liveblocks webhooks](https://liveblocks.io/docs/platform/webhooks)
  - [Liveblocks dashboard](https://liveblocks.io/dashboard)

  ## Local development

  For local development of this repository, clone the project and use the [n8n node CLI](https://docs.n8n.io/integrations/creating-nodes/build/n8n-node-cli/) (`n8n-node dev`, `n8n-node build`) as described in the project’s contributor docs.

  ## Version history

  See [CHANGELOG.md](CHANGELOG.md) for a complete changelog.

ai_documentation_summary:
  {"purpose":"Receives webhook events from Liveblocks to trigger n8n workflows when specific real-time events occur, such as comment changes, user activity, or storage updates.","capabilities":["Starts workflows on Liveblocks webhook events","Filters events by type (e.g., commentCreated, userEntered, storageUpdated)","Verifies incoming webhook signatures using a signing secret","Supports all supported Liveblocks event types"],"authentication":"Webhook signing secret required","commonUseCases":["Trigger notifications when users join or leave a room","Automate actions when comments are created or edited","Respond to real-time storage document updates","Handle thread creation or metadata changes"],"limitations":["Requires manual configuration of the webhook URL in the Liveblocks dashboard","Webhook verification relies on the signing secret; incorrect secrets will cause verification failures","Only supports event-based triggering, not direct API calls (use the Liveblocks action node for that)"],"relatedNodes":["Liveblocks"]}


node_type: n8n-nodes-cala.cala
package_name: n8n-nodes-cala
display_name: Cala
description: Search trusted knowledge with Cala AI.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: elimorato
author_github_url: https://github.com/cala-ai/cala-n8n-node.git
npm_package_name: n8n-nodes-cala
npm_version: 0.5.2
community_fetched_at: 2026-07-14T14:40:33.784Z
ai_summary_generated_at: 2026-05-02 09:00:04
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "knowledge",
      "options": [
        {
          "name": "Knowledge",
          "value": "knowledge"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Get Entity",
          "value": "getEntity",
          "action": "Get knowledge entity",
          "description": "Get the full profile of an entity by its UUID"
        },
        {
          "name": "Get Entity Fields",
          "value": "getEntityFields",
          "action": "Get knowledge entity fields",
          "description": "Get available properties, relationships, and numerical observations for an entity"
        },
        {
          "name": "Query",
          "value": "query",
          "action": "Query knowledge",
          "description": "Filter entities by attributes using structured dot-notation syntax"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search knowledge",
          "description": "Answer natural language questions with sourced, researched content"
        },
        {
          "name": "Search Entities",
          "value": "searchEntities",
          "action": "Search knowledge entities",
          "description": "Find entities by name with fuzzy matching"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "knowledge"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Entity",
      "value": "getEntity",
      "action": "Get knowledge entity",
      "description": "Get the full profile of an entity by its UUID",
      "resource": "knowledge"
    },
    {
      "name": "Get Entity Fields",
      "value": "getEntityFields",
      "action": "Get knowledge entity fields",
      "description": "Get available properties, relationships, and numerical observations for an entity",
      "resource": "knowledge"
    },
    {
      "name": "Query",
      "value": "query",
      "action": "Query knowledge",
      "description": "Filter entities by attributes using structured dot-notation syntax",
      "resource": "knowledge"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search knowledge",
      "description": "Answer natural language questions with sourced, researched content",
      "resource": "knowledge"
    },
    {
      "name": "Search Entities",
      "value": "searchEntities",
      "action": "Search knowledge entities",
      "description": "Find entities by name with fuzzy matching",
      "resource": "knowledge"
    }
  ]

npm_readme:
  # n8n-nodes-cala

  This is an n8n community node for [Cala AI](https://cala.ai) - a platform that transforms internet information into structured, trustworthy context for AI agents.

  ## Installation

  ### n8n Cloud (Verified Nodes)

  1. Go to **Settings** → **Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-cala`
  4. Click **Install**

  ### Self-hosted n8n

  ```bash
  npm install n8n-nodes-cala
  ```

  ## Credentials

  You need a Cala API key to use this node:

  1. Sign up at [console.cala.ai](https://console.cala.ai)
  2. Create an API key
  3. In n8n, create new credentials of type **Cala API**
  4. Enter your API key

  ## Operations

  The node exposes a **Knowledge** resource with five operations:

  | Operation | Description |
  |-----------|-------------|
  | **Search** | Answer natural language questions with sourced, researched content |
  | **Query** | Filter entities by attributes using structured dot-notation syntax |
  | **Search Entities** | Find entities by name with fuzzy matching, optionally filtered by type |
  | **Get Entity** | Get the full profile of an entity by its UUID, with optional field selection |
  | **Get Entity Fields** | Discover which properties, relationships, and observations are available for an entity |

  ### Search

  Ask a natural language question and get back a researched answer with sources.

  **Input:** `"How many students were enrolled at MIT in 2024?"`

  **Output:**
  ```json
  {
    "content": "In 2024, MIT had approximately 11,800 students enrolled, including 4,600 undergraduate and 7,200 graduate students.",
    "explainability": [
      {
        "content": "MIT enrollment data shows total student population across undergraduate and graduate programs",
        "references": ["a1b2c3d4-5678-90ab-cdef-123456789abc"]
      }
    ],
    "context": [
      {
        "id": "a1b2c3d4-5678-90ab-cdef-123456789abc",
        "content": "In 2024, the Massachusetts Institute of Technology enrolled approximately 11,800 students.",
        "origins": [
          {
            "source": { "name": "MIT", "url": "https://mit.edu" },
            "document": { "name": "MIT Facts", "url": "https://mit.edu/about" }
          }
        ]
      }
    ],
    "entities": [
      { "id": 1, "name": "MIT", "entity_type": "ORGANIZATION" }
    ]
  }
  ```

  ### Query

  Filter entities by attributes using dot-notation syntax.

  **Input:** `"startups.location=Spain.funding>10M"`

  **Output:**
  ```json
  {
    "results": [
      {
        "startup": "SeQura",
        "sector": "Fintech / BNPL",
        "hq": "Barcelona",
        "funding_round": "Series D (Nov 2024)",
        "amount": "~€410M (incl. debt)"
      },
      {
        "startup": "TravelPerk",
        "sector": "Business Travel SaaS",
        "hq": "Barcelona",
        "funding_round": "Series D (Nov 2024)"
      }
    ],
    "entities": [
      { "id": "df8ea521-f2b1-47f7-9b46-419e179d914b", "name": "SeQura", "entity_type": "Organization" },
      { "id": "2f0da3c2-4d1d-41f5-b433-82df365c27de", "name": "TravelPerk", "entity_type": "Organization" }
    ]
  }
  ```

  ### Search Entities

  Find entities by name (supports fuzzy matching). Returns a list of matches with IDs.

  **Parameters:**
  - `Name` (required) — entity name to search for
  - `Entity Types` (optional) — filter by one or more types: Company, Person, GPE, Country, Organization, and more
  - `Limit` (optional, default 20) — max results, up to 100

  **Input:** `"OpenAI"` with limit `3`

  **Output:**
  ```json
  {
    "entities": [
      { "id": "e5bb591a-d308-4aa5-9672-96046d366cde", "name": "OpenAI", "entity_type": "Organization" },
      { "id": "7eacce50-c89f-44a8-b8e4-a41f543683f2", "name": "OpenAI Codex", "entity_type": "Product" },
      { "id": "e849412b-dcee-4df1-9461-a7cbdb9c32c7", "name": "OpenAI, Inc.", "entity_type": "Organization" }
    ]
  }
  ```

  ### Get Entity Fields

  Discover which properties, relationships, and numerical observations are available for a specific entity before querying it. Run this first, then use the results to fill in the **Get Entity** optional fields.

  **Input:** Entity UUID `"c6772802-bdbc-4778-91e9-cd3d27d008d5"`

  **Output:**
  ```json
  {
    "properties": ["name", "aliases", "legal_name", "employee_count", "founding_date", "headquarters_address"],
    "relationships": {
      "outgoing": ["IS_REGISTERED_IN", "HAS_HEADQUARTERS_IN", "OPERATES_IN_INDUSTRY"],
      "incoming": ["IS_CEO_OF", "IS_CFO_OF", "IS_BOARD_MEMBER_OF", "IS_SUBSIDIARY_OF"]
    },
    "numerical_observations": {
      "FinancialMetric": [
        { "id": "1d3eae40-0ba8-5baf-9907-6a4823b067bb", "name": "Cash and Cash Equivalents", "unit": "USD" }
      ]
    }
  }
  ```

  ### Get Entity

  Get the full profile of an entity by its UUID. By default returns a standard set of properties. Use the optional **Additional Fields** to select exactly which properties, relationships, and numerical observations to include — run **Get Entity Fields** first to discover what's available.

  **Parameters:**
  - `Entity ID` (required) — UUID from Search Entities, Search, or Query results
  - `Additional Fields > Properties` — list of property names to return (e.g. `name`, `employee_count`, `founding_date`)
  - `Additional Fields > Relationships` — relationships to include, each with direction (Outgoing/Incoming), type name, and optional limit/offset
  - `Additional Fields > Numerical Observations` — JSON object mapping observation type to UUID array (e.g. `{"FinancialMetric": ["uuid1"]}`)

  **Input:** Entity UUID `"c6772802-bdbc-4778-91e9-cd3d27d008d5"` with properties `["name", "employee_count"]` and incoming relationship `IS_CEO_OF`

  **Output:**
  ```json
  {
    "id": "c6772802-bdbc-4778-91e9-cd3d27d008d5",
    "name": "Apple Inc",
    "entity_type": "Company",
    "properties": {
      "name": { "value": "APPLE INC", "sources": [{ "name": "SEC", "date": "2026-02-26" }] },
      "employee_count": { "value": 164000, "sources": [{ "name": "Macrotrends", "date": "2026-03-01" }] }
    },
    "relationships": {
      "incoming": {
        "IS_CEO_OF": [{ "id": "...", "name": "Tim Cook", "entity_type": "Person" }]
      }
    },
    "numerical_observations": []
  }
  ```

  ## Resources

  - [Cala Documentation](https://docs.cala.ai)
  - [Cala Console](https://console.cala.ai)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with Cala AI to search trusted knowledge, answer natural language questions with sourced content, and query structured entity data.","capabilities":["Search knowledge base with natural language questions","Filter entities using dot-notation syntax","Search entities by name with fuzzy matching","Retrieve full entity profiles by UUID","Discover available entity fields, properties, and relationships"],"authentication":"API key required","commonUseCases":["Answering research questions with cited sources","Building knowledge graphs from trusted data","Filtering companies or people by specific attributes","Enriching AI agent context with verified information"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-awork.aworkTrigger
package_name: n8n-nodes-awork
display_name: awork Trigger
description: Starts the workflow when awork events occur
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: awork
author_github_url: https://github.com/awork-io/
npm_package_name: n8n-nodes-awork
npm_version: 0.1.62
community_fetched_at: 2026-07-14T14:40:33.786Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-awork

  This is an n8n community node that lets you automate workflows with [awork](https://www.awork.com/), a modern project management tool. It provides seamless integration between awork and n8n, allowing you to manage projects, tasks, and company/client data within your automation workflows.

  ## Installation

  ### n8n Cloud
  1. Select **+** on your canvas and type **awork**
  2. Find **awork** in the **More from the community** section
  3. Select **install**

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

  ### Self-Hosted Instance
  1. Navigate to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-awork` in **Enter npm package name**
  4. Select **Install**
  5. **Restart your n8n instance** after installation

  ## Authentication

  To use the awork node, you'll need API credentials from awork:

  1. **Create an awork account** at [awork.com](https://www.awork.com/) if you don't have one
  2. **Generate an API key** by following the instructions in the [awork API Authentication documentation](https://developers.awork.com/authentication#api-key)
  3. **In n8n**, add new credentials:
     - Select **"awork API"** from the credentials list
     - Enter your API key
     - Test the connection to ensure it's working

  ## Available Operations

  The awork node provide comprehensive access to awork's project management features, including:

  ### Projects
  - **Create Project**: Start new projects with custom settings
  - **Get Project**: Retrieve project information
  - **List Projects**: Get all projects with filtering options
  - **Change Project Status**: Changes the status of a project

  ### Tasks
  - **Create Task**: Add new tasks to projects
  - **Get Task**: Retrieve specific task information
  - **List Tasks**: Get tasks with advanced filtering
  - **Change Task Status**: Changes the status of a task
  - **Set Task Custom Fields**: Sets the value of a task custom field
  - **Add Task Comment**: Adds a comment to a task

  ### Companies
  - **Create Company**: Add new companies to your workspace
  - **Get Company**: Retrieve company details
  - **List Companies**: Get all companies with filtering

  ### Users
  - **List Users**: Get all users with filtering

  ### Other
  - **HTTP**: With a generic HTTP Request, any awork API endpoint can be used

  For detailed information about each operation and its parameters, visit the relevant sections in the [awork Developer Documentation](https://developers.awork.com/):
  - [Projects](https://developers.awork.com/projects)
  - [Tasks](https://developers.awork.com/tasks)
  - [Companies](https://developers.awork.com/companies)
  - [Users](https://developers.awork.com/users)

  ## Example Workflows

  Here are some common use cases for the awork nodes:

  1. **Automated Project Creation**: Create projects in awork when new deals are won in your CRM
  2. **Task Synchronization**: Sync tasks between awork and other project management tools
  3. **Company Management**: Automatically create companies in awork from form submissions
  4. **Status Updates**: Update task statuses based on external triggers
  5. **Reporting**: Extract project and task data for custom reporting dashboards

  ## Resources

  - **awork Developer Documentation**: [developers.awork.com](https://developers.awork.com/)
  - **awork Developer Forum**: [community.awork.com/c/developer-forum/17](https://community.awork.com/c/developer-forum/17)
  - **n8n Documentation**: [docs.n8n.io](https://docs.n8n.io/)
  - **n8n Community**: [community.n8n.io](https://community.n8n.io/)

  ## Support

  If you encounter any issues or have questions:

  - Check the [awork Developer Forum](https://community.awork.com/c/developer-forum/17) for API-related questions
  - Visit the [n8n Community Forum](https://community.n8n.io/) for n8n-specific issues

  ## Local Development

  For contributors and developers who want to test changes locally:

  1. Clone the repository:
     ```bash
     git clone https://github.com/awork-io/n8n-nodes-awork
     cd n8n-nodes-awork
     ```

  2. Install dependencies and build:
     ```bash
     npm install
     npm run build
     ```

  3. Link to your local n8n installation:
     ```bash
     npm link
     cd ~/.n8n/custom
     npm link n8n-nodes-awork
     ```

  4. Start n8n:
     ```bash
     n8n start
     ```

  ## License

  This project is licensed under the MIT License - see the LICENSE file for details.

ai_documentation_summary:
  {"purpose":"The awork Trigger node initiates n8n workflows automatically when specific events occur within the awork project management platform.","capabilities":["Create new projects","Retrieve project information","List projects with filtering","Change project status","Create new tasks","Retrieve task information","List tasks with advanced filtering","Change task status","Set task custom field values","Add comments to tasks"],"authentication":"API key required","commonUseCases":["Automated project creation from CRM deals","Task synchronization between awork and other tools","Automatic company creation from form submissions","Status updates based on external triggers","Data extraction for custom reporting dashboards"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-plura-ai.pluraAiAutomations
package_name: n8n-nodes-plura-ai
display_name: Plura.ai Automations
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: roman-plura-ai
author_github_url: https://github.com/rvorontsov-plura/n8n-plura-ai.git
npm_package_name: n8n-nodes-plura-ai
npm_version: 1.0.22
community_fetched_at: 2026-07-14T14:40:33.788Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Plura.ai helps teams build, deploy, and manage AI agents for calls, chat, and workflows. Use Plura.ai to automate outreach, route conversations, and sync data across your tools.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "lead",
      "options": [
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Call",
          "value": "call"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n-nodes-plura-ai

  n8n community node for [Plura.ai](https://plura.ai) - build, deploy, and manage AI agents for calls, chat, and workflows.

  ## Features

  **Trigger:**
  - Automation Triggered - receives webhook events when Plura.ai automation nodes execute

  **Actions:**
  - Get Lead by Phone / ID
  - Update Lead
  - Send Lead to Workflow
  - Add / Remove Tag
  - Initiate Call

  ## Installation

  ```bash
  npm install n8n-nodes-plura-ai
  ```

  Then restart n8n. The node will appear in the node panel.

  ## Credentials

  Enter your Plura.ai account email and password. Optionally provide an API key for direct API access.

  ## Links

  - [Plura.ai](https://plura.ai)
  - [npm package](https://www.npmjs.com/package/n8n-nodes-plura-ai)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Plura.ai to manage AI agents for calls, chat, and workflows, allowing users to automate outreach, route conversations, and sync data.","capabilities":["Receive webhook events when Plura.ai automations trigger","Retrieve lead information by phone number or ID","Update existing lead records","Route leads to specific workflows","Add or remove tags on leads","Initiate outbound calls"],"authentication":"Email and password required; API key optional for direct access","commonUseCases":["Automating customer outreach sequences","Routing incoming conversations to appropriate agents","Synchronizing lead data between Plura.ai and other tools","Managing lead segmentation via tags"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-plura-ai.pluraAiAutomationsTrigger
package_name: n8n-nodes-plura-ai
display_name: Plura.ai Automations Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: roman-plura-ai
author_github_url: https://github.com/rvorontsov-plura/n8n-plura-ai.git
npm_package_name: n8n-nodes-plura-ai
npm_version: 1.0.22
community_fetched_at: 2026-07-14T14:40:33.789Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Triggers when a Plura.ai automation node is executed. Plura.ai helps teams build, deploy, and manage AI agents for calls, chat, and workflows.

npm_readme:
  # n8n-nodes-plura-ai

  n8n community node for [Plura.ai](https://plura.ai) - build, deploy, and manage AI agents for calls, chat, and workflows.

  ## Features

  **Trigger:**
  - Automation Triggered - receives webhook events when Plura.ai automation nodes execute

  **Actions:**
  - Get Lead by Phone / ID
  - Update Lead
  - Send Lead to Workflow
  - Add / Remove Tag
  - Initiate Call

  ## Installation

  ```bash
  npm install n8n-nodes-plura-ai
  ```

  Then restart n8n. The node will appear in the node panel.

  ## Credentials

  Enter your Plura.ai account email and password. Optionally provide an API key for direct API access.

  ## Links

  - [Plura.ai](https://plura.ai)
  - [npm package](https://www.npmjs.com/package/n8n-nodes-plura-ai)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Triggers workflows when Plura.ai automation nodes execute and provides actions to manage leads, tags, and initiate calls within the Plura.ai ecosystem.","capabilities":["Receive webhook events when Plura.ai automation nodes execute","Get Lead by Phone or ID","Update Lead information","Send Lead to Workflow","Add tags to leads","Remove tags from leads","Initiate calls"],"authentication":"Email and password required; optional API key for direct access","commonUseCases":["Trigger workflows when a specific Plura.ai automation runs","Retrieve and update lead data based on call or chat events","Automatically route leads to other workflows","Manage lead tagging based on interaction outcomes","Initiate outbound calls from n8n workflows"],"limitations":["Requires Plura.ai account credentials (email and password)"],"relatedNodes":[]}


node_type: n8n-nodes-onepage.onepageTrigger
package_name: n8n-nodes-onepage
display_name: OnePage Trigger
description: Trigger workflows on new OnePage form leads
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: rjsebening
author_github_url: https://github.com/rjsebening/
npm_package_name: n8n-nodes-onepage
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.794Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-onepage

  ![OnePage Node](https://img.shields.io/badge/n8n-community--node-FF6D5A)

  ![Version](https://img.shields.io/badge/version-1.0.0-blue)

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

  A streamlined n8n Community Node for **real-time integration of OnePage Leads** via a trigger.

  Ideal for anyone who wants to **immediately automate the processing of new leads** – without polling, without detours.

  ---

  ## What is n8n?

  n8n is a workflow automation tool that lets you automate processes between different web applications – such as **OnePage**, CRM systems, Slack, email, or databases.

  Instead of manual work, processes run automatically in the background as soon as an event occurs.

  ---

  ## ⚖️ Legal Notice

  This community node uses the public OnePage API and is **not officially affiliated with OnePage**.

  All trademarks and product names are the property of their respective owners.

  **Note:** This is a community-developed integration. For official support, please contact OnePage directly.

  ---

  ## 🚀 Overview

  The **OnePage n8n Node** provides a **trigger** that is activated as soon as **a new lead is received in OnePage**.

  The trigger is perfect for:

  * Lead forwarding
  * CRM synchronization
  * Notifications
  * Automated follow-ups
  * Internal processes & scoring

  No manual retrieval.

  No time delay.


  * No manual retrieval. **100% Event-Based.**

  ---

  ## ✨ Main Function

  ### ⚡ **OnePage Trigger – New Lead**

  This node provides **exactly one trigger**:

  * **New Lead**

  * Triggered as soon as a new lead is created in OnePage

  * Use via webhooks (real-time)

  * Automatic registration & removal of the webhook in OnePage

  ---

  ## 🔔 Trigger Details

  ### **OnePage Trigger: New Lead**

  | Property | Description |

  | ----------------- | --------------------- |

  | Trigger Type | Webhook |

  | Trigger | New Lead in OnePage |

  | Execution | Real-time |

  | Webhook Handling | Automatic |

  | Multiple Workflows | Supported |

  The trigger sends all lead data provided by the OnePage webhook directly to the workflow.


  ---

  ## 📦 Installation

  ### Requirements

  * n8n version **1.0.0 or higher**
  * Active OnePage account

  ---

  ### Installation via Community Nodes

  1. Open your **n8n instance**

  2. Go to **Settings → Community Nodes**

  3. Click **Install**

  4. Install one of the following packages:

  #### Option 1 – Scoped (recommended)

  ```bash
  @rjsebening/n8n-nodes-onepage
  ```

  #### Option 2 – Unscoped

  ```bash
  n8n-nodes-onepage
  ```

  5. Restart n8n → Node is available

  ---

  ## 🔐 Configuration

  ### Creating OnePage API Credentials

  1. In n8n, go to **Credentials → New Credential**

  2. Select **OnePage API**

  3. Enter your login details:

  * **Email**: OnePage Login Email

  * **Password**: OnePage Login Password

  * **Base URL**:

  ```

  https://api-eu.onepage.io/api/v1

  ```

  4. Save

  The connection will be tested automatically upon saving.

  ---

  ## 🧩 Workflow Usage

  1. Create a new workflow

  2. Add the **OnePage Trigger**

  3. Select the **New Lead** trigger type

  4. Activate the workflow

  👉 From now on, the workflow will be executed **automatically for every new lead**.


  ---

  ## 📖 Typical Use Cases

  * Automatically transfer new OnePage leads to the CRM
  * Instant notification via Slack, email, or Microsoft Teams
  * Lead scoring and qualification immediately upon receipt
  * Initiate automated follow-up workflows
  * Handoff to sales or onboarding processes

  ---

  ## 🌍 Why this is important

  Many teams don't lose leads during marketing –

  but **after they've been received**.


  This node ensures that:

  * **No leads are left behind**
  * **Response times drop to seconds**
  * **Manual work is eliminated**
  * **Processes become scalable**

  In short: **Leads come in – everything else runs automatically.**

  ---

  ## 📬 About the author

  I am [Rezk Jörg Sebening](https://github.com/rjsebening) –
  a business automation expert for n8n, APIs, and scalable processes in the DACH region.

  I develop n8n nodes and systems that consistently eliminate manual work.

  👉 Follow me on GitHub for more practical community nodes and integrations.

  ## 📋 Disclaimer

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

  **Important Notes:**

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

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows in real-time when a new lead is created in OnePage, enabling immediate automation without polling.","capabilities":["Triggers on new OnePage leads","Real-time webhook execution","Automatic webhook registration and removal in OnePage","Forwards complete lead data to workflow","Supports multiple workflows"],"authentication":"API key required (via Basic Auth with Email and Password)","commonUseCases":["Forwarding new leads to CRM systems","Sending instant notifications via Slack, email, or Microsoft Teams","Performing immediate lead scoring and qualification","Initiating automated follow-up sequences","Handing off leads to sales or onboarding processes"],"limitations":["Community-developed node not officially affiliated with or supported by OnePage","Dependent on the stability and terms of the public OnePage API","Requires n8n version 1.0.0 or higher"],"relatedNodes":[]}


node_type: n8n-nodes-stencilpdf.stencilpdf
package_name: n8n-nodes-stencilpdf
display_name: StencilPDF
description: Generate PDF Reports from templates using stencil
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: kirschner
author_github_url: https://github.com/trpouh/
npm_package_name: n8n-nodes-stencilpdf
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:33.796Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "report",
      "options": [
        {
          "name": "Report",
          "value": "report"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get reports",
          "description": "Get many reports"
        },
        {
          "name": "Render PDF",
          "value": "renderPDF",
          "action": "Render PDF",
          "description": "Render a report template as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "report"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get reports",
      "description": "Get many reports",
      "resource": "report"
    },
    {
      "name": "Render PDF",
      "value": "renderPDF",
      "action": "Render PDF",
      "description": "Render a report template as PDF",
      "resource": "report"
    }
  ]

npm_readme:
  # n8n-nodes-stencilpdf

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

  StencilPDF is a service for generating PDFs from customizable templates with dynamic variables.

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

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

  ## Installation

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

  ## Operations

  ### Report

  - **Get Many**: Retrieve a list of all available report templates from your StencilPDF account
  - **Render PDF**: Generate a PDF from a report template by providing variable values. Returns the PDF as binary data.

  ## Credentials

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

  1. Sign up for an account at [stencilpdf.com](https://stencilpdf.com)
  2. Navigate to your account settings to generate an API key. It will start with `rbk_`
  3. In n8n, create new credentials of type "StencilPDF API"
  4. Enter your API key

  ## Compatibility

  Tested with n8n version 2.4.6

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [StencilPDF](https://stencilpdf.com)

ai_documentation_summary:
  {"purpose":"Generates PDF reports from customizable templates using dynamic variables via the StencilPDF service.","capabilities":["Retrieve a list of all available report templates","Generate PDF from a report template with dynamic variable values","Return generated PDF as binary data"],"authentication":"API key required","commonUseCases":["Automated invoice generation","Dynamic report creation from database records","Generating personalized certificates or labels"],"limitations":[],"relatedNodes":[]}


node_type: @sinch/n8n-nodes-number-lookup-api.sinchNumberLookupApi
package_name: @sinch/n8n-nodes-number-lookup-api
display_name: Sinch Number Lookup API
description: Interact with the Sinch Number Lookup API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: asein_sinch
author_github_url: https://github.com/sinch/n8n-sinch-number-lookup-api.git
npm_package_name: @sinch/n8n-nodes-number-lookup-api
npm_version: 0.1.9
community_fetched_at: 2026-07-14T14:40:33.798Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "numberLookup",
      "options": [
        {
          "name": "Number Lookup",
          "value": "numberLookup"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "lookup",
      "options": [
        {
          "name": "Lookup",
          "value": "lookup",
          "action": "Lookup a phone number",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/v2/projects/{{$parameter.projectId}}/lookups/",
              "method": "POST",
              "returnFullResponse": true,
              "ignoreHttpStatusErrors": true
            }
          },
          "description": "Perform a lookup on a phone number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "numberLookup"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Lookup",
      "value": "lookup",
      "action": "Lookup a phone number",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/v2/projects/{{$parameter.projectId}}/lookups/",
          "method": "POST",
          "returnFullResponse": true,
          "ignoreHttpStatusErrors": true
        }
      },
      "description": "Perform a lookup on a phone number",
      "resource": "numberLookup"
    }
  ]

npm_readme:
  # n8n-nodes-number-lookup-api

  This is an n8n community node. It lets you use [Sinch Number Lookup API](https://developers.sinch.com/docs/number-lookup/) in your n8n workflows.

  Sinch Number Lookup API provides real-time phone number validation and verification services. With quick and easy access to Number Lookup, you can enhance your communications and keep your database clean. The API checks against first-party numbering sources and provides real-time feedback to improve communication by validating and verifying numbers, boosting delivery conversion rates, and saving money on marketing campaigns.

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

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

  ## Installation

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

  ## Operations

  ### Lookup

  Performs a comprehensive number lookup operation. You can select one or more features to include in the lookup request:

  - **Line Type**: Identify the type of phone line (mobile, landline, VoIP, etc.) including carrier information and porting status
  - **SIM Swap**: Detect if the SIM card has been swapped recently (configurable time periods from 4 hours to 30 days)
  - **VoIP Detection**: Check if the number is a VoIP (Voice over IP) number with probability scoring
  - **RND (Reassigned Number Database)**: Determine if the number has been reassigned to a new subscriber since your last contact date

  ## Credentials

  This node uses OAuth2 (Client Credentials) authentication. To set up credentials:

  ### Prerequisites

  1. Sign up for a [Sinch account](https://dashboard.sinch.com/signup)
  2. Create a new project in the [Sinch Dashboard](https://dashboard.sinch.com/)
  3. Navigate to **APIs** → **Number Lookup** to enable the API
  4. Go to **Settings** → **Access Keys** to obtain your credentials

  ### Setting up credentials in n8n

  1. In n8n, create new credentials of type "Sinch Number Lookup Api OAuth2 API"
  2. Fill in the following fields:
     - **Project ID**: Your Sinch project ID (UUID format, e.g., `395fcbf6-20d6-4e76-8242-77106018e191`)
     - **Client ID**: Your access key ID from Sinch Dashboard
     - **Client Secret**: Your access key secret from Sinch Dashboard
  3. Click "Connect" to authenticate

  The credentials use the Sinch OAuth2 token endpoint (`https://auth.sinch.com/oauth2/token`) with client credentials grant type.

  ## Compatibility

  This node has been tested with **n8n v1.0+** and uses the n8n nodes API v1.

  ## Usage

  ### Basic Number Lookup

  1. Add the **Sinch Number Lookup Api** node to your workflow
  2. Configure your credentials
  3. Enter your **Project ID** (the UUID of your Sinch project)
  4. Enter a phone number in **E.164 format** (e.g., `+48123321123`)
     - Must start with `+` followed by country code and number
     - No spaces, dashes, or other formatting
  5. Select one or more **Features** to query
  6. Execute the node

  ### Using the RND (Reassigned Number Database) Feature

  When using the RND feature, you must provide a **Contact Date**:

  1. Select "RND" from the Features list
  2. A **Contact Date** field will appear
  3. Enter the date when you last contacted this number
  4. The API will check if the number was reassigned after that date

  ### Example Workflow

  ```
  Manual Trigger → Sinch Number Lookup Api → IF (check results)
  ```

  Use the lookup results to:
  - Filter out invalid numbers before sending SMS/calls
  - Detect high-risk numbers (recent SIM swaps, VoIP)
  - Clean your contact database
  - Validate user-provided phone numbers in real-time

  ### Response Data

  The node returns comprehensive information about the queried number:

  ```json
  {
    "number": "+12312312312",
    "countryCode": "US",
    "line": {
      "type": "Mobile",
      "carrier": "T-Mobile USA",
      "mobileCountryCode": "310",
      "mobileNetworkCode": "260",
      "ported": true,
      "portingDate": "2023-01-15T00:00:00Z"
    },
    "simSwap": {
      "swapped": false,
      "swapPeriod": "SP24H"
    },
    "voIPDetection": {
      "probability": "Low"
    },
    "rnd": {
      "disconnected": false
    },
    "traceId": "84c1fd4063c38d9f3900d06e56542d48"
  }
  ```

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Sinch Number Lookup API Documentation](https://developers.sinch.com/docs/number-lookup-api-v2)
  * [Sinch Dashboard](https://dashboard.sinch.com/)
  * [Sinch API Reference](https://developers.sinch.com/docs/number-lookup-api-v2/api-reference/number-lookup-v2/numberlookupv2)
  * [Get Support](https://www.sinch.com/contact-us/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables real-time phone number validation and verification by interacting with the Sinch Number Lookup API to enhance communication workflows and maintain clean databases.","capabilities":["Line type identification (mobile, landline, VoIP) with carrier and porting status","SIM swap detection with configurable time periods (4 hours to 30 days)","VoIP detection with probability scoring","RND (Reassigned Number Database) checks based on last contact date","Real-time feedback for improving delivery conversion rates","E.164 format phone number validation"],"authentication":"OAuth2 (Client Credentials)","commonUseCases":["Filtering out invalid numbers before sending SMS or calls","Detecting high-risk numbers such as recent SIM swaps or VoIP lines","Cleaning and validating contact databases","Validating user-provided phone numbers in real-time"],"limitations":["Requires a Sinch account and API access setup","RND feature requires providing a specific contact date for the number","Phone numbers must be in strict E.164 format (no spaces or dashes)"],"relatedNodes":[]}


node_type: @liguelead/n8n-nodes-liguelead.ligueLead
package_name: @liguelead/n8n-nodes-liguelead
display_name: LigueLead
description: Send SMS and calls via LigueLead API
category: Community
development_style: declarative
version: 3
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: ligue.lead
author_github_url: https://github.com/ligue-lead-tech/n8n.git
npm_package_name: @liguelead/n8n-nodes-liguelead
npm_version: 0.0.19
community_fetched_at: 2026-07-14T14:40:33.800Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Send SMS",
          "value": "sendSms",
          "description": "Sends SMS via endpoint /v1/sms"
        },
        {
          "name": "Send Call",
          "value": "sendVoice",
          "description": "Sends a call using an existing voice_upload_id"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send SMS",
      "value": "sendSms",
      "description": "Sends SMS via endpoint /v1/sms"
    },
    {
      "name": "Send Call",
      "value": "sendVoice",
      "description": "Sends a call using an existing voice_upload_id"
    }
  ]

npm_readme:
  # LigueLead – n8n Custom Node

  Custom **n8n** node for integration with the **LigueLead API**, allowing the sending of **SMS messages** and **voice calls using pre-uploaded audio**.

  This node was designed with a strong focus on **extensibility**, **easy maintenance**, and **clean architecture**, making it simple to add new actions without modifying the core node logic.

  ---

  ## 📌 Features

  Currently, the node supports:

  - 📩 **SMS sending**
  - 📞 **Voice calls** using a `voice_upload_id`

  ---

  ## 🔐 Credentials (LigueLead API)

  | Field     | Description                     |
  | --------- | ------------------------------- |
  | Base URL  | https://api.liguelead.com.br/v1 |
  | API Token | Authentication token            |
  | App ID    | Application identifier          |

  Headers sent automatically:

  ```
  api-token: <API_TOKEN>
  app-id: <APP_ID>
  ```

  ---

  ## ⚙️ How to Use

  1. Create the **LigueLead API** credential
  2. Drag the **LigueLead** node into your workflow
  3. Select the desired operation

  ---

  ## 🧩 Operations

  ### 📩 Send SMS (sendSms)

  Required fields:

  - phones: string[]
  - message: string
  - title: string

  Optional field:

  - isFlash: boolean (SMS type)

  Example:

  ```json
  {
  	"phones": ["5511999999999"],
  	"message": "Hello!",
  	"title": "Test"
  }
  ```

  ---

  ### 📞 Send Voice Call (sendVoice)

  Required fields:

  - phones: string[]
  - voice_upload_id: number
  - title: string

  Example:

  ```json
  {
  	"title": "July Campaign",
  	"voice_upload_id": 123,
  	"phones": ["5511999999999"]
  }
  ```

ai_documentation_summary:
  {"purpose":"Integrates with the LigueLead API to enable sending SMS messages and voice calls using pre-uploaded audio files within n8n workflows.","capabilities":["Send SMS messages to multiple phone numbers","Send voice calls using pre-uploaded audio files","Support for flash SMS messages","Batch processing of phone numbers"],"authentication":"API key required (API Token and App ID)","commonUseCases":["Marketing campaigns via SMS","Automated customer notifications","Voice-based appointment reminders","Two-factor authentication via SMS"],"limitations":["Voice calls require pre-uploaded audio files (voice_upload_id)","Limited to SMS and voice call operations only"],"relatedNodes":[]}


node_type: n8n-nodes-gsa-per-diem.gsaPerDiem
package_name: n8n-nodes-gsa-per-diem
display_name: GSA Per Diem
description: Look up GSA per diem reimbursement rates for federal travel lodging and meals
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: thewils504
author_github_url: https://github.com/rwilson504/
npm_package_name: n8n-nodes-gsa-per-diem
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:33.802Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "perDiemRate",
      "options": [
        {
          "name": "Per Diem Rate",
          "value": "perDiemRate"
        },
        {
          "name": "CONUS Data",
          "value": "conusData"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByCityStateYear",
      "options": [
        {
          "name": "Get by City/State/Year",
          "value": "getByCityStateYear",
          "action": "Get per diem rates by city state and year",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "rates"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/rates/city/{{$parameter.city}}/state/{{$parameter.state}}/year/{{$parameter.year}}",
              "method": "GET"
            }
          },
          "description": "Retrieve per diem rates for a specific city, state, and fiscal year"
        },
        {
          "name": "Get by State/Year",
          "value": "getByStateYear",
          "action": "Get per diem rates by state and year",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "rates"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/rates/state/{{$parameter.state}}/year/{{$parameter.year}}",
              "method": "GET"
            }
          },
          "description": "Retrieve per diem rates for all counties and cities within a state for a fiscal year"
        },
        {
          "name": "Get by ZIP/Year",
          "value": "getByZipYear",
          "action": "Get per diem rates by ZIP code and year",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "rates"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/rates/zip/{{$parameter.zip}}/year/{{$parameter.year}}",
              "method": "GET"
            }
          },
          "description": "Retrieve per diem rates based on ZIP code and fiscal year"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "perDiemRate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLodgingRates",
      "options": [
        {
          "name": "Get Lodging Rates",
          "value": "getLodgingRates",
          "action": "Get CONUS lodging rates by year",
          "routing": {
            "request": {
              "url": "=/v2/rates/conus/lodging/{{$parameter.year}}",
              "method": "GET"
            }
          },
          "description": "Retrieve lodging rate information for all locations in the Continental US for a fiscal year"
        },
        {
          "name": "Get ZIP Code Mappings",
          "value": "getZipMappings",
          "action": "Get ZIP code to destination ID mappings",
          "routing": {
            "request": {
              "url": "=/v2/rates/conus/zipcodes/{{$parameter.year}}",
              "method": "GET"
            }
          },
          "description": "Retrieve the mapping of ZIP codes to Destination IDs and state locations for a fiscal year"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conusData"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get by City/State/Year",
      "value": "getByCityStateYear",
      "action": "Get per diem rates by city state and year",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "rates"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/rates/city/{{$parameter.city}}/state/{{$parameter.state}}/year/{{$parameter.year}}",
          "method": "GET"
        }
      },
      "description": "Retrieve per diem rates for a specific city, state, and fiscal year",
      "resource": "perDiemRate"
    },
    {
      "name": "Get by State/Year",
      "value": "getByStateYear",
      "action": "Get per diem rates by state and year",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "rates"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/rates/state/{{$parameter.state}}/year/{{$parameter.year}}",
          "method": "GET"
        }
      },
      "description": "Retrieve per diem rates for all counties and cities within a state for a fiscal year",
      "resource": "perDiemRate"
    },
    {
      "name": "Get by ZIP/Year",
      "value": "getByZipYear",
      "action": "Get per diem rates by ZIP code and year",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "rates"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/rates/zip/{{$parameter.zip}}/year/{{$parameter.year}}",
          "method": "GET"
        }
      },
      "description": "Retrieve per diem rates based on ZIP code and fiscal year",
      "resource": "perDiemRate"
    },
    {
      "name": "Get Lodging Rates",
      "value": "getLodgingRates",
      "action": "Get CONUS lodging rates by year",
      "routing": {
        "request": {
          "url": "=/v2/rates/conus/lodging/{{$parameter.year}}",
          "method": "GET"
        }
      },
      "description": "Retrieve lodging rate information for all locations in the Continental US for a fiscal year",
      "resource": "conusData"
    },
    {
      "name": "Get ZIP Code Mappings",
      "value": "getZipMappings",
      "action": "Get ZIP code to destination ID mappings",
      "routing": {
        "request": {
          "url": "=/v2/rates/conus/zipcodes/{{$parameter.year}}",
          "method": "GET"
        }
      },
      "description": "Retrieve the mapping of ZIP codes to Destination IDs and state locations for a fiscal year",
      "resource": "conusData"
    }
  ]

npm_readme:
  # n8n-nodes-gsa-per-diem

  An [n8n](https://n8n.io/) community node for the [GSA Per Diem Rates API](https://open.gsa.gov/api/perdiem/). Look up federal per diem reimbursement rates for lodging and meals by city, state, or ZIP code.

  Per diem rates are the allowed reimbursement rates for hotel stays and meals for federal travelers. Rates are set for each of the federal government's fiscal years (October 1st to September 30th). GSA sets the rates for the Continental United States (CONUS). Many businesses and other organizations adopt these rates as well.

  ## Prerequisites

  - An [n8n](https://n8n.io/) instance (self-hosted or cloud)
  - A free GSA API key — [register here](https://open.gsa.gov/api/perdiem/)

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings → Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-gsa-per-diem`
  4. Agree to the risks and click **Install**

  ### Manual Installation

  ```bash
  cd ~/.n8n
  npm install n8n-nodes-gsa-per-diem
  ```

  Restart n8n after installation.

  ## Credentials

  1. Create a new credential of type **GSA Per Diem API**
  2. Enter your GSA API key (obtained from https://open.gsa.gov/api/perdiem/)
  3. Click **Save** — the credential will be tested automatically

  ## Supported Operations

  ### Per Diem Rate

  | Operation | Description |
  |-----------|-------------|
  | **Get by City/State/Year** | Retrieve per diem rates for a specific city, state, and fiscal year |
  | **Get by State/Year** | Retrieve per diem rates for all counties and cities within a state for a fiscal year |
  | **Get by ZIP/Year** | Retrieve per diem rates based on ZIP code and fiscal year |

  ### CONUS Data

  | Operation | Description |
  |-----------|-------------|
  | **Get Lodging Rates** | Retrieve lodging rate information for all locations in the Continental US for a fiscal year |
  | **Get ZIP Code Mappings** | Retrieve the mapping of ZIP codes to Destination IDs and state locations for a fiscal year |

  ## Example Usage

  1. Add the **GSA Per Diem** node to your workflow
  2. Select your GSA Per Diem API credentials
  3. Choose a resource (Per Diem Rate or CONUS Data)
  4. Choose an operation and fill in the required parameters
  5. Execute the node to retrieve rate data

  ### Look up rates for a specific city

  - **Resource:** Per Diem Rate
  - **Operation:** Get by City/State/Year
  - **City:** `San Francisco`
  - **State:** `CA`
  - **Year:** `2025`

  ## Development

  ```bash
  # Clone the repository
  git clone https://github.com/rwilson504/n8n-nodes-gsa-per-diem.git
  cd n8n-nodes-gsa-per-diem

  # Install dependencies
  npm install

  # Build
  npm run build

  # Link for local testing
  npm link
  cd ~/.n8n
  npm link n8n-nodes-gsa-per-diem
  n8n start
  ```

  ## License

  [MIT](LICENSE)

  ## Author

  Richard Wilson — [richardawilson.com](https://www.richardawilson.com/)

ai_documentation_summary:
  {"purpose":"Retrieves federal per diem reimbursement rates for lodging and meals by city, state, or ZIP code using the GSA Per Diem Rates API.","capabilities":["Get per diem rates by city, state, and fiscal year","Get per diem rates for all locations within a state","Get per diem rates by ZIP code","Retrieve lodging rates for all Continental US locations","Retrieve ZIP code to Destination ID mappings"],"authentication":"API key required","commonUseCases":["Calculate federal travel reimbursement amounts","Determine allowable lodging and meal rates for business travel","Map ZIP codes to federal per diem destinations"],"limitations":["Rates are only available for the Continental United States (CONUS)","Requires a valid GSA API key to access data","Data is organized by fiscal year (October 1st to September 30th)"],"relatedNodes":[]}


node_type: n8n-nodes-superchat.superchatTrigger
package_name: n8n-nodes-superchat
display_name: Superchat Trigger
description: Handle Superchat events via webhooks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: superchat-ben
author_github_url: https://github.com/super-chat/
npm_package_name: n8n-nodes-superchat
npm_version: 0.5.0
community_fetched_at: 2026-07-14T14:40:33.805Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-superchat
  ![](./superchat.png)

  This is an n8n community node. It lets you integrate **Superchat** into your n8n workflows.

  **Superchat** is a unified messaging platform that enables sending and receiving messages across WhatsApp, Instagram Direct, Facebook Messenger, SMS, email, Live Chat, and more. Our Superchat app in n8n supports managing contacts, conversations, notes, files, channels, labels, and more.

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

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

  ---

  ## Installation

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

  ---

  ## Operations

  This node supports operations on the following six resources:

  ### User
  - **Me** — Retrieve details about the authenticated Superchat user.

  ### Contact
  - **Create** — Create a new contact.
  - **Search** — Search for contacts by email, phone, or Instagram handle.
  - **Update** — Update a contact's information.
  - **Delete** — Delete a contact by its ID.
  - **Get Conversations** — Fetch all conversations associated with a contact.

  ### Message
  - **Send Message** — Send a text or media message to a contact.
  - **Send Mail** — Send an email, with optional attachments, to a contact.
  - **Send WhatsApp Template** — Send a pre-approved WhatsApp template message.

  ### Conversation
  - **Get** — Retrieve a conversation by its ID.
  - **Delete** — Delete a conversation by its ID.
  - **Update Labels** — Update the labels for a conversation.
  - **Update Status** — Update the status of a conversation (e.g., open, done, snoozed).
  - **Update Assignees** — Update the users assigned to a conversation.

  ### Note
  - **Create** — Add a new note to a conversation.
  - **Get** — Retrieve a specific note from a conversation.
  - **Delete** — Delete a specific note from a conversation.

  ### File
  - **Create (upload)** — Upload a binary file to Superchat.
  - **Download** — Download a file by its ID.
  - **Delete** — Delete a file by its ID.

  ---

  ## Credentials

  **Superchat API**

  1. Log into your Superchat Account.
  2. Go to Settings > Explore Integrations > Click the n8n card
  3. Click 'Add' and copy the API key.
  4. Add a n8n action or trigger and enter your Superchat API key in the credentials section.

  ---

  ## Compatibility

  Tested with:
  - **n8n v1.97.1**

  ---

  ## Usage

  1. Install n8n-nodes-superchat via the community nodes installer.
  2. Add the Superchat node to your n8n workflow.
  3. Configure credentials using your Superchat API key.
  4. Select a resource (User, Contact, Message, Conversation, Note, or File).
  5. Choose the desired operation.
  6. Fill in required fields (e.g. recipient info, message content).
  7. Execute the workflow to send messages, manage contacts/conversations, and upload/download files.

  ---

  ## Resources

  - [Superchat API Documentation](https://developers.superchat.com/) 
  - [Getting Started Guide](https://developers.superchat.com/docs/getting-started-send-your-first-message)
  - [Superchat Help Centre](https://help.superchat.com)

ai_documentation_summary:
  {"purpose":"This node enables integration with the Superchat unified messaging platform to manage contacts, conversations, messages, and files across multiple channels like WhatsApp, Instagram, and Facebook Messenger.","capabilities":["Retrieve authenticated user details","Create, search, update, and delete contacts","Fetch conversations associated with contacts","Send text or media messages","Send emails with optional attachments","Send pre-approved WhatsApp template messages","Retrieve, delete, and update conversation labels and status","Update conversation assignees","Create, retrieve, and delete notes within conversations","Upload binary files"],"authentication":"API key required","commonUseCases":["Automated customer support responses across multiple messaging channels","Sending marketing emails and WhatsApp templates","Managing and organizing customer conversations with labels and status updates","Automated file sharing and document management in chats"],"limitations":["Requires n8n v1.97.1 or higher for compatibility"],"relatedNodes":[]}


node_type: n8n-nodes-kargo-entegrator.kargoEntegratorTrigger
package_name: n8n-nodes-kargo-entegrator
display_name: Kargo Entegratör Trigger
description: Triggers when shipment status changes via webhook
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: gurmesoftcom
author_github_url: https://github.com/gurmesoft/
npm_package_name: n8n-nodes-kargo-entegrator
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:33.808Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-kargo-entegrator

  This is an n8n community node. It lets you use Kargo Entegratör API in your n8n workflows.

  Kargo Entegratör is a Turkish cargo integration platform that allows you to manage shipments across multiple cargo companies from a single interface.

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

  ## Table of Contents

  - [Quick Start](#quick-start)
  - [Development Setup](#development-setup)
  - [Docker Environment](#docker-environment)
  - [Installation](#installation)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Scripts](#scripts)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [Version History](#version-history)
  - [License](#license)

  ## Quick Start

  ### Prerequisites
  - Node.js >= 20.15
  - npm or yarn
  - Docker (optional, for containerized development)

  ### Local Development

  1. **Clone and Install**
     ```bash
     git clone https://github.com/gurmesoft/n8n-nodes-kargo-entegrator.git
     cd n8n-nodes-kargo-entegrator
     npm install
     ```

  2. **Build the Project**
     ```bash
     npm run build
     ```

  3. **Start Development**
     ```bash
     npm run dev
     ```

  ### Docker Development (Recommended)

  1. **Quick Start with Docker**
     ```bash
     # Build and start development environment
     npm run dev:docker
     
     # Access N8N at http://localhost:5678
     # Username: admin
     # Password: admin123
     ```

  2. **View Logs**
     ```bash
     npm run dev:docker:logs
     ```

  3. **Stop Environment**
     ```bash
     npm run dev:docker:stop
     ```

  ## Development Setup

  ### Environment Requirements
  - **Node.js**: >= 20.15
  - **TypeScript**: ^5.8.2
  - **n8n-workflow**: Latest (peer dependency)

  ### Project Structure
  ```
  n8n-nodes-kargo-entegrator/
  ├── credentials/           # API credentials configuration
  ├── nodes/                # Node implementations
  │   └── KargoEntegrator/
  │       ├── *.node.ts     # Node logic
  │       ├── actions/      # Node actions
  │       └── resources/    # Node resources
  ├── dist/                 # Built files (generated)
  ├── docker-compose*.yml   # Docker configurations
  └── package.json          # Project configuration
  ```

  ### Development Workflow

  1. **Make Changes**: Edit TypeScript files in `nodes/` or `credentials/`
  2. **Build**: Run `npm run build` to compile TypeScript
  3. **Test**: Use Docker environment or local N8N instance
  4. **Format**: Run `npm run format` to format code
  5. **Lint**: Run `npm run lint` to check code quality

  ## Docker Environment

  Three Docker configurations are available:

  ### 1. Development Environment (Recommended)
  ```bash
  npm run dev:docker
  # or
  docker-compose -f docker-compose.dev.yml up -d
  ```
  - **Services**: N8N + PostgreSQL + Node development container
  - **Features**: Hot reload, debugging, persistent data
  - **Access**: http://localhost:5678

  ### 2. Simple Environment
  ```bash
  docker-compose -f docker-compose.simple.yml up -d
  ```
  - **Services**: N8N only (SQLite database)
  - **Use Case**: Quick testing
  - **Access**: http://localhost:5678

  ### 3. Production Environment
  ```bash
  docker-compose up -d
  ```
  - **Services**: N8N + PostgreSQL
  - **Use Case**: Production deployment
  - **Access**: http://localhost:5678

  ### Docker Commands
  ```bash
  # Start development environment
  npm run dev:docker

  # View logs
  npm run dev:docker:logs

  # Restart services
  npm run dev:docker:restart

  # Stop environment
  npm run dev:docker:stop

  # Build and restart with live reload
  npm run dev:live
  ```

  ### Access Information
  - **N8N Web Interface**: http://localhost:5678
  - **Username**: admin
  - **Password**: admin123
  - **PostgreSQL**: localhost:5432 (production) / localhost:5433 (development)
    - User: n8n
    - Password: n8n123
    - Database: n8n

  ## Scripts

  | Script | Description |
  |--------|-------------|
  | `npm run build` | Build TypeScript and copy icons |
  | `npm run dev` | Watch TypeScript files for changes |
  | `npm run dev:live` | Development with auto-restart |
  | `npm run dev:docker` | Start Docker development environment |
  | `npm run dev:docker:logs` | View Docker logs |
  | `npm run dev:docker:stop` | Stop Docker environment |
  | `npm run dev:docker:restart` | Restart Docker services |
  | `npm run format` | Format code with Prettier |
  | `npm run lint` | Lint code with ESLint |
  | `npm run lintfix` | Fix linting issues automatically |  

  ## Installation

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

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-kargo-entegrator`
  4. Agree to the risks of using community nodes
  5. Select **Install**

  ### Manual Installation

  ```bash
  npm install n8n-nodes-kargo-entegrator
  ```

  ## Operations

  ### Shipment
  - **Create**: Create a new shipment
  - **Get**: Retrieve shipment details
  - **Create Return**: Create a return shipment

  ### Customer
  - **Update**: Update customer information

  ### Cargo
  - **Get All**: Get all available cargo companies
  - **Get**: Get specific cargo company details

  ## Credentials

  To use this node, you need:

  1. Sign up for an account at [https://app.kargoentegrator.com](https://app.kargoentegrator.com)
  2. Get your API key from the dashboard
  3. Configure the credentials in n8n:
     - **API Key**: Your Kargo Entegratör API key
     - **Base URL**: https://app.kargoentegrator.com/api (default)

  ## Compatibility

  Tested against n8n version 1.0+.

  ## Usage

  ### Creating a Shipment

  1. Select "Shipment" as the resource
  2. Choose "Create" as the operation
  3. Fill in the required fields:
     - Receiver name, phone, and address
     - City and district
     - Cargo company ID
     - Package details (weight, count, description)

  ### Managing Returns

  Use the "Create Return" operation to create return shipments with the same interface as regular shipments.

  ### Getting Cargo Companies

  Use the "Cargo" resource to get information about available cargo companies and their IDs for use in shipment creation.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [Kargo Entegratör API Documentation](https://documenter.getpostman.com/view/25047990/2sAY4vg2RR)
  * [Kargo Entegratör Website](https://kargoentegrator.com/)

  ## Version History

  ### 0.1.0
  - Initial release
  - Support for shipment creation, retrieval, and PDF generation
  - Support for return shipment management
  - Cargo company and warehouse information retrieval
  - Webhook trigger for shipment status changes
  - System settings access

  ## Contributing

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

  ## Support

  For support, please contact [destek@kargoentegrator.com](mailto:destek@kargoentegrator.com) or visit our [website](https://kargoentegrator.com/).

  ## License

  [MIT](https://github.com/gurmesoft/n8n-nodes-kargo-entegrator/blob/main/LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation with Kargo Entegratör, a Turkish cargo integration platform, allowing users to manage shipments across multiple cargo companies from a single interface.","capabilities":["Create new shipments","Retrieve shipment details","Create return shipments","Update customer information","List all available cargo companies","Get specific cargo company details"],"authentication":"API key required","commonUseCases":["Automating shipment creation for e-commerce orders","Tracking return logistics processes","Managing customer shipping profiles","Integrating multiple Turkish cargo providers into one workflow"],"limitations":["Requires an active account on Kargo Entegratör platform","Limited to Turkish cargo companies and regions","Community node status may require user agreement to risks"],"relatedNodes":[]}


node_type: n8n-nodes-mpesa-daraja.mpesa
package_name: n8n-nodes-mpesa-daraja
display_name: M-Pesa
description: Consume M-Pesa Daraja 3.0 APIs
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: sudoevans
author_github_url: https://github.com/sudoevans/
npm_package_name: n8n-nodes-mpesa-daraja
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.810Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "stkPush",
      "options": [
        {
          "name": "Account",
          "value": "account",
          "description": "Account operations like balance and status"
        },
        {
          "name": "B2B",
          "value": "b2b",
          "description": "Business to Business payments"
        },
        {
          "name": "B2C",
          "value": "b2c",
          "description": "Business to Customer disbursements"
        },
        {
          "name": "C2B",
          "value": "c2b",
          "description": "Customer to Business payments"
        },
        {
          "name": "Identity",
          "value": "identity",
          "description": "Identity verification services"
        },
        {
          "name": "Pull API",
          "value": "pull",
          "description": "Pull transaction history"
        },
        {
          "name": "STK Push",
          "value": "stkPush",
          "description": "Lipa na M-Pesa Online payment"
        }
      ],
      "description": "The M-Pesa API resource to use",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "initiate",
      "options": [
        {
          "name": "Initiate",
          "value": "initiate",
          "action": "Initiate STK Push",
          "description": "Initiate an STK Push payment"
        },
        {
          "name": "Query Status",
          "value": "queryStatus",
          "action": "Check STK Push Status",
          "description": "Check the status of an STK Push transaction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stkPush"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "registerUrl",
      "options": [
        {
          "name": "Register URL",
          "value": "registerUrl",
          "action": "Register C2B URLs",
          "description": "Register validation and confirmation URLs for C2B payments"
        },
        {
          "name": "Simulate",
          "value": "simulate",
          "action": "Simulate C2B Transaction",
          "description": "Simulate a C2B transaction (sandbox only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "c2b"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "paymentRequest",
      "options": [
        {
          "name": "Payment Request",
          "value": "paymentRequest",
          "action": "Send B2C Payment",
          "description": "Send money from your business to customers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "b2c"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "paymentRequest",
      "options": [
        {
          "name": "Payment Request",
          "value": "paymentRequest",
          "action": "Send B2B Payment",
          "description": "Send money from your business to another business"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "b2b"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkAti",
      "options": [
        {
          "name": "Check ATI",
          "value": "checkAti",
          "action": "Check Subscriber Status",
          "description": "Check subscriber status via IMSI lookup"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "identity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "registerUrl",
      "options": [
        {
          "name": "Register URL",
          "value": "registerUrl",
          "action": "Register Pull URL",
          "description": "Register callback URL for pull transactions"
        },
        {
          "name": "Query",
          "value": "query",
          "action": "Query Pull Transactions",
          "description": "Query transaction history for a date range"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pull"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "balance",
      "options": [
        {
          "name": "Balance",
          "value": "balance",
          "action": "Check Account Balance",
          "description": "Check your M-Pesa account balance"
        },
        {
          "name": "Transaction Status",
          "value": "transactionStatus",
          "action": "Check Transaction Status",
          "description": "Check the status of an M-Pesa transaction"
        },
        {
          "name": "Reversal",
          "value": "reversal",
          "action": "Reverse Transaction",
          "description": "Reverse a completed M-Pesa transaction"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Initiate",
      "value": "initiate",
      "action": "Initiate STK Push",
      "description": "Initiate an STK Push payment",
      "resource": "stkPush"
    },
    {
      "name": "Query Status",
      "value": "queryStatus",
      "action": "Check STK Push Status",
      "description": "Check the status of an STK Push transaction",
      "resource": "stkPush"
    },
    {
      "name": "Register URL",
      "value": "registerUrl",
      "action": "Register C2B URLs",
      "description": "Register validation and confirmation URLs for C2B payments",
      "resource": "c2b"
    },
    {
      "name": "Simulate",
      "value": "simulate",
      "action": "Simulate C2B Transaction",
      "description": "Simulate a C2B transaction (sandbox only)",
      "resource": "c2b"
    },
    {
      "name": "Payment Request",
      "value": "paymentRequest",
      "action": "Send B2C Payment",
      "description": "Send money from your business to customers",
      "resource": "b2c"
    },
    {
      "name": "Payment Request",
      "value": "paymentRequest",
      "action": "Send B2B Payment",
      "description": "Send money from your business to another business",
      "resource": "b2b"
    },
    {
      "name": "Check ATI",
      "value": "checkAti",
      "action": "Check Subscriber Status",
      "description": "Check subscriber status via IMSI lookup",
      "resource": "identity"
    },
    {
      "name": "Register URL",
      "value": "registerUrl",
      "action": "Register Pull URL",
      "description": "Register callback URL for pull transactions",
      "resource": "pull"
    },
    {
      "name": "Query",
      "value": "query",
      "action": "Query Pull Transactions",
      "description": "Query transaction history for a date range",
      "resource": "pull"
    },
    {
      "name": "Balance",
      "value": "balance",
      "action": "Check Account Balance",
      "description": "Check your M-Pesa account balance",
      "resource": "account"
    },
    {
      "name": "Transaction Status",
      "value": "transactionStatus",
      "action": "Check Transaction Status",
      "description": "Check the status of an M-Pesa transaction",
      "resource": "account"
    },
    {
      "name": "Reversal",
      "value": "reversal",
      "action": "Reverse Transaction",
      "description": "Reverse a completed M-Pesa transaction",
      "resource": "account"
    }
  ]

npm_readme:
  # n8n-nodes-mpesa-daraja

  <div align="center">
    <img src="https://upload.wikimedia.org/wikipedia/commons/1/15/M-PESA_LOGO-01.svg" alt="M-Pesa" width="150"/>
    <img src="https://n8n.io/n8n-logo.png" alt="n8n" width="150"/>
  </div>

  This package provides n8n nodes to interact with the Safaricom M-Pesa Daraja API 3.0. Automate mobile payments, account balance checks, transaction status queries, and webhook handling for payment callbacks.

  ## Table of Contents

  - [Prerequisites](#prerequisites)
  - [Installation](#installation)
  - [Credentials Setup](#credentials-setup)
  - [Nodes](#nodes)
    - [M-Pesa Node](#m-pesa-node)
    - [M-Pesa Trigger Node](#m-pesa-trigger-node)
  - [Operations](#operations)
  - [Examples](#examples)
  - [Resources](#resources)
  - [License](#license)

  ## Prerequisites

  Before using this integration, you need:

  - An active n8n instance (self-hosted or cloud)
  - A Safaricom developer account at [developer.safaricom.co.ke](https://developer.safaricom.co.ke)
  - M-Pesa API credentials (Consumer Key and Consumer Secret)
  - For production: Till/Paybill number and security credentials

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to Settings > Community Nodes in your n8n instance
  2. Select Install
  3. Enter `n8n-nodes-mpesa-daraja`
  4. Agree to the risks and select Install
  5. Restart n8n to load the new nodes

  ### Manual Installation

  For self-hosted n8n instances:

  ```bash
  cd /path/to/n8n/installation
  npm install n8n-nodes-mpesa-daraja
  # Restart n8n
  ```

  ## Credentials Setup

  ### Creating M-Pesa API Credentials

  1. Go to your n8n instance
  2. Navigate to Credentials > New
  3. Search for "M-Pesa API" and select it
  4. Fill in the following fields:

  | Field | Description |
  |-------|-------------|
  | Consumer Key | Your app's consumer key from Safaricom developer portal |
  | Consumer Secret | Your app's consumer secret from Safaricom developer portal |
  | Environment | Select `Sandbox` for testing or `Production` for live transactions |

  5. Click Create to save

  ### Getting Credentials from Safaricom

  1. Visit [developer.safaricom.co.ke](https://developer.safaricom.co.ke)
  2. Log in or create an account
  3. Go to My Apps
  4. Create a new app or select an existing one
  5. Copy the Consumer Key and Consumer Secret

  ## Nodes

  ### M-Pesa Node

  The M-Pesa node allows you to perform various operations with the M-Pesa API.

  **Node Type:** Action

  **Credentials Required:** M-Pesa API

  ### M-Pesa Trigger Node

  The M-Pesa Trigger node listens for webhook callbacks from M-Pesa when transactions complete.

  **Node Type:** Trigger

  **Credentials Required:** None (uses webhooks)

  ## Operations

  ### STK Push (Lipa na M-Pesa)

  Initiate mobile payment prompts directly to customer phones.

  **Operations:**
  - **Initiate:** Send an STK Push prompt to a customer's phone
  - **Query Status:** Check the status of an STK Push transaction

  **Use Cases:**
  - E-commerce checkout flows
  - Service payment collection
  - Subscription renewals

  ### C2B (Customer to Business)

  Register and simulate customer payments to your business.

  **Operations:**
  - **Register URL:** Register validation and confirmation URLs for C2B transactions
  - **Simulate:** Test C2B transactions in sandbox environment

  **Use Cases:**
  - Till/Paybill payment automation
  - Real-time payment validation
  - Payment confirmation handling

  ### B2C (Business to Customer)

  Send money from your business to customers.

  **Operations:**
  - **Payment Request:** Disburse funds to customer mobile wallets

  **Use Cases:**
  - Salary payments
  - Customer refunds
  - Promotional payouts
  - Affiliate commissions

  ### B2B (Business to Business)

  Transfer funds between business accounts.

  **Operations:**
  - **Payment Request:** Send payments to other businesses

  **Use Cases:**
  - Supplier payments
  - Inter-company transfers
  - Bulk disbursements

  ### Account Operations

  Manage your M-Pesa account.

  **Operations:**
  - **Balance:** Check your M-Pesa account balance
  - **Transaction Status:** Query the status of any transaction
  - **Reversal:** Reverse a completed transaction

  **Use Cases:**
  - Automated balance monitoring
  - Transaction reconciliation
  - Error correction workflows

  ### Identity

  Verify customer information.

  **Operations:**
  - **Check ATI:** Verify subscriber status via IMSI

  ### Pull API

  Query transaction history.

  **Operations:**
  - **Register URL:** Register callback URL for pull transactions
  - **Query:** Retrieve transaction history for a date range

  ## M-Pesa Trigger Events

  The trigger node supports the following webhook events:

  | Event | Description | Triggered When |
  |-------|-------------|----------------|
  | Payment Received | C2B confirmation callback | Customer pays to your Till/Paybill |
  | STK Push Completed | Lipa na M-Pesa callback | STK Push transaction completes (success/failure) |
  | B2C Completed | Business to Customer callback | B2C disbursement completes |
  | B2B Completed | Business to Business callback | B2B payment completes |
  | Reversal Completed | Transaction reversal callback | Reversal request completes |
  | Account Balance Completed | Balance query callback | Account balance check completes |
  | Transaction Status Completed | Status query callback | Transaction status check completes |

  ### Trigger Options

  - **Only Successful Transactions:** Filter to trigger only on successful transactions (ResultCode = 0)
  - **Normalize Output:** Transform callback payloads into a consistent format across all event types

  ## Examples

  ### Example 1: Process STK Push Payment

  1. Add M-Pesa Trigger node
  2. Select event: "STK Push Completed"
  3. Enable "Only Successful Transactions"
  4. Copy the webhook production URL
  5. Use this URL when initiating STK Push via M-Pesa node
  6. Add your business logic nodes (e.g., update database, send confirmation email)

  ### Example 2: Check Account Balance

  1. Add M-Pesa node
  2. Select Resource: "Account"
  3. Select Operation: "Balance"
  4. Fill in required fields:
     - Initiator Name
     - Security Credential
     - Party A (your shortcode)
     - Queue Timeout URL
     - Result URL (use M-Pesa Trigger webhook URL)
  5. Execute the workflow

  ### Example 3: Automated Daily Balance Report

  1. Add Schedule Trigger (daily at 9 AM)
  2. Add M-Pesa node for Account Balance
  3. Add M-Pesa Trigger for balance callback
  4. Add Email node to send balance report
  5. Activate workflow

  ## Resources

  - [Safaricom Developer Portal](https://developer.safaricom.co.ke)
  - [M-Pesa Daraja API Documentation](https://developer.safaricom.co.ke/Documentation)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Forum](https://community.n8n.io)

  ## License

  [MIT](LICENSE)

  ## Support

  For issues or feature requests, please visit the [GitHub repository](https://github.com/sudoevans/n8n-nodes-mpesa-daraja) and open an issue.

ai_documentation_summary:
  {"purpose":"Enables automation of Safaricom M-Pesa Daraja API 3.0 operations including mobile payments, balance checks, and transaction management within n8n workflows.","capabilities":["Initiate STK Push (Lipa na M-Pesa) payments","Query STK Push transaction status","Register and simulate C2B (Customer to Business) transactions","Execute B2C (Business to Customer) fund disbursements","Execute B2B (Business to Business) transfers","Check account balance","Query general transaction status","Reverse completed transactions","Verify customer identity via ATI","Retrieve transaction history via Pull API"],"authentication":"API key required (Consumer Key and Consumer Secret)","commonUseCases":["E-commerce checkout flows","Service payment collection","Salary and commission disbursements","Automated balance monitoring","Transaction reconciliation"],"limitations":["Requires active Safaricom developer account and API credentials","Production use requires Till/Paybill number and security credentials","Trigger node requires correct webhook URL configuration for callbacks"],"relatedNodes":[]}


node_type: n8n-nodes-mpesa-daraja.mpesaTrigger
package_name: n8n-nodes-mpesa-daraja
display_name: M-Pesa Trigger
description: Handle M-Pesa Daraja API Callbacks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: sudoevans
author_github_url: https://github.com/sudoevans/
npm_package_name: n8n-nodes-mpesa-daraja
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:33.811Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-mpesa-daraja

  <div align="center">
    <img src="https://upload.wikimedia.org/wikipedia/commons/1/15/M-PESA_LOGO-01.svg" alt="M-Pesa" width="150"/>
    <img src="https://n8n.io/n8n-logo.png" alt="n8n" width="150"/>
  </div>

  This package provides n8n nodes to interact with the Safaricom M-Pesa Daraja API 3.0. Automate mobile payments, account balance checks, transaction status queries, and webhook handling for payment callbacks.

  ## Table of Contents

  - [Prerequisites](#prerequisites)
  - [Installation](#installation)
  - [Credentials Setup](#credentials-setup)
  - [Nodes](#nodes)
    - [M-Pesa Node](#m-pesa-node)
    - [M-Pesa Trigger Node](#m-pesa-trigger-node)
  - [Operations](#operations)
  - [Examples](#examples)
  - [Resources](#resources)
  - [License](#license)

  ## Prerequisites

  Before using this integration, you need:

  - An active n8n instance (self-hosted or cloud)
  - A Safaricom developer account at [developer.safaricom.co.ke](https://developer.safaricom.co.ke)
  - M-Pesa API credentials (Consumer Key and Consumer Secret)
  - For production: Till/Paybill number and security credentials

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to Settings > Community Nodes in your n8n instance
  2. Select Install
  3. Enter `n8n-nodes-mpesa-daraja`
  4. Agree to the risks and select Install
  5. Restart n8n to load the new nodes

  ### Manual Installation

  For self-hosted n8n instances:

  ```bash
  cd /path/to/n8n/installation
  npm install n8n-nodes-mpesa-daraja
  # Restart n8n
  ```

  ## Credentials Setup

  ### Creating M-Pesa API Credentials

  1. Go to your n8n instance
  2. Navigate to Credentials > New
  3. Search for "M-Pesa API" and select it
  4. Fill in the following fields:

  | Field | Description |
  |-------|-------------|
  | Consumer Key | Your app's consumer key from Safaricom developer portal |
  | Consumer Secret | Your app's consumer secret from Safaricom developer portal |
  | Environment | Select `Sandbox` for testing or `Production` for live transactions |

  5. Click Create to save

  ### Getting Credentials from Safaricom

  1. Visit [developer.safaricom.co.ke](https://developer.safaricom.co.ke)
  2. Log in or create an account
  3. Go to My Apps
  4. Create a new app or select an existing one
  5. Copy the Consumer Key and Consumer Secret

  ## Nodes

  ### M-Pesa Node

  The M-Pesa node allows you to perform various operations with the M-Pesa API.

  **Node Type:** Action

  **Credentials Required:** M-Pesa API

  ### M-Pesa Trigger Node

  The M-Pesa Trigger node listens for webhook callbacks from M-Pesa when transactions complete.

  **Node Type:** Trigger

  **Credentials Required:** None (uses webhooks)

  ## Operations

  ### STK Push (Lipa na M-Pesa)

  Initiate mobile payment prompts directly to customer phones.

  **Operations:**
  - **Initiate:** Send an STK Push prompt to a customer's phone
  - **Query Status:** Check the status of an STK Push transaction

  **Use Cases:**
  - E-commerce checkout flows
  - Service payment collection
  - Subscription renewals

  ### C2B (Customer to Business)

  Register and simulate customer payments to your business.

  **Operations:**
  - **Register URL:** Register validation and confirmation URLs for C2B transactions
  - **Simulate:** Test C2B transactions in sandbox environment

  **Use Cases:**
  - Till/Paybill payment automation
  - Real-time payment validation
  - Payment confirmation handling

  ### B2C (Business to Customer)

  Send money from your business to customers.

  **Operations:**
  - **Payment Request:** Disburse funds to customer mobile wallets

  **Use Cases:**
  - Salary payments
  - Customer refunds
  - Promotional payouts
  - Affiliate commissions

  ### B2B (Business to Business)

  Transfer funds between business accounts.

  **Operations:**
  - **Payment Request:** Send payments to other businesses

  **Use Cases:**
  - Supplier payments
  - Inter-company transfers
  - Bulk disbursements

  ### Account Operations

  Manage your M-Pesa account.

  **Operations:**
  - **Balance:** Check your M-Pesa account balance
  - **Transaction Status:** Query the status of any transaction
  - **Reversal:** Reverse a completed transaction

  **Use Cases:**
  - Automated balance monitoring
  - Transaction reconciliation
  - Error correction workflows

  ### Identity

  Verify customer information.

  **Operations:**
  - **Check ATI:** Verify subscriber status via IMSI

  ### Pull API

  Query transaction history.

  **Operations:**
  - **Register URL:** Register callback URL for pull transactions
  - **Query:** Retrieve transaction history for a date range

  ## M-Pesa Trigger Events

  The trigger node supports the following webhook events:

  | Event | Description | Triggered When |
  |-------|-------------|----------------|
  | Payment Received | C2B confirmation callback | Customer pays to your Till/Paybill |
  | STK Push Completed | Lipa na M-Pesa callback | STK Push transaction completes (success/failure) |
  | B2C Completed | Business to Customer callback | B2C disbursement completes |
  | B2B Completed | Business to Business callback | B2B payment completes |
  | Reversal Completed | Transaction reversal callback | Reversal request completes |
  | Account Balance Completed | Balance query callback | Account balance check completes |
  | Transaction Status Completed | Status query callback | Transaction status check completes |

  ### Trigger Options

  - **Only Successful Transactions:** Filter to trigger only on successful transactions (ResultCode = 0)
  - **Normalize Output:** Transform callback payloads into a consistent format across all event types

  ## Examples

  ### Example 1: Process STK Push Payment

  1. Add M-Pesa Trigger node
  2. Select event: "STK Push Completed"
  3. Enable "Only Successful Transactions"
  4. Copy the webhook production URL
  5. Use this URL when initiating STK Push via M-Pesa node
  6. Add your business logic nodes (e.g., update database, send confirmation email)

  ### Example 2: Check Account Balance

  1. Add M-Pesa node
  2. Select Resource: "Account"
  3. Select Operation: "Balance"
  4. Fill in required fields:
     - Initiator Name
     - Security Credential
     - Party A (your shortcode)
     - Queue Timeout URL
     - Result URL (use M-Pesa Trigger webhook URL)
  5. Execute the workflow

  ### Example 3: Automated Daily Balance Report

  1. Add Schedule Trigger (daily at 9 AM)
  2. Add M-Pesa node for Account Balance
  3. Add M-Pesa Trigger for balance callback
  4. Add Email node to send balance report
  5. Activate workflow

  ## Resources

  - [Safaricom Developer Portal](https://developer.safaricom.co.ke)
  - [M-Pesa Daraja API Documentation](https://developer.safaricom.co.ke/Documentation)
  - [n8n Documentation](https://docs.n8n.io)
  - [n8n Community Forum](https://community.n8n.io)

  ## License

  [MIT](LICENSE)

  ## Support

  For issues or feature requests, please visit the [GitHub repository](https://github.com/sudoevans/n8n-nodes-mpesa-daraja) and open an issue.

ai_documentation_summary:
  {"purpose":"The M-Pesa Trigger node listens for webhook callbacks from the Safaricom M-Pesa Daraja API to handle real-time transaction events like payments, STK pushes, and account balance updates.","capabilities":["Listen for C2B payment received callbacks","Listen for STK Push completion callbacks","Listen for B2C disbursement completion callbacks","Listen for B2B payment completion callbacks","Listen for transaction reversal completion callbacks","Listen for account balance query completion callbacks","Listen for transaction status query completion callbacks","Filter triggers to only successful transactions (ResultCode = 0)","Normalize webhook output payloads into a consistent format"],"authentication":"None (uses webhooks)","commonUseCases":["Automating order fulfillment upon payment confirmation","Sending customer notifications after successful transactions","Updating inventory or database records based on payment events","Handling failed transaction retries or alerts"],"limitations":["Requires external webhook endpoint configuration in Safaricom developer portal","Does not initiate transactions; only responds to callbacks","Dependent on Safaricom's webhook delivery reliability"],"relatedNodes":["M-Pesa"]}


node_type: @inboxapp/n8n-nodes-inboxapp.inboxApp
package_name: @inboxapp/n8n-nodes-inboxapp
display_name: InboxApp
description: Manage X/Twitter DM conversations, prospects, threads, and messages with InboxApp
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  {
  "type": "main"
  }
  ]

updated_at: 2026-07-14 14:40:33
author_name: kevinpicchi
author_github_url: https://github.com/InboxHQ/n8n-nodes-inboxapp.git
npm_package_name: @inboxapp/n8n-nodes-inboxapp
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:33.813Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Teams",
          "value": "Teams",
          "description": "Teams are shared workspace for members to view and manage account links, tags, statuses, campaigns, conversations, and more."
        },
        {
          "name": "Threads",
          "value": "Threads",
          "description": "\nThreads represent conversations between an account linked to your team and a prospect on Twitter.\n            "
        },
        {
          "name": "Messages",
          "value": "Messages",
          "description": "\nMessages are the individual messages sent in a thread.\n            "
        },
        {
          "name": "Account Links",
          "value": "Account Links",
          "description": "\nAccount links represent X accounts connected to your team.\n            "
        },
        {
          "name": "Members",
          "value": "Members",
          "description": "\nMembers are Inbox users who can access the team.\n            "
        },
        {
          "name": "Prospects",
          "value": "Prospects",
          "description": "\nProspects represent external profiles on X.\n            "
        },
        {
          "name": "Tags",
          "value": "Tags",
          "description": "\nTags are labels for prospects.\n            "
        },
        {
          "name": "Statuses",
          "value": "Statuses",
          "description": "\nStatuses are used to track the deal stage or any fixed state for a prospect.\n            "
        },
        {
          "name": "Colors",
          "value": "Colors",
          "description": "\nGet predefined color options that can be used when creating or updating tags and statuses.\n            "
        },
        {
          "name": "Events",
          "value": "Events",
          "description": ""
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Team Get",
          "value": "Team Get",
          "action": "Get team",
          "routing": {
            "request": {
              "url": "=/team",
              "method": "GET"
            }
          },
          "description": "Get the team associated with the supplied API token."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Teams"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Threads List",
          "value": "Threads List",
          "action": "List threads",
          "routing": {
            "request": {
              "url": "=/threads",
              "method": "GET"
            }
          },
          "description": "List threads ordered by recency with advanced filtering"
        },
        {
          "name": "Threads Create",
          "value": "Threads Create",
          "action": "Create thread",
          "routing": {
            "request": {
              "url": "=/threads",
              "method": "POST"
            }
          },
          "description": "Create a new active thread with a prospect"
        },
        {
          "name": "Threads Lookup",
          "value": "Threads Lookup",
          "action": "Lookup thread",
          "routing": {
            "request": {
              "url": "=/threads/lookup",
              "method": "GET"
            }
          },
          "description": "Find a thread by account link ID and external identifier (platform ID or external ID)"
        },
        {
          "name": "Threads Lookup By Username",
          "value": "Threads Lookup By Username",
          "action": "Lookup threads by username",
          "routing": {
            "request": {
              "url": "=/threads/lookup-by-username",
              "method": "GET"
            }
          },
          "description": "Find all threads for a prospect by their exact platform username. Returns threads across all account links."
        },
        {
          "name": "Threads Thread Get",
          "value": "Threads Thread Get",
          "action": "Get thread",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific thread"
        },
        {
          "name": "Threads Thread Update",
          "value": "Threads Thread Update",
          "action": "Update thread",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Mark a thread done or change assignee"
        },
        {
          "name": "Threads Thread Delete",
          "value": "Threads Thread Delete",
          "action": "Delete thread",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Soft delete a thread"
        },
        {
          "name": "Threads Thread Typing",
          "value": "Threads Thread Typing",
          "action": "Send typing indicator",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/typing",
              "method": "POST"
            }
          },
          "description": "Sends a typing indicator to the external party in the thread. Only supported for X Chat (encrypted) threads."
        },
        {
          "name": "Threads Thread Settings",
          "value": "Threads Thread Settings",
          "action": "Update thread settings",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/settings",
              "method": "PATCH"
            }
          },
          "description": "Update settings for a specific thread"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Threads"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Threads Thread Messages List",
          "value": "Threads Thread Messages List",
          "action": "List messages",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages",
              "method": "GET"
            }
          },
          "description": "List messages in a thread with pagination support"
        },
        {
          "name": "Threads Thread Messages Create",
          "value": "Threads Thread Messages Create",
          "action": "Send message",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a message in a thread"
        },
        {
          "name": "Threads Thread Messages Message Edit",
          "value": "Threads Thread Messages Message Edit",
          "action": "Edit message",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Edit a message in a thread. Only works for X Chat (encrypted DM) threads."
        },
        {
          "name": "Threads Thread Messages Message Delete",
          "value": "Threads Thread Messages Message Delete",
          "action": "Delete message",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a message in a thread. Only works for X Chat (encrypted DM) threads."
        },
        {
          "name": "Threads Thread Messages Message History",
          "value": "Threads Thread Messages Message History",
          "action": "Get message history",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/history",
              "method": "GET"
            }
          },
          "description": "Get the edit history and deletion status of a message. Returns all versions of the message content over time."
        },
        {
          "name": "Threads Thread Messages Message Reactions Add",
          "value": "Threads Thread Messages Message Reactions Add",
          "action": "Add reaction",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/reactions/reactions",
              "method": "POST"
            }
          },
          "description": "Add a reaction to a message. Only works for non-sandbox threads."
        },
        {
          "name": "Threads Thread Messages Message Reactions Remove",
          "value": "Threads Thread Messages Message Reactions Remove",
          "action": "Remove reaction",
          "routing": {
            "request": {
              "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/reactions/reactions",
              "method": "DELETE"
            }
          },
          "description": "Remove a reaction from a message. Only works for non-sandbox threads."
        },
        {
          "name": "Threads Messages Quick Send",
          "value": "Threads Messages Quick Send",
          "action": "Quick send message",
          "routing": {
            "request": {
              "url": "=/threads/messages",
              "method": "POST"
            }
          },
          "description": "Send a message without knowing the thread ID ahead of time. Automatically creates a thread if needed."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Messages"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Account Links List",
          "value": "Account Links List",
          "action": "List account links",
          "routing": {
            "request": {
              "url": "=/account-links",
              "method": "GET"
            }
          },
          "description": "List all account links for the team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Account Links"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Members List",
          "value": "Members List",
          "action": "List members",
          "routing": {
            "request": {
              "url": "=/members",
              "method": "GET"
            }
          },
          "description": "List all members of the team"
        },
        {
          "name": "Members Get",
          "value": "Members Get",
          "action": "Get member",
          "routing": {
            "request": {
              "url": "=/members/{{$parameter[\"memberId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Members"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Prospects Get",
          "value": "Prospects Get",
          "action": "Get prospect",
          "routing": {
            "request": {
              "url": "=/prospects/{{$parameter[\"prospectId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific prospect"
        },
        {
          "name": "Prospects Update",
          "value": "Prospects Update",
          "action": "Update prospect context",
          "routing": {
            "request": {
              "url": "=/prospects/{{$parameter[\"prospectId\"]}}/context",
              "method": "PATCH"
            }
          },
          "description": "Update context of a specific prospect"
        },
        {
          "name": "Prospects Lookup",
          "value": "Prospects Lookup",
          "action": "Lookup prospect",
          "routing": {
            "request": {
              "url": "=/prospects/lookup",
              "method": "GET"
            }
          },
          "description": "Find an Inbox prospect by platform ID. Note that not all of Twitter is included here. A separate search API will be available for profiles not in our CRM later."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Prospects"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Tags List",
          "value": "Tags List",
          "action": "List tags",
          "routing": {
            "request": {
              "url": "=/tags",
              "method": "GET"
            }
          },
          "description": "List all tags in the team"
        },
        {
          "name": "Tags Create",
          "value": "Tags Create",
          "action": "Create tag",
          "routing": {
            "request": {
              "url": "=/tags",
              "method": "POST"
            }
          },
          "description": "Create a new tag for organizing threads and prospects"
        },
        {
          "name": "Tags Get",
          "value": "Tags Get",
          "action": "Get tag",
          "routing": {
            "request": {
              "url": "=/tags/{{$parameter[\"tagId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific tag"
        },
        {
          "name": "Tags Update",
          "value": "Tags Update",
          "action": "Update tag",
          "routing": {
            "request": {
              "url": "=/tags/{{$parameter[\"tagId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a tag's name or color"
        },
        {
          "name": "Tags Delete",
          "value": "Tags Delete",
          "action": "Delete tag",
          "routing": {
            "request": {
              "url": "=/tags/{{$parameter[\"tagId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a tag. This will remove the tag from all threads and prospects."
        },
        {
          "name": "Tags Colors",
          "value": "Tags Colors",
          "action": "List available colors",
          "routing": {
            "request": {
              "url": "=/tags/colors",
              "method": "GET"
            }
          },
          "description": "Get a list of predefined colors that can be used when creating or updating tags"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Tags"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Statuses List",
          "value": "Statuses List",
          "action": "List statuses",
          "routing": {
            "request": {
              "url": "=/statuses",
              "method": "GET"
            }
          },
          "description": "List all statuses in the team"
        },
        {
          "name": "Statuses Create",
          "value": "Statuses Create",
          "action": "Create status",
          "routing": {
            "request": {
              "url": "=/statuses",
              "method": "POST"
            }
          },
          "description": "Create a new status to track leads through your sales pipeline"
        },
        {
          "name": "Statuses Get",
          "value": "Statuses Get",
          "action": "Get status",
          "routing": {
            "request": {
              "url": "=/statuses/{{$parameter[\"statusId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get details of a specific status"
        },
        {
          "name": "Statuses Update",
          "value": "Statuses Update",
          "action": "Update status",
          "routing": {
            "request": {
              "url": "=/statuses/{{$parameter[\"statusId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a status's name or color"
        },
        {
          "name": "Statuses Delete",
          "value": "Statuses Delete",
          "action": "Delete status",
          "routing": {
            "request": {
              "url": "=/statuses/{{$parameter[\"statusId\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a status. This will remove the status from all threads."
        },
        {
          "name": "Statuses Colors",
          "value": "Statuses Colors",
          "action": "List available colors",
          "routing": {
            "request": {
              "url": "=/statuses/colors",
              "method": "GET"
            }
          },
          "description": "Get a list of predefined colors that can be used when creating or updating statuses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Statuses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Colors List",
          "value": "Colors List",
          "action": "List available colors",
          "routing": {
            "request": {
              "url": "=/colors",
              "method": "GET"
            }
          },
          "description": "Get a list of predefined colors that can be used when creating or updating tags or statuses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Colors"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Events List",
          "value": "Events List",
          "action": "List events",
          "routing": {
            "request": {
              "url": "=/events",
              "method": "GET"
            }
          },
          "description": "List webhook events for replay. Events are stored for 7 days."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Events"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Team Get",
      "value": "Team Get",
      "action": "Get team",
      "routing": {
        "request": {
          "url": "=/team",
          "method": "GET"
        }
      },
      "description": "Get the team associated with the supplied API token.",
      "resource": "Teams"
    },
    {
      "name": "Threads List",
      "value": "Threads List",
      "action": "List threads",
      "routing": {
        "request": {
          "url": "=/threads",
          "method": "GET"
        }
      },
      "description": "List threads ordered by recency with advanced filtering",
      "resource": "Threads"
    },
    {
      "name": "Threads Create",
      "value": "Threads Create",
      "action": "Create thread",
      "routing": {
        "request": {
          "url": "=/threads",
          "method": "POST"
        }
      },
      "description": "Create a new active thread with a prospect",
      "resource": "Threads"
    },
    {
      "name": "Threads Lookup",
      "value": "Threads Lookup",
      "action": "Lookup thread",
      "routing": {
        "request": {
          "url": "=/threads/lookup",
          "method": "GET"
        }
      },
      "description": "Find a thread by account link ID and external identifier (platform ID or external ID)",
      "resource": "Threads"
    },
    {
      "name": "Threads Lookup By Username",
      "value": "Threads Lookup By Username",
      "action": "Lookup threads by username",
      "routing": {
        "request": {
          "url": "=/threads/lookup-by-username",
          "method": "GET"
        }
      },
      "description": "Find all threads for a prospect by their exact platform username. Returns threads across all account links.",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Get",
      "value": "Threads Thread Get",
      "action": "Get thread",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific thread",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Update",
      "value": "Threads Thread Update",
      "action": "Update thread",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Mark a thread done or change assignee",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Delete",
      "value": "Threads Thread Delete",
      "action": "Delete thread",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Soft delete a thread",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Typing",
      "value": "Threads Thread Typing",
      "action": "Send typing indicator",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/typing",
          "method": "POST"
        }
      },
      "description": "Sends a typing indicator to the external party in the thread. Only supported for X Chat (encrypted) threads.",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Settings",
      "value": "Threads Thread Settings",
      "action": "Update thread settings",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/settings",
          "method": "PATCH"
        }
      },
      "description": "Update settings for a specific thread",
      "resource": "Threads"
    },
    {
      "name": "Threads Thread Messages List",
      "value": "Threads Thread Messages List",
      "action": "List messages",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages",
          "method": "GET"
        }
      },
      "description": "List messages in a thread with pagination support",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Create",
      "value": "Threads Thread Messages Create",
      "action": "Send message",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a message in a thread",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Message Edit",
      "value": "Threads Thread Messages Message Edit",
      "action": "Edit message",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Edit a message in a thread. Only works for X Chat (encrypted DM) threads.",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Message Delete",
      "value": "Threads Thread Messages Message Delete",
      "action": "Delete message",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a message in a thread. Only works for X Chat (encrypted DM) threads.",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Message History",
      "value": "Threads Thread Messages Message History",
      "action": "Get message history",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/history",
          "method": "GET"
        }
      },
      "description": "Get the edit history and deletion status of a message. Returns all versions of the message content over time.",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Message Reactions Add",
      "value": "Threads Thread Messages Message Reactions Add",
      "action": "Add reaction",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/reactions/reactions",
          "method": "POST"
        }
      },
      "description": "Add a reaction to a message. Only works for non-sandbox threads.",
      "resource": "Messages"
    },
    {
      "name": "Threads Thread Messages Message Reactions Remove",
      "value": "Threads Thread Messages Message Reactions Remove",
      "action": "Remove reaction",
      "routing": {
        "request": {
          "url": "=/threads/{{$parameter[\"threadId\"]}}/messages/{{$parameter[\"messageId\"]}}/reactions/reactions",
          "method": "DELETE"
        }
      },
      "description": "Remove a reaction from a message. Only works for non-sandbox threads.",
      "resource": "Messages"
    },
    {
      "name": "Threads Messages Quick Send",
      "value": "Threads Messages Quick Send",
      "action": "Quick send message",
      "routing": {
        "request": {
          "url": "=/threads/messages",
          "method": "POST"
        }
      },
      "description": "Send a message without knowing the thread ID ahead of time. Automatically creates a thread if needed.",
      "resource": "Messages"
    },
    {
      "name": "Account Links List",
      "value": "Account Links List",
      "action": "List account links",
      "routing": {
        "request": {
          "url": "=/account-links",
          "method": "GET"
        }
      },
      "description": "List all account links for the team",
      "resource": "Account Links"
    },
    {
      "name": "Members List",
      "value": "Members List",
      "action": "List members",
      "routing": {
        "request": {
          "url": "=/members",
          "method": "GET"
        }
      },
      "description": "List all members of the team",
      "resource": "Members"
    },
    {
      "name": "Members Get",
      "value": "Members Get",
      "action": "Get member",
      "routing": {
        "request": {
          "url": "=/members/{{$parameter[\"memberId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific member",
      "resource": "Members"
    },
    {
      "name": "Prospects Get",
      "value": "Prospects Get",
      "action": "Get prospect",
      "routing": {
        "request": {
          "url": "=/prospects/{{$parameter[\"prospectId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific prospect",
      "resource": "Prospects"
    },
    {
      "name": "Prospects Update",
      "value": "Prospects Update",
      "action": "Update prospect context",
      "routing": {
        "request": {
          "url": "=/prospects/{{$parameter[\"prospectId\"]}}/context",
          "method": "PATCH"
        }
      },
      "description": "Update context of a specific prospect",
      "resource": "Prospects"
    },
    {
      "name": "Prospects Lookup",
      "value": "Prospects Lookup",
      "action": "Lookup prospect",
      "routing": {
        "request": {
          "url": "=/prospects/lookup",
          "method": "GET"
        }
      },
      "description": "Find an Inbox prospect by platform ID. Note that not all of Twitter is included here. A separate search API will be available for profiles not in our CRM later.",
      "resource": "Prospects"
    },
    {
      "name": "Tags List",
      "value": "Tags List",
      "action": "List tags",
      "routing": {
        "request": {
          "url": "=/tags",
          "method": "GET"
        }
      },
      "description": "List all tags in the team",
      "resource": "Tags"
    },
    {
      "name": "Tags Create",
      "value": "Tags Create",
      "action": "Create tag",
      "routing": {
        "request": {
          "url": "=/tags",
          "method": "POST"
        }
      },
      "description": "Create a new tag for organizing threads and prospects",
      "resource": "Tags"
    },
    {
      "name": "Tags Get",
      "value": "Tags Get",
      "action": "Get tag",
      "routing": {
        "request": {
          "url": "=/tags/{{$parameter[\"tagId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific tag",
      "resource": "Tags"
    },
    {
      "name": "Tags Update",
      "value": "Tags Update",
      "action": "Update tag",
      "routing": {
        "request": {
          "url": "=/tags/{{$parameter[\"tagId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a tag's name or color",
      "resource": "Tags"
    },
    {
      "name": "Tags Delete",
      "value": "Tags Delete",
      "action": "Delete tag",
      "routing": {
        "request": {
          "url": "=/tags/{{$parameter[\"tagId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a tag. This will remove the tag from all threads and prospects.",
      "resource": "Tags"
    },
    {
      "name": "Tags Colors",
      "value": "Tags Colors",
      "action": "List available colors",
      "routing": {
        "request": {
          "url": "=/tags/colors",
          "method": "GET"
        }
      },
      "description": "Get a list of predefined colors that can be used when creating or updating tags",
      "resource": "Tags"
    },
    {
      "name": "Statuses List",
      "value": "Statuses List",
      "action": "List statuses",
      "routing": {
        "request": {
          "url": "=/statuses",
          "method": "GET"
        }
      },
      "description": "List all statuses in the team",
      "resource": "Statuses"
    },
    {
      "name": "Statuses Create",
      "value": "Statuses Create",
      "action": "Create status",
      "routing": {
        "request": {
          "url": "=/statuses",
          "method": "POST"
        }
      },
      "description": "Create a new status to track leads through your sales pipeline",
      "resource": "Statuses"
    },
    {
      "name": "Statuses Get",
      "value": "Statuses Get",
      "action": "Get status",
      "routing": {
        "request": {
          "url": "=/statuses/{{$parameter[\"statusId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get details of a specific status",
      "resource": "Statuses"
    },
    {
      "name": "Statuses Update",
      "value": "Statuses Update",
      "action": "Update status",
      "routing": {
        "request": {
          "url": "=/statuses/{{$parameter[\"statusId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a status's name or color",
      "resource": "Statuses"
    },
    {
      "name": "Statuses Delete",
      "value": "Statuses Delete",
      "action": "Delete status",
      "routing": {
        "request": {
          "url": "=/statuses/{{$parameter[\"statusId\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a status. This will remove the status from all threads.",
      "resource": "Statuses"
    },
    {
      "name": "Statuses Colors",
      "value": "Statuses Colors",
      "action": "List available colors",
      "routing": {
        "request": {
          "url": "=/statuses/colors",
          "method": "GET"
        }
      },
      "description": "Get a list of predefined colors that can be used when creating or updating statuses",
      "resource": "Statuses"
    },
    {
      "name": "Colors List",
      "value": "Colors List",
      "action": "List available colors",
      "routing": {
        "request": {
          "url": "=/colors",
          "method": "GET"
        }
      },
      "description": "Get a list of predefined colors that can be used when creating or updating tags or statuses",
      "resource": "Colors"
    },
    {
      "name": "Events List",
      "value": "Events List",
      "action": "List events",
      "routing": {
        "request": {
          "url": "=/events",
          "method": "GET"
        }
      },
      "description": "List webhook events for replay. Events are stored for 7 days.",
      "resource": "Events"
    }
  ]

npm_readme:
  # n8n-nodes-inboxapp

  [n8n](https://n8n.io/) community node for [InboxApp](https://inboxapp.com) — the Social Selling CRM for X (Twitter).

  Automate your DM outreach, manage conversations, and build sales pipelines directly from n8n workflows.

  ![InboxApp + n8n](https://img.shields.io/badge/InboxApp-n8n-blue?style=flat-square) ![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)

  ## Platform Support

  | Platform | Status |
  |----------|--------|
  | **X (Twitter)** | ✅ Fully supported |
  | **Instagram** | 🔜 Coming soon |
  | **LinkedIn** | 🔜 Coming soon |

  ## What You Can Do

  ### 💬 Send & Manage DMs
  - **Send direct messages** to any X user through your connected accounts
  - **Reply to conversations** — continue existing DM threads
  - **List conversations** — pull all your DM threads with filtering and pagination
  - **Look up threads** by user ID or username
  - **Delete messages** you've sent
  - **Add reactions** to messages

  ### 👥 Manage Prospects (Leads)
  - **Look up prospects** by platform ID
  - **Update prospect context** — add notes and custom data to profiles
  - **Access full profile data** — bio, location, follower counts, verification status

  ### 🏷️ Organize with Tags & Statuses
  - **Create, update, and delete tags** to label your prospects
  - **Manage deal statuses** — build your own sales pipeline stages
  - **Assign colors** to tags and statuses for visual organization

  ### 👤 Team & Accounts
  - **View team info** and members
  - **List connected X accounts** linked to your workspace
  - **Track events** across your workspace

  ## Getting Started

  ### 1. Get Your API Key

  1. Log in to [InboxApp](https://inboxapp.com)
  2. Go to **Settings → API**
  3. Generate an API key for your team

  ### 2. Install the Node

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

  ```
  n8n-nodes-inboxapp
  ```

  Or install manually:

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

  ### 3. Add Your Credentials

  1. In n8n, go to **Credentials → Add Credential**
  2. Search for **InboxApp API**
  3. Paste your API key
  4. Save

  ### 4. Build Your First Workflow

  Here are some common workflows to get you started:

  #### Send a DM to a New Lead

  ```
  Trigger → InboxApp (Lookup Thread by Username) → InboxApp (Send Message)
  ```

  1. Add an **InboxApp** node → select **Threads → Lookup by Username**
  2. Enter the X username of the person you want to DM
  3. Add another **InboxApp** node → select **Messages → Send Message**
  4. Use the thread ID from the previous step
  5. Write your message and run

  #### Auto-Reply to New Conversations

  ```
  Schedule Trigger → InboxApp (List Threads) → Filter (unread) → InboxApp (Send Message)
  ```

  #### Sync Prospects to Your CRM

  ```
  Schedule Trigger → InboxApp (List Threads) → InboxApp (Get Prospect) → HTTP Request (CRM API)
  ```

  #### Tag Prospects Based on Keywords

  ```
  Schedule Trigger → InboxApp (List Threads) → IF (keyword match) → InboxApp (Update Prospect Context)
  ```

  ## Available Operations

  | Resource | Operations |
  |----------|-----------|
  | **Threads** | List, Create, Get, Update, Delete, Lookup by ID, Lookup by Username |
  | **Messages** | List, Send, Update, Delete, View Edit History, Add/Remove Reactions |
  | **Prospects** | Get, Lookup, Update Context |
  | **Tags** | List, Create, Get, Update, Delete |
  | **Statuses** | List, Create, Get, Update, Delete |
  | **Account Links** | List |
  | **Members** | List, Get |
  | **Team** | Get Info |
  | **Events** | List |
  | **Colors** | List (for tags & statuses) |

  ## Example: DM Outreach Workflow

  A complete outreach workflow might look like:

  1. **Trigger** — New row in Google Sheets (your lead list)
  2. **InboxApp: Lookup by Username** — Find or create the DM thread
  3. **InboxApp: Send Message** — Send your personalized outreach DM
  4. **InboxApp: Create Tag** — Tag the prospect as "Outreach - Week 1"
  5. **Wait** — Pause for follow-up timing
  6. **InboxApp: Send Message** — Send follow-up if no reply

  This replaces hours of manual DMing with a fully automated pipeline.

  ## API Docs

  Full API documentation: [docs.inboxapp.com](https://docs.inboxapp.com)

  ## Links

  - 🌐 [InboxApp](https://inboxapp.com)
  - 📖 [API Documentation](https://docs.inboxapp.com)
  - 🐛 [Report Issues](https://github.com/inboxhq/n8n-nodes-inboxapp/issues)
  - 💬 [n8n Community](https://community.n8n.io/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of X (Twitter) DM outreach, conversation management, and sales pipeline tracking using the InboxApp CRM platform.","capabilities":["Send direct messages to X users","Reply to existing DM threads","List and filter DM conversations with pagination","Lookup threads by user ID or username","Delete sent messages","Add or remove reactions to messages","Lookup and update prospect profiles with custom context","Create, update, and delete tags for organization","Manage deal statuses and pipeline stages","Assign colors to tags and statuses"],"authentication":"API key required","commonUseCases":["Automated DM outreach to new leads","Auto-reply to incoming DM conversations","Syncing X prospects to external CRMs","Tagging prospects based on keyword matching","Managing sales pipelines directly from n8n workflows"],"limitations":["Instagram and LinkedIn platform support are not yet available","Limited to X (Twitter) DM functionality only"],"relatedNodes":["Google Sheets","HTTP Request","Schedule Trigger","IF"]}


node_type: n8n-nodes-notte.notte
package_name: n8n-nodes-notte
display_name: Notte Agent Browser
description: AI-powered browser automation for autonomous web tasks, scraping, and workflows with Notte
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: notte-lucas
author_github_url: https://github.com/nottelabs/
npm_package_name: n8n-nodes-notte
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.816Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-notte

  [n8n](https://n8n.io/) community node for [Notte](https://notte.cc) — AI browser automation, web scraping, and workflow execution.

  ## Features

  This node provides three modes of operation:

  ### Agent Mode
  Run an AI agent that autonomously performs browser tasks. Provide a URL and a natural language instruction — the node handles session lifecycle, agent execution, and polling automatically.

  - Structured output via JSON schema
  - Auto-login with Vault credentials
  - Persona identity support
  - Vision and captcha solving options

  ### Scrape Mode
  Extract structured data from any URL. Define a JSON schema for the output format and provide extraction instructions.

  - CSS selector scoping
  - Proxy and captcha support
  - Returns both markdown and structured JSON

  ### Function Mode
  Execute deployed Notte functions (authored via the [Notte CLI](https://docs.notte.cc)). Pass variables from your n8n workflow and get results back.

  - Key-value variable injection from n8n expressions
  - Configurable polling interval and timeout
  - Fire-and-forget or wait-for-completion

  ### Trigger Node
  Poll for new persona emails or SMS messages to kick off workflows automatically.

  ## Installation

  ### In n8n (recommended)
  1. Go to **Settings > Community Nodes**
  2. Search for `n8n-nodes-notte`
  3. Click **Install**

  ### Manual
  ```bash
  npm install n8n-nodes-notte
  ```

  ## Credentials

  You need a Notte API key. Get one at [notte.cc](https://notte.cc).

  | Field | Description |
  |-------|-------------|
  | API Key | Your Notte API key |
  | Base URL | API endpoint (default: `https://api.notte.cc`) |

  ## Example Workflows

  ### Scheduled competitor scraping
  ```
  Schedule Trigger → Notte (Scrape: competitor.com/pricing) → Google Sheets
  ```

  ### AI agent task with notifications
  ```
  Webhook Trigger → Notte (Agent: "sign up for trial on {{url}}") → Slack
  ```

  ### Run deployed automation
  ```
  Schedule Trigger → Notte (Function: fn_abc123, variables from sheet) → Email
  ```

  ### React to verification emails
  ```
  Notte Trigger (New Email on persona) → Notte (Agent: "click verification link") → Done
  ```

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build
  npm run build

  # Lint
  npm run lint

  # Dev mode (auto-reload in local n8n)
  npm run dev
  ```

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Provides AI-powered browser automation, web scraping, and workflow execution capabilities through integration with the Notte platform.","capabilities":["Autonomous browser task execution via AI agents","Structured data extraction from web pages with JSON schema validation","Execution of deployed Notte functions with variable injection","Automatic session lifecycle and polling management","Auto-login support using Vault credentials","Persona identity management","Vision and captcha solving","CSS selector scoping for scraping","Proxy support for scraping operations","Triggering workflows based on new emails or SMS messages"],"authentication":"API key required","commonUseCases":["Competitor price and content scraping","Automated account creation and sign-up processes","Handling verification emails and clicking confirmation links","Running custom browser-based automation functions","Monitoring inboxes for specific events to trigger workflows"],"limitations":["Requires a valid Notte API key and account","Dependent on Notte platform's uptime and API availability","Function mode requires pre-deployed functions via Notte CLI"],"relatedNodes":["Schedule Trigger","Webhook Trigger","Google Sheets","Slack"]}


node_type: n8n-nodes-notte.notteTrigger
package_name: n8n-nodes-notte
display_name: Notte Trigger
description: Triggers on new Notte persona emails or SMS messages
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: notte-lucas
author_github_url: https://github.com/nottelabs/
npm_package_name: n8n-nodes-notte
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.817Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-notte

  [n8n](https://n8n.io/) community node for [Notte](https://notte.cc) — AI browser automation, web scraping, and workflow execution.

  ## Features

  This node provides three modes of operation:

  ### Agent Mode
  Run an AI agent that autonomously performs browser tasks. Provide a URL and a natural language instruction — the node handles session lifecycle, agent execution, and polling automatically.

  - Structured output via JSON schema
  - Auto-login with Vault credentials
  - Persona identity support
  - Vision and captcha solving options

  ### Scrape Mode
  Extract structured data from any URL. Define a JSON schema for the output format and provide extraction instructions.

  - CSS selector scoping
  - Proxy and captcha support
  - Returns both markdown and structured JSON

  ### Function Mode
  Execute deployed Notte functions (authored via the [Notte CLI](https://docs.notte.cc)). Pass variables from your n8n workflow and get results back.

  - Key-value variable injection from n8n expressions
  - Configurable polling interval and timeout
  - Fire-and-forget or wait-for-completion

  ### Trigger Node
  Poll for new persona emails or SMS messages to kick off workflows automatically.

  ## Installation

  ### In n8n (recommended)
  1. Go to **Settings > Community Nodes**
  2. Search for `n8n-nodes-notte`
  3. Click **Install**

  ### Manual
  ```bash
  npm install n8n-nodes-notte
  ```

  ## Credentials

  You need a Notte API key. Get one at [notte.cc](https://notte.cc).

  | Field | Description |
  |-------|-------------|
  | API Key | Your Notte API key |
  | Base URL | API endpoint (default: `https://api.notte.cc`) |

  ## Example Workflows

  ### Scheduled competitor scraping
  ```
  Schedule Trigger → Notte (Scrape: competitor.com/pricing) → Google Sheets
  ```

  ### AI agent task with notifications
  ```
  Webhook Trigger → Notte (Agent: "sign up for trial on {{url}}") → Slack
  ```

  ### Run deployed automation
  ```
  Schedule Trigger → Notte (Function: fn_abc123, variables from sheet) → Email
  ```

  ### React to verification emails
  ```
  Notte Trigger (New Email on persona) → Notte (Agent: "click verification link") → Done
  ```

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build
  npm run build

  # Lint
  npm run lint

  # Dev mode (auto-reload in local n8n)
  npm run dev
  ```

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows automatically when new emails or SMS messages arrive for specific Notte personas.","capabilities":["Monitors for new emails associated with a persona","Monitors for new SMS messages associated with a persona","Initiates automated workflows upon receiving new messages"],"authentication":"API key required","commonUseCases":["React to verification emails by auto-clicking links","Process incoming support tickets or leads","Trigger notifications when specific SMS codes are received"],"limitations":["Requires a Notte account and API key","Requires setting up a Notte persona to receive messages"],"relatedNodes":["n8n-nodes-notte.notteAgent","n8n-nodes-notte.notteScrape","n8n-nodes-notte.notteFunction"]}


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

updated_at: 2026-07-14 14:40:33
author_name: jan.wittkamp
author_github_url: https://github.com/Memida/
npm_package_name: n8n-nodes-memida
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:33.819Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "inspection",
      "options": [
        {
          "name": "Inspection",
          "value": "inspection"
        },
        {
          "name": "Apparatus",
          "value": "apparatus"
        },
        {
          "name": "Apparatus Basedata",
          "value": "apparatusBasedata"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many inspections",
          "description": "Retrieve a list of inspections"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an inspection",
          "description": "Retrieve a single inspection"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an inspection",
          "description": "Create a new inspection"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inspection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many apparatuses",
          "description": "Retrieve a list of apparatuses"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an apparatus",
          "description": "Retrieve a single apparatus"
        },
        {
          "name": "Get by Identno",
          "value": "getByIdentno",
          "action": "Get an apparatus by identno",
          "description": "Retrieve a single apparatus by its identno"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "apparatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many apparatus basedatas",
          "description": "Retrieve a list of apparatus basedatas"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an apparatus basedata",
          "description": "Retrieve a single apparatus basedata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "apparatusBasedata"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many inspections",
      "description": "Retrieve a list of inspections",
      "resource": "inspection"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an inspection",
      "description": "Retrieve a single inspection",
      "resource": "inspection"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an inspection",
      "description": "Create a new inspection",
      "resource": "inspection"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many apparatuses",
      "description": "Retrieve a list of apparatuses",
      "resource": "apparatus"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an apparatus",
      "description": "Retrieve a single apparatus",
      "resource": "apparatus"
    },
    {
      "name": "Get by Identno",
      "value": "getByIdentno",
      "action": "Get an apparatus by identno",
      "description": "Retrieve a single apparatus by its identno",
      "resource": "apparatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many apparatus basedatas",
      "description": "Retrieve a list of apparatus basedatas",
      "resource": "apparatusBasedata"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an apparatus basedata",
      "description": "Retrieve a single apparatus basedata",
      "resource": "apparatusBasedata"
    }
  ]

npm_readme:
  [![Memida & n8n](/assets/n8n_x_memida.png)](https://memida.de)

  # memida n8n Community Node

  This repository contains an n8n Community Node that integrates the memida API into n8n workflows.

  ## Installation

  1. Clone the repository and install the dependencies:

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

  2. Install the generated `n8n-nodes-memida` package through the [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/install/) dialog.

  ## Available resources

  - **Inspection**
    - `Get`: Loads a single inspection by its ID (`GET /inspections/{id}`).
    - `Get Many`: Uses the inspection list endpoint (`GET /inspections`) and exposes the documented filters together with `returnAll`/`limit` pagination controls.
    - `Create`: Creates a new inspection (`POST /inspections`) including optional custom fields and file uploads.

  - **Apparatus**
    - `Get`: Loads a single apparatus by its ID (`GET /apparatuses/{id}`).
    - `Get Many`: Uses the apparatus list endpoint (`GET /apparatuses`) with available filters and pagination support through `returnAll`/`limit`.
    - `Get by Identno`: Retrieves a single apparatus by its identno (`GET /apparatuses/ident/{identno}`).

  - **Apparatus Basedata**
    - `Get`: Loads a single apparatus basedata record by its ID (`GET /apparatus_basedatas/{id}`).
    - `Get Many`: Uses the apparatus basedata list endpoint (`GET /apparatus_basedatas`) with the documented filters and `returnAll`/`limit` pagination controls.

  ### Inspection filters

  The `Filters` collection on the **Get Many** operation maps 1:1 to the available query string parameters in the memida inspection index:

  - `sort` – field used to order the list response.
  - `direction` – order of the sorting (`asc` or `desc`).
  - `page` – page number (default `1`).
  - `apparatus_id` – filter inspections of a specific apparatus.

  ### Apparatus filters

  The **Get Many** operation exposes these query string parameters from the memida API:

  - `sort` – field used to order the list response.
  - `direction` – order of the sorting (`asc` or `desc`).
  - `page` – page number (default `1`).
  - `search` – query applied to apparatus fields (minimum length 3 characters).

  ### Apparatus basedata filters

  The **Get Many** operation exposes the following query string parameters from the memida API:

  - `limit` – number of items per page (default `20`, max `100`).
  - `page` – page number (default `1`).
  - `sort` – field used to order the list response (`model`, `created`, `modified`).
  - `direction` – order of the sorting (`asc` or `desc`).
  - `manufactor_id` – filter basedata records for a specific manufacturer.
  - `search` – search in the `name`, `model` and `description` fields.
  - `default` – when set to `true`, only default apparatus basedata records are returned.

  Refer to the API documentation if additional parameters are introduced in the future.

  ## Credentials

  All operations require memida API credentials:

  - **Base URL** – Defaults to `https://api.memida.de/api/v1`.
  - **API Key** – A valid API key from the memida api section.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [memida API](https://manual.memida.de/docs/category/api/)
  * [memida Documentation](https://manual.memida.de/en/docs/introduction/)
  * [memida Homepage](https://memida.de/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Memida API to manage inspections, apparatus data, and apparatus basedata records within automated workflows.","capabilities":["Retrieve single inspection by ID","List inspections with filters and pagination","Create new inspections with custom fields and file uploads","Retrieve single apparatus by ID","List apparatus with filters and pagination","Retrieve apparatus by identification number (identno)","Retrieve single apparatus basedata by ID","List apparatus basedata with filters and pagination","Support for sorting, filtering, and pagination controls"],"authentication":"API Key required","commonUseCases":["Automating inspection data retrieval and reporting","Managing apparatus inventory and specifications","Syncing inspection records with external databases","Filtering and analyzing apparatus basedata by manufacturer or model"],"limitations":["Search queries for apparatus require a minimum length of 3 characters","Pagination limit for apparatus basedata is capped at 100 items per page","Requires valid Memida API credentials and access to the API endpoint"],"relatedNodes":[]}


node_type: n8n-nodes-trustmarkt.trustmarktTrigger
package_name: n8n-nodes-trustmarkt
display_name: Trustmarkt Trigger
description: Starts the workflow when Trustmarkt events occur (Webhooks)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: trustmarktadmin
author_github_url: https://github.com/Trustmarkt-GmbH/
npm_package_name: n8n-nodes-trustmarkt
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.821Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-trustmarkt

  This is an n8n community node. It lets you use the [Trustmarkt](https://trustmarkt.de) API in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  ### Trustmarkt Node

  - **Article**
      - Get an article
      - Get many articles
  - **Case Study**
      - Get a case study
      - Get many case studies
  - **Inquiry**
      - Get an inquiry
      - Get many inquiries
  - **Me**
      - Get authenticated user info
  - **Review**
      - Get a review
      - Get many reviews
  - **User**
      - Get a user
      - Get many users

  ### Trustmarkt Trigger Node

  Starts the workflow when Trustmarkt events occur via webhooks. Events are loaded dynamically from the API.

  ## Credentials

  You need a Trustmarkt API key to authenticate.

  1. Log in to your [Trustmarkt](https://trustmarkt.de) account.
  2. Navigate to your API settings and generate an API key.
  3. In n8n, create new **Trustmarkt API** credentials and paste your API key.

  The node supports Production, Testing, and Custom API environments.

  ## Compatibility

  Compatible with n8n version 1.60.0 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Trustmarkt API documentation](https://www.trustmarkt.de/r/api)

ai_documentation_summary:
  {"purpose":"The Trustmarkt Trigger node initiates n8n workflows automatically when specific events occur within the Trustmarkt platform via webhooks.","capabilities":["Starts workflows on Trustmarkt events","Dynamically loads available events from the API","Supports Production, Testing, and Custom API environments"],"authentication":"API key required","commonUseCases":["Automating responses to new inquiries on Trustmarkt","Triggering notifications when new articles or case studies are published","Processing user reviews or profile updates in real-time"],"limitations":["Requires an active Trustmarkt account and valid API key","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":["n8n-nodes-trustmarkt.trustmarktArticle","n8n-nodes-trustmarkt.trustmarktCaseStudy","n8n-nodes-trustmarkt.trustmarktInquiry","n8n-nodes-trustmarkt.trustmarktReview","n8n-nodes-trustmarkt.trustmarktUser"]}


node_type: n8n-nodes-trustmarkt.trustmarkt
package_name: n8n-nodes-trustmarkt
display_name: Trustmarkt
description: Interact with the Trustmarkt API to manage reviews, users, case studies, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:33
author_name: trustmarktadmin
author_github_url: https://github.com/Trustmarkt-GmbH/
npm_package_name: n8n-nodes-trustmarkt
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:33.823Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "review",
      "options": [
        {
          "name": "Article",
          "value": "article",
          "description": "Manage articles on your profile"
        },
        {
          "name": "Case Study",
          "value": "caseStudy",
          "description": "Manage case studies on your profile"
        },
        {
          "name": "Inquiry",
          "value": "inquiry",
          "description": "Manage incoming inquiries from potential customers"
        },
        {
          "name": "Me",
          "value": "me",
          "description": "Get information about the authenticated user"
        },
        {
          "name": "Review",
          "value": "review",
          "description": "Manage reviews on your Trustmarkt profile"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Manage users in your company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an article",
          "routing": {
            "request": {
              "url": "=/articles/{{ $parameter.articleId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single article by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many articles",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/articles",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of articles from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case study",
          "routing": {
            "request": {
              "url": "=/case-studies/{{ $parameter.caseStudyId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single case study by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many case studies",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/case-studies",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of case studies from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "caseStudy"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an inquiry",
          "routing": {
            "request": {
              "url": "=/inquiries/{{ $parameter.inquiryId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single inquiry by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many inquiries",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/inquiries",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of inquiries from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inquiry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get authenticated user",
          "routing": {
            "request": {
              "url": "/me",
              "method": "GET"
            }
          },
          "description": "Retrieve information about the authenticated user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "me"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a review",
          "routing": {
            "request": {
              "url": "=/reviews/{{ $parameter.reviewId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single review by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many reviews",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/reviews",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of reviews from your Trustmarkt profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "review"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user",
          "routing": {
            "request": {
              "url": "=/user/{{ $parameter.userId }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single user by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many users",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/user",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of users from your company"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get an article",
      "routing": {
        "request": {
          "url": "=/articles/{{ $parameter.articleId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single article by ID",
      "resource": "article"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many articles",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/articles",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of articles from your Trustmarkt profile",
      "resource": "article"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case study",
      "routing": {
        "request": {
          "url": "=/case-studies/{{ $parameter.caseStudyId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single case study by ID",
      "resource": "caseStudy"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many case studies",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/case-studies",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of case studies from your Trustmarkt profile",
      "resource": "caseStudy"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an inquiry",
      "routing": {
        "request": {
          "url": "=/inquiries/{{ $parameter.inquiryId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single inquiry by ID",
      "resource": "inquiry"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many inquiries",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/inquiries",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of inquiries from your Trustmarkt profile",
      "resource": "inquiry"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get authenticated user",
      "routing": {
        "request": {
          "url": "/me",
          "method": "GET"
        }
      },
      "description": "Retrieve information about the authenticated user",
      "resource": "me"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a review",
      "routing": {
        "request": {
          "url": "=/reviews/{{ $parameter.reviewId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single review by ID",
      "resource": "review"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many reviews",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/reviews",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of reviews from your Trustmarkt profile",
      "resource": "review"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user",
      "routing": {
        "request": {
          "url": "=/user/{{ $parameter.userId }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single user by ID",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many users",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/user",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of users from your company",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-trustmarkt

  This is an n8n community node. It lets you use the [Trustmarkt](https://trustmarkt.de) API in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  ### Trustmarkt Node

  - **Article**
      - Get an article
      - Get many articles
  - **Case Study**
      - Get a case study
      - Get many case studies
  - **Inquiry**
      - Get an inquiry
      - Get many inquiries
  - **Me**
      - Get authenticated user info
  - **Review**
      - Get a review
      - Get many reviews
  - **User**
      - Get a user
      - Get many users

  ### Trustmarkt Trigger Node

  Starts the workflow when Trustmarkt events occur via webhooks. Events are loaded dynamically from the API.

  ## Credentials

  You need a Trustmarkt API key to authenticate.

  1. Log in to your [Trustmarkt](https://trustmarkt.de) account.
  2. Navigate to your API settings and generate an API key.
  3. In n8n, create new **Trustmarkt API** credentials and paste your API key.

  The node supports Production, Testing, and Custom API environments.

  ## Compatibility

  Compatible with n8n version 1.60.0 or later.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Trustmarkt API documentation](https://www.trustmarkt.de/r/api)

ai_documentation_summary:
  {"purpose":"Enables interaction with the Trustmarkt API within n8n workflows to manage reviews, users, case studies, articles, and inquiries.","capabilities":["Retrieve single or multiple articles","Retrieve single or multiple case studies","Retrieve single or multiple inquiries","Retrieve authenticated user information","Retrieve single or multiple reviews","Retrieve single or multiple users","Trigger workflows based on dynamic Trustmarkt events via webhooks"],"authentication":"API key required","commonUseCases":["Aggregating customer reviews for reporting","Syncing user data between systems","Retrieving case studies for marketing content","Monitoring inquiry status updates"],"limitations":["Only supports GET operations for data retrieval; no create, update, or delete actions mentioned","Webhook triggers rely on dynamic event loading from the API"],"relatedNodes":[]}


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

updated_at: 2026-07-14 14:40:33
author_name: skrapion
author_github_url: https://github.com/Skrapion/
npm_package_name: n8n-nodes-officernd
npm_version: 1.1.4
community_fetched_at: 2026-07-14T14:40:33.825Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "member",
      "options": [
        {
          "name": "Checkin",
          "value": "checkin"
        },
        {
          "name": "Day Pass",
          "value": "dayPass"
        },
        {
          "name": "Fee",
          "value": "fee"
        },
        {
          "name": "Member",
          "value": "member"
        },
        {
          "name": "Membership",
          "value": "membership"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Plan",
          "value": "plan"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a member",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single member"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get members",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/members",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many members"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a member",
          "routing": {
            "request": {
              "method": "PUT"
            }
          },
          "description": "Update a member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "member"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a membership",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single membership"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get memberships",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                },
                {
                  "type": "setKeyValue",
                  "properties": {
                    "_id": "={{ $responseItem._id }}",
                    "name": "={{ $responseItem.name }}",
                    "plan": "={{ $responseItem.plan }}",
                    "type": "={{ $responseItem.type }}",
                    "price": "={{ $responseItem.price }}",
                    "member": "={{ $responseItem.member }}",
                    "source": "={{ $responseItem.source }}",
                    "status": "={{ $responseItem.status }}",
                    "company": "={{ $responseItem.company }}",
                    "deposit": "={{ $responseItem.deposit }}",
                    "endDate": "={{ $responseItem.endDate.slice(0,10) }}",
                    "contract": "={{ $responseItem.contract }}",
                    "discount": "={{ $responseItem.discount }}",
                    "isLocked": "={{ $responseItem.isLocked }}",
                    "location": "={{ $responseItem.location }}",
                    "createdAt": "={{ DateTime.fromISO($responseItem.createdAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                    "createdBy": "={{ $responseItem.createdBy }}",
                    "startDate": "={{ $responseItem.startDate.slice(0,10) }}",
                    "isPersonal": "={{ $responseItem.isPersonal }}",
                    "modifiedAt": "={{ DateTime.fromISO($responseItem.modifiedAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                    "modifiedBy": "={{ $responseItem.modifiedBy }}",
                    "properties": "={{ $responseItem.properties ? $responseItem.properties : undefined }}",
                    "intervalCount": "={{ $responseItem.intervalCount }}",
                    "discountAmount": "={{ $responseItem.discountAmount }}",
                    "discountedPrice": "={{ $responseItem.discountedPrice }}",
                    "calculatedStatus": "={{ $responseItem.calculatedStatus }}",
                    "calculatedDiscountAmount": "={{ $responseItem.calculatedDiscountAmount }}"
                  }
                }
              ]
            },
            "request": {
              "url": "/memberships",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many memberships"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "membership"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a set of day passes",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a single set of day passes"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get sets of day passes",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/passes",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get many sets of day passes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dayPass"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a plan",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get a single plan"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get plans",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/plans",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get many plans"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkin",
      "options": [
        {
          "name": "Check In a Member",
          "value": "checkin",
          "action": "Check in a member",
          "routing": {
            "request": {
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "checkin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single payment"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get payments",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/payments",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many payments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a fee",
          "routing": {
            "request": {
              "method": "GET"
            }
          },
          "description": "Get the data of a single fee"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get fees",
          "routing": {
            "send": {
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "results"
                  }
                }
              ]
            },
            "request": {
              "url": "/fees",
              "method": "GET"
            },
            "operations": {
              "pagination": {
                "type": "generic",
                "properties": {
                  "request": {
                    "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
                  },
                  "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
                }
              }
            }
          },
          "description": "Get the data of many fees"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fee"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a member",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single member",
      "resource": "member"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get members",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/members",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many members",
      "resource": "member"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a member",
      "routing": {
        "request": {
          "method": "PUT"
        }
      },
      "description": "Update a member",
      "resource": "member"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a membership",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single membership",
      "resource": "membership"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get memberships",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            },
            {
              "type": "setKeyValue",
              "properties": {
                "_id": "={{ $responseItem._id }}",
                "name": "={{ $responseItem.name }}",
                "plan": "={{ $responseItem.plan }}",
                "type": "={{ $responseItem.type }}",
                "price": "={{ $responseItem.price }}",
                "member": "={{ $responseItem.member }}",
                "source": "={{ $responseItem.source }}",
                "status": "={{ $responseItem.status }}",
                "company": "={{ $responseItem.company }}",
                "deposit": "={{ $responseItem.deposit }}",
                "endDate": "={{ $responseItem.endDate.slice(0,10) }}",
                "contract": "={{ $responseItem.contract }}",
                "discount": "={{ $responseItem.discount }}",
                "isLocked": "={{ $responseItem.isLocked }}",
                "location": "={{ $responseItem.location }}",
                "createdAt": "={{ DateTime.fromISO($responseItem.createdAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                "createdBy": "={{ $responseItem.createdBy }}",
                "startDate": "={{ $responseItem.startDate.slice(0,10) }}",
                "isPersonal": "={{ $responseItem.isPersonal }}",
                "modifiedAt": "={{ DateTime.fromISO($responseItem.modifiedAt).setZone($workflow.timezone, { keepLocalTime: true }).toISO() }}",
                "modifiedBy": "={{ $responseItem.modifiedBy }}",
                "properties": "={{ $responseItem.properties ? $responseItem.properties : undefined }}",
                "intervalCount": "={{ $responseItem.intervalCount }}",
                "discountAmount": "={{ $responseItem.discountAmount }}",
                "discountedPrice": "={{ $responseItem.discountedPrice }}",
                "calculatedStatus": "={{ $responseItem.calculatedStatus }}",
                "calculatedDiscountAmount": "={{ $responseItem.calculatedDiscountAmount }}"
              }
            }
          ]
        },
        "request": {
          "url": "/memberships",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many memberships",
      "resource": "membership"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a set of day passes",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get a single set of day passes",
      "resource": "dayPass"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get sets of day passes",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/passes",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get many sets of day passes",
      "resource": "dayPass"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a plan",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get a single plan",
      "resource": "plan"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get plans",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/plans",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get many plans",
      "resource": "plan"
    },
    {
      "name": "Check In a Member",
      "value": "checkin",
      "action": "Check in a member",
      "routing": {
        "request": {
          "method": "POST"
        }
      },
      "resource": "checkin"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single payment",
      "resource": "payment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get payments",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/payments",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many payments",
      "resource": "payment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a fee",
      "routing": {
        "request": {
          "method": "GET"
        }
      },
      "description": "Get the data of a single fee",
      "resource": "fee"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get fees",
      "routing": {
        "send": {
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "results"
              }
            }
          ]
        },
        "request": {
          "url": "/fees",
          "method": "GET"
        },
        "operations": {
          "pagination": {
            "type": "generic",
            "properties": {
              "request": {
                "qs": "={{ Object.assign({}, $request.qs, { \"$cursorNext\": $response.body?.cursorNext }) }}"
              },
              "continue": "={{ ($parameter.additionalOptions.limit == undefined || $response.body.rangeEnd < $parameter.additionalOptions.limit) && !!$response.body?.cursorNext }}"
            }
          }
        }
      },
      "description": "Get the data of many fees",
      "resource": "fee"
    }
  ]

npm_readme:
  # n8n-nodes-officernd

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

  _OfficeRnD_ is a cloud platform for managing coworking spaces, offices, and memberships. This node allows you to fetch members, memberships, plans, fees, and passes, as well as update and check in members.

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

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

  ## Installation

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

  ## Operations

  The node supports the following operations:

  * Checkins
    * Check in a member
  * Day Passes
    * Get All Sets of Daypasses
    * Get a Set of Daypasses
  * Fees
    * Get Payment
    * Get All Payments
  * Members
    * Get Member
    * Get All Members
    * Update Member
  * Memberships
    * Get Membership
    * Get All Memberships
  * Payments
    * Get Payment
    * Get All Payments
  * Plans
    * Get Plan
    * Get All Plans

  ## Triggers
  * Company
    * Created
    * Updated
    * Removed
  * Company Payment Details
    * Created
  * Removed
  * Member
    * Created
    * Updated
  * Removed
  * Member Payment Details
    * Created
    * Removed
  * Invoice
    * Created
    * Updated
    * Removed
  * Invoice Charge
    * Created
    * Updated
    * Removed
  * Invoice Allocation
    * Created
    * Removed
  * Fee
    * Created
    * Updated
    * Removed
  * Membership
    * Created
    * Updated
    * Removed
  * Booking
    * Created
    * Updated
    * Removed
  * Contract
    * Created
    * Updated
    * Removed
  * Ticket
    * Created
    * Updated
    * Removed
  * Integration
    * Removed
  * Pass
    * Created
    * Updated
  * Occupancy Slot
    * Created
    * Removed

  ## Credentials

  To use this node, you must authenticate with OfficeRnD via an API token:

  Sign in to your OfficeRnD account.

  Navigate to Settings->Data & Accessibility->Developer Tools->Applications and add an application.

  Make sure you enable all the permissions listed in the Scopes field of your credentials. The scopes default to all the permissions you need to use all the features of this node. You can remove some of the scopes if you don't need to use all the features of this node, or add more scopes if you're using the HTTP Request operation to access operations that aren't included in this node.

  Once created, you can click the cog icon next to the application and choose 'View' to get your Client ID and Client Secret for your n8n credentials.

  You'll also need to set your Organization Slug. You can find this in the location bar when logged in to OfficeRnD:

  https://app.officernd.com/admin/<YOUR ORG SLUG>

  ## Compatibility

  Tested against n8n 2.4.8 and the OfficeRnD v2 API.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [OfficeRnD API Documentation](https://developer.officernd.com/reference)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the OfficeRnD API to manage coworking spaces, including fetching and updating members, memberships, plans, and passes, as well as handling check-ins and payments.","capabilities":["Check in members","Retrieve and manage day passes","Get and update member information","Manage memberships and plans","Process payments and fees","Monitor company and member events (created, updated, removed)","Track invoices, bookings, contracts, and tickets"],"authentication":"OAuth2 (Client ID and Client Secret required)","commonUseCases":["Automating member check-ins at office entrances","Synchronizing member data between OfficeRnD and internal CRM systems","Tracking membership renewals and payment statuses","Generating reports on occupancy and pass usage"],"limitations":["Requires manual setup of API credentials with specific scopes in OfficeRnD Developer Tools","Dependent on OfficeRnD v2 API compatibility","Some advanced operations may require manual scope configuration beyond defaults"],"relatedNodes":[]}


