# nodes

node_type: n8n-nodes-yourang.yourang
package_name: n8n-nodes-yourang
display_name: Yourang
description: Interact with yourang.ai - 24/7 AI phone assistant for calls, contacts, and events
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: reddoaksrl
author_github_url: https://github.com/reddoaksrl/
npm_package_name: n8n-nodes-yourang
npm_version: 0.10.0
community_fetched_at: 2026-07-14T14:40:34.180Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "callHistory",
      "options": [
        {
          "name": "Agent",
          "value": "agent",
          "description": "Retrieve and manage AI agents"
        },
        {
          "name": "Agent Tool",
          "value": "agentTool",
          "description": "Manage tools available for an agent"
        },
        {
          "name": "Call History",
          "value": "callHistory",
          "description": "Retrieve and manage call history records"
        },
        {
          "name": "Campaign",
          "value": "campaign",
          "description": "Manage and control outbound call campaigns"
        },
        {
          "name": "Catalogue",
          "value": "catalogue",
          "description": "Manage product catalogues"
        },
        {
          "name": "Catalogue Item",
          "value": "catalogueItem",
          "description": "Manage catalogue items and products"
        },
        {
          "name": "Contact",
          "value": "contact",
          "description": "Manage customer contacts and information"
        },
        {
          "name": "Contact List",
          "value": "contactList",
          "description": "Manage contact lists and their members"
        },
        {
          "name": "Event",
          "value": "event",
          "description": "Manage calendar events and appointments"
        },
        {
          "name": "Order",
          "value": "order",
          "description": "Retrieve and update customer orders"
        },
        {
          "name": "Wallet",
          "value": "wallet",
          "description": "Retrieve wallet balance and transactions"
        },
        {
          "name": "Workflow",
          "value": "workflow",
          "description": "Manage and execute workflows"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Call",
          "value": "get",
          "action": "Get a call",
          "description": "Get details of a specific call including transcript"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calls",
          "description": "Get many call history records with optional filters"
        },
        {
          "name": "Get Transcript",
          "value": "getTranscript",
          "action": "Get call transcript",
          "description": "Get the transcript for a specific call"
        },
        {
          "name": "Get Summary",
          "value": "getSummary",
          "action": "Get call summary",
          "description": "Get AI-generated summary for a specific call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "callHistory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "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": "Delete by Phone",
          "value": "deleteByPhone",
          "action": "Delete contact by phone",
          "description": "Delete a contact by phone number"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get details of a specific contact"
        },
        {
          "name": "Get by Phone",
          "value": "getByPhone",
          "action": "Get contact by phone",
          "description": "Get a contact by phone number"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        },
        {
          "name": "Update by Phone",
          "value": "updateByPhone",
          "action": "Update contact by phone",
          "description": "Update a contact by phone number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an event",
          "description": "Delete an event"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "description": "Get details of a specific event"
        },
        {
          "name": "Get by Date",
          "value": "getByDate",
          "action": "Get events by date",
          "description": "Get events for a specific date"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many events",
          "description": "Get events grouped by date"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an event",
          "description": "Update an existing event"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update event status",
          "description": "Approve or reject an event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an agent",
          "description": "Get details of a specific agent"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many agents",
          "description": "Get many agents for the authenticated organization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a tool",
          "description": "Get detailed configuration for a specific tool"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tools",
          "description": "Retrieve many tools available for a specific agent"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tool",
          "description": "Update configuration for a specific agent tool"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agentTool"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Execute",
          "value": "execute",
          "action": "Execute a workflow",
          "description": "Execute a workflow"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get workflow details",
          "description": "Get workflow details"
        },
        {
          "name": "Get Execution Details",
          "value": "getExecutionDetails",
          "action": "Get execution details",
          "description": "Get details of a specific workflow execution"
        },
        {
          "name": "Get Executions",
          "value": "getExecutions",
          "action": "List workflow executions",
          "description": "List workflow executions"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "List all workflows",
          "description": "List many workflows"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflow"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a campaign",
          "description": "Get details of a specific campaign"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many campaigns",
          "description": "Get many campaigns for the authenticated organization"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get campaign stats",
          "description": "Get statistics for a specific campaign"
        },
        {
          "name": "Pause",
          "value": "pause",
          "action": "Pause a campaign",
          "description": "Pause a running campaign"
        },
        {
          "name": "Resume",
          "value": "resume",
          "action": "Resume a campaign",
          "description": "Resume a paused campaign"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start a campaign",
          "description": "Start a campaign"
        },
        {
          "name": "Stop",
          "value": "stop",
          "action": "Stop a campaign",
          "description": "Stop a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a catalogue",
          "description": "Create a catalogue"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a catalogue",
          "description": "Delete a catalogue"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a catalogue",
          "description": "Get details of a specific catalogue"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many catalogues",
          "description": "Get many catalogues for the authenticated organization"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a catalogue",
          "description": "Update an existing catalogue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "catalogue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Assign",
          "value": "assign",
          "action": "Assign catalogue items",
          "description": "Assign items to a catalogue or unassign them"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a catalogue item",
          "description": "Create a catalogue item"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a catalogue item",
          "description": "Delete a catalogue item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a catalogue item",
          "description": "Get details of a specific catalogue item"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many catalogue items",
          "description": "Get many catalogue items for the authenticated organization"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a catalogue item",
          "description": "Update an existing catalogue item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "catalogueItem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Contacts",
          "value": "addContacts",
          "action": "Add contacts to a contact list",
          "description": "Add contacts to a contact list by ID or phone number"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact list",
          "description": "Get details of a specific contact list"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts of a contact list",
          "description": "Get the contacts belonging to a contact list"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact lists",
          "description": "Get many contact lists"
        },
        {
          "name": "Remove Contacts",
          "value": "removeContacts",
          "action": "Remove contacts from a contact list",
          "description": "Remove contacts from a contact list by ID or phone number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get an order",
          "description": "Get details of a specific order"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many orders",
          "description": "Get many orders"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an order",
          "description": "Update an order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "order"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get the wallet",
          "description": "Get the wallet snapshot for the authenticated organization"
        },
        {
          "name": "Get Many Transactions",
          "value": "getTransactions",
          "action": "Get many wallet transactions",
          "description": "Get many wallet transactions for the authenticated organization"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "wallet"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Call",
      "value": "get",
      "action": "Get a call",
      "description": "Get details of a specific call including transcript",
      "resource": "callHistory"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calls",
      "description": "Get many call history records with optional filters",
      "resource": "callHistory"
    },
    {
      "name": "Get Transcript",
      "value": "getTranscript",
      "action": "Get call transcript",
      "description": "Get the transcript for a specific call",
      "resource": "callHistory"
    },
    {
      "name": "Get Summary",
      "value": "getSummary",
      "action": "Get call summary",
      "description": "Get AI-generated summary for a specific call",
      "resource": "callHistory"
    },
    {
      "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": "Delete by Phone",
      "value": "deleteByPhone",
      "action": "Delete contact by phone",
      "description": "Delete a contact by phone number",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get details of a specific contact",
      "resource": "contact"
    },
    {
      "name": "Get by Phone",
      "value": "getByPhone",
      "action": "Get contact by phone",
      "description": "Get a contact by phone number",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "Get many contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Update by Phone",
      "value": "updateByPhone",
      "action": "Update contact by phone",
      "description": "Update a contact by phone number",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an event",
      "description": "Delete an event",
      "resource": "event"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an event",
      "description": "Get details of a specific event",
      "resource": "event"
    },
    {
      "name": "Get by Date",
      "value": "getByDate",
      "action": "Get events by date",
      "description": "Get events for a specific date",
      "resource": "event"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many events",
      "description": "Get events grouped by date",
      "resource": "event"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an event",
      "description": "Update an existing event",
      "resource": "event"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update event status",
      "description": "Approve or reject an event",
      "resource": "event"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an agent",
      "description": "Get details of a specific agent",
      "resource": "agent"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many agents",
      "description": "Get many agents for the authenticated organization",
      "resource": "agent"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a tool",
      "description": "Get detailed configuration for a specific tool",
      "resource": "agentTool"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tools",
      "description": "Retrieve many tools available for a specific agent",
      "resource": "agentTool"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tool",
      "description": "Update configuration for a specific agent tool",
      "resource": "agentTool"
    },
    {
      "name": "Execute",
      "value": "execute",
      "action": "Execute a workflow",
      "description": "Execute a workflow",
      "resource": "workflow"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get workflow details",
      "description": "Get workflow details",
      "resource": "workflow"
    },
    {
      "name": "Get Execution Details",
      "value": "getExecutionDetails",
      "action": "Get execution details",
      "description": "Get details of a specific workflow execution",
      "resource": "workflow"
    },
    {
      "name": "Get Executions",
      "value": "getExecutions",
      "action": "List workflow executions",
      "description": "List workflow executions",
      "resource": "workflow"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "List all workflows",
      "description": "List many workflows",
      "resource": "workflow"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a campaign",
      "description": "Get details of a specific campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many campaigns",
      "description": "Get many campaigns for the authenticated organization",
      "resource": "campaign"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get campaign stats",
      "description": "Get statistics for a specific campaign",
      "resource": "campaign"
    },
    {
      "name": "Pause",
      "value": "pause",
      "action": "Pause a campaign",
      "description": "Pause a running campaign",
      "resource": "campaign"
    },
    {
      "name": "Resume",
      "value": "resume",
      "action": "Resume a campaign",
      "description": "Resume a paused campaign",
      "resource": "campaign"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start a campaign",
      "description": "Start a campaign",
      "resource": "campaign"
    },
    {
      "name": "Stop",
      "value": "stop",
      "action": "Stop a campaign",
      "description": "Stop a campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a catalogue",
      "description": "Create a catalogue",
      "resource": "catalogue"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a catalogue",
      "description": "Delete a catalogue",
      "resource": "catalogue"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a catalogue",
      "description": "Get details of a specific catalogue",
      "resource": "catalogue"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many catalogues",
      "description": "Get many catalogues for the authenticated organization",
      "resource": "catalogue"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a catalogue",
      "description": "Update an existing catalogue",
      "resource": "catalogue"
    },
    {
      "name": "Assign",
      "value": "assign",
      "action": "Assign catalogue items",
      "description": "Assign items to a catalogue or unassign them",
      "resource": "catalogueItem"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a catalogue item",
      "description": "Create a catalogue item",
      "resource": "catalogueItem"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a catalogue item",
      "description": "Delete a catalogue item",
      "resource": "catalogueItem"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a catalogue item",
      "description": "Get details of a specific catalogue item",
      "resource": "catalogueItem"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many catalogue items",
      "description": "Get many catalogue items for the authenticated organization",
      "resource": "catalogueItem"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a catalogue item",
      "description": "Update an existing catalogue item",
      "resource": "catalogueItem"
    },
    {
      "name": "Add Contacts",
      "value": "addContacts",
      "action": "Add contacts to a contact list",
      "description": "Add contacts to a contact list by ID or phone number",
      "resource": "contactList"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact list",
      "description": "Get details of a specific contact list",
      "resource": "contactList"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts of a contact list",
      "description": "Get the contacts belonging to a contact list",
      "resource": "contactList"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact lists",
      "description": "Get many contact lists",
      "resource": "contactList"
    },
    {
      "name": "Remove Contacts",
      "value": "removeContacts",
      "action": "Remove contacts from a contact list",
      "description": "Remove contacts from a contact list by ID or phone number",
      "resource": "contactList"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an order",
      "description": "Get details of a specific order",
      "resource": "order"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many orders",
      "description": "Get many orders",
      "resource": "order"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an order",
      "description": "Update an order",
      "resource": "order"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get the wallet",
      "description": "Get the wallet snapshot for the authenticated organization",
      "resource": "wallet"
    },
    {
      "name": "Get Many Transactions",
      "value": "getTransactions",
      "action": "Get many wallet transactions",
      "description": "Get many wallet transactions for the authenticated organization",
      "resource": "wallet"
    }
  ]

