# nodes

node_type: n8n-nodes-newscatcher-catchall-pernode.newscatcherCatchAllTrigger
package_name: n8n-nodes-newscatcher-catchall-pernode
display_name: Newscatcher CatchAll Trigger
description: Triggers when a Newscatcher CatchAll monitor has new results
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: chintan.newscatcherapi
author_github_url: https://github.com/Newscatcher/
npm_package_name: n8n-nodes-newscatcher-catchall-pernode
npm_version: 0.1.42
community_fetched_at: 2026-04-16T09:43:35.829Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-newscatcher-catchall-pernode

  n8n community node for [Newscatcher CatchAll](https://catchall.newscatcherapi.com/) API integration. This node allows you to submit jobs, retrieve results, manage monitors, and receive real-time webhook triggers from Newscatcher CatchAll.

  ## Features

  - **Job Management**: Submit jobs, pull results, and check job status
  - **Monitor Management**: Create, list, enable, disable monitors, and retrieve monitor details
  - **Webhook Trigger**: Real-time trigger node for monitor results
  - **Per-node API Key**: Simple authentication with API key stored directly in the node (not encrypted)

  ## Installation

  ### For n8n Cloud

  1. Go to **Settings → Community Nodes → Install**
  2. Enter: `n8n-nodes-newscatcher-catchall-pernode`
  3. Click **Install**

  ### For Self-Hosted n8n

  ```bash
  npm install n8n-nodes-newscatcher-catchall-pernode
  ```

  ## Authentication

  Enter your Newscatcher API key directly in the node's **API Key** field. The API key is stored as a node setting (not encrypted). Get your API key from [Newscatcher](https://newscatcherapi.com/).

  ## Nodes

  ### Newscatcher CatchAll

  Main node for interacting with the Newscatcher CatchAll API.

  #### Resources

  **Job**
  - **Submit**: Create a new CatchAll job with query, context, and schema
  - **Pull**: Retrieve results for a completed job by job ID
  - **Get Status**: Check the status of a job by job ID

  **Monitor**
  - **Create**: Create a new monitor based on an existing reference job
  - **List**: List all monitors for your API key
  - **Get**: Get full details and records for a specific monitor
  - **List Jobs**: List all jobs created by a specific monitor
  - **Enable**: Enable a monitor by monitor ID
  - **Disable**: Disable a monitor by monitor ID

  #### Example: Submit a Job

  1. Add the **Newscatcher CatchAll** node to your workflow
  2. Select **Resource**: `Job`
  3. Select **Operation**: `Submit`
  4. Enter your **API Key**
  5. Fill in:
     - **Query**: "Tech company earnings this quarter"
     - **Context**: (Optional) "Focus on revenue and profit margins"
     - **Schema**: (Optional) "Company [NAME] earned [REVENUE] in [QUARTER]"
  6. Execute the workflow

  The node returns a job ID that you can use with the **Pull** or **Get Status** operations.

  #### Example: Create a Monitor

  1. Add the **Newscatcher CatchAll** node to your workflow
  2. Select **Resource**: `Monitor`
  3. Select **Operation**: `Create`
  4. Enter your **API Key**
  5. Fill in:
     - **Reference Job ID**: An existing job ID to base the monitor on
     - **Schedule**: "every day at 12 PM UTC"
     - **Webhook URL**: Your webhook endpoint URL
     - **Webhook Method**: POST or GET
     - **Webhook Headers/Params/Auth**: (Optional) JSON configuration
  6. Execute the workflow

  ### Newscatcher CatchAll Trigger

  Webhook trigger node that activates when a monitor has new results.

  #### Setup

  1. Add the **Newscatcher CatchAll Trigger** node to your workflow
  2. Enter your **API Key**
  3. Select a **Monitor** from the dropdown (monitors are loaded from your API)
  4. Activate the workflow

  When the selected monitor has new results, Newscatcher will POST the data to the webhook URL, and your workflow will be triggered automatically.

  ## Development

  ### Local Development

  ```bash
  # Install dependencies
  npm install

  # Build the project
  npm run build

  # Lint the code
  npx @n8n/scan-community-package n8n-nodes-newscatcher-catchall-pernode
  ```

  ### Project Structure

  ```
  src/
    nodes/
      Newscatcher/
        Newscatcher.node.ts              # Main node
        NewscatcherCatchAllTrigger.node.ts # Trigger node
        newscatcher-new.png              # Node icon
  ```

  ## API Documentation

  For detailed API documentation, visit:
  - [Newscatcher CatchAll API](https://catchall.newscatcherapi.com/)
  - [Newscatcher Documentation](https://newscatcherapi.com/docs)

  ## License

  MIT

  ## Support

  - **Issues**: [GitHub Issues](https://github.com/Newscatcher/n8n-nodes-newscatcher-catchall-pernode/issues)
  - **Repository**: [GitHub](https://github.com/Newscatcher/n8n-nodes-newscatcher-catchall-pernode)

ai_documentation_summary:
  {"purpose":"Triggers a workflow when a Newscatcher CatchAll monitor detects new results by receiving a webhook POST from the Newscatcher API.","capabilities":["Real-time webhook trigger activation","Monitor selection from existing API monitors","Automatic workflow execution upon new data arrival"],"authentication":"API key required (stored as node setting, not encrypted)","commonUseCases":["Real-time news monitoring and alerting","Automated data collection from news sources","Triggering downstream actions based on new search results"],"limitations":["API key is stored as a node setting without encryption","Requires a separate Newscatcher CatchAll node to create/manage monitors"],"relatedNodes":["Newscatcher CatchAll","Newscatcher CatchAll Trigger"]}


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

updated_at: 2026-04-16 09:43:35
author_name: janskacel
author_github_url: https://github.com/Leadspicker/n8n-nodes-leadspicker.git
npm_package_name: @leadspicker/n8n-nodes-leadspicker
npm_version: 0.4.4
community_fetched_at: 2026-04-16T09:43:35.830Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "project",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Campaign",
          "value": "project"
        },
        {
          "name": "Global Exclusion List",
          "value": "globalExclusionList"
        },
        {
          "name": "Lead",
          "value": "person"
        },
        {
          "name": "Linkedin",
          "value": "linkedinActivity"
        },
        {
          "name": "Outreach",
          "value": "outreach"
        },
        {
          "name": "Reply",
          "value": "reply"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInfo",
      "options": [
        {
          "name": "Get Account Info",
          "value": "getInfo",
          "action": "Get account info",
          "description": "Retrieve details about the current account and organization quotas"
        }
      ],
      "displayName": "Account Actions",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Bulk Create Leads",
          "value": "bulkCreate",
          "action": "Bulk create leads",
          "description": "Create multiple leads in a campaign"
        },
        {
          "name": "Create Lead",
          "value": "create",
          "action": "Create a lead",
          "description": "Create a new lead in a campaign"
        },
        {
          "name": "Delete Lead",
          "value": "delete",
          "action": "Delete a lead",
          "description": "Delete a lead"
        },
        {
          "name": "Find by Company Linkedin",
          "value": "byCompanyLinkedin",
          "action": "Find leads by company profile",
          "description": "Find leads by a company LinkedIn URL"
        },
        {
          "name": "Find by Company Name",
          "value": "byCompanyName",
          "action": "Find leads by company name",
          "description": "Find leads by a company name"
        },
        {
          "name": "Get Lead",
          "value": "get",
          "action": "Get a lead",
          "description": "Get a lead by ID"
        },
        {
          "name": "List Leads",
          "value": "list",
          "action": "List leads",
          "description": "List leads in a campaign"
        },
        {
          "name": "Update Lead",
          "value": "update",
          "action": "Update a lead",
          "description": "Update an existing lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "person"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add Lead to Campaign Exclusion List",
          "value": "addToExclusionList",
          "action": "Add lead to exclusion list",
          "description": "Blacklist a lead identifier for a campaign"
        },
        {
          "name": "Create Campaign",
          "value": "create",
          "action": "Create a campaign",
          "description": "Create a new campaign"
        },
        {
          "name": "Delete Campaign",
          "value": "delete",
          "action": "Delete a campaign",
          "description": "Delete a campaign"
        },
        {
          "name": "Get Campaign Log",
          "value": "getCampaignLog",
          "action": "Get campaign log",
          "description": "Retrieve campaign timeline events"
        },
        {
          "name": "Get Exclusion List",
          "value": "getExclusionList",
          "action": "Get exclusion list",
          "description": "Retrieve all identifiers blacklisted for a campaign"
        },
        {
          "name": "Remove Lead From Campaign Exclusion List",
          "value": "removeFromExclusionList",
          "action": "Remove lead from exclusion list",
          "description": "Delete a specific identifier from a campaign blacklist"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Replies",
          "value": "list",
          "action": "Get replies",
          "description": "Get replies for a lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reply"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProfile",
      "options": [
        {
          "name": "Get Activities",
          "value": "getActivities",
          "action": "Get recent profile activities",
          "description": "Get a profile's recent activities (reactions and comments)"
        },
        {
          "name": "Get Interactions for LinkedIn Post Search",
          "value": "searchPostReactors",
          "action": "Get interactions for linkedin post search",
          "description": "Retrieve LinkedIn profiles that interacted with posts returned by a content search URL"
        },
        {
          "name": "Get Interactions for Profiles",
          "value": "profilesPostReactors",
          "action": "Get interactors for profiles",
          "description": "Retrieve interactors for posts authored by specific LinkedIn profiles"
        },
        {
          "name": "Get Post Interactors",
          "value": "getPostReactors",
          "action": "Get post interactors",
          "description": "Get people who interact with posts and send to a webhook"
        },
        {
          "name": "Get Profile Details",
          "value": "getProfile",
          "action": "Get profile details",
          "description": "Scrapes and returns details for a LinkedIn profile"
        },
        {
          "name": "Get Recent Profile Posts",
          "value": "getPosts",
          "action": "Get recent profile posts",
          "description": "Get profile's recent posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "linkedinActivity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Add Lead to Global Exclusion List",
          "value": "addLead",
          "action": "Add lead to global exclusion list",
          "description": "Blacklist an identifier for the entire organization"
        },
        {
          "name": "Remove Lead From Global Exclusion List",
          "value": "removeLead",
          "action": "Remove lead from global exclusion list",
          "description": "Delete a specific identifier from the global blacklist"
        },
        {
          "name": "Get Global Exclusion List",
          "value": "get",
          "action": "Get global exclusion list",
          "description": "Retrieve the global text-based blacklist for the authenticated organization"
        }
      ],
      "displayName": "Global Exclusion List Actions",
      "displayOptions": {
        "show": {
          "resource": [
            "globalExclusionList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLinkedinAccounts",
      "options": [
        {
          "name": "Get LinkedIn Accounts",
          "value": "getLinkedinAccounts",
          "action": "Get linkedin accounts",
          "description": "Retrieve all connected outreach LinkedIn accounts"
        },
        {
          "name": "Get Email Accounts",
          "value": "getEmailAccounts",
          "action": "Get email accounts",
          "description": "Retrieve all configured outreach email accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "outreach"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Account Info",
      "value": "getInfo",
      "action": "Get account info",
      "description": "Retrieve details about the current account and organization quotas",
      "resource": "account"
    },
    {
      "name": "Bulk Create Leads",
      "value": "bulkCreate",
      "action": "Bulk create leads",
      "description": "Create multiple leads in a campaign",
      "resource": "person"
    },
    {
      "name": "Create Lead",
      "value": "create",
      "action": "Create a lead",
      "description": "Create a new lead in a campaign",
      "resource": "person"
    },
    {
      "name": "Delete Lead",
      "value": "delete",
      "action": "Delete a lead",
      "description": "Delete a lead",
      "resource": "person"
    },
    {
      "name": "Find by Company Linkedin",
      "value": "byCompanyLinkedin",
      "action": "Find leads by company profile",
      "description": "Find leads by a company LinkedIn URL",
      "resource": "person"
    },
    {
      "name": "Find by Company Name",
      "value": "byCompanyName",
      "action": "Find leads by company name",
      "description": "Find leads by a company name",
      "resource": "person"
    },
    {
      "name": "Get Lead",
      "value": "get",
      "action": "Get a lead",
      "description": "Get a lead by ID",
      "resource": "person"
    },
    {
      "name": "List Leads",
      "value": "list",
      "action": "List leads",
      "description": "List leads in a campaign",
      "resource": "person"
    },
    {
      "name": "Update Lead",
      "value": "update",
      "action": "Update a lead",
      "description": "Update an existing lead",
      "resource": "person"
    },
    {
      "name": "Add Lead to Campaign Exclusion List",
      "value": "addToExclusionList",
      "action": "Add lead to exclusion list",
      "description": "Blacklist a lead identifier for a campaign",
      "resource": "project"
    },
    {
      "name": "Create Campaign",
      "value": "create",
      "action": "Create a campaign",
      "description": "Create a new campaign",
      "resource": "project"
    },
    {
      "name": "Delete Campaign",
      "value": "delete",
      "action": "Delete a campaign",
      "description": "Delete a campaign",
      "resource": "project"
    },
    {
      "name": "Get Campaign Log",
      "value": "getCampaignLog",
      "action": "Get campaign log",
      "description": "Retrieve campaign timeline events",
      "resource": "project"
    },
    {
      "name": "Get Exclusion List",
      "value": "getExclusionList",
      "action": "Get exclusion list",
      "description": "Retrieve all identifiers blacklisted for a campaign",
      "resource": "project"
    },
    {
      "name": "Remove Lead From Campaign Exclusion List",
      "value": "removeFromExclusionList",
      "action": "Remove lead from exclusion list",
      "description": "Delete a specific identifier from a campaign blacklist",
      "resource": "project"
    },
    {
      "name": "Get Replies",
      "value": "list",
      "action": "Get replies",
      "description": "Get replies for a lead",
      "resource": "reply"
    },
    {
      "name": "Get Activities",
      "value": "getActivities",
      "action": "Get recent profile activities",
      "description": "Get a profile's recent activities (reactions and comments)",
      "resource": "linkedinActivity"
    },
    {
      "name": "Get Interactions for LinkedIn Post Search",
      "value": "searchPostReactors",
      "action": "Get interactions for linkedin post search",
      "description": "Retrieve LinkedIn profiles that interacted with posts returned by a content search URL",
      "resource": "linkedinActivity"
    },
    {
      "name": "Get Interactions for Profiles",
      "value": "profilesPostReactors",
      "action": "Get interactors for profiles",
      "description": "Retrieve interactors for posts authored by specific LinkedIn profiles",
      "resource": "linkedinActivity"
    },
    {
      "name": "Get Post Interactors",
      "value": "getPostReactors",
      "action": "Get post interactors",
      "description": "Get people who interact with posts and send to a webhook",
      "resource": "linkedinActivity"
    },
    {
      "name": "Get Profile Details",
      "value": "getProfile",
      "action": "Get profile details",
      "description": "Scrapes and returns details for a LinkedIn profile",
      "resource": "linkedinActivity"
    },
    {
      "name": "Get Recent Profile Posts",
      "value": "getPosts",
      "action": "Get recent profile posts",
      "description": "Get profile's recent posts",
      "resource": "linkedinActivity"
    },
    {
      "name": "Add Lead to Global Exclusion List",
      "value": "addLead",
      "action": "Add lead to global exclusion list",
      "description": "Blacklist an identifier for the entire organization",
      "resource": "globalExclusionList"
    },
    {
      "name": "Remove Lead From Global Exclusion List",
      "value": "removeLead",
      "action": "Remove lead from global exclusion list",
      "description": "Delete a specific identifier from the global blacklist",
      "resource": "globalExclusionList"
    },
    {
      "name": "Get Global Exclusion List",
      "value": "get",
      "action": "Get global exclusion list",
      "description": "Retrieve the global text-based blacklist for the authenticated organization",
      "resource": "globalExclusionList"
    },
    {
      "name": "Get LinkedIn Accounts",
      "value": "getLinkedinAccounts",
      "action": "Get linkedin accounts",
      "description": "Retrieve all connected outreach LinkedIn accounts",
      "resource": "outreach"
    },
    {
      "name": "Get Email Accounts",
      "value": "getEmailAccounts",
      "action": "Get email accounts",
      "description": "Retrieve all configured outreach email accounts",
      "resource": "outreach"
    }
  ]

npm_readme:
  # **n8n-nodes-leadspicker**

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

  Leadspicker is a B2B data and sales intelligence platform that helps businesses find, enrich, and connect with relevant contacts.

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

  [Resources](#resources)

  [Changelog](#changelog)

  ## **Installation**

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

  ## **Operations**

  This node supports the following resources and operations:

  * **Lead**
    * Create a new lead in a campaign
    * Delete a lead
    * Get a lead by ID
    * List leads in a campaign
    * Update an existing lead
    * Find leads by a company's LinkedIn URL
    * Find leads by a company's name
  * **Campaign**
    * Create a new campaign
    * Delete a campaign
    * Get the campaign log (timeline events with optional search, date, person, and type filters)
    * Add a lead to the campaign exclusion list
    * Remove a lead from the campaign exclusion list
    * Get the campaign exclusion list
  * **Reply**
    * Get replies based on filters (email accounts, campaigns, sentiment)
  * **Linkedin Activity**
    * Get a LinkedIn profile's details
    * Get a profile's latest posts
    * Get a profile's recent activities (reactions and comments)
    * Get people who reacted to posts and send the results to a webhook
    * Retrieve LinkedIn profiles that reacted to posts returned by a content search URL
    * Retrieve reactors for posts authored by specific LinkedIn profiles
  * **Global Exclusion List**
    * Add a lead identifier to the global exclusion list
    * Remove a lead identifier from the global exclusion list
    * Get the global exclusion list
  * **Outreach**
    * List LinkedIn outreach accounts
    * List email outreach accounts
  * **Account**
    * Get account info and limits

  Note: The Linkedin Activity operations "Search Post Reactors" and "Profiles Post Reactors" auto-paginate. They aggregate all pages internally (handling the cursor automatically) and return a single flat list of reactor profiles.

  ## **Triggers**

  The Leadspicker Trigger node lets you subscribe to webhook events across all projects or filter down to a single campaign and fire workflows from these Leadspicker events:

  * Account revoked (connected account access revoked)
  * Email bounced
  * Email reply
  * Email sent
  * LinkedIn reply
  * LinkedIn sent
  * Lead added to a project

  ## **Credentials**

  To use this node, you need to authenticate using your Leadspicker API credentials.

  1. Sign up for an account with [Leadspicker](https://leadspicker.com/).
  2. Find your API Key in your account settings on the Leadspicker platform.
  3. In n8n, create a new credential for the Leadspicker node.
  4. Enter your API Key into the credential configuration screen.

  ## **Compatibility**

  This node has been developed and tested against n8n version 1.0.0. It may work with older versions, but it is not guaranteed.

  ## **Resources**

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Leadspicker Website](https://leadspicker.com/)

  ## **Changelog**

  ### 0.4.3

  * Replaced global timer usage with n8n workflow sleep helper to satisfy community-node linting.

  ### 0.4.2

  * Compliance fixes for n8n verification (removed external dependency usage and updated auth helper).

  ### 0.4.1
  * Added an **Account** resource with a "Get Account Info" action that surfaces subscription renewal dates, allowed LinkedIn/email accounts, allowed robots, and how many robots are currently running.
  * Added an **Outreach** resource to list all connected LinkedIn accounts and configured email accounts in one call so workflows can fan out automatically.
  * Added campaign-level exclusion list management actions (add, remove, list).
  * Added a **Global Exclusion List** resource to manage the organization-wide blacklist and return categorized LinkedIn/email/domain identifiers.
  * Leadspicker Trigger can now listen to every project when no campaign is selected.
  * Leadspicker Trigger requests Leadspicker to immediately send a test payload whenever the node is executed manually so `Test workflow` runs receive sample data instantly.
  * Added a **Bulk Create Leads** action under the Lead resource to send multiple user-provided leads (with optional custom fields) to the `/persons/bulk` API endpoint in a single call.

  ### 0.4.0

  * **Breaking:** Replaced the legacy `leadspickerNode` with the new `Leadspicker` node (type `leadspicker`), renamed resources to Lead/Campaign/Reply/Linkedin, and moved the AutoCPH operations under the Lead resource. Existing workflows referencing `leadspickerNode` must be recreated.
  * **Breaking:** Lead operations now expose individual fields (name, email, company, socials, custom fields) and all ID selectors use "Name or ID" dropdowns with a manual ID fallback, so any references to the previous collection-style parameters need to be reconfigured.
  * **Breaking:** Lead responses are flattened (no nested `person_data`) and the Lead/Reply list operations auto-paginate to return the entire dataset rather than a single page, changing the output structure and removing pagination parameters.
  * Added the Leadspicker Trigger node that manages webhooks for account revoked, email sent/replied/bounced, LinkedIn sent/replied, and lead-added events per campaign.
  * Linkedin Activity operations gained new controls (include/exclude profile cards, opt-in liker/commenter collection) and cursor-based aggregation so reactor searches return a single deduplicated array.
  * Lead finders now return the same flattened lead payloads as create/get/update results, keeping company/contact metadata consistent when searching by company name or LinkedIn URL.

  ### 0.3.1

  * Legacy release of the original `leadspickerNode` implementation.

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Leadspicker B2B sales intelligence API for managing leads, campaigns, LinkedIn activities, and outreach accounts.","capabilities":["Create, delete, list, and update leads by ID, company name, or LinkedIn URL","Bulk create leads in a single API call","Manage campaigns including logs, exclusion lists, and creation/deletion","Retrieve and filter replies based on email accounts, campaigns, or sentiment","Fetch LinkedIn profile details, posts, and recent activities","Search for and retrieve people who reacted to LinkedIn posts","Manage global and campaign-level exclusion lists","List connected LinkedIn and email outreach accounts","Retrieve account info and subscription limits","Subscribe to webhook events for account revocation, email bounces, sends, and replies"],"authentication":"API Key required","commonUseCases":["Automating lead generation and enrichment from company data","Managing B2B outreach campaigns and tracking engagement","Monitoring LinkedIn activity and collecting profile reactions","Handling email bounce and reply notifications via webhooks","Managing contact exclusion lists to prevent duplicate outreach"],"limitations":["Requires a paid Leadspicker account with API credentials","Requires n8n version 1.0.0 or later for guaranteed compatibility","Legacy node types (leadspickerNode) are deprecated and require workflow recreation","Lead responses are flattened and no longer support nested data structures"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Sleep","n8n Split In Batches"]}


node_type: n8n-nodes-byteplus.bytePlus
package_name: n8n-nodes-byteplus
display_name: BytePlus
description: BytePlus AI Services - Image Generation, Video Generation, and Text Generation
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: wilsonhfwong
author_github_url: https://github.com/bytedance-agent-architect/
npm_package_name: n8n-nodes-byteplus
npm_version: 0.2.1
community_fetched_at: 2026-04-16T09:43:35.832Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "text",
      "options": [
        {
          "name": "Image",
          "value": "image",
          "description": "Generate an image"
        },
        {
          "name": "Video",
          "value": "video",
          "description": "Generate a video"
        },
        {
          "name": "Text",
          "value": "text",
          "description": "Message a model"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateImage",
      "options": [
        {
          "name": "Generate Image",
          "value": "generateImage",
          "action": "Generate an image",
          "description": "Generate an image from a text prompt using Seedream"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "answerQuestion",
      "options": [
        {
          "name": "Answer Question",
          "value": "answerQuestion",
          "action": "Message a model",
          "description": "Send message to a model"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "text"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateVideo",
      "options": [
        {
          "name": "Generate Video",
          "value": "generateVideo",
          "action": "Generate a video",
          "description": "Generate a video from text and reference image using Seedance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Generate Image",
      "value": "generateImage",
      "action": "Generate an image",
      "description": "Generate an image from a text prompt using Seedream",
      "resource": "image"
    },
    {
      "name": "Answer Question",
      "value": "answerQuestion",
      "action": "Message a model",
      "description": "Send message to a model",
      "resource": "text"
    },
    {
      "name": "Generate Video",
      "value": "generateVideo",
      "action": "Generate a video",
      "description": "Generate a video from text and reference image using Seedance",
      "resource": "video"
    }
  ]

npm_readme:
  # n8n-nodes-byteplus

  **n8n community node for BytePlus AI services** - Image Generation, Video Generation, and Text Generation.

  ## Features

  | Service | Capabilities |
  |---------|-------------|
  | **Image Generation** | Generate images using Seedream models (2K, 1080p, 720p, 1024x1024) |
  | **Video Generation** | Create videos from text + reference images using Seedance |
  | **Text Generation** | Generate text responses using Seed LLM |

  ## Installation

  ### Option 1: Community Node (Recommended)

  1. In your n8n instance, go to **Settings > Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-byteplus`
  4. Agree to the risks and click **Install**

  ### Option 2: Manual Installation

  ```bash
  npm install n8n-nodes-byteplus
  ```

  ## Setup

  ### 1. Get BytePlus API Credentials

  1. Sign up at [BytePlus](https://www.byteplus.com/)
  2. Navigate to the ARK console
  3. Generate an API key

  ### 2. Configure Credentials in n8n

  1. In n8n, go to **Credentials**
  2. Click **New Credential**
  3. Search for **BytePlus API**
  4. Enter your API key and configure endpoints if needed

  ## Usage

  ### Image Generation

  Generate images from text prompts using Seedream models.

  **Parameters:**
  - **Prompt** (required): Text description of the image
  - **Model**: Seedream 4.0 (default), Seedream 3.0, or Custom
  - **Size**: 2K, 1080p, 720p, or 1024x1024
  - **Watermark**: Add watermark (default: true)

  **Output:** Images are displayed directly in n8n output panel with download URLs.

  ### Video Generation

  Create videos from text descriptions and reference images using Seedance.

  **Parameters:**
  - **Prompt** (required): Text description of the video
  - **Reference Image URL** (required): Public https:// URL of reference image
  - **Model**: Seedance 1.0 Lite I2V (default) or Custom
  - **Max Wait Time**: Polling timeout in seconds (default: 300)

  ### Text Generation

  Generate text responses using Seed LLM.

  **Parameters:**
  - **Prompt** (required): Question or prompt text
  - **Model**: Model ID for specific Seed LLM models

  ## Local Development

  ### Prerequisites

  - Node.js >=18.0.0
  - n8n installed locally (`npm install -g n8n` or use `npx`)

  ### Quick Start

  1. **Clone and install dependencies:**
     ```bash
     git clone <your-repo-url>
     cd n8n-nodes-byteplus
     npm install
     ```

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

  3. **Start n8n with the custom node:**
     ```bash
     N8N_CUSTOM_EXTENSIONS="/path/to/n8n-nodes-byteplus" npx n8n start
     ```
     > **Note:** `npm run dev` only runs the TypeScript compiler in watch mode — it does not start n8n. You need to run n8n separately.

  4. **Access n8n:**
     - Open http://localhost:5678
     - Create your workflow
     - Add BytePlus node from the nodes panel
     - Configure your BytePlus API credentials

  > **Port note:** n8n defaults to port 5678 for the editor UI. Port 5679 is used internally by the Task Broker — do not set `N8N_PORT=5679` as it will conflict.

  ### Development Commands

  ```bash
  # Build the node
  npm run build

  # Watch mode for development
  npm run dev

  # Lint code
  npm run lint

  # Fix linting issues
  npm run lintfix

  # Format code
  npm run format

  # Type checking
  npm run typecheck
  ```

  ### Project Structure

  ```
  n8n-nodes-byteplus/
  ├── credentials/
  │   └── BytePlusApi.credentials.ts    # API credential configuration
  ├── nodes/
  │   └── BytePlus/
  │       ├── BytePlus.node.ts          # Main node definition
  │       ├── byteplus.svg              # Node icon
  │       └── actions/
  │           ├── Image/                # Image generation operations
  │           ├── Video/                # Video generation operations
  │           └── Text/                 # Text generation operations
  ├── dist/                             # Built files (auto-generated)
  ├── package.json                      # Dependencies and scripts
  └── tsconfig.json                     # TypeScript configuration
  ```

  ## Security

  - **No credentials are hardcoded in this repo** (only field definitions)
  - **Secure your n8n instance before exposing it** (auth + access controls), especially if using tunnels for OAuth redirects
  - **Keep TLS verification enabled** (avoid `NODE_TLS_REJECT_UNAUTHORIZED=0` unless you fully understand the MITM risk)

  ## API Reference

  | Operation | Endpoint |
  |-----------|----------|
  | Image Generation | `/api/v3/images/generations` |
  | Video Generation | `/api/v3/contents/generations/tasks` |
  | Text Generation | `/api/v3/chat/completions` |

  ## Troubleshooting

  ### Common Issues

  **Node not appearing in n8n:**
  - Ensure you built the project (`npm run build`)
  - Verify `N8N_CUSTOM_EXTENSIONS` points to the correct path
  - Restart n8n after rebuilding

  **API authentication errors:**
  - Verify your BytePlus API key is correct
  - Check the base URL is set properly
  - Ensure your BytePlus account has necessary permissions

  **Build errors:**
  - Run `npm install` to ensure all dependencies are installed
  - Check Node.js version (>=18.0.0 required)

  ## License

  MIT

  ## Links

  - [BytePlus Documentation](https://www.byteplus.com/en/docs)
  - [BytePlus ARK Console](https://console.byteplus.com/ark)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"A community node for n8n that integrates BytePlus AI services to generate images, videos, and text responses.","capabilities":["Image generation using Seedream models (2K, 1080p, 720p, 1024x1024)","Video generation from text and reference images using Seedance","Text generation using Seed LLM models","Support for custom model selection","Watermarking options for image generation","Polling timeout configuration for video generation tasks"],"authentication":"API key required","commonUseCases":["Creating AI-generated images from text prompts","Producing video content from text descriptions and reference images","Generating text responses or chat completions via Seed LLM"],"limitations":["Video generation requires a public HTTPS URL for reference images","Community node requires manual installation or community node marketplace access","Requires Node.js >=18.0.0 for local development"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-zitedb.zite
package_name: n8n-nodes-zitedb
display_name: Zite Database
description: Interact with databases in Zite
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: xkcdstickfigure
author_github_url: https://github.com/fillout/
npm_package_name: n8n-nodes-zitedb
npm_version: 1.0.1
community_fetched_at: 2026-04-16T09:43:35.833Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "record",
      "options": [
        {
          "name": "Record",
          "value": "record"
        },
        {
          "name": "Table",
          "value": "table"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tables",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/bases/{{$parameter.baseId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of tables from a base"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get table",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/bases/{{$parameter.baseId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a table by ID or name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "table"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many records",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of records from a table"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get record by ID",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a record from a table"
        },
        {
          "name": "Get by Field",
          "value": "getByField",
          "action": "Get record by field value",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "qs": {
                "limit": 1
              },
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
              "method": "GET"
            }
          },
          "description": "Retrieve a record by searching a field value"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create record",
          "routing": {
            "request": {
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
              "method": "POST"
            }
          },
          "description": "Create a new record"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update record",
          "routing": {
            "request": {
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
              "method": "PATCH"
            }
          },
          "description": "Update an existing record"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete record",
          "routing": {
            "request": {
              "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a record permanently"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "record"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tables",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/bases/{{$parameter.baseId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of tables from a base",
      "resource": "table"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get table",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/bases/{{$parameter.baseId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a table by ID or name",
      "resource": "table"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many records",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of records from a table",
      "resource": "record"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get record by ID",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a record from a table",
      "resource": "record"
    },
    {
      "name": "Get by Field",
      "value": "getByField",
      "action": "Get record by field value",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "qs": {
            "limit": 1
          },
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
          "method": "GET"
        }
      },
      "description": "Retrieve a record by searching a field value",
      "resource": "record"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create record",
      "routing": {
        "request": {
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records",
          "method": "POST"
        }
      },
      "description": "Create a new record",
      "resource": "record"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update record",
      "routing": {
        "request": {
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
          "method": "PATCH"
        }
      },
      "description": "Update an existing record",
      "resource": "record"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete record",
      "routing": {
        "request": {
          "url": "=/bases/{{$parameter.baseId}}/tables/{{$parameter.tableId}}/records/{{$parameter.recordId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a record permanently",
      "resource": "record"
    }
  ]

npm_readme:
  # n8n package for Zite Database

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

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

  ## Installation

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

  ## Usage

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

  ## Developers

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with databases hosted in Zite (Fillout) within automated workflows.","capabilities":["Query Zite databases","Retrieve database records","Update database entries","Create new database records","Delete database entries"],"authentication":"API key required (obtained from Zite account settings)","commonUseCases":["Automating form data storage and retrieval","Integrating Zite forms with other business applications","Building custom workflows that require Zite database access"],"limitations":["Community node (not officially maintained by n8n)","Requires Zite Enterprise for multi-region base URL configuration","Limited documentation compared to official n8n nodes"],"relatedNodes":["Zite Trigger","Zite Database Item","Zite Database Update","Zite Database Delete"]}


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

updated_at: 2026-04-16 09:43:35
author_name: mollienl
author_github_url: https://github.com/mollie/mollie-n8n-nodes.git
npm_package_name: @mollie/n8n-nodes-mollie
npm_version: 1.1.0
community_fetched_at: 2026-04-16T09:43:35.835Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "payment",
      "options": [
        {
          "name": "Balance",
          "value": "balance"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Payment Link",
          "value": "paymentLink"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTransactions",
      "options": [
        {
          "name": "Get Many Transactions",
          "value": "getTransactions",
          "action": "Get many balance transactions",
          "routing": {
            "send": {
              "preSend": [
                null
              ],
              "paginate": true
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_embedded.balance_transactions"
                  }
                },
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ $response.body._embedded.balance_transactions.map(item => ({ ...item, createdAt: new Date(item.createdAt) })) }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v2/balances/{{$parameter.balanceId}}/transactions",
              "method": "GET"
            }
          },
          "description": "Get many balance transactions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "balance"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a payment",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/v2/payments",
              "body": {
                "amount": {
                  "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
                  "currency": "={{$parameter.currency}}"
                },
                "locale": "={{$parameter.additionalFields?.locale || undefined}}",
                "method": "={{$parameter.additionalFields?.method || undefined}}",
                "metadata": "={{$parameter.additionalFields?.metadata || undefined}}",
                "mandateId": "={{$parameter.additionalFields?.mandateId || undefined}}",
                "profileId": "={{$parameter.authentication === \"oAuth2\" ? $parameter.profileId : undefined}}",
                "customerId": "={{$parameter.additionalFields?.customerId || undefined}}",
                "webhookUrl": "={{$parameter.additionalFields?.webhookUrl || undefined}}",
                "captureMode": "={{$parameter.additionalFields?.captureMode || undefined}}",
                "description": "={{$parameter.description}}",
                "redirectUrl": "={{$parameter.redirectUrl}}",
                "sequenceType": "={{$parameter.additionalFields?.sequenceType || undefined}}",
                "restrictPaymentMethodsToCountry": "={{$parameter.additionalFields?.restrictPaymentMethodsToCountry || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a payment"
        },
        {
          "name": "Create Capture",
          "value": "createCapture",
          "action": "Create a payment capture",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/v2/payments/{{$parameter.paymentId}}/captures",
              "body": {
                "amount": {
                  "value": "={{$parameter.amount ? parseFloat($parameter.amount).toFixed(2) : undefined}}",
                  "currency": "={{$parameter.amount ? $parameter.currency : undefined}}"
                },
                "metadata": "={{$parameter.metadata || undefined}}",
                "description": "={{$parameter.description || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Capture an authorized payment"
        },
        {
          "name": "Create Refund",
          "value": "createRefund",
          "action": "Create a payment refund",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/v2/payments/{{$parameter.paymentId}}/refunds",
              "body": {
                "amount": {
                  "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
                  "currency": "={{$parameter.currency}}"
                },
                "metadata": "={{$parameter.additionalFields?.metadata || undefined}}",
                "description": "={{$parameter.description || undefined}}",
                "reverseRouting": "={{$parameter.additionalFields?.reverseRouting || undefined}}",
                "routingReversals": "={{ $parameter.additionalFields?.routingReversals?.reversalValues ? $parameter.additionalFields.routingReversals.reversalValues.map(r => ({ amount: { value: parseFloat(r.amountValue || 0).toFixed(2), currency: r.amountCurrency }, source: { type: r.sourceType, organizationId: r.organizationId } })) : undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Create a payment refund"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "=/v2/payments/{{$parameter.paymentId}}",
              "method": "GET"
            }
          },
          "description": "Get a payment by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many payments",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "_embedded.payments"
                  }
                }
              ]
            },
            "request": {
              "url": "/v2/payments",
              "method": "GET"
            }
          },
          "description": "Get many payments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a payment link",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/v2/payment-links",
              "body": {
                "amount": {
                  "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
                  "currency": "={{$parameter.currency}}"
                },
                "expiresAt": "={{$parameter.expiresAt ? new Date($parameter.expiresAt).toISOString() : undefined}}",
                "profileId": "={{$parameter.authentication === \"oAuth2\" ? $parameter.profileId : undefined}}",
                "webhookUrl": "={{$parameter.webhookUrl || undefined}}",
                "description": "={{$parameter.description}}",
                "redirectUrl": "={{$parameter.redirectUrl || undefined}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a payment link"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "paymentLink"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many Transactions",
      "value": "getTransactions",
      "action": "Get many balance transactions",
      "routing": {
        "send": {
          "preSend": [
            null
          ],
          "paginate": true
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_embedded.balance_transactions"
              }
            },
            {
              "type": "set",
              "properties": {
                "value": "={{ $response.body._embedded.balance_transactions.map(item => ({ ...item, createdAt: new Date(item.createdAt) })) }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/v2/balances/{{$parameter.balanceId}}/transactions",
          "method": "GET"
        }
      },
      "description": "Get many balance transactions",
      "resource": "balance"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a payment",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/v2/payments",
          "body": {
            "amount": {
              "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
              "currency": "={{$parameter.currency}}"
            },
            "locale": "={{$parameter.additionalFields?.locale || undefined}}",
            "method": "={{$parameter.additionalFields?.method || undefined}}",
            "metadata": "={{$parameter.additionalFields?.metadata || undefined}}",
            "mandateId": "={{$parameter.additionalFields?.mandateId || undefined}}",
            "profileId": "={{$parameter.authentication === \"oAuth2\" ? $parameter.profileId : undefined}}",
            "customerId": "={{$parameter.additionalFields?.customerId || undefined}}",
            "webhookUrl": "={{$parameter.additionalFields?.webhookUrl || undefined}}",
            "captureMode": "={{$parameter.additionalFields?.captureMode || undefined}}",
            "description": "={{$parameter.description}}",
            "redirectUrl": "={{$parameter.redirectUrl}}",
            "sequenceType": "={{$parameter.additionalFields?.sequenceType || undefined}}",
            "restrictPaymentMethodsToCountry": "={{$parameter.additionalFields?.restrictPaymentMethodsToCountry || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a payment",
      "resource": "payment"
    },
    {
      "name": "Create Capture",
      "value": "createCapture",
      "action": "Create a payment capture",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/v2/payments/{{$parameter.paymentId}}/captures",
          "body": {
            "amount": {
              "value": "={{$parameter.amount ? parseFloat($parameter.amount).toFixed(2) : undefined}}",
              "currency": "={{$parameter.amount ? $parameter.currency : undefined}}"
            },
            "metadata": "={{$parameter.metadata || undefined}}",
            "description": "={{$parameter.description || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Capture an authorized payment",
      "resource": "payment"
    },
    {
      "name": "Create Refund",
      "value": "createRefund",
      "action": "Create a payment refund",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/v2/payments/{{$parameter.paymentId}}/refunds",
          "body": {
            "amount": {
              "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
              "currency": "={{$parameter.currency}}"
            },
            "metadata": "={{$parameter.additionalFields?.metadata || undefined}}",
            "description": "={{$parameter.description || undefined}}",
            "reverseRouting": "={{$parameter.additionalFields?.reverseRouting || undefined}}",
            "routingReversals": "={{ $parameter.additionalFields?.routingReversals?.reversalValues ? $parameter.additionalFields.routingReversals.reversalValues.map(r => ({ amount: { value: parseFloat(r.amountValue || 0).toFixed(2), currency: r.amountCurrency }, source: { type: r.sourceType, organizationId: r.organizationId } })) : undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Create a payment refund",
      "resource": "payment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "=/v2/payments/{{$parameter.paymentId}}",
          "method": "GET"
        }
      },
      "description": "Get a payment by ID",
      "resource": "payment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many payments",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "_embedded.payments"
              }
            }
          ]
        },
        "request": {
          "url": "/v2/payments",
          "method": "GET"
        }
      },
      "description": "Get many payments",
      "resource": "payment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a payment link",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/v2/payment-links",
          "body": {
            "amount": {
              "value": "={{parseFloat($parameter.amount || 0).toFixed(2)}}",
              "currency": "={{$parameter.currency}}"
            },
            "expiresAt": "={{$parameter.expiresAt ? new Date($parameter.expiresAt).toISOString() : undefined}}",
            "profileId": "={{$parameter.authentication === \"oAuth2\" ? $parameter.profileId : undefined}}",
            "webhookUrl": "={{$parameter.webhookUrl || undefined}}",
            "description": "={{$parameter.description}}",
            "redirectUrl": "={{$parameter.redirectUrl || undefined}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a payment link",
      "resource": "paymentLink"
    }
  ]

npm_readme:
  # n8n-nodes-mollie

  This is an n8n community node that lets you use [Mollie](https://www.mollie.com/) payment API in your n8n workflows.

  Mollie is a payment service provider that allows businesses to accept online payments through various payment methods including credit cards, PayPal, Apple Pay, and more.

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

  ## Table of Contents

  - [Installation](#installation)
  - [Authentication](#authentication)
    - [API Key Authentication](#api-key-authentication)
    - [OAuth2 Authentication](#oauth2-authentication)
  - [Operations](#operations)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Resources](#resources)
  - [Version History](#version-history)

  ## Installation

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

  ### Community Node Installation

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-mollie` in **Enter npm package name**
  4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes
  5. Select **Install**

  After installation, you can use the Mollie node in your workflows.

  ### Manual Installation (for development)

  1. Clone this repository
  2. Navigate to the repository folder
  3. Run `npm install`
  4. Run `npm run build`
  5. Link the package to your n8n installation:
     ```bash
     npm link
     cd ~/.n8n/nodes
     npm link n8n-nodes-mollie
     ```
  6. Restart n8n

  ## Authentication

  This node supports two authentication methods:

  ### API Key Authentication

  Simple authentication using your Mollie API key.

  **Prerequisites:**
  - A Mollie account ([sign up here](https://www.mollie.com/dashboard/signup))
  - API key from your Mollie Dashboard

  **Setup:**

  1. Go to your [Mollie Dashboard](https://www.mollie.com/dashboard)
  2. Navigate to **Developers** > **API keys**
  3. Copy your **Live API key** or **Test API key**
  4. In n8n, create a new **Mollie API** credential
  5. Paste your API key
  6. Set **Test Account** to `true` if using a test key, `false` for live keys
  7. Save the credential

  **API Key Format:**
  - Test keys start with `test_`
  - Live keys start with `live_`

  ### OAuth2 Authentication

  OAuth2 authentication provides more granular permission control and is required for some operations.

  **Prerequisites:**
  - A Mollie account
  - OAuth app configured in Mollie Dashboard (optional - shared app provided by default)

  **Setup with Default Shared App:**

  1. In n8n, create a new **Mollie OAuth2 API** credential
  2. Set **Test Account** to `true` for testing or `false` for production
  3. (Optional) Select **Additional Scopes** if you need permissions beyond the defaults
  4. Click **Connect my account**
  5. Follow the OAuth flow to authorize access
  6. Save the credential

  **Setup with Custom OAuth App:**

  1. Go to your [Mollie Dashboard](https://www.mollie.com/dashboard)
  2. Navigate to **Developers** > **OAuth Apps**
  3. Create a new OAuth app
  4. Set the redirect URL to: `https://your-n8n-instance.com/rest/oauth2-credential/callback`
  5. Note your Client ID and Client Secret
  6. In n8n, create a new **Mollie OAuth2 API** credential
  7. Enter your **Client ID** and **Client Secret**
  8. Set **Test Account** appropriately
  9. Select any **Additional Scopes** you need
  10. Click **Connect my account**
  11. Follow the OAuth flow to authorize access
  12. Save the credential

  **Available Scopes:**

  The node requests these scopes by default:
  - `organizations.read` - View the merchant's organizational details
  - `profiles.read` - View the merchant's payment profiles

  Additional scopes you can select:
  - `payments.read` - View payments, chargebacks, and payment methods
  - `payments.write` - Create and manage payments
  - `refunds.read` - View refunds
  - `refunds.write` - Create and manage refunds
  - `customers.read` - View customers
  - `customers.write` - Create and manage customers
  - `mandates.read` - View mandates
  - `mandates.write` - Create and manage mandates
  - `subscriptions.read` - View subscriptions
  - `subscriptions.write` - Create and manage subscriptions
  - `profiles.write` - Create and manage profiles
  - `invoices.read` - View invoices
  - `settlements.read` - View settlements
  - `orders.read` - View orders
  - `orders.write` - Create and manage orders
  - `shipments.read` - View shipments
  - `shipments.write` - Create and manage shipments
  - `organizations.write` - Manage organizational details
  - `onboarding.read` - View onboarding status
  - `onboarding.write` - Manage onboarding
  - `balances.read` - View balances

  ## Operations

  ### Payment

  #### Get Many
  Retrieve a list of payments.

  **Parameters:**
  - **Return All**: Whether to return all results or limit to a specific number
  - **Limit**: Maximum number of payments to return (1-250, default: 100)
  - **Filters**:
    - **Status**: Filter by payment status
      - All
      - Open
      - Canceled
      - Pending
      - Authorized
      - Expired
      - Failed
      - Paid

  **Output:**
  Returns an array of payment objects with the following fields:
  - `id` - Mollie payment ID
  - `amount` - Payment amount (as number)
  - `currency` - Payment currency code (e.g., EUR, USD)
  - `status` - Payment status
  - `description` - Payment description
  - `method` - Payment method used
  - `checkoutLink` - URL to the payment checkout page
  - `createdAt` - ISO timestamp when payment was created
  - `expiresAt` - ISO timestamp when payment expires
  - `expiredAt` - ISO timestamp when payment expired (if applicable)
  - `paidAt` - ISO timestamp when payment was paid (if applicable)
  - `amountRefunded` - Total refunded amount (as number)
  - `amountRemaining` - Remaining capturable amount (as number)
  - `settlementAmount` - Settlement amount (as number)
  - Plus all other fields from the Mollie API response

  #### Get
  Retrieve a single payment by ID.

  **Parameters:**
  - **Payment ID**: The Mollie payment ID (e.g., `tr_WDqYK6vllg`)

  **Output:**
  Returns a single payment object with the same fields as described in "Get Many".

  ## Compatibility

  - Requires n8n version 0.198.0 or later
  - Tested with n8n version 1.0.0+
  - Compatible with Mollie API v2

  ## Usage

  ### Example: List Recent Paid Payments

  1. Add the **Mollie** node to your workflow
  2. Select your authentication method and credential
  3. Choose **Payment** as the resource
  4. Choose **Get Many** as the operation
  5. Set **Return All** to `false`
  6. Set **Limit** to `50`
  7. Under **Filters**, set **Status** to `Paid`
  8. Execute the node

  This will return the 50 most recent paid payments from your Mollie account.

  ### Example: Get Specific Payment Details

  1. Add the **Mollie** node to your workflow
  2. Select your authentication method and credential
  3. Choose **Payment** as the resource
  4. Choose **Get** as the operation
  5. Enter the **Payment ID** (e.g., from a webhook or previous node)
  6. Execute the node

  This will return detailed information about the specific payment.

  ### Test Mode

  Both authentication methods include a **Test Account** parameter:
  - Set to `true` to work with test payments (using test API keys)
  - Set to `false` to work with live production payments

  When Test Account is enabled, all API requests will include `testmode=true`, ensuring you only see test data.

  ## Future Operations

  This node is designed to be extended with additional operations. Planned future operations include:

  - **Create Payment** - Create a new payment
  - **Create Payment Link** - Generate a payment link
  - **Create Refund** - Refund a payment
  - **Customer Operations** - Manage customers
  - **Subscription Operations** - Manage subscriptions
  - **Order Operations** - Manage orders

  Contributions are welcome!

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Mollie API documentation](https://docs.mollie.com/reference/v2/payments-api/overview)
  - [Mollie Authentication documentation](https://docs.mollie.com/reference/authentication)
  - [Mollie Dashboard](https://www.mollie.com/dashboard)

  ## Version History

  ### 1.0.0
  - Initial release
  - Support for API Key and OAuth2 authentication
  - List Payments operation with pagination
  - Get Payment operation
  - Test mode support
  - Comprehensive error handling including rate limiting

  ## License

  [MIT](LICENSE)

  ## Support

  For issues, questions, or contributions, please visit the [GitHub repository](https://github.com/mollie/mollie-n8n-nodes).

  ## Credits

  Developed based on the Make.com Mollie integration specification, adapted for n8n workflows.

ai_documentation_summary:
  {"purpose":"A community n8n node that enables interaction with the Mollie payment API to manage payments, refunds, customers, and other financial operations.","capabilities":["Retrieve payment lists with filtering and pagination","Retrieve individual payments by ID","Create and manage payments","Manage refunds","Manage customer data","Manage mandates","Manage subscriptions","Manage payment profiles","View invoices and settlements","Manage organizational details"],"authentication":"API Key or OAuth2","commonUseCases":["Automated order processing with payment verification","Refund management workflows","Customer payment history retrieval","Subscription management automation","Invoice and settlement tracking"],"limitations":["Community node (requires manual installation for development)","Limited to Mollie API operations","Requires Mollie account and API credentials"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Code Node"]}


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-04-16 09:43:35
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-04-16T09:43:35.839Z
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.


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

updated_at: 2026-04-16 09:43:35
author_name: azhderskam
author_github_url: https://github.com/localithai/
npm_package_name: n8n-nodes-localith
npm_version: 0.1.17
community_fetched_at: 2026-04-16T09:43:35.840Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "listing",
      "options": [
        {
          "name": "Item",
          "value": "item"
        },
        {
          "name": "Listing",
          "value": "listing"
        },
        {
          "name": "Listing Metrics",
          "value": "listingMetrics"
        },
        {
          "name": "Listing Item Metrics",
          "value": "listingItemMetrics"
        },
        {
          "name": "Content Publishing Media",
          "value": "contentPublishingMedia"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many items",
          "routing": {
            "request": {
              "url": "/rest/v1/items",
              "method": "GET"
            }
          },
          "description": "Retrieve the collection of items (reviews)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "item"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many listings",
          "routing": {
            "request": {
              "url": "/rest/v1/listings",
              "method": "GET"
            }
          },
          "description": "Retrieve the collection of listings"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a listing",
          "routing": {
            "request": {
              "url": "=/rest/v1/listings/{{$parameter[\"listingId\"]}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single listing by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a listing",
          "routing": {
            "request": {
              "url": "=/rest/v1/listings/{{$parameter[\"listingId\"]}}",
              "method": "PATCH"
            }
          },
          "description": "Update a listing by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "listing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get listing metrics",
          "routing": {
            "request": {
              "url": "/rest/v1/listing_metrics",
              "method": "GET"
            }
          },
          "description": "Retrieve daily listing metrics summarized data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "listingMetrics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get listing item metrics",
          "routing": {
            "request": {
              "url": "/rest/v1/listing_item_metrics",
              "method": "GET"
            }
          },
          "description": "Retrieve reviews metrics summarized data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "listingItemMetrics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish / Schedule",
          "value": "publish",
          "action": "Publish or schedule a media post",
          "routing": {
            "request": {
              "url": "/rest/v1/content_publishing_media",
              "method": "POST"
            }
          },
          "description": "Publish or schedule content publishing media posts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contentPublishingMedia"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many items",
      "routing": {
        "request": {
          "url": "/rest/v1/items",
          "method": "GET"
        }
      },
      "description": "Retrieve the collection of items (reviews)",
      "resource": "item"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many listings",
      "routing": {
        "request": {
          "url": "/rest/v1/listings",
          "method": "GET"
        }
      },
      "description": "Retrieve the collection of listings",
      "resource": "listing"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a listing",
      "routing": {
        "request": {
          "url": "=/rest/v1/listings/{{$parameter[\"listingId\"]}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single listing by ID",
      "resource": "listing"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a listing",
      "routing": {
        "request": {
          "url": "=/rest/v1/listings/{{$parameter[\"listingId\"]}}",
          "method": "PATCH"
        }
      },
      "description": "Update a listing by ID",
      "resource": "listing"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get listing metrics",
      "routing": {
        "request": {
          "url": "/rest/v1/listing_metrics",
          "method": "GET"
        }
      },
      "description": "Retrieve daily listing metrics summarized data",
      "resource": "listingMetrics"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get listing item metrics",
      "routing": {
        "request": {
          "url": "/rest/v1/listing_item_metrics",
          "method": "GET"
        }
      },
      "description": "Retrieve reviews metrics summarized data",
      "resource": "listingItemMetrics"
    },
    {
      "name": "Publish / Schedule",
      "value": "publish",
      "action": "Publish or schedule a media post",
      "routing": {
        "request": {
          "url": "/rest/v1/content_publishing_media",
          "method": "POST"
        }
      },
      "description": "Publish or schedule content publishing media posts",
      "resource": "contentPublishingMedia"
    }
  ]

npm_readme:
  # n8n-nodes-localith

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

  > Access your Google Business reviews, listings, and location metrics directly in n8n — and build powerful automations, dashboards, or your own reputation management platform on top of them.

  ---

  ## 🌐 What is Localith?

  [Localith](https://localith.ai) is a Google Business Profile management platform that gives you full programmatic access to your locations, reviews, and performance metrics.

  Think of it as the **Google Business API made simple**. With this n8n node, you can pull all of that data into any workflow — no complex API setup required.

  ---

  ## 🚀 What can you build?

  | Use Case | Description |
  |---|---|
  | 📊 Custom dashboards | Sync review data to Airtable, Notion, or Google Sheets |
  | 🔔 Review alerts | Get Slack or email notifications the moment a new review comes in |
  | 🤖 AI reply automation | Pipe reviews into an AI node and auto-generate replies |
  | 📈 Reputation reporting | Build weekly performance reports for clients or internal teams |
  | 🏗️ Your own platform | Use Localith as the data layer and build your own review management tool |
  | 🔁 Multi-location sync | Manage hundreds of locations from a single workflow |

  ---

  ## ⚙️ Operations

  ### 📍 Listings
  | Operation | Description |
  |---|---|
  | Get all listings | Fetch all your Google Business locations |
  | Get listing by ID | Retrieve details for a specific location |
  | Update listing | Modify listing information |

  ### ⭐ Reviews
  | Operation | Description |
  |---|---|
  | Get reviews | Fetch all reviews across your locations, with filtering by rating, date, and source |
  | Get review metrics | Aggregate review stats (average rating, total count, trends) |

  ### 📈 Metrics
  | Operation | Description |
  |---|---|
  | Get listing metrics | Impressions, clicks, calls, direction requests per location |
  | Get item metrics | Performance data for individual posts or products |

  ### 📣 Content Publishing
  | Operation | Description |
  |---|---|
  | Publish media | Upload and publish content to your Google Business profiles |

  ---

  ## 🔐 Authentication

  This node uses **API Key** authentication. You can find your API key in your [Localith dashboard](https://localith.ai).

  ---

  ## 📦 Installation

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

  ```
  n8n-nodes-localith
  ```

  ---

  ## 💡 Example — Automated review alerts with AI replies

  ```
  ⏱ Schedule Trigger (every hour)
    ↓
  📍 Localith: Get Reviews (new reviews since last run)
    ↓
  🔀 IF Node (filter 1–3 star reviews)
    ↓
  🤖 OpenAI Node (generate professional reply)
    ↓
  💬 Slack Node (send review + suggested reply for team approval)
  ```

  ---

  ## 🔗 Links

  | | |
  |---|---|
  | 🌐 Website | [localith.ai](https://localith.ai) |
  | 📦 npm | [n8n-nodes-localith](https://www.npmjs.com/package/n8n-nodes-localith) |
  | 💻 GitHub | [localithai/n8n-nodes-localith](https://github.com/localithai/n8n-nodes-localith) |
  | 📖 API Docs | [embedsocial.com/app/api/documentation](https://embedsocial.com/app/api/documentation) |

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Localith API to access Google Business Profile data, including listings, reviews, and performance metrics.","capabilities":["Fetch all Google Business locations","Retrieve specific location details by ID","Update location listing information","Fetch reviews with filtering by rating, date, and source","Get aggregated review metrics and trends","Retrieve listing performance metrics (impressions, clicks, calls, directions)","Get item metrics for posts or products","Publish media to Google Business profiles"],"authentication":"API Key required","commonUseCases":["Sync review data to external tools like Airtable, Notion, or Google Sheets","Set up automated alerts for new reviews via Slack or email","Generate AI-powered automated replies to customer reviews","Create reputation management dashboards and reports","Manage multiple business locations from a single workflow"],"limitations":[],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-whatsapp.whatsapp","n8n-nodes-slack.slack","n8n-nodes-github.github","n8n-nodes-airtable.airtable"]}


node_type: @leadspicker/n8n-nodes-leadspicker.leadspickerTrigger
package_name: @leadspicker/n8n-nodes-leadspicker
display_name: Leadspicker Trigger
description: Receive Leadspicker webhook events for multiple features
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: janskacel
author_github_url: https://github.com/Leadspicker/n8n-nodes-leadspicker.git
npm_package_name: @leadspicker/n8n-nodes-leadspicker
npm_version: 0.4.4
community_fetched_at: 2026-04-16T09:43:35.842Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # **n8n-nodes-leadspicker**

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

  Leadspicker is a B2B data and sales intelligence platform that helps businesses find, enrich, and connect with relevant contacts.

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

  [Resources](#resources)

  [Changelog](#changelog)

  ## **Installation**

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

  ## **Operations**

  This node supports the following resources and operations:

  * **Lead**
    * Create a new lead in a campaign
    * Delete a lead
    * Get a lead by ID
    * List leads in a campaign
    * Update an existing lead
    * Find leads by a company's LinkedIn URL
    * Find leads by a company's name
  * **Campaign**
    * Create a new campaign
    * Delete a campaign
    * Get the campaign log (timeline events with optional search, date, person, and type filters)
    * Add a lead to the campaign exclusion list
    * Remove a lead from the campaign exclusion list
    * Get the campaign exclusion list
  * **Reply**
    * Get replies based on filters (email accounts, campaigns, sentiment)
  * **Linkedin Activity**
    * Get a LinkedIn profile's details
    * Get a profile's latest posts
    * Get a profile's recent activities (reactions and comments)
    * Get people who reacted to posts and send the results to a webhook
    * Retrieve LinkedIn profiles that reacted to posts returned by a content search URL
    * Retrieve reactors for posts authored by specific LinkedIn profiles
  * **Global Exclusion List**
    * Add a lead identifier to the global exclusion list
    * Remove a lead identifier from the global exclusion list
    * Get the global exclusion list
  * **Outreach**
    * List LinkedIn outreach accounts
    * List email outreach accounts
  * **Account**
    * Get account info and limits

  Note: The Linkedin Activity operations "Search Post Reactors" and "Profiles Post Reactors" auto-paginate. They aggregate all pages internally (handling the cursor automatically) and return a single flat list of reactor profiles.

  ## **Triggers**

  The Leadspicker Trigger node lets you subscribe to webhook events across all projects or filter down to a single campaign and fire workflows from these Leadspicker events:

  * Account revoked (connected account access revoked)
  * Email bounced
  * Email reply
  * Email sent
  * LinkedIn reply
  * LinkedIn sent
  * Lead added to a project

  ## **Credentials**

  To use this node, you need to authenticate using your Leadspicker API credentials.

  1. Sign up for an account with [Leadspicker](https://leadspicker.com/).
  2. Find your API Key in your account settings on the Leadspicker platform.
  3. In n8n, create a new credential for the Leadspicker node.
  4. Enter your API Key into the credential configuration screen.

  ## **Compatibility**

  This node has been developed and tested against n8n version 1.0.0. It may work with older versions, but it is not guaranteed.

  ## **Resources**

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Leadspicker Website](https://leadspicker.com/)

  ## **Changelog**

  ### 0.4.3

  * Replaced global timer usage with n8n workflow sleep helper to satisfy community-node linting.

  ### 0.4.2

  * Compliance fixes for n8n verification (removed external dependency usage and updated auth helper).

  ### 0.4.1
  * Added an **Account** resource with a "Get Account Info" action that surfaces subscription renewal dates, allowed LinkedIn/email accounts, allowed robots, and how many robots are currently running.
  * Added an **Outreach** resource to list all connected LinkedIn accounts and configured email accounts in one call so workflows can fan out automatically.
  * Added campaign-level exclusion list management actions (add, remove, list).
  * Added a **Global Exclusion List** resource to manage the organization-wide blacklist and return categorized LinkedIn/email/domain identifiers.
  * Leadspicker Trigger can now listen to every project when no campaign is selected.
  * Leadspicker Trigger requests Leadspicker to immediately send a test payload whenever the node is executed manually so `Test workflow` runs receive sample data instantly.
  * Added a **Bulk Create Leads** action under the Lead resource to send multiple user-provided leads (with optional custom fields) to the `/persons/bulk` API endpoint in a single call.

  ### 0.4.0

  * **Breaking:** Replaced the legacy `leadspickerNode` with the new `Leadspicker` node (type `leadspicker`), renamed resources to Lead/Campaign/Reply/Linkedin, and moved the AutoCPH operations under the Lead resource. Existing workflows referencing `leadspickerNode` must be recreated.
  * **Breaking:** Lead operations now expose individual fields (name, email, company, socials, custom fields) and all ID selectors use "Name or ID" dropdowns with a manual ID fallback, so any references to the previous collection-style parameters need to be reconfigured.
  * **Breaking:** Lead responses are flattened (no nested `person_data`) and the Lead/Reply list operations auto-paginate to return the entire dataset rather than a single page, changing the output structure and removing pagination parameters.
  * Added the Leadspicker Trigger node that manages webhooks for account revoked, email sent/replied/bounced, LinkedIn sent/replied, and lead-added events per campaign.
  * Linkedin Activity operations gained new controls (include/exclude profile cards, opt-in liker/commenter collection) and cursor-based aggregation so reactor searches return a single deduplicated array.
  * Lead finders now return the same flattened lead payloads as create/get/update results, keeping company/contact metadata consistent when searching by company name or LinkedIn URL.

  ### 0.3.1

  * Legacy release of the original `leadspickerNode` implementation.

ai_documentation_summary:
  {"purpose":"The Leadspicker Trigger node allows n8n workflows to subscribe to and process webhook events from the Leadspicker B2B sales intelligence platform, enabling automation based on account changes, email activities, and lead additions.","capabilities":["Subscribe to webhook events for multiple features","Handle Account Revoked events","Handle Email Bounced events","Handle Email Reply events","Handle Email Sent events","Handle LinkedIn Reply events","Handle LinkedIn Sent events","Handle Lead Added to Project events","Filter events by specific campaigns","Listen to all projects when no campaign is selected"],"authentication":"API Key required","commonUseCases":["Automate workflows triggered by new lead additions","Process email replies and bounces automatically","Monitor account access revocations","Track LinkedIn activity and engagement","Filter incoming events by specific campaigns"],"limitations":["Requires a Leadspicker account and API key","Compatible primarily with n8n version 1.0.0 and newer","Requires manual reconfiguration of existing workflows using the legacy leadspickerNode"],"relatedNodes":["Leadspicker Operation Node","Leadspicker Credential Node","Webhook Node","Email Node","LinkedIn Node"]}


node_type: @tehw0lf/n8n-nodes-toon.toon
package_name: @tehw0lf/n8n-nodes-toon
display_name: TOON
description: Convert between TOON and JSON formats with zero external dependencies
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: tehw0lf
author_github_url: https://github.com/tehw0lf/n8n-nodes-toon.git
npm_package_name: @tehw0lf/n8n-nodes-toon
npm_version: 1.2.1
community_fetched_at: 2026-04-16T09:43:35.843Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "jsonToToon",
      "options": [
        {
          "name": "JSON to TOON",
          "value": "jsonToToon",
          "action": "Convert JSON to TOON",
          "description": "Convert JSON data to TOON format"
        },
        {
          "name": "TOON to JSON",
          "value": "toonToJson",
          "action": "Convert TOON to JSON",
          "description": "Parse TOON format to JSON"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "JSON to TOON",
      "value": "jsonToToon",
      "action": "Convert JSON to TOON",
      "description": "Convert JSON data to TOON format"
    },
    {
      "name": "TOON to JSON",
      "value": "toonToJson",
      "action": "Convert TOON to JSON",
      "description": "Parse TOON format to JSON"
    }
  ]

npm_readme:
  # @tehw0lf/n8n-nodes-toon

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

  This is an n8n community node that provides bidirectional conversion between **TOON (Token-Oriented Object Notation)** and JSON formats. TOON is a line-oriented, indentation-based format optimized for LLM prompts and structured data interchange.

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

  ## Table of Contents

  - [What is TOON?](#what-is-toon)
  - [Installation](#installation)
  - [Operations](#operations)
  - [Configuration Options](#configuration-options)
  - [Usage Examples](#usage-examples)
  - [Use Cases](#use-cases)
  - [Compatibility](#compatibility)
  - [Zero Dependencies](#zero-dependencies)
  - [Resources](#resources)

  ## What is TOON?

  **TOON (Token-Oriented Object Notation)** is a compact text format that encodes the JSON data model with explicit structure and minimal quoting. It's particularly efficient for arrays of uniform objects — common in data exports, API responses, and LLM prompts.

  ### Key Features

  - **Line-oriented and indentation-based** — similar to YAML but more deterministic
  - **Minimal quoting** — strings are quoted only when necessary
  - **Explicit array lengths** — detect truncation and malformed data
  - **Tabular arrays** — declare field lists once, then list values row by row
  - **Multiple delimiters** — comma, tab, or pipe for different use cases
  - **Zero external dependencies** — pure Node.js implementation

  ### Quick Example

  **JSON:**
  ```json
  {
    "users": [
      {"id": 1, "name": "Alice", "role": "admin"},
      {"id": 2, "name": "Bob", "role": "user"}
    ]
  }
  ```

  **TOON:**
  ```
  users[2]{id,name,role}:
    1,Alice,admin
    2,Bob,user
  ```

  The TOON format is **50% more compact** than JSON for tabular data, making it ideal for:
  - **LLM prompts** — fit more context in token limits
  - **Data serialization** — compact representation of structured data
  - **API responses** — human-readable but machine-parseable
  - **Configuration files** — cleaner syntax than JSON

  ## Installation

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

  ### npm

  ```bash
  npm install @tehw0lf/n8n-nodes-toon
  ```

  ### n8n Cloud

  In n8n Cloud or self-hosted n8n (v0.200+):

  1. Go to **Settings** → **Community Nodes**
  2. Select **Install**
  3. Enter `@tehw0lf/n8n-nodes-toon` and agree to the risks
  4. Click **Install**

  The TOON node will appear in your node palette under the **Transform** category.

  ## Operations

  The TOON node supports two operations:

  ### 1. JSON to TOON

  Convert JSON data to TOON format.

  **Input:** JSON object or array
  **Output:** TOON formatted text

  **Use case:** Prepare data for LLM prompts, compact serialization

  ### 2. TOON to JSON

  Parse TOON formatted text back to JSON.

  **Input:** TOON formatted text
  **Output:** JSON object or array

  **Use case:** Parse LLM responses, deserialize TOON data

  ## Configuration Options

  ### Encoding Options (JSON→TOON)

  | Option | Type | Default | Description |
  |--------|------|---------|-------------|
  | **Indent Size** | Number | `2` | Spaces per indentation level |
  | **Delimiter** | Choice | `comma` | Delimiter for array values (`comma`, `tab`, `pipe`) |
  | **Key Folding** | Choice | `off` | Collapse single-key chains (`off`, `safe`) |
  | **Flatten Depth** | Number | `999` | Maximum segments to fold (999 = unlimited) |
  | **Include Token Metrics** | Boolean | `false` | Add token count comparison to output |

  ### Decoding Options (TOON→JSON)

  | Option | Type | Default | Description |
  |--------|------|---------|-------------|
  | **Expected Indent Size** | Number | `2` | Expected indentation for validation |
  | **Strict Mode** | Boolean | `true` | Enforce array counts and indentation |
  | **Expand Paths** | Choice | `off` | Split dotted keys (`off`, `safe`) |

  ### Input/Output Configuration

  | Option | Type | Default | Description |
  |--------|------|---------|-------------|
  | **Input Data** | String | `={{ $json }}` | Data to convert. Supports drag-and-drop, field names, dot notation, and expressions. Auto-detects input type. |
  | **Output Field** | String | `data` | Field name for output |

  #### Input Data Details

  The **Input Data** field auto-detects the input type:
  - **Drag-and-drop**: Drag fields from the left panel - automatically evaluated by n8n
  - **Field names**: Simple field access (e.g., `data`)
  - **Dot notation**: Nested access (e.g., `users[0].name`)
  - **Expressions**: Full n8n expressions (e.g., `={{ $json.users.filter(u => u.active) }}`)
  - **Literal TOON** (for decoding): If a string doesn't match a field path, treated as TOON data

  ### Token Metrics Output

  When **Include Token Metrics** is enabled for JSON→TOON conversion, the output includes a `tokenMetrics` object:

  ```json
  {
    "data": "users[2]{id,name}:\n  1,Alice\n  2,Bob",
    "tokenMetrics": {
      "json": 123,
      "toon": 58,
      "saved": 65,
      "reduction": 0.5285
    }
  }
  ```

  - **json**: Estimated token count for JSON input
  - **toon**: Estimated token count for TOON output
  - **saved**: Number of tokens saved
  - **reduction**: Reduction ratio (0.5285 = 52.85% reduction)

  ## Usage Examples

  ### Example 1: LLM Context Preparation

  **Workflow:** Fetch Users → JSON to TOON → Send to LLM

  Use TOON to fit more context into LLM token limits while maintaining readability.

  **Input (JSON):**
  ```json
  {
    "users": [
      {"id": 1, "name": "Alice", "role": "admin", "active": true},
      {"id": 2, "name": "Bob", "role": "user", "active": true},
      {"id": 3, "name": "Charlie", "role": "user", "active": false}
    ]
  }
  ```

  **Output (TOON - comma delimiter):**
  ```
  users[3]{id,name,role,active}:
    1,Alice,admin,true
    2,Bob,user,true
    3,Charlie,user,false
  ```

  **Token Savings:** ~40-50% fewer tokens than equivalent JSON for structured data.

  ### Example 2: Parse LLM Structured Output

  **Workflow:** Send Prompt to LLM → TOON to JSON → Process Data

  LLMs can generate TOON format more reliably than JSON due to simpler syntax.

  **LLM Output (TOON):**
  ```
  result:
    tasks[3]{name,priority,status}:
      "Update docs",high,pending
      "Fix bug #123",high,done
      "Refactor code",low,pending
    summary: "3 tasks identified"
  ```

  **Parsed JSON:**
  ```json
  {
    "result": {
      "tasks": [
        {"name": "Update docs", "priority": "high", "status": "pending"},
        {"name": "Fix bug #123", "priority": "high", "status": "done"},
        {"name": "Refactor code", "priority": "low", "status": "pending"}
      ],
      "summary": "3 tasks identified"
    }
  }
  ```

  ### Example 3: Working with CSV Data

  n8n has excellent built-in CSV support via the "Extract from File" node. Use TOON for transformations:

  **Workflow:** Read File → Extract from CSV → JSON to TOON → Transform → TOON to JSON → Use Data

  1. Use n8n's "Extract from File" (CSV) node to parse CSV files
  2. The extracted data is already JSON (one item per row)
  3. Use "JSON to TOON" to convert to TOON format for LLM processing
  4. Use "TOON to JSON" to convert back to JSON for further processing

  ### Example 4: Key Folding for Nested Data

  **Workflow:** API Request → JSON to TOON (Key Folding: Safe) → Transform

  Simplify deeply nested JSON structures.

  **Input:**
  ```json
  {
    "user": {
      "profile": {
        "name": "Alice",
        "email": "alice@example.com"
      }
    }
  }
  ```

  **Output (with Key Folding):**
  ```
  user.profile.name: Alice
  user.profile.email: alice@example.com
  ```

  ### Example 5: Different Delimiters

  Use tab delimiters for data with commas in values.

  **TOON (tab delimiter):**
  ```
  products[2]{id	name	price}:
    1	"Widget, Small"	9.99
    2	"Gadget, Large"	19.99
  ```

  ## Use Cases

  ### 1. LLM Integration

  **Problem:** JSON wastes tokens on quotes, brackets, and redundant keys.

  **Solution:** TOON reduces token usage by 40-50% for structured data.

  ```
  Workflow: Data Source → JSON to TOON → LLM → TOON to JSON → Process
  ```

  ### 2. API Response Transformation

  **Problem:** API responses are verbose JSON that's hard to read in logs.

  **Solution:** Convert to TOON for compact, human-readable logging.

  ```
  Workflow: API Request → JSON to TOON → Log/Store → TOON to JSON → Use
  ```

  ### 3. Data Format Conversion

  **Problem:** Need to transform data between different formats for different systems.

  **Solution:** Use TOON as an intermediate format for transformations.

  ```
  Workflow: Extract from CSV → JSON to TOON → Transform → TOON to JSON → Send to API
  ```

  ### 4. Configuration Management

  **Problem:** JSON config files are verbose and don't support comments well.

  **Solution:** Store configs in TOON format for better readability.

  ```
  Workflow: Read TOON Config → TOON to JSON → Apply Settings
  ```

  ### 5. Report Generation

  **Problem:** Need to generate readable reports from structured data.

  **Solution:** Convert to TOON for human-friendly text representation.

  ```
  Workflow: Fetch Data → JSON to TOON → Format Report → Send Email
  ```

  ## Compatibility

  - **n8n version:** 0.200.0 or later
  - **Node.js:** 18.x or later
  - **TOON Specification:** v3.0

  ## Specification Compliance

  This node implements **TOON Specification v3.0** with comprehensive coverage of all core features and major optional features.

  ### Implemented Features

  ✅ **Core Features (100%)**
  - All JSON data types (objects, arrays, primitives)
  - Indentation-based structure with configurable spacing
  - Array length declarations `[N]`
  - Tabular arrays for uniform objects `[N]{field1,field2}:`
  - All three delimiters: comma (default), tab, pipe
  - Deterministic string quoting and escaping
  - Strict mode validation with array count and width checking

  ✅ **Optional Features**
  - **Key Folding** (`keyFolding: "safe"`) - Collapse nested single-key objects into dotted paths (e.g., `{a: {b: {c: 1}}}` → `a.b.c: 1`)
  - **Path Expansion** (`expandPaths: "safe"`) - Expand dotted keys back into nested objects during decoding

  ### Not Implemented

  ❌ **Hyphen Syntax for List-Item Objects (§10)** - Optional YAML-style compact notation for objects in arrays. This is a purely cosmetic encoding optimization that doesn't affect functionality or data compatibility. Our implementation uses standard object indentation instead, which is equally spec-compliant and easier to maintain.

  ### Round-Trip Guarantee

  All JSON data can be encoded to TOON and decoded back to JSON with full fidelity. The implementation passes all conformance requirements for encoders and decoders per the specification.

  ## Advanced Features

  ### Strict Mode

  When enabled (default), the decoder validates:
  - Array element counts match declared length
  - Indentation multiples match expected indent size
  - Proper structure and syntax

  Disable for lenient parsing of hand-written TOON.

  ### Path Expansion

  Convert dotted keys into nested objects:

  **TOON:**
  ```
  user.name: Alice
  user.email: alice@example.com
  ```

  **JSON (with expandPaths: safe):**
  ```json
  {
    "user": {
      "name": "Alice",
      "email": "alice@example.com"
    }
  }
  ```

  ### Round-Trip Guarantees

  TOON guarantees lossless round-trip conversion:

  - **JSON → TOON → JSON** preserves all data and structure
  - Works with any valid JSON input
  - Maintains data types (strings, numbers, booleans, null)

  ## Zero Dependencies

  This node has **zero production dependencies**:
  - Pure Node.js implementation
  - No external libraries required
  - Minimal package size
  - No security vulnerabilities from dependencies

  **Note:** There is another package called `n8n-nodes-toon` (non-scoped) that wraps the official `@toon-format/toon` library. This package (`@tehw0lf/n8n-nodes-toon`) implements the TOON specification directly, resulting in zero production dependencies and full control over the implementation.

  ## Troubleshooting

  ### Issue: "Input must be a string" error

  **Cause:** TOON to JSON operation expects string input.

  **Solution:** Ensure input field contains TOON text, not a JSON object.

  ### Issue: Strict mode validation errors

  **Cause:** TOON data doesn't match expected structure.

  **Solution:** Disable strict mode or fix indentation/counts in TOON data.

  ### Issue: Key folding conflicts

  **Cause:** Both `user.name` and `user` keys exist in same object.

  **Solution:** Use `keyFolding: "safe"` which only folds when safe, or disable key folding.

  ### Issue: Round-trip doesn't match exactly

  **Cause:** TOON normalizes data (e.g., -0 → 0, sorts object keys).

  **Solution:** This is expected — TOON preserves semantic meaning, not exact formatting.

  ## Automated Monitoring

  This repository includes automated workflows for continuous monitoring:

  ### Specification Monitoring

  Monitors the official TOON specification for updates:

  - **Frequency:** Checks run every Monday at 9:00 AM UTC
  - **Automatic Detection:** Compares `toonSpecVersion` in `package.json` against the upstream GitHub Releases API
  - **Issue Creation:** Automatically opens a GitHub issue when updates are detected
  - **Manual Trigger:** Can be triggered manually via GitHub Actions

  When a specification update is detected, the workflow:
  1. Creates a labeled issue (`spec-update`, `enhancement`) with version details
  2. Includes a diff summary showing the changes
  3. Provides links to the official specification
  4. Avoids duplicate issues for the same version

  See [`.github/workflows/monitor-spec.yml`](.github/workflows/monitor-spec.yml) for implementation details.

  ### Security Monitoring

  Performs comprehensive security scanning to detect vulnerabilities:

  - **Frequency:** Runs daily at 2:00 AM UTC
  - **Source Code Scanning:** Semgrep analysis for security issues (OWASP Top 10, etc.)
  - **Dependency Scanning:** npm audit on dependencies
  - **Published Package Scanning:** Checks the live npm package for newly disclosed vulnerabilities
  - **Automatic Trigger:** Also runs on changes to `package.json` or `package-lock.json`

  When vulnerabilities are detected, the workflow:
  1. Creates a labeled issue (`security`, `vulnerability`, `dependencies`)
  2. Includes severity levels and full audit report
  3. Provides remediation guidance with specific commands
  4. Updates existing issues instead of creating duplicates

  See [`.github/workflows/security-scan.yml`](.github/workflows/security-scan.yml) for implementation details.

  ## Resources

  - **TOON Specification v3.0:** Official spec at [github.com/toon-format/spec](https://github.com/toon-format/spec) or see [SPEC.md](SPEC.md) in this repository
  - **n8n Documentation:** https://docs.n8n.io/
  - **Community Nodes Guide:** https://docs.n8n.io/integrations/community-nodes/
  - **GitHub Repository:** https://github.com/tehw0lf/n8n-nodes-toon
  - **Issues & Support:** https://github.com/tehw0lf/n8n-nodes-toon/issues

  ## License

  MIT © [tehw0lf](https://github.com/tehw0lf)

  ## Author

  **tehw0lf** <tehwolf@protonmail.com>

  ## Contributing

  Contributions are welcome! Please open an issue or pull request on GitHub.

  ---

  **Note:** This node implements the [TOON Specification v3.0](https://github.com/toon-format/spec). See `SPEC.md` for complete format documentation or visit the official spec repository.

ai_documentation_summary:
  {"purpose":"Converts data between TOON (Token-Oriented Object Notation) and JSON formats, optimizing for compactness in LLM prompts and structured data interchange.","capabilities":["JSON to TOON conversion","TOON to JSON parsing","Customizable indentation and delimiters","Token count metrics calculation","Key folding for compact output","Strict mode validation for TOON parsing","Support for comma, tab, and pipe delimiters","Support for nested key expansion"],"authentication":"None","commonUseCases":["Reducing token usage in LLM prompts","Compact serialization of tabular data","Parsing structured API responses","Data interchange between systems"],"limitations":["TOON format is optimized for arrays of uniform objects and may not be ideal for deeply nested or highly variable structures","Token metrics are estimated, not actual API token counts","Strict mode may reject valid but non-conforming TOON data"],"relatedNodes":["n8n HTTP Request","n8n Code","n8n Set","n8n Split In Batches"]}


node_type: n8n-nodes-itglue.iTGlue
package_name: n8n-nodes-itglue
display_name: IT Glue
description: Utilize the IT Glue API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: redanthrax
author_github_url: https://github.com/redanthrax/itglue-node.git
npm_package_name: n8n-nodes-itglue
npm_version: 2.1.0
community_fetched_at: 2026-04-16T09:43:35.844Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "organization",
      "options": [
        {
          "name": "Attachment",
          "value": "attachment"
        },
        {
          "name": "Configuration",
          "value": "configuration"
        },
        {
          "name": "Configuration Interface",
          "value": "configurationInterface"
        },
        {
          "name": "Configuration Status",
          "value": "configurationStatus"
        },
        {
          "name": "Configuration Type",
          "value": "configurationType"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Type",
          "value": "contactType"
        },
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Document Image",
          "value": "documentImage"
        },
        {
          "name": "Document Section",
          "value": "documentSection"
        },
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Expiration",
          "value": "expiration"
        },
        {
          "name": "Export",
          "value": "export"
        },
        {
          "name": "Flexible Asset",
          "value": "flexibleAsset"
        },
        {
          "name": "Flexible Asset Field",
          "value": "flexibleAssetField"
        },
        {
          "name": "Flexible Asset Type",
          "value": "flexibleAssetType"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Log",
          "value": "log"
        },
        {
          "name": "Manufacturer",
          "value": "manufacturer"
        },
        {
          "name": "Model",
          "value": "model"
        },
        {
          "name": "Operating System",
          "value": "operatingSystem"
        },
        {
          "name": "Organization",
          "value": "organization"
        },
        {
          "name": "Organization Status",
          "value": "organizationStatus"
        },
        {
          "name": "Organization Type",
          "value": "organizationType"
        },
        {
          "name": "Password",
          "value": "password"
        },
        {
          "name": "Password Category",
          "value": "passwordCategory"
        },
        {
          "name": "Platform",
          "value": "platform"
        },
        {
          "name": "Region",
          "value": "region"
        },
        {
          "name": "Related Item",
          "value": "relatedItem"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "User Metric",
          "value": "userMetric"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete configurations",
          "description": "Delete multiple configurations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update configurations",
          "description": "Update multiple configurations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a configuration",
          "description": "Create a new configuration"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get configurations data",
          "description": "Get data from the Configurations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get configuration by ID",
          "description": "Get a specific configuration by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a configuration",
          "description": "Update an existing configuration"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "configuration"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete contacts",
          "description": "Delete multiple contacts at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update contacts",
          "description": "Update multiple contacts at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a contact",
          "description": "Retrieve a single contact"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many contacts",
          "description": "Retrieve multiple contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update documents",
          "description": "Update multiple documents at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document",
          "description": "Create a new document"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "description": "Delete a document"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get documents",
          "description": "Get all documents"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document by ID",
          "description": "Get a specific document by ID"
        },
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a document",
          "description": "Publish a document"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update an existing document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getById",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document image",
          "description": "Upload a new document image"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document image",
          "description": "Delete a document image"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document image by ID",
          "description": "Get a specific document image by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentImage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document section",
          "description": "Create a new document section"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document section",
          "description": "Delete a document section"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get document sections",
          "description": "Get all document sections for a document"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get document section by ID",
          "description": "Get a specific document section by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document section",
          "description": "Update an existing document section"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentSection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many domains",
          "description": "Get domains"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Destroy",
          "value": "bulkDestroy",
          "action": "Bulk delete flexible assets",
          "description": "Delete multiple flexible assets at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a flexible asset",
          "description": "Create a new flexible asset"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a flexible asset",
          "description": "Delete a flexible asset"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a flexible asset",
          "description": "Retrieve a single flexible asset"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many flexible assets",
          "description": "Retrieve multiple flexible assets"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a flexible asset",
          "description": "Update an existing flexible asset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "flexibleAsset"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete organizations",
          "description": "Delete multiple organizations at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update organizations",
          "description": "Update multiple organizations at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create organizations data",
          "description": "Create an organization using the Organizations endpoint"
        },
        {
          "name": "Delete",
          "value": "deleteOrganization",
          "action": "Delete an organization",
          "description": "Delete an organization"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get organizations data",
          "description": "Get data from the Organizations endpoint"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get organization by ID",
          "description": "Get a specific organization by ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update organizations data",
          "description": "Update an organization using the Organizations endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "organization"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Bulk Delete",
          "value": "bulkDestroy",
          "action": "Bulk delete passwords",
          "description": "Delete multiple passwords at once"
        },
        {
          "name": "Bulk Update",
          "value": "bulkUpdate",
          "action": "Bulk update passwords",
          "description": "Update multiple passwords at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a password",
          "description": "Create a new password"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a password",
          "description": "Delete a password"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get a password",
          "description": "Retrieve a single password"
        },
        {
          "name": "Get Many",
          "value": "get",
          "action": "Get many passwords",
          "description": "Retrieve multiple passwords"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a password",
          "description": "Update an existing password"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "password"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete configurations",
      "description": "Delete multiple configurations at once",
      "resource": "configuration"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update configurations",
      "description": "Update multiple configurations at once",
      "resource": "configuration"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a configuration",
      "description": "Create a new configuration",
      "resource": "configuration"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get configurations data",
      "description": "Get data from the Configurations endpoint",
      "resource": "configuration"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get configuration by ID",
      "description": "Get a specific configuration by ID",
      "resource": "configuration"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a configuration",
      "description": "Update an existing configuration",
      "resource": "configuration"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete contacts",
      "description": "Delete multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update contacts",
      "description": "Update multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a contact",
      "description": "Retrieve a single contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many contacts",
      "description": "Retrieve multiple contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update documents",
      "description": "Update multiple documents at once",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document",
      "description": "Create a new document",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "description": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get documents",
      "description": "Get all documents",
      "resource": "document"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document by ID",
      "description": "Get a specific document by ID",
      "resource": "document"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a document",
      "description": "Publish a document",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update an existing document",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document image",
      "description": "Upload a new document image",
      "resource": "documentImage"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document image",
      "description": "Delete a document image",
      "resource": "documentImage"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document image by ID",
      "description": "Get a specific document image by ID",
      "resource": "documentImage"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document section",
      "description": "Create a new document section",
      "resource": "documentSection"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document section",
      "description": "Delete a document section",
      "resource": "documentSection"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get document sections",
      "description": "Get all document sections for a document",
      "resource": "documentSection"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get document section by ID",
      "description": "Get a specific document section by ID",
      "resource": "documentSection"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document section",
      "description": "Update an existing document section",
      "resource": "documentSection"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many domains",
      "description": "Get domains",
      "resource": "domain"
    },
    {
      "name": "Bulk Destroy",
      "value": "bulkDestroy",
      "action": "Bulk delete flexible assets",
      "description": "Delete multiple flexible assets at once",
      "resource": "flexibleAsset"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a flexible asset",
      "description": "Create a new flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a flexible asset",
      "description": "Delete a flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a flexible asset",
      "description": "Retrieve a single flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many flexible assets",
      "description": "Retrieve multiple flexible assets",
      "resource": "flexibleAsset"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a flexible asset",
      "description": "Update an existing flexible asset",
      "resource": "flexibleAsset"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete organizations",
      "description": "Delete multiple organizations at once",
      "resource": "organization"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update organizations",
      "description": "Update multiple organizations at once",
      "resource": "organization"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create organizations data",
      "description": "Create an organization using the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Delete",
      "value": "deleteOrganization",
      "action": "Delete an organization",
      "description": "Delete an organization",
      "resource": "organization"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get organizations data",
      "description": "Get data from the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get organization by ID",
      "description": "Get a specific organization by ID",
      "resource": "organization"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update organizations data",
      "description": "Update an organization using the Organizations endpoint",
      "resource": "organization"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDestroy",
      "action": "Bulk delete passwords",
      "description": "Delete multiple passwords at once",
      "resource": "password"
    },
    {
      "name": "Bulk Update",
      "value": "bulkUpdate",
      "action": "Bulk update passwords",
      "description": "Update multiple passwords at once",
      "resource": "password"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a password",
      "description": "Create a new password",
      "resource": "password"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a password",
      "description": "Delete a password",
      "resource": "password"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get a password",
      "description": "Retrieve a single password",
      "resource": "password"
    },
    {
      "name": "Get Many",
      "value": "get",
      "action": "Get many passwords",
      "description": "Retrieve multiple passwords",
      "resource": "password"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a password",
      "description": "Update an existing password",
      "resource": "password"
    }
  ]

npm_readme:
  # n8n-nodes-itglue

  An n8n community node for integrating with IT Glue API.

  ## Installation

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

  ```bash
  npm install n8n-nodes-itglue
  ```

  ## Prerequisites

  - IT Glue account with API access
  - API Key from IT Glue
  - Your IT Glue region (US, Europe, or Australia)

  ## Setup

  ### Setting up API Key in IT Glue

  1. Log into your IT Glue instance
  2. Navigate to Account > Settings > API Keys
  3. Create a new API key
  4. Note down the API Key for use in n8n

  ### Configuring Credentials in n8n

  1. **Region**: Select your IT Glue region (api, api.eu, or api.au)
  2. **API Key**: The API key from IT Glue

  ## Supported Operations

  ### [Attachments](./docs/attachments.md)
  Manage file attachments with create, update, and bulk destroy operations for document management.

  ### [Configurations](./docs/configurations.md)
  Complete configuration item management with CRUD operations, bulk updates, and comprehensive filtering for IT asset management.

  ### [Configuration Interfaces](./docs/configuration-interfaces.md)
  Manage network interfaces and connections with full CRUD operations and bulk update capabilities.

  ### [Configuration Statuses](./docs/configuration-statuses.md)
  Manage configuration status definitions with complete CRUD operations for asset lifecycle tracking.

  ### [Configuration Types](./docs/configuration-types.md)
  Manage configuration type definitions with CRUD operations for asset categorization.

  ### [Contacts](./docs/contacts.md)
  Manage contact records with full CRUD operations, bulk updates, and comprehensive contact information management.

  ### [Contact Types](./docs/contact-types.md)
  Manage contact type definitions with CRUD operations for contact categorization.

  ### [Countries](./docs/countries.md)
  Retrieve country information and geographical data with filtering capabilities.

  ### [Documents](./docs/documents.md)
  Complete document management with CRUD operations, bulk updates, and comprehensive document handling.

  ### [Domains](./docs/domains.md)
  Retrieve domain records and DNS-related information with filtering options.

  ### [Expirations](./docs/expirations.md)
  Track asset and license expirations with retrieval and filtering capabilities.

  ### [Flexible Assets](./docs/flexible-assets.md)
  Manage custom flexible asset types with dynamic field structures, supporting full CRUD operations and bulk destroy.

  ### [Flexible Asset Fields](./docs/flexible-asset-fields.md)
  Manage flexible asset field definitions with complete CRUD operations and bulk update capabilities.

  ### [Flexible Asset Types](./docs/flexible-asset-types.md)
  Manage flexible asset type definitions with full CRUD operations for custom asset management.

  ### [Logs](./docs/logs.md)
  Retrieve system logs and audit trail information for monitoring and compliance.

  ### [Operating Systems](./docs/operating-systems.md)
  Retrieve operating system information and specifications with filtering capabilities.

  ### [Organizations](./docs/organizations.md)
  Manage organization records with comprehensive CRUD operations including creation, updates, bulk operations, and deletion with filtering capabilities.

  ### [Organization Statuses](./docs/organization-statuses.md)
  Manage organization status definitions with CRUD operations for organizational lifecycle tracking.

  ### [Organization Types](./docs/organization-types.md)
  Manage organization type definitions with CRUD operations for organizational categorization.

  ### [Passwords](./docs/passwords.md)
  Securely manage password entries with full CRUD operations including creation, updates, retrieval, deletion, and bulk operations with advanced filtering.

  ### [Password Categories](./docs/password-categories.md)
  Manage password category definitions with CRUD operations for password organization.

  ### [Platforms](./docs/platforms.md)
  Retrieve platform and technology information with filtering capabilities.

  ### [Regions](./docs/regions.md)
  Retrieve regional information and geographical data with filtering options.

  ### [Related Items](./docs/related-items.md)
  Manage relationships between different IT Glue resources with CRUD operations and bulk destroy capabilities.

  ### [Users](./docs/users.md)
  Manage user accounts with CRUD operations for user administration.

  ### [User Metrics](./docs/user-metrics.md)
  Retrieve user activity metrics and analytics for monitoring user engagement.

  ## Resources

  - [IT Glue API Documentation](https://api.itglue.com/developer/)
  - [n8n Documentation](https://docs.n8n.io)
  - [Repository](https://github.com/redanthrax/itglue-node)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the IT Glue API to manage IT asset management, configuration, and organizational data.","capabilities":["Create, read, update, and delete IT assets and configurations","Manage flexible asset types with dynamic field structures","Handle file attachments and documents","Track password categories and secure password entries","Monitor user metrics and system logs","Manage organizational and contact records","Filter and retrieve data based on region and resource type"],"authentication":"API Key required","commonUseCases":["IT asset management and lifecycle tracking","Configuration management for IT infrastructure","User and organization administration","Password and credential management","Compliance and audit trail monitoring"],"limitations":["Community node (not official n8n node)","Requires separate IT Glue account with API access","Supports only specific IT Glue regions (US, Europe, Australia)"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-base.set"]}


node_type: n8n-nodes-apex.apex
package_name: n8n-nodes-apex
display_name: Apex
description: Manage your social media via Apex.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: xonack
author_github_url: https://github.com/xonack/
npm_package_name: n8n-nodes-apex
npm_version: 0.1.6
community_fetched_at: 2026-04-16T09:43:35.846Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "getTweet",
      "options": [
        {
          "name": "Generate Reply",
          "value": "generateReply"
        },
        {
          "name": "Get Tweet",
          "value": "getTweet"
        },
        {
          "name": "Post Reply",
          "value": "postReply"
        },
        {
          "name": "Post Tweet",
          "value": "postTweet"
        },
        {
          "name": "Search Tweet",
          "value": "searchTweets"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTweetById",
      "options": [
        {
          "name": "Get Tweet by ID",
          "value": "getTweetById",
          "action": "Get tweet by id",
          "routing": {
            "request": {
              "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/details",
              "method": "GET"
            }
          },
          "description": "Get tweet by ID (found in the URL)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "getTweet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postTweet",
      "options": [
        {
          "name": "Tweet",
          "value": "postTweet",
          "action": "Post tweet",
          "routing": {
            "request": {
              "url": "=/apex/tweet",
              "method": "POST"
            }
          },
          "description": "Post tweet to your profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "postTweet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "postReply",
      "options": [
        {
          "name": "Post Reply",
          "value": "postReply",
          "action": "Post reply to tweet",
          "routing": {
            "request": {
              "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/reply",
              "method": "POST"
            }
          },
          "description": "Post reply to tweet (by ID)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "postReply"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generateReplyToTweetId",
      "options": [
        {
          "name": "Generate Reply to Tweet",
          "value": "generateReplyToTweetId",
          "action": "Generate reply to tweet id",
          "routing": {
            "request": {
              "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/reply",
              "method": "GET"
            }
          },
          "description": "Generate reply to tweet ID"
        },
        {
          "name": "Generate Reply to Text",
          "value": "generateReplyToText",
          "action": "Generate reply to text string",
          "routing": {
            "request": {
              "url": "=/apex/reply",
              "method": "GET"
            }
          },
          "description": "Generate reply to text string"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "generateReply"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchTweets",
      "options": [
        {
          "name": "Search Tweets",
          "value": "searchTweets",
          "action": "Search tweets",
          "routing": {
            "request": {
              "url": "=/apex/tweet/search",
              "method": "GET"
            }
          },
          "description": "Search tweet based keywords (& filters)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "searchTweets"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Tweet by ID",
      "value": "getTweetById",
      "action": "Get tweet by id",
      "routing": {
        "request": {
          "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/details",
          "method": "GET"
        }
      },
      "description": "Get tweet by ID (found in the URL)",
      "resource": "getTweet"
    },
    {
      "name": "Tweet",
      "value": "postTweet",
      "action": "Post tweet",
      "routing": {
        "request": {
          "url": "=/apex/tweet",
          "method": "POST"
        }
      },
      "description": "Post tweet to your profile",
      "resource": "postTweet"
    },
    {
      "name": "Post Reply",
      "value": "postReply",
      "action": "Post reply to tweet",
      "routing": {
        "request": {
          "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/reply",
          "method": "POST"
        }
      },
      "description": "Post reply to tweet (by ID)",
      "resource": "postReply"
    },
    {
      "name": "Generate Reply to Tweet",
      "value": "generateReplyToTweetId",
      "action": "Generate reply to tweet id",
      "routing": {
        "request": {
          "url": "=/apex/tweet/{{$parameter[\"tweetId\"]}}/reply",
          "method": "GET"
        }
      },
      "description": "Generate reply to tweet ID",
      "resource": "generateReply"
    },
    {
      "name": "Generate Reply to Text",
      "value": "generateReplyToText",
      "action": "Generate reply to text string",
      "routing": {
        "request": {
          "url": "=/apex/reply",
          "method": "GET"
        }
      },
      "description": "Generate reply to text string",
      "resource": "generateReply"
    },
    {
      "name": "Search Tweets",
      "value": "searchTweets",
      "action": "Search tweets",
      "routing": {
        "request": {
          "url": "=/apex/tweet/search",
          "method": "GET"
        }
      },
      "description": "Search tweet based keywords (& filters)",
      "resource": "searchTweets"
    }
  ]

npm_readme:
  # n8n-nodes-apex

  Apex provides social media infrastructure that lets you manage your X (Twitter) account fully with a single API Key.

  * Get unlimited data
  * Generate quality content
  * Post bangers

  This is an n8n community node for Apex, allowing you to manage X (Twitter) in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  This node supports the following operations for X (Twitter):
  *   Get Tweet
  *   Search Tweets
  *   Generate Reply
  *   Post Tweet
  *   Post Reply

  ## Credentials

  To use this node, you need to authenticate with Apex.
  1.  Create an account at [Apex](https://apexagents.ai/).
  2.  Request an API Key from within your Apex account (support chat on bottom right).
  3.  Use this API Key in the Apex credentials configuration in n8n.

  ## Compatibility

  This node was built against n8n version `1.82.0` and should be compatible with n8n running Node.js version 20 or higher.

  ## Resources

  * [Apex API](https://apex-backend-435707161213.us-west1.run.app/)
  * [Apex Homepage](https://apexagents.ai/)
  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables full management of X (Twitter) accounts by integrating with the Apex API for content generation, posting, and data retrieval.","capabilities":["Get Tweet","Search Tweets","Generate Reply","Post Tweet","Post Reply"],"authentication":"API Key required","commonUseCases":["Automated social media posting","Generating Twitter replies","Monitoring and retrieving tweet data","Content generation for X (Twitter)"],"limitations":["Requires external API key from Apex service","Requires n8n version 1.82.0 or higher","Requires Node.js version 20 or higher"],"relatedNodes":["n8n-nodes-twitter","n8n-nodes-http-request"]}


node_type: @cloudconvert/n8n-nodes-cloudconvert.cloudConvert
package_name: @cloudconvert/n8n-nodes-cloudconvert
display_name: CloudConvert
description: Use CloudConvert to convert files, create thumbnails, merge files, add watermarks and more!
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: josiasmontag
author_github_url: https://github.com/cloudconvert/n8n-nodes-cloudconvert.git
npm_package_name: @cloudconvert/n8n-nodes-cloudconvert
npm_version: 1.1.1
community_fetched_at: 2026-04-16T09:43:35.847Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "file",
      "options": [
        {
          "name": "Command",
          "value": "command"
        },
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Metadata",
          "value": "metadata"
        },
        {
          "name": "PDF",
          "value": "pdf"
        },
        {
          "name": "Website",
          "value": "website"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Add Watermark",
          "value": "watermark",
          "action": "Add watermark to a file",
          "description": "Add a watermark to a PDF file, to an image or to a video"
        },
        {
          "name": "Convert File",
          "value": "convert",
          "action": "Convert a file",
          "description": "Convert a file to a different format"
        },
        {
          "name": "Create Archive",
          "value": "archive",
          "action": "Create archive",
          "description": "Create an archive (ZIP, RAR...) for multiple files"
        },
        {
          "name": "Create Thumbnail",
          "value": "thumbnail",
          "action": "Create a thumbnail",
          "description": "Create a thumbnail of a file"
        },
        {
          "name": "Optimize File",
          "value": "optimize",
          "action": "Optimize a file",
          "description": "Optimize / compress a file to reduce its size"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "metadata",
      "options": [
        {
          "name": "Get Metadata",
          "value": "metadata",
          "action": "Get metadata from a file",
          "description": "Extract metadata from files"
        },
        {
          "name": "Write Metadata",
          "value": "metadata/write",
          "action": "Write metadata to a file",
          "description": "Write metadata to files"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "metadata"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "pdf/a",
      "options": [
        {
          "name": "Add PDF OCR Layer",
          "value": "pdf/ocr",
          "action": "Add OCR layer to PDF",
          "description": "Add an OCR text layer to scanned PDF files"
        },
        {
          "name": "Convert PDF to PDF/A",
          "value": "pdf/a",
          "action": "Convert PDF to PDF/A",
          "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B"
        },
        {
          "name": "Decrypt PDF",
          "value": "pdf/decrypt",
          "action": "Decrypt PDF",
          "description": "Decrypt a password-protected PDF file"
        },
        {
          "name": "Encrypt PDF",
          "value": "pdf/encrypt",
          "action": "Encrypt PDF",
          "description": "Encrypt a PDF file and optionally set a password and restrictions"
        },
        {
          "name": "Extract Pages From PDF",
          "value": "pdf/extract-pages",
          "action": "Extract pages from PDF",
          "description": "Extract specific pages or page ranges from a PDF file"
        },
        {
          "name": "Merge Files",
          "value": "pdf/merge",
          "action": "Merge files to PDF",
          "description": "Merge multiple files into a single PDF"
        },
        {
          "name": "Rotate PDF Pages",
          "value": "pdf/rotate-pages",
          "action": "Rotate PDF pages",
          "description": "Rotate single pages or all pages of a PDF file"
        },
        {
          "name": "Split PDF Into Pages",
          "value": "pdf/split-pages",
          "action": "Split PDF into pages",
          "description": "Split a PDF into one PDF file per page"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pdf"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "command",
      "options": [
        {
          "name": "Execute Command",
          "value": "command",
          "action": "Execute command",
          "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "command"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "capture-website",
      "options": [
        {
          "name": "Capture Website",
          "value": "capture-website",
          "action": "Capture website",
          "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "website"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Watermark",
      "value": "watermark",
      "action": "Add watermark to a file",
      "description": "Add a watermark to a PDF file, to an image or to a video",
      "resource": "file"
    },
    {
      "name": "Convert File",
      "value": "convert",
      "action": "Convert a file",
      "description": "Convert a file to a different format",
      "resource": "file"
    },
    {
      "name": "Create Archive",
      "value": "archive",
      "action": "Create archive",
      "description": "Create an archive (ZIP, RAR...) for multiple files",
      "resource": "file"
    },
    {
      "name": "Create Thumbnail",
      "value": "thumbnail",
      "action": "Create a thumbnail",
      "description": "Create a thumbnail of a file",
      "resource": "file"
    },
    {
      "name": "Optimize File",
      "value": "optimize",
      "action": "Optimize a file",
      "description": "Optimize / compress a file to reduce its size",
      "resource": "file"
    },
    {
      "name": "Get Metadata",
      "value": "metadata",
      "action": "Get metadata from a file",
      "description": "Extract metadata from files",
      "resource": "metadata"
    },
    {
      "name": "Write Metadata",
      "value": "metadata/write",
      "action": "Write metadata to a file",
      "description": "Write metadata to files",
      "resource": "metadata"
    },
    {
      "name": "Add PDF OCR Layer",
      "value": "pdf/ocr",
      "action": "Add OCR layer to PDF",
      "description": "Add an OCR text layer to scanned PDF files",
      "resource": "pdf"
    },
    {
      "name": "Convert PDF to PDF/A",
      "value": "pdf/a",
      "action": "Convert PDF to PDF/A",
      "description": "Convert a PDF file to PDF/A-1B, PDF/A-2B or PDF/A-3B",
      "resource": "pdf"
    },
    {
      "name": "Decrypt PDF",
      "value": "pdf/decrypt",
      "action": "Decrypt PDF",
      "description": "Decrypt a password-protected PDF file",
      "resource": "pdf"
    },
    {
      "name": "Encrypt PDF",
      "value": "pdf/encrypt",
      "action": "Encrypt PDF",
      "description": "Encrypt a PDF file and optionally set a password and restrictions",
      "resource": "pdf"
    },
    {
      "name": "Extract Pages From PDF",
      "value": "pdf/extract-pages",
      "action": "Extract pages from PDF",
      "description": "Extract specific pages or page ranges from a PDF file",
      "resource": "pdf"
    },
    {
      "name": "Merge Files",
      "value": "pdf/merge",
      "action": "Merge files to PDF",
      "description": "Merge multiple files into a single PDF",
      "resource": "pdf"
    },
    {
      "name": "Rotate PDF Pages",
      "value": "pdf/rotate-pages",
      "action": "Rotate PDF pages",
      "description": "Rotate single pages or all pages of a PDF file",
      "resource": "pdf"
    },
    {
      "name": "Split PDF Into Pages",
      "value": "pdf/split-pages",
      "action": "Split PDF into pages",
      "description": "Split a PDF into one PDF file per page",
      "resource": "pdf"
    },
    {
      "name": "Execute Command",
      "value": "command",
      "action": "Execute command",
      "description": "Execute a custom ffmpeg, ImageMagick or GraphicsMagick command on the input file",
      "resource": "command"
    },
    {
      "name": "Capture Website",
      "value": "capture-website",
      "action": "Capture website",
      "description": "Creates job to capture a website as PDF or create a website screenshot as JPG or PNG",
      "resource": "website"
    }
  ]

npm_readme:
  # n8n-nodes-cloudconvert

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

  CloudConvert is an online file conversion and processing API which allows to convert files, create thumbnails, merge files, add watermarks 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)  <!-- delete if no auth needed -->  
  [Compatibility](#compatibility)  
  [Usage](#usage)  <!-- delete if not using this section -->  
  [Resources](#resources)  
  [Version history](#version-history)  <!-- delete if not using this section -->  

  ## Installation

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

  1. Go to **Settings > Community Nodes**.
  2. Select **Install**.
  3. Enter `@cloudconvert/n8n-nodes-cloudconvert` in **Enter npm package name**.
  4. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes: select **I understand the risks of installing unverified code from a public source**.
  5. Select **Install**.

  After installing the node, you can use it like any other node. n8n displays the node in search results in the **Nodes** panel.

  ## Operations

  It supports these operations:

  - Convert files from one format to another
  - Create thumbnails of files
  - Add watermarks to images, PDFs and videos
  - Capture website screenshots and save websites as PDF
  - Merge multiple input files in one single PDF
  - Create archives (ZIP, RAR...) for multiple input files
  - Get file metadata (EXIF etc)

  ## Credentials

  Create a free CloudConvert account [here](https://cloudconvert.com/register) which allows 25 free credits per day.

  - Generate OAuth 2 credentials (default auth method) here: https://cloudconvert.com/dashboard/api/v2/clients
  - Generate an API key (alternative auth method) here: https://cloudconvert.com/dashboard/api/v2/keys

  ## Compatibility

  Tested against n8n version 0.225+.

  ## Usage

  A typical workflow using this node would look like this:
  <img width="906" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/3cd6f332-74ee-4997-8e67-7d873a124592">

  This is a workflow merging multiple input files in a single PDF:
  <img width="1276" alt="image" src="https://github.com/n8n-io/n8n/assets/1945577/9324c941-eb86-48ac-8d83-aaeecf16fd09">



  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [CloudConvert API v2 Documentation](https://cloudconvert.com/api/v2)

ai_documentation_summary:
  {"purpose":"A community node that enables file conversion, thumbnail creation, watermarking, merging, and other processing tasks using the CloudConvert API within n8n workflows.","capabilities":["Convert files between different formats","Create thumbnails for images, PDFs, and videos","Add watermarks to images, PDFs, and videos","Capture website screenshots","Save websites as PDF","Merge multiple input files into a single PDF","Create archives (ZIP, RAR) from multiple input files","Retrieve file metadata (EXIF, etc.)"],"authentication":"OAuth 2 (default) or API Key","commonUseCases":["Automating document format conversion in business workflows","Generating image thumbnails for media galleries","Creating watermarked promotional materials","Consolidating multiple documents into a single PDF","Archiving multiple files for storage or backup"],"limitations":["Requires a free CloudConvert account for usage (25 free credits per day)","Community node status may require accepting installation risks","Compatible with n8n version 0.225+ only"],"relatedNodes":["n8n Community Nodes","CloudConvert API Integration"]}


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-04-16 09:43:35
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-04-16T09:43:35.848Z
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/)


node_type: n8n-nodes-csvbox.csvboxTrigger
package_name: n8n-nodes-csvbox
display_name: CSVBox Trigger
description: Starts a workflow when a new row is imported to a CSVBox Sheet
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: sumit_yewale
author_github_url: https://github.com/csvbox-io/
npm_package_name: n8n-nodes-csvbox
npm_version: 0.1.7
community_fetched_at: 2026-04-16T09:43:35.849Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  ![CSVBox for n8n](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-csvbox
  ## Overview

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

  CSVBox is a platform for importing CSV data into your applications with ease. This node allows you to trigger n8n workflows when new rows are imported into a CSVBox Importer.

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

  ---

  ## Table of Contents

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

  ---

  ## Installation

  You can install this node as a community package in your n8n instance.

  ### Steps

  1. Go to **Settings → Community Nodes** in your n8n instance.
  2. Click **Install a community node** and enter:
     ```
     n8n-nodes-csvbox
     ```
  3. Check the warning button.
  4. Click on the **Install** and wait for the installation to complete.
  4. Restart n8n if prompted.

  After installation, you’ll find the **CSVBox Trigger** node available in your n8n workflow editor.

  ---

  ## Operations

  This package provides the following node:

  - **CSVBox Trigger**: Starts a workflow when a new row is imported to a CSVBox Sheet.

  ---

  ## Credentials

  Create an API Key and Secret Key from the CSVBox API Key Page, then add them as a credential in n8n using the following fields:

  - **API Key:** Your CSVBox API Key.
  - **API Secret Key:** Your CSVBox Secret Key.

  ---

  ## Compatibility

  - **Minimum n8n version:** 1.x
  - **Node.js version:** >= 20.15
  - Tested on latest n8n and Node.js LTS.

  ---

  ## Usage

  1. In your n8n workflow editor, add the **CSVBox Trigger** node.
  2. Choose your CSVBox credential from the dropdown (set up your API Key and Secret in n8n Credentials first).
  3. Select the Sheet name you want to monitor for new imports.
  4. Click **Fetch and execute** to test the trigger and preview sample data from your sheet.
  5. Once you see the sample data, connect and map it to the next node in your workflow.
  6. Activate your workflow. Now, whenever new rows are imported into your selected CSVBox sheet, your workflow will run automatically.

  ---

  ## Resources

  - [CSVBox Documentation](https://help.csvbox.io/destinations/n8n)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

  ---

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow automatically when a new row is imported into a specific CSVBox sheet.","capabilities":["Monitors a selected CSVBox sheet for new data","Automatically starts workflow execution upon row import","Fetches and previews sample data from the sheet","Connects imported data to subsequent workflow nodes"],"authentication":"API Key and Secret Key","commonUseCases":["Automated data processing from CSV imports","Real-time inventory updates","Order processing from external CSV sources","Data transformation pipelines triggered by file uploads"],"limitations":["Requires separate CSVBox account with API credentials","Minimum n8n version 1.x required","Node.js version >= 20.15 required"],"relatedNodes":["n8n-nodes-csvbox.csvboxTrigger","n8n-nodes-csvbox.csvbox"]}


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-04-16 09:43:35
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-04-16T09:43:35.850Z
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)


node_type: @smartbooks-ai/n8n-nodes-api.smartbooksApi
package_name: @smartbooks-ai/n8n-nodes-api
display_name: Smartbooks API
description: Interact with Smartbooks API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: alexey-at-smartbooks
author_github_url: https://github.com/smartbooks-ai/n8n-nodes-api.git
npm_package_name: @smartbooks-ai/n8n-nodes-api
npm_version: 0.1.5
community_fetched_at: 2026-04-16T09:43:35.851Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Reporting",
      "options": [
        {
          "name": "Input",
          "value": "Input"
        },
        {
          "name": "Module",
          "value": "Modules"
        },
        {
          "name": "Profile",
          "value": "Profile"
        },
        {
          "name": "Reporting",
          "value": "Reporting"
        },
        {
          "name": "Structure",
          "value": "Structure"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Input Post Batch",
      "options": [
        {
          "name": "Batch Input",
          "value": "Input Post Batch",
          "action": "Batch input",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/input/batch",
              "method": "POST"
            }
          },
          "description": "Batch input for a given year and period. Requires scope input:write."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Input"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Modules Get Item Public",
      "options": [
        {
          "name": "Get Module",
          "value": "Modules Get Item Public",
          "action": "Get module",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/modules/{{$parameter[\"moduleCode\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a module by code. Requires scope modeling:read."
        },
        {
          "name": "Add Account",
          "value": "Modules Post Account",
          "action": "Add account",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/modules/{{$parameter[\"moduleCode\"]}}/subaccountstables/{{$parameter[\"subaccountsTableCode\"]}}/accounts",
              "method": "POST"
            }
          },
          "description": "Add an account to a subaccounts table of a module. Requires scope modeling:write."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Modules"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Reporting Yearly Amounts",
      "options": [
        {
          "name": "Get Outstanding Payables",
          "value": "Outstandingpayablesandreceivables Outstanding Payables",
          "action": "Get outstanding payables",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/outstanding/payables",
              "method": "GET"
            }
          },
          "description": "Get outstanding payables. Requires scope reporting:read."
        },
        {
          "name": "Get Outstanding Receivables",
          "value": "Outstandingpayablesandreceivables Outstanding Receivables",
          "action": "Get outstanding receivables",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/outstanding/receivables",
              "method": "GET"
            }
          },
          "description": "Get outstanding receivables. Requires scope reporting:read."
        },
        {
          "name": "Get Yearly Amounts",
          "value": "Reporting Yearly Amounts",
          "action": "Get yearly amounts",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/amounts/yearly/{{$parameter[\"year\"]}}",
              "method": "GET"
            }
          },
          "description": "Get yearly amounts for a given year. Requires scope reporting:read."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Reporting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Structure Balance Sheet",
      "options": [
        {
          "name": "Get Balance Sheet Structure",
          "value": "Structure Balance Sheet",
          "action": "Get balance sheet structure",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/balance-sheet",
              "method": "GET"
            }
          },
          "description": "Get balance sheet structure. Requires scope reporting:read."
        },
        {
          "name": "Get Cash Flow Structure",
          "value": "Structure Cash Flow",
          "action": "Get cash flow structure",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/cash-flow",
              "method": "GET"
            }
          },
          "description": "Get cash flow structure. Requires scope reporting:read."
        },
        {
          "name": "Get Metrics Structure",
          "value": "Structure Metrics",
          "action": "Get metrics structure",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/metrics",
              "method": "GET"
            }
          },
          "description": "Get metrics structure. Requires scope reporting:read."
        },
        {
          "name": "Get Profit And Loss Structure",
          "value": "Structure Profit And Loss",
          "action": "Get profit and loss structure",
          "routing": {
            "request": {
              "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/profit-and-loss",
              "method": "GET"
            }
          },
          "description": "Get profit and loss structure. Requires scope reporting:read."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Structure"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "Profile My",
      "options": [
        {
          "name": "Get Profile",
          "value": "Profile My",
          "action": "Get profile",
          "routing": {
            "request": {
              "url": "=/api/v1/profile/my",
              "method": "GET"
            }
          },
          "description": "Get profile details including allowed tenants and companies. Requires scope profile:read."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Profile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /api/v1/c/{companyCode}/input/batch",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Input"
          ],
          "operation": [
            "Input Post Batch"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/modules/{moduleCode}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Modules"
          ],
          "operation": [
            "Modules Get Item Public"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "POST /api/v1/c/{companyCode}/modules/{moduleCode}/subaccountstables/{subaccountsTableCode}/accounts",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Modules"
          ],
          "operation": [
            "Modules Post Account"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/reporting/amounts/yearly/{year}",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Reporting"
          ],
          "operation": [
            "Reporting Yearly Amounts"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/reporting/outstanding/payables",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Reporting"
          ],
          "operation": [
            "Outstandingpayablesandreceivables Outstanding Payables"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/reporting/outstanding/receivables",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Reporting"
          ],
          "operation": [
            "Outstandingpayablesandreceivables Outstanding Receivables"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/structure/balance-sheet",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Structure"
          ],
          "operation": [
            "Structure Balance Sheet"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/structure/cash-flow",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Structure"
          ],
          "operation": [
            "Structure Cash Flow"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/structure/metrics",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Structure"
          ],
          "operation": [
            "Structure Metrics"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/c/{companyCode}/structure/profit-and-loss",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Structure"
          ],
          "operation": [
            "Structure Profit And Loss"
          ]
        }
      }
    },
    {
      "name": "operation",
      "type": "notice",
      "default": "",
      "displayName": "GET /api/v1/profile/my",
      "typeOptions": {
        "theme": "info"
      },
      "displayOptions": {
        "show": {
          "resource": [
            "Profile"
          ],
          "operation": [
            "Profile My"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Batch Input",
      "value": "Input Post Batch",
      "action": "Batch input",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/input/batch",
          "method": "POST"
        }
      },
      "description": "Batch input for a given year and period. Requires scope input:write.",
      "resource": "Input"
    },
    {
      "name": "Get Module",
      "value": "Modules Get Item Public",
      "action": "Get module",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/modules/{{$parameter[\"moduleCode\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a module by code. Requires scope modeling:read.",
      "resource": "Modules"
    },
    {
      "name": "Add Account",
      "value": "Modules Post Account",
      "action": "Add account",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/modules/{{$parameter[\"moduleCode\"]}}/subaccountstables/{{$parameter[\"subaccountsTableCode\"]}}/accounts",
          "method": "POST"
        }
      },
      "description": "Add an account to a subaccounts table of a module. Requires scope modeling:write.",
      "resource": "Modules"
    },
    {
      "name": "Get Outstanding Payables",
      "value": "Outstandingpayablesandreceivables Outstanding Payables",
      "action": "Get outstanding payables",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/outstanding/payables",
          "method": "GET"
        }
      },
      "description": "Get outstanding payables. Requires scope reporting:read.",
      "resource": "Reporting"
    },
    {
      "name": "Get Outstanding Receivables",
      "value": "Outstandingpayablesandreceivables Outstanding Receivables",
      "action": "Get outstanding receivables",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/outstanding/receivables",
          "method": "GET"
        }
      },
      "description": "Get outstanding receivables. Requires scope reporting:read.",
      "resource": "Reporting"
    },
    {
      "name": "Get Yearly Amounts",
      "value": "Reporting Yearly Amounts",
      "action": "Get yearly amounts",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/reporting/amounts/yearly/{{$parameter[\"year\"]}}",
          "method": "GET"
        }
      },
      "description": "Get yearly amounts for a given year. Requires scope reporting:read.",
      "resource": "Reporting"
    },
    {
      "name": "Get Balance Sheet Structure",
      "value": "Structure Balance Sheet",
      "action": "Get balance sheet structure",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/balance-sheet",
          "method": "GET"
        }
      },
      "description": "Get balance sheet structure. Requires scope reporting:read.",
      "resource": "Structure"
    },
    {
      "name": "Get Cash Flow Structure",
      "value": "Structure Cash Flow",
      "action": "Get cash flow structure",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/cash-flow",
          "method": "GET"
        }
      },
      "description": "Get cash flow structure. Requires scope reporting:read.",
      "resource": "Structure"
    },
    {
      "name": "Get Metrics Structure",
      "value": "Structure Metrics",
      "action": "Get metrics structure",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/metrics",
          "method": "GET"
        }
      },
      "description": "Get metrics structure. Requires scope reporting:read.",
      "resource": "Structure"
    },
    {
      "name": "Get Profit And Loss Structure",
      "value": "Structure Profit And Loss",
      "action": "Get profit and loss structure",
      "routing": {
        "request": {
          "url": "=/api/v1/c/{{$parameter[\"companyCode\"]}}/structure/profit-and-loss",
          "method": "GET"
        }
      },
      "description": "Get profit and loss structure. Requires scope reporting:read.",
      "resource": "Structure"
    },
    {
      "name": "Get Profile",
      "value": "Profile My",
      "action": "Get profile",
      "routing": {
        "request": {
          "url": "=/api/v1/profile/my",
          "method": "GET"
        }
      },
      "description": "Get profile details including allowed tenants and companies. Requires scope profile:read.",
      "resource": "Profile"
    }
  ]

npm_readme:
  # Smartbooks API – n8n Node

  [n8n](https://n8n.io) community node for the [Smartbooks API](https://smartbooks.ai). Use it in n8n workflows to interact with Smartbooks (reporting, input, intercompany matching, modules, and more).

  ## Installation

  In n8n:

  1. Open **Settings** → **Community nodes** → **Install**.
  2. Enter: `@smartbooks-ai/n8n-nodes-api`
  3. Install and restart n8n if prompted.

  Or install via CLI in your n8n project:

  ```bash
  npm install @smartbooks-ai/n8n-nodes-api
  ```

  ## Credentials

  The node uses **Smartbooks OAuth2 API** credentials.

  1. Add a **Smartbooks API** credential in n8n.
  2. Use your Smartbooks OAuth2 client ID and client secret.
  3. Authorize; the node will use this credential for all requests.

  ## Resources & operations

  The node supports these Smartbooks resources and their operations:

  - **Input** – e.g. batch input (by year and period)
  - **Module** – module operations
  - **Profile** – profile operations
  - **Reporting** – reporting operations
  - **Structure** – structure operations

  Choose **Resource** and **Operation** in the node; required parameters (e.g. company code, IDs) will appear as needed.

  ## License

  MIT © [smartbooks](https://smartbooks.ai)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables interaction with the Smartbooks API for accounting operations including reporting, input, intercompany matching, and module management.","capabilities":["Batch input by year and period","Module operations","Profile operations","Reporting operations","Structure operations","Intercompany matching","Company code management","ID-based resource queries"],"authentication":"OAuth2 (Smartbooks OAuth2 API credentials with client ID and client secret)","commonUseCases":["Automated financial reporting generation","Batch data entry for accounting periods","Intercompany transaction matching","Module configuration and updates","Company structure management"],"limitations":["Community node (may lack official support)","Requires prior setup of Smartbooks OAuth2 credentials in n8n","Specific parameters depend on selected resource and operation types"],"relatedNodes":["Smartbooks API Credential","General API nodes","OAuth2 authentication nodes"]}


node_type: n8n-nodes-businessmap.businessmap
package_name: n8n-nodes-businessmap
display_name: Businessmap
description: Read, write, update and delete data from Businessmap
category: Community
development_style: declarative
version: 1.0.5
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: businessmap
author_github_url: https://github.com/kanbanize/
npm_package_name: n8n-nodes-businessmap
npm_version: 1.0.5
community_fetched_at: 2026-04-16T09:43:35.852Z
ai_summary_generated_at: 2026-03-25 22:51:43
npm_readme:
  # n8n-nodes-businessmap

  This is the official n8n community node working with the [Businessmap API](https://demo.businessmap.io/openapi/). 

  **Businessmap** is the most flexible software platform for outcomes-driven enterprise agility. The unmatched functionality consolidates multiple tools into one, enabling affordable deployment at scale, visibility across all projects/portfolios, and alignment on goals, to deliver quality work faster. 


  [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

  ### Supported Triggers
  The **Businessmap n8n community node** supports the following triggers:
  * `All Events`
  * `Card Created`
  * `Card Details Changed`
  * `Card Discarded`
  * `Card Restored`
  * `Card Moved`
  * `Card Archived`
  * `Card Is Unarchived`
  * `Comment Created`
  * `Comment Updated`
  * `Comment Deleted`
  * `Subtask Created`
  * `Subtask Updated`
  * `Subtask Deleted`
  * `Board Renamed`
  * `Board Archived`
  * `Board Unarchived`
  * `Board Deleted`
  * `Board Structure Changed`

  ### Supported Actions
  The **Businessmap n8n community node** supports the following actions:
  * `Create Card`: Create a card in a board of your choice. Set card details including custom fields, stickers and tags.
  * `Update Card`: Update the properties of a card (Title, Description, Priority, Size, Deadline, etc.).
  * `Move Card`: Move a card to a new column, lane or board.
  * `Get Card by ID`: Get the details of a card by its internal ID.
  * `Get Card by Custom Card ID`: Find card by custom card ID. If multiple cards are found, all will be returned. Use "Board" parameter to filter search by boards.
  * `Get All Cards Per Board`: Get all cards from a selected board. The response contains up to 200 cards. To retrieve more than 200 cards, please use pagination.
  * `Link Card`: Link a card to an existing card.
  * `Unlink Card`: Remove a link between two cards.
  * `Set Custom Fields`: Sets values of custom fields.
  * `Block Card`: Block a card.
  * `Unblock Card`: Unblock a card.
  * `Archive Card`: Add card to archive.
  * `Unarchive Card`: Extract card from archive.
  * `Discard Card`: Discard a card.
  * `Restore Card`: Restore a previously discarded card.
  * `Add Comment`: Add a comment to a card.
  * `Create Subtask`: Create a new subtask of a card.
  * `Log Time`: Log time to a card.
  * `Upload Attachment`: Upload an attachment to a card.
  * `Download Attachment`: Download an attachment from a card.
  * `Get Card Attachments`: Get a list with all attachments for a specified card.
  * `Create Workspace`: Create a workspace.
  * `Update Workspace`: Update a workspace.
  * `Get Workspace`: Get a workspace.
  * `Get All Workspaces`: Get a list with all workspaces in the account.
  * `Create Board`: Create a board.
  * `Update Board`: Update a board.
  * `Get Board`: Get a board.
  * `Get All Boards`: Get a list with all boards.
  * `Get Board Structure`: Get board structure which includes all workflows, lanes and columns.
  * `Create Tag`: Create a tag.
  * `Update Tag`: Update a tag.
  * `Delete Tag`: Delete a tag.
  * `Get Tag`: Get a tag.
  * `Get All Tags`: Get a list with all tags.
  * `Assign Tag`: Assign a tag to a board.
  * `Create Sticker`: Create a sticker.
  * `Update Sticker`: Update a sticker.
  * `Delete Sticker`: Delete a sticker.
  * `Get Sticker`: Get a sticker.
  * `Get All Stickers`: Get a list with all stickers.
  * `Assign Sticker`: Assign a sticker to a board.


  ## Credentials

  * To use this **n8n community node**, you'll need a **Businessmap** account and a user with permissions to access the API. If you don’t have an account yet, [sign up here](https://businessmap.io/sign-up) to get started.

  To authenticate with the Businessmap API, you'll need to provide your domain name and API key when setting up your credentials. Follow the instructions provided on the [Businessmap API page](https://businessmap.io/api) to obtain your API key.

  ## Compatibility

  Requires n8n version 1.0.0 or later
  Requires Node.js 20.15.0 or later

  ## Usage

  * Visit our [Knowledge Base](https://knowledgebase.businessmap.io/hc/en-us) to find answers to all your questions regarding Businessmap.
  * Contact our [customer support](https://businessmap.io/customer-support) with any specific request.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/builtin/app-nodes/)
  * [Create Businessmap Account](https://businessmap.io/sign-up)
  * [Knowledge Base](https://knowledgebase.businessmap.io/hc/en-us)
  * [Businessmap API documentation](https://demo.businessmap.io/openapi/#/)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Businessmap API, allowing users to read, write, update, and delete data related to cards, boards, workspaces, tags, stickers, and comments.","capabilities":["Create, update, and delete cards with custom fields, stickers, and tags","Move, archive, discard, restore, and block/unblock cards","Add, update, and delete comments and subtasks","Log time and upload/download attachments to cards","Link and unlink cards","Create, update, and manage workspaces and boards","Manage tags and stickers (create, update, delete, assign)","Get cards by ID, custom ID, or all cards per board (with pagination support)","Retrieve board structures, workflows, lanes, and columns"],"authentication":"API key required (domain name and API key)","commonUseCases":["Automating project management tasks within Businessmap","Syncing card data between Businessmap and other tools","Creating boards and workspaces programmatically","Managing card attachments and comments via automation","Tracking time and linking related tasks"],"limitations":["Requires a Businessmap account with appropriate API permissions","Get All Cards Per Board is limited to 200 cards per request (requires pagination for more)","Requires n8n version 1.0.0 or later","Requires Node.js 20.15.0 or later"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: n8n-nodes-dumplingai.dumplingAi
package_name: n8n-nodes-dumplingai
display_name: Dumpling AI
description: Interact with Dumpling AI APIs (data, web scraping, document conversion, AI, etc.)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: dumplingai
author_github_url: https://github.com/dumplingai/
npm_package_name: n8n-nodes-dumplingai
npm_version: 0.1.1
community_fetched_at: 2026-04-16T09:43:35.853Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "dataApi",
      "options": [
        {
          "name": "Data API",
          "value": "dataApi"
        },
        {
          "name": "Web Scraping",
          "value": "webScraping"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getYouTubeTranscript",
      "options": [
        {
          "name": "Get Google Reviews",
          "value": "getGoogleReviews",
          "action": "Get Google Reviews",
          "routing": {
            "request": {
              "url": "/get-google-reviews",
              "body": {
                "cid": "={{ $parameter.inputType === \"cid\" ? $parameter.cid : undefined }}",
                "sortBy": "={{ $parameter.sortBy }}",
                "keyword": "={{ $parameter.inputType === \"keyword\" ? $parameter.keyword : undefined }}",
                "placeId": "={{ $parameter.inputType === \"placeId\" ? $parameter.placeId : undefined }}",
                "reviews": "={{ $parameter.reviews }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location || undefined }}"
              },
              "method": "POST"
            }
          },
          "description": "Get Google Reviews for a place or business"
        },
        {
          "name": "Get TikTok Transcript",
          "value": "getTikTokTranscript",
          "action": "Get TikTok Transcript",
          "routing": {
            "request": {
              "url": "/get-tiktok-transcript",
              "body": {
                "videoUrl": "={{ $parameter.videoUrl }}",
                "preferredLanguage": "={{ $parameter.preferredLanguage }}"
              },
              "method": "POST"
            }
          },
          "description": "Retrieve the transcript from a TikTok video"
        },
        {
          "name": "Get YouTube Transcript",
          "value": "getYouTubeTranscript",
          "action": "Get YouTube Transcript",
          "routing": {
            "request": {
              "url": "/get-youtube-transcript",
              "body": {
                "videoUrl": "={{ $parameter.videoUrl }}",
                "includeTimestamps": "={{ $parameter.includeTimestamps }}",
                "preferredLanguage": "={{ $parameter.preferredLanguage }}",
                "timestampsToCombine": "={{ $parameter.timestampsToCombine }}"
              },
              "method": "POST"
            }
          },
          "description": "Extract the transcript from a specified YouTube video URL"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search Google",
          "routing": {
            "request": {
              "url": "/search",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}",
                "dateRange": "={{ $parameter.dateRange }}",
                "scrapeOptions": {
                  "format": "={{ $parameter.scrapeFormat }}",
                  "cleaned": "={{ $parameter.scrapeCleaned }}"
                },
                "scrapeResults": "={{ $parameter.scrapeResults }}",
                "numResultsToScrape": "={{ $parameter.numResultsToScrape }}"
              },
              "method": "POST"
            }
          },
          "description": "Perform a Google web search with optional content scraping"
        },
        {
          "name": "Search News",
          "value": "searchNews",
          "action": "Search News",
          "routing": {
            "request": {
              "url": "/search-news",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}",
                "dateRange": "={{ $parameter.dateRange }}"
              },
              "method": "POST"
            }
          },
          "description": "Search Google News for articles"
        },
        {
          "name": "Search Places",
          "value": "searchPlaces",
          "action": "Search Places",
          "routing": {
            "request": {
              "url": "/search-places",
              "body": {
                "page": "={{ $parameter.page }}",
                "query": "={{ $parameter.query }}",
                "country": "={{ $parameter.country }}",
                "language": "={{ $parameter.language }}",
                "location": "={{ $parameter.location }}"
              },
              "method": "POST"
            }
          },
          "description": "Search Google Places for businesses and locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dataApi"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeUrl",
      "options": [
        {
          "name": "Scrape URL",
          "value": "scrapeUrl",
          "action": "Scrape URL",
          "routing": {
            "request": {
              "url": "/scrape",
              "body": {
                "url": "={{ $parameter.url }}",
                "format": "={{ $parameter.format }}",
                "cleaned": "={{ $parameter.cleaned }}",
                "renderJs": "={{ $parameter.renderJs }}"
              },
              "method": "POST"
            }
          },
          "description": "Scrape data from a specified URL with formatting options"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webScraping"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Google Reviews",
      "value": "getGoogleReviews",
      "action": "Get Google Reviews",
      "routing": {
        "request": {
          "url": "/get-google-reviews",
          "body": {
            "cid": "={{ $parameter.inputType === \"cid\" ? $parameter.cid : undefined }}",
            "sortBy": "={{ $parameter.sortBy }}",
            "keyword": "={{ $parameter.inputType === \"keyword\" ? $parameter.keyword : undefined }}",
            "placeId": "={{ $parameter.inputType === \"placeId\" ? $parameter.placeId : undefined }}",
            "reviews": "={{ $parameter.reviews }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location || undefined }}"
          },
          "method": "POST"
        }
      },
      "description": "Get Google Reviews for a place or business",
      "resource": "dataApi"
    },
    {
      "name": "Get TikTok Transcript",
      "value": "getTikTokTranscript",
      "action": "Get TikTok Transcript",
      "routing": {
        "request": {
          "url": "/get-tiktok-transcript",
          "body": {
            "videoUrl": "={{ $parameter.videoUrl }}",
            "preferredLanguage": "={{ $parameter.preferredLanguage }}"
          },
          "method": "POST"
        }
      },
      "description": "Retrieve the transcript from a TikTok video",
      "resource": "dataApi"
    },
    {
      "name": "Get YouTube Transcript",
      "value": "getYouTubeTranscript",
      "action": "Get YouTube Transcript",
      "routing": {
        "request": {
          "url": "/get-youtube-transcript",
          "body": {
            "videoUrl": "={{ $parameter.videoUrl }}",
            "includeTimestamps": "={{ $parameter.includeTimestamps }}",
            "preferredLanguage": "={{ $parameter.preferredLanguage }}",
            "timestampsToCombine": "={{ $parameter.timestampsToCombine }}"
          },
          "method": "POST"
        }
      },
      "description": "Extract the transcript from a specified YouTube video URL",
      "resource": "dataApi"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search Google",
      "routing": {
        "request": {
          "url": "/search",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}",
            "dateRange": "={{ $parameter.dateRange }}",
            "scrapeOptions": {
              "format": "={{ $parameter.scrapeFormat }}",
              "cleaned": "={{ $parameter.scrapeCleaned }}"
            },
            "scrapeResults": "={{ $parameter.scrapeResults }}",
            "numResultsToScrape": "={{ $parameter.numResultsToScrape }}"
          },
          "method": "POST"
        }
      },
      "description": "Perform a Google web search with optional content scraping",
      "resource": "dataApi"
    },
    {
      "name": "Search News",
      "value": "searchNews",
      "action": "Search News",
      "routing": {
        "request": {
          "url": "/search-news",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}",
            "dateRange": "={{ $parameter.dateRange }}"
          },
          "method": "POST"
        }
      },
      "description": "Search Google News for articles",
      "resource": "dataApi"
    },
    {
      "name": "Search Places",
      "value": "searchPlaces",
      "action": "Search Places",
      "routing": {
        "request": {
          "url": "/search-places",
          "body": {
            "page": "={{ $parameter.page }}",
            "query": "={{ $parameter.query }}",
            "country": "={{ $parameter.country }}",
            "language": "={{ $parameter.language }}",
            "location": "={{ $parameter.location }}"
          },
          "method": "POST"
        }
      },
      "description": "Search Google Places for businesses and locations",
      "resource": "dataApi"
    },
    {
      "name": "Scrape URL",
      "value": "scrapeUrl",
      "action": "Scrape URL",
      "routing": {
        "request": {
          "url": "/scrape",
          "body": {
            "url": "={{ $parameter.url }}",
            "format": "={{ $parameter.format }}",
            "cleaned": "={{ $parameter.cleaned }}",
            "renderJs": "={{ $parameter.renderJs }}"
          },
          "method": "POST"
        }
      },
      "description": "Scrape data from a specified URL with formatting options",
      "resource": "webScraping"
    }
  ]

npm_readme:
  ![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)

  # n8n-nodes-dumplingai

  This is an n8n community node that provides integration with [Dumpling AI](https://dumplingai.com) APIs for data extraction, web scraping, document conversion, and AI-powered operations.

  [Dumpling AI](https://dumplingai.com) is a comprehensive API platform that provides various data extraction and AI services including YouTube transcript extraction, TikTok data scraping, web scraping, document conversion, and more.

  ## Installation

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

  ## Credentials

  You must have a Dumpling AI API key to use this node. You can register for a free account to get an API key here:

  https://app.dumplingai.com/register

  Once registered, you can find your API key here:

  https://app.dumplingai.com/api-keys

  Then you'll need to create a credential in n8n for Dumpling AI.

  ## Usage

  Add Dumpling AI to a workflow and configure your operation.

  ### Available Operations

  This node currently supports:

  #### Data API Operations
  - **Get YouTube Transcript** - Extract transcripts from YouTube videos with timestamps and language options
  - **Get TikTok Transcript** - Extract transcripts/captions from TikTok videos
  - **Search (Google Web)** - Perform Google web searches with optional content scraping
  - **Search Places** - Search Google Places for businesses and locations
  - **Search News** - Search Google News for articles
  - **Get Google Reviews** - Extract Google Reviews for businesses using keywords, CID, or Place ID

  #### Web Scraping Operations
  - **Scrape URL** - Extract content from web pages with formatting options

  Additional operations will be added in future releases.

  #### Get YouTube Transcript

  Extract transcripts from YouTube videos with optional timestamps and language preferences.

  ```json
  {
    "videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "includeTimestamps": true,
    "timestampsToCombine": 5,
    "preferredLanguage": "en"
  }
  ```

  #### Get TikTok Transcript

  Extract transcripts/captions from TikTok videos with language preferences.

  ```json
  {
    "videoUrl": "https://www.tiktok.com/@username/video/1234567890",
    "preferredLanguage": "en"
  }
  ```

  #### Search (Google Web)

  Perform Google web searches with optional content scraping of results.

  ```json
  {
    "query": "artificial intelligence trends 2024",
    "country": "US",
    "language": "en",
    "scrapeResults": true,
    "numResultsToScrape": 3,
    "scrapeFormat": "markdown"
  }
  ```

  #### Search Places

  Search Google Places for businesses and locations.

  ```json
  {
    "query": "coffee shops near me",
    "location": "New York, NY",
    "language": "en"
  }
  ```

  #### Search News

  Search Google News for articles and news content.

  ```json
  {
    "query": "climate change",
    "dateRange": "past_week",
    "language": "en"
  }
  ```

  #### Get Google Reviews

  Extract Google Reviews for businesses using different identification methods.

  ```json
  {
    "inputType": "keyword",
    "keyword": "Starbucks Times Square",
    "reviews": 20,
    "sortBy": "newest"
  }
  ```

  #### Scrape URL

  Extract content from web pages with customizable formatting and processing options.

  ```json
  {
    "url": "https://example.com",
    "format": "markdown",
    "cleaned": true,
    "renderJs": true
  }
  ```

  **Output Formats:**
  - **HTML** - Raw HTML content
  - **Markdown** - Clean markdown format  
  - **Screenshot** - Screenshot of the page

  ## API Resources

  This node currently supports the most popular Dumpling AI APIs. If there's an API missing that you would like to use, please let us know at admin@dumplingai.com

  In the meantime, you can also use the [generic HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/) to construct your requests.

  ### Coming Soon

  - Document Conversion (PDF, Word, Excel, etc.)
  - AI Operations (Agent completions, Knowledge base search, Image generation)
  - Developer Tools (JavaScript/Python code execution)
  - Additional Data APIs (Social media profiles, advanced scraping)

  ## Related Resources

  Dumpling AI's complete API documentation is available here:

  https://docs.dumplingai.com/api-reference/introduction

  You can also find additional tutorials and resources here:

  https://docs.dumplingai.com/guides

  ## Development

  ### Release Flow

  After merging PRs into main, follow these steps to publish a new version:

  ```bash
  # Switch to main branch and ensure it's up to date
  git checkout main
  git pull origin main

  # Bump version (patch, minor, or major)
  npm version patch         # or minor / major

  # Push changes and tags
  git push origin main
  git push origin v$(node -p "require('./package.json').version")
  ```

  The tag push will automatically trigger the GitHub Actions workflow, which will:
  1. Build the package
  2. Check if the version already exists on npm
  3. Publish to npm if it's a new version

  You'll see a ✅ job in the Actions tab and the new version will appear on npm within a minute.

  ## License

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with Dumpling AI APIs to perform data extraction, web scraping, document conversion, and AI-powered operations.","capabilities":["Extract YouTube transcripts with timestamps","Extract TikTok transcripts/captions","Perform Google web searches with optional content scraping","Search Google Places for businesses and locations","Search Google News for articles","Extract Google Reviews for businesses","Scrape arbitrary URLs with customizable formatting","Output results in HTML, Markdown, or Screenshot formats"],"authentication":"API key required (configured via n8n credentials)","commonUseCases":["Extracting video content from YouTube and TikTok","Gathering business information and reviews","Web scraping with content cleaning options","Performing targeted Google searches with scraping"],"limitations":["Document conversion (PDF, Word, Excel) not yet available","AI operations (Agent completions, Knowledge base search, Image generation) not yet available","Developer Tools (JavaScript/Python code execution) not yet available","Additional social media profiles and advanced scraping features not yet available","Generic HTTP Request node can be used as a workaround for missing APIs"],"relatedNodes":["n8n-nodes-base.httprequest"]}


node_type: @ionos-cloud/n8n-nodes-ionos-cloud.ionosCloudCdn
package_name: @ionos-cloud/n8n-nodes-ionos-cloud
display_name: IONOS Cloud (CDN)
description: Interact with IONOS Cloud CDN API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: rijeshharidas
author_github_url: https://github.com/ionos-cloud/n8n-nodes-ionos-cloud.git
npm_package_name: @ionos-cloud/n8n-nodes-ionos-cloud
npm_version: 1.0.8
community_fetched_at: 2026-04-16T09:43:35.854Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "distribution",
      "options": [
        {
          "name": "Distribution",
          "value": "distribution"
        },
        {
          "name": "Ip",
          "value": "ips"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create distribution",
          "routing": {
            "request": {
              "url": "/distributions",
              "method": "POST"
            }
          },
          "description": "Create a new distribution"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a distribution"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "GET"
            }
          },
          "description": "Get a distribution by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many distributions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/distributions",
              "method": "GET"
            }
          },
          "description": "Retrieve many distributions"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update distribution",
          "routing": {
            "request": {
              "url": "=/distributions/{{$parameter.distributionId}}",
              "method": "PUT"
            }
          },
          "description": "Update a distribution"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "distribution"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get edge server IP info",
          "routing": {
            "request": {
              "url": "=/ips/{{$parameter.ipId}}",
              "method": "GET"
            }
          },
          "description": "Get edge server IP information by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many edge server i ps",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "items"
                  }
                }
              ]
            },
            "request": {
              "url": "/ips",
              "method": "GET"
            }
          },
          "description": "Retrieve many edge server IPs"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ips"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create distribution",
      "routing": {
        "request": {
          "url": "/distributions",
          "method": "POST"
        }
      },
      "description": "Create a new distribution",
      "resource": "distribution"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a distribution",
      "resource": "distribution"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "GET"
        }
      },
      "description": "Get a distribution by ID",
      "resource": "distribution"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many distributions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/distributions",
          "method": "GET"
        }
      },
      "description": "Retrieve many distributions",
      "resource": "distribution"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update distribution",
      "routing": {
        "request": {
          "url": "=/distributions/{{$parameter.distributionId}}",
          "method": "PUT"
        }
      },
      "description": "Update a distribution",
      "resource": "distribution"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get edge server IP info",
      "routing": {
        "request": {
          "url": "=/ips/{{$parameter.ipId}}",
          "method": "GET"
        }
      },
      "description": "Get edge server IP information by ID",
      "resource": "ips"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many edge server i ps",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "items"
              }
            }
          ]
        },
        "request": {
          "url": "/ips",
          "method": "GET"
        }
      },
      "description": "Retrieve many edge server IPs",
      "resource": "ips"
    }
  ]

npm_readme:
  <div align="center">

  <img src="./credentials/ionos.svg" alt="IONOS Cloud" height="80" />&nbsp;&nbsp;&nbsp;&nbsp;<picture><source media="(prefers-color-scheme: dark)" srcset="https://n8n.io/brandguidelines/logo-white.svg"><source media="(prefers-color-scheme: light)" srcset="https://n8n.io/brandguidelines/logo-dark.svg"><img src="https://n8n.io/brandguidelines/logo-dark.svg" alt="n8n" height="80" /></picture>

  # n8n Nodes for IONOS Cloud

  [![npm version](https://img.shields.io/npm/v/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![License](https://img.shields.io/npm/l/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/blob/master/LICENSE)
  [![npm downloads](https://img.shields.io/npm/dm/@ionos-cloud/n8n-nodes-ionos-cloud.svg)](https://www.npmjs.com/package/@ionos-cloud/n8n-nodes-ionos-cloud)
  [![n8n](https://img.shields.io/badge/n8n-community-blue.svg)](https://n8n.io)
  ![Official](https://img.shields.io/badge/IONOS%20Cloud-Official-00BFFF.svg)

  **Official IONOS Cloud n8n community nodes**

  Automate your cloud infrastructure, DNS, CDN, certificates, and AI workflows with [n8n](https://n8n.io/)

  [Installation](#installation) • [Operations](#operations) • [Credentials](#credentials) • [Usage](#usage) • [Examples](#common-patterns) • [Resources](#resources)

  </div>

  ---

  ## Overview

  This is the **official** n8n community node package for IONOS Cloud, developed and maintained by the IONOS Cloud team. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  The package provides comprehensive integration with key IONOS Cloud services, enabling you to automate infrastructure provisioning, certificate management, DNS operations, CDN distribution, and AI-powered workflows directly from n8n.

  ## Included Nodes

  This package provides seven separate nodes for different IONOS Cloud services:

  1. **IONOS Cloud (Infrastructure)** - Core infrastructure management
  2. **IONOS Cloud (Certificate Manager)** - SSL/TLS certificate management  
  3. **IONOS Cloud (Cloud DNS)** - Domain name system management
  4. **IONOS Cloud (CDN)** - Content delivery network management
  5. **IONOS Cloud (AI Model Hub)** - AI model inference and RAG capabilities
  6. **IONOS Cloud Chat Model** ⚡ - LangChain sub-node for n8n's AI Agent (language model)
  7. **IONOS Cloud Embeddings** ⚡ - LangChain sub-node for n8n's AI Agent (text embeddings)

  ---

  ## Getting Started

  ### Prerequisites

  Before you begin, you will need:

  1. A [IONOS Cloud account](https://www.ionos.com/enterprise-cloud/signup)
  2. A Cloud API Bearer token ([learn how to generate tokens](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager))
  3. n8n installed (version 2.1.5 or higher)

  ### Installation

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

  #### Quick Installation Steps

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `@ionos-cloud/n8n-nodes-ionos-cloud` in **Enter npm package name**
  4. Agree to the risks of using community nodes
  5. Select **Install**

  **Note:** After installation, you may need to restart your n8n instance for the new node to be recognized.

  ## Operations

  ### Overview

  | Node | Resources | Operations | Description |
  |------|-----------|------------|-------------|
  | **Infrastructure** | 21 | 153 | Complete infrastructure management (compute, networking, storage, Kubernetes) |
  | **Certificate Manager** | 3 | 15 | SSL/TLS certificate lifecycle management with ACME support |
  | **Cloud DNS** | 7 | 28 | DNS zones, records (15 types), DNSSEC, zone transfers |
  | **CDN** | 2 | 7 | Content delivery with custom routing and geo-restrictions |
  | **AI Model Hub** | 4 | 20 | Foundation model inference, RAG capabilities, and OpenAI-compatible API |
  | **Chat Model** ⚡ | — | supplyData | LangChain chat model sub-node for n8n AI Agent |
  | **Embeddings** ⚡ | — | supplyData | LangChain embeddings sub-node for n8n AI Agent |

  > ⚡ **Sub-nodes**: The Chat Model and Embeddings nodes are LangChain sub-nodes that plug into n8n's built-in AI nodes (AI Agent, AI Chain, Vector Stores, etc.) rather than operating as standalone workflow nodes.

  > **✨ v1.0.2**: Patch release with enhanced subresource support for load balancers, NAT gateways, security groups, and target groups. Added request monitoring capabilities.


  <details>
  <summary><b>Infrastructure - Detailed Operations</b></summary>

  #### Account & Global Resources (12 operations)
  - **Contract** (1): Get Many
  - **Location** (2): Get, Get Many
  - **Image** (2): Get, Get Many  
  - **IP Block** (4): Create, Delete, Get, Get Many
  - **Request** (3): Get, Get All, Get Status

  #### Core Infrastructure (10 operations)
  - **Datacenter** (5): Create, Delete, Get, Get Many, Update
  - **LAN** (5): Create, Delete, Get, Get Many, Update

  #### Compute Resources (41 operations)
  - **Server** (21): Attach/Detach CDROM/Volume, Create, Delete, Get (+ CDROM/CDROMs/Volume/Volumes/Remote Console/Token), Get Many, Reboot, Resume, Start, Stop, Suspend, Update, Upgrade
  - **Volume** (6): Create, Create Snapshot, Delete, Get, Get Many, Update
  - **Snapshot** (4): Delete, Get, Get Many, Update
  - **NIC** (5): Create, Delete, Get, Get Many, Update
  - **Firewall Rule** (5): Create, Delete, Get, Get Many, Update

  #### Kubernetes (11 operations)
  - **Kubernetes Cluster** (6): Create, Delete, Get, Get Many, Get Kubeconfig, Update
  - **Node Pool** (5): Create, Delete, Get, Get Many, Update

  #### Networking (34 operations)
  - **Private Cross-Connect** (5): Create, Delete, Get, Get Many, Update
  - **Load Balancer** (9): Attach/Detach NIC, Create, Delete, Get (+ Balanced NIC/NICs), Get Many, Update
  - **Network Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources
  - **Application Load Balancer** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Forwarding Rules subresources with HTTP rules
  - **Target Group** (5): Create, Delete, Get, Get Many, Update
    - Enhanced with location and protocolVersion properties
  - **NAT Gateway** (5): Create, Delete, Get, Get Many, Update
    - Full support for Flow Logs and Rules subresources

  #### Security (5 operations)
  - **Security Group** (5): Create, Delete, Get, Get Many, Update
    - Full support for Rules subresource with comprehensive rule properties

  </details>

  <details>
  <summary><b>Certificate Manager - Detailed Operations</b></summary>

  #### Certificate Resource (5 operations)
  Upload and manage SSL/TLS certificates manually with full chain and private key support.
  - Create, Delete, Get, Get Many, Update

  #### AutoCertificate Resource (5 operations)
  Configure automatic certificate renewal via ACME providers (Let's Encrypt, etc.).
  - Create, Delete, Get, Get Many, Update
  - **Key Algorithms**: RSA (2048/4096), ECDSA (256/384)
  - **Features**: Subject Alternative Names (SANs), common name, provider selection

  #### Provider Resource (5 operations)
  Configure ACME certificate providers with External Account Binding (EAB) support.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>Cloud DNS - Detailed Operations</b></summary>

  #### Zone Resource (5 operations)
  Manage primary DNS zones.
  - Create, Delete, Get, Get Many, Update

  #### Record Resource (5 operations)
  Manage DNS records with 15 supported types: A, AAAA, ALIAS, CAA, CNAME, DS, HTTPS, MX, NS, SMIMEA, SRV, SSHFP, SVCB, TLSA, TXT
  - Create, Delete, Get, Get Many, Update

  #### SecondaryZone Resource (7 operations)
  Secondary zones with AXFR (zone transfer) support.
  - Create, Delete, Get, Get Many, Update, AXFR Get, AXFR Start

  #### ZoneFile Resource (2 operations)
  Import/export zones in BIND format (RFC 1035).
  - Get (export), Update (import)

  #### Quota Resource (1 operation)
  View DNS resource usage and limits.
  - Get

  #### DNSSEC Resource (3 operations)
  Enable and manage DNSSEC for zones.
  - Create (enable), Delete (disable), Get

  #### ReverseRecord Resource (5 operations)
  Manage reverse DNS (PTR) records for IPv4/IPv6.
  - Create, Delete, Get, Get Many, Update

  </details>

  <details>
  <summary><b>CDN - Detailed Operations</b></summary>

  #### Distribution Resource (5 operations)
  Configure CDN distributions with custom routing rules.
  - Create, Delete, Get, Get Many, Update
  - **Features**: Domain routing, SSL/TLS integration, HTTP/HTTPS schemes, geo-restrictions, upstream origins

  #### Ip Resource (2 operations)
  Get CDN edge server IPs for origin whitelisting.
  - Get, Get Many

  </details>

  <details>
  <summary><b>AI Model Hub - Detailed Operations</b></summary>

  #### Model Resource (2 operations)
  Browse and invoke foundation models for AI inference.
  - Get Many (list available models), Predict (run inference)
  - **Features**: RAG support via collection queries, custom model options, streaming responses

  #### Collection Resource (6 operations)
  Manage vector database collections for document storage and retrieval.
  - Create, Delete, Get, Get Many, Update, Query
  - **Features**: Chunking strategies (sentence/fixed/recursive), embedding models, database types (chromadb/pgvector), semantic search

  #### Document Resource (7 operations)
  Manage documents within collections for RAG applications.
  - Add, Delete, Delete All, Get, Get Many, Get Chunks, Update
  - **Features**: Base64 content encoding, metadata management, chunk retrieval, batch operations

  #### OpenAI Compatible Resource (5 operations)
  Use OpenAI-compatible API endpoints for standardized AI interactions.

  **Chat Completion** - Create chat completions with message history
  - Supports system, user, and assistant message roles
  - Parameters: model, messages (required), temperature, top_p, max_tokens, max_completion_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, response_format, tools, tool_choice, user
  - Compatible with OpenAI chat completion API format

  **Completion** - Simple text completion
  - Parameters: model, prompt (required), temperature, top_p, max_tokens, n, stream, stop, presence_penalty, frequency_penalty, logit_bias, user
  - Compatible with OpenAI completion API format

  **Create Embeddings** - Generate vector embeddings from text
  - Parameters: model (default: BAAI/bge-large-en-v1.5), input (single text or comma-separated multiple texts)
  - Returns embedding vectors for semantic search and similarity

  **Generate Image** - Text-to-image generation
  - Parameters: model (default: black-forest-labs/FLUX.1-schnell), prompt (required), n, size (1024x1024, 1024x1792, 1792x1024), response_format (b64_json), user
  - Generates images from text descriptions

  **Get Many** - List available models
  - Returns all models in OpenAI-compatible format
  - Shows model capabilities and availability

  **API Endpoint**: `https://openai.inference.de-txl.ionos.com` (path: `/v1/*`)

  **Features**: Full OpenAI API compatibility, drop-in replacement for OpenAI in existing workflows, comprehensive parameter support

  > **Note:** Model dropdowns are populated dynamically from the IONOS API at runtime (`GET /v1/models`). When models are added or retired, the dropdown lists update automatically without requiring a node update.

  </details>

  ---

  ## Credentials

  All nodes in this package share a single credential type: **IONOS Cloud API**

  Authentication uses the [Cloud API Bearer token](https://docs.ionos.com/cloud/set-up-ionos-cloud/management/identity-access-management/token-manager).

  The same token works across all IONOS Cloud services (Infrastructure, Certificate Manager, DNS, CDN, and AI Model Hub).

  ## Compatibility

  Tested against n8n version 2.1.5+

  ## Usage

  ### Authentication
  1. Create new credentials in n8n and select "IONOS Cloud API"
  2. Provide your API token (generated from IONOS Cloud Console)
  3. The same credential works for all five nodes

  ### Using the Nodes

  #### Infrastructure
  * Add the "IONOS Cloud (Infrastructure)" node to your workflow
  * Select the resource (e.g., Server, Volume, Datacenter)
  * Choose the operation and configure the required fields

  #### Certificate Manager
  * Add the "IONOS Cloud (Certificate Manager)" node to your workflow
  * Select the resource (Certificate, AutoCertificate, or Provider)
  * Configure certificate properties, domains, and ACME providers

  #### DNS
  * Add the "IONOS Cloud (Cloud DNS)" node to your workflow
  * Select the resource (Zone, Record, SecondaryZone, etc.)
  * Configure DNS zones, records, and DNSSEC settings

  #### CDN
  * Add the "IONOS Cloud (CDN)" node to your workflow
  * Select the resource (Distribution or Ip)
  * Configure CDN distributions with routing rules and upstream origins

  #### AI Model Hub
  * Add the "IONOS Cloud (AI Model Hub)" node to your workflow
  * Select the resource (Model, Collection, Document, or OpenAI Compatible)
  * **Model**: AI inference with native IONOS API
  * **Collection**: Vector database management for RAG
  * **Document**: Manage documents in collections
  * **OpenAI Compatible**: Use OpenAI-compatible endpoints (chat, completions, embeddings, images)

  #### AI Agent Integration (Chat Model & Embeddings Sub-Nodes)

  The **IONOS Cloud Chat Model** and **IONOS Cloud Embeddings** are LangChain sub-nodes that integrate with n8n's built-in AI nodes.

  **Chat Model** — Use IONOS AI Model Hub as the LLM brain for the AI Agent:
  1. Add an **AI Agent** node to your workflow
  2. Click **+** on the AI Agent's **Language Model** input
  3. Select **IONOS Cloud Chat Model**
  4. Choose your credential and pick a model from the auto-populated dropdown
  5. The agent now uses IONOS AI Model Hub for all LLM reasoning

  **Embeddings** — Use IONOS AI Model Hub for text embeddings in RAG pipelines:
  1. Add an **In-Memory Vector Store** (or any vector store node)
  2. Click **+** on the vector store's **Embedding** input
  3. Select **IONOS Cloud Embeddings**
  4. Choose your credential and pick an embedding model

  **Example: AI Agent with RAG**
  ```
  Chat Trigger → AI Agent
                   ├── Language Model: IONOS Cloud Chat Model
                   ├── Memory: Window Buffer Memory
                   └── Tool: Vector Store Tool
                                └── In-Memory Vector Store (Load)
                                         └── Embedding: IONOS Cloud Embeddings
  ```

  > **Note:** The model dropdowns are populated dynamically from the IONOS API at runtime. Both sub-nodes reuse the same **IONOS Cloud API** credential as all other nodes in this package.

  ### Common Patterns

  **Automated SSL Certificate Deployment:**
  1. Use Certificate Manager to create an AutoCertificate
  2. Use CDN node to create a Distribution referencing the certificate ID
  3. Automate certificate renewal with n8n scheduling

  **Infrastructure Provisioning:**
  1. Use Infrastructure node to create Datacenter, Server, and Volume
  2. Use DNS node to create Zone and A/AAAA Records pointing to server IPs
  3. Use Certificate Manager to provision SSL certificates for domains

  **DNS Management:**
  1. Use DNS Zone resource to create zones
  2. Use Record resource to manage DNS records (A, CNAME, MX, TXT, etc.)
  3. Use DNSSEC resource to enable DNSSEC signing
  4. Use ReverseRecord for PTR records

  **AI-Powered Applications with RAG:**
  1. Use AI Model Hub Collection resource to create a vector database
  2. Use Document resource to add knowledge base documents
  3. Use Model Predict operation with collection query for context-aware responses
  4. Automate document updates and model inference in workflows

  **OpenAI-Compatible AI Integration:**
  1. Use OpenAI Compatible Chat Completion for conversational AI
  2. Use Create Embeddings for semantic search and similarity
  3. Use Generate Image for text-to-image generation
  4. Drop-in replacement for OpenAI API in existing n8n workflows

  **AI Agent with IONOS Cloud (native n8n AI integration):**
  1. Use IONOS Cloud Chat Model as the language model for n8n's AI Agent
  2. Use IONOS Cloud Embeddings with Vector Stores for RAG pipelines
  3. Combine with Window Buffer Memory for conversational context
  4. Add Vector Store Tool to give the agent access to your knowledge base
  5. See `examples/ionos-ai-agent-workflow.json` for a ready-to-import workflow

  ### Avoiding Rate Limits

  The IONOS AI Model Hub API enforces rate limits (300 requests/min, 5 requests/sec with a burst of 10). When a node receives multiple input items (e.g., from a preceding "Get All" operation), n8n executes the node once per item, which can trigger `429 Too Many Requests` errors.

  To prevent this, configure **batching** in the node's **Settings** tab:

  1. Open the AI Model Hub node and go to the **Settings** tab
  2. Under **Request Options**, click **Add Option** and select **Batching**
  3. Set **Items per Batch** to `2` (or lower)
  4. Set **Batch Interval (ms)** to `1000` (or higher)

  This ensures n8n processes only a few items at a time with a delay between batches, staying within the API rate limits.

  > **Tip:** If your workflow only needs a single API call (e.g., one Chat Completion), use a **Limit** node before the AI Model Hub node to reduce the input to 1 item.

  ## API Endpoints

  Each node connects to:

  - **Infrastructure**: `https://api.ionos.com/cloudapi/v6/`
  - **Certificate Manager**: `https://certificate-manager.de-fra.ionos.com`
  - **Cloud DNS**: `https://dns.de-fra.ionos.com`
  - **CDN**: `https://cdn.de-fra.ionos.com`
  - **AI Model Hub (Inference API)**: `https://inference.de-txl.ionos.com`
  - **AI Model Hub (OpenAI Compatible API)**: `https://openai.inference.de-txl.ionos.com`

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [IONOS Cloud Documentation](https://docs.ionos.com/cloud)
  * [Infrastructure API Documentation](https://api.ionos.com/docs/cloud/v6/)
  * [Certificate Manager API Documentation](https://api.ionos.com/docs/certmanager/v2/)
  * [Cloud DNS API Documentation](https://api.ionos.com/docs/dns/v1/)
  * [CDN API Documentation](https://api.ionos.com/docs/cdn/v1/)
  * [AI Model Hub API Documentation](https://api.ionos.com/docs/inference-modelhub/v1/)
  * [AI Model Hub OpenAI-compatible API Documentation](https://api.ionos.com/docs/inference-openai/v1/)

  ## Contributing

  We welcome contributions! If you find a bug or have a feature request:

  1. Check the [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues) to see if it's already been reported
  2. Open a new issue with a clear description and reproduction steps
  3. For feature requests, explain the use case and expected behavior

  ### Development

  To contribute code:

  1. Fork the repository
  2. Create a feature branch (`git checkout -b feature/amazing-feature`)
  3. Make your changes and test thoroughly
  4. Commit your changes (`git commit -m 'Add amazing feature'`)
  5. Push to the branch (`git push origin feature/amazing-feature`)
  6. Open a Pull Request

  ## License

  This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

  ## Support

  - 📖 [Documentation](https://docs.ionos.com/cloud)
  - 💬 [GitHub Issues](https://github.com/ionos-cloud/n8n-nodes-ionos-cloud/issues)
  - 🌐 [IONOS Cloud](https://www.ionos.com/cloud)
  - 📧 [Support](https://docs.ionos.com/cloud/support/general-information/contact-information)

  ---

  <div align="center">

  Made with ❤️ by the IONOS Cloud team

  </div>

ai_documentation_summary:
  {"purpose":"This node enables interaction with the IONOS Cloud CDN API to manage content delivery network resources within n8n workflows.","capabilities":["Content delivery network configuration","Custom routing setup","Geo-restriction management","CDN resource monitoring","CDN status checks"],"authentication":"API key required (Cloud API Bearer token)","commonUseCases":["Automating CDN configuration for web applications","Managing geo-based content delivery restrictions","Monitoring CDN performance and status"],"limitations":["Limited to 2 resources and 7 operations as specified in the overview table"],"relatedNodes":["IONOS Cloud (Infrastructure)","IONOS Cloud (Certificate Manager)","IONOS Cloud (Cloud DNS)","IONOS Cloud (AI Model Hub)","IONOS Cloud Chat Model"]}


node_type: n8n-nodes-channel-talk.channelTalk
package_name: n8n-nodes-channel-talk
display_name: Channel Talk
description: Send messages to Channel Talk
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: zoyi
author_github_url: https://github.com/channel-io/
npm_package_name: n8n-nodes-channel-talk
npm_version: 0.2.2
community_fetched_at: 2026-04-16T09:43:35.855Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "userChat",
      "options": [
        {
          "name": "Bot",
          "value": "bot"
        },
        {
          "name": "Channel",
          "value": "channel"
        },
        {
          "name": "Manager",
          "value": "manager"
        },
        {
          "name": "Team Chat",
          "value": "teamChat"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "User Chat",
          "value": "userChat"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create or Update",
          "value": "createOrUpdate",
          "action": "Create or update a bot",
          "routing": {
            "request": {
              "url": "/open/v5/bots",
              "method": "POST"
            }
          },
          "description": "Create a new bot or update an existing one"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a bot",
          "routing": {
            "request": {
              "url": "=/open/v5/bots/{{$parameter.botId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a bot"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all bots",
          "routing": {
            "request": {
              "url": "/open/v5/bots",
              "method": "GET"
            }
          },
          "description": "List all bots in the channel"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get channel",
          "routing": {
            "request": {
              "url": "/open/v5/channel",
              "method": "GET"
            }
          },
          "description": "Retrieve the channel connected with the given API key credentials"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "channel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a manager",
          "routing": {
            "request": {
              "url": "=/open/v5/managers/{{$parameter.managerId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a manager by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all managers",
          "routing": {
            "request": {
              "url": "/open/v5/managers",
              "method": "GET"
            }
          },
          "description": "List all managers in the channel"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "manager"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create Message (Blocks, by Name)",
          "value": "createMessageBlocksByName",
          "action": "Send a blocks message to a group by name",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a new blocks message to a team chat group by name"
        },
        {
          "name": "Create Message (Blocks)",
          "value": "createMessageBlocks",
          "action": "Send a blocks message to a group",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a new blocks message to a team chat group by ID"
        },
        {
          "name": "Create Message (Plain Text, by Name)",
          "value": "createMessagePlainTextByName",
          "action": "Send a plain text message to a group by name",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a new plain text message to a team chat group by name"
        },
        {
          "name": "Create Message (Plain Text)",
          "value": "createMessagePlainText",
          "action": "Send a plain text message to a group",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a new plain text message to a team chat group by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a group by ID",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a team chat group by ID"
        },
        {
          "name": "Get (by Name)",
          "value": "getByName",
          "action": "Get a group by name",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/@{{$parameter.groupName}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a team chat group by name"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "List messages in a group",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of messages in a team chat group by ID"
        },
        {
          "name": "Get Messages (by Name)",
          "value": "getMessagesByName",
          "action": "List messages in a group by name",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of messages in a team chat group by name"
        },
        {
          "name": "Get Messages File",
          "value": "getMessagesFile",
          "action": "Get signed file URL by group ID",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}/messages/file",
              "method": "GET"
            }
          },
          "description": "Get signed file URL using file key and group ID"
        },
        {
          "name": "Get Messages File (by Name)",
          "value": "getMessagesFileByName",
          "action": "Get signed file URL by group name",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages/file",
              "method": "GET"
            }
          },
          "description": "Get signed file URL using file key and group name"
        },
        {
          "name": "Get Sessions",
          "value": "getSessions",
          "action": "List members in a group",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}/sessions",
              "method": "GET"
            }
          },
          "description": "List of members in a team chat group"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all groups",
          "routing": {
            "request": {
              "url": "/open/v5/groups",
              "method": "GET"
            }
          },
          "description": "List all team chat groups"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a group",
          "routing": {
            "request": {
              "url": "=/open/v5/groups/{{$parameter.groupId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a team chat group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "teamChat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "open",
      "options": [
        {
          "name": "Assign to Manager",
          "value": "assignToManager",
          "action": "Assign a manager to user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/assign-to/managers/{{$parameter.managerId}}",
              "method": "PATCH"
            }
          },
          "description": "Assign a manager to a user chat"
        },
        {
          "name": "Close",
          "value": "close",
          "action": "Close a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/close",
              "method": "PATCH"
            }
          },
          "description": "Close the user chat"
        },
        {
          "name": "Create (by User ID)",
          "value": "createByUserId",
          "action": "Create a user chat by user id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/user-chats",
              "method": "POST"
            }
          },
          "description": "Create a new user chat for a specific user"
        },
        {
          "name": "Create Message",
          "value": "createMessage",
          "action": "Send a message to a chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages",
              "method": "POST"
            }
          },
          "description": "Send a new message to a chat"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a user chat"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Retrieve a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{ String($parameter.userChatId ?? '') }}",
              "method": "GET"
            }
          },
          "description": "Retrieve a user chat"
        },
        {
          "name": "Get Cases",
          "value": "getCases",
          "action": "List user chat cases",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/cases",
              "method": "GET"
            }
          },
          "description": "List user chat cases within a time range"
        },
        {
          "name": "Get Meets Messages",
          "value": "getMeetsMessages",
          "action": "List messages in STT chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/meets/{{$parameter.messageId}}/messages",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of messages in a stt chat"
        },
        {
          "name": "Get Meets Recording",
          "value": "getMeetsRecording",
          "action": "Download call recording",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/meets/{{$parameter.messageId}}/recording",
              "method": "GET"
            }
          },
          "description": "Download a recording of a call meet"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "List messages in chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of messages in a chat"
        },
        {
          "name": "Get Messages File",
          "value": "getMessagesFile",
          "action": "Get signed file URL",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages/file",
              "method": "GET"
            }
          },
          "description": "Get signed file URL using file key"
        },
        {
          "name": "Get Sessions",
          "value": "getSessions",
          "action": "List members in user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/sessions",
              "method": "GET"
            }
          },
          "description": "List of members in a user chat"
        },
        {
          "name": "Invite",
          "value": "invite",
          "action": "Invite managers to user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/invite?botName={{ encodeURIComponent($parameter.botName || '') }}{{ (() => { const ids = ($parameter.additionalOptions?.managerIds ?? '').toString().split(',').map((id) => id.trim()).filter(Boolean); return ids.length ? '&' + ids.map((id) => 'managerIds=' + encodeURIComponent(id)).join('&') : ''; })() }}",
              "method": "PATCH"
            }
          },
          "description": "Invite managers to a user chat"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List user chats",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats",
              "method": "GET"
            }
          },
          "description": "List of user chats in managed state"
        },
        {
          "name": "List (by User ID)",
          "value": "listByUserId",
          "action": "List user chats by user id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/user-chats",
              "method": "GET"
            }
          },
          "description": "List user chats for a specific user"
        },
        {
          "name": "Open",
          "value": "open",
          "action": "Open a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/open",
              "method": "PUT"
            }
          },
          "description": "Open a user chat"
        },
        {
          "name": "Remove",
          "value": "remove",
          "action": "Remove a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/remove",
              "method": "DELETE"
            }
          },
          "description": "Remove a user chat"
        },
        {
          "name": "Snooze",
          "value": "snooze",
          "action": "Snooze a user chat",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/snooze",
              "method": "PUT"
            }
          },
          "description": "Snooze a user chat"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update user chat description",
          "routing": {
            "request": {
              "url": "=/open/v5/user-chats/{{$parameter.userChatId}}",
              "body": "={{ $parameter.sendBody !== false && $parameter.requestBody ? { description: $parameter.requestBody.description ?? \"\" } : undefined }}",
              "method": "PATCH"
            }
          },
          "description": "Update user chat description"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userChat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByUserId",
      "options": [
        {
          "name": "Block",
          "value": "block",
          "action": "Block a user",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/block",
              "method": "POST"
            }
          },
          "description": "Block a user by user ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a user",
          "routing": {
            "request": {
              "url": "/open/v5/users",
              "method": "POST"
            }
          },
          "description": "Create a new lead by profile"
        },
        {
          "name": "Create or Update",
          "value": "upsert",
          "action": "Create or update a user by member id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/@{{$parameter.memberId}}",
              "method": "PUT"
            }
          },
          "description": "Create a new record, or update the current one if it already exists (upsert)"
        },
        {
          "name": "Delete (by Member ID)",
          "value": "deleteByMemberId",
          "action": "Delete a user by member id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/@{{$parameter.memberId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a user by member ID"
        },
        {
          "name": "Delete (by User ID)",
          "value": "deleteByUserId",
          "action": "Delete a user by user id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a user by user ID"
        },
        {
          "name": "Get (by Member ID)",
          "value": "getByMemberId",
          "action": "Get a user by member id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/@{{$parameter.memberId}}",
              "method": "GET"
            }
          },
          "description": "Get a user by member ID"
        },
        {
          "name": "Get (by User ID)",
          "value": "getByUserId",
          "action": "Get a user by user id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}",
              "method": "GET"
            }
          },
          "description": "Get a user by user ID"
        },
        {
          "name": "Issue Session JWT",
          "value": "issueSessionJwt",
          "action": "Issue session jwt",
          "routing": {
            "request": {
              "url": "=/open/v5/users/@{{$parameter.memberId}}/session-jwt/issue",
              "method": "PUT"
            }
          },
          "description": "Issue a session JWT for a member"
        },
        {
          "name": "Issue User Token (by Member ID)",
          "value": "issueUserTokenByMemberId",
          "action": "Issue user token by member id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/@{{$parameter.memberId}}/user-token/issue",
              "method": "PUT"
            }
          },
          "description": "Issue a user token by member ID"
        },
        {
          "name": "Issue User Token (by User ID)",
          "value": "issueUserToken",
          "action": "Issue user token by user id",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/user-token/issue",
              "method": "PUT"
            }
          },
          "description": "Issue a user token by user ID"
        },
        {
          "name": "Touch",
          "value": "touch",
          "action": "Touch a user",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/touch",
              "method": "POST"
            }
          },
          "description": "Updates user lastSeenAt, sessionsCount, and daily unique user statistics"
        },
        {
          "name": "Unblock",
          "value": "unblock",
          "action": "Unblock a user",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}/block",
              "method": "DELETE"
            }
          },
          "description": "Unblock a user by user ID"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user",
          "routing": {
            "request": {
              "url": "=/open/v5/users/{{$parameter.userId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a user by user ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "request": {
              "url": "/open/v5/webhooks",
              "method": "POST"
            }
          },
          "description": "Create a new webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a webhook"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a webhook",
          "routing": {
            "request": {
              "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
              "method": "GET"
            }
          },
          "description": "Get a webhook by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all webhooks",
          "routing": {
            "request": {
              "url": "/open/v5/webhooks",
              "method": "GET"
            }
          },
          "description": "List all webhooks in the channel"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "routing": {
            "request": {
              "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
              "method": "PATCH"
            }
          },
          "description": "Update a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create or Update",
      "value": "createOrUpdate",
      "action": "Create or update a bot",
      "routing": {
        "request": {
          "url": "/open/v5/bots",
          "method": "POST"
        }
      },
      "description": "Create a new bot or update an existing one",
      "resource": "bot"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a bot",
      "routing": {
        "request": {
          "url": "=/open/v5/bots/{{$parameter.botId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a bot",
      "resource": "bot"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all bots",
      "routing": {
        "request": {
          "url": "/open/v5/bots",
          "method": "GET"
        }
      },
      "description": "List all bots in the channel",
      "resource": "bot"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get channel",
      "routing": {
        "request": {
          "url": "/open/v5/channel",
          "method": "GET"
        }
      },
      "description": "Retrieve the channel connected with the given API key credentials",
      "resource": "channel"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a manager",
      "routing": {
        "request": {
          "url": "=/open/v5/managers/{{$parameter.managerId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a manager by ID",
      "resource": "manager"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all managers",
      "routing": {
        "request": {
          "url": "/open/v5/managers",
          "method": "GET"
        }
      },
      "description": "List all managers in the channel",
      "resource": "manager"
    },
    {
      "name": "Create Message (Blocks, by Name)",
      "value": "createMessageBlocksByName",
      "action": "Send a blocks message to a group by name",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a new blocks message to a team chat group by name",
      "resource": "teamChat"
    },
    {
      "name": "Create Message (Blocks)",
      "value": "createMessageBlocks",
      "action": "Send a blocks message to a group",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a new blocks message to a team chat group by ID",
      "resource": "teamChat"
    },
    {
      "name": "Create Message (Plain Text, by Name)",
      "value": "createMessagePlainTextByName",
      "action": "Send a plain text message to a group by name",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a new plain text message to a team chat group by name",
      "resource": "teamChat"
    },
    {
      "name": "Create Message (Plain Text)",
      "value": "createMessagePlainText",
      "action": "Send a plain text message to a group",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a new plain text message to a team chat group by ID",
      "resource": "teamChat"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a group by ID",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a team chat group by ID",
      "resource": "teamChat"
    },
    {
      "name": "Get (by Name)",
      "value": "getByName",
      "action": "Get a group by name",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/@{{$parameter.groupName}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a team chat group by name",
      "resource": "teamChat"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "List messages in a group",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}/messages",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of messages in a team chat group by ID",
      "resource": "teamChat"
    },
    {
      "name": "Get Messages (by Name)",
      "value": "getMessagesByName",
      "action": "List messages in a group by name",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of messages in a team chat group by name",
      "resource": "teamChat"
    },
    {
      "name": "Get Messages File",
      "value": "getMessagesFile",
      "action": "Get signed file URL by group ID",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}/messages/file",
          "method": "GET"
        }
      },
      "description": "Get signed file URL using file key and group ID",
      "resource": "teamChat"
    },
    {
      "name": "Get Messages File (by Name)",
      "value": "getMessagesFileByName",
      "action": "Get signed file URL by group name",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/@{{$parameter.groupName}}/messages/file",
          "method": "GET"
        }
      },
      "description": "Get signed file URL using file key and group name",
      "resource": "teamChat"
    },
    {
      "name": "Get Sessions",
      "value": "getSessions",
      "action": "List members in a group",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}/sessions",
          "method": "GET"
        }
      },
      "description": "List of members in a team chat group",
      "resource": "teamChat"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all groups",
      "routing": {
        "request": {
          "url": "/open/v5/groups",
          "method": "GET"
        }
      },
      "description": "List all team chat groups",
      "resource": "teamChat"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a group",
      "routing": {
        "request": {
          "url": "=/open/v5/groups/{{$parameter.groupId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a team chat group",
      "resource": "teamChat"
    },
    {
      "name": "Assign to Manager",
      "value": "assignToManager",
      "action": "Assign a manager to user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/assign-to/managers/{{$parameter.managerId}}",
          "method": "PATCH"
        }
      },
      "description": "Assign a manager to a user chat",
      "resource": "userChat"
    },
    {
      "name": "Close",
      "value": "close",
      "action": "Close a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/close",
          "method": "PATCH"
        }
      },
      "description": "Close the user chat",
      "resource": "userChat"
    },
    {
      "name": "Create (by User ID)",
      "value": "createByUserId",
      "action": "Create a user chat by user id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/user-chats",
          "method": "POST"
        }
      },
      "description": "Create a new user chat for a specific user",
      "resource": "userChat"
    },
    {
      "name": "Create Message",
      "value": "createMessage",
      "action": "Send a message to a chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages",
          "method": "POST"
        }
      },
      "description": "Send a new message to a chat",
      "resource": "userChat"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a user chat",
      "resource": "userChat"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Retrieve a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{ String($parameter.userChatId ?? '') }}",
          "method": "GET"
        }
      },
      "description": "Retrieve a user chat",
      "resource": "userChat"
    },
    {
      "name": "Get Cases",
      "value": "getCases",
      "action": "List user chat cases",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/cases",
          "method": "GET"
        }
      },
      "description": "List user chat cases within a time range",
      "resource": "userChat"
    },
    {
      "name": "Get Meets Messages",
      "value": "getMeetsMessages",
      "action": "List messages in STT chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/meets/{{$parameter.messageId}}/messages",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of messages in a stt chat",
      "resource": "userChat"
    },
    {
      "name": "Get Meets Recording",
      "value": "getMeetsRecording",
      "action": "Download call recording",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/meets/{{$parameter.messageId}}/recording",
          "method": "GET"
        }
      },
      "description": "Download a recording of a call meet",
      "resource": "userChat"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "List messages in chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of messages in a chat",
      "resource": "userChat"
    },
    {
      "name": "Get Messages File",
      "value": "getMessagesFile",
      "action": "Get signed file URL",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/messages/file",
          "method": "GET"
        }
      },
      "description": "Get signed file URL using file key",
      "resource": "userChat"
    },
    {
      "name": "Get Sessions",
      "value": "getSessions",
      "action": "List members in user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/sessions",
          "method": "GET"
        }
      },
      "description": "List of members in a user chat",
      "resource": "userChat"
    },
    {
      "name": "Invite",
      "value": "invite",
      "action": "Invite managers to user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/invite?botName={{ encodeURIComponent($parameter.botName || '') }}{{ (() => { const ids = ($parameter.additionalOptions?.managerIds ?? '').toString().split(',').map((id) => id.trim()).filter(Boolean); return ids.length ? '&' + ids.map((id) => 'managerIds=' + encodeURIComponent(id)).join('&') : ''; })() }}",
          "method": "PATCH"
        }
      },
      "description": "Invite managers to a user chat",
      "resource": "userChat"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List user chats",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats",
          "method": "GET"
        }
      },
      "description": "List of user chats in managed state",
      "resource": "userChat"
    },
    {
      "name": "List (by User ID)",
      "value": "listByUserId",
      "action": "List user chats by user id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/user-chats",
          "method": "GET"
        }
      },
      "description": "List user chats for a specific user",
      "resource": "userChat"
    },
    {
      "name": "Open",
      "value": "open",
      "action": "Open a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/open",
          "method": "PUT"
        }
      },
      "description": "Open a user chat",
      "resource": "userChat"
    },
    {
      "name": "Remove",
      "value": "remove",
      "action": "Remove a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/remove",
          "method": "DELETE"
        }
      },
      "description": "Remove a user chat",
      "resource": "userChat"
    },
    {
      "name": "Snooze",
      "value": "snooze",
      "action": "Snooze a user chat",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}/snooze",
          "method": "PUT"
        }
      },
      "description": "Snooze a user chat",
      "resource": "userChat"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update user chat description",
      "routing": {
        "request": {
          "url": "=/open/v5/user-chats/{{$parameter.userChatId}}",
          "body": "={{ $parameter.sendBody !== false && $parameter.requestBody ? { description: $parameter.requestBody.description ?? \"\" } : undefined }}",
          "method": "PATCH"
        }
      },
      "description": "Update user chat description",
      "resource": "userChat"
    },
    {
      "name": "Block",
      "value": "block",
      "action": "Block a user",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/block",
          "method": "POST"
        }
      },
      "description": "Block a user by user ID",
      "resource": "user"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a user",
      "routing": {
        "request": {
          "url": "/open/v5/users",
          "method": "POST"
        }
      },
      "description": "Create a new lead by profile",
      "resource": "user"
    },
    {
      "name": "Create or Update",
      "value": "upsert",
      "action": "Create or update a user by member id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/@{{$parameter.memberId}}",
          "method": "PUT"
        }
      },
      "description": "Create a new record, or update the current one if it already exists (upsert)",
      "resource": "user"
    },
    {
      "name": "Delete (by Member ID)",
      "value": "deleteByMemberId",
      "action": "Delete a user by member id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/@{{$parameter.memberId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a user by member ID",
      "resource": "user"
    },
    {
      "name": "Delete (by User ID)",
      "value": "deleteByUserId",
      "action": "Delete a user by user id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a user by user ID",
      "resource": "user"
    },
    {
      "name": "Get (by Member ID)",
      "value": "getByMemberId",
      "action": "Get a user by member id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/@{{$parameter.memberId}}",
          "method": "GET"
        }
      },
      "description": "Get a user by member ID",
      "resource": "user"
    },
    {
      "name": "Get (by User ID)",
      "value": "getByUserId",
      "action": "Get a user by user id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}",
          "method": "GET"
        }
      },
      "description": "Get a user by user ID",
      "resource": "user"
    },
    {
      "name": "Issue Session JWT",
      "value": "issueSessionJwt",
      "action": "Issue session jwt",
      "routing": {
        "request": {
          "url": "=/open/v5/users/@{{$parameter.memberId}}/session-jwt/issue",
          "method": "PUT"
        }
      },
      "description": "Issue a session JWT for a member",
      "resource": "user"
    },
    {
      "name": "Issue User Token (by Member ID)",
      "value": "issueUserTokenByMemberId",
      "action": "Issue user token by member id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/@{{$parameter.memberId}}/user-token/issue",
          "method": "PUT"
        }
      },
      "description": "Issue a user token by member ID",
      "resource": "user"
    },
    {
      "name": "Issue User Token (by User ID)",
      "value": "issueUserToken",
      "action": "Issue user token by user id",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/user-token/issue",
          "method": "PUT"
        }
      },
      "description": "Issue a user token by user ID",
      "resource": "user"
    },
    {
      "name": "Touch",
      "value": "touch",
      "action": "Touch a user",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/touch",
          "method": "POST"
        }
      },
      "description": "Updates user lastSeenAt, sessionsCount, and daily unique user statistics",
      "resource": "user"
    },
    {
      "name": "Unblock",
      "value": "unblock",
      "action": "Unblock a user",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}/block",
          "method": "DELETE"
        }
      },
      "description": "Unblock a user by user ID",
      "resource": "user"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a user",
      "routing": {
        "request": {
          "url": "=/open/v5/users/{{$parameter.userId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a user by user ID",
      "resource": "user"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "request": {
          "url": "/open/v5/webhooks",
          "method": "POST"
        }
      },
      "description": "Create a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a webhook",
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a webhook",
      "routing": {
        "request": {
          "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
          "method": "GET"
        }
      },
      "description": "Get a webhook by ID",
      "resource": "webhook"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all webhooks",
      "routing": {
        "request": {
          "url": "/open/v5/webhooks",
          "method": "GET"
        }
      },
      "description": "List all webhooks in the channel",
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "routing": {
        "request": {
          "url": "=/open/v5/webhooks/{{$parameter.webhookId}}",
          "method": "PATCH"
        }
      },
      "description": "Update a webhook",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-channel-talk

  This is an n8n community node. It lets you work with Channel Talk in your n8n workflows: send messages and retrieve channel info.

  [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

  - Bot
    - List (GET /open/v5/bots)
    - Create or Update (POST /open/v5/bots)
    - Delete (DELETE /open/v5/bots/{botId})
  - Channel
    - Get: Retrieve the channel connected with your API credentials (GET /open/v5/channel)
  - Manager
    - List (GET /open/v5/managers)
    - Get (GET /open/v5/managers/{managerId})
  - Team Chat
    - List (GET /open/v5/groups)
    - Get (GET /open/v5/groups/{groupId})
    - Get by Name (GET /open/v5/groups/@{groupName})
    - Update (PATCH /open/v5/groups/{groupId})
    - Get Sessions (GET /open/v5/groups/{groupId}/sessions)
    - Get Messages (GET /open/v5/groups/{groupId}/messages)
    - Get Messages by Name (GET /open/v5/groups/@{groupName}/messages)
    - Get Messages File (GET /open/v5/groups/{groupId}/messages/file)
    - Get Messages File by Name (GET /open/v5/groups/@{groupName}/messages/file)
    - Create Message - Plain Text (POST /open/v5/groups/{groupId}/messages)
    - Create Message - Plain Text by Name (POST /open/v5/groups/@{groupName}/messages)
    - Create Message - Blocks (POST /open/v5/groups/{groupId}/messages)
    - Create Message - Blocks by Name (POST /open/v5/groups/@{groupName}/messages)
  - User
    - Get by User ID (GET /open/v5/users/{userId})
    - Get by Member ID (GET /open/v5/users/@{memberId})
    - Create (POST /open/v5/users)
    - Create or Update (PUT /open/v5/users/@{memberId})
    - Update (PATCH /open/v5/users/{userId})
    - Delete by User ID (DELETE /open/v5/users/{userId})
    - Delete by Member ID (DELETE /open/v5/users/@{memberId})
    - Block (POST /open/v5/users/{userId}/block)
    - Unblock (DELETE /open/v5/users/{userId}/block)
    - Issue User Token by User ID (PUT /open/v5/users/{userId}/user-token/issue)
    - Issue User Token by Member ID (PUT /open/v5/users/@{memberId}/user-token/issue)
    - Issue Session JWT (PUT /open/v5/users/@{memberId}/session-jwt/issue)
    - Touch (POST /open/v5/users/{userId}/touch)
  - User Chat
    - List (GET /open/v5/user-chats)
    - Get (GET /open/v5/user-chats/{userChatId})
    - Update (PATCH /open/v5/user-chats/{userChatId})
    - Delete (DELETE /open/v5/user-chats/{userChatId})
    - Open (PUT /open/v5/user-chats/{userChatId}/open)
    - Close (PATCH /open/v5/user-chats/{userChatId}/close)
    - Snooze (PUT /open/v5/user-chats/{userChatId}/snooze)
    - Remove (DELETE /open/v5/user-chats/{userChatId}/remove)
    - Assign to Manager (PATCH /open/v5/user-chats/{userChatId}/assign-to/managers/{managerId})
    - Invite (PATCH /open/v5/user-chats/{userChatId}/invite)
    - Get Cases (GET /open/v5/user-chats/cases)
    - Get Sessions (GET /open/v5/user-chats/{userChatId}/sessions)
    - Get Messages (GET /open/v5/user-chats/{userChatId}/messages)
    - Get Messages File (GET /open/v5/user-chats/{userChatId}/messages/file)
    - Create Message (POST /open/v5/user-chats/{userChatId}/messages)
    - Get Meets Messages (GET /open/v5/user-chats/{userChatId}/meets/{messageId}/messages)
    - Get Meets Recording (GET /open/v5/user-chats/{userChatId}/meets/{messageId}/recording)
  - Webhook
    - List (GET /open/v5/webhooks)
    - Get (GET /open/v5/webhooks/{webhookId})
    - Create (POST /open/v5/webhooks)
    - Update (PATCH /open/v5/webhooks/{webhookId})
    - Delete (DELETE /open/v5/webhooks/{webhookId})

  ## Credentials

  Create Open API credentials in Channel Talk and set the following fields:

  - Access Key
  - Access Secret

  These are sent as `x-access-key` and `x-access-secret` headers in each request.

  Refer to the Channel developers documentation for details:
  https://developers.channel.io/docs/authentication-2

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Channel Open API docs](https://developers.channel.io/docs)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of Channel Talk operations, allowing users to send messages, manage bots, channels, teams, and users, and retrieve channel information within n8n workflows.","capabilities":["Send plain text and block-based messages to Team Chats","Retrieve and manage Channel Talk bots (list, create, update, delete)","Access and manage Team Chat groups (list, get, update, sessions, messages)","Manage User accounts (create, update, delete, block, unblock, issue tokens)","Handle User Chats (list, open, close, snooze, assign, invite, cases)","Retrieve channel information and connected API credentials","Manage Webhooks (list, create, update, delete)","Access message files and recording data from meetings"],"authentication":"API Key (Access Key and Access Secret sent as x-access-key and x-access-secret headers)","commonUseCases":["Automated customer support responses via Team Chat","Automated user onboarding and account management","Automated bot provisioning and configuration","Automated message retrieval and analysis"],"limitations":["Community node (not official n8n node)","Requires Channel Talk API credentials","Compatible only with n8n 1.60.0 or later"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: @drwally/n8n-nodes-integration.drwally
package_name: @drwally/n8n-nodes-integration
display_name: DrWally
description: DrWally send message node
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: drwally
author_github_url: https://github.com/sinova-dev/drwally-n8n-node.git
npm_package_name: @drwally/n8n-nodes-integration
npm_version: 1.0.6
community_fetched_at: 2026-04-16T09:43:35.857Z
ai_summary_generated_at: 2026-03-25 22:51:43
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendPrivate",
      "options": [
        {
          "name": "Send Private Message",
          "value": "sendPrivate",
          "action": "Send a private message",
          "description": "Send a private message"
        },
        {
          "name": "Send Group Message",
          "value": "sendGroup",
          "action": "Send a group message",
          "description": "Send a group message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Private Message",
      "value": "sendPrivate",
      "action": "Send a private message",
      "description": "Send a private message",
      "resource": "message"
    },
    {
      "name": "Send Group Message",
      "value": "sendGroup",
      "action": "Send a group message",
      "description": "Send a group message",
      "resource": "message"
    }
  ]

npm_readme:
  # n8n-nodes-DrWally

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

  DrWally API is service that allows users automate whatsapp messaging for business purposes.

  [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

  1. Send private message - send message to a single user
  2. Send group message - send message to a group

  ## Credentials

  For sending messages using DrWally node, you need to have account on [DrWally website](https://drwallyai.com/)

  1. Create account.
  2. Log in.
  3. In sidebar select WhatsApp for Business
  4. Connect your whatsapp account to the app
  5. Select Webhooks for WhatsApp for Business on sidebar
  6. Generate webhook for selected phone number
  7. Use Webhook URL and Secret Key, to create credentials in n8n

  ## Compatibility

  Minimum n8n version - 2.1.5

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [DrWally API](https://api.drwallyai.com/api-public)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of WhatsApp messaging for business purposes by integrating with the DrWally API to send messages to individual users or groups.","capabilities":["Send private messages to a single WhatsApp user","Send group messages to multiple WhatsApp users","Automate WhatsApp communication workflows"],"authentication":"Webhook URL and Secret Key obtained from DrWally's WhatsApp for Business webhook settings","commonUseCases":["Automated customer support notifications","Broadcasting promotional messages to customer groups","Order status updates via WhatsApp","Appointment reminders"],"limitations":["Requires a separate DrWally account and WhatsApp for Business connection","Minimum n8n version 2.1.5 required","Limited to business messaging purposes only"],"relatedNodes":["Webhook node","HTTP Request node","WhatsApp nodes"]}


node_type: @mookielianhd/n8n-nodes-instagram.instagramTrigger
package_name: @mookielianhd/n8n-nodes-instagram
display_name: Instagram Trigger
category: Community
development_style: declarative
version: 2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: mookielian
author_github_url: https://github.com/MookieLian/n8n-nodes-instagram.git
npm_package_name: @mookielianhd/n8n-nodes-instagram
npm_version: 3.4.0
community_fetched_at: 2026-04-16T09:43:35.858Z
ai_summary_generated_at: 2026-03-25 22:47:20
description:
  Instagram trigger to receive real-time webhook events from Meta and start a workflow when an event is received.

npm_readme:
  ![Banner image](assets/banner_instagram_node.jpeg)

  # @mookielianhd/n8n-nodes-instagram

  This package’s Instagram nodes for n8n let you publish and manage content, moderate comments, send DMs, and react to real-time events (comments, messages, mentions, story insights, etc.) on Instagram Business and Creator accounts via the Facebook/Instagram Graph API.

  All functionality is built on the Facebook/Instagram Graph API, including media publishing (images, Reels, Stories, carousels), comment moderation, private replies, messaging, hashtag search, IG User/Page helpers, and webhook-based triggers for Business and Creator accounts.

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

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

  ## Installation

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

  ## Operations

  The node exposes several resources:

  | Resource | Description |
  | --- | --- |
  | `Image` | Publish a single image with an optional caption. Uses the two-step container → publish flow. Supports alt text, location, user tags, and product tags. |
  | `Reels` | Publish a reel video. Handles container polling until the video is processed before publishing. Supports product tags and **Trial Reels** via `trial_params`. |
  | `Stories` | Publish a story video using the same logic as reels with `media_type=STORIES`. |
  | `Carousel` | Publish a carousel (album) post with up to 10 images and/or videos. The node creates child containers, builds a carousel container, waits for it to be ready, then publishes it. Includes detailed per-item error reporting and progress messages. |
  | `Comments` | List comments on media, hide/unhide or delete individual comments, disable/enable comments on media, and send **private replies** to commenters. |
  | `IG User` | Read basic profile data for an Instagram Business/Creator account and list its media using the IG User Graph API. |
  | `IG Hashtag` | Search for hashtags by name and fetch top or recent media for a hashtag with paging and limit/return-all support. |
  | `Messaging` | Send direct messages (DMs) to Instagram users via the Instagram Messaging API. |
  | `Page` | Given a Facebook Page ID, fetch the connected Instagram Business/Creator account (`instagram_business_account`). |
  | `Auth` | Exchange short-lived Instagram User tokens for long-lived tokens, refresh long-lived tokens, and call the Graph API `/me` endpoint. |
  | **Instagram Trigger** | **Trigger:** receive real-time webhook events from Meta (comments, messages, mentions, story insights, etc.) and run a workflow for each event. Requires a separate **Instagram Webhook** credential (App Secret) and Meta App Dashboard webhook configuration. |

  ## Credentials

  Create an **Instagram API** credential that stores a long-lived Facebook Graph API user access token with at least:

  * `instagram_basic`
  * `pages_show_list`
  * `instagram_content_publish`
  * `pages_read_engagement`
  * `instagram_manage_comments` (or `instagram_business_manage_comments` if using Instagram Login)
  Steps:

  1. Make sure the Instagram account is a Business/Creator account connected to a Facebook Page.  
  2. Use Meta’s Graph Explorer or your own app to generate an access token that includes the scopes listed above.  
  3. Convert it to a long-lived token and paste it into the credential’s **Access Token** field.  
  4. The built-in credential test hits `https://graph.facebook.com/v22.0/me` to confirm the token works.

  ### Instagram Webhook Trigger credentials

  For the **Instagram Trigger** node you need a separate **Instagram Webhook** credential that stores your Meta **App Secret** (from App Dashboard → Settings → Basic). The App Secret is used to verify the `X-Hub-Signature-256` header on incoming webhook POSTs from Meta. The **Verify Token** is set in the node parameters (see below) and must match the value you enter in the Meta App Dashboard when configuring the webhook URL.

  ## Instagram Webhook Trigger

  This package’s Instagram nodes for n8n let you publish and manage content, moderate comments, send DMs, and react to real-time events (comments, messages, mentions, story insights, etc.) on Instagram Business and Creator accounts via the Facebook/Instagram Graph API.

  The **Instagram Trigger** node listens for real-time webhook events from Meta and starts a workflow when an event is received.

  ### Setup

  1. **Create the credential**  
     Add an **Instagram Webhook** credential and enter your Meta **App Secret** (from your app’s Settings → Basic in the Meta App Dashboard).

  2. **Add the trigger to your workflow**  
     Add the **Instagram Trigger** node. Set **Verify Token** to any string you will use in the Meta Dashboard (e.g. a random secret). Copy the **Webhook URL** shown in the node (Production or Test URL).

  3. **Configure Webhooks in Meta App Dashboard**  
     - In [Meta for Developers](https://developers.facebook.com/), open your app and go to **Webhooks** (or add the Webhooks product).  
     - For **Instagram**, set:  
       - **Callback URL**: paste the n8n Webhook URL from the trigger node.  
       - **Verify Token**: the same string you set in the node’s **Verify Token** parameter.  
     - Subscribe to the Instagram fields you need (e.g. `comments`, `messages`, `mentions`, `story_insights`).  
     - Save. Meta will send a GET request to your URL; the node responds with the challenge so verification succeeds.

  4. **Optional: filter events**  
     Use **Events to Include** on the node to pass only selected event types (e.g. only `messages` and `mentions`) to the workflow. If left empty, all received events are output.

  Each event is output as an item with `object`, `field`, `value`, `id`, `time` and the raw change payload, so you can use the **Instagram** node (e.g. Messaging, Comments) in the same workflow to reply or moderate. To return a custom response to the caller instead of the default 200 OK, add a **Respond to Webhook** node after the trigger.

  ## Compatibility

  - Built and tested against **n8n 2.6.x–2.8.x**.  
  - Declares a peer dependency on **`n8n-workflow >=2.6.1`** (the first secure stream-enabled version suggested by Snyk).  
  - Requires n8n with community nodes enabled (recommended `>=2.x`).  
  - Uses only built-in n8n dependencies, so it is Cloud-compatible.

  ## Usage

  ### Publishing media (Image / Reels / Stories)

  1. Add the **Instagram** node to your workflow and select one of the resources (`Image` / `Reels` / `Stories`).  
  2. Provide the Instagram Business Account ID (the `Node` parameter), media URL and caption.  
  3. The node first creates the media container, polls Graph API until processing completes, then triggers `media_publish`.  
  4. For long-running uploads (large videos), the node uses robust polling and retry logic and surfaces progress via the n8n execution logs (for example, when publishing Reels or Trial Reels).  
  5. Handle any errors returned by the API (rate limits, permissions, validation) via the node’s error output or `Continue On Fail`.

  ### Publishing carousel posts (Carousel)

  1. Add the **Instagram** node and set **Resource** to `Carousel`, **Operation** to `Publish`.  
  2. Provide:
     - `Node` – the IG User ID to publish from.  
     - `Graph API Version` – for example `v24.0`.  
     - `Caption` – the carousel caption.  
     - `Carousel Media` – 2–10 items, each with:
       - `Media Type` – `Image` or `Video`.  
       - `Image URL` or `Video URL` – public URLs Meta can fetch.  
  3. The node:
     - Creates one child container per image/video (`is_carousel_item=true` for each).  
     - Waits for each child container to become ready.  
     - Creates a carousel container (`media_type=CAROUSEL`, `children=<child_ids>`) with the caption.  
     - Waits for the carousel container to be ready, then calls `/{ig-user-id}/media_publish`.  
  4. Errors during any step are annotated with **which child item failed** (for example, “Carousel item 3 (video)…”), making it easier to debug problematic URLs.

  ### Comment moderation and private replies (Comments)

  1. Add the **Instagram** node and set **Resource** to `Comments`.  
  2. Choose an **Operation**:
     - `List` – fetch comments for a given media ID.  
     - `Hide` / `Unhide` / `Delete` – moderate a specific comment by its comment ID.  
     - `Disable Comments` / `Enable Comments` – toggle comments on a media object by its media ID.  
     - `Send Private Reply` – send a private reply message to a commenter using their comment ID.  
  3. Provide the required IDs:
     - `Media ID` for listing comments or enabling/disabling comments.  
     - `Comment ID` for hide/unhide/delete/private reply operations.  
  4. For **Send Private Reply**, also fill in:
     - `Node` – the Instagram professional account ID that owns the commented media.  
     - `Message` – the private reply text that will be sent to the commenter’s inbox/request folder (subject to the 7‑day and messaging window rules defined by Meta).  

  ### Reading IG User profile and media (IG User)

  1. Add the **Instagram** node and set **Resource** to `IG User`.  
  2. Choose an **Operation**:
     - `Get` – fetch basic profile information for an Instagram Business/Creator account (username, name, bio, website, media_count, followers/follows, profile picture URL).  
     - `Get Media` – list media owned by that account, including media type, URLs, caption, permalink, timestamp and username.  
  3. Provide:
     - `Node` – the IG User ID of the professional account you want to read (or `me` if your credential token belongs to that account).  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  

  ### Searching hashtags and fetching hashtag media (IG Hashtag)

  1. Add the **Instagram** node and set **Resource** to `IG Hashtag`.  
  2. Choose an **Operation**:
     - `Search` – look up a hashtag by name and get its global hashtag ID.  
     - `Get Recent Media` – get the most recently published media tagged with a hashtag.  
     - `Get Top Media` – get the most popular media tagged with a hashtag.  
  3. For **Search**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag Name` – the hashtag name, without `#`.  
  4. For **Get Recent Media** / **Get Top Media**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag ID` – the ID returned from the search operation.  
     - `Return All` / `Limit` – choose whether to fetch all available media (within a safety cap) or only up to a limit.  

  ### Sending direct messages (Messaging)

  1. Add the **Instagram** node and set **Resource** to `Messaging`.  
  2. Choose **Operation** `Send Message`.  
  3. Provide:
     - `Node` – the IG professional account ID that will send the message.  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  
     - `Recipient IG User ID` – the Instagram-scoped user ID (IGSID) of the recipient, typically obtained from Messaging webhook events.  
     - `Message Text` – the text body of the direct message.  

  ### Token exchange, refresh and `/me` (Auth)

  1. Add the **Instagram** node and set **Resource** to `Auth`.  
  2. Choose an **Operation**:
     - `Exchange Access Token` – exchange a **short-lived** Instagram User access token for a **long-lived** token.  
     - `Refresh Access Token` – refresh an existing long-lived token using the Instagram Platform refresh endpoint.  
     - `Get Me` – call the Graph API `/me` endpoint using the `instagramApi` credential’s access token.  
  3. For **Exchange Access Token**, provide:
     - `Short-Lived Access Token` – the short-lived token from your login flow.  
     - `App Secret` – the Instagram App Secret from your Meta App Dashboard.  
  4. For **Refresh Access Token**, optionally provide:
     - `Access Token` – the long-lived token to refresh. Leave empty to use the token from the credential.  
  5. For **Get Me**, the node uses a fixed, versioned `/me` URL under the hood and does **not** depend on any UI parameters, so older workflows remain compatible.

  ### Getting the Instagram account for a Facebook Page (Page)

  1. Add the **Instagram** node and set **Resource** to `Page`, **Operation** to `Get Instagram Account`.  
  2. Provide:
     - `Graph API Version` – for example `v24.0`.  
     - `Page ID` – the Facebook Page ID that is linked to your Instagram professional account.  
  3. The node calls:
     - `GET /{page-id}?fields=instagram_business_account`
     and returns the `instagram_business_account` object (including the Instagram User ID) so you can feed it into other resources (Image/Reels/Stories/Carousel/IG User).

  ### Trial Reels (Reels with `trial_params`)

  1. Add the **Instagram** node and set **Resource** to `Reels`, **Operation** to `Publish`.  
  2. Under **Additional Fields**, set **Trial Reel – Graduation Strategy**:
     - `MANUAL` – you will decide in the Instagram app when (or if) to graduate the trial reel.  
     - `SS_PERFORMANCE` – Instagram will automatically graduate the trial reel if it performs well.  
  3. The node sends a `trial_params` JSON object in the create-container request, as documented in the IG User Media reference.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)  
  * [Instagram Graph API - Publishing](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media)  
  * [Video/Reels publishing guide](https://developers.facebook.com/docs/instagram-api/guides/content-publishing/reels/)  
  * [Comment Moderation](https://developers.facebook.com/docs/instagram-platform/comment-moderation)  
  * [Private Replies](https://developers.facebook.com/docs/instagram-platform/private-replies)  
  * [IG User](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user)  
  * [IG Hashtag Search](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag-search/)  
  * [IG Hashtag Recent Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/recent-media/)  
  * [IG Hashtag Top Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/top-media/)  
  * [Instagram Messaging API](https://developers.facebook.com/docs/messenger-platform/instagram/features/)  
  * [Instagram Platform Access Token](https://developers.facebook.com/docs/instagram-platform/reference/access_token/)  
  * [Instagram Platform Refresh Access Token](https://developers.facebook.com/docs/instagram-platform/reference/refresh_access_token/)  
  * [Instagram Platform /me](https://developers.facebook.com/docs/instagram-platform/reference/me/)  
  * [Webhooks from Meta (getting started)](https://developers.facebook.com/docs/graph-api/webhooks/getting-started)  
  * [Instagram webhook reference](https://developers.facebook.com/docs/graph-api/webhooks/reference/instagram)

  ## Version history

  | Version | Notes |
  | --- | --- |
  | 3.1.1 | Fixes overlapping description text in the node UI; documentation/layout-only cleanup with no runtime behavior changes. |
  | 3.1.0 | Sets `skipSignatureVerification` to `true` by default for the Instagram Trigger node and ensures webhook executions are correctly registered. |
  | 3.0.0 | Introduces the Instagram Trigger node for webhook-based events (comments, messages, mentions, story insights) and updates underlying dependencies. |
  | 2.6.2 | Documentation-only release. Adds or updates `CONTRIBUTING.md` contributor guidance and refreshes this README to reflect recent changes; does not modify runtime behavior or node functionality. |
  | 2.6.1 | Patch release that keeps all execution-time, polling and error-reporting improvements from 2.6.0 and updates docs/readme to reflect the current behavior and supported resources. |
  | 2.6.0 | Shortens polling intervals across resources, adds general execution time optimizations, introduces URL validation before making Graph API calls, and adds more detailed error messages to make debugging easier. |
  | 2.5.4 | Further shortens the container health polling interval in the **Reels** resource to reduce average execution time when publishing videos. |
  | 2.5.3 | Adds `CODE_OF_CONDUCT.md` and `LICENSE`. This is a documentation/compliance update and does not change runtime behavior. |
  | 2.5.2 | Bumps the required `n8n-workflow` peer dependency to `>=2.6.1` to address security advisories (arbitrary file upload, RCE, prototype pollution, etc.) and updates the README to describe the latest features. |
  | 2.5.1 | Introduces the `Page` resource to retrieve the connected Instagram Business/Creator account for a Facebook Page and adds the **Trial Reel – Graduation Strategy** option for Reels (via `trial_params`), alongside the first stable release of Carousel publishing, extended tagging options, and streaming-style progress messages. |
  | 2.4.0 | Adds `IG Hashtag` (search, recent media, top media), `Messaging` (send DMs), and `Auth` helpers for token exchange/refresh and `/me`. |
  | 2.3.0 | Adds `Comments` resource with comment moderation (list/hide/unhide/delete, enable/disable comments) and **Private Replies** support, and an `IG User` resource for reading profile data and listing media. |
  | 2.2.0 | Improves publishing UX and adds alt text, location ID, user tags, and product tags support for media publishing. |
  | 2.1.0 | Stable release of Instagram publishing (Image/Reels/Stories) using the container → publish flow with robust polling and error handling. |
  | 0.1.0 | Initial release with Image, Reels and Stories publishing & built-in container polling. |

ai_documentation_summary:
  {"purpose":"The Instagram Trigger node listens for real-time webhook events from Meta (such as comments, messages, mentions, and story insights) on Instagram Business and Creator accounts to automatically initiate n8n workflows.","capabilities":["Receive real-time webhook events from Meta","Filter specific event types (comments, messages, mentions, story insights)","Start n8n workflows upon event receipt","Support both Production and Test webhook URLs","Verify webhook signatures using App Secret"],"authentication":"App Secret required (stored in separate Instagram Webhook credential); Verify Token configured in node parameters","commonUseCases":["Automated comment moderation and replies","Direct message handling and customer support automation","Story insights monitoring and reporting","Mention tracking and social media management","Real-time engagement alerts"],"limitations":["Requires a separate Instagram Webhook credential with App Secret","Webhook URL must be configured in Meta App Dashboard","Requires Instagram Business or Creator account","Requires proper Meta Graph API permissions (instagram_manage_comments, etc.)"],"relatedNodes":["Instagram Publish Image","Instagram Publish Reels","Instagram Publish Stories","Instagram Publish Carousel","Instagram Comments"]}


node_type: @mookielianhd/n8n-nodes-instagram.instagram
package_name: @mookielianhd/n8n-nodes-instagram
display_name: Instagram
description: Publish media to Instagram using Facebook Graph API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-04-16 09:43:35
author_name: mookielian
author_github_url: https://github.com/MookieLian/n8n-nodes-instagram.git
npm_package_name: @mookielianhd/n8n-nodes-instagram
npm_version: 3.4.0
community_fetched_at: 2026-04-16T09:43:35.859Z
ai_summary_generated_at: 2026-03-25 22:47:20
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "image",
      "options": [
        {
          "name": "Auth",
          "value": "auth",
          "description": "Exchange and refresh Instagram access tokens; call /me"
        },
        {
          "name": "Carousel",
          "value": "carousel",
          "description": "Publish a carousel (album) post with up to 10 images or videos"
        },
        {
          "name": "Comment",
          "value": "comments",
          "description": "Moderate comments on Instagram media"
        },
        {
          "name": "IG Hashtag",
          "value": "igHashtag",
          "description": "Search hashtags and fetch top or recent media for a hashtag"
        },
        {
          "name": "IG User",
          "value": "igUser",
          "description": "Read profile and media for an Instagram Business or Creator account"
        },
        {
          "name": "Image",
          "value": "image",
          "description": "Publish image posts to Instagram"
        },
        {
          "name": "Messaging",
          "value": "messaging",
          "description": "Send direct messages via the Instagram Messaging API"
        },
        {
          "name": "Page",
          "value": "page",
          "description": "Work with the connected Facebook Page and its Instagram account"
        },
        {
          "name": "Reel",
          "value": "reels",
          "description": "Publish Reels videos to Instagram"
        },
        {
          "name": "Story",
          "value": "stories",
          "description": "Publish story videos to Instagram"
        }
      ],
      "required": true,
      "description": "Select what you want to do with the Instagram API",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish",
          "description": "Publish the selected media type (image, reel, or story) to Instagram"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "image",
            "reels",
            "stories"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInstagramAccount",
      "options": [
        {
          "name": "Get Instagram Account",
          "value": "getInstagramAccount",
          "action": "Get instagram account",
          "description": "Get the Instagram business/creator account connected to a Facebook Page"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish",
          "description": "Publish a carousel (album) post with up to 10 images or videos"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "carousel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "deleteComment",
          "action": "Delete a comment",
          "description": "Delete a comment from an Instagram media object"
        },
        {
          "name": "Disable Comments",
          "value": "disableComments",
          "action": "Disable comments on media",
          "description": "Disable comments on an Instagram media object"
        },
        {
          "name": "Enable Comments",
          "value": "enableComments",
          "action": "Enable comments on media",
          "description": "Enable comments on an Instagram media object"
        },
        {
          "name": "Hide",
          "value": "hideComment",
          "action": "Hide a comment",
          "description": "Hide a comment from an Instagram media object"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List comments",
          "description": "List comments on an Instagram media object"
        },
        {
          "name": "Send Private Reply",
          "value": "sendPrivateReply",
          "action": "Send a private reply",
          "description": "Send a private reply message to a commenter using the comment ID"
        },
        {
          "name": "Unhide",
          "value": "unhideComment",
          "action": "Unhide a comment",
          "description": "Unhide a previously hidden comment"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get IG user",
          "description": "Get basic profile information for an Instagram Business or Creator account"
        },
        {
          "name": "Get Media",
          "value": "getMedia",
          "action": "Get media",
          "description": "List media objects owned by an Instagram Business or Creator account"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "igUser"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "refreshAccessToken",
      "options": [
        {
          "name": "Exchange Access Token",
          "value": "exchangeAccessToken",
          "action": "Exchange short lived token",
          "description": "Exchange a short-lived Instagram User access token for a long-lived token using the Instagram Platform access token endpoint"
        },
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get me profile",
          "description": "Call the Graph API /me endpoint using the access token from the Instagram API credential"
        },
        {
          "name": "Refresh Access Token",
          "value": "refreshAccessToken",
          "action": "Refresh access token",
          "description": "Refresh a long-lived Instagram User access token using the Instagram Platform refresh endpoint"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auth"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search hashtags",
          "description": "Search for a hashtag by name and return its ID"
        },
        {
          "name": "Get Recent Media",
          "value": "getRecentMedia",
          "action": "Get recent media for hashtag",
          "description": "Get the most recent media tagged with a hashtag"
        },
        {
          "name": "Get Top Media",
          "value": "getTopMedia",
          "action": "Get top media for hashtag",
          "description": "Get the most popular media tagged with a hashtag"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "igHashtag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send direct message",
          "description": "Send a text message to an Instagram user via the Messaging API"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "messaging"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish",
      "description": "Publish the selected media type (image, reel, or story) to Instagram",
      "resource": "image"
    },
    {
      "name": "Get Instagram Account",
      "value": "getInstagramAccount",
      "action": "Get instagram account",
      "description": "Get the Instagram business/creator account connected to a Facebook Page",
      "resource": "page"
    },
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish",
      "description": "Publish a carousel (album) post with up to 10 images or videos",
      "resource": "carousel"
    },
    {
      "name": "Delete",
      "value": "deleteComment",
      "action": "Delete a comment",
      "description": "Delete a comment from an Instagram media object",
      "resource": "comments"
    },
    {
      "name": "Disable Comments",
      "value": "disableComments",
      "action": "Disable comments on media",
      "description": "Disable comments on an Instagram media object",
      "resource": "comments"
    },
    {
      "name": "Enable Comments",
      "value": "enableComments",
      "action": "Enable comments on media",
      "description": "Enable comments on an Instagram media object",
      "resource": "comments"
    },
    {
      "name": "Hide",
      "value": "hideComment",
      "action": "Hide a comment",
      "description": "Hide a comment from an Instagram media object",
      "resource": "comments"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List comments",
      "description": "List comments on an Instagram media object",
      "resource": "comments"
    },
    {
      "name": "Send Private Reply",
      "value": "sendPrivateReply",
      "action": "Send a private reply",
      "description": "Send a private reply message to a commenter using the comment ID",
      "resource": "comments"
    },
    {
      "name": "Unhide",
      "value": "unhideComment",
      "action": "Unhide a comment",
      "description": "Unhide a previously hidden comment",
      "resource": "comments"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get IG user",
      "description": "Get basic profile information for an Instagram Business or Creator account",
      "resource": "igUser"
    },
    {
      "name": "Get Media",
      "value": "getMedia",
      "action": "Get media",
      "description": "List media objects owned by an Instagram Business or Creator account",
      "resource": "igUser"
    },
    {
      "name": "Exchange Access Token",
      "value": "exchangeAccessToken",
      "action": "Exchange short lived token",
      "description": "Exchange a short-lived Instagram User access token for a long-lived token using the Instagram Platform access token endpoint",
      "resource": "auth"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get me profile",
      "description": "Call the Graph API /me endpoint using the access token from the Instagram API credential",
      "resource": "auth"
    },
    {
      "name": "Refresh Access Token",
      "value": "refreshAccessToken",
      "action": "Refresh access token",
      "description": "Refresh a long-lived Instagram User access token using the Instagram Platform refresh endpoint",
      "resource": "auth"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search hashtags",
      "description": "Search for a hashtag by name and return its ID",
      "resource": "igHashtag"
    },
    {
      "name": "Get Recent Media",
      "value": "getRecentMedia",
      "action": "Get recent media for hashtag",
      "description": "Get the most recent media tagged with a hashtag",
      "resource": "igHashtag"
    },
    {
      "name": "Get Top Media",
      "value": "getTopMedia",
      "action": "Get top media for hashtag",
      "description": "Get the most popular media tagged with a hashtag",
      "resource": "igHashtag"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send direct message",
      "description": "Send a text message to an Instagram user via the Messaging API",
      "resource": "messaging"
    }
  ]

npm_readme:
  ![Banner image](assets/banner_instagram_node.jpeg)

  # @mookielianhd/n8n-nodes-instagram

  This package’s Instagram nodes for n8n let you publish and manage content, moderate comments, send DMs, and react to real-time events (comments, messages, mentions, story insights, etc.) on Instagram Business and Creator accounts via the Facebook/Instagram Graph API.

  All functionality is built on the Facebook/Instagram Graph API, including media publishing (images, Reels, Stories, carousels), comment moderation, private replies, messaging, hashtag search, IG User/Page helpers, and webhook-based triggers for Business and Creator accounts.

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

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

  ## Installation

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

  ## Operations

  The node exposes several resources:

  | Resource | Description |
  | --- | --- |
  | `Image` | Publish a single image with an optional caption. Uses the two-step container → publish flow. Supports alt text, location, user tags, and product tags. |
  | `Reels` | Publish a reel video. Handles container polling until the video is processed before publishing. Supports product tags and **Trial Reels** via `trial_params`. |
  | `Stories` | Publish a story video using the same logic as reels with `media_type=STORIES`. |
  | `Carousel` | Publish a carousel (album) post with up to 10 images and/or videos. The node creates child containers, builds a carousel container, waits for it to be ready, then publishes it. Includes detailed per-item error reporting and progress messages. |
  | `Comments` | List comments on media, hide/unhide or delete individual comments, disable/enable comments on media, and send **private replies** to commenters. |
  | `IG User` | Read basic profile data for an Instagram Business/Creator account and list its media using the IG User Graph API. |
  | `IG Hashtag` | Search for hashtags by name and fetch top or recent media for a hashtag with paging and limit/return-all support. |
  | `Messaging` | Send direct messages (DMs) to Instagram users via the Instagram Messaging API. |
  | `Page` | Given a Facebook Page ID, fetch the connected Instagram Business/Creator account (`instagram_business_account`). |
  | `Auth` | Exchange short-lived Instagram User tokens for long-lived tokens, refresh long-lived tokens, and call the Graph API `/me` endpoint. |
  | **Instagram Trigger** | **Trigger:** receive real-time webhook events from Meta (comments, messages, mentions, story insights, etc.) and run a workflow for each event. Requires a separate **Instagram Webhook** credential (App Secret) and Meta App Dashboard webhook configuration. |

  ## Credentials

  Create an **Instagram API** credential that stores a long-lived Facebook Graph API user access token with at least:

  * `instagram_basic`
  * `pages_show_list`
  * `instagram_content_publish`
  * `pages_read_engagement`
  * `instagram_manage_comments` (or `instagram_business_manage_comments` if using Instagram Login)
  Steps:

  1. Make sure the Instagram account is a Business/Creator account connected to a Facebook Page.  
  2. Use Meta’s Graph Explorer or your own app to generate an access token that includes the scopes listed above.  
  3. Convert it to a long-lived token and paste it into the credential’s **Access Token** field.  
  4. The built-in credential test hits `https://graph.facebook.com/v22.0/me` to confirm the token works.

  ### Instagram Webhook Trigger credentials

  For the **Instagram Trigger** node you need a separate **Instagram Webhook** credential that stores your Meta **App Secret** (from App Dashboard → Settings → Basic). The App Secret is used to verify the `X-Hub-Signature-256` header on incoming webhook POSTs from Meta. The **Verify Token** is set in the node parameters (see below) and must match the value you enter in the Meta App Dashboard when configuring the webhook URL.

  ## Instagram Webhook Trigger

  This package’s Instagram nodes for n8n let you publish and manage content, moderate comments, send DMs, and react to real-time events (comments, messages, mentions, story insights, etc.) on Instagram Business and Creator accounts via the Facebook/Instagram Graph API.

  The **Instagram Trigger** node listens for real-time webhook events from Meta and starts a workflow when an event is received.

  ### Setup

  1. **Create the credential**  
     Add an **Instagram Webhook** credential and enter your Meta **App Secret** (from your app’s Settings → Basic in the Meta App Dashboard).

  2. **Add the trigger to your workflow**  
     Add the **Instagram Trigger** node. Set **Verify Token** to any string you will use in the Meta Dashboard (e.g. a random secret). Copy the **Webhook URL** shown in the node (Production or Test URL).

  3. **Configure Webhooks in Meta App Dashboard**  
     - In [Meta for Developers](https://developers.facebook.com/), open your app and go to **Webhooks** (or add the Webhooks product).  
     - For **Instagram**, set:  
       - **Callback URL**: paste the n8n Webhook URL from the trigger node.  
       - **Verify Token**: the same string you set in the node’s **Verify Token** parameter.  
     - Subscribe to the Instagram fields you need (e.g. `comments`, `messages`, `mentions`, `story_insights`).  
     - Save. Meta will send a GET request to your URL; the node responds with the challenge so verification succeeds.

  4. **Optional: filter events**  
     Use **Events to Include** on the node to pass only selected event types (e.g. only `messages` and `mentions`) to the workflow. If left empty, all received events are output.

  Each event is output as an item with `object`, `field`, `value`, `id`, `time` and the raw change payload, so you can use the **Instagram** node (e.g. Messaging, Comments) in the same workflow to reply or moderate. To return a custom response to the caller instead of the default 200 OK, add a **Respond to Webhook** node after the trigger.

  ## Compatibility

  - Built and tested against **n8n 2.6.x–2.8.x**.  
  - Declares a peer dependency on **`n8n-workflow >=2.6.1`** (the first secure stream-enabled version suggested by Snyk).  
  - Requires n8n with community nodes enabled (recommended `>=2.x`).  
  - Uses only built-in n8n dependencies, so it is Cloud-compatible.

  ## Usage

  ### Publishing media (Image / Reels / Stories)

  1. Add the **Instagram** node to your workflow and select one of the resources (`Image` / `Reels` / `Stories`).  
  2. Provide the Instagram Business Account ID (the `Node` parameter), media URL and caption.  
  3. The node first creates the media container, polls Graph API until processing completes, then triggers `media_publish`.  
  4. For long-running uploads (large videos), the node uses robust polling and retry logic and surfaces progress via the n8n execution logs (for example, when publishing Reels or Trial Reels).  
  5. Handle any errors returned by the API (rate limits, permissions, validation) via the node’s error output or `Continue On Fail`.

  ### Publishing carousel posts (Carousel)

  1. Add the **Instagram** node and set **Resource** to `Carousel`, **Operation** to `Publish`.  
  2. Provide:
     - `Node` – the IG User ID to publish from.  
     - `Graph API Version` – for example `v24.0`.  
     - `Caption` – the carousel caption.  
     - `Carousel Media` – 2–10 items, each with:
       - `Media Type` – `Image` or `Video`.  
       - `Image URL` or `Video URL` – public URLs Meta can fetch.  
  3. The node:
     - Creates one child container per image/video (`is_carousel_item=true` for each).  
     - Waits for each child container to become ready.  
     - Creates a carousel container (`media_type=CAROUSEL`, `children=<child_ids>`) with the caption.  
     - Waits for the carousel container to be ready, then calls `/{ig-user-id}/media_publish`.  
  4. Errors during any step are annotated with **which child item failed** (for example, “Carousel item 3 (video)…”), making it easier to debug problematic URLs.

  ### Comment moderation and private replies (Comments)

  1. Add the **Instagram** node and set **Resource** to `Comments`.  
  2. Choose an **Operation**:
     - `List` – fetch comments for a given media ID.  
     - `Hide` / `Unhide` / `Delete` – moderate a specific comment by its comment ID.  
     - `Disable Comments` / `Enable Comments` – toggle comments on a media object by its media ID.  
     - `Send Private Reply` – send a private reply message to a commenter using their comment ID.  
  3. Provide the required IDs:
     - `Media ID` for listing comments or enabling/disabling comments.  
     - `Comment ID` for hide/unhide/delete/private reply operations.  
  4. For **Send Private Reply**, also fill in:
     - `Node` – the Instagram professional account ID that owns the commented media.  
     - `Message` – the private reply text that will be sent to the commenter’s inbox/request folder (subject to the 7‑day and messaging window rules defined by Meta).  

  ### Reading IG User profile and media (IG User)

  1. Add the **Instagram** node and set **Resource** to `IG User`.  
  2. Choose an **Operation**:
     - `Get` – fetch basic profile information for an Instagram Business/Creator account (username, name, bio, website, media_count, followers/follows, profile picture URL).  
     - `Get Media` – list media owned by that account, including media type, URLs, caption, permalink, timestamp and username.  
  3. Provide:
     - `Node` – the IG User ID of the professional account you want to read (or `me` if your credential token belongs to that account).  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  

  ### Searching hashtags and fetching hashtag media (IG Hashtag)

  1. Add the **Instagram** node and set **Resource** to `IG Hashtag`.  
  2. Choose an **Operation**:
     - `Search` – look up a hashtag by name and get its global hashtag ID.  
     - `Get Recent Media` – get the most recently published media tagged with a hashtag.  
     - `Get Top Media` – get the most popular media tagged with a hashtag.  
  3. For **Search**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag Name` – the hashtag name, without `#`.  
  4. For **Get Recent Media** / **Get Top Media**, provide:
     - `Node` – the IG User ID performing the query.  
     - `Hashtag ID` – the ID returned from the search operation.  
     - `Return All` / `Limit` – choose whether to fetch all available media (within a safety cap) or only up to a limit.  

  ### Sending direct messages (Messaging)

  1. Add the **Instagram** node and set **Resource** to `Messaging`.  
  2. Choose **Operation** `Send Message`.  
  3. Provide:
     - `Node` – the IG professional account ID that will send the message.  
     - `Graph API Version` – the Graph version to use (for example `v24.0`).  
     - `Recipient IG User ID` – the Instagram-scoped user ID (IGSID) of the recipient, typically obtained from Messaging webhook events.  
     - `Message Text` – the text body of the direct message.  

  ### Token exchange, refresh and `/me` (Auth)

  1. Add the **Instagram** node and set **Resource** to `Auth`.  
  2. Choose an **Operation**:
     - `Exchange Access Token` – exchange a **short-lived** Instagram User access token for a **long-lived** token.  
     - `Refresh Access Token` – refresh an existing long-lived token using the Instagram Platform refresh endpoint.  
     - `Get Me` – call the Graph API `/me` endpoint using the `instagramApi` credential’s access token.  
  3. For **Exchange Access Token**, provide:
     - `Short-Lived Access Token` – the short-lived token from your login flow.  
     - `App Secret` – the Instagram App Secret from your Meta App Dashboard.  
  4. For **Refresh Access Token**, optionally provide:
     - `Access Token` – the long-lived token to refresh. Leave empty to use the token from the credential.  
  5. For **Get Me**, the node uses a fixed, versioned `/me` URL under the hood and does **not** depend on any UI parameters, so older workflows remain compatible.

  ### Getting the Instagram account for a Facebook Page (Page)

  1. Add the **Instagram** node and set **Resource** to `Page`, **Operation** to `Get Instagram Account`.  
  2. Provide:
     - `Graph API Version` – for example `v24.0`.  
     - `Page ID` – the Facebook Page ID that is linked to your Instagram professional account.  
  3. The node calls:
     - `GET /{page-id}?fields=instagram_business_account`
     and returns the `instagram_business_account` object (including the Instagram User ID) so you can feed it into other resources (Image/Reels/Stories/Carousel/IG User).

  ### Trial Reels (Reels with `trial_params`)

  1. Add the **Instagram** node and set **Resource** to `Reels`, **Operation** to `Publish`.  
  2. Under **Additional Fields**, set **Trial Reel – Graduation Strategy**:
     - `MANUAL` – you will decide in the Instagram app when (or if) to graduate the trial reel.  
     - `SS_PERFORMANCE` – Instagram will automatically graduate the trial reel if it performs well.  
  3. The node sends a `trial_params` JSON object in the create-container request, as documented in the IG User Media reference.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)  
  * [Instagram Graph API - Publishing](https://developers.facebook.com/docs/instagram-api/reference/ig-user/media)  
  * [Video/Reels publishing guide](https://developers.facebook.com/docs/instagram-api/guides/content-publishing/reels/)  
  * [Comment Moderation](https://developers.facebook.com/docs/instagram-platform/comment-moderation)  
  * [Private Replies](https://developers.facebook.com/docs/instagram-platform/private-replies)  
  * [IG User](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user)  
  * [IG Hashtag Search](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag-search/)  
  * [IG Hashtag Recent Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/recent-media/)  
  * [IG Hashtag Top Media](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-hashtag/top-media/)  
  * [Instagram Messaging API](https://developers.facebook.com/docs/messenger-platform/instagram/features/)  
  * [Instagram Platform Access Token](https://developers.facebook.com/docs/instagram-platform/reference/access_token/)  
  * [Instagram Platform Refresh Access Token](https://developers.facebook.com/docs/instagram-platform/reference/refresh_access_token/)  
  * [Instagram Platform /me](https://developers.facebook.com/docs/instagram-platform/reference/me/)  
  * [Webhooks from Meta (getting started)](https://developers.facebook.com/docs/graph-api/webhooks/getting-started)  
  * [Instagram webhook reference](https://developers.facebook.com/docs/graph-api/webhooks/reference/instagram)

  ## Version history

  | Version | Notes |
  | --- | --- |
  | 3.1.1 | Fixes overlapping description text in the node UI; documentation/layout-only cleanup with no runtime behavior changes. |
  | 3.1.0 | Sets `skipSignatureVerification` to `true` by default for the Instagram Trigger node and ensures webhook executions are correctly registered. |
  | 3.0.0 | Introduces the Instagram Trigger node for webhook-based events (comments, messages, mentions, story insights) and updates underlying dependencies. |
  | 2.6.2 | Documentation-only release. Adds or updates `CONTRIBUTING.md` contributor guidance and refreshes this README to reflect recent changes; does not modify runtime behavior or node functionality. |
  | 2.6.1 | Patch release that keeps all execution-time, polling and error-reporting improvements from 2.6.0 and updates docs/readme to reflect the current behavior and supported resources. |
  | 2.6.0 | Shortens polling intervals across resources, adds general execution time optimizations, introduces URL validation before making Graph API calls, and adds more detailed error messages to make debugging easier. |
  | 2.5.4 | Further shortens the container health polling interval in the **Reels** resource to reduce average execution time when publishing videos. |
  | 2.5.3 | Adds `CODE_OF_CONDUCT.md` and `LICENSE`. This is a documentation/compliance update and does not change runtime behavior. |
  | 2.5.2 | Bumps the required `n8n-workflow` peer dependency to `>=2.6.1` to address security advisories (arbitrary file upload, RCE, prototype pollution, etc.) and updates the README to describe the latest features. |
  | 2.5.1 | Introduces the `Page` resource to retrieve the connected Instagram Business/Creator account for a Facebook Page and adds the **Trial Reel – Graduation Strategy** option for Reels (via `trial_params`), alongside the first stable release of Carousel publishing, extended tagging options, and streaming-style progress messages. |
  | 2.4.0 | Adds `IG Hashtag` (search, recent media, top media), `Messaging` (send DMs), and `Auth` helpers for token exchange/refresh and `/me`. |
  | 2.3.0 | Adds `Comments` resource with comment moderation (list/hide/unhide/delete, enable/disable comments) and **Private Replies** support, and an `IG User` resource for reading profile data and listing media. |
  | 2.2.0 | Improves publishing UX and adds alt text, location ID, user tags, and product tags support for media publishing. |
  | 2.1.0 | Stable release of Instagram publishing (Image/Reels/Stories) using the container → publish flow with robust polling and error handling. |
  | 0.1.0 | Initial release with Image, Reels and Stories publishing & built-in container polling. |

ai_documentation_summary:
  {"purpose":"This n8n node package enables publishing media, managing comments, sending DMs, and reacting to real-time events on Instagram Business and Creator accounts via the Facebook/Instagram Graph API.","capabilities":["Publish single images with captions, alt text, location, and tags","Publish Reels and Stories with product tags and trial support","Publish carousels (albums) with up to 10 media items","List, hide, delete, and moderate comments on media","Send private replies to commenters","Read profile data and list media for IG User accounts","Search hashtags and fetch top or recent media","Send direct messages (DMs) to users","Fetch connected Instagram accounts from Facebook Page IDs","Manage authentication tokens (short-lived to long-lived exchange)"],"authentication":"Long-lived Facebook Graph API user access token with specific scopes (instagram_basic, pages_show_list, instagram_content_publish, pages_read_engagement, instagram_manage_comments); Webhook triggers require Meta App Secret.","commonUseCases":["Automated social media posting schedules for images, reels, and carousels","Automated comment moderation and private replies","Real-time monitoring and workflow triggers for new comments or messages","Hashtag research and content discovery","Direct messaging automation for customer engagement"],"limitations":["Requires Instagram Business or Creator account connected to a Facebook Page","Webhook triggers require manual configuration in Meta App Dashboard","Carousel publishing requires handling container polling and child container creation","Reels and Stories require container polling before publishing"],"relatedNodes":["n8n Webhook","n8n Facebook","n8n HTTP Request"]}