npm_readme:
  # n8n-nodes-yourang

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-yourang.svg)](https://www.npmjs.com/package/n8n-nodes-yourang)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)

  An [n8n](https://n8n.io/) community node to integrate [yourang.ai](https://yourang.ai) into your workflows. Automate call handling, contact management, appointment scheduling, and AI agent configuration directly from n8n.

  [yourang.ai](https://yourang.ai) is a 24/7 AI phone assistant that handles inbound and outbound calls, schedules appointments, collects customer data, and manages interactions automatically.

  ## Installation

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

  1. Open **Settings > Community Nodes** in your n8n instance
  2. Enter `n8n-nodes-yourang`
  3. Click **Install**

  ## Credentials

  1. Create an account at [app.yourang.ai](https://app.yourang.ai)
  2. Generate an API key from your dashboard
  3. In n8n, add new **Yourang API** credentials with your API key

  The default API base URL is `https://api.yourang.ai/v1`. See the full [API documentation](https://developers.yourang.ai) for details.

  ## Operations

  ### Call History

  | Operation | Description |
  |-----------|-------------|
  | Get Call | Retrieve details of a specific call |
  | Get Many | List calls with filters (type, status, direction, phone, contact) |
  | Get Transcript | Get the transcript for a specific call |
  | Get Summary | Get AI-generated summary for a call |

  ### Contact

  | Operation | Description |
  |-----------|-------------|
  | Create | Add a new contact (name, phone, email, address) |
  | Get | Retrieve a contact by ID |
  | Get by Phone | Retrieve a contact by phone number |
  | Get Many | List contacts with search and sort filters |
  | Update | Update a contact by ID |
  | Update by Phone | Update a contact by phone number |
  | Delete | Remove a contact by ID |
  | Delete by Phone | Remove a contact by phone number |

  ### Event

  | Operation | Description |
  |-----------|-------------|
  | Get | Get details of a specific event |
  | Get by Date | Get events for a specific date |
  | Get Many | Get events grouped by date range |
  | Update | Update an existing event |
  | Update Status | Approve or reject an event |
  | Delete | Delete an event |

  ### Agent

  | Operation | Description |
  |-----------|-------------|
  | Get | Get details of a specific AI agent |
  | Get Many | List agents for your organization |

  ### Agent Tool

  | Operation | Description |
  |-----------|-------------|
  | Get | Get configuration for a specific agent tool |
  | Get Many | List tools available for a specific agent |
  | Update | Update configuration for an agent tool |

  ### Workflow

  | Operation | Description |
  |-----------|-------------|
  | Get | Get workflow details |
  | Get Many | List workflows |
  | Execute | Execute a workflow |
  | Get Executions | List workflow executions |
  | Get Execution Details | Get details of a specific execution |

  ### Campaign

  | Operation | Description |
  |-----------|-------------|
  | Get | Get campaign details |
  | Get Many | List campaigns with status/search filters |
  | Get Stats | Get campaign statistics |
  | Pause | Pause a running campaign |
  | Resume | Resume a paused campaign |
  | Start | Start a campaign |
  | Stop | Stop a campaign |

  ### Catalogue

  | Operation | Description |
  |-----------|-------------|
  | Create | Create a catalogue, optionally with initial items |
  | Delete | Delete a catalogue (optionally preserving its items as standalone) |
  | Get | Get catalogue details |
  | Get Many | List catalogues with search/sort filters |
  | Update | Update catalogue name or description |

  ### Catalogue Item

  | Operation | Description |
  |-----------|-------------|
  | Assign | Assign items to a catalogue, or unassign them (standalone) |
  | Create | Create a catalogue item or standalone item |
  | Delete | Delete an item |
  | Get | Get item details |
  | Get Many | List items with catalogue/search/sort/standalone filters |
  | Update | Update item fields (name, price, quantity, ...) |

  ### Contact List

  | Operation | Description |
  |-----------|-------------|
  | Add Contacts | Add contacts to a list by ID or phone number (optionally auto-creating missing contacts) |
  | Get | Get contact list details |
  | Get Contacts | List contacts in a contact list |
  | Get Many | List contact lists |
  | Remove Contacts | Remove contacts from a list by ID or phone number |

  ### Order

  | Operation | Description |
  |-----------|-------------|
  | Get | Get order details |
  | Get Many | List orders with status/date/sort filters |
  | Update | Update order status, notes, or refusal reason |

  ### Wallet

  | Operation | Description |
  |-----------|-------------|
  | Get | Get the wallet snapshot (balance) |
  | Get Many Transactions | List wallet transactions with type/date filters |

  ## Trigger

  The **Yourang Trigger** node starts a workflow when yourang emits an event, replacing the
  manual `Webhook` + `Code` parsing pattern. Select one or more events and the node receives a
  typed, signed payload.

  | Event | Fires when |
  |-------|------------|
  | Call Ended | A call finished and its record was persisted |
  | Call Summary Ready | The async summary of a call is ready |
  | Appointment Booked | An appointment/event was created (CONFIRMED) |
  | Appointment Updated | An appointment was rescheduled/approved/rejected |
  | Appointment Cancelled | An appointment was cancelled |
  | Contact Created | A new contact (lead) was created |
  | Call Transcript Ready | The transcript of a call is available |
  | Order Created | A new order was created |
  | Order Status Changed | An order changed status (confirmed/completed/cancelled/refused) |
  | Dialer Contact Completed | A campaign contact reached a terminal outcome |
  | Dialer Campaign Completed | A dialer campaign finished processing all contacts |

  On activation the node registers a subscription on yourang
  (`POST {baseUrl}/webhooks`, e.g. `https://api.yourang.ai/v1/webhooks`) with the workflow's
  webhook URL; the platform returns a one-time signing secret that the node stores. On
  deactivation it removes the subscription. Incoming requests are verified against the
  `X-Webhook-Signature` (HMAC-SHA256) header and deduplicated by `event_id`.

  **Payload envelope**

  ```json
  {
    "event": "call.ended",
    "event_id": "uuid",
    "occurred_at": "ISO-8601",
    "organization_id": "uuid",
    "data": { }
  }
  ```

  > Requires the platform outbound-webhook API. Until it ships, turn off **Auto-Register
  > Subscription** in the node options to test by POSTing the envelope to the webhook URL
  > directly.

  ## Example Use Cases

  - **CRM Sync** -- Push call history and contact data to your CRM after each call
  - **Appointment Automation** -- Create, update, and manage events from external calendars
  - **Call Analytics** -- Collect transcripts and AI summaries for reporting dashboards
  - **Agent Configuration** -- Manage AI agent tools and workflows programmatically

  ## Compatibility

  - **Minimum n8n version**: 1.0.0
  - **Node.js**: >= 20.15

  ## Resources

  - [yourang.ai](https://yourang.ai) -- product website
  - [Yourang Dashboard](https://app.yourang.ai) -- Manage your account and API keys
  - [API Documentation](https://developers.yourang.ai) -- Full API reference
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/) -- n8n docs

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Integrates yourang.ai, a 24/7 AI phone assistant, into n8n workflows to automate call handling, contact management, appointment scheduling, and AI agent configuration.","capabilities":["Retrieve call details, transcripts, and AI-generated summaries","List and filter calls by type, status, direction, phone, or contact","Create, read, update, and delete contacts with name, phone, email, and address","Search and sort contacts by phone number","List and execute single or batch actions (up to 50 numbers or contacts)","Retrieve action and batch execution history with details","Manage events including creation, updates, status approval/rejection, and deletion","Query events by date or date range","List and configure AI agents and their tools","Manage workflows including listing, execution, and execution details"],"authentication":"API key required (generated from app.yourang.ai dashboard)","commonUseCases":["CRM Sync - Push call history and contact data to external CRMs","Outbound Campaigns - Trigger batch actions from spreadsheets or databases","Appointment Automation - Create and manage events from external calendars","Call Analytics - Collect transcripts and summaries for reporting","Agent Configuration - Manage AI agent tools and workflows programmatically"],"limitations":["Batch action execution is limited to 50 phone numbers or 50 contact IDs per batch","Minimum n8n version required is 1.0.0","Requires Node.js version 20.15 or higher"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.webhook","n8n-nodes-base.email","n8n-nodes-base.credential"]}


node_type: n8n-nodes-honowa.honoWa
package_name: n8n-nodes-honowa
display_name: HonoWA
description: Interact with HonoWA — Unofficial WhatsApp API for multi-session messaging, broadcast, and media.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ardianryan
author_github_url: https://github.com/ardianryan/
npm_package_name: n8n-nodes-honowa
npm_version: 0.1.21
community_fetched_at: 2026-07-14T14:40:34.181Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "AI",
          "value": "ai",
          "description": "AI-powered chat and image generation"
        },
        {
          "name": "Broadcast",
          "value": "broadcast",
          "description": "Send bulk messages to multiple contacts"
        },
        {
          "name": "Message",
          "value": "message",
          "description": "Send messages to contacts or groups"
        },
        {
          "name": "Session",
          "value": "session",
          "description": "Manage WhatsApp sessions"
        },
        {
          "name": "Status",
          "value": "status",
          "description": "Manage WhatsApp Status updates"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a session",
          "description": "Logout and delete a session"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get session status",
          "description": "Get status of a specific session"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List all sessions",
          "description": "Get all WhatsApp sessions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "session"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendText",
      "options": [
        {
          "name": "Send Group",
          "value": "sendGroup",
          "action": "Send a group message",
          "description": "Send a message to a WhatsApp group"
        },
        {
          "name": "Send Media (Binary)",
          "value": "sendMediaBinary",
          "action": "Send media from binary data",
          "description": "Send a file from n8n binary data"
        },
        {
          "name": "Send Media (URL)",
          "value": "sendMediaUrl",
          "action": "Send media from URL",
          "description": "Send media from a URL"
        },
        {
          "name": "Send Text",
          "value": "sendText",
          "action": "Send a text message",
          "description": "Send a text message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendBulkText",
      "options": [
        {
          "name": "Send Bulk Media (Binary)",
          "value": "sendBulkMediaBinary",
          "action": "Send bulk media from binary data",
          "description": "Send media to multiple numbers from n8n binary data"
        },
        {
          "name": "Send Bulk Media (URL)",
          "value": "sendBulkMediaUrl",
          "action": "Send bulk media from url",
          "description": "Send media to multiple numbers from a URL"
        },
        {
          "name": "Send Bulk Text",
          "value": "sendBulkText",
          "action": "Send bulk text messages",
          "description": "Send text message to multiple phone numbers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "broadcast"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Chat",
          "value": "chat",
          "action": "Chat with ai",
          "description": "Chat with AI (OpenAI, Gemini, Claude)"
        },
        {
          "name": "Delete History",
          "value": "deleteHistory",
          "action": "Delete ai history",
          "description": "Delete your chat history"
        },
        {
          "name": "Generate Image",
          "value": "image",
          "action": "Generate an ai image",
          "description": "Generate image from prompt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ai"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a status",
          "description": "Create a new WhatsApp status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "status"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a session",
      "description": "Logout and delete a session",
      "resource": "session"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get session status",
      "description": "Get status of a specific session",
      "resource": "session"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List all sessions",
      "description": "Get all WhatsApp sessions",
      "resource": "session"
    },
    {
      "name": "Send Group",
      "value": "sendGroup",
      "action": "Send a group message",
      "description": "Send a message to a WhatsApp group",
      "resource": "message"
    },
    {
      "name": "Send Media (Binary)",
      "value": "sendMediaBinary",
      "action": "Send media from binary data",
      "description": "Send a file from n8n binary data",
      "resource": "message"
    },
    {
      "name": "Send Media (URL)",
      "value": "sendMediaUrl",
      "action": "Send media from URL",
      "description": "Send media from a URL",
      "resource": "message"
    },
    {
      "name": "Send Text",
      "value": "sendText",
      "action": "Send a text message",
      "description": "Send a text message",
      "resource": "message"
    },
    {
      "name": "Send Bulk Media (Binary)",
      "value": "sendBulkMediaBinary",
      "action": "Send bulk media from binary data",
      "description": "Send media to multiple numbers from n8n binary data",
      "resource": "broadcast"
    },
    {
      "name": "Send Bulk Media (URL)",
      "value": "sendBulkMediaUrl",
      "action": "Send bulk media from url",
      "description": "Send media to multiple numbers from a URL",
      "resource": "broadcast"
    },
    {
      "name": "Send Bulk Text",
      "value": "sendBulkText",
      "action": "Send bulk text messages",
      "description": "Send text message to multiple phone numbers",
      "resource": "broadcast"
    },
    {
      "name": "Chat",
      "value": "chat",
      "action": "Chat with ai",
      "description": "Chat with AI (OpenAI, Gemini, Claude)",
      "resource": "ai"
    },
    {
      "name": "Delete History",
      "value": "deleteHistory",
      "action": "Delete ai history",
      "description": "Delete your chat history",
      "resource": "ai"
    },
    {
      "name": "Generate Image",
      "value": "image",
      "action": "Generate an ai image",
      "description": "Generate image from prompt",
      "resource": "ai"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a status",
      "description": "Create a new WhatsApp status",
      "resource": "status"
    }
  ]

npm_readme:
  <div align="center">
    <img src="https://static-r2-apac.ppti.me/uploads/logo/logo.png" alt="HonoWA" width="150" />
    <h1>n8n-nodes-honowa</h1>
    <p><strong>WhatsApp API Integration (HonoWA) for n8n</strong></p>
  </div>

  This package allows you to connect your **n8n** workflows with a **HonoWA** server (Unofficial WhatsApp API). You can manage sessions, send text messages, media, and broadcasts directly from n8n.

  ---

  ## 🚀 Key Features

  - **Simplified Session Management**: Set your Session ID once in the Credentials and use it across all nodes.
  - **Message Operations**: Send Text, Media (via URL), and Media (via Binary/File upload).
  - **Group Messaging**: Send messages to WhatsApp Groups using Group IDs.
  - **Broadcast Engine**: Send bulk messages to multiple numbers with automatic delay settings.
  - **Session Operations**: Check session status or logout/delete sessions directly from your workflow.
  - **AI Ready**: Supports `usableAsTool` feature for use with AI Agents in n8n.

  ---

  ## 📦 Installation

  ### Community Nodes (Recommended)
  In your n8n instance, go to **Settings > Community Nodes > Install a node** and enter:
  `n8n-nodes-honowa`

  ### Manual Installation (Development)
  If you want to build it yourself:
  1. Clone this repository.
  2. Run `npm install`.
  3. Run `npm run build`.
  4. Link it to your local n8n instance.

  ---

  ## 🔐 Credential Configuration

  This node uses an **API Key** for authentication.

  1. Open your HonoWA Dashboard.
  2. Go to **Settings** and copy your **API Key**.
  3. In n8n, create a new credential of type **HonoWA API**:
     - **Base URL**: Your HonoWA server URL (e.g., `https://wa.yourdomain.com`).
     - **API Key**: Enter the copied API Key.
     - **Session ID**: Enter the WhatsApp Session ID you want to use (e.g., `session1`).

  ---

  ## 🛠️ How to Use

  ### Global Session ID
  Since version 0.1.13, the **Session ID** is configured in the Credentials. This means you don't have to select or type the Session ID in every node. One credential represents one active WhatsApp session.

  ### Sending Files (Binary)
  If you have a file from a previous node (e.g., *Read Binary File* or *HTTP Request*), choose Operation: **Send Media (Binary)**. Enter the name of the binary property (default: `data`).

  ### Secure Broadcasting
  Use Operation: **Send Bulk**. Enter a comma-separated list of phone numbers. By default, the delay is set to **5000ms** (5 seconds) to minimize the risk of being banned by WhatsApp.

  ---

  ## 📜 License
  [MIT](LICENSE.md)

  ---

  <div align="center">
    Developed with ❤️ by <a href="https://github.com/ardianryan">Ryan Ardian</a>
  </div>

ai_documentation_summary:
  {"purpose":"This node enables n8n workflows to interact with the HonoWA unofficial WhatsApp API for session management, messaging, and media handling.","capabilities":["Send text messages","Send media via URL","Send media via binary/file upload","Send messages to WhatsApp groups","Send bulk broadcasts with configurable delays","Check session status","Delete or logout sessions","Configure session ID globally via credentials"],"authentication":"API Key required (Base URL and API Key in credentials)","commonUseCases":["Automated customer support via WhatsApp","Bulk marketing campaigns and broadcasts","Automated file sharing and media distribution","Group chat management and announcements"],"limitations":["Requires an external HonoWA server instance","Session ID must be pre-configured in credentials","Broadcasts have a default 5-second delay to prevent bans"],"relatedNodes":["HTTP Request","Read Binary File","Wait Node"]}


node_type: n8n-nodes-talentir.talentir
package_name: n8n-nodes-talentir
display_name: Talentir
description: Interact with the Talentir creator economy platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: johanneskares
author_github_url: https://github.com/Talentir/
npm_package_name: n8n-nodes-talentir
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:34.182Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "payout",
      "options": [
        {
          "name": "Payout",
          "value": "payout"
        },
        {
          "name": "Team",
          "value": "team"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a new payout",
          "routing": {
            "request": {
              "url": "/payout",
              "method": "POST"
            }
          },
          "description": "Create or update a new payout for team members"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payout"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get team information",
          "routing": {
            "request": {
              "url": "/team",
              "method": "GET"
            }
          },
          "description": "Retrieve team information for the authenticated team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "team"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a new payout",
      "routing": {
        "request": {
          "url": "/payout",
          "method": "POST"
        }
      },
      "description": "Create or update a new payout for team members",
      "resource": "payout"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get team information",
      "routing": {
        "request": {
          "url": "/team",
          "method": "GET"
        }
      },
      "description": "Retrieve team information for the authenticated team",
      "resource": "team"
    }
  ]

npm_readme:
  # n8n-nodes-talentir

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

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

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

  ## Installation

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

  ## Operations

  - **Payout**
      - Create a new payout for team members
  - **Team**
      - Get team information

  ## Credentials

  This node uses Bearer token authentication with your Talentir team's API key.

  ### Getting your API Key

  1. Log in to your Talentir account
  2. Navigate to your team settings
  3. Go to API settings
  4. Copy your API key
  5. In n8n, create a new Talentir API credential and paste your API key

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Talentir API documentation](https://www.talentir.com/api/v1)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to interact with the Talentir creator economy platform by managing payouts and retrieving team information.","capabilities":["Create new payouts for team members","Retrieve team information"],"authentication":"API key (Bearer token)","commonUseCases":["Automating creator economy payouts","Managing team member data in creator platforms"],"limitations":["Requires n8n version 1.60.0 or later","Limited to basic payout and team operations"],"relatedNodes":["n8n-nodes-core-cronTrigger","n8n-nodes-core-functionItem"]}


node_type: n8n-nodes-talentir.talentirTrigger
package_name: n8n-nodes-talentir
display_name: Talentir Trigger
description: Listen for Talentir webhook events
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: johanneskares
author_github_url: https://github.com/Talentir/
npm_package_name: n8n-nodes-talentir
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:34.183Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-talentir

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

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

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

  ## Installation

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

  ## Operations

  - **Payout**
      - Create a new payout for team members
  - **Team**
      - Get team information

  ## Credentials

  This node uses Bearer token authentication with your Talentir team's API key.

  ### Getting your API Key

  1. Log in to your Talentir account
  2. Navigate to your team settings
  3. Go to API settings
  4. Copy your API key
  5. In n8n, create a new Talentir API credential and paste your API key

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Talentir API documentation](https://www.talentir.com/api/v1)

ai_documentation_summary:
  {"purpose":"A community node that listens for Talentir webhook events and enables interaction with the Talentir API within n8n workflows.","capabilities":["Listen for Talentir webhook events","Create new payouts for team members","Retrieve team information"],"authentication":"API key (Bearer token) required","commonUseCases":["Automate payout creation for team members","Monitor team information changes via webhooks","Integrate Talentir payroll features into n8n automation workflows"],"limitations":["Limited to specific operations (payouts and team info) as per current node capabilities","Requires manual API key configuration in n8n credentials"],"relatedNodes":["n8n-nodes-talentir.talentirPayout","n8n-nodes-talentir.talentirTeam","n8n-nodes-webhook"]}


node_type: @learningsuite/n8n-nodes-learningsuite.learningSuiteTrigger
package_name: @learningsuite/n8n-nodes-learningsuite
display_name: LearningSuite Trigger
description: Interact with LearningSuite API (powered by agentur-systeme.de)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fabiomoretti
author_github_url: https://github.com/learningsuite/n8n-nodes-learningsuite.git
npm_package_name: @learningsuite/n8n-nodes-learningsuite
npm_version: 1.3.4
community_fetched_at: 2026-07-14T14:40:34.184Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-learningsuite

  ![n8n](https://img.shields.io/badge/n8n-2.17.2+-brightgreen)

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

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

  An n8n Community Node for the **LearningSuite API**, which allows you to seamlessly integrate your LearningSuite instance into n8n workflows.

  ## What is n8n?

  n8n is an easy-to-use tool that allows you to automate actions between different web apps, such as LearningSuite. Creating so-called "workflows" between apps automates many of the manual tasks. This can save you or your employees a tremendous amount of time.

  ## ⚖️ Legal Notice

  This community node uses the public LearningSuite API and is not affiliated with or sponsored by LearningSuite. All trademarks belong to their respective owners.

  **Note**: This is a community-developed node for the LearningSuite API. For official support, please contact LearningSuite directly.

  ## 🚀 Features

  - **15 resources** fully supported (Member, Course, Group, Bundle, Hub, Module, Community, Custom Fields, Popup, Webhook, Role, User, Team Member, AI, API Call)
  - **90 action endpoints** for maximum flexibility
  - **Instant trigger (webhook-based)** with 18 event types for real-time automation
  - **Polling trigger** with 11 event types for scheduled polling
  - **Flexible API call** resource for custom endpoints

  ## 📋 Supported Operations

  ### 👤 **Member** (20 operations)

  - Get by email, get by ID, get all, create, update, delete, find or create
  - Activate/deactivate, add/remove courses, add/remove bundles
  - Get courses, get course information, get member bundles
  - Get course progress, get module progress, get lesson progress, set course progress, reset course progress

  ### 📚 **Course** (7 operations)

  - Get published courses, get course modules, get course modules for member
  - Get course members, get course access requests, get course submissions, create lesson

  ### 👥 **Group** (12 operations)

  - Add bundles to group, add courses to group, add members to groups, add members to groups (summary)
  - Create group, delete group, find group by name, find or create group
  - Get group courses, get many, remove courses from group, remove members from groups

  ### 📦 **Bundle** (2 operations)

  - Get all, get bundle members

  ### 🏠 **Hub** (6 operations)

  - Get all, get templates, create, give hub access, remove hub access, get hub template variables

  ### 📖 **Module** (3 operations)

  - Get module lessons, get module sections, change module access for member

  ### 💬 **Community** (7 operations)

  - Assign badges to member, remove community badges from member
  - Get community areas, get community badges, get community forums, get community posts
  - Create community post comment

  ### 🔧 **Custom Fields** (14 operations)

  - Get cards, get cards (expanded), get categories, get definitions
  - Get field values, get store, get store values
  - Get profile by card, get profiles, get profiles (expanded)
  - Set field value, set multiple field values, update profile field
  - Upload file from URL

  ### 🎯 **Popup** (4 operations)

  - Get all, get popup, trigger popup for member, delete popup trigger

  ### 🔗 **Webhook** (5 operations)

  - Get/create/update/delete subscriptions, get sample data

  ### 👤 **Team Member** (3 operations)

  - Get many, get by email, get by ID

  ### 📢 **User** (1 operation)

  - Send push notification

  ### 🤖 **AI** (3 operations)

  - Get agent actions, get AI agents, RAG Chat

  ### 🛡️ **Role** (1 operation)

  - Get all

  ### 🛠️ **API Call** (1 operation)

  - Make a request (for any API calls)

  ## 🎣 Trigger Events

  The LearningSuite trigger supports the following events:

  ### ⚡ Instant Trigger Events (Webhook)

  - ✅ Community Post Commented
  - ✅ Agent Action Executed
  - ✅ Community Post Created
  - ✅ Community Post Moderated
  - ✅ Course Member Added
  - ✅ Course Progress Changed
  - ✅ Course Updated
  - ✅ Custom Field Value Changed
  - ✅ Custom Popup Interaction
  - ✅ Exam Completed
  - ✅ Exam Graded
  - ✅ Group User Access Changed
  - ✅ Lesson Completed
  - ✅ New Access Request
  - ✅ New Feedback Created
  - ✅ New Login
  - ✅ Submission Created
  - ✅ User Activation Status Changed

  ### ⏱️ Polling Trigger Events

  - ✅ Bundle Created
  - ✅ Community Area Created
  - ✅ Community Badge Created
  - ✅ Community Forum Created
  - ✅ Custom Field Card Created
  - ✅ Custom Popup Created
  - ✅ Group Created
  - ✅ Member Created
  - ✅ Member Not Logged In for More Than X Days
  - ✅ Team Member Created
  - ✅ Team Member Updated

  ## 💡 Use case examples

  ### Automated member management

  Automatically create new members from a list like in Google Sheets, saving you the step of manually creating users in LearningSuite.

  ### E-Commerce Integration

  Connect other tools like Copecart via webhook using n8n and sell your LearningSuite courses in your own online store.

  ### Lead Generation

  Link forms from your website and give users who complete the form automated access to information products in LearningSuite.

  ### Progress Monitoring

  Automatically monitor your participants' progress and send personalized reminders or congratulations.

  ## 🛠️ Installation

  ### Option 1: n8n Community Nodes (Recommended)

  1. Open your n8n instance

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

  3. Install: `n8n-nodes-learningsuite` or `@learningsuite/n8n-nodes-learningsuite`

  4. Restart n8n

  ### Option 2: Manual Installation

  #### A)

  ```bash
  # In your n8n project directory
  npm i @learningsuite/n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  #### B) Unscoped (Default)

  ```bash

  # In your n8n project directory
  npm install n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  ### Option 3: Docker

  ```bash

  # With Docker Environment Variable

  docker run -it --rm \

  --name n8n \

  -p 5678:5678 \

  -e N8N_CUSTOM_EXTENSIONS="/data/custom" \

  -v ~/.n8n:/data \

  docker.n8n.io/n8nio/n8n

  ```

  ## 🔐 Set up authentication

  ### Generate API key

  1. Log in to your **LearningSuite instance**

  2. Go to **Settings** → **Integrations**

  3. Click **"Generate API key"**

  4. Copy the generated API key

  ### Configure credentials in n8n

  1. Open n8n and Go to **Credentials**

  2. Click **"New Credential"**

  3. Search for **"LearningSuite API"**

  4. Fill in the following fields:

  - **API Key**: Your generated API key

  - **Base URL**: `https://api.learningsuite.io/api/v1` (default)

  5. Test the connection and save

  ## 📖 Usage

  ### Basic Member Operation

  ```

  1. Add a "LearningSuite" node

  2. Select Resource: "Member"

  3. Select Operation: "Get by Email"

  4. Enter the email address

  5. Execute the workflow

  ```

  ### Custom Field File Uploads

  The Custom Fields resource supports file, image, video, and audio custom fields.

  - Use **Set Field Value**, **Set Multiple Field Values**, or **Update Profile Field** when the file is available as n8n binary data.
  - Use **Upload File From URL** when LearningSuite should download a public file URL and append the returned file value to the selected custom field.
  - File fields support **File Value Mode**:
    - **Add**: append new file values and fail if the custom field limit would be exceeded
    - **Replace**: replace existing file values with the uploaded file values
    - **Replace if Limit Reached**: append while possible, otherwise replace existing file values
  - The node respects the LearningSuite file limits defined on the custom field, such as `maxFiles`, `maxImages`, `maxVideos`, and `maxAudios`.
  - For custom field cards with multiple profiles, use Profile ID, Profile Index, or Profile Name to target a specific profile. If the card does not allow multiple profiles, profile parameters are ignored and the default profile is used.

  ### ⚡ Instant Webhook Trigger Setup

  ```

  1. Add a "LearningSuite Trigger" node

  2. Select the desired event (e.g., "Lesson Completed")

  3. Configure optional filters

  4. Activate the workflow

  5. The webhook is automatically registered with LearningSuite

  ```

  ### ⏱️ Polling Trigger Setup

  ```

  1. Add a "LearningSuite Polling Trigger" node

  2. Select the desired event (e.g., "New Member")

  3. Configure optional filters

  4. Activate the workflow

  5. The polling trigger is automatically registered with LearningSuite

  ```

  ## 🔧 API Reference

  The node is based on the **LearningSuite API** and supports all publicly available endpoints.

  **Base URL**: `https://api.learningsuite.io/api/v1`

  **Authentication**: API key via `x-api-key` header

  Complete API documentation available at: [LearningSuite API Docs](https://api.learningsuite.io/api/v1/docs/)

  ## 🤝 Contributing

  We welcome contributions! Please note the following guidelines:

  ### Development Setup

  ```bash

  # Clone Repository

  git clone https://github.com/learningsuite/n8n-nodes-learningsuite.git

  cd n8n-nodes-learningsuite

  # Install Dependencies

  npm install

  # Compile TypeScript

  npm run build

  # Run Tests

  npm test

  ```

  ### Pull Request Guidelines

  1. **Fork** the repository

  2. Create a **feature branch** (`git checkout -b feature/amazing-feature`)

  3. **Commit** your changes (`git commit -m 'Add amazing feature'`)

  4. **Push** to the branch (`git push origin feature/amazing-feature`)

  5. Open a **Pull Request**

  ### Code Style

  - TypeScript for all new Features

  - Follow ESLint configuration

  - Add tests for new functionality

  - Update documentation

  ## 📝 Changelog

  ### Version 1.2.3 (current)

  #### Custom Fields File Uploads

  - ✅ Upload file from public URL

  - ✅ Binary uploads for file, image, video, and audio custom fields

  - ✅ File Value Mode: add, replace, and replace when the field limit is reached

  - ✅ Respect custom field file limits (`maxFiles`, `maxImages`, `maxVideos`, `maxAudios`)

  - ✅ Improved handling for custom field profile cards and default profiles

  ### Version 0.1.0 (2025-09-23)

  #### Initial Release

  - ✅ Full LearningSuite API integration

  - ✅ 15 resources with 90 action endpoints

  - ✅ Webhook triggers with 18 event types for real-time automation

  - ✅ Polling triggers with 11 event types

  - ✅ "Find-or-Create" logic for members and groups

  - ✅ Custom Fields resource with full CRUD support

  - ✅ Course progress management (get/set/reset)

  - ✅ Flexible parameter configuration

  - ✅ API call resource for custom endpoints

  ## 🛠️ Compatibility

  - **n8n Version**: 2.17.2+ (tested with latest)

  - **Node Version**: 20+

  - **TypeScript**: 5.0+

  ## 📄 License

  This project is licensed under the [MIT License].

  ## ❓ Support

  ### Report Issues

  For bugs or feature requests, please create a [GitHub Issue](https://github.com/learningsuite/n8n-nodes-learningsuite/issues).

  ### FAQ

  **Q: Can I use multiple LearningSuite instances?**

  A: Yes, simply create multiple credentials with different API keys and base URLs.

  **Q: Are all API endpoints supported?**

  A: The node covers all public API endpoints. For specific endpoints, use the "API Call" resource.

  **Q: How do I find my LearningSuite API base URL?**

  A: The default URL is `https://api.learningsuite.io/api/v1`. For custom domains, contact your LearningSuite administrator.

  ---

  ⭐ **Like this node?** Give us a star on GitHub!

  💡 **Feature request?** Open an issue - we're always open to improvements!

  ## 📋 Disclaimer

  This unofficial community node is not affiliated with, endorsed by, or sponsored by LearningSuite. It exclusively uses the publicly available LearningSuite API in accordance with its Terms of Use.

  **Important Notes:**

  - This node is developed and maintained by the community.

  - For issues with the LearningSuite API, contact official LearningSuite Support.

  - All LearningSuite trademarks and logos belong to LearningSuite.

  - This node merely provides an interface to the public API.

ai_documentation_summary:
  {"purpose":"This n8n node enables automation with the LearningSuite LMS by supporting triggers, resource management, and API interactions.","capabilities":["Instant webhook triggers for 18 event types","Scheduled polling triggers for 11 event types","15 resource types (Member, Course, Group, Bundle, Hub, Module, Community, Custom Fields, Popup, Webhook, Team Member, User, AI, Role, API Call)","90 total action endpoints","Member management (create, update, delete, progress tracking)","Course and module operations","Community interaction (posts, badges, forums)","Custom field management","Push notifications","AI agent actions and RAG Chat"],"authentication":"API key required (generated via LearningSuite instance Settings → Integrations)","commonUseCases":["Automated member creation from external sources (e.g., Google Sheets)","E-commerce integration for course sales","Lead generation with automated access provisioning","Participant progress monitoring and personalized reminders"],"limitations":["Community-developed node (not official LearningSuite support)","Requires LearningSuite instance access to generate API keys"],"relatedNodes":["n8n-nodes-learningsuite.learningSuiteTrigger","n8n-nodes-learningsuite.learningSuiteResource","n8n-nodes-learningsuite.learningSuiteWebhook"]}


node_type: @learningsuite/n8n-nodes-learningsuite.learningSuitePollingTrigger
package_name: @learningsuite/n8n-nodes-learningsuite
display_name: LearningSuite Polling Trigger
description: Polling Trigger node for LearningSuite API (powered by agentur-systeme.de)
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fabiomoretti
author_github_url: https://github.com/learningsuite/n8n-nodes-learningsuite.git
npm_package_name: @learningsuite/n8n-nodes-learningsuite
npm_version: 1.3.4
community_fetched_at: 2026-07-14T14:40:34.185Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-learningsuite

  ![n8n](https://img.shields.io/badge/n8n-2.17.2+-brightgreen)

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

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

  An n8n Community Node for the **LearningSuite API**, which allows you to seamlessly integrate your LearningSuite instance into n8n workflows.

  ## What is n8n?

  n8n is an easy-to-use tool that allows you to automate actions between different web apps, such as LearningSuite. Creating so-called "workflows" between apps automates many of the manual tasks. This can save you or your employees a tremendous amount of time.

  ## ⚖️ Legal Notice

  This community node uses the public LearningSuite API and is not affiliated with or sponsored by LearningSuite. All trademarks belong to their respective owners.

  **Note**: This is a community-developed node for the LearningSuite API. For official support, please contact LearningSuite directly.

  ## 🚀 Features

  - **15 resources** fully supported (Member, Course, Group, Bundle, Hub, Module, Community, Custom Fields, Popup, Webhook, Role, User, Team Member, AI, API Call)
  - **90 action endpoints** for maximum flexibility
  - **Instant trigger (webhook-based)** with 18 event types for real-time automation
  - **Polling trigger** with 11 event types for scheduled polling
  - **Flexible API call** resource for custom endpoints

  ## 📋 Supported Operations

  ### 👤 **Member** (20 operations)

  - Get by email, get by ID, get all, create, update, delete, find or create
  - Activate/deactivate, add/remove courses, add/remove bundles
  - Get courses, get course information, get member bundles
  - Get course progress, get module progress, get lesson progress, set course progress, reset course progress

  ### 📚 **Course** (7 operations)

  - Get published courses, get course modules, get course modules for member
  - Get course members, get course access requests, get course submissions, create lesson

  ### 👥 **Group** (12 operations)

  - Add bundles to group, add courses to group, add members to groups, add members to groups (summary)
  - Create group, delete group, find group by name, find or create group
  - Get group courses, get many, remove courses from group, remove members from groups

  ### 📦 **Bundle** (2 operations)

  - Get all, get bundle members

  ### 🏠 **Hub** (6 operations)

  - Get all, get templates, create, give hub access, remove hub access, get hub template variables

  ### 📖 **Module** (3 operations)

  - Get module lessons, get module sections, change module access for member

  ### 💬 **Community** (7 operations)

  - Assign badges to member, remove community badges from member
  - Get community areas, get community badges, get community forums, get community posts
  - Create community post comment

  ### 🔧 **Custom Fields** (14 operations)

  - Get cards, get cards (expanded), get categories, get definitions
  - Get field values, get store, get store values
  - Get profile by card, get profiles, get profiles (expanded)
  - Set field value, set multiple field values, update profile field
  - Upload file from URL

  ### 🎯 **Popup** (4 operations)

  - Get all, get popup, trigger popup for member, delete popup trigger

  ### 🔗 **Webhook** (5 operations)

  - Get/create/update/delete subscriptions, get sample data

  ### 👤 **Team Member** (3 operations)

  - Get many, get by email, get by ID

  ### 📢 **User** (1 operation)

  - Send push notification

  ### 🤖 **AI** (3 operations)

  - Get agent actions, get AI agents, RAG Chat

  ### 🛡️ **Role** (1 operation)

  - Get all

  ### 🛠️ **API Call** (1 operation)

  - Make a request (for any API calls)

  ## 🎣 Trigger Events

  The LearningSuite trigger supports the following events:

  ### ⚡ Instant Trigger Events (Webhook)

  - ✅ Community Post Commented
  - ✅ Agent Action Executed
  - ✅ Community Post Created
  - ✅ Community Post Moderated
  - ✅ Course Member Added
  - ✅ Course Progress Changed
  - ✅ Course Updated
  - ✅ Custom Field Value Changed
  - ✅ Custom Popup Interaction
  - ✅ Exam Completed
  - ✅ Exam Graded
  - ✅ Group User Access Changed
  - ✅ Lesson Completed
  - ✅ New Access Request
  - ✅ New Feedback Created
  - ✅ New Login
  - ✅ Submission Created
  - ✅ User Activation Status Changed

  ### ⏱️ Polling Trigger Events

  - ✅ Bundle Created
  - ✅ Community Area Created
  - ✅ Community Badge Created
  - ✅ Community Forum Created
  - ✅ Custom Field Card Created
  - ✅ Custom Popup Created
  - ✅ Group Created
  - ✅ Member Created
  - ✅ Member Not Logged In for More Than X Days
  - ✅ Team Member Created
  - ✅ Team Member Updated

  ## 💡 Use case examples

  ### Automated member management

  Automatically create new members from a list like in Google Sheets, saving you the step of manually creating users in LearningSuite.

  ### E-Commerce Integration

  Connect other tools like Copecart via webhook using n8n and sell your LearningSuite courses in your own online store.

  ### Lead Generation

  Link forms from your website and give users who complete the form automated access to information products in LearningSuite.

  ### Progress Monitoring

  Automatically monitor your participants' progress and send personalized reminders or congratulations.

  ## 🛠️ Installation

  ### Option 1: n8n Community Nodes (Recommended)

  1. Open your n8n instance

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

  3. Install: `n8n-nodes-learningsuite` or `@learningsuite/n8n-nodes-learningsuite`

  4. Restart n8n

  ### Option 2: Manual Installation

  #### A)

  ```bash
  # In your n8n project directory
  npm i @learningsuite/n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  #### B) Unscoped (Default)

  ```bash

  # In your n8n project directory
  npm install n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  ### Option 3: Docker

  ```bash

  # With Docker Environment Variable

  docker run -it --rm \

  --name n8n \

  -p 5678:5678 \

  -e N8N_CUSTOM_EXTENSIONS="/data/custom" \

  -v ~/.n8n:/data \

  docker.n8n.io/n8nio/n8n

  ```

  ## 🔐 Set up authentication

  ### Generate API key

  1. Log in to your **LearningSuite instance**

  2. Go to **Settings** → **Integrations**

  3. Click **"Generate API key"**

  4. Copy the generated API key

  ### Configure credentials in n8n

  1. Open n8n and Go to **Credentials**

  2. Click **"New Credential"**

  3. Search for **"LearningSuite API"**

  4. Fill in the following fields:

  - **API Key**: Your generated API key

  - **Base URL**: `https://api.learningsuite.io/api/v1` (default)

  5. Test the connection and save

  ## 📖 Usage

  ### Basic Member Operation

  ```

  1. Add a "LearningSuite" node

  2. Select Resource: "Member"

  3. Select Operation: "Get by Email"

  4. Enter the email address

  5. Execute the workflow

  ```

  ### Custom Field File Uploads

  The Custom Fields resource supports file, image, video, and audio custom fields.

  - Use **Set Field Value**, **Set Multiple Field Values**, or **Update Profile Field** when the file is available as n8n binary data.
  - Use **Upload File From URL** when LearningSuite should download a public file URL and append the returned file value to the selected custom field.
  - File fields support **File Value Mode**:
    - **Add**: append new file values and fail if the custom field limit would be exceeded
    - **Replace**: replace existing file values with the uploaded file values
    - **Replace if Limit Reached**: append while possible, otherwise replace existing file values
  - The node respects the LearningSuite file limits defined on the custom field, such as `maxFiles`, `maxImages`, `maxVideos`, and `maxAudios`.
  - For custom field cards with multiple profiles, use Profile ID, Profile Index, or Profile Name to target a specific profile. If the card does not allow multiple profiles, profile parameters are ignored and the default profile is used.

  ### ⚡ Instant Webhook Trigger Setup

  ```

  1. Add a "LearningSuite Trigger" node

  2. Select the desired event (e.g., "Lesson Completed")

  3. Configure optional filters

  4. Activate the workflow

  5. The webhook is automatically registered with LearningSuite

  ```

  ### ⏱️ Polling Trigger Setup

  ```

  1. Add a "LearningSuite Polling Trigger" node

  2. Select the desired event (e.g., "New Member")

  3. Configure optional filters

  4. Activate the workflow

  5. The polling trigger is automatically registered with LearningSuite

  ```

  ## 🔧 API Reference

  The node is based on the **LearningSuite API** and supports all publicly available endpoints.

  **Base URL**: `https://api.learningsuite.io/api/v1`

  **Authentication**: API key via `x-api-key` header

  Complete API documentation available at: [LearningSuite API Docs](https://api.learningsuite.io/api/v1/docs/)

  ## 🤝 Contributing

  We welcome contributions! Please note the following guidelines:

  ### Development Setup

  ```bash

  # Clone Repository

  git clone https://github.com/learningsuite/n8n-nodes-learningsuite.git

  cd n8n-nodes-learningsuite

  # Install Dependencies

  npm install

  # Compile TypeScript

  npm run build

  # Run Tests

  npm test

  ```

  ### Pull Request Guidelines

  1. **Fork** the repository

  2. Create a **feature branch** (`git checkout -b feature/amazing-feature`)

  3. **Commit** your changes (`git commit -m 'Add amazing feature'`)

  4. **Push** to the branch (`git push origin feature/amazing-feature`)

  5. Open a **Pull Request**

  ### Code Style

  - TypeScript for all new Features

  - Follow ESLint configuration

  - Add tests for new functionality

  - Update documentation

  ## 📝 Changelog

  ### Version 1.2.3 (current)

  #### Custom Fields File Uploads

  - ✅ Upload file from public URL

  - ✅ Binary uploads for file, image, video, and audio custom fields

  - ✅ File Value Mode: add, replace, and replace when the field limit is reached

  - ✅ Respect custom field file limits (`maxFiles`, `maxImages`, `maxVideos`, `maxAudios`)

  - ✅ Improved handling for custom field profile cards and default profiles

  ### Version 0.1.0 (2025-09-23)

  #### Initial Release

  - ✅ Full LearningSuite API integration

  - ✅ 15 resources with 90 action endpoints

  - ✅ Webhook triggers with 18 event types for real-time automation

  - ✅ Polling triggers with 11 event types

  - ✅ "Find-or-Create" logic for members and groups

  - ✅ Custom Fields resource with full CRUD support

  - ✅ Course progress management (get/set/reset)

  - ✅ Flexible parameter configuration

  - ✅ API call resource for custom endpoints

  ## 🛠️ Compatibility

  - **n8n Version**: 2.17.2+ (tested with latest)

  - **Node Version**: 20+

  - **TypeScript**: 5.0+

  ## 📄 License

  This project is licensed under the [MIT License].

  ## ❓ Support

  ### Report Issues

  For bugs or feature requests, please create a [GitHub Issue](https://github.com/learningsuite/n8n-nodes-learningsuite/issues).

  ### FAQ

  **Q: Can I use multiple LearningSuite instances?**

  A: Yes, simply create multiple credentials with different API keys and base URLs.

  **Q: Are all API endpoints supported?**

  A: The node covers all public API endpoints. For specific endpoints, use the "API Call" resource.

  **Q: How do I find my LearningSuite API base URL?**

  A: The default URL is `https://api.learningsuite.io/api/v1`. For custom domains, contact your LearningSuite administrator.

  ---

  ⭐ **Like this node?** Give us a star on GitHub!

  💡 **Feature request?** Open an issue - we're always open to improvements!

  ## 📋 Disclaimer

  This unofficial community node is not affiliated with, endorsed by, or sponsored by LearningSuite. It exclusively uses the publicly available LearningSuite API in accordance with its Terms of Use.

  **Important Notes:**

  - This node is developed and maintained by the community.

  - For issues with the LearningSuite API, contact official LearningSuite Support.

  - All LearningSuite trademarks and logos belong to LearningSuite.

  - This node merely provides an interface to the public API.

ai_documentation_summary:
  {"purpose":"A n8n community node that enables automation with the LearningSuite API through instant webhook triggers and scheduled polling triggers for various LearningSuite resources.","capabilities":["Instant webhook trigger with 18 event types","Polling trigger with 11 event types","15 supported resource types (Member, Course, Group, Bundle, Hub, Module, Community, Custom Fields, Popup, Webhook, Team Member, User, AI, Role, API Call)","90 action endpoints for resource management","Member operations (create, update, delete, progress tracking, course management)","Course management (publish, modules, members, submissions)","Group management (add/remove members, courses, bundles)","Community management (badges, areas, forums, posts)","Custom Fields management (cards, profiles, values, file uploads)","Popup management (triggers, interactions)"],"authentication":"API key required (generated from LearningSuite instance Settings → Integrations)","commonUseCases":["Automated member creation from external sources like Google Sheets","E-Commerce integration for selling LearningSuite courses","Lead generation with automated access to information products","Participant progress monitoring and automated reminders","Real-time event automation via webhooks (e.g., new submissions, course updates)"],"limitations":["Community-developed node (not official LearningSuite support)","Requires public LearningSuite API access","Authentication requires manual API key generation in LearningSuite instance"],"relatedNodes":["n8n HTTP Request","n8n Webhook","n8n Schedule Trigger","n8n Google Sheets","n8n Form"]}


node_type: @learningsuite/n8n-nodes-learningsuite.learningSuite
package_name: @learningsuite/n8n-nodes-learningsuite
display_name: LearningSuite
description: Interact with LearningSuite API (powered by agentur-systeme.de)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fabiomoretti
author_github_url: https://github.com/learningsuite/n8n-nodes-learningsuite.git
npm_package_name: @learningsuite/n8n-nodes-learningsuite
npm_version: 1.3.4
community_fetched_at: 2026-07-14T14:40:34.186Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "member",
      "options": [
        {
          "name": "AI",
          "value": "ai",
          "description": "Ask questions using AI with optional conversation context, tone, and formatting"
        },
        {
          "name": "API Call",
          "value": "apiCall",
          "description": "Execute any HTTP request to the LearningSuite API (relative endpoint, e.g., \"/members\")"
        },
        {
          "name": "Bundle",
          "value": "bundle",
          "description": "List bundles (course packages) and retrieve the members of a bundle"
        },
        {
          "name": "Community",
          "value": "community",
          "description": "Retrieve community areas and forums; Optionally filter by area"
        },
        {
          "name": "Course",
          "value": "course",
          "description": "Manage courses and their modules/sections/lessons, members, access requests, and submissions"
        },
        {
          "name": "Custom Field",
          "value": "customFields",
          "description": "Access and manage custom field cards, definitions, categories, values, and profiles"
        },
        {
          "name": "Group",
          "value": "group",
          "description": "Manage user groups (create/delete, add/remove members, assign courses/bundles)"
        },
        {
          "name": "Hub",
          "value": "hub",
          "description": "Manage hubs and templates; Add or remove access to members/groups/bundles"
        },
        {
          "name": "Member",
          "value": "member",
          "description": "Find/create/update/delete members and control course/bundle access"
        },
        {
          "name": "Module",
          "value": "module",
          "description": "Retrieve modules and associated sections and lessons; Create unlock overrides"
        },
        {
          "name": "Popup",
          "value": "popup",
          "description": "List/retrieve popups and trigger or reset them for members"
        },
        {
          "name": "Role",
          "value": "role",
          "description": "Retrieve available user roles"
        },
        {
          "name": "Team Member",
          "value": "teamMember",
          "description": "Retrieve available team members"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Manage users and send push notifications"
        },
        {
          "name": "Webhook",
          "value": "webhook",
          "description": "Manage webhook subscriptions (create/read/update/delete) and load sample data"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ragChat",
      "options": [
        {
          "name": "Agent Chat",
          "value": "agentChat",
          "action": "Send message to AI agent",
          "description": "Send a message to an AI agent and get the response"
        },
        {
          "name": "Get Agent Actions",
          "value": "getAgentActions",
          "action": "List agent actions",
          "description": "List all agent actions"
        },
        {
          "name": "Get AI Agents",
          "value": "getAiAgents",
          "action": "List AI agents",
          "description": "List all enabled AI agents"
        },
        {
          "name": "RAG Chat",
          "value": "ragChat",
          "action": "Ask AI question",
          "description": "Ask a question using the AI RAG chat endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ai"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "makeRequest",
      "options": [
        {
          "name": "Make Request",
          "value": "makeRequest",
          "action": "Custom api call",
          "description": "Make an arbitrary API call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "apiCall"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get bundles",
          "description": "List bundles"
        },
        {
          "name": "Get Bundle Members",
          "value": "getMembers",
          "action": "Get bundle members",
          "description": "List members of a bundle, including access information if available"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bundle"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAreas",
      "options": [
        {
          "name": "Assign Badges to Member",
          "value": "assignBadgesToUser",
          "action": "Assign badges to member",
          "description": "Assign one or more badges to a member"
        },
        {
          "name": "Create Community Post Comment",
          "value": "commentOnPost",
          "action": "Add comment to post",
          "description": "Comment on a community post or reply to an existing comment"
        },
        {
          "name": "Get Community Areas",
          "value": "getAreas",
          "action": "Get community areas",
          "description": "List community areas"
        },
        {
          "name": "Get Community Badges",
          "value": "getBadges",
          "action": "Get community badges",
          "description": "List community badges (optionally filtered by badge group)"
        },
        {
          "name": "Get Community Forums",
          "value": "getForums",
          "action": "Get community forums",
          "description": "List community forums (optionally filtered by area)"
        },
        {
          "name": "Get Community Posts",
          "value": "getCommunityPosts",
          "action": "Get community posts",
          "description": "List all published community posts (optionally filtered by area or forum)"
        },
        {
          "name": "Remove Community Badges From Member",
          "value": "removeBadgesFromUser",
          "action": "Remove badges from member",
          "description": "Remove one or more badges from a member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "community"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPublished",
      "options": [
        {
          "name": "Create Lesson",
          "value": "createLesson",
          "action": "Create lesson",
          "description": "Create a lesson in a course section (optional page content)"
        },
        {
          "name": "Get Course Access Requests",
          "value": "getAccessRequests",
          "action": "Get course access requests",
          "description": "List access requests for a course"
        },
        {
          "name": "Get Course Members",
          "value": "getMembers",
          "action": "Get course members",
          "description": "List members of a course with access information (and optional progress)"
        },
        {
          "name": "Get Course Modules",
          "value": "getModules",
          "action": "Get course modules",
          "description": "List modules for a course"
        },
        {
          "name": "Get Course Modules for Member",
          "value": "getModulesForMember",
          "action": "Get course modules for member",
          "description": "List course modules with member-specific drip access information"
        },
        {
          "name": "Get Course Submissions",
          "value": "getSubmissions",
          "action": "Get course submissions",
          "description": "List submissions in a course (newest first)"
        },
        {
          "name": "Get Published Courses",
          "value": "getPublished",
          "action": "Get published courses",
          "description": "List published courses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "course"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCards",
      "options": [
        {
          "name": "Get Cards",
          "value": "getCards",
          "action": "Retrieve all custom field cards",
          "description": "Retrieve all custom field cards"
        },
        {
          "name": "Get Cards (Expanded)",
          "value": "getCardsExpanded",
          "action": "Retrieve custom field cards including their definitions and categories",
          "description": "Retrieve custom field cards including their definitions and categories"
        },
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Retrieve custom field categories",
          "description": "Retrieve custom field categories"
        },
        {
          "name": "Get Definitions",
          "value": "getDefinitions",
          "action": "Retrieve custom field definitions",
          "description": "Retrieve custom field definitions"
        },
        {
          "name": "Get Field Values",
          "value": "getFieldValues",
          "action": "Retrieve the values of a custom field for a user",
          "description": "Retrieve the values of a custom field for a user"
        },
        {
          "name": "Get Profile by Card",
          "value": "getProfileByCard",
          "action": "Retrieve the values of a custom field card profile for a user",
          "description": "Retrieve the values of a custom field card profile for a user"
        },
        {
          "name": "Get Profiles",
          "value": "getProfiles",
          "action": "Retrieve custom field profiles of a user",
          "description": "Retrieve custom field profiles of a user"
        },
        {
          "name": "Get Profiles (Expanded)",
          "value": "getProfilesExpanded",
          "action": "Retrieve custom field profiles including their values",
          "description": "Retrieve custom field profiles including their values"
        },
        {
          "name": "Get Store",
          "value": "getStore",
          "action": "Retrieve the complete custom field store of a user",
          "description": "Retrieve the complete custom field store of a user"
        },
        {
          "name": "Get Store Values",
          "value": "getStoreValues",
          "action": "Get all custom field values of a user for a given profile",
          "description": "Get all custom field values of a user for a given profile"
        },
        {
          "name": "Set Field Value",
          "value": "setFieldValue",
          "action": "Set the value of a single custom field for a user",
          "description": "Set the value of a single custom field for a user"
        },
        {
          "name": "Set Multiple Field Values",
          "value": "setMultipleFieldValues",
          "action": "Set multiple custom field values for a user in one request",
          "description": "Set multiple custom field values for a user in one request"
        },
        {
          "name": "Update Profile Field",
          "value": "updateProfileField",
          "action": "Update a custom field value within a profile of a custom field card",
          "description": "Update a custom field value within a profile of a custom field card"
        },
        {
          "name": "Upload File From URL",
          "value": "createFileUploadTarget",
          "action": "Upload a file from a public URL and append it to a custom field",
          "description": "Upload a file from a public URL and append it to a custom field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customFields"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "findOrCreate",
      "options": [
        {
          "name": "Add Bundles to Group",
          "value": "addBundles",
          "action": "Add bundles to group",
          "description": "Add one or more bundles to a group"
        },
        {
          "name": "Add Courses to Group",
          "value": "addCourses",
          "action": "Add courses to group",
          "description": "Add one or more courses to a group"
        },
        {
          "name": "Add Members to Groups",
          "value": "addMembers",
          "action": "Add members to groups",
          "description": "Add one or more members to one or more groups"
        },
        {
          "name": "Add Members to Groups (Summary)",
          "value": "addMembersSummary",
          "action": "Add members to groups summary",
          "description": "Add members to groups and return only a summary of changes"
        },
        {
          "name": "Create Group",
          "value": "create",
          "action": "Create a group",
          "description": "Create a new group"
        },
        {
          "name": "Delete Group",
          "value": "delete",
          "action": "Delete a group",
          "description": "Delete a group by ID"
        },
        {
          "name": "Find Group by Name",
          "value": "findByName",
          "action": "Find groups by name",
          "description": "Find groups by name"
        },
        {
          "name": "Find or Create Group",
          "value": "findOrCreate",
          "action": "Find or create group",
          "description": "Find a group by name or create it if not found"
        },
        {
          "name": "Get Group Courses",
          "value": "getCourses",
          "action": "Get group courses",
          "description": "List courses assigned to a group"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many groups",
          "description": "List groups"
        },
        {
          "name": "Remove Courses From Group",
          "value": "removeCourses",
          "action": "Remove courses from group",
          "description": "Remove one or more courses from a group"
        },
        {
          "name": "Remove Members From Groups",
          "value": "removeMembers",
          "action": "Remove members from groups",
          "description": "Remove one or more members from one or more groups"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create Hub",
          "value": "create",
          "action": "Create a hub",
          "description": "Create a new hub from a template"
        },
        {
          "name": "Get Hub Template Variables",
          "value": "getTemplateVariables",
          "action": "Get hub template variables",
          "description": "List variables required by the selected hub template"
        },
        {
          "name": "Get Hub Templates",
          "value": "getTemplates",
          "action": "Get hub templates",
          "description": "List hub templates"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many hubs",
          "description": "List published hubs"
        },
        {
          "name": "Give Hub Access",
          "value": "addAccess",
          "action": "Add hub access",
          "description": "Grant hub access to selected members, groups, or bundles"
        },
        {
          "name": "Remove Hub Access",
          "value": "removeAccess",
          "action": "Remove hub access",
          "description": "Remove hub access for selected members, groups, or bundles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "hub"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByEmail",
      "options": [
        {
          "name": "Activate/Deactivate Member",
          "value": "activateDeactivate",
          "action": "Activate deactivate member",
          "description": "Enable or disable a member account"
        },
        {
          "name": "Add Bundles to Member",
          "value": "addToBundles",
          "action": "Add member to bundles",
          "description": "Grant one or more bundles to a member"
        },
        {
          "name": "Add Courses to Member",
          "value": "addToCourses",
          "action": "Add member to courses",
          "description": "Add one or more courses to a member"
        },
        {
          "name": "Create Member",
          "value": "create",
          "action": "Create a member",
          "description": "Create a new member"
        },
        {
          "name": "Delete Member",
          "value": "delete",
          "action": "Delete a member",
          "description": "Delete a member by ID"
        },
        {
          "name": "Find or Create Member",
          "value": "findOrCreate",
          "action": "Find or create member",
          "description": "Find a member by email or create it if not found"
        },
        {
          "name": "Get Course Information of Member",
          "value": "getCourseInfo",
          "action": "Get member course info",
          "description": "Check access and progress of a member for a specific course"
        },
        {
          "name": "Get Course Progress",
          "value": "getCourseProgress",
          "action": "Get course progress",
          "description": "Get a member's course progress in percent"
        },
        {
          "name": "Get Lesson Progress",
          "value": "getLessonProgress",
          "action": "Get lesson progress",
          "description": "Get a member's lesson progress in percent"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many members",
          "description": "List members with optional filters"
        },
        {
          "name": "Get Member Bundles",
          "value": "getBundles",
          "action": "Get member bundles",
          "description": "List bundles a member has access to"
        },
        {
          "name": "Get Member by Email",
          "value": "getByEmail",
          "action": "Get member by email",
          "description": "Get a member by email address"
        },
        {
          "name": "Get Member by ID",
          "value": "getById",
          "action": "Get member by ID",
          "description": "Get a member by ID"
        },
        {
          "name": "Get Member Courses",
          "value": "getCourses",
          "action": "Get member courses",
          "description": "List all courses for a member with access and progress information"
        },
        {
          "name": "Get Module Progress",
          "value": "getModuleProgress",
          "action": "Get module progress",
          "description": "Get a member's module progress in percent"
        },
        {
          "name": "Remove Bundles From Member",
          "value": "removeFromBundles",
          "action": "Remove member from bundles",
          "description": "Revoke one or more bundles from a member"
        },
        {
          "name": "Remove Courses From Member",
          "value": "removeFromCourses",
          "action": "Remove member from courses",
          "description": "Remove one or more courses from a member"
        },
        {
          "name": "Reset Course Progress",
          "value": "resetCourseProgress",
          "action": "Reset course progress",
          "description": "Reset a member's course/module/lesson/page progress"
        },
        {
          "name": "Set Course Progress",
          "value": "setCourseProgress",
          "action": "Set course progress",
          "description": "Set a member's progress for pages, lessons, modules, or the whole course"
        },
        {
          "name": "Update Member",
          "value": "update",
          "action": "Update a member",
          "description": "Update fields of a member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "member"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLessons",
      "options": [
        {
          "name": "Change Module Access for Member",
          "value": "createUnlockOverride",
          "action": "Change module access",
          "description": "Change a member’s access to a module (unlock override)"
        },
        {
          "name": "Get Module Lessons",
          "value": "getLessons",
          "action": "Get module lessons",
          "description": "List lessons for a module"
        },
        {
          "name": "Get Module Sections",
          "value": "getSections",
          "action": "Get module sections",
          "description": "List sections for a module"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "module"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Popup",
          "value": "get",
          "action": "Get a popup",
          "description": "Get a popup by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many popups",
          "description": "List popups (paginated)"
        },
        {
          "name": "Delete Popup Trigger",
          "value": "removeTriggerForMember",
          "action": "Remove popup trigger for member",
          "description": "Remove a popup trigger for a member"
        },
        {
          "name": "Trigger Popup for Member",
          "value": "triggerForMember",
          "action": "Trigger popup for member",
          "description": "Trigger a popup for a member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "popup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many roles",
          "description": "List user roles"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "role"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get team members",
          "description": "List team members (admin-zone users)"
        },
        {
          "name": "Get by Email",
          "value": "getByEmail",
          "action": "Get team member by email",
          "description": "Fetch a specific team member using email"
        },
        {
          "name": "Get by ID",
          "value": "getById",
          "action": "Get team member by ID",
          "description": "Fetch a specific team member by userId"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "teamMember"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendPushNotification",
      "options": [
        {
          "name": "Send Push Notification",
          "value": "sendPushNotification",
          "action": "Send push notification",
          "description": "Send push notifications to selected users or groups (requires custom app with push support)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSubscriptions",
      "options": [
        {
          "name": "Create Webhook Subscription",
          "value": "createSubscription",
          "action": "Create webhook subscription",
          "description": "Create a webhook subscription to receive events"
        },
        {
          "name": "Delete Webhook Subscription",
          "value": "deleteSubscription",
          "action": "Delete webhook subscription",
          "description": "Delete a webhook subscription by ID"
        },
        {
          "name": "Get Webhook Sample Data",
          "value": "getSampleData",
          "action": "Get webhook sample data",
          "description": "Retrieve sample payloads for supported webhook events"
        },
        {
          "name": "Get Webhook Subscription",
          "value": "getSubscription",
          "action": "Get webhook subscription",
          "description": "Get a webhook subscription by ID"
        },
        {
          "name": "Get Webhook Subscriptions",
          "value": "getSubscriptions",
          "action": "Get webhook subscriptions",
          "description": "List webhook subscriptions"
        },
        {
          "name": "Update Webhook Subscription",
          "value": "updateSubscription",
          "action": "Update webhook subscription",
          "description": "Update a webhook subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Agent Chat",
      "value": "agentChat",
      "action": "Send message to AI agent",
      "description": "Send a message to an AI agent and get the response",
      "resource": "ai"
    },
    {
      "name": "Get Agent Actions",
      "value": "getAgentActions",
      "action": "List agent actions",
      "description": "List all agent actions",
      "resource": "ai"
    },
    {
      "name": "Get AI Agents",
      "value": "getAiAgents",
      "action": "List AI agents",
      "description": "List all enabled AI agents",
      "resource": "ai"
    },
    {
      "name": "RAG Chat",
      "value": "ragChat",
      "action": "Ask AI question",
      "description": "Ask a question using the AI RAG chat endpoint",
      "resource": "ai"
    },
    {
      "name": "Make Request",
      "value": "makeRequest",
      "action": "Custom api call",
      "description": "Make an arbitrary API call",
      "resource": "apiCall"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get bundles",
      "description": "List bundles",
      "resource": "bundle"
    },
    {
      "name": "Get Bundle Members",
      "value": "getMembers",
      "action": "Get bundle members",
      "description": "List members of a bundle, including access information if available",
      "resource": "bundle"
    },
    {
      "name": "Assign Badges to Member",
      "value": "assignBadgesToUser",
      "action": "Assign badges to member",
      "description": "Assign one or more badges to a member",
      "resource": "community"
    },
    {
      "name": "Create Community Post Comment",
      "value": "commentOnPost",
      "action": "Add comment to post",
      "description": "Comment on a community post or reply to an existing comment",
      "resource": "community"
    },
    {
      "name": "Get Community Areas",
      "value": "getAreas",
      "action": "Get community areas",
      "description": "List community areas",
      "resource": "community"
    },
    {
      "name": "Get Community Badges",
      "value": "getBadges",
      "action": "Get community badges",
      "description": "List community badges (optionally filtered by badge group)",
      "resource": "community"
    },
    {
      "name": "Get Community Forums",
      "value": "getForums",
      "action": "Get community forums",
      "description": "List community forums (optionally filtered by area)",
      "resource": "community"
    },
    {
      "name": "Get Community Posts",
      "value": "getCommunityPosts",
      "action": "Get community posts",
      "description": "List all published community posts (optionally filtered by area or forum)",
      "resource": "community"
    },
    {
      "name": "Remove Community Badges From Member",
      "value": "removeBadgesFromUser",
      "action": "Remove badges from member",
      "description": "Remove one or more badges from a member",
      "resource": "community"
    },
    {
      "name": "Create Lesson",
      "value": "createLesson",
      "action": "Create lesson",
      "description": "Create a lesson in a course section (optional page content)",
      "resource": "course"
    },
    {
      "name": "Get Course Access Requests",
      "value": "getAccessRequests",
      "action": "Get course access requests",
      "description": "List access requests for a course",
      "resource": "course"
    },
    {
      "name": "Get Course Members",
      "value": "getMembers",
      "action": "Get course members",
      "description": "List members of a course with access information (and optional progress)",
      "resource": "course"
    },
    {
      "name": "Get Course Modules",
      "value": "getModules",
      "action": "Get course modules",
      "description": "List modules for a course",
      "resource": "course"
    },
    {
      "name": "Get Course Modules for Member",
      "value": "getModulesForMember",
      "action": "Get course modules for member",
      "description": "List course modules with member-specific drip access information",
      "resource": "course"
    },
    {
      "name": "Get Course Submissions",
      "value": "getSubmissions",
      "action": "Get course submissions",
      "description": "List submissions in a course (newest first)",
      "resource": "course"
    },
    {
      "name": "Get Published Courses",
      "value": "getPublished",
      "action": "Get published courses",
      "description": "List published courses",
      "resource": "course"
    },
    {
      "name": "Get Cards",
      "value": "getCards",
      "action": "Retrieve all custom field cards",
      "description": "Retrieve all custom field cards",
      "resource": "customFields"
    },
    {
      "name": "Get Cards (Expanded)",
      "value": "getCardsExpanded",
      "action": "Retrieve custom field cards including their definitions and categories",
      "description": "Retrieve custom field cards including their definitions and categories",
      "resource": "customFields"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Retrieve custom field categories",
      "description": "Retrieve custom field categories",
      "resource": "customFields"
    },
    {
      "name": "Get Definitions",
      "value": "getDefinitions",
      "action": "Retrieve custom field definitions",
      "description": "Retrieve custom field definitions",
      "resource": "customFields"
    },
    {
      "name": "Get Field Values",
      "value": "getFieldValues",
      "action": "Retrieve the values of a custom field for a user",
      "description": "Retrieve the values of a custom field for a user",
      "resource": "customFields"
    },
    {
      "name": "Get Profile by Card",
      "value": "getProfileByCard",
      "action": "Retrieve the values of a custom field card profile for a user",
      "description": "Retrieve the values of a custom field card profile for a user",
      "resource": "customFields"
    },
    {
      "name": "Get Profiles",
      "value": "getProfiles",
      "action": "Retrieve custom field profiles of a user",
      "description": "Retrieve custom field profiles of a user",
      "resource": "customFields"
    },
    {
      "name": "Get Profiles (Expanded)",
      "value": "getProfilesExpanded",
      "action": "Retrieve custom field profiles including their values",
      "description": "Retrieve custom field profiles including their values",
      "resource": "customFields"
    },
    {
      "name": "Get Store",
      "value": "getStore",
      "action": "Retrieve the complete custom field store of a user",
      "description": "Retrieve the complete custom field store of a user",
      "resource": "customFields"
    },
    {
      "name": "Get Store Values",
      "value": "getStoreValues",
      "action": "Get all custom field values of a user for a given profile",
      "description": "Get all custom field values of a user for a given profile",
      "resource": "customFields"
    },
    {
      "name": "Set Field Value",
      "value": "setFieldValue",
      "action": "Set the value of a single custom field for a user",
      "description": "Set the value of a single custom field for a user",
      "resource": "customFields"
    },
    {
      "name": "Set Multiple Field Values",
      "value": "setMultipleFieldValues",
      "action": "Set multiple custom field values for a user in one request",
      "description": "Set multiple custom field values for a user in one request",
      "resource": "customFields"
    },
    {
      "name": "Update Profile Field",
      "value": "updateProfileField",
      "action": "Update a custom field value within a profile of a custom field card",
      "description": "Update a custom field value within a profile of a custom field card",
      "resource": "customFields"
    },
    {
      "name": "Upload File From URL",
      "value": "createFileUploadTarget",
      "action": "Upload a file from a public URL and append it to a custom field",
      "description": "Upload a file from a public URL and append it to a custom field",
      "resource": "customFields"
    },
    {
      "name": "Add Bundles to Group",
      "value": "addBundles",
      "action": "Add bundles to group",
      "description": "Add one or more bundles to a group",
      "resource": "group"
    },
    {
      "name": "Add Courses to Group",
      "value": "addCourses",
      "action": "Add courses to group",
      "description": "Add one or more courses to a group",
      "resource": "group"
    },
    {
      "name": "Add Members to Groups",
      "value": "addMembers",
      "action": "Add members to groups",
      "description": "Add one or more members to one or more groups",
      "resource": "group"
    },
    {
      "name": "Add Members to Groups (Summary)",
      "value": "addMembersSummary",
      "action": "Add members to groups summary",
      "description": "Add members to groups and return only a summary of changes",
      "resource": "group"
    },
    {
      "name": "Create Group",
      "value": "create",
      "action": "Create a group",
      "description": "Create a new group",
      "resource": "group"
    },
    {
      "name": "Delete Group",
      "value": "delete",
      "action": "Delete a group",
      "description": "Delete a group by ID",
      "resource": "group"
    },
    {
      "name": "Find Group by Name",
      "value": "findByName",
      "action": "Find groups by name",
      "description": "Find groups by name",
      "resource": "group"
    },
    {
      "name": "Find or Create Group",
      "value": "findOrCreate",
      "action": "Find or create group",
      "description": "Find a group by name or create it if not found",
      "resource": "group"
    },
    {
      "name": "Get Group Courses",
      "value": "getCourses",
      "action": "Get group courses",
      "description": "List courses assigned to a group",
      "resource": "group"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many groups",
      "description": "List groups",
      "resource": "group"
    },
    {
      "name": "Remove Courses From Group",
      "value": "removeCourses",
      "action": "Remove courses from group",
      "description": "Remove one or more courses from a group",
      "resource": "group"
    },
    {
      "name": "Remove Members From Groups",
      "value": "removeMembers",
      "action": "Remove members from groups",
      "description": "Remove one or more members from one or more groups",
      "resource": "group"
    },
    {
      "name": "Create Hub",
      "value": "create",
      "action": "Create a hub",
      "description": "Create a new hub from a template",
      "resource": "hub"
    },
    {
      "name": "Get Hub Template Variables",
      "value": "getTemplateVariables",
      "action": "Get hub template variables",
      "description": "List variables required by the selected hub template",
      "resource": "hub"
    },
    {
      "name": "Get Hub Templates",
      "value": "getTemplates",
      "action": "Get hub templates",
      "description": "List hub templates",
      "resource": "hub"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many hubs",
      "description": "List published hubs",
      "resource": "hub"
    },
    {
      "name": "Give Hub Access",
      "value": "addAccess",
      "action": "Add hub access",
      "description": "Grant hub access to selected members, groups, or bundles",
      "resource": "hub"
    },
    {
      "name": "Remove Hub Access",
      "value": "removeAccess",
      "action": "Remove hub access",
      "description": "Remove hub access for selected members, groups, or bundles",
      "resource": "hub"
    },
    {
      "name": "Activate/Deactivate Member",
      "value": "activateDeactivate",
      "action": "Activate deactivate member",
      "description": "Enable or disable a member account",
      "resource": "member"
    },
    {
      "name": "Add Bundles to Member",
      "value": "addToBundles",
      "action": "Add member to bundles",
      "description": "Grant one or more bundles to a member",
      "resource": "member"
    },
    {
      "name": "Add Courses to Member",
      "value": "addToCourses",
      "action": "Add member to courses",
      "description": "Add one or more courses to a member",
      "resource": "member"
    },
    {
      "name": "Create Member",
      "value": "create",
      "action": "Create a member",
      "description": "Create a new member",
      "resource": "member"
    },
    {
      "name": "Delete Member",
      "value": "delete",
      "action": "Delete a member",
      "description": "Delete a member by ID",
      "resource": "member"
    },
    {
      "name": "Find or Create Member",
      "value": "findOrCreate",
      "action": "Find or create member",
      "description": "Find a member by email or create it if not found",
      "resource": "member"
    },
    {
      "name": "Get Course Information of Member",
      "value": "getCourseInfo",
      "action": "Get member course info",
      "description": "Check access and progress of a member for a specific course",
      "resource": "member"
    },
    {
      "name": "Get Course Progress",
      "value": "getCourseProgress",
      "action": "Get course progress",
      "description": "Get a member's course progress in percent",
      "resource": "member"
    },
    {
      "name": "Get Lesson Progress",
      "value": "getLessonProgress",
      "action": "Get lesson progress",
      "description": "Get a member's lesson progress in percent",
      "resource": "member"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many members",
      "description": "List members with optional filters",
      "resource": "member"
    },
    {
      "name": "Get Member Bundles",
      "value": "getBundles",
      "action": "Get member bundles",
      "description": "List bundles a member has access to",
      "resource": "member"
    },
    {
      "name": "Get Member by Email",
      "value": "getByEmail",
      "action": "Get member by email",
      "description": "Get a member by email address",
      "resource": "member"
    },
    {
      "name": "Get Member by ID",
      "value": "getById",
      "action": "Get member by ID",
      "description": "Get a member by ID",
      "resource": "member"
    },
    {
      "name": "Get Member Courses",
      "value": "getCourses",
      "action": "Get member courses",
      "description": "List all courses for a member with access and progress information",
      "resource": "member"
    },
    {
      "name": "Get Module Progress",
      "value": "getModuleProgress",
      "action": "Get module progress",
      "description": "Get a member's module progress in percent",
      "resource": "member"
    },
    {
      "name": "Remove Bundles From Member",
      "value": "removeFromBundles",
      "action": "Remove member from bundles",
      "description": "Revoke one or more bundles from a member",
      "resource": "member"
    },
    {
      "name": "Remove Courses From Member",
      "value": "removeFromCourses",
      "action": "Remove member from courses",
      "description": "Remove one or more courses from a member",
      "resource": "member"
    },
    {
      "name": "Reset Course Progress",
      "value": "resetCourseProgress",
      "action": "Reset course progress",
      "description": "Reset a member's course/module/lesson/page progress",
      "resource": "member"
    },
    {
      "name": "Set Course Progress",
      "value": "setCourseProgress",
      "action": "Set course progress",
      "description": "Set a member's progress for pages, lessons, modules, or the whole course",
      "resource": "member"
    },
    {
      "name": "Update Member",
      "value": "update",
      "action": "Update a member",
      "description": "Update fields of a member",
      "resource": "member"
    },
    {
      "name": "Change Module Access for Member",
      "value": "createUnlockOverride",
      "action": "Change module access",
      "description": "Change a member’s access to a module (unlock override)",
      "resource": "module"
    },
    {
      "name": "Get Module Lessons",
      "value": "getLessons",
      "action": "Get module lessons",
      "description": "List lessons for a module",
      "resource": "module"
    },
    {
      "name": "Get Module Sections",
      "value": "getSections",
      "action": "Get module sections",
      "description": "List sections for a module",
      "resource": "module"
    },
    {
      "name": "Get Popup",
      "value": "get",
      "action": "Get a popup",
      "description": "Get a popup by ID",
      "resource": "popup"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many popups",
      "description": "List popups (paginated)",
      "resource": "popup"
    },
    {
      "name": "Delete Popup Trigger",
      "value": "removeTriggerForMember",
      "action": "Remove popup trigger for member",
      "description": "Remove a popup trigger for a member",
      "resource": "popup"
    },
    {
      "name": "Trigger Popup for Member",
      "value": "triggerForMember",
      "action": "Trigger popup for member",
      "description": "Trigger a popup for a member",
      "resource": "popup"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many roles",
      "description": "List user roles",
      "resource": "role"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get team members",
      "description": "List team members (admin-zone users)",
      "resource": "teamMember"
    },
    {
      "name": "Get by Email",
      "value": "getByEmail",
      "action": "Get team member by email",
      "description": "Fetch a specific team member using email",
      "resource": "teamMember"
    },
    {
      "name": "Get by ID",
      "value": "getById",
      "action": "Get team member by ID",
      "description": "Fetch a specific team member by userId",
      "resource": "teamMember"
    },
    {
      "name": "Send Push Notification",
      "value": "sendPushNotification",
      "action": "Send push notification",
      "description": "Send push notifications to selected users or groups (requires custom app with push support)",
      "resource": "user"
    },
    {
      "name": "Create Webhook Subscription",
      "value": "createSubscription",
      "action": "Create webhook subscription",
      "description": "Create a webhook subscription to receive events",
      "resource": "webhook"
    },
    {
      "name": "Delete Webhook Subscription",
      "value": "deleteSubscription",
      "action": "Delete webhook subscription",
      "description": "Delete a webhook subscription by ID",
      "resource": "webhook"
    },
    {
      "name": "Get Webhook Sample Data",
      "value": "getSampleData",
      "action": "Get webhook sample data",
      "description": "Retrieve sample payloads for supported webhook events",
      "resource": "webhook"
    },
    {
      "name": "Get Webhook Subscription",
      "value": "getSubscription",
      "action": "Get webhook subscription",
      "description": "Get a webhook subscription by ID",
      "resource": "webhook"
    },
    {
      "name": "Get Webhook Subscriptions",
      "value": "getSubscriptions",
      "action": "Get webhook subscriptions",
      "description": "List webhook subscriptions",
      "resource": "webhook"
    },
    {
      "name": "Update Webhook Subscription",
      "value": "updateSubscription",
      "action": "Update webhook subscription",
      "description": "Update a webhook subscription",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-learningsuite

  ![n8n](https://img.shields.io/badge/n8n-2.17.2+-brightgreen)

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

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

  An n8n Community Node for the **LearningSuite API**, which allows you to seamlessly integrate your LearningSuite instance into n8n workflows.

  ## What is n8n?

  n8n is an easy-to-use tool that allows you to automate actions between different web apps, such as LearningSuite. Creating so-called "workflows" between apps automates many of the manual tasks. This can save you or your employees a tremendous amount of time.

  ## ⚖️ Legal Notice

  This community node uses the public LearningSuite API and is not affiliated with or sponsored by LearningSuite. All trademarks belong to their respective owners.

  **Note**: This is a community-developed node for the LearningSuite API. For official support, please contact LearningSuite directly.

  ## 🚀 Features

  - **15 resources** fully supported (Member, Course, Group, Bundle, Hub, Module, Community, Custom Fields, Popup, Webhook, Role, User, Team Member, AI, API Call)
  - **90 action endpoints** for maximum flexibility
  - **Instant trigger (webhook-based)** with 18 event types for real-time automation
  - **Polling trigger** with 11 event types for scheduled polling
  - **Flexible API call** resource for custom endpoints

  ## 📋 Supported Operations

  ### 👤 **Member** (20 operations)

  - Get by email, get by ID, get all, create, update, delete, find or create
  - Activate/deactivate, add/remove courses, add/remove bundles
  - Get courses, get course information, get member bundles
  - Get course progress, get module progress, get lesson progress, set course progress, reset course progress

  ### 📚 **Course** (7 operations)

  - Get published courses, get course modules, get course modules for member
  - Get course members, get course access requests, get course submissions, create lesson

  ### 👥 **Group** (12 operations)

  - Add bundles to group, add courses to group, add members to groups, add members to groups (summary)
  - Create group, delete group, find group by name, find or create group
  - Get group courses, get many, remove courses from group, remove members from groups

  ### 📦 **Bundle** (2 operations)

  - Get all, get bundle members

  ### 🏠 **Hub** (6 operations)

  - Get all, get templates, create, give hub access, remove hub access, get hub template variables

  ### 📖 **Module** (3 operations)

  - Get module lessons, get module sections, change module access for member

  ### 💬 **Community** (7 operations)

  - Assign badges to member, remove community badges from member
  - Get community areas, get community badges, get community forums, get community posts
  - Create community post comment

  ### 🔧 **Custom Fields** (14 operations)

  - Get cards, get cards (expanded), get categories, get definitions
  - Get field values, get store, get store values
  - Get profile by card, get profiles, get profiles (expanded)
  - Set field value, set multiple field values, update profile field
  - Upload file from URL

  ### 🎯 **Popup** (4 operations)

  - Get all, get popup, trigger popup for member, delete popup trigger

  ### 🔗 **Webhook** (5 operations)

  - Get/create/update/delete subscriptions, get sample data

  ### 👤 **Team Member** (3 operations)

  - Get many, get by email, get by ID

  ### 📢 **User** (1 operation)

  - Send push notification

  ### 🤖 **AI** (3 operations)

  - Get agent actions, get AI agents, RAG Chat

  ### 🛡️ **Role** (1 operation)

  - Get all

  ### 🛠️ **API Call** (1 operation)

  - Make a request (for any API calls)

  ## 🎣 Trigger Events

  The LearningSuite trigger supports the following events:

  ### ⚡ Instant Trigger Events (Webhook)

  - ✅ Community Post Commented
  - ✅ Agent Action Executed
  - ✅ Community Post Created
  - ✅ Community Post Moderated
  - ✅ Course Member Added
  - ✅ Course Progress Changed
  - ✅ Course Updated
  - ✅ Custom Field Value Changed
  - ✅ Custom Popup Interaction
  - ✅ Exam Completed
  - ✅ Exam Graded
  - ✅ Group User Access Changed
  - ✅ Lesson Completed
  - ✅ New Access Request
  - ✅ New Feedback Created
  - ✅ New Login
  - ✅ Submission Created
  - ✅ User Activation Status Changed

  ### ⏱️ Polling Trigger Events

  - ✅ Bundle Created
  - ✅ Community Area Created
  - ✅ Community Badge Created
  - ✅ Community Forum Created
  - ✅ Custom Field Card Created
  - ✅ Custom Popup Created
  - ✅ Group Created
  - ✅ Member Created
  - ✅ Member Not Logged In for More Than X Days
  - ✅ Team Member Created
  - ✅ Team Member Updated

  ## 💡 Use case examples

  ### Automated member management

  Automatically create new members from a list like in Google Sheets, saving you the step of manually creating users in LearningSuite.

  ### E-Commerce Integration

  Connect other tools like Copecart via webhook using n8n and sell your LearningSuite courses in your own online store.

  ### Lead Generation

  Link forms from your website and give users who complete the form automated access to information products in LearningSuite.

  ### Progress Monitoring

  Automatically monitor your participants' progress and send personalized reminders or congratulations.

  ## 🛠️ Installation

  ### Option 1: n8n Community Nodes (Recommended)

  1. Open your n8n instance

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

  3. Install: `n8n-nodes-learningsuite` or `@learningsuite/n8n-nodes-learningsuite`

  4. Restart n8n

  ### Option 2: Manual Installation

  #### A)

  ```bash
  # In your n8n project directory
  npm i @learningsuite/n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  #### B) Unscoped (Default)

  ```bash

  # In your n8n project directory
  npm install n8n-nodes-learningsuite

  # Restart n8n
  npm start

  ```

  ### Option 3: Docker

  ```bash

  # With Docker Environment Variable

  docker run -it --rm \

  --name n8n \

  -p 5678:5678 \

  -e N8N_CUSTOM_EXTENSIONS="/data/custom" \

  -v ~/.n8n:/data \

  docker.n8n.io/n8nio/n8n

  ```

  ## 🔐 Set up authentication

  ### Generate API key

  1. Log in to your **LearningSuite instance**

  2. Go to **Settings** → **Integrations**

  3. Click **"Generate API key"**

  4. Copy the generated API key

  ### Configure credentials in n8n

  1. Open n8n and Go to **Credentials**

  2. Click **"New Credential"**

  3. Search for **"LearningSuite API"**

  4. Fill in the following fields:

  - **API Key**: Your generated API key

  - **Base URL**: `https://api.learningsuite.io/api/v1` (default)

  5. Test the connection and save

  ## 📖 Usage

  ### Basic Member Operation

  ```

  1. Add a "LearningSuite" node

  2. Select Resource: "Member"

  3. Select Operation: "Get by Email"

  4. Enter the email address

  5. Execute the workflow

  ```

  ### Custom Field File Uploads

  The Custom Fields resource supports file, image, video, and audio custom fields.

  - Use **Set Field Value**, **Set Multiple Field Values**, or **Update Profile Field** when the file is available as n8n binary data.
  - Use **Upload File From URL** when LearningSuite should download a public file URL and append the returned file value to the selected custom field.
  - File fields support **File Value Mode**:
    - **Add**: append new file values and fail if the custom field limit would be exceeded
    - **Replace**: replace existing file values with the uploaded file values
    - **Replace if Limit Reached**: append while possible, otherwise replace existing file values
  - The node respects the LearningSuite file limits defined on the custom field, such as `maxFiles`, `maxImages`, `maxVideos`, and `maxAudios`.
  - For custom field cards with multiple profiles, use Profile ID, Profile Index, or Profile Name to target a specific profile. If the card does not allow multiple profiles, profile parameters are ignored and the default profile is used.

  ### ⚡ Instant Webhook Trigger Setup

  ```

  1. Add a "LearningSuite Trigger" node

  2. Select the desired event (e.g., "Lesson Completed")

  3. Configure optional filters

  4. Activate the workflow

  5. The webhook is automatically registered with LearningSuite

  ```

  ### ⏱️ Polling Trigger Setup

  ```

  1. Add a "LearningSuite Polling Trigger" node

  2. Select the desired event (e.g., "New Member")

  3. Configure optional filters

  4. Activate the workflow

  5. The polling trigger is automatically registered with LearningSuite

  ```

  ## 🔧 API Reference

  The node is based on the **LearningSuite API** and supports all publicly available endpoints.

  **Base URL**: `https://api.learningsuite.io/api/v1`

  **Authentication**: API key via `x-api-key` header

  Complete API documentation available at: [LearningSuite API Docs](https://api.learningsuite.io/api/v1/docs/)

  ## 🤝 Contributing

  We welcome contributions! Please note the following guidelines:

  ### Development Setup

  ```bash

  # Clone Repository

  git clone https://github.com/learningsuite/n8n-nodes-learningsuite.git

  cd n8n-nodes-learningsuite

  # Install Dependencies

  npm install

  # Compile TypeScript

  npm run build

  # Run Tests

  npm test

  ```

  ### Pull Request Guidelines

  1. **Fork** the repository

  2. Create a **feature branch** (`git checkout -b feature/amazing-feature`)

  3. **Commit** your changes (`git commit -m 'Add amazing feature'`)

  4. **Push** to the branch (`git push origin feature/amazing-feature`)

  5. Open a **Pull Request**

  ### Code Style

  - TypeScript for all new Features

  - Follow ESLint configuration

  - Add tests for new functionality

  - Update documentation

  ## 📝 Changelog

  ### Version 1.2.3 (current)

  #### Custom Fields File Uploads

  - ✅ Upload file from public URL

  - ✅ Binary uploads for file, image, video, and audio custom fields

  - ✅ File Value Mode: add, replace, and replace when the field limit is reached

  - ✅ Respect custom field file limits (`maxFiles`, `maxImages`, `maxVideos`, `maxAudios`)

  - ✅ Improved handling for custom field profile cards and default profiles

  ### Version 0.1.0 (2025-09-23)

  #### Initial Release

  - ✅ Full LearningSuite API integration

  - ✅ 15 resources with 90 action endpoints

  - ✅ Webhook triggers with 18 event types for real-time automation

  - ✅ Polling triggers with 11 event types

  - ✅ "Find-or-Create" logic for members and groups

  - ✅ Custom Fields resource with full CRUD support

  - ✅ Course progress management (get/set/reset)

  - ✅ Flexible parameter configuration

  - ✅ API call resource for custom endpoints

  ## 🛠️ Compatibility

  - **n8n Version**: 2.17.2+ (tested with latest)

  - **Node Version**: 20+

  - **TypeScript**: 5.0+

  ## 📄 License

  This project is licensed under the [MIT License].

  ## ❓ Support

  ### Report Issues

  For bugs or feature requests, please create a [GitHub Issue](https://github.com/learningsuite/n8n-nodes-learningsuite/issues).

  ### FAQ

  **Q: Can I use multiple LearningSuite instances?**

  A: Yes, simply create multiple credentials with different API keys and base URLs.

  **Q: Are all API endpoints supported?**

  A: The node covers all public API endpoints. For specific endpoints, use the "API Call" resource.

  **Q: How do I find my LearningSuite API base URL?**

  A: The default URL is `https://api.learningsuite.io/api/v1`. For custom domains, contact your LearningSuite administrator.

  ---

  ⭐ **Like this node?** Give us a star on GitHub!

  💡 **Feature request?** Open an issue - we're always open to improvements!

  ## 📋 Disclaimer

  This unofficial community node is not affiliated with, endorsed by, or sponsored by LearningSuite. It exclusively uses the publicly available LearningSuite API in accordance with its Terms of Use.

  **Important Notes:**

  - This node is developed and maintained by the community.

  - For issues with the LearningSuite API, contact official LearningSuite Support.

  - All LearningSuite trademarks and logos belong to LearningSuite.

  - This node merely provides an interface to the public API.

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation and integration with the LearningSuite LMS platform by providing access to its API for managing members, courses, groups, and other educational resources.","capabilities":["Manage members (create, update, delete, activate/deactivate, assign courses)","Manage courses (publish, access requests, submissions, modules)","Manage groups (add/remove courses and members)","Manage bundles and hubs","Manage modules and lessons","Manage community features (posts, badges, forums)","Manage custom fields and profiles","Manage popups and webhooks","Manage team members and roles","Send push notifications"],"authentication":"API key required (generated via LearningSuite instance Settings → Integrations)","commonUseCases":["Automated member onboarding from external sources (e.g., Google Sheets)","E-commerce integration to sell LearningSuite courses","Lead generation with automated course access","Automated progress monitoring and reminders","Real-time event-driven automation (e.g., new course submissions)"],"limitations":["Community-developed node (not official LearningSuite support)","Requires manual API key generation and configuration","Limited to LearningSuite public API endpoints"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.webhook","n8n-nodes-base.manualTrigger"]}


node_type: n8n-nodes-rcszilla.rcsZilla
package_name: n8n-nodes-rcszilla
display_name: RCSZilla
description: Send SMS, WhatsApp messages, and OTP codes — and read incoming messages and emails — via RCSZilla
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fiveqb
author_github_url: https://github.com/x5qubits/
npm_package_name: n8n-nodes-rcszilla
npm_version: 1.1.7
community_fetched_at: 2026-07-14T14:40:34.191Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "queueMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "queueMessage",
          "action": "Send an SMS or WhatsApp message",
          "description": "Add one or more messages to the send queue. Your phone or paid provider delivers them."
        },
        {
          "name": "Send OTP Code",
          "value": "sendOtp",
          "action": "Send a one-time verification code",
          "description": "Generate a numeric OTP and deliver it via SMS or email."
        },
        {
          "name": "Verify OTP Code",
          "value": "verifyOtp",
          "action": "Verify a one-time code entered by a user",
          "description": "Check whether the code a user entered matches the one that was sent."
        },
        {
          "name": "Get Incoming Messages",
          "value": "getIncomingMessages",
          "action": "Get received SMS or WhatsApp messages",
          "description": "Retrieve inbound messages received on your connected devices."
        },
        {
          "name": "Get Incoming Emails",
          "value": "getIncomingEmails",
          "action": "Get received emails",
          "description": "Retrieve emails received on your connected mailboxes."
        },
        {
          "name": "Check Message Status",
          "value": "getQueueStatus",
          "action": "Check the delivery status of a queued message",
          "description": "Look up the current state (pending, sent, delivered, failed) of a message by its queue ID."
        },
        {
          "name": "Fetch Pending Messages",
          "value": "getPendingMessages",
          "action": "Fetch messages waiting to be sent",
          "description": "Claim and return unprocessed messages from the send queue. Typically used by device apps."
        },
        {
          "name": "Mark Message Sent",
          "value": "markSent",
          "action": "Mark a message as sent",
          "description": "Tell the server that a device successfully transmitted a queued message."
        },
        {
          "name": "Mark Message Delivered",
          "value": "markDelivered",
          "action": "Mark a message as delivered",
          "description": "Confirm the recipient's device received the message (carrier delivery receipt)."
        },
        {
          "name": "Mark Message Failed",
          "value": "markFailed",
          "action": "Mark a message as failed",
          "description": "Report that a message could not be sent, optionally with an error reason."
        },
        {
          "name": "Mark Message Processing",
          "value": "markProcessing",
          "action": "Mark a message as being processed",
          "description": "Tell the server a device has picked up a message and is about to send it."
        },
        {
          "name": "Log Sent Message",
          "value": "logOutgoing",
          "action": "Log a message already sent by a device",
          "description": "Record an outgoing message sent outside the queue (e.g. an AI-generated auto-reply)."
        },
        {
          "name": "Record Inbound Reply",
          "value": "submitReply",
          "action": "Record an inbound SMS or WhatsApp reply",
          "description": "Submit a message received on a device so the server can store it and trigger auto-reply rules."
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Message",
      "value": "queueMessage",
      "action": "Send an SMS or WhatsApp message",
      "description": "Add one or more messages to the send queue. Your phone or paid provider delivers them."
    },
    {
      "name": "Send OTP Code",
      "value": "sendOtp",
      "action": "Send a one-time verification code",
      "description": "Generate a numeric OTP and deliver it via SMS or email."
    },
    {
      "name": "Verify OTP Code",
      "value": "verifyOtp",
      "action": "Verify a one-time code entered by a user",
      "description": "Check whether the code a user entered matches the one that was sent."
    },
    {
      "name": "Get Incoming Messages",
      "value": "getIncomingMessages",
      "action": "Get received SMS or WhatsApp messages",
      "description": "Retrieve inbound messages received on your connected devices."
    },
    {
      "name": "Get Incoming Emails",
      "value": "getIncomingEmails",
      "action": "Get received emails",
      "description": "Retrieve emails received on your connected mailboxes."
    },
    {
      "name": "Check Message Status",
      "value": "getQueueStatus",
      "action": "Check the delivery status of a queued message",
      "description": "Look up the current state (pending, sent, delivered, failed) of a message by its queue ID."
    },
    {
      "name": "Fetch Pending Messages",
      "value": "getPendingMessages",
      "action": "Fetch messages waiting to be sent",
      "description": "Claim and return unprocessed messages from the send queue. Typically used by device apps."
    },
    {
      "name": "Mark Message Sent",
      "value": "markSent",
      "action": "Mark a message as sent",
      "description": "Tell the server that a device successfully transmitted a queued message."
    },
    {
      "name": "Mark Message Delivered",
      "value": "markDelivered",
      "action": "Mark a message as delivered",
      "description": "Confirm the recipient's device received the message (carrier delivery receipt)."
    },
    {
      "name": "Mark Message Failed",
      "value": "markFailed",
      "action": "Mark a message as failed",
      "description": "Report that a message could not be sent, optionally with an error reason."
    },
    {
      "name": "Mark Message Processing",
      "value": "markProcessing",
      "action": "Mark a message as being processed",
      "description": "Tell the server a device has picked up a message and is about to send it."
    },
    {
      "name": "Log Sent Message",
      "value": "logOutgoing",
      "action": "Log a message already sent by a device",
      "description": "Record an outgoing message sent outside the queue (e.g. an AI-generated auto-reply)."
    },
    {
      "name": "Record Inbound Reply",
      "value": "submitReply",
      "action": "Record an inbound SMS or WhatsApp reply",
      "description": "Submit a message received on a device so the server can store it and trigger auto-reply rules."
    }
  ]

npm_readme:
  # n8n-nodes-rcszilla

  This is an n8n community node for [RCSZilla](https://rcszilla.com). It lets n8n workflows send free device-based or paid provider SMS and WhatsApp messages, check queue status, read pending queue items, update delivery state, submit inbound replies, log outgoing device-side messages, and connect automation flows to RCSZilla AI auto-replies.

  ## Installation

  Install from the n8n Community Nodes screen:

  ```
  n8n-nodes-rcszilla
  ```

  For local development:

  ```bash
  npm install
  npm run build
  npm link

  cd ~/.n8n/custom
  npm link n8n-nodes-rcszilla
  n8n start
  ```

  Node.js 18.17 or newer is required by current n8n community-node tooling.

  ## Credentials

  Create an **RCSZilla API** credential with:

  - **API Token**: a user API key or device token from RCSZilla.

  The public RCSZilla API URL is used automatically in n8n and is hidden from the credential form. Create an account at [rcszilla.com](https://rcszilla.com/) first, then generate an API key from the web panel.

  The node sends the token using both `Authorization: Bearer ...` and `X-API-Token` for compatibility with servers that strip authorization headers.

  ## Operations

  - **Queue Message**: calls `queue_sms` with `to`, `message`, `channel`, and optional `scheduled_at`.
  - **Get Queue Status**: calls `queue_status`.
  - **Get Pending Messages**: calls `pending_messages`.
  - **Mark Processing**, **Mark Sent**, **Mark Delivered**, **Mark Failed**: updates a queue item state.
  - **Submit Reply**: calls `submit_reply` to store an inbound SMS/WhatsApp reply.
  - **Log Outgoing**: calls `log_outgoing` for device-side or AI-generated sent messages.

  ## What You Can Automate

  - Free SMS/WhatsApp delivery through connected Android devices.
  - Paid SMS routing through configured cloud providers.
  - Appointment reminders, confirmations, and cancellation replies.
  - AI-assisted auto-reply workflows using incoming messages and logged outgoing replies.
  - Queue status checks and delivery-state updates for reliable workflow branching.

  ## Publishing

  Before publishing:

  ```bash
  npm install
  npm run lint
  npm run build
  npm pack --dry-run
  ```

  For n8n verified-community-node submission, publish from GitHub Actions with npm provenance. This package includes `.github/workflows/publish.yml`; configure an `NPM_TOKEN` repository secret and create a release/tag.

ai_documentation_summary:
  {"purpose":"A community node that enables n8n workflows to send SMS and WhatsApp messages via RCSZilla, manage message queues, track delivery states, and automate AI-driven auto-replies.","capabilities":["Send free device-based SMS messages","Send paid provider SMS messages","Send free device-based WhatsApp messages","Send paid provider WhatsApp messages","Check queue status","Read pending queue items","Update delivery state (processing, sent, delivered, failed)","Submit inbound replies","Log outgoing device-side messages","Connect to RCSZilla AI auto-reply workflows"],"authentication":"API Token (Bearer and X-API-Token headers)","commonUseCases":["Appointment reminders and confirmations","Cancellation reply automation","Queue status monitoring for workflow branching","AI-assisted auto-reply to incoming messages"],"limitations":["Requires Node.js 18.17 or newer for local development","Free SMS/WhatsApp delivery depends on connected Android devices","Paid provider routing requires pre-configuration of cloud providers"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


node_type: n8n-nodes-allsign.allsign
package_name: n8n-nodes-allsign
display_name: AllSign
description: Create, sign, and manage documents with AllSign e-signature platform. NOM-151, FEA, eIDAS.
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: allsign.io
author_github_url: https://github.com/AllSign-io/
npm_package_name: n8n-nodes-allsign
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:34.191Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-allsign

  ![AllSign](https://img.shields.io/badge/AllSign-E--Signature-6C5CE7?style=for-the-badge)
  ![n8n](https://img.shields.io/badge/n8n-Integration-FF6D5A?style=for-the-badge)
  ![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)

  [n8n](https://n8n.io) integration for the **[AllSign](https://allsign.io)** e-signature platform.

  Create and send documents for electronic signature directly from your n8n workflows using the AllSign API V2.

  ---

  ## ✨ Features

  ### 📄 Document — Create & Send

  Upload a PDF or DOCX (from URL or binary input) and send it for signing in one step, with full control over signature requirements.

  ### 📱 Signers: Email & WhatsApp

  Signers can be reached via **email**, **WhatsApp**, or **both**. When both channels are provided, the signer verifies their identity through OTP on both channels as part of the signing process.

  - ✅ Email-only signers
  - ✅ WhatsApp-only signers (phone number, no email required)
  - ✅ Both channels — dual OTP verification during signing

  ### 🔐 10 Signature Validations

  | Validation                 | Description                                                          |
  | -------------------------- | -------------------------------------------------------------------- |
  | **Autógrafa**              | Handwritten digital signature with biometric capture (on by default) |
  | **FEA**                    | Advanced Electronic Signature — Mexico standard                      |
  | **eIDAS**                  | European Electronic Signature — eIDAS compliance                     |
  | **NOM-151**                | NOM-151-SCFI certified timestamping (Mexico)                         |
  | **Video Signature**        | Recorded video of the signer during the signing process              |
  | **Biometric Selfie**       | Face comparison against the signer's government ID                   |
  | **SynthID (AI Detection)** | Verifies selfie is from a real person, not AI-generated              |
  | **ID Scan**                | Government-issued ID scan (INE, passport, etc.)                      |
  | **Identity Verification**  | AI-powered ID + selfie verification pipeline                         |
  | **Confirm Name**           | Signer must type their full name as confirmation                     |

  ### 📥 File Input

  - **Binary Input** — Use a file from a previous node (e.g. Google Drive, HTTP Request, Dropbox)
  - **URL** — Provide a public URL to a PDF or DOCX file (Google Drive and Dropbox links are auto-converted)

  ### 📐 Signature Field Placement

  Place signature fields precisely on the document:

  - **By coordinates** — X, Y position on a specific page (or all pages)
  - **By anchor text** — Search for text in the PDF and place the field there

  ### ⚙️ Additional Options

  | Option                       | Description                                                         |
  | ---------------------------- | ------------------------------------------------------------------- |
  | **Folder**                   | Organize documents into folders (by name or ID)                     |
  | **Expires At**               | Set an expiration deadline — document auto-expires after this date  |
  | **Template Variables (DOCX)**| Replace `{{ variables }}` in DOCX templates with dynamic values     |
  | **Permissions**              | Set document owner, collaborators, and public read access           |
  | **Send Invitations**         | Auto-send or hold for manual sharing                                |

  ---

  ## 🚀 Getting Started

  ### 1. Configure Credentials

  1. In n8n, go to **Credentials → Add Credential → AllSign API**
  2. Enter your **API Key** — get one from [dashboard.allsign.io/developers/api-keys](https://dashboard.allsign.io/developers/api-keys)
  3. (Optional) Set the **Base URL** if using a custom environment (default: `https://api.allsign.io`)
  4. Click **Save** — the connection test validates your key automatically

  ### 2. Use the Node

  1. Add the **AllSign** node to your workflow
  2. Set the document name and file source (URL or Binary)
  3. Add signers (name + email and/or WhatsApp number)
  4. Toggle the signature validations you need
  5. Execute!

  The signing invitation channel (email or WhatsApp) is auto-detected per signer based on the contact information provided.

  ---

  ## 🛠️ Development

  For contributors and developers who want to modify or extend this node.

  ### Clone & Install

  ```bash
  git clone https://github.com/AllSign-io/n8n-nodes-allsign.git
  cd n8n-nodes-allsign
  npm install
  ```

  ### Scripts

  | Command               | Description                  |
  | --------------------- | ---------------------------- |
  | `npm run dev`         | Start n8n with hot reload    |
  | `npm run build`       | Compile TypeScript → `dist/` |
  | `npm run build:watch` | Compile in watch mode        |
  | `npm test`            | Run unit tests (39 tests)    |
  | `npm run lint`        | Check code style             |

  ### Project Structure

  ```
  n8n-nodes-allsign/
  ├── credentials/
  │   └── AllSignApi.credentials.ts        # API Key + Base URL credential
  ├── nodes/
  │   └── Allsign/
  │       ├── Allsign.node.ts              # Main node (Create & Send)
  │       ├── Allsign.node.json            # Codex metadata & SEO
  │       ├── Allsign.node.test.ts         # Unit tests (39 tests)
  │       └── allsign.svg                  # Node icon
  ├── examples/
  │   ├── NDA_Automation_AllSign_Workflow.json  # Example workflow
  │   └── NDA_Template_AllSign.docx            # DOCX template with variables
  ├── docs/
  │   └── template-portal-description.md   # n8n template portal description
  ├── package.json
  ├── tsconfig.json
  └── jest.config.js
  ```

  ---

  ## 🐛 Troubleshooting

  | Problem                      | Solution                                   |
  | ---------------------------- | ------------------------------------------ |
  | Connection test fails        | Verify API Key and Base URL in credentials |
  | "Service refused connection" | Check the Base URL matches your backend    |
  | TypeScript errors (dev)      | Ensure Node.js v22+, run `npm install`     |

  ---

  ## 📚 Resources

  - [AllSign Platform](https://allsign.io)
  - [AllSign API Documentation](https://developers.allsign.io)
  - [AllSign API Playground](https://developers.allsign.io/api-playground/create-document)
  - [n8n Documentation](https://docs.n8n.io/)
  - [n8n Community Forum](https://community.n8n.io/)

  ## 📄 License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"This n8n node integrates with the AllSign e-signature platform to create, send, and manage electronic documents with advanced signature validations and multi-channel delivery.","capabilities":["Upload and send PDF or DOCX documents for electronic signature","Invite signers via email, WhatsApp, or both channels simultaneously","Support dual OTP verification for signers using both email and WhatsApp","Apply 10 different signature validations including handwritten, biometric, video, and AI-driven identity checks","Place signature fields by coordinates or anchor text","Organize documents into folders","Set document expiration dates","Replace template variables in DOCX files","Manage document permissions (owner, collaborators, public read)","Auto-convert Google Drive and Dropbox links to public URLs"],"authentication":"API Key required","commonUseCases":["Automated NDA or contract signing workflows","Multi-channel document delivery (email and WhatsApp)","Compliant e-signature for Mexican (FEA, NOM-151) and European (eIDAS) markets","AI-powered identity verification for high-security documents","Template-based document generation with dynamic variable replacement"],"limitations":["WhatsApp signers require phone number; email is optional for WhatsApp-only signers","Dual-channel signers require OTP verification on both email and WhatsApp","Signature field placement requires either coordinate-based or text-anchor-based input"],"relatedNodes":["Google Drive","Dropbox","HTTP Request","Binary File"]}


node_type: n8n-nodes-context-dev.contextDev
package_name: n8n-nodes-context-dev
display_name: Context.dev
description: Web scraping, brand intelligence, and transaction enrichment via Context.dev
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: fredfrom
author_github_url: https://github.com/fredfrom/
npm_package_name: n8n-nodes-context-dev
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.192Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "web",
      "options": [
        {
          "name": "AI Extraction",
          "value": "aiExtraction"
        },
        {
          "name": "Brand",
          "value": "brand"
        },
        {
          "name": "Logo Link",
          "value": "logoLink"
        },
        {
          "name": "Screenshot",
          "value": "screenshot"
        },
        {
          "name": "Transaction",
          "value": "transaction"
        },
        {
          "name": "Web",
          "value": "web"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrapeMarkdown",
      "options": [
        {
          "name": "Scrape to Markdown",
          "value": "scrapeMarkdown",
          "action": "Scrape a url to markdown"
        },
        {
          "name": "Scrape to HTML",
          "value": "scrapeHtml",
          "action": "Scrape a URL to HTML"
        },
        {
          "name": "Extract Images",
          "value": "extractImages",
          "action": "Extract images from a URL"
        },
        {
          "name": "Crawl Sitemap",
          "value": "crawlSitemap",
          "action": "Crawl a website sitemap"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "web"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "takeScreenshot",
      "options": [
        {
          "name": "Take Screenshot",
          "value": "takeScreenshot",
          "action": "Take a screenshot of a website"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "screenshot"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getByDomain",
      "options": [
        {
          "name": "Classify Industry (NAICS)",
          "value": "classifyIndustry",
          "action": "Classify a company by industry and sector"
        },
        {
          "name": "Extract Colors",
          "value": "extractColors",
          "action": "Extract brand colors from a website"
        },
        {
          "name": "Extract Fonts",
          "value": "extractFonts",
          "action": "Extract fonts from a website"
        },
        {
          "name": "Extract Products",
          "value": "extractProducts",
          "action": "Extract products from a website using AI"
        },
        {
          "name": "Extract Styleguide",
          "value": "extractStyleguide",
          "action": "Extract full design styleguide from a website"
        },
        {
          "name": "Get by Company Name",
          "value": "getByName",
          "action": "Get brand profile by company name"
        },
        {
          "name": "Get by Domain",
          "value": "getByDomain",
          "action": "Get brand profile by domain"
        },
        {
          "name": "Get by Email",
          "value": "getByEmail",
          "action": "Get brand profile by email address"
        },
        {
          "name": "Get by ISIN",
          "value": "getByIsin",
          "action": "Get brand profile by ISIN code"
        },
        {
          "name": "Get by Stock Ticker",
          "value": "getByTicker",
          "action": "Get brand profile by stock ticker"
        },
        {
          "name": "Prefetch",
          "value": "prefetch",
          "action": "Prefetch and cache brand data 0 credits"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "brand"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "identifyBrand",
      "options": [
        {
          "name": "Identify Brand",
          "value": "identifyBrand",
          "action": "Match a transaction descriptor to a brand"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transaction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "aiQuery",
      "options": [
        {
          "name": "AI Query",
          "value": "aiQuery",
          "action": "Run AI query to extract custom data points"
        },
        {
          "name": "Extract Brand Products",
          "value": "extractBrandProducts",
          "action": "Extract products from a brand website using AI"
        },
        {
          "name": "Extract Single Product",
          "value": "extractSingleProduct",
          "action": "Extract product data from a single product URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiExtraction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getLogo",
      "options": [
        {
          "name": "Get Logo",
          "value": "getLogo",
          "action": "Get a brand logo as binary image data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "logoLink"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Scrape to Markdown",
      "value": "scrapeMarkdown",
      "action": "Scrape a url to markdown",
      "resource": "web"
    },
    {
      "name": "Scrape to HTML",
      "value": "scrapeHtml",
      "action": "Scrape a URL to HTML",
      "resource": "web"
    },
    {
      "name": "Extract Images",
      "value": "extractImages",
      "action": "Extract images from a URL",
      "resource": "web"
    },
    {
      "name": "Crawl Sitemap",
      "value": "crawlSitemap",
      "action": "Crawl a website sitemap",
      "resource": "web"
    },
    {
      "name": "Take Screenshot",
      "value": "takeScreenshot",
      "action": "Take a screenshot of a website",
      "resource": "screenshot"
    },
    {
      "name": "Classify Industry (NAICS)",
      "value": "classifyIndustry",
      "action": "Classify a company by industry and sector",
      "resource": "brand"
    },
    {
      "name": "Extract Colors",
      "value": "extractColors",
      "action": "Extract brand colors from a website",
      "resource": "brand"
    },
    {
      "name": "Extract Fonts",
      "value": "extractFonts",
      "action": "Extract fonts from a website",
      "resource": "brand"
    },
    {
      "name": "Extract Products",
      "value": "extractProducts",
      "action": "Extract products from a website using AI",
      "resource": "brand"
    },
    {
      "name": "Extract Styleguide",
      "value": "extractStyleguide",
      "action": "Extract full design styleguide from a website",
      "resource": "brand"
    },
    {
      "name": "Get by Company Name",
      "value": "getByName",
      "action": "Get brand profile by company name",
      "resource": "brand"
    },
    {
      "name": "Get by Domain",
      "value": "getByDomain",
      "action": "Get brand profile by domain",
      "resource": "brand"
    },
    {
      "name": "Get by Email",
      "value": "getByEmail",
      "action": "Get brand profile by email address",
      "resource": "brand"
    },
    {
      "name": "Get by ISIN",
      "value": "getByIsin",
      "action": "Get brand profile by ISIN code",
      "resource": "brand"
    },
    {
      "name": "Get by Stock Ticker",
      "value": "getByTicker",
      "action": "Get brand profile by stock ticker",
      "resource": "brand"
    },
    {
      "name": "Prefetch",
      "value": "prefetch",
      "action": "Prefetch and cache brand data 0 credits",
      "resource": "brand"
    },
    {
      "name": "Identify Brand",
      "value": "identifyBrand",
      "action": "Match a transaction descriptor to a brand",
      "resource": "transaction"
    },
    {
      "name": "AI Query",
      "value": "aiQuery",
      "action": "Run AI query to extract custom data points",
      "resource": "aiExtraction"
    },
    {
      "name": "Extract Brand Products",
      "value": "extractBrandProducts",
      "action": "Extract products from a brand website using AI",
      "resource": "aiExtraction"
    },
    {
      "name": "Extract Single Product",
      "value": "extractSingleProduct",
      "action": "Extract product data from a single product URL",
      "resource": "aiExtraction"
    },
    {
      "name": "Get Logo",
      "value": "getLogo",
      "action": "Get a brand logo as binary image data",
      "resource": "logoLink"
    }
  ]

npm_readme:
  ![npm version](https://img.shields.io/npm/v/n8n-nodes-context-dev)
  ![License: MIT](https://img.shields.io/badge/license-MIT-blue)
  ![n8n community node](https://img.shields.io/badge/n8n-community%20node-ff6d5a)
  ![Context.dev](https://img.shields.io/badge/Context.dev-API-000000)

  # n8n-nodes-context-dev

  An [n8n](https://n8n.io) community node for the [Context.dev](https://context.dev) API. Wraps the full Context.dev REST API to bring web scraping, brand intelligence, AI extraction, logo retrieval, screenshot capture, and transaction matching into your n8n workflows — no code required.

  **21+ operations** across 6 resources, with full parameter support via Additional Fields.

  ## Installation

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

  ```
  n8n-nodes-context-dev
  ```

  Or install manually from the n8n root directory:

  ```bash
  npm install n8n-nodes-context-dev
  ```

  Then restart n8n.

  ## Credentials

  1. Sign up for a free account at [context.dev](https://context.dev) and copy your API key from the dashboard.
  2. In n8n, open **Credentials** and create a new credential of type **Context.dev API**.
  3. Paste your API key into the **API Key** field.
  4. Leave **Base URL** at the default (`https://api.context.dev`) unless you use a staging or self-hosted environment.
  5. *(Optional)* If you plan to use the **Logo Link** resource, enter your Logo Link Client ID (available from the Context.dev dashboard under Logo Link settings).
  6. Click **Test connection** to verify. A successful test confirms your API key is valid.

  ## Resources and Operations

  ### Web (1 credit per call)

  | Operation | Description |
  |-----------|-------------|
  | Scrape to Markdown | Convert any URL to clean Markdown |
  | Scrape to HTML | Get the rendered HTML of a URL |
  | Extract Images | List all images found on a URL |
  | Crawl Sitemap | Parse a sitemap and return all URLs |

  ### Brand (10 credits per call)

  | Operation | Description |
  |-----------|-------------|
  | Get by Domain | Full brand profile by domain |
  | Get by Email | Brand lookup by email address |
  | Get by Company Name | Brand lookup by company name |
  | Get by Stock Ticker | Brand lookup by stock ticker symbol |
  | Get by ISIN | Brand lookup by ISIN code |
  | Extract Colors | Website color palette extraction |
  | Extract Fonts | Website font detection |
  | Extract Styleguide | Full styleguide (colors, fonts, logos) |
  | Extract Products | Product detection via AI (10+ credits) |
  | Classify Industry (NAICS) | Company industry classification |
  | Prefetch | Warm the cache for a domain (**0 credits**) |

  ### AI Extraction (10+ credits per call)

  | Operation | Description |
  |-----------|-------------|
  | AI Query | Extract structured data from a domain using natural language |
  | Extract Single Product | AI-powered single product extraction |
  | Extract Brand Products | AI-powered bulk product extraction |

  ### Logo Link (0 credits — CDN)

  | Operation | Description |
  |-----------|-------------|
  | Get Logo | Download a brand logo as binary image data |

  ### Screenshot (1 credit per call)

  | Operation | Description |
  |-----------|-------------|
  | Take Screenshot | Capture viewport or full-page PNG of a URL |

  ### Transaction (1 credit per call)

  | Operation | Description |
  |-----------|-------------|
  | Match Transaction | Identify the brand behind a bank transaction descriptor |

  ## Usage Examples

  ### Web — Scrape a page to Markdown

  1. Add a **Context.dev** node to your workflow.
  2. Select resource **Web**, operation **Scrape to Markdown**.
  3. Set **URL** to `https://example.com`.
  4. *(Optional)* Open **Additional Fields** to toggle Include Links or Include Images.
  5. The output field `json.markdown` contains the scraped text.

  ### Brand — Look up a brand by domain

  1. Select resource **Brand**, operation **Get by Domain**.
  2. Set **Domain** to `stripe.com`.
  3. The output contains the full brand profile. Access `json.brand.colors` for the color palette or `json.brand.logo` for the logo URL.

  ### AI Extraction — Run a custom AI query

  1. Select resource **AI Extraction**, operation **AI Query**.
  2. Set **Domain** to `apple.com`.
  3. Click **Add Datapoint** under **Data to Extract** and add a datapoint with Key `founded_year`, Description `Year the company was founded`, and Type `number`.
  4. The output contains `json.results` with the extracted values.

  ### Logo Link — Download a brand logo

  *Prerequisite: Add your Logo Link Client ID to the Context.dev API credential.*

  1. Select resource **Logo Link**, operation **Get Logo**.
  2. Set **Domain** to `github.com`.
  3. The output has a `binary.data` field with the logo image. Connect a **Write Binary File** or **S3** node to store it.

  ### Screenshot — Capture a full-page screenshot

  1. Select resource **Screenshot**, operation **Take Screenshot**.
  2. Set **Domain** to `n8n.io`.
  3. *(Optional)* Open **Additional Fields** and set **Full Page** to `true`.
  4. The output has `binary.data` (PNG image) and `json` metadata. Connect a **Write Binary File** node to save it.

  ### Transaction — Match a transaction descriptor

  1. Select resource **Transaction**, operation **Match Transaction**.
  2. Set **Descriptor** to `AMZN Mktp US*AB12345`.
  3. The output contains `json.brand` with the matched merchant's name, logo, and domain.

  ## Compatibility

  - **n8n version:** 1.0 or later
  - **Node.js:** 18+
  - **Context.dev API:** v1

  ## Links

  - [Context.dev API documentation](https://docs.context.dev)
  - [Context.dev pricing](https://context.dev/pricing)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"A community n8n node that provides access to the Context.dev API for web scraping, brand intelligence, AI extraction, logo retrieval, screenshot capture, and transaction matching.","capabilities":["Web scraping to Markdown or HTML","Image and sitemap extraction from URLs","Brand profile lookup by domain, email, company name, stock ticker, or ISIN","Website color palette, font, and styleguide extraction","AI-powered product and data extraction from domains","Brand logo retrieval via CDN","Full-page or viewport screenshot capture","Transaction descriptor matching to identify brands"],"authentication":"API Key required (Context.dev API Key)","commonUseCases":["Extract structured data from websites using AI queries","Capture brand logos for marketing assets","Identify merchants behind bank transaction descriptors","Analyze website design elements (colors, fonts) for competitive research","Scrape and convert web content to Markdown for documentation"],"limitations":["Requires a paid Context.dev API subscription (free tier may have limits)","Some operations cost multiple credits (e.g., product extraction)","Logo Link feature requires a separate Logo Link Client ID credential","Full-page screenshots require additional credits"],"relatedNodes":["Write Binary File","S3","Webhook","HTTP Request"]}


node_type: n8n-nodes-twelve-data.twelveData
package_name: n8n-nodes-twelve-data
display_name: Twelve Data
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: nick_12data
author_github_url: https://github.com/hallengray/n8n-nodes-twelvedata.git
npm_package_name: n8n-nodes-twelve-data
npm_version: 0.2.5
community_fetched_at: 2026-07-14T14:40:34.193Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Access 140+ financial market data endpoints from Twelve Data API including stocks, forex, cryptocurrencies, ETFs, indices, and 90+ technical indicators

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "coreData",
      "options": [
        {
          "name": "Advanced",
          "value": "advanced",
          "description": "Batch requests, API usage, and utility endpoints"
        },
        {
          "name": "Core Data",
          "value": "coreData",
          "description": "Real-time and historical price data (quotes, time series, OHLC)"
        },
        {
          "name": "Fundamentals",
          "value": "fundamentals",
          "description": "Company fundamentals, financials, dividends, earnings"
        },
        {
          "name": "Market Intelligence",
          "value": "marketIntelligence",
          "description": "Analyst ratings, estimates, and economic calendar"
        },
        {
          "name": "Reference Data",
          "value": "referenceData",
          "description": "Symbol lists, exchanges, instrument types, market state"
        },
        {
          "name": "Technical Indicators",
          "value": "technicalIndicators",
          "description": "90+ technical indicators for trading analysis"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getQuote",
      "options": [
        {
          "name": "Convert Currency",
          "value": "currencyConversion",
          "action": "Convert currency amount",
          "routing": {
            "request": {
              "url": "/currency_conversion",
              "method": "GET"
            }
          },
          "description": "Convert an amount from one currency to another"
        },
        {
          "name": "Get Earliest Timestamp",
          "value": "getEarliestTimestamp",
          "action": "Get earliest available timestamp",
          "routing": {
            "request": {
              "url": "/earliest_timestamp",
              "method": "GET"
            }
          },
          "description": "Get the earliest available data timestamp for a symbol"
        },
        {
          "name": "Get End of Day Price",
          "value": "getEod",
          "action": "Get end of day price",
          "routing": {
            "request": {
              "url": "/eod",
              "method": "GET"
            }
          },
          "description": "Get the closing price for a specific date"
        },
        {
          "name": "Get Exchange Rate",
          "value": "getExchangeRate",
          "action": "Get currency exchange rate",
          "routing": {
            "request": {
              "url": "/exchange_rate",
              "method": "GET"
            }
          },
          "description": "Get real-time exchange rate between two currencies"
        },
        {
          "name": "Get Market Movers",
          "value": "getMarketMovers",
          "action": "Get market movers (gainers/losers)",
          "routing": {
            "request": {
              "url": "/market_movers/stocks",
              "method": "GET"
            }
          },
          "description": "Get top gaining or losing stocks"
        },
        {
          "name": "Get Market Movers (All Markets)",
          "value": "getMarketMoversAll",
          "action": "Get market movers for any market",
          "routing": {
            "request": {
              "url": "=/market_movers/{{$parameter.marketType}}",
              "method": "GET"
            }
          },
          "description": "Get top gaining or losing securities across stocks, forex, crypto, and more"
        },
        {
          "name": "Get Price",
          "value": "getPrice",
          "action": "Get current price for a symbol",
          "routing": {
            "request": {
              "url": "/price",
              "method": "GET"
            }
          },
          "description": "Get just the current price (lighter than full quote)"
        },
        {
          "name": "Get Quote",
          "value": "getQuote",
          "action": "Get real time quote for a symbol",
          "routing": {
            "request": {
              "url": "/quote",
              "method": "GET"
            }
          },
          "description": "Get real-time price quote including bid, ask, open, high, low, close, volume"
        },
        {
          "name": "Get Time Series",
          "value": "getTimeSeries",
          "action": "Get historical time series data",
          "routing": {
            "request": {
              "url": "/time_series",
              "method": "GET"
            }
          },
          "description": "Get historical OHLCV (Open, High, Low, Close, Volume) data"
        },
        {
          "name": "Get Time Series Cross",
          "value": "getTimeSeriesCross",
          "action": "Get cross-asset time series",
          "routing": {
            "request": {
              "url": "/time_series/cross",
              "method": "GET"
            }
          },
          "description": "Get time series data for multiple symbols or cross-asset analysis"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "coreData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listStocks",
      "options": [
        {
          "name": "Get Cross Listings",
          "value": "getCrossListings",
          "action": "Get cross listings",
          "routing": {
            "request": {
              "url": "/cross_listings",
              "method": "GET"
            }
          },
          "description": "Get cross-listed symbols for a security"
        },
        {
          "name": "Get Exchanges Schedule",
          "value": "getExchangesSchedule",
          "action": "Get exchanges schedule",
          "routing": {
            "request": {
              "url": "/exchanges_schedule",
              "method": "GET"
            }
          },
          "description": "Get trading hours and holidays for exchanges"
        },
        {
          "name": "Get Instrument Type",
          "value": "getInstrumentType",
          "action": "Get instrument type",
          "routing": {
            "request": {
              "url": "/instrument_type",
              "method": "GET"
            }
          },
          "description": "Get the type of a financial instrument"
        },
        {
          "name": "Get Market State",
          "value": "getMarketState",
          "action": "Get market state",
          "routing": {
            "request": {
              "url": "/market_state",
              "method": "GET"
            }
          },
          "description": "Check if markets are open or closed"
        },
        {
          "name": "List Analysis",
          "value": "listAnalysis",
          "action": "List analysis endpoints",
          "routing": {
            "request": {
              "url": "/analysis",
              "method": "GET"
            }
          },
          "description": "Get a list of available analysis/research endpoints"
        },
        {
          "name": "List Bonds",
          "value": "listBonds",
          "action": "List bonds",
          "routing": {
            "request": {
              "url": "/bonds",
              "method": "GET"
            }
          },
          "description": "Get a list of available bond instruments"
        },
        {
          "name": "List Commodities",
          "value": "listCommodities",
          "action": "List commodities",
          "routing": {
            "request": {
              "url": "/commodities",
              "method": "GET"
            }
          },
          "description": "Get a list of available commodity instruments"
        },
        {
          "name": "List Countries",
          "value": "listCountries",
          "action": "List countries",
          "routing": {
            "request": {
              "url": "/countries",
              "method": "GET"
            }
          },
          "description": "Get a list of supported countries"
        },
        {
          "name": "List Cryptocurrencies",
          "value": "listCryptocurrencies",
          "action": "List cryptocurrencies",
          "routing": {
            "request": {
              "url": "/cryptocurrencies",
              "method": "GET"
            }
          },
          "description": "Get a list of available cryptocurrency pairs"
        },
        {
          "name": "List Cryptocurrency Exchanges",
          "value": "listCryptoExchanges",
          "action": "List cryptocurrency exchanges",
          "routing": {
            "request": {
              "url": "/cryptocurrency_exchanges",
              "method": "GET"
            }
          },
          "description": "Get a list of available cryptocurrency exchanges"
        },
        {
          "name": "List ETF Families",
          "value": "listEtfFamilies",
          "action": "List ETF families",
          "routing": {
            "request": {
              "url": "/etfs/family",
              "method": "GET"
            }
          },
          "description": "Get a list of ETF families/providers"
        },
        {
          "name": "List ETF Types",
          "value": "listEtfTypes",
          "action": "List ETF types",
          "routing": {
            "request": {
              "url": "/etfs/type",
              "method": "GET"
            }
          },
          "description": "Get a list of ETF types/categories"
        },
        {
          "name": "List ETFs",
          "value": "listEtfs",
          "action": "List ETFs",
          "routing": {
            "request": {
              "url": "/etf",
              "method": "GET"
            }
          },
          "description": "Get a list of available ETF symbols"
        },
        {
          "name": "List ETFs (Extended)",
          "value": "listEtfsExtended",
          "action": "List ETFs with full details",
          "routing": {
            "request": {
              "url": "/etfs",
              "method": "GET"
            }
          },
          "description": "Get comprehensive list of ETFs with extended information"
        },
        {
          "name": "List Exchanges",
          "value": "listExchanges",
          "action": "List exchanges",
          "routing": {
            "request": {
              "url": "/exchanges",
              "method": "GET"
            }
          },
          "description": "Get a list of available stock exchanges"
        },
        {
          "name": "List Forex Pairs",
          "value": "listForexPairs",
          "action": "List forex currency pairs",
          "routing": {
            "request": {
              "url": "/forex_pairs",
              "method": "GET"
            }
          },
          "description": "Get a list of available forex currency pairs"
        },
        {
          "name": "List Fundamentals",
          "value": "listFundamentals",
          "action": "List fundamentals endpoints",
          "routing": {
            "request": {
              "url": "/fundamentals",
              "method": "GET"
            }
          },
          "description": "Get a list of available fundamental data endpoints"
        },
        {
          "name": "List Funds",
          "value": "listFunds",
          "action": "List mutual funds",
          "routing": {
            "request": {
              "url": "/funds",
              "method": "GET"
            }
          },
          "description": "Get a list of available mutual fund symbols"
        },
        {
          "name": "List Indices",
          "value": "listIndices",
          "action": "List market indices",
          "routing": {
            "request": {
              "url": "/indices",
              "method": "GET"
            }
          },
          "description": "Get a list of available market indices"
        },
        {
          "name": "List Intervals",
          "value": "listIntervals",
          "action": "List available intervals",
          "routing": {
            "request": {
              "url": "/intervals",
              "method": "GET"
            }
          },
          "description": "Get a list of available time intervals for data queries"
        },
        {
          "name": "List Market Data",
          "value": "listMarketData",
          "action": "List market data endpoints",
          "routing": {
            "request": {
              "url": "/market_data",
              "method": "GET"
            }
          },
          "description": "Get a list of available market data endpoints"
        },
        {
          "name": "List Mutual Fund Families",
          "value": "listMutualFundFamilies",
          "action": "List mutual fund families",
          "routing": {
            "request": {
              "url": "/mutual_funds/family",
              "method": "GET"
            }
          },
          "description": "Get a list of mutual fund families/providers"
        },
        {
          "name": "List Mutual Fund Types",
          "value": "listMutualFundTypes",
          "action": "List mutual fund types",
          "routing": {
            "request": {
              "url": "/mutual_funds/type",
              "method": "GET"
            }
          },
          "description": "Get a list of mutual fund types/categories"
        },
        {
          "name": "List Stocks",
          "value": "listStocks",
          "action": "List available stocks",
          "routing": {
            "request": {
              "url": "/stocks",
              "method": "GET"
            }
          },
          "description": "Get a list of available stock symbols"
        },
        {
          "name": "List Technical Indicators",
          "value": "listTechnicalIndicators",
          "action": "List technical indicators",
          "routing": {
            "request": {
              "url": "/technical_indicators",
              "method": "GET"
            }
          },
          "description": "Get a list of available technical indicators"
        },
        {
          "name": "Search Symbol",
          "value": "symbolSearch",
          "action": "Search for symbols",
          "routing": {
            "request": {
              "url": "/symbol_search",
              "method": "GET"
            }
          },
          "description": "Search for symbols by name or ticker"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "referenceData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProfile",
      "options": [
        {
          "name": "Get Balance Sheet",
          "value": "getBalanceSheet",
          "action": "Get balance sheet",
          "routing": {
            "request": {
              "url": "/balance_sheet",
              "method": "GET"
            }
          },
          "description": "Get company balance sheet data"
        },
        {
          "name": "Get Balance Sheet Consolidated",
          "value": "getBalanceSheetConsolidated",
          "action": "Get consolidated balance sheet",
          "routing": {
            "request": {
              "url": "/balance_sheet/consolidated",
              "method": "GET"
            }
          },
          "description": "Get consolidated balance sheet data for companies with subsidiaries"
        },
        {
          "name": "Get Cash Flow",
          "value": "getCashFlow",
          "action": "Get cash flow statement",
          "routing": {
            "request": {
              "url": "/cash_flow",
              "method": "GET"
            }
          },
          "description": "Get company cash flow statement data"
        },
        {
          "name": "Get Cash Flow Consolidated",
          "value": "getCashFlowConsolidated",
          "action": "Get consolidated cash flow",
          "routing": {
            "request": {
              "url": "/cash_flow/consolidated",
              "method": "GET"
            }
          },
          "description": "Get consolidated cash flow statement for companies with subsidiaries"
        },
        {
          "name": "Get Dividends",
          "value": "getDividends",
          "action": "Get dividend history",
          "routing": {
            "request": {
              "url": "/dividends",
              "method": "GET"
            }
          },
          "description": "Get historical dividend payments for a stock"
        },
        {
          "name": "Get Dividends Calendar",
          "value": "getDividendsCalendar",
          "action": "Get upcoming dividends",
          "routing": {
            "request": {
              "url": "/dividends_calendar",
              "method": "GET"
            }
          },
          "description": "Get calendar of upcoming dividend payments across all stocks"
        },
        {
          "name": "Get Earnings",
          "value": "getEarnings",
          "action": "Get earnings data",
          "routing": {
            "request": {
              "url": "/earnings",
              "method": "GET"
            }
          },
          "description": "Get historical and upcoming earnings data"
        },
        {
          "name": "Get Earnings Calendar",
          "value": "getEarningsCalendar",
          "action": "Get earnings calendar",
          "routing": {
            "request": {
              "url": "/earnings_calendar",
              "method": "GET"
            }
          },
          "description": "Get upcoming earnings announcements"
        },
        {
          "name": "Get Fund Holders",
          "value": "getFundHolders",
          "action": "Get fund holders",
          "routing": {
            "request": {
              "url": "/fund_holders",
              "method": "GET"
            }
          },
          "description": "Get mutual fund ownership data"
        },
        {
          "name": "Get Income Statement",
          "value": "getIncomeStatement",
          "action": "Get income statement",
          "routing": {
            "request": {
              "url": "/income_statement",
              "method": "GET"
            }
          },
          "description": "Get company income statement data"
        },
        {
          "name": "Get Income Statement Consolidated",
          "value": "getIncomeStatementConsolidated",
          "action": "Get consolidated income statement",
          "routing": {
            "request": {
              "url": "/income_statement/consolidated",
              "method": "GET"
            }
          },
          "description": "Get consolidated income statement for companies with subsidiaries"
        },
        {
          "name": "Get Insider Transactions",
          "value": "getInsiderTransactions",
          "action": "Get insider transactions",
          "routing": {
            "request": {
              "url": "/insider_transactions",
              "method": "GET"
            }
          },
          "description": "Get insider buying and selling activity"
        },
        {
          "name": "Get Institutional Holders",
          "value": "getInstitutionalHolders",
          "action": "Get institutional holders",
          "routing": {
            "request": {
              "url": "/institutional_holders",
              "method": "GET"
            }
          },
          "description": "Get institutional ownership data"
        },
        {
          "name": "Get IPO Calendar",
          "value": "getIpoCalendar",
          "action": "Get IPO calendar",
          "routing": {
            "request": {
              "url": "/ipo_calendar",
              "method": "GET"
            }
          },
          "description": "Get upcoming IPO listings"
        },
        {
          "name": "Get Key Executives",
          "value": "getKeyExecutives",
          "action": "Get key executives",
          "routing": {
            "request": {
              "url": "/key_executives",
              "method": "GET"
            }
          },
          "description": "Get company executive and management information"
        },
        {
          "name": "Get Market Cap",
          "value": "getMarketCap",
          "action": "Get market capitalization",
          "routing": {
            "request": {
              "url": "/market_cap",
              "method": "GET"
            }
          },
          "description": "Get current market capitalization for a stock"
        },
        {
          "name": "Get Profile",
          "value": "getProfile",
          "action": "Get company profile",
          "routing": {
            "request": {
              "url": "/profile",
              "method": "GET"
            }
          },
          "description": "Get company information including sector, industry, employees, description"
        },
        {
          "name": "Get Splits Calendar",
          "value": "getSplitsCalendar",
          "action": "Get upcoming stock splits",
          "routing": {
            "request": {
              "url": "/splits_calendar",
              "method": "GET"
            }
          },
          "description": "Get calendar of upcoming stock splits across all stocks"
        },
        {
          "name": "Get Statistics",
          "value": "getStatistics",
          "action": "Get key statistics",
          "routing": {
            "request": {
              "url": "/statistics",
              "method": "GET"
            }
          },
          "description": "Get key financial statistics and metrics"
        },
        {
          "name": "Get Stock Splits",
          "value": "getStockSplits",
          "action": "Get stock splits",
          "routing": {
            "request": {
              "url": "/splits",
              "method": "GET"
            }
          },
          "description": "Get historical stock split data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fundamentals"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sma",
      "options": [
        {
          "name": "DEMA - Double Exponential Moving Average",
          "value": "dema",
          "action": "Calculate DEMA indicator",
          "routing": {
            "request": {
              "url": "/dema",
              "method": "GET"
            }
          },
          "description": "Double Exponential Moving Average - reduces lag"
        },
        {
          "name": "EMA - Exponential Moving Average",
          "value": "ema",
          "action": "Calculate EMA indicator",
          "routing": {
            "request": {
              "url": "/ema",
              "method": "GET"
            }
          },
          "description": "Exponential Moving Average - weighted toward recent prices"
        },
        {
          "name": "KAMA - Kaufman Adaptive Moving Average",
          "value": "kama",
          "action": "Calculate KAMA indicator",
          "routing": {
            "request": {
              "url": "/kama",
              "method": "GET"
            }
          },
          "description": "Kaufman Adaptive Moving Average - adjusts to market volatility"
        },
        {
          "name": "MAMA - MESA Adaptive Moving Average",
          "value": "mama",
          "action": "Calculate MAMA indicator",
          "routing": {
            "request": {
              "url": "/mama",
              "method": "GET"
            }
          },
          "description": "MESA Adaptive Moving Average - adapts to price cycles"
        },
        {
          "name": "SMA - Simple Moving Average",
          "value": "sma",
          "action": "Calculate SMA indicator",
          "routing": {
            "request": {
              "url": "/sma",
              "method": "GET"
            }
          },
          "description": "Simple Moving Average - basic price average"
        },
        {
          "name": "T3MA - Triple Exponential Moving Average",
          "value": "t3ma",
          "action": "Calculate T3MA indicator",
          "routing": {
            "request": {
              "url": "/t3ma",
              "method": "GET"
            }
          },
          "description": "Triple Exponential Moving Average - smoother than EMA"
        },
        {
          "name": "TEMA - Triple Exponential Moving Average",
          "value": "tema",
          "action": "Calculate TEMA indicator",
          "routing": {
            "request": {
              "url": "/tema",
              "method": "GET"
            }
          },
          "description": "Triple Exponential Moving Average - reduces lag significantly"
        },
        {
          "name": "TRIMA - Triangular Moving Average",
          "value": "trima",
          "action": "Calculate TRIMA indicator",
          "routing": {
            "request": {
              "url": "/trima",
              "method": "GET"
            }
          },
          "description": "Triangular Moving Average - double smoothed"
        },
        {
          "name": "WMA - Weighted Moving Average",
          "value": "wma",
          "action": "Calculate WMA indicator",
          "routing": {
            "request": {
              "url": "/wma",
              "method": "GET"
            }
          },
          "description": "Weighted Moving Average - linear weighted"
        },
        {
          "name": "ADX - Average Directional Index",
          "value": "adx",
          "action": "Calculate ADX indicator",
          "routing": {
            "request": {
              "url": "/adx",
              "method": "GET"
            }
          },
          "description": "Average Directional Index - measures trend strength"
        },
        {
          "name": "ADXR - Average Directional Movement Index Rating",
          "value": "adxr",
          "action": "Calculate ADXR indicator",
          "routing": {
            "request": {
              "url": "/adxr",
              "method": "GET"
            }
          },
          "description": "Average Directional Movement Index Rating"
        },
        {
          "name": "APO - Absolute Price Oscillator",
          "value": "apo",
          "action": "Calculate APO indicator",
          "routing": {
            "request": {
              "url": "/apo",
              "method": "GET"
            }
          },
          "description": "Absolute Price Oscillator - difference between two EMAs"
        },
        {
          "name": "CCI - Commodity Channel Index",
          "value": "cci",
          "action": "Calculate CCI indicator",
          "routing": {
            "request": {
              "url": "/cci",
              "method": "GET"
            }
          },
          "description": "Commodity Channel Index - identifies overbought/oversold"
        },
        {
          "name": "CMO - Chande Momentum Oscillator",
          "value": "cmo",
          "action": "Calculate CMO indicator",
          "routing": {
            "request": {
              "url": "/cmo",
              "method": "GET"
            }
          },
          "description": "Chande Momentum Oscillator - momentum indicator"
        },
        {
          "name": "DX - Directional Movement Index",
          "value": "dx",
          "action": "Calculate DX indicator",
          "routing": {
            "request": {
              "url": "/dx",
              "method": "GET"
            }
          },
          "description": "Directional Movement Index"
        },
        {
          "name": "MACD - Moving Average Convergence Divergence",
          "value": "macd",
          "action": "Calculate MACD indicator",
          "routing": {
            "request": {
              "url": "/macd",
              "method": "GET"
            }
          },
          "description": "Moving Average Convergence Divergence - trend following"
        },
        {
          "name": "MFI - Money Flow Index",
          "value": "mfi",
          "action": "Calculate MFI indicator",
          "routing": {
            "request": {
              "url": "/mfi",
              "method": "GET"
            }
          },
          "description": "Money Flow Index - volume-weighted RSI"
        },
        {
          "name": "MOM - Momentum",
          "value": "mom",
          "action": "Calculate Momentum indicator",
          "routing": {
            "request": {
              "url": "/mom",
              "method": "GET"
            }
          },
          "description": "Momentum - rate of price change"
        },
        {
          "name": "PPO - Percentage Price Oscillator",
          "value": "ppo",
          "action": "Calculate PPO indicator",
          "routing": {
            "request": {
              "url": "/ppo",
              "method": "GET"
            }
          },
          "description": "Percentage Price Oscillator - percentage MACD"
        },
        {
          "name": "ROC - Rate of Change",
          "value": "roc",
          "action": "Calculate ROC indicator",
          "routing": {
            "request": {
              "url": "/roc",
              "method": "GET"
            }
          },
          "description": "Rate of Change - percentage price change"
        },
        {
          "name": "RSI - Relative Strength Index",
          "value": "rsi",
          "action": "Calculate RSI indicator",
          "routing": {
            "request": {
              "url": "/rsi",
              "method": "GET"
            }
          },
          "description": "Relative Strength Index - momentum oscillator"
        },
        {
          "name": "STOCH - Stochastic Oscillator",
          "value": "stoch",
          "action": "Calculate Stochastic indicator",
          "routing": {
            "request": {
              "url": "/stoch",
              "method": "GET"
            }
          },
          "description": "Stochastic Oscillator - compares closing price to range"
        },
        {
          "name": "STOCHRSI - Stochastic RSI",
          "value": "stochrsi",
          "action": "Calculate Stochastic RSI indicator",
          "routing": {
            "request": {
              "url": "/stochrsi",
              "method": "GET"
            }
          },
          "description": "Stochastic RSI - stochastic of RSI"
        },
        {
          "name": "TRIX - Triple Exponential Average",
          "value": "trix",
          "action": "Calculate TRIX indicator",
          "routing": {
            "request": {
              "url": "/trix",
              "method": "GET"
            }
          },
          "description": "Triple Exponential Average - momentum oscillator"
        },
        {
          "name": "ULTOSC - Ultimate Oscillator",
          "value": "ultosc",
          "action": "Calculate Ultimate Oscillator",
          "routing": {
            "request": {
              "url": "/ultosc",
              "method": "GET"
            }
          },
          "description": "Ultimate Oscillator - multi-timeframe momentum"
        },
        {
          "name": "WILLR - Williams %R",
          "value": "willr",
          "action": "Calculate Williams %R indicator",
          "routing": {
            "request": {
              "url": "/willr",
              "method": "GET"
            }
          },
          "description": "Williams %R - overbought/oversold indicator"
        },
        {
          "name": "ATR - Average True Range",
          "value": "atr",
          "action": "Calculate ATR indicator",
          "routing": {
            "request": {
              "url": "/atr",
              "method": "GET"
            }
          },
          "description": "Average True Range - measures volatility"
        },
        {
          "name": "BBANDS - Bollinger Bands",
          "value": "bbands",
          "action": "Calculate Bollinger Bands",
          "routing": {
            "request": {
              "url": "/bbands",
              "method": "GET"
            }
          },
          "description": "Bollinger Bands - volatility bands around SMA"
        },
        {
          "name": "NATR - Normalized Average True Range",
          "value": "natr",
          "action": "Calculate NATR indicator",
          "routing": {
            "request": {
              "url": "/natr",
              "method": "GET"
            }
          },
          "description": "Normalized Average True Range - percentage ATR"
        },
        {
          "name": "SUPERTREND - SuperTrend",
          "value": "supertrend",
          "action": "Calculate SuperTrend indicator",
          "routing": {
            "request": {
              "url": "/supertrend",
              "method": "GET"
            }
          },
          "description": "SuperTrend - trend following indicator"
        },
        {
          "name": "TRANGE - True Range",
          "value": "trange",
          "action": "Calculate True Range",
          "routing": {
            "request": {
              "url": "/trange",
              "method": "GET"
            }
          },
          "description": "True Range - single period volatility"
        },
        {
          "name": "AD - Accumulation/Distribution",
          "value": "ad",
          "action": "Calculate A/D indicator",
          "routing": {
            "request": {
              "url": "/ad",
              "method": "GET"
            }
          },
          "description": "Accumulation/Distribution - volume-based indicator"
        },
        {
          "name": "ADOSC - Chaikin A/D Oscillator",
          "value": "adosc",
          "action": "Calculate Chaikin A/D Oscillator",
          "routing": {
            "request": {
              "url": "/adosc",
              "method": "GET"
            }
          },
          "description": "Chaikin A/D Oscillator - momentum of A/D line"
        },
        {
          "name": "OBV - On Balance Volume",
          "value": "obv",
          "action": "Calculate OBV indicator",
          "routing": {
            "request": {
              "url": "/obv",
              "method": "GET"
            }
          },
          "description": "On Balance Volume - cumulative volume indicator"
        },
        {
          "name": "VWAP - Volume Weighted Average Price",
          "value": "vwap",
          "action": "Calculate VWAP",
          "routing": {
            "request": {
              "url": "/vwap",
              "method": "GET"
            }
          },
          "description": "Volume Weighted Average Price"
        },
        {
          "name": "AROON - Aroon Indicator",
          "value": "aroon",
          "action": "Calculate Aroon indicator",
          "routing": {
            "request": {
              "url": "/aroon",
              "method": "GET"
            }
          },
          "description": "Aroon Indicator - identifies trend changes"
        },
        {
          "name": "AROONOSC - Aroon Oscillator",
          "value": "aroonosc",
          "action": "Calculate Aroon Oscillator",
          "routing": {
            "request": {
              "url": "/aroonosc",
              "method": "GET"
            }
          },
          "description": "Aroon Oscillator - difference between Aroon Up and Down"
        },
        {
          "name": "BOP - Balance of Power",
          "value": "bop",
          "action": "Calculate Balance of Power",
          "routing": {
            "request": {
              "url": "/bop",
              "method": "GET"
            }
          },
          "description": "Balance of Power - measures buying/selling pressure"
        },
        {
          "name": "HT_TRENDMODE - Hilbert Transform Trend Mode",
          "value": "ht_trendmode",
          "action": "Calculate HT Trend Mode",
          "routing": {
            "request": {
              "url": "/ht_trendmode",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - Trend vs Cycle Mode ✨ BETA"
        },
        {
          "name": "MINUS_DI - Minus Directional Indicator",
          "value": "minus_di",
          "action": "Calculate Minus DI",
          "routing": {
            "request": {
              "url": "/minus_di",
              "method": "GET"
            }
          },
          "description": "Minus Directional Indicator - downward trend strength"
        },
        {
          "name": "MINUS_DM - Minus Directional Movement",
          "value": "minus_dm",
          "action": "Calculate Minus DM",
          "routing": {
            "request": {
              "url": "/minus_dm",
              "method": "GET"
            }
          },
          "description": "Minus Directional Movement"
        },
        {
          "name": "PLUS_DI - Plus Directional Indicator",
          "value": "plus_di",
          "action": "Calculate Plus DI",
          "routing": {
            "request": {
              "url": "/plus_di",
              "method": "GET"
            }
          },
          "description": "Plus Directional Indicator - upward trend strength"
        },
        {
          "name": "PLUS_DM - Plus Directional Movement",
          "value": "plus_dm",
          "action": "Calculate Plus DM",
          "routing": {
            "request": {
              "url": "/plus_dm",
              "method": "GET"
            }
          },
          "description": "Plus Directional Movement"
        },
        {
          "name": "SAR - Parabolic SAR",
          "value": "sar",
          "action": "Calculate Parabolic SAR",
          "routing": {
            "request": {
              "url": "/sar",
              "method": "GET"
            }
          },
          "description": "Parabolic Stop and Reverse - trend following"
        },
        {
          "name": "ICHIMOKU - Ichimoku Cloud",
          "value": "ichimoku",
          "action": "Calculate Ichimoku Cloud",
          "routing": {
            "request": {
              "url": "/ichimoku",
              "method": "GET"
            }
          },
          "description": "Ichimoku Kinko Hyo - comprehensive trend indicator"
        },
        {
          "name": "BETA - Beta Coefficient",
          "value": "beta",
          "action": "Calculate Beta",
          "routing": {
            "request": {
              "url": "/beta",
              "method": "GET"
            }
          },
          "description": "Beta - measures volatility relative to market"
        },
        {
          "name": "CORREL - Pearson Correlation Coefficient",
          "value": "correl",
          "action": "Calculate Correlation",
          "routing": {
            "request": {
              "url": "/correl",
              "method": "GET"
            }
          },
          "description": "Pearson Correlation Coefficient"
        },
        {
          "name": "LINEARREG - Linear Regression",
          "value": "linearreg",
          "action": "Calculate Linear Regression",
          "routing": {
            "request": {
              "url": "/linearreg",
              "method": "GET"
            }
          },
          "description": "Linear Regression - trend line value"
        },
        {
          "name": "LINEARREG_ANGLE - Linear Regression Angle",
          "value": "linearreg_angle",
          "action": "Calculate Linear Regression Angle",
          "routing": {
            "request": {
              "url": "/linearreg_angle",
              "method": "GET"
            }
          },
          "description": "Linear Regression Angle in degrees"
        },
        {
          "name": "LINEARREG_INTERCEPT - Linear Regression Intercept",
          "value": "linearreg_intercept",
          "action": "Calculate Linear Regression Intercept",
          "routing": {
            "request": {
              "url": "/linearreg_intercept",
              "method": "GET"
            }
          },
          "description": "Linear Regression Intercept ✨ BETA"
        },
        {
          "name": "LINEARREG_SLOPE - Linear Regression Slope",
          "value": "linearreg_slope",
          "action": "Calculate Linear Regression Slope",
          "routing": {
            "request": {
              "url": "/linearreg_slope",
              "method": "GET"
            }
          },
          "description": "Linear Regression Slope"
        },
        {
          "name": "STDDEV - Standard Deviation",
          "value": "stddev",
          "action": "Calculate Standard Deviation",
          "routing": {
            "request": {
              "url": "/stddev",
              "method": "GET"
            }
          },
          "description": "Standard Deviation - measures dispersion"
        },
        {
          "name": "TSF - Time Series Forecast",
          "value": "tsf",
          "action": "Calculate Time Series Forecast",
          "routing": {
            "request": {
              "url": "/tsf",
              "method": "GET"
            }
          },
          "description": "Time Series Forecast - linear regression projection"
        },
        {
          "name": "VAR - Variance",
          "value": "var",
          "action": "Calculate Variance",
          "routing": {
            "request": {
              "url": "/var",
              "method": "GET"
            }
          },
          "description": "Variance - measures spread"
        },
        {
          "name": "AVGPRICE - Average Price",
          "value": "avgprice",
          "action": "Calculate Average Price",
          "routing": {
            "request": {
              "url": "/avgprice",
              "method": "GET"
            }
          },
          "description": "Average of OHLC prices"
        },
        {
          "name": "HT_DCPERIOD - Hilbert Transform Dominant Cycle Period",
          "value": "ht_dcperiod",
          "action": "Calculate HT Dominant Cycle Period",
          "routing": {
            "request": {
              "url": "/ht_dcperiod",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - Dominant Cycle Period ✨ BETA"
        },
        {
          "name": "HT_DCPHASE - Hilbert Transform Dominant Cycle Phase",
          "value": "ht_dcphase",
          "action": "Calculate HT Dominant Cycle Phase",
          "routing": {
            "request": {
              "url": "/ht_dcphase",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - Dominant Cycle Phase"
        },
        {
          "name": "HT_PHASOR - Hilbert Transform Phasor Components",
          "value": "ht_phasor",
          "action": "Calculate HT Phasor",
          "routing": {
            "request": {
              "url": "/ht_phasor",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - Phasor Components ✨ BETA"
        },
        {
          "name": "HT_SINE - Hilbert Transform SineWave",
          "value": "ht_sine",
          "action": "Calculate HT SineWave",
          "routing": {
            "request": {
              "url": "/ht_sine",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - SineWave"
        },
        {
          "name": "HT_TRENDLINE - Hilbert Transform Instantaneous Trendline",
          "value": "ht_trendline",
          "action": "Calculate HT Trendline",
          "routing": {
            "request": {
              "url": "/ht_trendline",
              "method": "GET"
            }
          },
          "description": "Hilbert Transform - Instantaneous Trendline"
        },
        {
          "name": "MEDPRICE - Median Price",
          "value": "medprice",
          "action": "Calculate Median Price",
          "routing": {
            "request": {
              "url": "/medprice",
              "method": "GET"
            }
          },
          "description": "Median Price - (High + Low) / 2"
        },
        {
          "name": "MIDPOINT - Midpoint",
          "value": "midpoint",
          "action": "Calculate Midpoint",
          "routing": {
            "request": {
              "url": "/midpoint",
              "method": "GET"
            }
          },
          "description": "Midpoint over period"
        },
        {
          "name": "MIDPRICE - Midpoint Price",
          "value": "midprice",
          "action": "Calculate Midpoint Price",
          "routing": {
            "request": {
              "url": "/midprice",
              "method": "GET"
            }
          },
          "description": "Midpoint Price over period"
        },
        {
          "name": "PERCENT_B - Bollinger Bands %B",
          "value": "percent_b",
          "action": "Calculate Percent B",
          "routing": {
            "request": {
              "url": "/percent_b",
              "method": "GET"
            }
          },
          "description": "Bollinger Bands %B - position within bands"
        },
        {
          "name": "PIVOT_POINTS_HL - Pivot Points High/Low",
          "value": "pivot_points_hl",
          "action": "Calculate Pivot Points",
          "routing": {
            "request": {
              "url": "/pivot_points_hl",
              "method": "GET"
            }
          },
          "description": "Pivot Points High/Low"
        },
        {
          "name": "TYPPRICE - Typical Price",
          "value": "typprice",
          "action": "Calculate Typical Price",
          "routing": {
            "request": {
              "url": "/typprice",
              "method": "GET"
            }
          },
          "description": "Typical Price - (High + Low + Close) / 3"
        },
        {
          "name": "WCLPRICE - Weighted Close Price",
          "value": "wclprice",
          "action": "Calculate Weighted Close Price",
          "routing": {
            "request": {
              "url": "/wclprice",
              "method": "GET"
            }
          },
          "description": "Weighted Close Price - (High + Low + 2*Close) / 4"
        },
        {
          "name": "ACOS - Arc Cosine",
          "value": "acos",
          "action": "Calculate Arc Cosine",
          "routing": {
            "request": {
              "url": "/acos",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric ACos"
        },
        {
          "name": "ADD - Arithmetic Add",
          "value": "add",
          "action": "Calculate Addition",
          "routing": {
            "request": {
              "url": "/add",
              "method": "GET"
            }
          },
          "description": "Vector Arithmetic Add"
        },
        {
          "name": "ASIN - Arc Sine",
          "value": "asin",
          "action": "Calculate Arc Sine",
          "routing": {
            "request": {
              "url": "/asin",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric ASin ✨ BETA"
        },
        {
          "name": "ATAN - Arc Tangent",
          "value": "atan",
          "action": "Calculate Arc Tangent",
          "routing": {
            "request": {
              "url": "/atan",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric ATan"
        },
        {
          "name": "CEIL - Ceiling",
          "value": "ceil",
          "action": "Calculate Ceiling",
          "routing": {
            "request": {
              "url": "/ceil",
              "method": "GET"
            }
          },
          "description": "Vector Ceiling"
        },
        {
          "name": "COS - Cosine",
          "value": "cos",
          "action": "Calculate Cosine",
          "routing": {
            "request": {
              "url": "/cos",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Cos ✨ BETA"
        },
        {
          "name": "COSH - Hyperbolic Cosine",
          "value": "cosh",
          "action": "Calculate Hyperbolic Cosine",
          "routing": {
            "request": {
              "url": "/cosh",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Cosh"
        },
        {
          "name": "DIV - Arithmetic Division",
          "value": "div",
          "action": "Calculate Division",
          "routing": {
            "request": {
              "url": "/div",
              "method": "GET"
            }
          },
          "description": "Vector Arithmetic Division ✨ BETA"
        },
        {
          "name": "EXP - Exponential",
          "value": "exp",
          "action": "Calculate Exponential",
          "routing": {
            "request": {
              "url": "/exp",
              "method": "GET"
            }
          },
          "description": "Vector Arithmetic Exp"
        },
        {
          "name": "FLOOR - Floor",
          "value": "floor",
          "action": "Calculate Floor",
          "routing": {
            "request": {
              "url": "/floor",
              "method": "GET"
            }
          },
          "description": "Vector Floor"
        },
        {
          "name": "LN - Natural Logarithm",
          "value": "ln",
          "action": "Calculate Natural Log",
          "routing": {
            "request": {
              "url": "/ln",
              "method": "GET"
            }
          },
          "description": "Vector Log Natural"
        },
        {
          "name": "LOG10 - Logarithm Base 10",
          "value": "log10",
          "action": "Calculate Log Base 10",
          "routing": {
            "request": {
              "url": "/log10",
              "method": "GET"
            }
          },
          "description": "Vector Log10"
        },
        {
          "name": "MAX - Maximum Value",
          "value": "max",
          "action": "Calculate Maximum",
          "routing": {
            "request": {
              "url": "/max",
              "method": "GET"
            }
          },
          "description": "Highest value over period"
        },
        {
          "name": "MIN - Minimum Value",
          "value": "min",
          "action": "Calculate Minimum",
          "routing": {
            "request": {
              "url": "/min",
              "method": "GET"
            }
          },
          "description": "Lowest value over period"
        },
        {
          "name": "MINMAX - Min/Max Values",
          "value": "minmax",
          "action": "Calculate Min/Max",
          "routing": {
            "request": {
              "url": "/minmax",
              "method": "GET"
            }
          },
          "description": "Lowest and highest values over period"
        },
        {
          "name": "MINMAXINDEX - Min/Max Index",
          "value": "minmaxindex",
          "action": "Calculate Min/Max Index",
          "routing": {
            "request": {
              "url": "/minmaxindex",
              "method": "GET"
            }
          },
          "description": "Index of lowest and highest values"
        },
        {
          "name": "MULT - Arithmetic Multiplication",
          "value": "mult",
          "action": "Calculate Multiplication",
          "routing": {
            "request": {
              "url": "/mult",
              "method": "GET"
            }
          },
          "description": "Vector Arithmetic Mult"
        },
        {
          "name": "ROUND - Round",
          "value": "round",
          "action": "Calculate Round",
          "routing": {
            "request": {
              "url": "/round",
              "method": "GET"
            }
          },
          "description": "Vector Round"
        },
        {
          "name": "SIN - Sine",
          "value": "sin",
          "action": "Calculate Sine",
          "routing": {
            "request": {
              "url": "/sin",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Sin ✨ BETA"
        },
        {
          "name": "SINH - Hyperbolic Sine",
          "value": "sinh",
          "action": "Calculate Hyperbolic Sine",
          "routing": {
            "request": {
              "url": "/sinh",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Sinh"
        },
        {
          "name": "SQRT - Square Root",
          "value": "sqrt",
          "action": "Calculate Square Root",
          "routing": {
            "request": {
              "url": "/sqrt",
              "method": "GET"
            }
          },
          "description": "Vector Square Root"
        },
        {
          "name": "SUB - Arithmetic Subtraction",
          "value": "sub",
          "action": "Calculate Subtraction",
          "routing": {
            "request": {
              "url": "/sub",
              "method": "GET"
            }
          },
          "description": "Vector Arithmetic Sub"
        },
        {
          "name": "SUM - Summation",
          "value": "sum",
          "action": "Calculate Sum",
          "routing": {
            "request": {
              "url": "/sum",
              "method": "GET"
            }
          },
          "description": "Summation over period"
        },
        {
          "name": "TAN - Tangent",
          "value": "tan",
          "action": "Calculate Tangent",
          "routing": {
            "request": {
              "url": "/tan",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Tan"
        },
        {
          "name": "TANH - Hyperbolic Tangent",
          "value": "tanh",
          "action": "Calculate Hyperbolic Tangent",
          "routing": {
            "request": {
              "url": "/tanh",
              "method": "GET"
            }
          },
          "description": "Vector Trigonometric Tanh"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "technicalIndicators"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAnalystRatings",
      "options": [
        {
          "name": "Get Analyst Ratings",
          "value": "getAnalystRatings",
          "action": "Get analyst ratings",
          "routing": {
            "request": {
              "url": "/analyst_ratings/us_equities",
              "method": "GET"
            }
          },
          "description": "Get analyst ratings and recommendations"
        },
        {
          "name": "Get Earnings Estimate",
          "value": "getEarningsEstimate",
          "action": "Get earnings estimate",
          "routing": {
            "request": {
              "url": "/earnings_estimate",
              "method": "GET"
            }
          },
          "description": "Get analyst earnings estimates"
        },
        {
          "name": "Get EPS Trend",
          "value": "getEpsTrend",
          "action": "Get EPS trend",
          "routing": {
            "request": {
              "url": "/eps_trend",
              "method": "GET"
            }
          },
          "description": "Get earnings per share trend data"
        },
        {
          "name": "Get Growth Estimates",
          "value": "getGrowthEstimates",
          "action": "Get growth estimates",
          "routing": {
            "request": {
              "url": "/growth_estimates",
              "method": "GET"
            }
          },
          "description": "Get analyst growth estimates"
        },
        {
          "name": "Get Price Target",
          "value": "getPriceTarget",
          "action": "Get price target",
          "routing": {
            "request": {
              "url": "/price_target",
              "method": "GET"
            }
          },
          "description": "Get analyst price targets"
        },
        {
          "name": "Get Recommendations",
          "value": "getRecommendations",
          "action": "Get recommendations",
          "routing": {
            "request": {
              "url": "/recommendations",
              "method": "GET"
            }
          },
          "description": "Get analyst recommendation trends"
        },
        {
          "name": "Get Revenue Estimate",
          "value": "getRevenueEstimate",
          "action": "Get revenue estimate",
          "routing": {
            "request": {
              "url": "/revenue_estimate",
              "method": "GET"
            }
          },
          "description": "Get analyst revenue estimates"
        },
        {
          "name": "Get Analyst Ratings (Light)",
          "value": "getAnalystRatingsLight",
          "action": "Get analyst ratings snapshot",
          "routing": {
            "request": {
              "url": "/analyst_ratings/light",
              "method": "GET"
            }
          },
          "description": "Get lightweight analyst ratings summary (faster, less data)"
        },
        {
          "name": "Get EDGAR Filings",
          "value": "getEdgarFilings",
          "action": "Get SEC EDGAR filings",
          "routing": {
            "request": {
              "url": "/edgar_filings/archive",
              "method": "GET"
            }
          },
          "description": "Get SEC EDGAR filing documents and reports"
        },
        {
          "name": "Get EPS Revisions",
          "value": "getEpsRevisions",
          "action": "Get EPS revisions",
          "routing": {
            "request": {
              "url": "/eps_revisions",
              "method": "GET"
            }
          },
          "description": "Get earnings per share estimate revisions by analysts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "marketIntelligence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getApiUsage",
      "options": [
        {
          "name": "API Usage",
          "value": "getApiUsage",
          "action": "Get API usage statistics",
          "routing": {
            "request": {
              "url": "/api_usage",
              "method": "GET"
            }
          },
          "description": "Get your API usage and remaining credits"
        },
        {
          "name": "Batch Request",
          "value": "batchRequest",
          "action": "Make batch request",
          "routing": {
            "request": {
              "url": "/batch",
              "method": "GET"
            }
          },
          "description": "Get multiple data types for multiple symbols in one request"
        },
        {
          "name": "Get Logo",
          "value": "getLogo",
          "action": "Get company logo",
          "routing": {
            "request": {
              "url": "/logo",
              "method": "GET"
            }
          },
          "description": "Get company logo URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "advanced"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Convert Currency",
      "value": "currencyConversion",
      "action": "Convert currency amount",
      "routing": {
        "request": {
          "url": "/currency_conversion",
          "method": "GET"
        }
      },
      "description": "Convert an amount from one currency to another",
      "resource": "coreData"
    },
    {
      "name": "Get Earliest Timestamp",
      "value": "getEarliestTimestamp",
      "action": "Get earliest available timestamp",
      "routing": {
        "request": {
          "url": "/earliest_timestamp",
          "method": "GET"
        }
      },
      "description": "Get the earliest available data timestamp for a symbol",
      "resource": "coreData"
    },
    {
      "name": "Get End of Day Price",
      "value": "getEod",
      "action": "Get end of day price",
      "routing": {
        "request": {
          "url": "/eod",
          "method": "GET"
        }
      },
      "description": "Get the closing price for a specific date",
      "resource": "coreData"
    },
    {
      "name": "Get Exchange Rate",
      "value": "getExchangeRate",
      "action": "Get currency exchange rate",
      "routing": {
        "request": {
          "url": "/exchange_rate",
          "method": "GET"
        }
      },
      "description": "Get real-time exchange rate between two currencies",
      "resource": "coreData"
    },
    {
      "name": "Get Market Movers",
      "value": "getMarketMovers",
      "action": "Get market movers (gainers/losers)",
      "routing": {
        "request": {
          "url": "/market_movers/stocks",
          "method": "GET"
        }
      },
      "description": "Get top gaining or losing stocks",
      "resource": "coreData"
    },
    {
      "name": "Get Market Movers (All Markets)",
      "value": "getMarketMoversAll",
      "action": "Get market movers for any market",
      "routing": {
        "request": {
          "url": "=/market_movers/{{$parameter.marketType}}",
          "method": "GET"
        }
      },
      "description": "Get top gaining or losing securities across stocks, forex, crypto, and more",
      "resource": "coreData"
    },
    {
      "name": "Get Price",
      "value": "getPrice",
      "action": "Get current price for a symbol",
      "routing": {
        "request": {
          "url": "/price",
          "method": "GET"
        }
      },
      "description": "Get just the current price (lighter than full quote)",
      "resource": "coreData"
    },
    {
      "name": "Get Quote",
      "value": "getQuote",
      "action": "Get real time quote for a symbol",
      "routing": {
        "request": {
          "url": "/quote",
          "method": "GET"
        }
      },
      "description": "Get real-time price quote including bid, ask, open, high, low, close, volume",
      "resource": "coreData"
    },
    {
      "name": "Get Time Series",
      "value": "getTimeSeries",
      "action": "Get historical time series data",
      "routing": {
        "request": {
          "url": "/time_series",
          "method": "GET"
        }
      },
      "description": "Get historical OHLCV (Open, High, Low, Close, Volume) data",
      "resource": "coreData"
    },
    {
      "name": "Get Time Series Cross",
      "value": "getTimeSeriesCross",
      "action": "Get cross-asset time series",
      "routing": {
        "request": {
          "url": "/time_series/cross",
          "method": "GET"
        }
      },
      "description": "Get time series data for multiple symbols or cross-asset analysis",
      "resource": "coreData"
    },
    {
      "name": "Get Cross Listings",
      "value": "getCrossListings",
      "action": "Get cross listings",
      "routing": {
        "request": {
          "url": "/cross_listings",
          "method": "GET"
        }
      },
      "description": "Get cross-listed symbols for a security",
      "resource": "referenceData"
    },
    {
      "name": "Get Exchanges Schedule",
      "value": "getExchangesSchedule",
      "action": "Get exchanges schedule",
      "routing": {
        "request": {
          "url": "/exchanges_schedule",
          "method": "GET"
        }
      },
      "description": "Get trading hours and holidays for exchanges",
      "resource": "referenceData"
    },
    {
      "name": "Get Instrument Type",
      "value": "getInstrumentType",
      "action": "Get instrument type",
      "routing": {
        "request": {
          "url": "/instrument_type",
          "method": "GET"
        }
      },
      "description": "Get the type of a financial instrument",
      "resource": "referenceData"
    },
    {
      "name": "Get Market State",
      "value": "getMarketState",
      "action": "Get market state",
      "routing": {
        "request": {
          "url": "/market_state",
          "method": "GET"
        }
      },
      "description": "Check if markets are open or closed",
      "resource": "referenceData"
    },
    {
      "name": "List Analysis",
      "value": "listAnalysis",
      "action": "List analysis endpoints",
      "routing": {
        "request": {
          "url": "/analysis",
          "method": "GET"
        }
      },
      "description": "Get a list of available analysis/research endpoints",
      "resource": "referenceData"
    },
    {
      "name": "List Bonds",
      "value": "listBonds",
      "action": "List bonds",
      "routing": {
        "request": {
          "url": "/bonds",
          "method": "GET"
        }
      },
      "description": "Get a list of available bond instruments",
      "resource": "referenceData"
    },
    {
      "name": "List Commodities",
      "value": "listCommodities",
      "action": "List commodities",
      "routing": {
        "request": {
          "url": "/commodities",
          "method": "GET"
        }
      },
      "description": "Get a list of available commodity instruments",
      "resource": "referenceData"
    },
    {
      "name": "List Countries",
      "value": "listCountries",
      "action": "List countries",
      "routing": {
        "request": {
          "url": "/countries",
          "method": "GET"
        }
      },
      "description": "Get a list of supported countries",
      "resource": "referenceData"
    },
    {
      "name": "List Cryptocurrencies",
      "value": "listCryptocurrencies",
      "action": "List cryptocurrencies",
      "routing": {
        "request": {
          "url": "/cryptocurrencies",
          "method": "GET"
        }
      },
      "description": "Get a list of available cryptocurrency pairs",
      "resource": "referenceData"
    },
    {
      "name": "List Cryptocurrency Exchanges",
      "value": "listCryptoExchanges",
      "action": "List cryptocurrency exchanges",
      "routing": {
        "request": {
          "url": "/cryptocurrency_exchanges",
          "method": "GET"
        }
      },
      "description": "Get a list of available cryptocurrency exchanges",
      "resource": "referenceData"
    },
    {
      "name": "List ETF Families",
      "value": "listEtfFamilies",
      "action": "List ETF families",
      "routing": {
        "request": {
          "url": "/etfs/family",
          "method": "GET"
        }
      },
      "description": "Get a list of ETF families/providers",
      "resource": "referenceData"
    },
    {
      "name": "List ETF Types",
      "value": "listEtfTypes",
      "action": "List ETF types",
      "routing": {
        "request": {
          "url": "/etfs/type",
          "method": "GET"
        }
      },
      "description": "Get a list of ETF types/categories",
      "resource": "referenceData"
    },
    {
      "name": "List ETFs",
      "value": "listEtfs",
      "action": "List ETFs",
      "routing": {
        "request": {
          "url": "/etf",
          "method": "GET"
        }
      },
      "description": "Get a list of available ETF symbols",
      "resource": "referenceData"
    },
    {
      "name": "List ETFs (Extended)",
      "value": "listEtfsExtended",
      "action": "List ETFs with full details",
      "routing": {
        "request": {
          "url": "/etfs",
          "method": "GET"
        }
      },
      "description": "Get comprehensive list of ETFs with extended information",
      "resource": "referenceData"
    },
    {
      "name": "List Exchanges",
      "value": "listExchanges",
      "action": "List exchanges",
      "routing": {
        "request": {
          "url": "/exchanges",
          "method": "GET"
        }
      },
      "description": "Get a list of available stock exchanges",
      "resource": "referenceData"
    },
    {
      "name": "List Forex Pairs",
      "value": "listForexPairs",
      "action": "List forex currency pairs",
      "routing": {
        "request": {
          "url": "/forex_pairs",
          "method": "GET"
        }
      },
      "description": "Get a list of available forex currency pairs",
      "resource": "referenceData"
    },
    {
      "name": "List Fundamentals",
      "value": "listFundamentals",
      "action": "List fundamentals endpoints",
      "routing": {
        "request": {
          "url": "/fundamentals",
          "method": "GET"
        }
      },
      "description": "Get a list of available fundamental data endpoints",
      "resource": "referenceData"
    },
    {
      "name": "List Funds",
      "value": "listFunds",
      "action": "List mutual funds",
      "routing": {
        "request": {
          "url": "/funds",
          "method": "GET"
        }
      },
      "description": "Get a list of available mutual fund symbols",
      "resource": "referenceData"
    },
    {
      "name": "List Indices",
      "value": "listIndices",
      "action": "List market indices",
      "routing": {
        "request": {
          "url": "/indices",
          "method": "GET"
        }
      },
      "description": "Get a list of available market indices",
      "resource": "referenceData"
    },
    {
      "name": "List Intervals",
      "value": "listIntervals",
      "action": "List available intervals",
      "routing": {
        "request": {
          "url": "/intervals",
          "method": "GET"
        }
      },
      "description": "Get a list of available time intervals for data queries",
      "resource": "referenceData"
    },
    {
      "name": "List Market Data",
      "value": "listMarketData",
      "action": "List market data endpoints",
      "routing": {
        "request": {
          "url": "/market_data",
          "method": "GET"
        }
      },
      "description": "Get a list of available market data endpoints",
      "resource": "referenceData"
    },
    {
      "name": "List Mutual Fund Families",
      "value": "listMutualFundFamilies",
      "action": "List mutual fund families",
      "routing": {
        "request": {
          "url": "/mutual_funds/family",
          "method": "GET"
        }
      },
      "description": "Get a list of mutual fund families/providers",
      "resource": "referenceData"
    },
    {
      "name": "List Mutual Fund Types",
      "value": "listMutualFundTypes",
      "action": "List mutual fund types",
      "routing": {
        "request": {
          "url": "/mutual_funds/type",
          "method": "GET"
        }
      },
      "description": "Get a list of mutual fund types/categories",
      "resource": "referenceData"
    },
    {
      "name": "List Stocks",
      "value": "listStocks",
      "action": "List available stocks",
      "routing": {
        "request": {
          "url": "/stocks",
          "method": "GET"
        }
      },
      "description": "Get a list of available stock symbols",
      "resource": "referenceData"
    },
    {
      "name": "List Technical Indicators",
      "value": "listTechnicalIndicators",
      "action": "List technical indicators",
      "routing": {
        "request": {
          "url": "/technical_indicators",
          "method": "GET"
        }
      },
      "description": "Get a list of available technical indicators",
      "resource": "referenceData"
    },
    {
      "name": "Search Symbol",
      "value": "symbolSearch",
      "action": "Search for symbols",
      "routing": {
        "request": {
          "url": "/symbol_search",
          "method": "GET"
        }
      },
      "description": "Search for symbols by name or ticker",
      "resource": "referenceData"
    },
    {
      "name": "Get Balance Sheet",
      "value": "getBalanceSheet",
      "action": "Get balance sheet",
      "routing": {
        "request": {
          "url": "/balance_sheet",
          "method": "GET"
        }
      },
      "description": "Get company balance sheet data",
      "resource": "fundamentals"
    },
    {
      "name": "Get Balance Sheet Consolidated",
      "value": "getBalanceSheetConsolidated",
      "action": "Get consolidated balance sheet",
      "routing": {
        "request": {
          "url": "/balance_sheet/consolidated",
          "method": "GET"
        }
      },
      "description": "Get consolidated balance sheet data for companies with subsidiaries",
      "resource": "fundamentals"
    },
    {
      "name": "Get Cash Flow",
      "value": "getCashFlow",
      "action": "Get cash flow statement",
      "routing": {
        "request": {
          "url": "/cash_flow",
          "method": "GET"
        }
      },
      "description": "Get company cash flow statement data",
      "resource": "fundamentals"
    },
    {
      "name": "Get Cash Flow Consolidated",
      "value": "getCashFlowConsolidated",
      "action": "Get consolidated cash flow",
      "routing": {
        "request": {
          "url": "/cash_flow/consolidated",
          "method": "GET"
        }
      },
      "description": "Get consolidated cash flow statement for companies with subsidiaries",
      "resource": "fundamentals"
    },
    {
      "name": "Get Dividends",
      "value": "getDividends",
      "action": "Get dividend history",
      "routing": {
        "request": {
          "url": "/dividends",
          "method": "GET"
        }
      },
      "description": "Get historical dividend payments for a stock",
      "resource": "fundamentals"
    },
    {
      "name": "Get Dividends Calendar",
      "value": "getDividendsCalendar",
      "action": "Get upcoming dividends",
      "routing": {
        "request": {
          "url": "/dividends_calendar",
          "method": "GET"
        }
      },
      "description": "Get calendar of upcoming dividend payments across all stocks",
      "resource": "fundamentals"
    },
    {
      "name": "Get Earnings",
      "value": "getEarnings",
      "action": "Get earnings data",
      "routing": {
        "request": {
          "url": "/earnings",
          "method": "GET"
        }
      },
      "description": "Get historical and upcoming earnings data",
      "resource": "fundamentals"
    },
    {
      "name": "Get Earnings Calendar",
      "value": "getEarningsCalendar",
      "action": "Get earnings calendar",
      "routing": {
        "request": {
          "url": "/earnings_calendar",
          "method": "GET"
        }
      },
      "description": "Get upcoming earnings announcements",
      "resource": "fundamentals"
    },
    {
      "name": "Get Fund Holders",
      "value": "getFundHolders",
      "action": "Get fund holders",
      "routing": {
        "request": {
          "url": "/fund_holders",
          "method": "GET"
        }
      },
      "description": "Get mutual fund ownership data",
      "resource": "fundamentals"
    },
    {
      "name": "Get Income Statement",
      "value": "getIncomeStatement",
      "action": "Get income statement",
      "routing": {
        "request": {
          "url": "/income_statement",
          "method": "GET"
        }
      },
      "description": "Get company income statement data",
      "resource": "fundamentals"
    },
    {
      "name": "Get Income Statement Consolidated",
      "value": "getIncomeStatementConsolidated",
      "action": "Get consolidated income statement",
      "routing": {
        "request": {
          "url": "/income_statement/consolidated",
          "method": "GET"
        }
      },
      "description": "Get consolidated income statement for companies with subsidiaries",
      "resource": "fundamentals"
    },
    {
      "name": "Get Insider Transactions",
      "value": "getInsiderTransactions",
      "action": "Get insider transactions",
      "routing": {
        "request": {
          "url": "/insider_transactions",
          "method": "GET"
        }
      },
      "description": "Get insider buying and selling activity",
      "resource": "fundamentals"
    },
    {
      "name": "Get Institutional Holders",
      "value": "getInstitutionalHolders",
      "action": "Get institutional holders",
      "routing": {
        "request": {
          "url": "/institutional_holders",
          "method": "GET"
        }
      },
      "description": "Get institutional ownership data",
      "resource": "fundamentals"
    },
    {
      "name": "Get IPO Calendar",
      "value": "getIpoCalendar",
      "action": "Get IPO calendar",
      "routing": {
        "request": {
          "url": "/ipo_calendar",
          "method": "GET"
        }
      },
      "description": "Get upcoming IPO listings",
      "resource": "fundamentals"
    },
    {
      "name": "Get Key Executives",
      "value": "getKeyExecutives",
      "action": "Get key executives",
      "routing": {
        "request": {
          "url": "/key_executives",
          "method": "GET"
        }
      },
      "description": "Get company executive and management information",
      "resource": "fundamentals"
    },
    {
      "name": "Get Market Cap",
      "value": "getMarketCap",
      "action": "Get market capitalization",
      "routing": {
        "request": {
          "url": "/market_cap",
          "method": "GET"
        }
      },
      "description": "Get current market capitalization for a stock",
      "resource": "fundamentals"
    },
    {
      "name": "Get Profile",
      "value": "getProfile",
      "action": "Get company profile",
      "routing": {
        "request": {
          "url": "/profile",
          "method": "GET"
        }
      },
      "description": "Get company information including sector, industry, employees, description",
      "resource": "fundamentals"
    },
    {
      "name": "Get Splits Calendar",
      "value": "getSplitsCalendar",
      "action": "Get upcoming stock splits",
      "routing": {
        "request": {
          "url": "/splits_calendar",
          "method": "GET"
        }
      },
      "description": "Get calendar of upcoming stock splits across all stocks",
      "resource": "fundamentals"
    },
    {
      "name": "Get Statistics",
      "value": "getStatistics",
      "action": "Get key statistics",
      "routing": {
        "request": {
          "url": "/statistics",
          "method": "GET"
        }
      },
      "description": "Get key financial statistics and metrics",
      "resource": "fundamentals"
    },
    {
      "name": "Get Stock Splits",
      "value": "getStockSplits",
      "action": "Get stock splits",
      "routing": {
        "request": {
          "url": "/splits",
          "method": "GET"
        }
      },
      "description": "Get historical stock split data",
      "resource": "fundamentals"
    },
    {
      "name": "DEMA - Double Exponential Moving Average",
      "value": "dema",
      "action": "Calculate DEMA indicator",
      "routing": {
        "request": {
          "url": "/dema",
          "method": "GET"
        }
      },
      "description": "Double Exponential Moving Average - reduces lag",
      "resource": "technicalIndicators"
    },
    {
      "name": "EMA - Exponential Moving Average",
      "value": "ema",
      "action": "Calculate EMA indicator",
      "routing": {
        "request": {
          "url": "/ema",
          "method": "GET"
        }
      },
      "description": "Exponential Moving Average - weighted toward recent prices",
      "resource": "technicalIndicators"
    },
    {
      "name": "KAMA - Kaufman Adaptive Moving Average",
      "value": "kama",
      "action": "Calculate KAMA indicator",
      "routing": {
        "request": {
          "url": "/kama",
          "method": "GET"
        }
      },
      "description": "Kaufman Adaptive Moving Average - adjusts to market volatility",
      "resource": "technicalIndicators"
    },
    {
      "name": "MAMA - MESA Adaptive Moving Average",
      "value": "mama",
      "action": "Calculate MAMA indicator",
      "routing": {
        "request": {
          "url": "/mama",
          "method": "GET"
        }
      },
      "description": "MESA Adaptive Moving Average - adapts to price cycles",
      "resource": "technicalIndicators"
    },
    {
      "name": "SMA - Simple Moving Average",
      "value": "sma",
      "action": "Calculate SMA indicator",
      "routing": {
        "request": {
          "url": "/sma",
          "method": "GET"
        }
      },
      "description": "Simple Moving Average - basic price average",
      "resource": "technicalIndicators"
    },
    {
      "name": "T3MA - Triple Exponential Moving Average",
      "value": "t3ma",
      "action": "Calculate T3MA indicator",
      "routing": {
        "request": {
          "url": "/t3ma",
          "method": "GET"
        }
      },
      "description": "Triple Exponential Moving Average - smoother than EMA",
      "resource": "technicalIndicators"
    },
    {
      "name": "TEMA - Triple Exponential Moving Average",
      "value": "tema",
      "action": "Calculate TEMA indicator",
      "routing": {
        "request": {
          "url": "/tema",
          "method": "GET"
        }
      },
      "description": "Triple Exponential Moving Average - reduces lag significantly",
      "resource": "technicalIndicators"
    },
    {
      "name": "TRIMA - Triangular Moving Average",
      "value": "trima",
      "action": "Calculate TRIMA indicator",
      "routing": {
        "request": {
          "url": "/trima",
          "method": "GET"
        }
      },
      "description": "Triangular Moving Average - double smoothed",
      "resource": "technicalIndicators"
    },
    {
      "name": "WMA - Weighted Moving Average",
      "value": "wma",
      "action": "Calculate WMA indicator",
      "routing": {
        "request": {
          "url": "/wma",
          "method": "GET"
        }
      },
      "description": "Weighted Moving Average - linear weighted",
      "resource": "technicalIndicators"
    },
    {
      "name": "ADX - Average Directional Index",
      "value": "adx",
      "action": "Calculate ADX indicator",
      "routing": {
        "request": {
          "url": "/adx",
          "method": "GET"
        }
      },
      "description": "Average Directional Index - measures trend strength",
      "resource": "technicalIndicators"
    },
    {
      "name": "ADXR - Average Directional Movement Index Rating",
      "value": "adxr",
      "action": "Calculate ADXR indicator",
      "routing": {
        "request": {
          "url": "/adxr",
          "method": "GET"
        }
      },
      "description": "Average Directional Movement Index Rating",
      "resource": "technicalIndicators"
    },
    {
      "name": "APO - Absolute Price Oscillator",
      "value": "apo",
      "action": "Calculate APO indicator",
      "routing": {
        "request": {
          "url": "/apo",
          "method": "GET"
        }
      },
      "description": "Absolute Price Oscillator - difference between two EMAs",
      "resource": "technicalIndicators"
    },
    {
      "name": "CCI - Commodity Channel Index",
      "value": "cci",
      "action": "Calculate CCI indicator",
      "routing": {
        "request": {
          "url": "/cci",
          "method": "GET"
        }
      },
      "description": "Commodity Channel Index - identifies overbought/oversold",
      "resource": "technicalIndicators"
    },
    {
      "name": "CMO - Chande Momentum Oscillator",
      "value": "cmo",
      "action": "Calculate CMO indicator",
      "routing": {
        "request": {
          "url": "/cmo",
          "method": "GET"
        }
      },
      "description": "Chande Momentum Oscillator - momentum indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "DX - Directional Movement Index",
      "value": "dx",
      "action": "Calculate DX indicator",
      "routing": {
        "request": {
          "url": "/dx",
          "method": "GET"
        }
      },
      "description": "Directional Movement Index",
      "resource": "technicalIndicators"
    },
    {
      "name": "MACD - Moving Average Convergence Divergence",
      "value": "macd",
      "action": "Calculate MACD indicator",
      "routing": {
        "request": {
          "url": "/macd",
          "method": "GET"
        }
      },
      "description": "Moving Average Convergence Divergence - trend following",
      "resource": "technicalIndicators"
    },
    {
      "name": "MFI - Money Flow Index",
      "value": "mfi",
      "action": "Calculate MFI indicator",
      "routing": {
        "request": {
          "url": "/mfi",
          "method": "GET"
        }
      },
      "description": "Money Flow Index - volume-weighted RSI",
      "resource": "technicalIndicators"
    },
    {
      "name": "MOM - Momentum",
      "value": "mom",
      "action": "Calculate Momentum indicator",
      "routing": {
        "request": {
          "url": "/mom",
          "method": "GET"
        }
      },
      "description": "Momentum - rate of price change",
      "resource": "technicalIndicators"
    },
    {
      "name": "PPO - Percentage Price Oscillator",
      "value": "ppo",
      "action": "Calculate PPO indicator",
      "routing": {
        "request": {
          "url": "/ppo",
          "method": "GET"
        }
      },
      "description": "Percentage Price Oscillator - percentage MACD",
      "resource": "technicalIndicators"
    },
    {
      "name": "ROC - Rate of Change",
      "value": "roc",
      "action": "Calculate ROC indicator",
      "routing": {
        "request": {
          "url": "/roc",
          "method": "GET"
        }
      },
      "description": "Rate of Change - percentage price change",
      "resource": "technicalIndicators"
    },
    {
      "name": "RSI - Relative Strength Index",
      "value": "rsi",
      "action": "Calculate RSI indicator",
      "routing": {
        "request": {
          "url": "/rsi",
          "method": "GET"
        }
      },
      "description": "Relative Strength Index - momentum oscillator",
      "resource": "technicalIndicators"
    },
    {
      "name": "STOCH - Stochastic Oscillator",
      "value": "stoch",
      "action": "Calculate Stochastic indicator",
      "routing": {
        "request": {
          "url": "/stoch",
          "method": "GET"
        }
      },
      "description": "Stochastic Oscillator - compares closing price to range",
      "resource": "technicalIndicators"
    },
    {
      "name": "STOCHRSI - Stochastic RSI",
      "value": "stochrsi",
      "action": "Calculate Stochastic RSI indicator",
      "routing": {
        "request": {
          "url": "/stochrsi",
          "method": "GET"
        }
      },
      "description": "Stochastic RSI - stochastic of RSI",
      "resource": "technicalIndicators"
    },
    {
      "name": "TRIX - Triple Exponential Average",
      "value": "trix",
      "action": "Calculate TRIX indicator",
      "routing": {
        "request": {
          "url": "/trix",
          "method": "GET"
        }
      },
      "description": "Triple Exponential Average - momentum oscillator",
      "resource": "technicalIndicators"
    },
    {
      "name": "ULTOSC - Ultimate Oscillator",
      "value": "ultosc",
      "action": "Calculate Ultimate Oscillator",
      "routing": {
        "request": {
          "url": "/ultosc",
          "method": "GET"
        }
      },
      "description": "Ultimate Oscillator - multi-timeframe momentum",
      "resource": "technicalIndicators"
    },
    {
      "name": "WILLR - Williams %R",
      "value": "willr",
      "action": "Calculate Williams %R indicator",
      "routing": {
        "request": {
          "url": "/willr",
          "method": "GET"
        }
      },
      "description": "Williams %R - overbought/oversold indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "ATR - Average True Range",
      "value": "atr",
      "action": "Calculate ATR indicator",
      "routing": {
        "request": {
          "url": "/atr",
          "method": "GET"
        }
      },
      "description": "Average True Range - measures volatility",
      "resource": "technicalIndicators"
    },
    {
      "name": "BBANDS - Bollinger Bands",
      "value": "bbands",
      "action": "Calculate Bollinger Bands",
      "routing": {
        "request": {
          "url": "/bbands",
          "method": "GET"
        }
      },
      "description": "Bollinger Bands - volatility bands around SMA",
      "resource": "technicalIndicators"
    },
    {
      "name": "NATR - Normalized Average True Range",
      "value": "natr",
      "action": "Calculate NATR indicator",
      "routing": {
        "request": {
          "url": "/natr",
          "method": "GET"
        }
      },
      "description": "Normalized Average True Range - percentage ATR",
      "resource": "technicalIndicators"
    },
    {
      "name": "SUPERTREND - SuperTrend",
      "value": "supertrend",
      "action": "Calculate SuperTrend indicator",
      "routing": {
        "request": {
          "url": "/supertrend",
          "method": "GET"
        }
      },
      "description": "SuperTrend - trend following indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "TRANGE - True Range",
      "value": "trange",
      "action": "Calculate True Range",
      "routing": {
        "request": {
          "url": "/trange",
          "method": "GET"
        }
      },
      "description": "True Range - single period volatility",
      "resource": "technicalIndicators"
    },
    {
      "name": "AD - Accumulation/Distribution",
      "value": "ad",
      "action": "Calculate A/D indicator",
      "routing": {
        "request": {
          "url": "/ad",
          "method": "GET"
        }
      },
      "description": "Accumulation/Distribution - volume-based indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "ADOSC - Chaikin A/D Oscillator",
      "value": "adosc",
      "action": "Calculate Chaikin A/D Oscillator",
      "routing": {
        "request": {
          "url": "/adosc",
          "method": "GET"
        }
      },
      "description": "Chaikin A/D Oscillator - momentum of A/D line",
      "resource": "technicalIndicators"
    },
    {
      "name": "OBV - On Balance Volume",
      "value": "obv",
      "action": "Calculate OBV indicator",
      "routing": {
        "request": {
          "url": "/obv",
          "method": "GET"
        }
      },
      "description": "On Balance Volume - cumulative volume indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "VWAP - Volume Weighted Average Price",
      "value": "vwap",
      "action": "Calculate VWAP",
      "routing": {
        "request": {
          "url": "/vwap",
          "method": "GET"
        }
      },
      "description": "Volume Weighted Average Price",
      "resource": "technicalIndicators"
    },
    {
      "name": "AROON - Aroon Indicator",
      "value": "aroon",
      "action": "Calculate Aroon indicator",
      "routing": {
        "request": {
          "url": "/aroon",
          "method": "GET"
        }
      },
      "description": "Aroon Indicator - identifies trend changes",
      "resource": "technicalIndicators"
    },
    {
      "name": "AROONOSC - Aroon Oscillator",
      "value": "aroonosc",
      "action": "Calculate Aroon Oscillator",
      "routing": {
        "request": {
          "url": "/aroonosc",
          "method": "GET"
        }
      },
      "description": "Aroon Oscillator - difference between Aroon Up and Down",
      "resource": "technicalIndicators"
    },
    {
      "name": "BOP - Balance of Power",
      "value": "bop",
      "action": "Calculate Balance of Power",
      "routing": {
        "request": {
          "url": "/bop",
          "method": "GET"
        }
      },
      "description": "Balance of Power - measures buying/selling pressure",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_TRENDMODE - Hilbert Transform Trend Mode",
      "value": "ht_trendmode",
      "action": "Calculate HT Trend Mode",
      "routing": {
        "request": {
          "url": "/ht_trendmode",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - Trend vs Cycle Mode ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "MINUS_DI - Minus Directional Indicator",
      "value": "minus_di",
      "action": "Calculate Minus DI",
      "routing": {
        "request": {
          "url": "/minus_di",
          "method": "GET"
        }
      },
      "description": "Minus Directional Indicator - downward trend strength",
      "resource": "technicalIndicators"
    },
    {
      "name": "MINUS_DM - Minus Directional Movement",
      "value": "minus_dm",
      "action": "Calculate Minus DM",
      "routing": {
        "request": {
          "url": "/minus_dm",
          "method": "GET"
        }
      },
      "description": "Minus Directional Movement",
      "resource": "technicalIndicators"
    },
    {
      "name": "PLUS_DI - Plus Directional Indicator",
      "value": "plus_di",
      "action": "Calculate Plus DI",
      "routing": {
        "request": {
          "url": "/plus_di",
          "method": "GET"
        }
      },
      "description": "Plus Directional Indicator - upward trend strength",
      "resource": "technicalIndicators"
    },
    {
      "name": "PLUS_DM - Plus Directional Movement",
      "value": "plus_dm",
      "action": "Calculate Plus DM",
      "routing": {
        "request": {
          "url": "/plus_dm",
          "method": "GET"
        }
      },
      "description": "Plus Directional Movement",
      "resource": "technicalIndicators"
    },
    {
      "name": "SAR - Parabolic SAR",
      "value": "sar",
      "action": "Calculate Parabolic SAR",
      "routing": {
        "request": {
          "url": "/sar",
          "method": "GET"
        }
      },
      "description": "Parabolic Stop and Reverse - trend following",
      "resource": "technicalIndicators"
    },
    {
      "name": "ICHIMOKU - Ichimoku Cloud",
      "value": "ichimoku",
      "action": "Calculate Ichimoku Cloud",
      "routing": {
        "request": {
          "url": "/ichimoku",
          "method": "GET"
        }
      },
      "description": "Ichimoku Kinko Hyo - comprehensive trend indicator",
      "resource": "technicalIndicators"
    },
    {
      "name": "BETA - Beta Coefficient",
      "value": "beta",
      "action": "Calculate Beta",
      "routing": {
        "request": {
          "url": "/beta",
          "method": "GET"
        }
      },
      "description": "Beta - measures volatility relative to market",
      "resource": "technicalIndicators"
    },
    {
      "name": "CORREL - Pearson Correlation Coefficient",
      "value": "correl",
      "action": "Calculate Correlation",
      "routing": {
        "request": {
          "url": "/correl",
          "method": "GET"
        }
      },
      "description": "Pearson Correlation Coefficient",
      "resource": "technicalIndicators"
    },
    {
      "name": "LINEARREG - Linear Regression",
      "value": "linearreg",
      "action": "Calculate Linear Regression",
      "routing": {
        "request": {
          "url": "/linearreg",
          "method": "GET"
        }
      },
      "description": "Linear Regression - trend line value",
      "resource": "technicalIndicators"
    },
    {
      "name": "LINEARREG_ANGLE - Linear Regression Angle",
      "value": "linearreg_angle",
      "action": "Calculate Linear Regression Angle",
      "routing": {
        "request": {
          "url": "/linearreg_angle",
          "method": "GET"
        }
      },
      "description": "Linear Regression Angle in degrees",
      "resource": "technicalIndicators"
    },
    {
      "name": "LINEARREG_INTERCEPT - Linear Regression Intercept",
      "value": "linearreg_intercept",
      "action": "Calculate Linear Regression Intercept",
      "routing": {
        "request": {
          "url": "/linearreg_intercept",
          "method": "GET"
        }
      },
      "description": "Linear Regression Intercept ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "LINEARREG_SLOPE - Linear Regression Slope",
      "value": "linearreg_slope",
      "action": "Calculate Linear Regression Slope",
      "routing": {
        "request": {
          "url": "/linearreg_slope",
          "method": "GET"
        }
      },
      "description": "Linear Regression Slope",
      "resource": "technicalIndicators"
    },
    {
      "name": "STDDEV - Standard Deviation",
      "value": "stddev",
      "action": "Calculate Standard Deviation",
      "routing": {
        "request": {
          "url": "/stddev",
          "method": "GET"
        }
      },
      "description": "Standard Deviation - measures dispersion",
      "resource": "technicalIndicators"
    },
    {
      "name": "TSF - Time Series Forecast",
      "value": "tsf",
      "action": "Calculate Time Series Forecast",
      "routing": {
        "request": {
          "url": "/tsf",
          "method": "GET"
        }
      },
      "description": "Time Series Forecast - linear regression projection",
      "resource": "technicalIndicators"
    },
    {
      "name": "VAR - Variance",
      "value": "var",
      "action": "Calculate Variance",
      "routing": {
        "request": {
          "url": "/var",
          "method": "GET"
        }
      },
      "description": "Variance - measures spread",
      "resource": "technicalIndicators"
    },
    {
      "name": "AVGPRICE - Average Price",
      "value": "avgprice",
      "action": "Calculate Average Price",
      "routing": {
        "request": {
          "url": "/avgprice",
          "method": "GET"
        }
      },
      "description": "Average of OHLC prices",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_DCPERIOD - Hilbert Transform Dominant Cycle Period",
      "value": "ht_dcperiod",
      "action": "Calculate HT Dominant Cycle Period",
      "routing": {
        "request": {
          "url": "/ht_dcperiod",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - Dominant Cycle Period ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_DCPHASE - Hilbert Transform Dominant Cycle Phase",
      "value": "ht_dcphase",
      "action": "Calculate HT Dominant Cycle Phase",
      "routing": {
        "request": {
          "url": "/ht_dcphase",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - Dominant Cycle Phase",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_PHASOR - Hilbert Transform Phasor Components",
      "value": "ht_phasor",
      "action": "Calculate HT Phasor",
      "routing": {
        "request": {
          "url": "/ht_phasor",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - Phasor Components ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_SINE - Hilbert Transform SineWave",
      "value": "ht_sine",
      "action": "Calculate HT SineWave",
      "routing": {
        "request": {
          "url": "/ht_sine",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - SineWave",
      "resource": "technicalIndicators"
    },
    {
      "name": "HT_TRENDLINE - Hilbert Transform Instantaneous Trendline",
      "value": "ht_trendline",
      "action": "Calculate HT Trendline",
      "routing": {
        "request": {
          "url": "/ht_trendline",
          "method": "GET"
        }
      },
      "description": "Hilbert Transform - Instantaneous Trendline",
      "resource": "technicalIndicators"
    },
    {
      "name": "MEDPRICE - Median Price",
      "value": "medprice",
      "action": "Calculate Median Price",
      "routing": {
        "request": {
          "url": "/medprice",
          "method": "GET"
        }
      },
      "description": "Median Price - (High + Low) / 2",
      "resource": "technicalIndicators"
    },
    {
      "name": "MIDPOINT - Midpoint",
      "value": "midpoint",
      "action": "Calculate Midpoint",
      "routing": {
        "request": {
          "url": "/midpoint",
          "method": "GET"
        }
      },
      "description": "Midpoint over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "MIDPRICE - Midpoint Price",
      "value": "midprice",
      "action": "Calculate Midpoint Price",
      "routing": {
        "request": {
          "url": "/midprice",
          "method": "GET"
        }
      },
      "description": "Midpoint Price over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "PERCENT_B - Bollinger Bands %B",
      "value": "percent_b",
      "action": "Calculate Percent B",
      "routing": {
        "request": {
          "url": "/percent_b",
          "method": "GET"
        }
      },
      "description": "Bollinger Bands %B - position within bands",
      "resource": "technicalIndicators"
    },
    {
      "name": "PIVOT_POINTS_HL - Pivot Points High/Low",
      "value": "pivot_points_hl",
      "action": "Calculate Pivot Points",
      "routing": {
        "request": {
          "url": "/pivot_points_hl",
          "method": "GET"
        }
      },
      "description": "Pivot Points High/Low",
      "resource": "technicalIndicators"
    },
    {
      "name": "TYPPRICE - Typical Price",
      "value": "typprice",
      "action": "Calculate Typical Price",
      "routing": {
        "request": {
          "url": "/typprice",
          "method": "GET"
        }
      },
      "description": "Typical Price - (High + Low + Close) / 3",
      "resource": "technicalIndicators"
    },
    {
      "name": "WCLPRICE - Weighted Close Price",
      "value": "wclprice",
      "action": "Calculate Weighted Close Price",
      "routing": {
        "request": {
          "url": "/wclprice",
          "method": "GET"
        }
      },
      "description": "Weighted Close Price - (High + Low + 2*Close) / 4",
      "resource": "technicalIndicators"
    },
    {
      "name": "ACOS - Arc Cosine",
      "value": "acos",
      "action": "Calculate Arc Cosine",
      "routing": {
        "request": {
          "url": "/acos",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric ACos",
      "resource": "technicalIndicators"
    },
    {
      "name": "ADD - Arithmetic Add",
      "value": "add",
      "action": "Calculate Addition",
      "routing": {
        "request": {
          "url": "/add",
          "method": "GET"
        }
      },
      "description": "Vector Arithmetic Add",
      "resource": "technicalIndicators"
    },
    {
      "name": "ASIN - Arc Sine",
      "value": "asin",
      "action": "Calculate Arc Sine",
      "routing": {
        "request": {
          "url": "/asin",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric ASin ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "ATAN - Arc Tangent",
      "value": "atan",
      "action": "Calculate Arc Tangent",
      "routing": {
        "request": {
          "url": "/atan",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric ATan",
      "resource": "technicalIndicators"
    },
    {
      "name": "CEIL - Ceiling",
      "value": "ceil",
      "action": "Calculate Ceiling",
      "routing": {
        "request": {
          "url": "/ceil",
          "method": "GET"
        }
      },
      "description": "Vector Ceiling",
      "resource": "technicalIndicators"
    },
    {
      "name": "COS - Cosine",
      "value": "cos",
      "action": "Calculate Cosine",
      "routing": {
        "request": {
          "url": "/cos",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Cos ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "COSH - Hyperbolic Cosine",
      "value": "cosh",
      "action": "Calculate Hyperbolic Cosine",
      "routing": {
        "request": {
          "url": "/cosh",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Cosh",
      "resource": "technicalIndicators"
    },
    {
      "name": "DIV - Arithmetic Division",
      "value": "div",
      "action": "Calculate Division",
      "routing": {
        "request": {
          "url": "/div",
          "method": "GET"
        }
      },
      "description": "Vector Arithmetic Division ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "EXP - Exponential",
      "value": "exp",
      "action": "Calculate Exponential",
      "routing": {
        "request": {
          "url": "/exp",
          "method": "GET"
        }
      },
      "description": "Vector Arithmetic Exp",
      "resource": "technicalIndicators"
    },
    {
      "name": "FLOOR - Floor",
      "value": "floor",
      "action": "Calculate Floor",
      "routing": {
        "request": {
          "url": "/floor",
          "method": "GET"
        }
      },
      "description": "Vector Floor",
      "resource": "technicalIndicators"
    },
    {
      "name": "LN - Natural Logarithm",
      "value": "ln",
      "action": "Calculate Natural Log",
      "routing": {
        "request": {
          "url": "/ln",
          "method": "GET"
        }
      },
      "description": "Vector Log Natural",
      "resource": "technicalIndicators"
    },
    {
      "name": "LOG10 - Logarithm Base 10",
      "value": "log10",
      "action": "Calculate Log Base 10",
      "routing": {
        "request": {
          "url": "/log10",
          "method": "GET"
        }
      },
      "description": "Vector Log10",
      "resource": "technicalIndicators"
    },
    {
      "name": "MAX - Maximum Value",
      "value": "max",
      "action": "Calculate Maximum",
      "routing": {
        "request": {
          "url": "/max",
          "method": "GET"
        }
      },
      "description": "Highest value over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "MIN - Minimum Value",
      "value": "min",
      "action": "Calculate Minimum",
      "routing": {
        "request": {
          "url": "/min",
          "method": "GET"
        }
      },
      "description": "Lowest value over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "MINMAX - Min/Max Values",
      "value": "minmax",
      "action": "Calculate Min/Max",
      "routing": {
        "request": {
          "url": "/minmax",
          "method": "GET"
        }
      },
      "description": "Lowest and highest values over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "MINMAXINDEX - Min/Max Index",
      "value": "minmaxindex",
      "action": "Calculate Min/Max Index",
      "routing": {
        "request": {
          "url": "/minmaxindex",
          "method": "GET"
        }
      },
      "description": "Index of lowest and highest values",
      "resource": "technicalIndicators"
    },
    {
      "name": "MULT - Arithmetic Multiplication",
      "value": "mult",
      "action": "Calculate Multiplication",
      "routing": {
        "request": {
          "url": "/mult",
          "method": "GET"
        }
      },
      "description": "Vector Arithmetic Mult",
      "resource": "technicalIndicators"
    },
    {
      "name": "ROUND - Round",
      "value": "round",
      "action": "Calculate Round",
      "routing": {
        "request": {
          "url": "/round",
          "method": "GET"
        }
      },
      "description": "Vector Round",
      "resource": "technicalIndicators"
    },
    {
      "name": "SIN - Sine",
      "value": "sin",
      "action": "Calculate Sine",
      "routing": {
        "request": {
          "url": "/sin",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Sin ✨ BETA",
      "resource": "technicalIndicators"
    },
    {
      "name": "SINH - Hyperbolic Sine",
      "value": "sinh",
      "action": "Calculate Hyperbolic Sine",
      "routing": {
        "request": {
          "url": "/sinh",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Sinh",
      "resource": "technicalIndicators"
    },
    {
      "name": "SQRT - Square Root",
      "value": "sqrt",
      "action": "Calculate Square Root",
      "routing": {
        "request": {
          "url": "/sqrt",
          "method": "GET"
        }
      },
      "description": "Vector Square Root",
      "resource": "technicalIndicators"
    },
    {
      "name": "SUB - Arithmetic Subtraction",
      "value": "sub",
      "action": "Calculate Subtraction",
      "routing": {
        "request": {
          "url": "/sub",
          "method": "GET"
        }
      },
      "description": "Vector Arithmetic Sub",
      "resource": "technicalIndicators"
    },
    {
      "name": "SUM - Summation",
      "value": "sum",
      "action": "Calculate Sum",
      "routing": {
        "request": {
          "url": "/sum",
          "method": "GET"
        }
      },
      "description": "Summation over period",
      "resource": "technicalIndicators"
    },
    {
      "name": "TAN - Tangent",
      "value": "tan",
      "action": "Calculate Tangent",
      "routing": {
        "request": {
          "url": "/tan",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Tan",
      "resource": "technicalIndicators"
    },
    {
      "name": "TANH - Hyperbolic Tangent",
      "value": "tanh",
      "action": "Calculate Hyperbolic Tangent",
      "routing": {
        "request": {
          "url": "/tanh",
          "method": "GET"
        }
      },
      "description": "Vector Trigonometric Tanh",
      "resource": "technicalIndicators"
    },
    {
      "name": "Get Analyst Ratings",
      "value": "getAnalystRatings",
      "action": "Get analyst ratings",
      "routing": {
        "request": {
          "url": "/analyst_ratings/us_equities",
          "method": "GET"
        }
      },
      "description": "Get analyst ratings and recommendations",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Earnings Estimate",
      "value": "getEarningsEstimate",
      "action": "Get earnings estimate",
      "routing": {
        "request": {
          "url": "/earnings_estimate",
          "method": "GET"
        }
      },
      "description": "Get analyst earnings estimates",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get EPS Trend",
      "value": "getEpsTrend",
      "action": "Get EPS trend",
      "routing": {
        "request": {
          "url": "/eps_trend",
          "method": "GET"
        }
      },
      "description": "Get earnings per share trend data",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Growth Estimates",
      "value": "getGrowthEstimates",
      "action": "Get growth estimates",
      "routing": {
        "request": {
          "url": "/growth_estimates",
          "method": "GET"
        }
      },
      "description": "Get analyst growth estimates",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Price Target",
      "value": "getPriceTarget",
      "action": "Get price target",
      "routing": {
        "request": {
          "url": "/price_target",
          "method": "GET"
        }
      },
      "description": "Get analyst price targets",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Recommendations",
      "value": "getRecommendations",
      "action": "Get recommendations",
      "routing": {
        "request": {
          "url": "/recommendations",
          "method": "GET"
        }
      },
      "description": "Get analyst recommendation trends",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Revenue Estimate",
      "value": "getRevenueEstimate",
      "action": "Get revenue estimate",
      "routing": {
        "request": {
          "url": "/revenue_estimate",
          "method": "GET"
        }
      },
      "description": "Get analyst revenue estimates",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get Analyst Ratings (Light)",
      "value": "getAnalystRatingsLight",
      "action": "Get analyst ratings snapshot",
      "routing": {
        "request": {
          "url": "/analyst_ratings/light",
          "method": "GET"
        }
      },
      "description": "Get lightweight analyst ratings summary (faster, less data)",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get EDGAR Filings",
      "value": "getEdgarFilings",
      "action": "Get SEC EDGAR filings",
      "routing": {
        "request": {
          "url": "/edgar_filings/archive",
          "method": "GET"
        }
      },
      "description": "Get SEC EDGAR filing documents and reports",
      "resource": "marketIntelligence"
    },
    {
      "name": "Get EPS Revisions",
      "value": "getEpsRevisions",
      "action": "Get EPS revisions",
      "routing": {
        "request": {
          "url": "/eps_revisions",
          "method": "GET"
        }
      },
      "description": "Get earnings per share estimate revisions by analysts",
      "resource": "marketIntelligence"
    },
    {
      "name": "API Usage",
      "value": "getApiUsage",
      "action": "Get API usage statistics",
      "routing": {
        "request": {
          "url": "/api_usage",
          "method": "GET"
        }
      },
      "description": "Get your API usage and remaining credits",
      "resource": "advanced"
    },
    {
      "name": "Batch Request",
      "value": "batchRequest",
      "action": "Make batch request",
      "routing": {
        "request": {
          "url": "/batch",
          "method": "GET"
        }
      },
      "description": "Get multiple data types for multiple symbols in one request",
      "resource": "advanced"
    },
    {
      "name": "Get Logo",
      "value": "getLogo",
      "action": "Get company logo",
      "routing": {
        "request": {
          "url": "/logo",
          "method": "GET"
        }
      },
      "description": "Get company logo URL",
      "resource": "advanced"
    }
  ]

npm_readme:
  # n8n-nodes-twelve-data

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

  This is an n8n community node for the [Twelve Data API](https://twelvedata.com). It provides access to comprehensive financial market data including stocks, forex, cryptocurrencies, ETFs, 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)
  - [Credentials](#credentials)
  - [Compatibility](#compatibility)
  - [Usage](#usage)
  - [Example Workflows](#example-workflows)
  - [Known Limitations](#known-limitations)
  - [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.

  ### For n8n Cloud

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

  ### For Self-Hosted n8n

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

  Alternatively, install via npm in your n8n installation directory:

  ```bash
  npm install n8n-nodes-twelve-data
  ```

  Then restart n8n.

  ## Credentials

  To use this node, you need a Twelve Data API key.

  ### Setup

  1. Sign up at [twelvedata.com](https://twelvedata.com)
  2. Get your free API key from the dashboard
  3. In n8n, go to **Settings → Credentials → Create → "Twelve Data API"**
  4. Paste your API key and save

  ### Authentication

  The node supports two authentication methods:

  - **Header Authentication (Recommended)** - API key sent in request header
  - **Query Parameter** - API key added to URL

  Choose the method that works best for your setup. Header authentication is more secure for production use.

  ### Demo Key

  For quick testing, you can use the demo API key: `demo`

  **Note:** The demo key has limited functionality. Get your own free API key for full access.

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Tested up to:** Latest version

  ## Usage

  ### Available Operations

  The Twelve Data node provides access to **161 API endpoints** organized into 6 main resource categories:

  #### Core Data (Market Data)
  - **Get Quote** - Real-time price quotes with bid, ask, open, high, low, close, volume
  - **Get Price** - Lightweight current price lookup
  - **Get Time Series** - Historical OHLCV data with customizable intervals (1min to 1month)
  - **Get End of Day Price** - Daily closing prices for specific dates
  - **Get Exchange Rate** - Real-time currency conversion rates
  - **Currency Conversion** - Convert amounts between currencies
  - **Get Market Movers (All Markets)** - Top gainers, losers, and most active stocks
  - **Get Time Series Cross** - Cross-currency pair time series data

  #### Reference Data
  - **List Stocks** - Browse and filter available stock symbols
  - **List Forex Pairs** - Available currency pairs
  - **List Cryptocurrencies** - Supported crypto assets
  - **List ETFs** - Exchange-traded funds
  - **List ETFs (Extended)** - Extended ETF information
  - **List ETF Families** - ETF family classifications
  - **List ETF Types** - ETF type categories
  - **List Indices** - Market indices (S&P 500, NASDAQ, etc.)
  - **List Exchanges** - Trading venues and their details
  - **List Countries** - Available countries for market data
  - **List Intervals** - Supported time intervals
  - **List Mutual Fund Families** - Mutual fund family classifications
  - **List Mutual Fund Types** - Mutual fund type categories
  - **List Technical Indicators** - Available technical indicators
  - **List Fundamentals** - Available fundamental data types
  - **List Market Data** - Available market data types
  - **List Analysis** - Available analysis types
  - **Symbol Search** - Search for symbols by name or ticker
  - **Get Market State** - Check if markets are open or closed

  #### Technical Indicators (91 operations)
  - **Moving Averages** (9): SMA, EMA, DEMA, TEMA, WMA, TRIMA, KAMA, MAMA, T3
  - **Momentum Indicators** (16): RSI, MACD, ADX, CCI, MOM, ROC, STOCH, TRIX, etc.
  - **Volatility Indicators** (5): ATR, BBANDS, NATR, SUPERTREND, TRANGE
  - **Volume Indicators** (4): AD, ADOSC, OBV, VWAP
  - **Trend Indicators** (10): AROON, SAR, ICHIMOKU, HT_TRENDMODE, etc.
  - **Statistical Functions** (9): BETA, CORREL, LINEARREG, STDDEV, VAR, etc.
  - **Overlap Studies** (14): AVGPRICE, MEDPRICE, MIDPOINT, TYPPRICE, etc.
  - **Math Transform** (25): ACOS, ADD, ASIN, ATAN, COS, EXP, LN, LOG10, MAX, MIN, etc.

  #### Fundamentals (20 operations)
  - **Get Balance Sheet** - Company balance sheet data
  - **Get Balance Sheet Consolidated** - Consolidated balance sheet data
  - **Get Cash Flow** - Cash flow statement data
  - **Get Cash Flow Consolidated** - Consolidated cash flow data
  - **Get Dividends** - Historical dividend payment records
  - **Get Dividends Calendar** - Upcoming dividend announcements
  - **Get Earnings** - Historical and upcoming earnings data
  - **Get Earnings Calendar** - Upcoming earnings announcements
  - **Get Fund Holders** - Mutual fund ownership data
  - **Get Income Statement** - Income statement data
  - **Get Income Statement Consolidated** - Consolidated income statement
  - **Get Insider Transactions** - Insider buying and selling activity
  - **Get Institutional Holders** - Institutional ownership data
  - **Get IPO Calendar** - Upcoming IPO listings
  - **Get Key Executives** - Company executive information
  - **Get Market Cap** - Market capitalization data
  - **Get Profile** - Company information (sector, industry, employees, description)
  - **Get Splits Calendar** - Upcoming stock split announcements
  - **Get Statistics** - Key financial statistics and metrics
  - **Get Stock Splits** - Historical stock split data

  #### Market Intelligence (10 operations)
  - **Get Analyst Ratings** - Consensus recommendations
  - **Get Analyst Ratings (Light)** - Lightweight analyst ratings
  - **Get Price Target** - Analyst price predictions
  - **Get Recommendations** - Recommendation trends
  - **Get Earnings Estimate** - Forward-looking earnings estimates
  - **Get Revenue Estimate** - Revenue estimates
  - **Get EPS Trend** - Earnings per share trend data
  - **Get EPS Revisions** - EPS estimate revisions
  - **Get Growth Estimates** - Growth estimates
  - **Get EDGAR Filings** - SEC filing information
  - **Get Economic Calendar** - Upcoming economic events

  #### Advanced (3 operations)
  - **API Usage** - Get API usage statistics and remaining credits
  - **Batch Request** - Get multiple data types for multiple symbols in one request
  - **Get Logo** - Get company logo URL

  ### Example Workflows

  #### 1. Get Stock Quote
  ```
  Trigger → Twelve Data (Quote) → Process Data
  ```
  Get real-time price for AAPL, MSFT, or any stock.

  #### 2. Monitor Crypto Prices
  ```
  Schedule → Twelve Data (Quote) → If Price > X → Send Alert
  ```
  Set up price alerts for Bitcoin, Ethereum, etc.

  #### 3. Technical Analysis
  ```
  Twelve Data (Time Series) → Twelve Data (RSI) → Make Decision
  ```
  Calculate RSI indicator and trigger trades.

  #### 4. Currency Conversion
  ```
  Twelve Data (Exchange Rate) → Calculate → Store Result
  ```
  Convert between any currency pairs.

  ### Tips

  - Start with the demo key for testing
  - Monitor rate limits in your Twelve Data dashboard
  - Use batch requests when possible to reduce API calls

  ## Example Workflows

  Ready-to-import workflow examples are available in the [`examples/`](examples/) directory:

  | Workflow | Description | Nodes Used |
  |----------|-------------|------------|
  | [Stock Price to Sheets](examples/stock-price-to-sheets.json) | Fetch stock quotes and save to Google Sheets | Twelve Data, Google Sheets |
  | [Crypto Alert Webhook](examples/crypto-alert-webhook.json) | Send webhook alerts on price changes | Twelve Data, IF, HTTP Request |
  | [Market Data Conditional](examples/market-data-conditional.json) | Route data based on market direction | Twelve Data, IF, Set |
  | [Multi-Symbol Loop](examples/multi-symbol-loop.json) | Process multiple symbols in a loop | Twelve Data, Split, Aggregate |
  | [Forex Rate Comparison](examples/forex-rate-comparison.json) | Compare multiple forex pairs | Twelve Data, Merge, Set |

  See [examples/README.md](examples/README.md) for import instructions and customization tips.

  ## Known Limitations

  ### Free Tier Restrictions

  The Twelve Data free tier has some limitations:

  | Feature | Free Tier | Paid Plans |
  |---------|-----------|------------|
  | API Calls | 800/day | Higher limits |
  | Rate Limit | 8 calls/minute | Higher limits |
  | Historical Data | Limited | Extended |
  | Fundamentals | Profile only | Full access |
  | Real-time Data | 15-min delay | Real-time |

  ### API Tier Requirements

  **Understanding API Tiers:**

  Twelve Data offers different subscription tiers. The connector works with all tiers - it's the API access that varies.

  **Free Tier (Fully Supported):**
  - Core data operations (quotes, time series, exchange rates)
  - Reference data (lists of stocks, forex, crypto, ETFs, indices)
  - Company profiles
  - Market intelligence data
  - 800 API calls per day, 8 per minute

  **Paid Tier Required (grow/pro/ultra/enterprise):**
  - Advanced fundamentals: Get Dividends, Get Earnings, Get Statistics
  - Calendars: Earnings Calendar, IPO Calendar
  - Real-time data (free tier has 15-minute delay)
  - Higher rate limits
  - Extended historical data

  ### Options Data

  Options Chain and Options Expiration data are currently only available in the [Twelve Data Google Sheets Add-on](https://support.twelvedata.com/en/articles/5702399-google-sheets-add-on-documentation) and not exposed via the REST API. These operations will be added to this node once Twelve Data makes them available in the REST API.

  ### Interval Limitations

  - **1-minute interval** may return 5-minute data on free tier
  - **Hourly and daily intervals** work correctly on free tier

  ### Performance Notes

  - Average response time: < 1 second
  - Large datasets (1000+ items) may show n8n UI warning but load successfully
  - Recommended: Add 0.5-1 second delay between requests in loops to avoid rate limiting

  ## Resources

  - **[Twelve Data Website](https://twelvedata.com)** - Sign up and get API key
  - **[Twelve Data API Docs](https://twelvedata.com/docs)** - Official API documentation
  - **[Twelve Data Pricing](https://twelvedata.com/pricing)** - Plan comparison
  - **[n8n Community Forum](https://community.n8n.io/)** - Get help from the community
  - **[n8n Documentation](https://docs.n8n.io/)** - Learn more about n8n

  ### Support

  - **Issues:** [GitHub Issues](https://github.com/yourusername/n8n-nodes-twelve-data/issues)
  - **Twelve Data Support:** support@twelvedata.com
  - **n8n Community:** [community.n8n.io](https://community.n8n.io)

  ## Version History

  ### 0.2.5 (Current)
  - Documentation updates: synced version references, operation counts, and version history across all docs

  ### 0.2.4
  - Fixed peerDependency `n8n-workflow` version range changed to `*` per n8n verification requirement

  ### 0.2.3
  - Removed 3 non-functional operations flagged by n8n verification team:
    - **Get Complex Data** (Core Data) — REST API endpoint not yet available
    - **Get Options Chain** (Fundamentals) — only available in Google Sheets Add-on
    - **Get Options Expiration** (Fundamentals) — only available in Google Sheets Add-on
  - Sorted all operation lists alphabetically per n8n UX guidelines
  - Added GitHub Actions publish workflow with npm provenance (required from May 2026)
  - Total operations: 161

  ### 0.2.0
  - Added 22 new operations across multiple categories
  - **Fundamentals:** Balance Sheet Consolidated, Cash Flow Consolidated, Dividends Calendar, Income Statement Consolidated, Market Cap, Splits Calendar
  - **Core Data:** Market Movers (All Markets), Time Series Cross
  - **Reference Data:** List Countries, ETFs (Extended), ETF Families, ETF Types, Intervals, Mutual Fund Families, Mutual Fund Types, Technical Indicators, Fundamentals, Market Data, Analysis
  - **Market Intelligence:** Analyst Ratings (Light), EDGAR Filings, EPS Revisions
  - Total operations: 164 (up from 142)

  ### 0.1.0
  - Initial release with 142+ operations across 6 resource categories
  - Support for stocks, forex, cryptocurrencies, ETFs, and indices
  - 91 technical indicators for market analysis
  - Comprehensive fundamentals and market intelligence data
  - Header and query parameter authentication
  - Zero runtime dependencies

  ## License

  [MIT](LICENSE.md)

  ## Disclaimer

  This is a community-maintained node and is not officially affiliated with Twelve Data or n8n. Use at your own risk.

  ---

  **Made with ❤️ for the n8n community**

ai_documentation_summary:
  {"purpose":"This n8n community node provides access to the Twelve Data API for retrieving comprehensive financial market data including stocks, forex, cryptocurrencies, ETFs, indices, and 90+ technical indicators.","capabilities":["Get Quote","Get Price","Get Time Series","Get End of Day Price","Get Exchange Rate","Currency Conversion","Get Market Movers","Get Time Series Cross","List Stocks","List Forex Pairs"],"authentication":"API key required (via Header Authentication or Query Parameter)","commonUseCases":["Real-time stock price monitoring","Historical market data analysis","Technical indicator calculations for trading strategies","Fundamental financial data retrieval for investment research","Currency conversion and forex analysis"],"limitations":["Demo API key has limited functionality","Requires separate Twelve Data API account and key","Minimum n8n version 1.0.0 required"],"relatedNodes":["n8n-nodes-http.request","n8n-nodes-code.code"]}


node_type: n8n-nodes-emailr.emailr
package_name: n8n-nodes-emailr
display_name: Emailr
description: Send emails via Emailr
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: saeedmshdi
author_github_url: https://github.com/emailr-dev/
npm_package_name: n8n-nodes-emailr
npm_version: 1.3.8
community_fetched_at: 2026-07-14T14:40:34.195Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendEmail",
      "options": [
        {
          "name": "Send Email",
          "value": "sendEmail",
          "action": "Send an email",
          "description": "Send an email via Emailr"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Email",
      "value": "sendEmail",
      "action": "Send an email",
      "description": "Send an email via Emailr"
    }
  ]

npm_readme:
  # n8n-nodes-emailr

  This is an [n8n](https://n8n.io/) community node package for [Emailr](https://emailr.dev).

  It provides two nodes:

  - `Emailr`: send email through Emailr
  - `Emailr Trigger`: start workflows when an email is received

  Use this package when you want to send transactional email from n8n workflows or start workflows from incoming email events in Emailr.

  ## Installation

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

  In n8n, install:

  ```text
  n8n-nodes-emailr
  ```

  ## Credentials

  Use an Emailr API key and API URL:

  - `API Key`: starts with `et_test_` or `et_live_`
  - `API URL`: defaults to `https://api.emailr.dev`

  Create an API credential in n8n, select `Emailr API`, then paste your Emailr API key. Keep the default API URL unless you are using a self-hosted Emailr API.

  ## Usage

  ### Send Email

  1. Add the `Emailr` node to your workflow.
  2. Select the `Send Email` operation.
  3. Fill in `From`, `To`, and `Subject`.
  4. Add either `HTML Body`, `Text Body`, or both.
  5. Execute the node.

  Example configuration:

  - `From`: `Support <support@yourdomain.com>`
  - `To`: `customer@example.com`
  - `Subject`: `Welcome to Emailr`
  - `Text Body`: `Thanks for signing up.`
  - `HTML Body`: `<p>Thanks for signing up.</p>`

  The node sends a `POST` request to Emailr's `/v1/emails/send` endpoint and returns the Emailr API response as the node output, which you can use in later workflow steps.

  ### Email Trigger

  1. Add the `Emailr Trigger` node to your workflow.
  2. Select the `Email Received` event.
  3. Choose a specific inbox or leave `Inbox` set to `All Inboxes`.
  4. Activate the workflow.

  When the workflow is activated, the node registers the n8n webhook URL with Emailr by creating an automation webhook. When the workflow is deactivated, the webhook subscription is removed.

  The trigger passes the incoming event payload into the workflow. The node forwards `body.data` when present, otherwise it forwards the full webhook body.

  Example incoming payload:

  ```json
  {
    "id": "eml_123",
    "inbox_id": "inb_123",
    "from": "sender@example.com",
    "to": ["support@yourdomain.com"],
    "subject": "Need help",
    "text": "Can you help me with my account?",
    "html": "<p>Can you help me with my account?</p>"
  }
  ```

  You can connect the trigger to downstream n8n nodes to create tickets, notify Slack, update a CRM, or send an automated reply.

  ## Resources

  - [Emailr](https://emailr.dev)
  - [Emailr Docs](https://docs.emailr.dev)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"A community n8n node package that enables sending transactional emails via Emailr API and triggering workflows when emails are received.","capabilities":["Send emails via Emailr API","Support for HTML and plain text email bodies","Configure sender and recipient addresses","Trigger workflows on incoming email events","Register/unregister webhook subscriptions dynamically"],"authentication":"API key required (starts with 'et_test_' or 'et_live_')","commonUseCases":["Send welcome or transactional emails from n8n workflows","Automatically create support tickets from incoming emails","Trigger notifications in Slack or update CRM records on email receipt","Set up automated email responses based on incoming messages"],"limitations":[],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.email","n8n-nodes-slack.slack","n8n-nodes-core.credential"]}


node_type: n8n-nodes-emailr.emailrTrigger
package_name: n8n-nodes-emailr
display_name: Emailr Trigger
description: Starts a workflow when an email is received via Emailr
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: saeedmshdi
author_github_url: https://github.com/emailr-dev/
npm_package_name: n8n-nodes-emailr
npm_version: 1.3.8
community_fetched_at: 2026-07-14T14:40:34.196Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-emailr

  This is an [n8n](https://n8n.io/) community node package for [Emailr](https://emailr.dev).

  It provides two nodes:

  - `Emailr`: send email through Emailr
  - `Emailr Trigger`: start workflows when an email is received

  Use this package when you want to send transactional email from n8n workflows or start workflows from incoming email events in Emailr.

  ## Installation

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

  In n8n, install:

  ```text
  n8n-nodes-emailr
  ```

  ## Credentials

  Use an Emailr API key and API URL:

  - `API Key`: starts with `et_test_` or `et_live_`
  - `API URL`: defaults to `https://api.emailr.dev`

  Create an API credential in n8n, select `Emailr API`, then paste your Emailr API key. Keep the default API URL unless you are using a self-hosted Emailr API.

  ## Usage

  ### Send Email

  1. Add the `Emailr` node to your workflow.
  2. Select the `Send Email` operation.
  3. Fill in `From`, `To`, and `Subject`.
  4. Add either `HTML Body`, `Text Body`, or both.
  5. Execute the node.

  Example configuration:

  - `From`: `Support <support@yourdomain.com>`
  - `To`: `customer@example.com`
  - `Subject`: `Welcome to Emailr`
  - `Text Body`: `Thanks for signing up.`
  - `HTML Body`: `<p>Thanks for signing up.</p>`

  The node sends a `POST` request to Emailr's `/v1/emails/send` endpoint and returns the Emailr API response as the node output, which you can use in later workflow steps.

  ### Email Trigger

  1. Add the `Emailr Trigger` node to your workflow.
  2. Select the `Email Received` event.
  3. Choose a specific inbox or leave `Inbox` set to `All Inboxes`.
  4. Activate the workflow.

  When the workflow is activated, the node registers the n8n webhook URL with Emailr by creating an automation webhook. When the workflow is deactivated, the webhook subscription is removed.

  The trigger passes the incoming event payload into the workflow. The node forwards `body.data` when present, otherwise it forwards the full webhook body.

  Example incoming payload:

  ```json
  {
    "id": "eml_123",
    "inbox_id": "inb_123",
    "from": "sender@example.com",
    "to": ["support@yourdomain.com"],
    "subject": "Need help",
    "text": "Can you help me with my account?",
    "html": "<p>Can you help me with my account?</p>"
  }
  ```

  You can connect the trigger to downstream n8n nodes to create tickets, notify Slack, update a CRM, or send an automated reply.

  ## Resources

  - [Emailr](https://emailr.dev)
  - [Emailr Docs](https://docs.emailr.dev)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"The Emailr Trigger node starts an n8n workflow when an email is received via the Emailr service, forwarding the incoming email payload to downstream nodes.","capabilities":["Starts workflow on email receipt","Forwards incoming email payload (body.data or full webhook body)","Supports filtering by specific inbox or all inboxes","Automatically registers/unregisters webhook URL on workflow activation/deactivation","Passes email metadata (from, to, subject, text, html) to workflow"],"authentication":"API key required","commonUseCases":["Automated customer support ticket creation","CRM updates from incoming emails","Automated email replies","Slack notifications for new emails","Lead capture and qualification workflows"],"limitations":["Community node (not official n8n node)","Requires Emailr API key and account","Limited to Emailr's webhook payload structure"],"relatedNodes":["Emailr (send email)","Webhook","Slack","CRM nodes","Ticketing nodes"]}


node_type: n8n-nodes-xcrawl.webScraper
package_name: n8n-nodes-xcrawl
display_name: XCrawl
description: Scrape pages, crawl sites, map URLs, and search the web using XCrawl API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: xcrawl
author_github_url: https://github.com/xcrawl-api/
npm_package_name: n8n-nodes-xcrawl
npm_version: 1.0.3
community_fetched_at: 2026-07-14T14:40:34.197Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "Scraping",
      "options": [
        {
          "name": "Scraping",
          "value": "Scraping",
          "description": "Single-page scrape and result retrieval"
        },
        {
          "name": "Crawling",
          "value": "Crawling",
          "description": "Bulk site crawl and result retrieval"
        },
        {
          "name": "Map & Search",
          "value": "MapSearch",
          "description": "Site URL mapping and web search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "scrape",
      "options": [
        {
          "name": "Scrape",
          "value": "scrape",
          "action": "Scrape content from a URL",
          "description": "Scrape content from a URL"
        },
        {
          "name": "Get Scrape Result",
          "value": "scrapeResult",
          "action": "Retrieve async scrape result",
          "description": "Retrieve the result of an async scrape job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Scraping"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "crawl",
      "options": [
        {
          "name": "Crawl",
          "value": "crawl",
          "action": "Crawl an entire site",
          "description": "Crawl an entire site asynchronously"
        },
        {
          "name": "Get Crawl Result",
          "value": "crawlResult",
          "action": "Retrieve crawl result",
          "description": "Retrieve the result of a crawl job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "Crawling"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "map",
      "options": [
        {
          "name": "Map",
          "value": "map",
          "action": "Get all links from a site",
          "description": "Get all URLs from a site"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search the web by keyword",
          "description": "Search the web by keyword"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "MapSearch"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Scrape",
      "value": "scrape",
      "action": "Scrape content from a URL",
      "description": "Scrape content from a URL",
      "resource": "Scraping"
    },
    {
      "name": "Get Scrape Result",
      "value": "scrapeResult",
      "action": "Retrieve async scrape result",
      "description": "Retrieve the result of an async scrape job",
      "resource": "Scraping"
    },
    {
      "name": "Crawl",
      "value": "crawl",
      "action": "Crawl an entire site",
      "description": "Crawl an entire site asynchronously",
      "resource": "Crawling"
    },
    {
      "name": "Get Crawl Result",
      "value": "crawlResult",
      "action": "Retrieve crawl result",
      "description": "Retrieve the result of a crawl job",
      "resource": "Crawling"
    },
    {
      "name": "Map",
      "value": "map",
      "action": "Get all links from a site",
      "description": "Get all URLs from a site",
      "resource": "MapSearch"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search the web by keyword",
      "description": "Search the web by keyword",
      "resource": "MapSearch"
    }
  ]

npm_readme:
  # n8n-nodes-xcrawl

  Scrape pages, crawl sites, map URLs, and search the web using the XCrawl API.

  ## Prerequisites

  - An [XCrawl](https://www.xcrawl.com) account
  - An XCrawl API Key (obtained from your account dashboard)

  ## Installation

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

  ```
  n8n-nodes-xcrawl
  ```

  ## Credentials

  After installation, create a new **XCrawl API** credential and enter your API Key.

  ## Supported Operations

  ### Scraping

  | Operation         | Description                                                      |
  | ----------------- | ---------------------------------------------------------------- |
  | Scrape            | Scrape content from a single URL. Supports sync and async modes. |
  | Get Scrape Result | Retrieve the result of an async scrape job by scrape ID.         |

  ### Crawling

  | Operation        | Description                                                             |
  | ---------------- | ----------------------------------------------------------------------- |
  | Crawl            | Crawl an entire site asynchronously and collect content from all pages. |
  | Get Crawl Result | Retrieve the result of a crawl job by crawl ID.                         |

  ### Map & Search

  | Operation | Description                                   |
  | --------- | --------------------------------------------- |
  | Map       | Get a list of all URLs found on a site.       |
  | Search    | Search the web by keyword and return results. |

  ## Output Formats (Scrape & Crawl)

  - `markdown` — Cleaned Markdown content
  - `html` — Cleaned HTML
  - `raw_html` — Raw HTML
  - `links` — List of links found on the page
  - `summary` — AI-generated summary
  - `screenshot` — Page screenshot (viewport or full page)
  - `json` — AI-structured JSON extraction (requires a prompt)

  ## Compatibility

  Requires n8n version 1.0.0 or later.

  ## Links

  - Website: [xcrawl.com](https://www.xcrawl.com)
  - API Docs: [xcrawl.com/docs](https://docs.xcrawl.com/doc)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The XCrawl node scrapes web pages, crawls entire sites, maps URLs, and searches the web using the XCrawl API.","capabilities":["Scrape content from a single URL (sync/async)","Retrieve async scrape results by ID","Crawl entire sites asynchronously","Retrieve crawl results by ID","Map all URLs on a site","Search the web by keyword","Extract content in Markdown, HTML, raw HTML, links, AI summary, screenshot, or JSON formats"],"authentication":"API key required (XCrawl API Key from account dashboard)","commonUseCases":["Web content extraction for data processing","Site crawling for SEO analysis or content aggregation","URL mapping for site structure analysis","Keyword-based web search integration"],"limitations":["Requires a paid XCrawl account and API key","Requires n8n version 1.0.0 or later"],"relatedNodes":["n8n-nodes-xcrawl.webScraper"]}


node_type: n8n-nodes-parsebridge.parsebridge
package_name: n8n-nodes-parsebridge
display_name: Parsebridge
description: Parse PDFs to clean Markdown
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: parsebridge
author_github_url: https://github.com/parsebridge/
npm_package_name: n8n-nodes-parsebridge
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:34.198Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "parseUrl",
      "options": [
        {
          "name": "Parse PDF From URL",
          "value": "parseUrl",
          "action": "Parse a PDF from URL",
          "description": "Convert a PDF at a given URL to Markdown"
        },
        {
          "name": "Parse PDF From File",
          "value": "parseFile",
          "action": "Parse a PDF from file",
          "description": "Convert an uploaded PDF file to Markdown"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Parse PDF From URL",
      "value": "parseUrl",
      "action": "Parse a PDF from URL",
      "description": "Convert a PDF at a given URL to Markdown"
    },
    {
      "name": "Parse PDF From File",
      "value": "parseFile",
      "action": "Parse a PDF from file",
      "description": "Convert an uploaded PDF file to Markdown"
    }
  ]

npm_readme:
  # n8n-nodes-parsebridge

  This is an n8n community node that lets you parse PDFs into clean Markdown using [Parsebridge](https://parsebridge.com) in your n8n workflows.

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

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

  ## Installation

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

  ## Operations

  - **Parse PDF From URL** - Convert a PDF at a given URL to Markdown
  - **Parse PDF From File** - Convert an uploaded PDF binary file to Markdown

  ## Credentials

  You need a Parsebridge API key to use this node.

  1. Go to [parsebridge.com](https://parsebridge.com) and create an account.
  2. Navigate to your dashboard and generate an API key.
  3. In n8n, create a new **Parsebridge API** credential and paste your API key.

  ## Compatibility

  Compatible with n8n version 1.60.0 or later.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Parsebridge website](https://parsebridge.com)
  - [Parsebridge API documentation](https://parsebridge.com/docs)

ai_documentation_summary:
  {"purpose":"Converts PDF documents into clean Markdown format using the Parsebridge service within n8n workflows.","capabilities":["Parse PDF from a URL","Parse PDF from an uploaded file","Output clean Markdown text"],"authentication":"API key required","commonUseCases":["Automating document processing in workflows","Converting uploaded PDFs to Markdown for further processing","Parsing remote PDF documents from URLs"],"limitations":["Requires a valid Parsebridge API key and account","Compatible only with n8n version 1.60.0 or later"],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.binary","n8n-nodes-core.httpRequest"]}


node_type: n8n-nodes-vatis-transcribe.vatisTranscribe
package_name: n8n-nodes-vatis-transcribe
display_name: Vatis Transcribe
description: Interact with the Vatis Transcribe API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: einazare
author_github_url: https://github.com/Vatis-Tech/
npm_package_name: n8n-nodes-vatis-transcribe
npm_version: 0.1.10
community_fetched_at: 2026-07-14T14:40:34.199Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "transcribe",
      "options": [
        {
          "name": "Export",
          "value": "export"
        },
        {
          "name": "Stream",
          "value": "streams"
        },
        {
          "name": "Transcribe",
          "value": "transcribe"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Transcript",
          "value": "create",
          "action": "Create transcript",
          "description": "Create a new transcript"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transcribe"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Get Transcript Status",
          "value": "getStatus",
          "action": "Get transcript status",
          "description": "Retrieve the status of a transcription stream by its ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "streams"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getJson",
      "options": [
        {
          "name": "Get Transcript JSON",
          "value": "getJson",
          "action": "Get transcript JSON",
          "description": "Export the full transcription and intelligence JSON for a given stream ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "export"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Transcript",
      "value": "create",
      "action": "Create transcript",
      "description": "Create a new transcript",
      "resource": "transcribe"
    },
    {
      "name": "Get Transcript Status",
      "value": "getStatus",
      "action": "Get transcript status",
      "description": "Retrieve the status of a transcription stream by its ID",
      "resource": "streams"
    },
    {
      "name": "Get Transcript JSON",
      "value": "getJson",
      "action": "Get transcript JSON",
      "description": "Export the full transcription and intelligence JSON for a given stream ID",
      "resource": "export"
    }
  ]

npm_readme:
  # n8n-nodes-vatis-transcribe

  This is an n8n community node package for **[Vatis Transcribe](https://docs.vatis.tech/introduction)**. It lets you send audio or video for transcription, poll processing status, and download structured transcript JSON directly from your n8n workflows.

  [Vatis](https://docs.vatis.tech/introduction) provides speech-to-text and related audio intelligence features via HTTP APIs. This node wraps the upload, stream status, and JSON export endpoints so you do not have to build raw HTTP requests yourself.

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

  In short: open **Settings → Community nodes**, enter `n8n-nodes-vatis-transcribe`, and install the package (or use the CLI flow described in the docs).

  ## Operations

  The **Vatis Transcribe** node groups actions by **resource** and **operation**:

  | Resource | Operation | What it does |
  | -------- | --------- | ------------- |
  | **Transcribe** | **Create Transcript** | Uploads media (binary field or URL) and starts a transcription stream. Returns identifiers you use in later steps (for example `streamId`). |
  | **Stream** | **Get Transcript Status** | Reads the current status and metadata for a stream by `streamId` (poll until processing finishes). |
  | **Export** | **Get Transcript JSON** | Downloads the full transcription and intelligence payload as JSON for a completed `streamId`. |

  Details such as languages, diarization, and optional intelligence features are configured in the node UI when **Create Transcript** is selected.

  ## Credentials

  Authentication uses the **Vatis Transcribe API** credential type (HTTP **Authorization: Basic** with your API key), matching [Vatis API access](https://docs.vatis.tech/get-started/get-api-access).

  1. Sign up or log in at Vatis and obtain an API key from their documentation: [Get API access](https://docs.vatis.tech/get-started/get-api-access).
  2. In n8n, create credentials **Vatis Transcribe API** and paste your API key.
  3. Use **Test** on the credential if you want to verify connectivity before running workflows.

  ## Compatibility

  This package is built with the official [n8n node tooling](https://www.npmjs.com/package/@n8n/node-cli) (`n8n-node`) and targets current n8n community node conventions. Use a recent n8n release that supports community nodes (see [Community nodes](https://docs.n8n.io/integrations/community-nodes/)).

  If you hit a version-specific issue, check your n8n version and the [changelog / releases](https://github.com/Vatis-Tech/n8n-nodes-vatis-transcribe/releases) for this repository.

  ## Usage

  ### Example: transcribe a file URL and fetch JSON when ready

  1. Add **Vatis Transcribe** → resource **Transcribe** → operation **Create Transcript**. Choose **Media URL**, paste a publicly reachable audio or video URL, and set languages and options as needed. Execute the node and note `streamId` in the output JSON.
  2. Add another **Vatis Transcribe** node (or loop): resource **Stream** → **Get Transcript Status**, using the same credential and the `streamId` from step 1. Repeat until the API reports a terminal success state for your workflow (for example with **Wait** between polls).
  3. Add **Vatis Transcribe** → resource **Export** → **Get Transcript JSON** with that `streamId` to retrieve the final structured transcript.

  You can combine this with n8n’s **IF**, **Wait**, **Merge**, or **Split In Batches** nodes depending on how you want to poll and branch on status.

  By the time users install community nodes, they usually know n8n basics; if not, see [Try it out](https://docs.n8n.io/try-it-out/).

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Vatis documentation](https://docs.vatis.tech/introduction)
  - [Get API access (API key)](https://docs.vatis.tech/get-started/get-api-access)
  - [Submit your node for verification](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/) (n8n)

  ## Maintainer release flow (n8n verification)

  To satisfy n8n verification requirements, publish from GitHub Actions only (not from a local machine).

  1. Configure npm Trusted Publisher for this repository and `publish.yml`.
  2. Run `npm run release` locally to bump version, create tag (`v*`), and push.
  3. The `publish.yml` workflow publishes with `npm publish --provenance --access public`.

  ## Version history

  Published versions and release notes are tracked on [npm](https://www.npmjs.com/package/n8n-nodes-vatis-transcribe) and [GitHub Releases](https://github.com/Vatis-Tech/n8n-nodes-vatis-transcribe/releases).

ai_documentation_summary:
  {"purpose":"This n8n community node enables automated speech-to-text transcription by interacting with the Vatis Transcribe API to upload media, poll processing status, and retrieve structured JSON transcripts.","capabilities":["Upload audio or video files via binary field or URL","Create transcription streams and receive stream identifiers","Poll and monitor real-time processing status of transcription streams","Download final structured transcript data as JSON","Configure transcription options including language and diarization","Support for optional audio intelligence features"],"authentication":"API key required (HTTP Authorization: Basic)","commonUseCases":["Automating meeting note generation from recorded audio","Converting video content to searchable text for content management","Building automated customer support response systems","Processing voice memos or call recordings in workflows"],"limitations":["Requires manual polling for transcription status completion","Media must be publicly reachable when using URL input","No built-in retry logic for failed transcription requests","Requires separate Vatis account and API key setup"],"relatedNodes":["n8n Wait node","n8n If node","n8n Merge node","n8n Split In Batches node","n8n HTTP Request node"]}


node_type: n8n-nodes-spiky.spikyAiTrigger
package_name: n8n-nodes-spiky
display_name: Spiky AI Trigger
description: Triggers when a meeting analysis is ready in Spiky AI
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: spiky.ai
author_github_url: https://github.com/spikydev/
npm_package_name: n8n-nodes-spiky
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.200Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-spiky

  This is an [n8n](https://n8n.io/) community node for [Spiky.ai](https://spiky.ai) — an AI-powered meeting intelligence platform that analyzes sales calls, demos, and team meetings to provide actionable insights.

  ## Features

  - **Upload Call Recording** — Submit a call recording URL for AI-powered analysis
  - **Meeting Analysis Ready** (Trigger) — Automatically starts a workflow when a meeting analysis completes

  ## Installation

  ### n8n Cloud

  1. Go to **Settings > Community Nodes**
  2. Search for `n8n-nodes-spiky`
  3. Click **Install**

  ### Self-Hosted n8n

  ```bash
  # In your n8n installation directory
  npm install n8n-nodes-spiky
  ```

  Then restart your n8n instance.

  ## Credentials

  This node authenticates with your Spiky.ai account using email and password.

  ### Prerequisites

  - A [Spiky.ai](https://spiky.ai) account with email/password login
  - SSO-only users (Google/Microsoft/Apple) must set a password first via Spiky settings

  ### Setup

  1. In n8n, go to **Credentials > New Credential**
  2. Search for **Spiky AI API**
  3. Enter your **Email** and **Password**
  4. Click **Test** to verify the connection
  5. The node automatically handles token refresh — no manual re-authentication needed

  ## Operations

  ### Spiky AI (Action Node)

  | Operation | Description |
  |-----------|-------------|
  | Get Current User | Retrieve the authenticated user's information |
  | Upload Call Recording | Submit a recording URL for AI analysis |

  ### Spiky AI Trigger

  | Trigger | Description |
  |---------|-------------|
  | Meeting Analysis Ready | Fires when a meeting analysis completes |

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Node.js:** >= 22.0.0

  ## Development

  See [docs/LOCAL_DEVELOPMENT.md](docs/LOCAL_DEVELOPMENT.md) for instructions on setting up a local development environment.

  ## Resources

  - [Spiky.ai](https://spiky.ai)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [n8n Community Node Development Guide](https://docs.n8n.io/integrations/creating-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that triggers workflows when Spiky.ai meeting analyses are complete and provides actions to upload call recordings for AI analysis.","capabilities":["Trigger workflow on meeting analysis completion","Upload call recording URL for AI analysis","Retrieve authenticated user information"],"authentication":"Email and Password","commonUseCases":["Automate follow-up actions after sales call analysis","Generate insights from team meetings","Process demo recordings automatically"],"limitations":["Requires a Spiky.ai account with email/password login (SSO users must set a password first)","Requires n8n version 1.0.0 or higher","Requires Node.js version 22.0.0 or higher"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.httpRequest"]}


node_type: n8n-nodes-spiky.spikyAi
package_name: n8n-nodes-spiky
display_name: Spiky AI
description: Interact with Spiky AI meeting intelligence platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: spiky.ai
author_github_url: https://github.com/spikydev/
npm_package_name: n8n-nodes-spiky
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.200Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrentUser",
      "options": [
        {
          "name": "Get Current User",
          "value": "getCurrentUser",
          "action": "Get the currently authenticated user info",
          "description": "Get the currently authenticated user info"
        },
        {
          "name": "Upload Recording",
          "value": "uploadRecording",
          "action": "Submit a call recording URL for analysis",
          "description": "Submit a call recording URL for analysis"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Current User",
      "value": "getCurrentUser",
      "action": "Get the currently authenticated user info",
      "description": "Get the currently authenticated user info"
    },
    {
      "name": "Upload Recording",
      "value": "uploadRecording",
      "action": "Submit a call recording URL for analysis",
      "description": "Submit a call recording URL for analysis"
    }
  ]

npm_readme:
  # n8n-nodes-spiky

  This is an [n8n](https://n8n.io/) community node for [Spiky.ai](https://spiky.ai) — an AI-powered meeting intelligence platform that analyzes sales calls, demos, and team meetings to provide actionable insights.

  ## Features

  - **Upload Call Recording** — Submit a call recording URL for AI-powered analysis
  - **Meeting Analysis Ready** (Trigger) — Automatically starts a workflow when a meeting analysis completes

  ## Installation

  ### n8n Cloud

  1. Go to **Settings > Community Nodes**
  2. Search for `n8n-nodes-spiky`
  3. Click **Install**

  ### Self-Hosted n8n

  ```bash
  # In your n8n installation directory
  npm install n8n-nodes-spiky
  ```

  Then restart your n8n instance.

  ## Credentials

  This node authenticates with your Spiky.ai account using email and password.

  ### Prerequisites

  - A [Spiky.ai](https://spiky.ai) account with email/password login
  - SSO-only users (Google/Microsoft/Apple) must set a password first via Spiky settings

  ### Setup

  1. In n8n, go to **Credentials > New Credential**
  2. Search for **Spiky AI API**
  3. Enter your **Email** and **Password**
  4. Click **Test** to verify the connection
  5. The node automatically handles token refresh — no manual re-authentication needed

  ## Operations

  ### Spiky AI (Action Node)

  | Operation | Description |
  |-----------|-------------|
  | Get Current User | Retrieve the authenticated user's information |
  | Upload Call Recording | Submit a recording URL for AI analysis |

  ### Spiky AI Trigger

  | Trigger | Description |
  |---------|-------------|
  | Meeting Analysis Ready | Fires when a meeting analysis completes |

  ## Compatibility

  - **Minimum n8n version:** 1.0.0
  - **Node.js:** >= 22.0.0

  ## Development

  See [docs/LOCAL_DEVELOPMENT.md](docs/LOCAL_DEVELOPMENT.md) for instructions on setting up a local development environment.

  ## Resources

  - [Spiky.ai](https://spiky.ai)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [n8n Community Node Development Guide](https://docs.n8n.io/integrations/creating-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that interacts with Spiky.ai to analyze sales calls, demos, and team meetings by uploading recordings and triggering workflows upon analysis completion.","capabilities":["Upload call recording URL for AI-powered analysis","Retrieve authenticated user information","Trigger workflow when meeting analysis completes","Automatic token refresh management"],"authentication":"Email and Password","commonUseCases":["Automated analysis of sales call recordings","Triggering follow-up workflows after meeting insights are generated","Integrating Spiky.ai insights into existing n8n automation pipelines"],"limitations":["Requires a Spiky.ai account with email/password login (SSO-only users must set a password first)","Minimum n8n version 1.0.0 required","Requires Node.js >= 22.0.0 for self-hosted installations"],"relatedNodes":["Webhook Trigger","HTTP Request","Wait Node","Code Node"]}


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

updated_at: 2026-07-14 14:40:34
author_name: adam1571
author_github_url: https://github.com/Mailhooks/
npm_package_name: n8n-nodes-mailhooks
npm_version: 1.0.3
community_fetched_at: 2026-07-14T14:40:34.201Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Domain",
          "value": "domain"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Utility",
          "value": "utility"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List domains",
          "description": "List all domains"
        },
        {
          "name": "Verify",
          "value": "verify",
          "action": "Verify domain",
          "description": "Verify a domain MX records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "domain"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete email",
          "description": "Delete an email"
        },
        {
          "name": "Download Attachment",
          "value": "downloadAttachment",
          "action": "Download attachment",
          "description": "Download a specific attachment"
        },
        {
          "name": "Download EML",
          "value": "downloadEml",
          "action": "Download email as EML",
          "description": "Download email in EML format"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get email",
          "description": "Get a specific email by ID"
        },
        {
          "name": "Get Content",
          "value": "getContent",
          "action": "Get email content",
          "description": "Get the HTML and text content of an email"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List emails",
          "description": "List emails with optional filters"
        },
        {
          "name": "Mark as Read",
          "value": "markAsRead",
          "action": "Mark email as read",
          "description": "Mark an email as read"
        },
        {
          "name": "Mark as Unread",
          "value": "markAsUnread",
          "action": "Mark email as unread",
          "description": "Mark an email as unread"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create inbox",
          "description": "Create a new inbox"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get inbox",
          "description": "Get a specific inbox"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List inboxes",
          "description": "List all inboxes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create webhook",
          "description": "Create a new webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete webhook",
          "description": "Delete a webhook"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get webhook",
          "description": "Get a specific webhook"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List webhooks",
          "description": "List all webhooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update webhook",
          "description": "Update a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "verifyWebhook",
      "options": [
        {
          "name": "Verify Webhook",
          "value": "verifyWebhook",
          "action": "Verify webhook signature",
          "description": "Verify a webhook signature"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "utility"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List",
      "value": "list",
      "action": "List domains",
      "description": "List all domains",
      "resource": "domain"
    },
    {
      "name": "Verify",
      "value": "verify",
      "action": "Verify domain",
      "description": "Verify a domain MX records",
      "resource": "domain"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete email",
      "description": "Delete an email",
      "resource": "email"
    },
    {
      "name": "Download Attachment",
      "value": "downloadAttachment",
      "action": "Download attachment",
      "description": "Download a specific attachment",
      "resource": "email"
    },
    {
      "name": "Download EML",
      "value": "downloadEml",
      "action": "Download email as EML",
      "description": "Download email in EML format",
      "resource": "email"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get email",
      "description": "Get a specific email by ID",
      "resource": "email"
    },
    {
      "name": "Get Content",
      "value": "getContent",
      "action": "Get email content",
      "description": "Get the HTML and text content of an email",
      "resource": "email"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List emails",
      "description": "List emails with optional filters",
      "resource": "email"
    },
    {
      "name": "Mark as Read",
      "value": "markAsRead",
      "action": "Mark email as read",
      "description": "Mark an email as read",
      "resource": "email"
    },
    {
      "name": "Mark as Unread",
      "value": "markAsUnread",
      "action": "Mark email as unread",
      "description": "Mark an email as unread",
      "resource": "email"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create inbox",
      "description": "Create a new inbox",
      "resource": "inbox"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get inbox",
      "description": "Get a specific inbox",
      "resource": "inbox"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List inboxes",
      "description": "List all inboxes",
      "resource": "inbox"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create webhook",
      "description": "Create a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete webhook",
      "description": "Delete a webhook",
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get webhook",
      "description": "Get a specific webhook",
      "resource": "webhook"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List webhooks",
      "description": "List all webhooks",
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update webhook",
      "description": "Update a webhook",
      "resource": "webhook"
    },
    {
      "name": "Verify Webhook",
      "value": "verifyWebhook",
      "action": "Verify webhook signature",
      "description": "Verify a webhook signature",
      "resource": "utility"
    }
  ]

npm_readme:
  # n8n-nodes-mailhooks

  This is an n8n community node for [Mailhooks](https://mailhooks.dev) - a service for receiving, filtering, and processing emails via webhooks and API.

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

  [Installation](#installation)
  [Nodes](#nodes)
  [Credentials](#credentials)
  [Usage](#usage)
  [Resources](#resources)

  ## Installation

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

  Or install directly in n8n:

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-mailhooks`
  4. Agree to the risks and select **Install**

  ## Nodes

  This package includes three nodes:

  ### Mailhooks

  The main node for interacting with the Mailhooks API.

  **Email Operations:**
  - **List** - List emails with optional filters (from, to, subject, date range, read status)
  - **Get** - Get a specific email by ID
  - **Get Content** - Get the HTML and text content of an email
  - **Delete** - Delete an email
  - **Mark as Read** - Mark an email as read
  - **Mark as Unread** - Mark an email as unread
  - **Download EML** - Download email in EML format
  - **Download Attachment** - Download a specific attachment
  - **Wait For** - Wait for an email matching filters (useful for testing flows)

  **Inbox Operations:**
  - **List** - List all inboxes
  - **Get** - Get a specific inbox by ID
  - **Create** - Create a new inbox

  **Webhook Operations:**
  - **List** - List all webhooks
  - **Get** - Get a specific webhook by ID
  - **Create** - Create a new webhook (specify URL and events)
  - **Update** - Update a webhook (URL, active status)
  - **Delete** - Delete a webhook

  **Domain Operations:**
  - **List** - List all domains
  - **Verify** - Trigger domain verification

  **Utility Operations:**
  - **Parse EML** - Parse raw EML content into structured data
  - **Verify Webhook** - Verify a webhook signature

  ### Mailhooks Trigger

  A webhook trigger that starts the workflow when a new email is received. When the workflow is activated, this node automatically creates a webhook in Mailhooks pointing at n8n's webhook URL. When the workflow is deactivated, the webhook is automatically removed.

  Features:
  - Automatically registers a Mailhooks webhook on workflow activation
  - Automatically removes the webhook on workflow deactivation
  - Optional inbox filter to restrict trigger to a specific inbox
  - Optional signature verification for security
  - Returns full email data including headers, body, attachments, and authentication results (SPF, DKIM, DMARC)

  ### Mailhooks Polling Trigger

  A polling trigger that checks for new emails at regular intervals. Useful when webhooks are not available or as a fallback.

  Features:
  - Configurable polling interval (set in n8n workflow settings)
  - Filter by sender, recipient, or subject
  - Only processes emails received after workflow activation

  ## Credentials

  To use the Mailhooks nodes, you need to configure credentials:

  1. Sign up at [mailhooks.dev](https://mailhooks.dev)
  2. Go to your dashboard and copy your API key
  3. In n8n, create new **Mailhooks API** credentials
  4. Enter your API key

  | Field | Description |
  |-------|-------------|
  | API Key | Your Mailhooks API key from the dashboard |
  | Base URL | The API base URL (default: `https://mailhooks.dev/api`) |

  ## Usage

  ### Receiving emails via webhook

  1. Add a **Mailhooks Trigger** node to your workflow
  2. Configure your Mailhooks API credentials
  3. (Optional) Select a specific inbox to filter by
  4. (Optional) Add a webhook secret for signature verification
  5. Activate the workflow — the webhook is created automatically

  ### Polling for new emails

  1. Add a **Mailhooks Polling Trigger** node to your workflow
  2. Configure the polling interval in the workflow settings
  3. Optionally add filters for sender, recipient, or subject
  4. Activate the workflow

  ### Working with emails

  Use the **Mailhooks** node to:
  - List and search emails
  - Get email content and attachments
  - Delete emails
  - Mark emails as read/unread
  - Wait for specific emails (great for automated testing)

  ### Managing inboxes

  Use the **Mailhooks** node with the **Inbox** resource to:
  - List all inboxes
  - Get inbox details
  - Create new inboxes

  ### Managing webhooks

  Use the **Mailhooks** node with the **Webhook** resource to:
  - List all webhooks
  - Get webhook details
  - Create, update, or delete webhooks

  ### Managing domains

  Use the **Mailhooks** node with the **Domain** resource to:
  - List all domains
  - Trigger domain verification

  ### Example: Process incoming emails

  ```
  [Mailhooks Trigger] → [IF] → [Slack]
                           ↓
                      [Google Sheets]
  ```

  1. Trigger on new email (webhook auto-registered)
  2. Check if subject contains "urgent"
  3. Send to Slack if urgent, otherwise log to Google Sheets

  ## Resources

  - [Mailhooks Documentation](https://mailhooks.dev/docs)
  - [Mailhooks SDK](https://www.npmjs.com/package/@mailhooks/sdk)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [GitHub Repository](https://github.com/Mailhooks/integrations)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation workflows to receive, filter, and process emails via the Mailhooks API, supporting both webhook triggers and polling mechanisms.","capabilities":["List emails with filters (from, to, subject, date range, read status)","Retrieve specific emails by ID","Get HTML and text content of emails","Download emails in EML format","Download specific email attachments","Mark emails as read or unread","Delete emails","Wait for emails matching specific filters","Manage inboxes (list, get, create)","Manage webhooks (list, get, create, update, delete)"],"authentication":"API key required","commonUseCases":["Automated email processing workflows","Email-based triggers for Slack notifications or database logging","Automated email archiving or deletion","Email monitoring and alerting systems","Automated testing with email wait functionality"],"limitations":["Community node (fair-code licensed)","Requires separate Mailhooks account and API key","Polling interval must be configured in n8n workflow settings"],"relatedNodes":["n8n-nodes-core.webhook","n8n-nodes-core.httpRequest","n8n-nodes-core.if","n8n-nodes-core.slack","n8n-nodes-core.googleSheets"]}


node_type: n8n-nodes-mailhooks.mailhooksTrigger
package_name: n8n-nodes-mailhooks
display_name: Mailhooks Trigger
description: Receive Mailhooks webhook events
category: Community
development_style: declarative
version: 2
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: adam1571
author_github_url: https://github.com/Mailhooks/
npm_package_name: n8n-nodes-mailhooks
npm_version: 1.0.3
community_fetched_at: 2026-07-14T14:40:34.202Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-mailhooks

  This is an n8n community node for [Mailhooks](https://mailhooks.dev) - a service for receiving, filtering, and processing emails via webhooks and API.

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

  [Installation](#installation)
  [Nodes](#nodes)
  [Credentials](#credentials)
  [Usage](#usage)
  [Resources](#resources)

  ## Installation

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

  Or install directly in n8n:

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-mailhooks`
  4. Agree to the risks and select **Install**

  ## Nodes

  This package includes three nodes:

  ### Mailhooks

  The main node for interacting with the Mailhooks API.

  **Email Operations:**
  - **List** - List emails with optional filters (from, to, subject, date range, read status)
  - **Get** - Get a specific email by ID
  - **Get Content** - Get the HTML and text content of an email
  - **Delete** - Delete an email
  - **Mark as Read** - Mark an email as read
  - **Mark as Unread** - Mark an email as unread
  - **Download EML** - Download email in EML format
  - **Download Attachment** - Download a specific attachment
  - **Wait For** - Wait for an email matching filters (useful for testing flows)

  **Inbox Operations:**
  - **List** - List all inboxes
  - **Get** - Get a specific inbox by ID
  - **Create** - Create a new inbox

  **Webhook Operations:**
  - **List** - List all webhooks
  - **Get** - Get a specific webhook by ID
  - **Create** - Create a new webhook (specify URL and events)
  - **Update** - Update a webhook (URL, active status)
  - **Delete** - Delete a webhook

  **Domain Operations:**
  - **List** - List all domains
  - **Verify** - Trigger domain verification

  **Utility Operations:**
  - **Parse EML** - Parse raw EML content into structured data
  - **Verify Webhook** - Verify a webhook signature

  ### Mailhooks Trigger

  A webhook trigger that starts the workflow when a new email is received. When the workflow is activated, this node automatically creates a webhook in Mailhooks pointing at n8n's webhook URL. When the workflow is deactivated, the webhook is automatically removed.

  Features:
  - Automatically registers a Mailhooks webhook on workflow activation
  - Automatically removes the webhook on workflow deactivation
  - Optional inbox filter to restrict trigger to a specific inbox
  - Optional signature verification for security
  - Returns full email data including headers, body, attachments, and authentication results (SPF, DKIM, DMARC)

  ### Mailhooks Polling Trigger

  A polling trigger that checks for new emails at regular intervals. Useful when webhooks are not available or as a fallback.

  Features:
  - Configurable polling interval (set in n8n workflow settings)
  - Filter by sender, recipient, or subject
  - Only processes emails received after workflow activation

  ## Credentials

  To use the Mailhooks nodes, you need to configure credentials:

  1. Sign up at [mailhooks.dev](https://mailhooks.dev)
  2. Go to your dashboard and copy your API key
  3. In n8n, create new **Mailhooks API** credentials
  4. Enter your API key

  | Field | Description |
  |-------|-------------|
  | API Key | Your Mailhooks API key from the dashboard |
  | Base URL | The API base URL (default: `https://mailhooks.dev/api`) |

  ## Usage

  ### Receiving emails via webhook

  1. Add a **Mailhooks Trigger** node to your workflow
  2. Configure your Mailhooks API credentials
  3. (Optional) Select a specific inbox to filter by
  4. (Optional) Add a webhook secret for signature verification
  5. Activate the workflow — the webhook is created automatically

  ### Polling for new emails

  1. Add a **Mailhooks Polling Trigger** node to your workflow
  2. Configure the polling interval in the workflow settings
  3. Optionally add filters for sender, recipient, or subject
  4. Activate the workflow

  ### Working with emails

  Use the **Mailhooks** node to:
  - List and search emails
  - Get email content and attachments
  - Delete emails
  - Mark emails as read/unread
  - Wait for specific emails (great for automated testing)

  ### Managing inboxes

  Use the **Mailhooks** node with the **Inbox** resource to:
  - List all inboxes
  - Get inbox details
  - Create new inboxes

  ### Managing webhooks

  Use the **Mailhooks** node with the **Webhook** resource to:
  - List all webhooks
  - Get webhook details
  - Create, update, or delete webhooks

  ### Managing domains

  Use the **Mailhooks** node with the **Domain** resource to:
  - List all domains
  - Trigger domain verification

  ### Example: Process incoming emails

  ```
  [Mailhooks Trigger] → [IF] → [Slack]
                           ↓
                      [Google Sheets]
  ```

  1. Trigger on new email (webhook auto-registered)
  2. Check if subject contains "urgent"
  3. Send to Slack if urgent, otherwise log to Google Sheets

  ## Resources

  - [Mailhooks Documentation](https://mailhooks.dev/docs)
  - [Mailhooks SDK](https://www.npmjs.com/package/@mailhooks/sdk)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [GitHub Repository](https://github.com/Mailhooks/integrations)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Mailhooks Trigger node automatically creates a webhook in Mailhooks when activated to receive incoming emails and removes it when deactivated, enabling event-driven email processing workflows.","capabilities":["Automatically registers Mailhooks webhook on workflow activation","Automatically removes webhook on workflow deactivation","Filter triggers by specific inbox","Verify email signatures (SPF, DKIM, DMARC)","Return full email data including headers, body, attachments, and authentication results","Supports optional webhook secret for security"],"authentication":"API key required","commonUseCases":["Real-time email monitoring and processing","Automated email routing based on content","Email-based notifications to Slack or other services","Automated testing with email triggers"],"limitations":["Requires Mailhooks account and API key","Webhook is tied to workflow lifecycle (created/removed with workflow)","Does not support polling mode (only webhook trigger)"],"relatedNodes":["Mailhooks API","Mailhooks Polling Trigger","Mailhooks"]}


node_type: n8n-nodes-mailhooks.mailhooksPollingTrigger
package_name: n8n-nodes-mailhooks
display_name: Mailhooks Polling Trigger
description: Poll Mailhooks for new emails
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: adam1571
author_github_url: https://github.com/Mailhooks/
npm_package_name: n8n-nodes-mailhooks
npm_version: 1.0.3
community_fetched_at: 2026-07-14T14:40:34.203Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-mailhooks

  This is an n8n community node for [Mailhooks](https://mailhooks.dev) - a service for receiving, filtering, and processing emails via webhooks and API.

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

  [Installation](#installation)
  [Nodes](#nodes)
  [Credentials](#credentials)
  [Usage](#usage)
  [Resources](#resources)

  ## Installation

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

  Or install directly in n8n:

  1. Go to **Settings** > **Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-mailhooks`
  4. Agree to the risks and select **Install**

  ## Nodes

  This package includes three nodes:

  ### Mailhooks

  The main node for interacting with the Mailhooks API.

  **Email Operations:**
  - **List** - List emails with optional filters (from, to, subject, date range, read status)
  - **Get** - Get a specific email by ID
  - **Get Content** - Get the HTML and text content of an email
  - **Delete** - Delete an email
  - **Mark as Read** - Mark an email as read
  - **Mark as Unread** - Mark an email as unread
  - **Download EML** - Download email in EML format
  - **Download Attachment** - Download a specific attachment
  - **Wait For** - Wait for an email matching filters (useful for testing flows)

  **Inbox Operations:**
  - **List** - List all inboxes
  - **Get** - Get a specific inbox by ID
  - **Create** - Create a new inbox

  **Webhook Operations:**
  - **List** - List all webhooks
  - **Get** - Get a specific webhook by ID
  - **Create** - Create a new webhook (specify URL and events)
  - **Update** - Update a webhook (URL, active status)
  - **Delete** - Delete a webhook

  **Domain Operations:**
  - **List** - List all domains
  - **Verify** - Trigger domain verification

  **Utility Operations:**
  - **Parse EML** - Parse raw EML content into structured data
  - **Verify Webhook** - Verify a webhook signature

  ### Mailhooks Trigger

  A webhook trigger that starts the workflow when a new email is received. When the workflow is activated, this node automatically creates a webhook in Mailhooks pointing at n8n's webhook URL. When the workflow is deactivated, the webhook is automatically removed.

  Features:
  - Automatically registers a Mailhooks webhook on workflow activation
  - Automatically removes the webhook on workflow deactivation
  - Optional inbox filter to restrict trigger to a specific inbox
  - Optional signature verification for security
  - Returns full email data including headers, body, attachments, and authentication results (SPF, DKIM, DMARC)

  ### Mailhooks Polling Trigger

  A polling trigger that checks for new emails at regular intervals. Useful when webhooks are not available or as a fallback.

  Features:
  - Configurable polling interval (set in n8n workflow settings)
  - Filter by sender, recipient, or subject
  - Only processes emails received after workflow activation

  ## Credentials

  To use the Mailhooks nodes, you need to configure credentials:

  1. Sign up at [mailhooks.dev](https://mailhooks.dev)
  2. Go to your dashboard and copy your API key
  3. In n8n, create new **Mailhooks API** credentials
  4. Enter your API key

  | Field | Description |
  |-------|-------------|
  | API Key | Your Mailhooks API key from the dashboard |
  | Base URL | The API base URL (default: `https://mailhooks.dev/api`) |

  ## Usage

  ### Receiving emails via webhook

  1. Add a **Mailhooks Trigger** node to your workflow
  2. Configure your Mailhooks API credentials
  3. (Optional) Select a specific inbox to filter by
  4. (Optional) Add a webhook secret for signature verification
  5. Activate the workflow — the webhook is created automatically

  ### Polling for new emails

  1. Add a **Mailhooks Polling Trigger** node to your workflow
  2. Configure the polling interval in the workflow settings
  3. Optionally add filters for sender, recipient, or subject
  4. Activate the workflow

  ### Working with emails

  Use the **Mailhooks** node to:
  - List and search emails
  - Get email content and attachments
  - Delete emails
  - Mark emails as read/unread
  - Wait for specific emails (great for automated testing)

  ### Managing inboxes

  Use the **Mailhooks** node with the **Inbox** resource to:
  - List all inboxes
  - Get inbox details
  - Create new inboxes

  ### Managing webhooks

  Use the **Mailhooks** node with the **Webhook** resource to:
  - List all webhooks
  - Get webhook details
  - Create, update, or delete webhooks

  ### Managing domains

  Use the **Mailhooks** node with the **Domain** resource to:
  - List all domains
  - Trigger domain verification

  ### Example: Process incoming emails

  ```
  [Mailhooks Trigger] → [IF] → [Slack]
                           ↓
                      [Google Sheets]
  ```

  1. Trigger on new email (webhook auto-registered)
  2. Check if subject contains "urgent"
  3. Send to Slack if urgent, otherwise log to Google Sheets

  ## Resources

  - [Mailhooks Documentation](https://mailhooks.dev/docs)
  - [Mailhooks SDK](https://www.npmjs.com/package/@mailhooks/sdk)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [GitHub Repository](https://github.com/Mailhooks/integrations)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Mailhooks Polling Trigger node monitors for new emails at configurable intervals without requiring a webhook, serving as a fallback or alternative to webhook-based triggers.","capabilities":["Polls for new emails at configurable intervals","Filters emails by sender, recipient, or subject","Processes only emails received after workflow activation","Returns full email data including headers, body, attachments, and authentication results (SPF, DKIM, DMARC)"],"authentication":"API key required (Mailhooks API key from dashboard)","commonUseCases":["Fallback trigger when webhooks are unavailable","Scheduled email monitoring workflows","Email-based automation without webhook setup"],"limitations":["Requires polling interval configuration in workflow settings","Only processes emails received after workflow activation","No automatic webhook registration/removal like the webhook trigger node"],"relatedNodes":["Mailhooks Trigger","Mailhooks","Mailhooks API Credentials"]}


node_type: n8n-nodes-pingram.pingram
package_name: n8n-nodes-pingram
display_name: Pingram
description: Send SMS and Email notifications via Pingram
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: _sahand
author_github_url: https://github.com/pingram-io/
npm_package_name: n8n-nodes-pingram
npm_version: 0.2.6
community_fetched_at: 2026-07-14T14:40:34.204Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sms",
      "options": [
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "SMS",
          "value": "sms"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a message",
          "description": "Send a message"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms",
            "email"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send a message",
      "description": "Send a message",
      "resource": "sms"
    }
  ]

npm_readme:
  # n8n-nodes-pingram

  This is an n8n community node for [Pingram](https://pingram.io) - a notification infrastructure service that lets you send SMS and Email notifications.

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

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

  ## Installation

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

  ## Operations

  ### SMS

  - **Send**: Send an SMS message to a phone number

  ### Email

  - **Send**: Send an email to an email address

  ## Credentials

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

  1. Sign up at [Pingram](https://pingram.io)
  2. Navigate to **Environments** in your dashboard
  3. Copy your API key (starts with `pingram_sk_...`)
  4. Select your region (US, Canada, or EU)

  ### Supported Regions

  | Region       | API Endpoint                |
  | ------------ | --------------------------- |
  | US (Default) | `https://api.pingram.io`    |
  | Canada       | `https://api.ca.pingram.io` |
  | EU           | `https://api.eu.pingram.io` |

  ## Usage

  ### Send SMS

  1. Add the **Pingram** node to your workflow
  2. Select **SMS** as the resource
  3. Select **Send** as the operation
  4. Enter the required fields:
     - **Phone Number**: The recipient's phone number in E.164 format (e.g., `+15005550006`)
     - **Message**: The SMS content

  Optional:

  - **Type**: Notification type ID for categorizing the send (defaults to `n8n` when empty)

  Example request body sent to Pingram API:

  ```json
  {
    "type": "n8n",
    "to": {
      "number": "+15005550006"
    },
    "sms": {
      "message": "Hello from n8n!"
    }
  }
  ```

  ### Send Email

  1. Add the **Pingram** node to your workflow
  2. Select **Email** as the resource
  3. Select **Send** as the operation
  4. Enter the required fields:
     - **Email Address**: The recipient's email address
     - **Subject**: Email subject line
     - **HTML Body**: HTML content of the email

  Optional:

  - **Type**: Notification type ID for categorizing the send (defaults to `n8n` when empty)

  Optional fields (in Additional Fields):

  - **Sender Name**: Display name of the sender
  - **Sender Email**: Sender email address
  - **Preview Text**: Preview text shown in inbox
  - **Notification Type**: Same as **Type** when the main field is empty (ID for categorizing notifications)

  Example request body sent to Pingram API:

  ```json
  {
    "type": "n8n",
    "to": {
      "email": "user@example.com"
    },
    "email": {
      "subject": "Welcome!",
      "html": "<h1>Hello, World!</h1>",
      "senderName": "My App",
      "senderEmail": "noreply@example.com"
    }
  }
  ```

  ## Resources

  - [Pingram Documentation](https://pingram.io/docs)
  - [Pingram API Reference](https://pingram.io/docs/reference/node)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node for sending SMS and email notifications via the Pingram notification infrastructure service.","capabilities":["Send SMS messages to phone numbers in E.164 format","Send HTML emails with custom subject lines, sender details, and preview text","Categorize notifications using custom Type IDs","Support for US, Canada, and EU regions"],"authentication":"API key required (Pingram API key starting with pingram_sk_)","commonUseCases":["Automated SMS alerts and notifications","Transactional email sending","User welcome or confirmation emails","Multi-region notification delivery"],"limitations":["Community node (not official n8n node)","Requires separate Pingram account and API key setup","Region selection must be configured in credentials (US, Canada, EU)"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


node_type: n8n-nodes-sea-post-purchase-survey.agSurveyTrigger
package_name: n8n-nodes-sea-post-purchase-survey
display_name: SEA Post Purchase Survey Trigger
description: Starts the workflow when a survey response is created
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: seasurvey
author_github_url: https://github.com/nguyenvanlinh1902/
npm_package_name: n8n-nodes-sea-post-purchase-survey
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:34.205Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-sea-post-purchase-survey

  This is an n8n community node for the [SEA Post Purchase Survey](https://apps.shopify.com/) Shopify app. It lets you trigger n8n workflows when shoppers submit a survey or quiz response, so you can sync answers to your CRM, send follow-up emails, segment customers, or fan out to any other downstream system.

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

  [Installation](#installation)
  [Operations](#operations)
  [Credentials](#credentials)
  [Usage](#usage)
  [Webhook payload](#webhook-payload)
  [Resources](#resources)

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation. The package name on npm is `n8n-nodes-sea-post-purchase-survey`.

  In a self-hosted n8n instance:

  1. Open **Settings → Community Nodes**.
  2. Select **Install**.
  3. Enter `n8n-nodes-sea-post-purchase-survey` and confirm.

  The node will appear as **SEA Post Purchase Survey Trigger** in the trigger node panel.

  ## Operations

  This package provides one trigger node:

  ### SEA Post Purchase Survey Trigger

  Starts a workflow when a configured event fires in your survey app.

  | Event | Value | Fires when |
  |-------|-------|------------|
  | Response Created | `response.created` | A shopper submits a survey or quiz response |

  Webhook lifecycle is handled automatically — n8n calls the app's webhook API to register, verify, and remove the subscription as the workflow is activated, tested, or deleted.

  ## Credentials

  The trigger requires a **SEA Post Purchase Survey API** credential.

  1. Open the SEA Post Purchase Survey app in your Shopify admin.
  2. Navigate to **Integrations → n8n**.
  3. Click **Generate API key** and copy the key.
  4. In n8n, create a new **SEA Post Purchase Survey API** credential and paste the key into the **API Key** field.

  The credential is sent on every request as the `x-api-key` header. Test the credential with the **Test** button — n8n calls `GET /n8n/shop/status` to verify it.

  ## Usage

  1. Add the **SEA Post Purchase Survey Trigger** node to a workflow.
  2. Select your **SEA Post Purchase Survey API** credential.
  3. Choose the **Event** to listen for (currently `response.created`).
  4. Activate the workflow. n8n registers a webhook subscription with the survey app.

  Each time a response is submitted, the trigger emits one item containing the response payload. Connect downstream nodes (HTTP Request, Slack, Google Sheets, your CRM, etc.) to do whatever you need with the data.

  When the workflow is deactivated or deleted, n8n removes the subscription automatically.

  ## Webhook payload

  The trigger emits the raw event body delivered by the app. A `response.created` event looks roughly like this:

  ```json
  {
    "event": "response.created",
    "shopDomain": "example.myshopify.com",
    "responseId": "abc123",
    "surveyId": "survey_123",
    "surveyTitle": "Post-Purchase Survey",
    "submittedAt": "2026-05-04T10:00:00.000Z",
    "customer": {
      "id": "cust_456",
      "email": "shopper@example.com"
    },
    "order": {
      "id": "order_789",
      "name": "#1001"
    },
    "answers": [
      {
        "questionId": "q1",
        "questionTitle": "How did you hear about us?",
        "type": "single_choice",
        "value": "Friend"
      }
    ]
  }
  ```

  Field availability depends on the survey configuration (e.g. `customer` and `order` are only present for post-purchase flows). Use n8n expressions like `{{$json.answers[0].value}}` to consume individual fields downstream.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [SEA Post Purchase Survey App on Shopify](https://apps.shopify.com/)
  - [Submit issues or feature requests](https://github.com/nguyenvanlinh1902/n8n-nodes-sea-post-purchase-survey/issues)

  ## License

  [MIT](LICENSE.md) © AVADA Commerce

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow when a shopper submits a response to a SEA Post Purchase Survey on Shopify.","capabilities":["Starts workflow on survey response creation","Emits raw event payload containing customer, order, and answer data","Automatically manages webhook subscriptions (register, verify, remove)","Supports downstream integrations like CRM, email, Slack, or Google Sheets"],"authentication":"API Key required (via 'SEA Post Purchase Survey API' credential)","commonUseCases":["Sync survey responses to CRM","Send follow-up emails based on answers","Segment customers by survey responses","Fan out data to multiple downstream systems"],"limitations":["Only supports the 'response.created' event type","Field availability depends on survey configuration (e.g., customer/order fields only in post-purchase flows)","Community node (not official n8n package)"],"relatedNodes":["HTTP Request","Slack","Google Sheets","CRM Connector","Email"]}


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

updated_at: 2026-07-14 14:40:34
author_name: marc-ago
author_github_url: https://github.com/StartupFlow/n8n-nodes-bloomflow.git
npm_package_name: @bloomflow/n8n-nodes-bloomflow
npm_version: 1.1.4
community_fetched_at: 2026-07-14T14:40:34.206Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "item",
      "options": [
        {
          "name": "Item",
          "value": "item"
        },
        {
          "name": "Reference Data",
          "value": "referenceData"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an item",
          "routing": {
            "request": {
              "url": "/api/public/items",
              "method": "POST"
            }
          },
          "description": "Create a new item or update an existing one (soft upsert)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an item",
          "routing": {
            "request": {
              "url": "=/api/public/items/{{$parameter.itemId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single item"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List items",
          "routing": {
            "request": {
              "url": "/api/public/items",
              "method": "GET"
            }
          },
          "description": "Get a list of items"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an item",
          "routing": {
            "request": {
              "url": "=/api/public/items/{{$parameter.itemId}}",
              "method": "PUT"
            }
          },
          "description": "Replace all fields of an existing item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "item"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get reference data",
          "routing": {
            "request": {
              "url": "/api/public/items/reference_data",
              "method": "GET"
            }
          },
          "description": "Get all reference data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "referenceData"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an item",
      "routing": {
        "request": {
          "url": "/api/public/items",
          "method": "POST"
        }
      },
      "description": "Create a new item or update an existing one (soft upsert)",
      "resource": "item"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an item",
      "routing": {
        "request": {
          "url": "=/api/public/items/{{$parameter.itemId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single item",
      "resource": "item"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List items",
      "routing": {
        "request": {
          "url": "/api/public/items",
          "method": "GET"
        }
      },
      "description": "Get a list of items",
      "resource": "item"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an item",
      "routing": {
        "request": {
          "url": "=/api/public/items/{{$parameter.itemId}}",
          "method": "PUT"
        }
      },
      "description": "Replace all fields of an existing item",
      "resource": "item"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get reference data",
      "routing": {
        "request": {
          "url": "/api/public/items/reference_data",
          "method": "GET"
        }
      },
      "description": "Get all reference data",
      "resource": "referenceData"
    }
  ]

npm_readme:
  # n8n-nodes-bloomflow

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

  Bloomflow is a deal-flow and portfolio management platform that helps organisations discover, track, and manage companies, startups, and other items through customisable typologies.

  [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

  ### Item

  | Operation | Description |
  |-----------|-------------|
  | **Create** | Create a new item (company, startup, project, etc.) under a typology. Supports optional AI enrichment and two body input modes (individual fields or raw JSON). Uses soft upsert: if an item with the same name or website already exists, only empty fields are filled in. |
  | **Get** | Retrieve a single item by ID, by URL, or by selecting from a list. |
  | **List** | List all items under a typology, with optional filters: search term, labels, tags, sources, date range, sort, and pagination. |
  | **Update** | Fully replace an item's fields (not a patch — all required fields must be provided). |

  ### Reference Data

  | Operation | Description |
  |-----------|-------------|
  | **Get** | Retrieve all reference data for the Bloomflow instance, including available typologies. |

  ## Credentials

  The Bloomflow Public API uses an API key passed as the `x-bflow-api-key` header. API keys are not self-service — they are issued by Bloomflow on request.

  1. **Request an API key** by emailing [support@bloomflow.com](mailto:support@bloomflow.com) from the email associated with your Bloomflow account. See the [official Getting Started guide](https://docs.bloomflow.com/docs/gettingstarted) for the canonical instructions.
  2. Once you have received your key, in n8n create a new **Bloomflow API** credential and fill in:
     - **Base URL** — the host of your Bloomflow instance, in the form `https://api.<your-instance>.bloomflow.com` (per the [Bloomflow API docs](https://docs.bloomflow.com/docs/gettingstarted)). The node appends `/api/public/...` automatically.
     - **API Key** — the key provided by Bloomflow support (sent as `x-bflow-api-key`)

  The credential is verified by calling `GET /api/public/items/reference_data` on your instance — a key-guarded endpoint, so a successful test confirms the API key works for real operations.

  ## Compatibility

  This node was built against the Bloomflow public REST API (`/api/public/`). No minimum n8n version beyond standard community node support is required.

  ## Usage

  ### Typologies
  Every Item operation requires a **Typology** — a short string ID (e.g. `startup`, `portfolio_company`) that categorises the item. You can select it from a list (fetched live from your instance) or enter the ID manually.

  ### Create — soft upsert behaviour
  When creating an item, if an item with the same `name` or `website` already exists, only fields that are currently empty will be updated. Existing values are not overwritten.

  ### Body Input Mode (Create & Update)
  Both Create and Update support two ways to provide body fields:
  - **Individual Fields** — fill in each field separately using the UI
  - **Raw JSON** — provide the full body as a JSON object (the `name` and `typology` fields are always merged in automatically)

  ### Get — item lookup modes
  When getting a single item you can identify it in three ways:
  - **Select from list** — search by name within a typology
  - **By ID** — enter the 24-character MongoDB ObjectID directly
  - **By URL** — paste a Bloomflow item URL; the ID is extracted automatically

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Bloomflow website](https://www.bloomflow.com/)
  * [Bloomflow Public API documentation](https://docs.bloomflow.com/docs/api/public-api/)
  * [Source code on GitHub](https://github.com/startupflow/n8n-nodes-bloomflow)

  ## Version history

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Bloomflow API to manage deal-flow and portfolio data, including creating, retrieving, listing, and updating items under custom typologies.","capabilities":["Create new items (companies, startups, projects) with optional AI enrichment","Soft upsert behavior for existing items (only updates empty fields)","Retrieve single items by ID, URL, or list selection","List all items with filters (search, labels, tags, sources, date range, pagination)","Fully replace item fields via Update operation","Retrieve available typologies and reference data","Support for individual field input or raw JSON body input","Automatic merging of name and typology fields in Create/Update operations"],"authentication":"API key required (sent via x-bflow-api-key header; must be requested via email to support@bloomflow.com)","commonUseCases":["Automating startup portfolio management","Tracking deal flow and company data","Enriching item data with Bloomflow's AI capabilities","Syncing external data sources to Bloomflow typologies"],"limitations":["API keys are not self-service and must be requested via email","Update operation requires all required fields to be provided (no patching)","Soft upsert only updates empty fields; existing values are preserved","Typology selection is required for all Item operations"],"relatedNodes":["HTTP Request","Code","JSON"]}


