# nodes

node_type: n8n-nodes-keplars.keplars
package_name: n8n-nodes-keplars
display_name: Keplars
description: Send transactional emails using Keplars priority-queue API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: debojyoti452
author_github_url: https://github.com/KeplarsHQ/
npm_package_name: n8n-nodes-keplars
npm_version: 2.6.1
community_fetched_at: 2026-07-14T14:40:34.379Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendInstant",
      "options": [
        {
          "name": "Send Async Email",
          "value": "sendAsync",
          "action": "Send an async email",
          "description": "Send an async email (0-5 minutes)"
        },
        {
          "name": "Send Email",
          "value": "sendInstant",
          "action": "Send an instant priority email",
          "description": "Send an instant priority email (0-5 seconds)"
        },
        {
          "name": "Send High Priority Email",
          "value": "sendHigh",
          "action": "Send a high priority email",
          "description": "Send a high priority email (0-30 seconds)"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Async Email",
      "value": "sendAsync",
      "action": "Send an async email",
      "description": "Send an async email (0-5 minutes)"
    },
    {
      "name": "Send Email",
      "value": "sendInstant",
      "action": "Send an instant priority email",
      "description": "Send an instant priority email (0-5 seconds)"
    },
    {
      "name": "Send High Priority Email",
      "value": "sendHigh",
      "action": "Send a high priority email",
      "description": "Send a high priority email (0-30 seconds)"
    }
  ]

npm_readme:
  # n8n-nodes-keplars

  [Keplars](https://keplars.com) node for [n8n](https://n8n.io). Send transactional emails through Keplars' priority-queue API directly from your n8n workflows.

  ## Install

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

  ```
  n8n-nodes-keplars
  ```

  ## Operations

  | Operation | Priority | Delivery |
  |---|---|---|
  | Send Email | Instant | 0-5 seconds |
  | Send High Priority Email | High | 0-30 seconds |
  | Send Async Email | Async | 0-5 minutes |

  ## Credentials

  1. Go to **Credentials** in n8n
  2. Add new credential: **Keplars API**
  3. Enter your API key from [dash.keplars.com](https://dash.keplars.com)

  ## Fields

  | Field | Required | Description |
  |---|---|---|
  | To | Yes | Recipient email address |
  | From | Yes | Sender address (must be verified in Keplars) |
  | Sender Name | No | Sender display name |
  | Subject | Yes | Email subject line |
  | Body | No | HTML or plain text content |
  | Template ID | No | Keplars template ID |
  | Template Parameters | No | Key-value variables for templates |

  ## Development

  ```bash
  npm install
  npm run build      # compile TypeScript
  npm run dev        # watch mode with n8n hot reload
  npm run lint       # check code quality
  npm run lint:fix   # auto-fix lint issues
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Sends transactional emails from n8n workflows using Keplars' priority-queue API. It supports instant, high-priority, and async email delivery modes.","capabilities":["Send Email (instant priority, 0-5 seconds delivery)","Send High Priority Email (high priority, 0-30 seconds delivery)","Send Async Email (async priority, 0-5 minutes delivery)","Send email with recipient, sender, sender name, subject, and body","Send emails using a Keplars template ID","Pass template parameters as key-value variables"],"authentication":"Keplars API key required via the 'Keplars API' credential in n8n","commonUseCases":["Sending transactional emails from automation workflows","Triggering immediate or prioritized email delivery based on workflow events","Sending templated emails with dynamic variables"],"limitations":["Sender address must be verified in Keplars","Body is optional and may be HTML or plain text, but the README does not mention additional formatting or attachment support"],"relatedNodes":[]}


node_type: @alephantai/n8n-nodes-alephant.alephant
package_name: @alephantai/n8n-nodes-alephant
display_name: Alephant
description: Route AI requests through Alephant AI Gateway and query Alephant analytics from one action node.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alephantway
author_github_url: https://github.com/AlephantAI/alephant-n8n.git
npm_package_name: @alephantai/n8n-nodes-alephant
npm_version: 0.1.13
community_fetched_at: 2026-07-14T14:40:34.380Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "aiGateway",
      "options": [
        {
          "name": "AI Gateway",
          "value": "aiGateway"
        },
        {
          "name": "Analytics",
          "value": "analytics"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "chatCompletion",
      "options": [
        {
          "name": "Chat Completion",
          "value": "chatCompletion"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiGateway"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "usageSummary",
      "options": [
        {
          "name": "Budget Status",
          "value": "budgetStatus"
        },
        {
          "name": "Cost by Model",
          "value": "costByModel"
        },
        {
          "name": "Daily Costs",
          "value": "dailyCosts"
        },
        {
          "name": "Recent Requests",
          "value": "recentRequests"
        },
        {
          "name": "Request Log Detail",
          "value": "requestLogDetail"
        },
        {
          "name": "Scope",
          "value": "scope"
        },
        {
          "name": "Usage Summary",
          "value": "usageSummary"
        }
      ],
      "description": "Choose which Alephant analytics operation to run. In AI tool mode, let the model select this from the user prompt.",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analytics"
          ],
          "parameterMode": [
            "fixed"
          ]
        }
      }
    }
  ]

operations:
  [
    {
      "name": "Chat Completion",
      "value": "chatCompletion",
      "resource": "aiGateway"
    },
    {
      "name": "Budget Status",
      "value": "budgetStatus",
      "resource": "analytics"
    },
    {
      "name": "Cost by Model",
      "value": "costByModel",
      "resource": "analytics"
    },
    {
      "name": "Daily Costs",
      "value": "dailyCosts",
      "resource": "analytics"
    },
    {
      "name": "Recent Requests",
      "value": "recentRequests",
      "resource": "analytics"
    },
    {
      "name": "Request Log Detail",
      "value": "requestLogDetail",
      "resource": "analytics"
    },
    {
      "name": "Scope",
      "value": "scope",
      "resource": "analytics"
    },
    {
      "name": "Usage Summary",
      "value": "usageSummary",
      "resource": "analytics"
    }
  ]

npm_readme:
  # @alephantai/n8n-nodes-alephant

  n8n community node for Alephant AI Gateway, cost control, and analytics.

  ## Node

  ### Alephant

  Alephant exposes Alephant AI Gateway and analytics through one n8n action node, following n8n's resource and operation pattern.

  ## Resources

  ### AI Gateway

  Route AI requests through Alephant AI Gateway to track token usage, enforce budget limits, prevent runaway agent spend, and attribute AI costs by key, team, model, provider, or session.

  Supported operation:

  - Chat Completion

  ### Analytics

  Query Alephant AI Analytics for AI usage, cost, latency, model/provider performance, agent sessions, and request-level traces across your organization.

  Supported operations:

  - Scope
  - Budget Status
  - Usage Summary
  - Daily Costs
  - Cost by Model
  - Recent Requests
  - Request Log Detail

  ## AI Agent Tool Usage

  The Alephant node is marked as usable as an n8n AI Agent tool. In an AI Agent workflow, use the generated `Alephant Tool` and describe when the agent should call Alephant.

  Example tool description:

  ```text
  Use Alephant Analytics to answer questions about AI usage, cost, budget status, recent requests, model cost breakdowns, daily cost trends, and request log details. Choose the Analytics resource and the matching operation and period from the user's request.
  ```

  Keep `Resource`, `Operation`, and `Period` as normal n8n parameters. The separate Alephant Analytics AI node pattern is not used by this package because n8n Cloud verification expects one Alephant action node with API surfaces exposed as resources.

  For dynamic AI-filled analytics parameters, set the Analytics resource `Parameter Mode` to `AI Dynamic`. The node will expose AI-filled fields backed by `$fromAI()` expressions:

  - `AI Operation`: returns one of `scope`, `budgetStatus`, `usageSummary`, `dailyCosts`, `costByModel`, `recentRequests`, or `requestLogDetail`
  - `AI Period`: returns one of `24h`, `7d`, `30d`, or `90d`

  In this mode, the Tool Description tells the agent when to use Alephant, while the `$fromAI()` fields provide the actual operation and period values at tool-call time.

  ## Credentials

  ### Alephant Virtual Key

  Required fields:

  - `Virtual Key`

  Optional fields:

  - `Gateway Base URL`

  Leave `Gateway Base URL` empty for production. The production default is `https://ai.alephant.io/v1`.

  The same credential is used by both the AI Gateway and Analytics resources.

  ## Production Base URL Overrides

  Base URL fields are optional and should usually be left empty. Set them only when you need to target a non-production Alephant environment or a dedicated deployment.

  Production defaults:

  - Gateway: `https://ai.alephant.io/v1`
  - SaaS: `https://alephant.io`
  - Analytics: `https://analytics.alephant.io`

  ## Development

  ```bash
  npm install
  npm test
  npm run lint
  npm run build
  npm run dev
  ```

ai_documentation_summary:
  {"purpose":"Routes AI requests through Alephant AI Gateway for cost control and tracking, and provides access to Alephant analytics from a single n8n action node. It supports both AI request execution and organization-wide analytics queries.","capabilities":["Chat Completion through Alephant AI Gateway","Track token usage and attribute AI costs by key, team, model, provider, or session","Enforce budget limits and prevent runaway agent spend","Query analytics scope, budget status, usage summary, daily costs, cost by model, recent requests, and request log details","Use as an n8n AI Agent tool with dynamic AI-filled analytics parameters"],"authentication":"Alephant Virtual Key required; optional Gateway Base URL can be provided, but production defaults are used if omitted.","commonUseCases":["Sending chat completion requests through Alephant for usage tracking and spend control","Monitoring AI budget status and usage across an organization","Analyzing AI costs, latency, model/provider performance, and request traces","Using Alephant analytics as an AI agent tool to answer cost and usage questions"],"limitations":["Only one AI Gateway operation is supported: Chat Completion","Analytics parameter options are limited to the supported AI Operation values and periods (24h, 7d, 30d, 90d) when using AI Dynamic mode","Production base URLs are recommended to be left empty unless targeting a non-production or dedicated deployment"],"relatedNodes":[]}


node_type: @cryptoapis-io/n8n-nodes-cryptoapis.cryptoApis
package_name: @cryptoapis-io/n8n-nodes-cryptoapis
display_name: Crypto APIs
description: Interact with Crypto APIs — blockchain data, transactions, market data, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: crypto-apis
author_github_url: https://github.com/CryptoAPIs-io/cryptoapis-n8n-nodes.git
npm_package_name: @cryptoapis-io/n8n-nodes-cryptoapis
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:34.381Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "marketData",
      "options": [
        {
          "name": "Address History",
          "value": "addressHistory",
          "description": "Full transaction history for synced addresses"
        },
        {
          "name": "Address Latest",
          "value": "addressLatest",
          "description": "Current balances and recent transactions"
        },
        {
          "name": "Block Data",
          "value": "blockData",
          "description": "Block details and block-level transactions"
        },
        {
          "name": "Blockchain Event",
          "value": "blockchainEvents",
          "description": "Webhook subscriptions for on-chain events"
        },
        {
          "name": "Blockchain Fee",
          "value": "blockchainFees",
          "description": "Fee recommendations and gas estimation"
        },
        {
          "name": "Broadcast",
          "value": "broadcast",
          "description": "Broadcast signed transactions to the network"
        },
        {
          "name": "Contract",
          "value": "contracts",
          "description": "Token details by contract address"
        },
        {
          "name": "HD Wallet",
          "value": "hdWallet",
          "description": "HD wallet sync, balances, and transactions"
        },
        {
          "name": "Market Data",
          "value": "marketData",
          "description": "Asset prices and exchange rates"
        },
        {
          "name": "Prepare Transaction",
          "value": "prepareTransactions",
          "description": "Build unsigned EVM transactions"
        },
        {
          "name": "Simulate",
          "value": "simulate",
          "description": "Dry-run Ethereum transactions"
        },
        {
          "name": "Transaction Data",
          "value": "transactionsData",
          "description": "Transaction details, internals, and logs"
        },
        {
          "name": "Utility",
          "value": "utils",
          "description": "Address validation, decoding, and derivation"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAssetDetailsById",
      "options": [
        {
          "name": "Get Asset Details by ID",
          "value": "getAssetDetailsById",
          "action": "Get asset price and details using its ID",
          "description": "Get detailed information about a specific asset by its CryptoAPIs asset ID"
        },
        {
          "name": "Get Asset Details by Symbol",
          "value": "getAssetDetailsBySymbol",
          "action": "Get asset price and details using symbols (e.g. BTC/USD)",
          "description": "Get detailed information about an asset by converting from one symbol to another"
        },
        {
          "name": "Get Exchange Rate by Asset Symbols",
          "value": "getExchangeRateBySymbols",
          "action": "Get exchange rate between two symbols (e.g. BTC to USD)",
          "description": "Get exchange rate between two asset symbols (e.g. BTC to USD)"
        },
        {
          "name": "Get Exchange Rate by Asset IDs",
          "value": "getExchangeRateByIds",
          "action": "Get exchange rate between two assets by their IDs",
          "description": "Get exchange rate between two assets using their CryptoAPIs IDs"
        },
        {
          "name": "List Supported Assets",
          "value": "listSupportedAssets",
          "action": "List all supported crypto and fiat assets",
          "description": "List all supported assets with metadata (crypto and fiat)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "marketData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBalance",
      "options": [
        {
          "name": "Get Balance",
          "value": "getBalance",
          "action": "Get current balance of an address",
          "description": "Get current balance of an address (all blockchain types)"
        },
        {
          "name": "Get Next Nonce",
          "value": "getNextNonce",
          "action": "Get next available nonce for an EVM address",
          "description": "Get next available nonce for an EVM address (EVM only)"
        },
        {
          "name": "List Transactions",
          "value": "listTransactions",
          "action": "List recent transactions for an address",
          "description": "List recent transactions for an address — last 14 days (all blockchain types)"
        },
        {
          "name": "List Token Transfers",
          "value": "listTokenTransfers",
          "action": "List recent token transfers for an address",
          "description": "List recent token transfers for an EVM address (EVM only)"
        },
        {
          "name": "List Internal Transactions",
          "value": "listInternalTransactions",
          "action": "List recent internal transactions for an address",
          "description": "List recent internal transactions for an EVM address (EVM only)"
        },
        {
          "name": "List Tokens",
          "value": "listTokens",
          "action": "List tokens held by a Solana address",
          "description": "List tokens held by a Solana address (Solana only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "addressLatest"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getBlockByHeight",
      "options": [
        {
          "name": "Get Block by Height",
          "value": "getBlockByHeight",
          "action": "Get block details using its height number",
          "description": "Get block details by block height"
        },
        {
          "name": "Get Block by Hash",
          "value": "getBlockByHash",
          "action": "Get block details using its hash",
          "description": "Get block details by block hash"
        },
        {
          "name": "List Transactions by Block Hash",
          "value": "listTransactionsByBlockHash",
          "action": "List all transactions in a block by hash",
          "description": "List transactions within a specific block by hash"
        },
        {
          "name": "List Transactions by Block Height",
          "value": "listTransactionsByBlockHeight",
          "action": "List all transactions in a block by height",
          "description": "List transactions within a specific block by height"
        },
        {
          "name": "Get Last Mined Block",
          "value": "getLastMinedBlock",
          "action": "Get the most recently mined block",
          "description": "Get the latest mined block"
        },
        {
          "name": "List Latest Mined Blocks",
          "value": "listLatestMinedBlocks",
          "action": "List the most recently mined blocks",
          "description": "List the most recently mined blocks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blockData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getFeeRecommendations",
      "options": [
        {
          "name": "Get Fee Recommendations",
          "value": "getFeeRecommendations",
          "action": "Get mempool fee recommendations",
          "description": "Get mempool fee recommendations (all blockchain types)"
        },
        {
          "name": "Get EIP-1559 Fee Recommendations",
          "value": "getEip1559FeeRecommendations",
          "action": "Get EIP-1559 fee recommendations (base + priority fee)",
          "description": "Get EIP-1559 fee recommendations — base fee + priority fee (EVM only)"
        },
        {
          "name": "Estimate Native Coin Transfer Gas",
          "value": "estimateNativeCoinTransferGas",
          "action": "Estimate gas for a native coin transfer",
          "description": "Estimate gas for a native coin transfer (EVM only)"
        },
        {
          "name": "Estimate Token Transfer Gas",
          "value": "estimateTokenTransferGas",
          "action": "Estimate gas for a token transfer (ERC-20/ERC-721)",
          "description": "Estimate gas for a token transfer — ERC-20/ERC-721 (EVM only)"
        },
        {
          "name": "Estimate Contract Interaction Gas",
          "value": "estimateContractInteractionGas",
          "action": "Estimate gas for a contract interaction",
          "description": "Estimate gas for a contract interaction using calldata (EVM only)"
        },
        {
          "name": "Estimate Transaction Smart Fee",
          "value": "estimateTransactionSmartFee",
          "action": "Estimate smart fee for a UTXO transaction",
          "description": "Estimate smart fee for a UTXO transaction with confirmation target (UTXO only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blockchainFees"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTransactionDetails",
      "options": [
        {
          "name": "Get Transaction Details",
          "value": "getTransactionDetails",
          "action": "Get details of a specific transaction",
          "description": "Get detailed information about a specific transaction (all blockchain types)"
        },
        {
          "name": "List Internal Transactions",
          "value": "listInternalTransactions",
          "action": "List internal transactions of a transaction",
          "description": "List internal transactions of an EVM transaction (EVM only)"
        },
        {
          "name": "List Token Transfers",
          "value": "listTokenTransfers",
          "action": "List token transfers of a transaction",
          "description": "List token transfers of an EVM transaction (EVM only)"
        },
        {
          "name": "List Logs",
          "value": "listLogs",
          "action": "List event logs of a transaction",
          "description": "List event logs of an EVM transaction (EVM only)"
        },
        {
          "name": "Get Raw Transaction Data",
          "value": "getRawTransactionData",
          "action": "Get raw hex of a UTXO transaction",
          "description": "Get raw hex of a UTXO transaction (UTXO only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "transactionsData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "syncWallet",
      "options": [
        {
          "name": "Sync Wallet",
          "value": "syncWallet",
          "action": "Sync an xPub HD wallet for tracking",
          "description": "Sync an xPub/yPub/zPub HD wallet (Management)"
        },
        {
          "name": "List Wallets",
          "value": "listWallets",
          "action": "List all synced HD wallets",
          "description": "List synced HD wallets (Management)"
        },
        {
          "name": "Activate Wallet",
          "value": "activateWallet",
          "action": "Activate an HD wallet sync",
          "description": "Activate a previously deactivated wallet (Management)"
        },
        {
          "name": "Delete Wallet",
          "value": "deleteWallet",
          "action": "Delete an HD wallet sync",
          "description": "Delete a synced HD wallet (Management)"
        },
        {
          "name": "Get Sync Status",
          "value": "getSyncStatus",
          "action": "Get sync status of an HD wallet",
          "description": "Get the sync status of an HD wallet (Management)"
        },
        {
          "name": "Derive Receiving Address",
          "value": "deriveReceivingAddress",
          "action": "Derive a new receiving address from xPub",
          "description": "Derive a new receiving address from xPub (EVM/UTXO/XRP)"
        },
        {
          "name": "Get Details",
          "value": "getDetails",
          "action": "Get HD wallet details and balance",
          "description": "Get HD wallet details — balance, addresses count (EVM/UTXO/XRP)"
        },
        {
          "name": "List Addresses",
          "value": "listAddresses",
          "action": "List derived addresses of an HD wallet",
          "description": "List derived addresses (EVM/UTXO/XRP)"
        },
        {
          "name": "List Transactions",
          "value": "listTransactions",
          "action": "List transactions of an HD wallet",
          "description": "List wallet transactions (EVM/UTXO/XRP)"
        },
        {
          "name": "List Assets",
          "value": "listAssets",
          "action": "List assets held by an HD wallet",
          "description": "List assets held by the wallet (EVM/UTXO/XRP)"
        },
        {
          "name": "Prepare Transaction",
          "value": "prepareTransaction",
          "action": "Prepare an unsigned HD wallet transaction",
          "description": "Prepare an unsigned transaction from the HD wallet (EVM/UTXO)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "hdWallet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "syncAddress",
      "options": [
        {
          "name": "Sync Address",
          "value": "syncAddress",
          "action": "Sync address for history tracking",
          "description": "Sync an address for full history tracking (Management)"
        },
        {
          "name": "List Synced Addresses",
          "value": "listSyncedAddresses",
          "action": "List all synced addresses",
          "description": "List all synced addresses (Management)"
        },
        {
          "name": "Activate Address",
          "value": "activateAddress",
          "action": "Activate an address sync",
          "description": "Activate a previously deactivated address sync (Management)"
        },
        {
          "name": "Delete Address",
          "value": "deleteAddress",
          "action": "Delete an address sync",
          "description": "Delete an address sync (Management)"
        },
        {
          "name": "Get Statistics",
          "value": "getStatistics",
          "action": "Get address history statistics",
          "description": "Get address statistics (EVM: ETH/ETC, UTXO: BTC/BCH)"
        },
        {
          "name": "List Transactions",
          "value": "listTransactions",
          "action": "List full transaction history for an address",
          "description": "List full transaction history for an address (EVM/UTXO)"
        },
        {
          "name": "List Token Transfers",
          "value": "listTokenTransfers",
          "action": "List full token transfer history",
          "description": "List full token transfer history (EVM only)"
        },
        {
          "name": "List Internal Transactions",
          "value": "listInternalTransactions",
          "action": "List full internal transaction history",
          "description": "List full internal transaction history (EVM only)"
        },
        {
          "name": "List Tokens",
          "value": "listTokens",
          "action": "List all tokens held by an address",
          "description": "List all tokens held by address (EVM only)"
        },
        {
          "name": "List Unspent Outputs",
          "value": "listUnspentOutputs",
          "action": "List unspent transaction outputs (UTXOs)",
          "description": "List unspent transaction outputs — UTXOs (UTXO only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "addressHistory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "prepareNativeCoinTransfer",
      "options": [
        {
          "name": "Prepare Native Coin Transfer",
          "value": "prepareNativeCoinTransfer",
          "action": "Build an unsigned native coin transfer (ETH, BNB, etc.)",
          "description": "Build an unsigned native coin transfer transaction"
        },
        {
          "name": "Prepare Fungible Token Transfer",
          "value": "prepareFungibleTokenTransfer",
          "action": "Build an unsigned ERC-20 token transfer",
          "description": "Build an unsigned ERC-20 token transfer"
        },
        {
          "name": "Prepare NFT Transfer",
          "value": "prepareNftTransfer",
          "action": "Build an unsigned ERC-721 NFT transfer",
          "description": "Build an unsigned ERC-721 NFT transfer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prepareTransactions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "simulateTransaction",
      "options": [
        {
          "name": "Simulate Transaction",
          "value": "simulateTransaction",
          "action": "Dry-run an Ethereum transaction without broadcasting",
          "description": "Dry-run an Ethereum transaction to preview its outcome without broadcasting"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "simulate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "broadcastSignedTransaction",
      "options": [
        {
          "name": "Broadcast Signed Transaction",
          "value": "broadcastSignedTransaction",
          "action": "Broadcast a signed transaction to the network",
          "description": "Broadcast a signed transaction to the blockchain network"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "broadcast"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSubscriptions",
      "options": [
        {
          "name": "Create Subscription",
          "value": "createSubscription",
          "action": "Create a webhook subscription for on-chain events",
          "description": "Create a new blockchain event subscription (webhook)"
        },
        {
          "name": "List Subscriptions",
          "value": "listSubscriptions",
          "action": "List all webhook event subscriptions",
          "description": "List all event subscriptions for a blockchain/network"
        },
        {
          "name": "Get Subscription",
          "value": "getSubscription",
          "action": "Get details of a specific webhook subscription",
          "description": "Get details of a specific subscription"
        },
        {
          "name": "Delete Subscription",
          "value": "deleteSubscription",
          "action": "Delete a webhook event subscription",
          "description": "Delete a subscription"
        },
        {
          "name": "Activate Subscription",
          "value": "activateSubscription",
          "action": "Activate a deactivated webhook subscription",
          "description": "Activate a deactivated subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blockchainEvents"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTokenDetailsByContract",
      "options": [
        {
          "name": "Get Token Details by Contract",
          "value": "getTokenDetailsByContract",
          "action": "Get token name, symbol, and supply by contract address",
          "description": "Get token details (name, symbol, decimals, total supply) by contract address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contracts"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validateAddress",
      "options": [
        {
          "name": "Validate Address",
          "value": "validateAddress",
          "action": "Validate a blockchain address",
          "description": "Validate a blockchain address (EVM/UTXO/XRP)"
        },
        {
          "name": "Decode Raw Transaction",
          "value": "decodeRawTransaction",
          "action": "Decode a raw transaction hex",
          "description": "Decode a raw transaction hex (EVM/UTXO)"
        },
        {
          "name": "Derive Addresses",
          "value": "deriveAddresses",
          "action": "Derive addresses from an xPub key",
          "description": "Derive addresses from an extended public key (EVM/UTXO/XRP)"
        },
        {
          "name": "Convert Bitcoin Cash Address",
          "value": "convertBitcoinCashAddress",
          "action": "Convert between BCH legacy and CashAddr",
          "description": "Convert between legacy and CashAddr formats (UTXO — Bitcoin Cash only)"
        },
        {
          "name": "Decode X-Address",
          "value": "decodeXAddress",
          "action": "Decode an XRP X-Address to classic + tag",
          "description": "Decode an X-Address to classic address + tag (XRP only)"
        },
        {
          "name": "Encode X-Address",
          "value": "encodeXAddress",
          "action": "Encode an XRP classic address into X-Address",
          "description": "Encode a classic address + tag into an X-Address (XRP only)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "utils"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Asset Details by ID",
      "value": "getAssetDetailsById",
      "action": "Get asset price and details using its ID",
      "description": "Get detailed information about a specific asset by its CryptoAPIs asset ID",
      "resource": "marketData"
    },
    {
      "name": "Get Asset Details by Symbol",
      "value": "getAssetDetailsBySymbol",
      "action": "Get asset price and details using symbols (e.g. BTC/USD)",
      "description": "Get detailed information about an asset by converting from one symbol to another",
      "resource": "marketData"
    },
    {
      "name": "Get Exchange Rate by Asset Symbols",
      "value": "getExchangeRateBySymbols",
      "action": "Get exchange rate between two symbols (e.g. BTC to USD)",
      "description": "Get exchange rate between two asset symbols (e.g. BTC to USD)",
      "resource": "marketData"
    },
    {
      "name": "Get Exchange Rate by Asset IDs",
      "value": "getExchangeRateByIds",
      "action": "Get exchange rate between two assets by their IDs",
      "description": "Get exchange rate between two assets using their CryptoAPIs IDs",
      "resource": "marketData"
    },
    {
      "name": "List Supported Assets",
      "value": "listSupportedAssets",
      "action": "List all supported crypto and fiat assets",
      "description": "List all supported assets with metadata (crypto and fiat)",
      "resource": "marketData"
    },
    {
      "name": "Get Balance",
      "value": "getBalance",
      "action": "Get current balance of an address",
      "description": "Get current balance of an address (all blockchain types)",
      "resource": "addressLatest"
    },
    {
      "name": "Get Next Nonce",
      "value": "getNextNonce",
      "action": "Get next available nonce for an EVM address",
      "description": "Get next available nonce for an EVM address (EVM only)",
      "resource": "addressLatest"
    },
    {
      "name": "List Transactions",
      "value": "listTransactions",
      "action": "List recent transactions for an address",
      "description": "List recent transactions for an address — last 14 days (all blockchain types)",
      "resource": "addressLatest"
    },
    {
      "name": "List Token Transfers",
      "value": "listTokenTransfers",
      "action": "List recent token transfers for an address",
      "description": "List recent token transfers for an EVM address (EVM only)",
      "resource": "addressLatest"
    },
    {
      "name": "List Internal Transactions",
      "value": "listInternalTransactions",
      "action": "List recent internal transactions for an address",
      "description": "List recent internal transactions for an EVM address (EVM only)",
      "resource": "addressLatest"
    },
    {
      "name": "List Tokens",
      "value": "listTokens",
      "action": "List tokens held by a Solana address",
      "description": "List tokens held by a Solana address (Solana only)",
      "resource": "addressLatest"
    },
    {
      "name": "Get Block by Height",
      "value": "getBlockByHeight",
      "action": "Get block details using its height number",
      "description": "Get block details by block height",
      "resource": "blockData"
    },
    {
      "name": "Get Block by Hash",
      "value": "getBlockByHash",
      "action": "Get block details using its hash",
      "description": "Get block details by block hash",
      "resource": "blockData"
    },
    {
      "name": "List Transactions by Block Hash",
      "value": "listTransactionsByBlockHash",
      "action": "List all transactions in a block by hash",
      "description": "List transactions within a specific block by hash",
      "resource": "blockData"
    },
    {
      "name": "List Transactions by Block Height",
      "value": "listTransactionsByBlockHeight",
      "action": "List all transactions in a block by height",
      "description": "List transactions within a specific block by height",
      "resource": "blockData"
    },
    {
      "name": "Get Last Mined Block",
      "value": "getLastMinedBlock",
      "action": "Get the most recently mined block",
      "description": "Get the latest mined block",
      "resource": "blockData"
    },
    {
      "name": "List Latest Mined Blocks",
      "value": "listLatestMinedBlocks",
      "action": "List the most recently mined blocks",
      "description": "List the most recently mined blocks",
      "resource": "blockData"
    },
    {
      "name": "Get Fee Recommendations",
      "value": "getFeeRecommendations",
      "action": "Get mempool fee recommendations",
      "description": "Get mempool fee recommendations (all blockchain types)",
      "resource": "blockchainFees"
    },
    {
      "name": "Get EIP-1559 Fee Recommendations",
      "value": "getEip1559FeeRecommendations",
      "action": "Get EIP-1559 fee recommendations (base + priority fee)",
      "description": "Get EIP-1559 fee recommendations — base fee + priority fee (EVM only)",
      "resource": "blockchainFees"
    },
    {
      "name": "Estimate Native Coin Transfer Gas",
      "value": "estimateNativeCoinTransferGas",
      "action": "Estimate gas for a native coin transfer",
      "description": "Estimate gas for a native coin transfer (EVM only)",
      "resource": "blockchainFees"
    },
    {
      "name": "Estimate Token Transfer Gas",
      "value": "estimateTokenTransferGas",
      "action": "Estimate gas for a token transfer (ERC-20/ERC-721)",
      "description": "Estimate gas for a token transfer — ERC-20/ERC-721 (EVM only)",
      "resource": "blockchainFees"
    },
    {
      "name": "Estimate Contract Interaction Gas",
      "value": "estimateContractInteractionGas",
      "action": "Estimate gas for a contract interaction",
      "description": "Estimate gas for a contract interaction using calldata (EVM only)",
      "resource": "blockchainFees"
    },
    {
      "name": "Estimate Transaction Smart Fee",
      "value": "estimateTransactionSmartFee",
      "action": "Estimate smart fee for a UTXO transaction",
      "description": "Estimate smart fee for a UTXO transaction with confirmation target (UTXO only)",
      "resource": "blockchainFees"
    },
    {
      "name": "Get Transaction Details",
      "value": "getTransactionDetails",
      "action": "Get details of a specific transaction",
      "description": "Get detailed information about a specific transaction (all blockchain types)",
      "resource": "transactionsData"
    },
    {
      "name": "List Internal Transactions",
      "value": "listInternalTransactions",
      "action": "List internal transactions of a transaction",
      "description": "List internal transactions of an EVM transaction (EVM only)",
      "resource": "transactionsData"
    },
    {
      "name": "List Token Transfers",
      "value": "listTokenTransfers",
      "action": "List token transfers of a transaction",
      "description": "List token transfers of an EVM transaction (EVM only)",
      "resource": "transactionsData"
    },
    {
      "name": "List Logs",
      "value": "listLogs",
      "action": "List event logs of a transaction",
      "description": "List event logs of an EVM transaction (EVM only)",
      "resource": "transactionsData"
    },
    {
      "name": "Get Raw Transaction Data",
      "value": "getRawTransactionData",
      "action": "Get raw hex of a UTXO transaction",
      "description": "Get raw hex of a UTXO transaction (UTXO only)",
      "resource": "transactionsData"
    },
    {
      "name": "Sync Wallet",
      "value": "syncWallet",
      "action": "Sync an xPub HD wallet for tracking",
      "description": "Sync an xPub/yPub/zPub HD wallet (Management)",
      "resource": "hdWallet"
    },
    {
      "name": "List Wallets",
      "value": "listWallets",
      "action": "List all synced HD wallets",
      "description": "List synced HD wallets (Management)",
      "resource": "hdWallet"
    },
    {
      "name": "Activate Wallet",
      "value": "activateWallet",
      "action": "Activate an HD wallet sync",
      "description": "Activate a previously deactivated wallet (Management)",
      "resource": "hdWallet"
    },
    {
      "name": "Delete Wallet",
      "value": "deleteWallet",
      "action": "Delete an HD wallet sync",
      "description": "Delete a synced HD wallet (Management)",
      "resource": "hdWallet"
    },
    {
      "name": "Get Sync Status",
      "value": "getSyncStatus",
      "action": "Get sync status of an HD wallet",
      "description": "Get the sync status of an HD wallet (Management)",
      "resource": "hdWallet"
    },
    {
      "name": "Derive Receiving Address",
      "value": "deriveReceivingAddress",
      "action": "Derive a new receiving address from xPub",
      "description": "Derive a new receiving address from xPub (EVM/UTXO/XRP)",
      "resource": "hdWallet"
    },
    {
      "name": "Get Details",
      "value": "getDetails",
      "action": "Get HD wallet details and balance",
      "description": "Get HD wallet details — balance, addresses count (EVM/UTXO/XRP)",
      "resource": "hdWallet"
    },
    {
      "name": "List Addresses",
      "value": "listAddresses",
      "action": "List derived addresses of an HD wallet",
      "description": "List derived addresses (EVM/UTXO/XRP)",
      "resource": "hdWallet"
    },
    {
      "name": "List Transactions",
      "value": "listTransactions",
      "action": "List transactions of an HD wallet",
      "description": "List wallet transactions (EVM/UTXO/XRP)",
      "resource": "hdWallet"
    },
    {
      "name": "List Assets",
      "value": "listAssets",
      "action": "List assets held by an HD wallet",
      "description": "List assets held by the wallet (EVM/UTXO/XRP)",
      "resource": "hdWallet"
    },
    {
      "name": "Prepare Transaction",
      "value": "prepareTransaction",
      "action": "Prepare an unsigned HD wallet transaction",
      "description": "Prepare an unsigned transaction from the HD wallet (EVM/UTXO)",
      "resource": "hdWallet"
    },
    {
      "name": "Sync Address",
      "value": "syncAddress",
      "action": "Sync address for history tracking",
      "description": "Sync an address for full history tracking (Management)",
      "resource": "addressHistory"
    },
    {
      "name": "List Synced Addresses",
      "value": "listSyncedAddresses",
      "action": "List all synced addresses",
      "description": "List all synced addresses (Management)",
      "resource": "addressHistory"
    },
    {
      "name": "Activate Address",
      "value": "activateAddress",
      "action": "Activate an address sync",
      "description": "Activate a previously deactivated address sync (Management)",
      "resource": "addressHistory"
    },
    {
      "name": "Delete Address",
      "value": "deleteAddress",
      "action": "Delete an address sync",
      "description": "Delete an address sync (Management)",
      "resource": "addressHistory"
    },
    {
      "name": "Get Statistics",
      "value": "getStatistics",
      "action": "Get address history statistics",
      "description": "Get address statistics (EVM: ETH/ETC, UTXO: BTC/BCH)",
      "resource": "addressHistory"
    },
    {
      "name": "List Transactions",
      "value": "listTransactions",
      "action": "List full transaction history for an address",
      "description": "List full transaction history for an address (EVM/UTXO)",
      "resource": "addressHistory"
    },
    {
      "name": "List Token Transfers",
      "value": "listTokenTransfers",
      "action": "List full token transfer history",
      "description": "List full token transfer history (EVM only)",
      "resource": "addressHistory"
    },
    {
      "name": "List Internal Transactions",
      "value": "listInternalTransactions",
      "action": "List full internal transaction history",
      "description": "List full internal transaction history (EVM only)",
      "resource": "addressHistory"
    },
    {
      "name": "List Tokens",
      "value": "listTokens",
      "action": "List all tokens held by an address",
      "description": "List all tokens held by address (EVM only)",
      "resource": "addressHistory"
    },
    {
      "name": "List Unspent Outputs",
      "value": "listUnspentOutputs",
      "action": "List unspent transaction outputs (UTXOs)",
      "description": "List unspent transaction outputs — UTXOs (UTXO only)",
      "resource": "addressHistory"
    },
    {
      "name": "Prepare Native Coin Transfer",
      "value": "prepareNativeCoinTransfer",
      "action": "Build an unsigned native coin transfer (ETH, BNB, etc.)",
      "description": "Build an unsigned native coin transfer transaction",
      "resource": "prepareTransactions"
    },
    {
      "name": "Prepare Fungible Token Transfer",
      "value": "prepareFungibleTokenTransfer",
      "action": "Build an unsigned ERC-20 token transfer",
      "description": "Build an unsigned ERC-20 token transfer",
      "resource": "prepareTransactions"
    },
    {
      "name": "Prepare NFT Transfer",
      "value": "prepareNftTransfer",
      "action": "Build an unsigned ERC-721 NFT transfer",
      "description": "Build an unsigned ERC-721 NFT transfer",
      "resource": "prepareTransactions"
    },
    {
      "name": "Simulate Transaction",
      "value": "simulateTransaction",
      "action": "Dry-run an Ethereum transaction without broadcasting",
      "description": "Dry-run an Ethereum transaction to preview its outcome without broadcasting",
      "resource": "simulate"
    },
    {
      "name": "Broadcast Signed Transaction",
      "value": "broadcastSignedTransaction",
      "action": "Broadcast a signed transaction to the network",
      "description": "Broadcast a signed transaction to the blockchain network",
      "resource": "broadcast"
    },
    {
      "name": "Create Subscription",
      "value": "createSubscription",
      "action": "Create a webhook subscription for on-chain events",
      "description": "Create a new blockchain event subscription (webhook)",
      "resource": "blockchainEvents"
    },
    {
      "name": "List Subscriptions",
      "value": "listSubscriptions",
      "action": "List all webhook event subscriptions",
      "description": "List all event subscriptions for a blockchain/network",
      "resource": "blockchainEvents"
    },
    {
      "name": "Get Subscription",
      "value": "getSubscription",
      "action": "Get details of a specific webhook subscription",
      "description": "Get details of a specific subscription",
      "resource": "blockchainEvents"
    },
    {
      "name": "Delete Subscription",
      "value": "deleteSubscription",
      "action": "Delete a webhook event subscription",
      "description": "Delete a subscription",
      "resource": "blockchainEvents"
    },
    {
      "name": "Activate Subscription",
      "value": "activateSubscription",
      "action": "Activate a deactivated webhook subscription",
      "description": "Activate a deactivated subscription",
      "resource": "blockchainEvents"
    },
    {
      "name": "Get Token Details by Contract",
      "value": "getTokenDetailsByContract",
      "action": "Get token name, symbol, and supply by contract address",
      "description": "Get token details (name, symbol, decimals, total supply) by contract address",
      "resource": "contracts"
    },
    {
      "name": "Validate Address",
      "value": "validateAddress",
      "action": "Validate a blockchain address",
      "description": "Validate a blockchain address (EVM/UTXO/XRP)",
      "resource": "utils"
    },
    {
      "name": "Decode Raw Transaction",
      "value": "decodeRawTransaction",
      "action": "Decode a raw transaction hex",
      "description": "Decode a raw transaction hex (EVM/UTXO)",
      "resource": "utils"
    },
    {
      "name": "Derive Addresses",
      "value": "deriveAddresses",
      "action": "Derive addresses from an xPub key",
      "description": "Derive addresses from an extended public key (EVM/UTXO/XRP)",
      "resource": "utils"
    },
    {
      "name": "Convert Bitcoin Cash Address",
      "value": "convertBitcoinCashAddress",
      "action": "Convert between BCH legacy and CashAddr",
      "description": "Convert between legacy and CashAddr formats (UTXO — Bitcoin Cash only)",
      "resource": "utils"
    },
    {
      "name": "Decode X-Address",
      "value": "decodeXAddress",
      "action": "Decode an XRP X-Address to classic + tag",
      "description": "Decode an X-Address to classic address + tag (XRP only)",
      "resource": "utils"
    },
    {
      "name": "Encode X-Address",
      "value": "encodeXAddress",
      "action": "Encode an XRP classic address into X-Address",
      "description": "Encode a classic address + tag into an X-Address (XRP only)",
      "resource": "utils"
    }
  ]

npm_readme:
  # n8n-nodes-cryptoapis

  This is an [n8n](https://n8n.io/) community node for [Crypto APIs](https://cryptoapis.io/). It lets you use Crypto APIs blockchain services directly in your n8n workflows.

  Crypto APIs provides unified blockchain APIs for 15+ blockchains including Bitcoin, Ethereum, Polygon, Avalanche (C-Chain), XRP, Solana, and more.

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

  ## Installation

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

  ## Credentials

  You need a Crypto APIs API key to use this node. Get one at [app.cryptoapis.io](https://app.cryptoapis.io/).

  The credential supports an optional **API URL** field for users with custom API setups. The default is `https://rest.cryptoapis.io`.

  ## Resources & Operations

  ### Address Latest
  Query current balances and recent transactions (last 14 days) across EVM, UTXO, Solana, XRP, and Kaspa blockchains.

  ### Address History
  Full transaction history for synced addresses. Requires address sync first. Supports EVM and UTXO blockchains.

  ### Block Data
  Get block details by height or hash, list transactions within blocks, and retrieve latest mined blocks for EVM, UTXO, and XRP.

  ### Blockchain Fees
  Fee recommendations and gas estimation for EVM (including EIP-1559), UTXO smart fee estimation, and XRP fee recommendations.

  ### Transactions Data
  Transaction details, internal transactions, token transfers, and event logs across EVM, UTXO, Solana, XRP, and Kaspa.

  ### Market Data
  Asset details, exchange rates, and supported asset metadata (crypto and fiat).

  ### Contracts
  Token details by contract address for EVM (Ethereum, BSC, Ethereum Classic) and Solana.

  ### HD Wallet
  HD wallet management (sync, list, activate, delete), address derivation, balance queries, and transaction preparation for EVM, UTXO, and XRP.

  ### Prepare Transactions
  Build unsigned EVM transactions for native coin, ERC-20 token, and ERC-721 NFT transfers.

  ### Simulate
  Dry-run Ethereum transactions to preview outcomes without broadcasting.

  ### Broadcast
  Broadcast signed transactions to any supported blockchain network.

  ### Blockchain Events
  Create and manage webhook subscriptions for blockchain events (confirmed/unconfirmed transactions, new blocks, etc.).

  ### Utils
  Address validation, raw transaction decoding, address derivation from xPub, Bitcoin Cash address conversion, and XRP X-Address encode/decode.

  ## AI Agent Integration

  ### Using as an AI Tool (usableAsTool)

  The main **Crypto APIs** node has `usableAsTool: true`, so it can be used directly as a tool by n8n's AI Agent node — just connect it to an AI Agent and it will expose its operations as tool calls.

  ### MCP Client Tool

  You can also use n8n's built-in **MCP Client Tool** node to connect to the hosted Crypto APIs MCP server at `https://ai.cryptoapis.io/mcp` or a [self-hosted instance](https://github.com/CryptoAPIs-io/cryptoapis-mcp-hub). This gives AI agents access to 50+ blockchain tools via MCP.

  ## Supported Blockchains & Networks

  ### EVM

  | Blockchain | Mainnet | Testnet |
  |------------|---------|---------|
  | Ethereum | mainnet | sepolia |
  | Ethereum Classic | mainnet | mordor |
  | Binance Smart Chain | mainnet | testnet |
  | Polygon | mainnet | amoy |
  | Avalanche (C-Chain) | mainnet | fuji |
  | Tron | mainnet | nile |
  | Arbitrum | mainnet | sepolia |
  | Base | mainnet | sepolia |
  | Optimism | mainnet | sepolia |

  ### UTXO

  | Blockchain | Mainnet | Testnet |
  |------------|---------|---------|
  | Bitcoin | mainnet | testnet |
  | Bitcoin Cash | mainnet | testnet |
  | Litecoin | mainnet | testnet |
  | Dogecoin | mainnet | testnet |
  | Dash | mainnet | testnet |
  | Zcash | mainnet | testnet |

  ### Other

  | Blockchain | Mainnet | Testnet |
  |------------|---------|---------|
  | XRP (Ripple) | mainnet | testnet |
  | Solana | mainnet | devnet |
  | Kaspa | mainnet | — |

  ## Development

  ```bash
  npm install
  npm run build     # Compiles to dist/
  npm run dev       # Watch mode
  npm run lint      # Type check
  ```

  ### Local testing

  ```bash
  # Install in local n8n
  cd ~/.n8n
  npm install /path/to/cryptoapis-n8n-nodes
  # Then restart n8n
  ```

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Provides access to Crypto APIs blockchain services in n8n workflows, including blockchain data, transactions, market data, wallet operations, and event/webhook management. It can also be used directly as an AI Agent tool for blockchain-related tasks.","capabilities":["Query latest address balances and recent transactions","Retrieve full address history for synced addresses","Get block details, transactions in blocks, and latest mined blocks","Estimate blockchain fees and gas, including EIP-1559 recommendations","Fetch transaction details, internal transactions, token transfers, and event logs","Access market data such as asset details, exchange rates, and supported asset metadata","Get token/contract details for EVM and Solana","Manage HD wallets including sync, list, activate, delete, address derivation, balance queries, and transaction preparation","Prepare unsigned EVM transactions for native coin, ERC-20, and ERC-721 transfers","Simulate Ethereum transactions before broadcasting"],"authentication":"Crypto APIs API key required; optional custom API URL supported (default: https://rest.cryptoapis.io)","commonUseCases":["Building workflows to monitor blockchain balances, transactions, and confirmations","Preparing, simulating, and broadcasting crypto transactions","Fetching market and asset data for portfolio or pricing workflows","Managing HD wallets and deriving addresses programmatically","Setting up webhook subscriptions for blockchain events"],"limitations":["Address history requires address sync first","Transaction simulation is only for Ethereum transactions","Contract token details are specifically supported for EVM (Ethereum, BSC, Ethereum Classic) and Solana","Some operations are limited to certain blockchains or network types"],"relatedNodes":["AI Agent","MCP Client Tool"]}


node_type: n8n-nodes-tyme.tyme
package_name: n8n-nodes-tyme
display_name: Tyme
description: Track time, manage projects and tasks in Tyme
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: lrrrrs
author_github_url: https://github.com/tyme-app/n8n.git
npm_package_name: n8n-nodes-tyme
npm_version: 1.1.0
community_fetched_at: 2026-07-14T14:40:34.383Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "timeEntry",
      "options": [
        {
          "name": "Absence",
          "value": "absence"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Category",
          "value": "projectCategory"
        },
        {
          "name": "Summary",
          "value": "summary"
        },
        {
          "name": "Team Member",
          "value": "teamMember"
        },
        {
          "name": "Time",
          "value": "times"
        },
        {
          "name": "Time Entry",
          "value": "timeEntry"
        },
        {
          "name": "Timed Sub-Task",
          "value": "timedSubTask"
        },
        {
          "name": "Timed Task",
          "value": "timedTask"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an absence",
          "description": "Create an absence entry"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an absence",
          "description": "Delete an absence entry"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an absence",
          "description": "Update an absence entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "absence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project category",
          "description": "Create a project category"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project category",
          "description": "Delete a project category"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search project categories",
          "description": "Search project categories"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project category",
          "description": "Update a project category"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectCategory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "description": "Create a project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "description": "Delete a project"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search projects",
          "description": "Search projects"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project",
          "description": "Update a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a timed task",
          "description": "Create a timed task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a timed task",
          "description": "Delete a timed task"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search timed tasks",
          "description": "Search timed tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a timed task",
          "description": "Update a timed task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timedTask"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a timed sub task",
          "description": "Create a timed sub-task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a timed sub task",
          "description": "Delete a timed sub-task"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search timed sub tasks",
          "description": "Search timed sub-tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a timed sub task",
          "description": "Update a timed sub-task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timedSubTask"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a time entry",
          "description": "Create a time entry"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a time entry",
          "description": "Delete a time entry"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a time entry",
          "description": "Update a time entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timeEntry"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many time entries",
          "description": "Retrieve time entries for a date range"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "times"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get summary",
          "description": "Get task summaries for a date range"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "summary"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a team member",
          "description": "Get a specific team member"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many team members",
          "description": "Get all team members"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "teamMember"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an absence",
      "description": "Create an absence entry",
      "resource": "absence"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an absence",
      "description": "Delete an absence entry",
      "resource": "absence"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an absence",
      "description": "Update an absence entry",
      "resource": "absence"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project category",
      "description": "Create a project category",
      "resource": "projectCategory"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project category",
      "description": "Delete a project category",
      "resource": "projectCategory"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search project categories",
      "description": "Search project categories",
      "resource": "projectCategory"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project category",
      "description": "Update a project category",
      "resource": "projectCategory"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "description": "Create a project",
      "resource": "project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "description": "Delete a project",
      "resource": "project"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search projects",
      "description": "Search projects",
      "resource": "project"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project",
      "description": "Update a project",
      "resource": "project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a timed task",
      "description": "Create a timed task",
      "resource": "timedTask"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a timed task",
      "description": "Delete a timed task",
      "resource": "timedTask"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search timed tasks",
      "description": "Search timed tasks",
      "resource": "timedTask"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a timed task",
      "description": "Update a timed task",
      "resource": "timedTask"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a timed sub task",
      "description": "Create a timed sub-task",
      "resource": "timedSubTask"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a timed sub task",
      "description": "Delete a timed sub-task",
      "resource": "timedSubTask"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search timed sub tasks",
      "description": "Search timed sub-tasks",
      "resource": "timedSubTask"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a timed sub task",
      "description": "Update a timed sub-task",
      "resource": "timedSubTask"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a time entry",
      "description": "Create a time entry",
      "resource": "timeEntry"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a time entry",
      "description": "Delete a time entry",
      "resource": "timeEntry"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a time entry",
      "description": "Update a time entry",
      "resource": "timeEntry"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many time entries",
      "description": "Retrieve time entries for a date range",
      "resource": "times"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get summary",
      "description": "Get task summaries for a date range",
      "resource": "summary"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a team member",
      "description": "Get a specific team member",
      "resource": "teamMember"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many team members",
      "description": "Get all team members",
      "resource": "teamMember"
    }
  ]

npm_readme:
  # n8n-nodes-tyme

  This is an n8n community node for [Tyme](https://www.tyme-app.com/), a time tracking app for Mac and iOS.

  Tyme lets individuals and teams track time against projects and tasks, manage absences, and generate reports. This node connects your n8n workflows to the Tyme API so you can automate time tracking, sync data with other tools, and build custom reporting pipelines.

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

  [Installation](#installation)
  [Trigger Events](#trigger-events)
  [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.

  ## Trigger Events

  The **Tyme Trigger** node starts a workflow automatically when something happens in Tyme. Activate the workflow and it registers a webhook with the Tyme API; deactivating it unregisters automatically.

  Supported events:

  - **Category Created** — a new project category is created
  - **Project Created** — a new project is created
  - **Sub-Task Created** — a new sub-task is created
  - **Task Created** — a new task is created
  - **Time Entry Created** — a new time entry is started
  - **Time Entry Stopped** — a running time entry is stopped

  ## Operations

  ### Time Entry
  - **Create** — log a new time entry against a task
  - **Update** — modify an existing time entry
  - **Delete** — remove a time entry

  ### Times
  - **Get Many** — retrieve time entries for a date range, with optional filters

  ### Summary
  - **Get** — fetch a summarised time report for a date range

  ### Absence
  - **Create** — record an absence (vacation, sick leave, etc.)
  - **Update** — update an existing absence record
  - **Delete** — remove an absence record

  ### Project
  - **Create** — create a new project
  - **Update** — update project details
  - **Delete** — delete a project
  - **Search** — find projects by name

  ### Task
  - **Create** — create a task inside a project
  - **Update** — update task details
  - **Delete** — delete a task
  - **Search** — find tasks by name or parent project

  ### Sub-Task
  - **Create** — create a sub-task inside a task
  - **Update** — update sub-task details
  - **Delete** — delete a sub-task
  - **Search** — find sub-tasks by name

  ### Project Category
  - **Create** — create a project category
  - **Update** — update a project category
  - **Delete** — delete a project category
  - **Search** — find categories by name

  ### Team Member
  - **Get** — retrieve a single team member
  - **Get Many** — list all team members

  ## Credentials

  This node uses **OAuth 2.0 with PKCE** to authenticate with the Tyme API. No Client ID or Client Secret is required — the node comes pre-configured.

  To connect:
  1. Create a new **Tyme OAuth2 API** credential in n8n.
  2. Click **Connect** and sign in with your Tyme account.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [Tyme Website](https://tyme-app.com/)
  - [Tyme API Documentation](https://www.tyme-app.com/en/api-doc/)
  - [Tyme n8n Community Node](https://creators.n8n.io/nodes/n8n-nodes-tyme/integration)
  - [Tyme n8n npm Package](https://www.npmjs.com/package/n8n-nodes-tyme)

  ## Notes
  - Run locally: npm run dev
  - Lint / Fix: npm run lint(:fix)
  - Release: npm run release

ai_documentation_summary:
  {"purpose":"A community n8n node for Tyme that lets workflows create, update, delete, search, and retrieve time tracking data, projects, tasks, absences, and reports. It also supports triggering workflows from Tyme events via webhooks.","capabilities":["Trigger workflows on Tyme events such as category created, project created, task created, sub-task created, time entry created, and time entry stopped","Create, update, and delete time entries","Retrieve time entries for a date range with filters","Fetch summarized time reports for a date range","Create, update, and delete absences","Create, update, delete, and search projects","Create, update, delete, and search tasks","Create, update, delete, and search sub-tasks","Create, update, delete, and search project categories","Get a single team member and list all team members"],"authentication":"OAuth 2.0 with PKCE; create a Tyme OAuth2 API credential in n8n and connect with a Tyme account. No Client ID or Client Secret is required.","commonUseCases":["Automate time tracking workflows by creating or updating Tyme time entries from other systems","Sync project, task, and category data between Tyme and other business tools","Generate custom time reports and reporting pipelines from Tyme data","Track and manage absences across teams","React to Tyme changes in real time using trigger-based workflows"],"limitations":["The README only documents supported events and operations; it does not mention advanced filtering, pagination behavior, or any unsupported API features."],"relatedNodes":["Tyme Trigger"]}


node_type: n8n-nodes-tyme.tymeTrigger
package_name: n8n-nodes-tyme
display_name: Tyme Trigger
description: Starts the workflow when a Tyme event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: lrrrrs
author_github_url: https://github.com/tyme-app/n8n.git
npm_package_name: n8n-nodes-tyme
npm_version: 1.1.0
community_fetched_at: 2026-07-14T14:40:34.385Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-tyme

  This is an n8n community node for [Tyme](https://www.tyme-app.com/), a time tracking app for Mac and iOS.

  Tyme lets individuals and teams track time against projects and tasks, manage absences, and generate reports. This node connects your n8n workflows to the Tyme API so you can automate time tracking, sync data with other tools, and build custom reporting pipelines.

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

  [Installation](#installation)
  [Trigger Events](#trigger-events)
  [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.

  ## Trigger Events

  The **Tyme Trigger** node starts a workflow automatically when something happens in Tyme. Activate the workflow and it registers a webhook with the Tyme API; deactivating it unregisters automatically.

  Supported events:

  - **Category Created** — a new project category is created
  - **Project Created** — a new project is created
  - **Sub-Task Created** — a new sub-task is created
  - **Task Created** — a new task is created
  - **Time Entry Created** — a new time entry is started
  - **Time Entry Stopped** — a running time entry is stopped

  ## Operations

  ### Time Entry
  - **Create** — log a new time entry against a task
  - **Update** — modify an existing time entry
  - **Delete** — remove a time entry

  ### Times
  - **Get Many** — retrieve time entries for a date range, with optional filters

  ### Summary
  - **Get** — fetch a summarised time report for a date range

  ### Absence
  - **Create** — record an absence (vacation, sick leave, etc.)
  - **Update** — update an existing absence record
  - **Delete** — remove an absence record

  ### Project
  - **Create** — create a new project
  - **Update** — update project details
  - **Delete** — delete a project
  - **Search** — find projects by name

  ### Task
  - **Create** — create a task inside a project
  - **Update** — update task details
  - **Delete** — delete a task
  - **Search** — find tasks by name or parent project

  ### Sub-Task
  - **Create** — create a sub-task inside a task
  - **Update** — update sub-task details
  - **Delete** — delete a sub-task
  - **Search** — find sub-tasks by name

  ### Project Category
  - **Create** — create a project category
  - **Update** — update a project category
  - **Delete** — delete a project category
  - **Search** — find categories by name

  ### Team Member
  - **Get** — retrieve a single team member
  - **Get Many** — list all team members

  ## Credentials

  This node uses **OAuth 2.0 with PKCE** to authenticate with the Tyme API. No Client ID or Client Secret is required — the node comes pre-configured.

  To connect:
  1. Create a new **Tyme OAuth2 API** credential in n8n.
  2. Click **Connect** and sign in with your Tyme account.

  ## Resources

  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/installation/)
  - [Tyme Website](https://tyme-app.com/)
  - [Tyme API Documentation](https://www.tyme-app.com/en/api-doc/)
  - [Tyme n8n Community Node](https://creators.n8n.io/nodes/n8n-nodes-tyme/integration)
  - [Tyme n8n npm Package](https://www.npmjs.com/package/n8n-nodes-tyme)

  ## Notes
  - Run locally: npm run dev
  - Lint / Fix: npm run lint(:fix)
  - Release: npm run release

ai_documentation_summary:
  {"purpose":"Connects n8n workflows to the Tyme time-tracking API. It can trigger workflows from Tyme events and manage time tracking, projects, tasks, absences, and reports.","capabilities":["Trigger workflows on Tyme events (Category Created, Project Created, Sub-Task Created, Task Created, Time Entry Created, Time Entry Stopped)","Create, update, and delete time entries","Retrieve many time entries for a date range with optional filters","Fetch summarized time reports for a date range","Create, update, and delete absences","Create, update, delete, and search projects","Create, update, delete, and search tasks","Create, update, delete, and search sub-tasks","Create, update, delete, and search project categories","Get a single team member and list all team members"],"authentication":"OAuth 2.0 with PKCE; create a Tyme OAuth2 API credential and connect with a Tyme account. No Client ID or Client Secret required.","commonUseCases":["Automatically start workflows when Tyme events occur","Sync Tyme time entries, projects, and tasks with other tools","Generate custom time reports and dashboards","Automate absence management workflows","Look up and maintain team member, project, task, and category data"],"limitations":["Trigger node must be activated to register the webhook, and deactivating the workflow unregisters it automatically"],"relatedNodes":["Tyme OAuth2 API credential","Webhook trigger nodes","HTTP Request node"]}


node_type: @uprock-ai/n8n-nodes-uprock.upRockCrawler
package_name: @uprock-ai/n8n-nodes-uprock
display_name: Scraper - UpRock Crawler
description: Crawl URLs, fetch rendered content, and research the web through UpRock
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: uprockai
author_github_url: https://github.com/uprockcom/n8n-nodes-uprock.git
npm_package_name: @uprock-ai/n8n-nodes-uprock
npm_version: 0.5.6
community_fetched_at: 2026-07-14T14:40:34.390Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # @uprock-ai/n8n-nodes-uprock

  This is an n8n community node package for UpRock. It provides the **UpRock Crawler** node for crawling URLs, fetching rendered content, and researching the web in n8n workflows.

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

  - [Installation](#installation)
  - [Releasing](#releasing)
  - [Use The UpRock Node In Your Own n8n Instance](#use-the-uprock-node-in-your-own-n8n-instance)
  - [Operations](#operations)
  - [Credentials](#credentials)
  - [Usage](#usage)
  - [Compatibility](#compatibility)
  - [Resources](#resources)

  ## Installation

  Install the package named `@uprock-ai/n8n-nodes-uprock` in a self-hosted n8n instance. n8n Cloud doesn't load unverified npm community node packages, so run this node on self-hosted n8n.

  You can install community nodes from the n8n UI when your instance supports it:

  1. Go to **Settings** > **Community Nodes**.
  2. Select **Install**.
  3. Enter `@uprock-ai/n8n-nodes-uprock`.
  4. Restart n8n if your deployment doesn't reload community packages automatically.

  For command-line and production deployment patterns, use the runbooks below.

  ## Releasing

  npm publishing is automated from GitHub Releases through [`.github/workflows/publish.yml`](.github/workflows/publish.yml).

  For n8n verification, npm publishes must come from GitHub Actions with provenance. The recommended setup is npm Trusted Publishers, which lets GitHub Actions publish without storing a long-lived npm token.

  One-time setup:

  1. Open the package settings on npm.
  2. Under **Publish access** > **Trusted Publishers**, add a GitHub Actions publisher.
  3. Set the repository owner to `uprockcom`.
  4. Set the repository name to `n8n-nodes-uprock`.
  5. Set the workflow name to `publish.yml`.

  If you prefer token-based publishing, add an `NPM_TOKEN` repository secret with publish access to the `@uprock-ai/n8n-nodes-uprock` package on npm. The workflow still publishes with provenance in that mode.

  Release flow:

  1. Make sure `gh` is authenticated and your local `main` matches `origin/main`.
  2. Preview the next release with `npm run release:dry-run`.
  3. Create the release with `npm run release`.
  4. The script fetches the latest semver tag, bumps the package patch version by default, updates `package-lock.json` and `CHANGELOG.md`, commits `chore(release): vX.Y.Z`, pushes `main` and the new tag, and creates the GitHub Release.
  5. GitHub Actions installs dependencies, checks that the tag matches `package.json`, runs `npm run verify:static`, builds the package, performs an npm dry run, and then publishes it to npm with provenance.

  Stable GitHub Releases publish to npm with the `latest` dist-tag. GitHub prereleases publish with the `next` dist-tag.

  Use `npm run release -- minor` or `npm run release -- major` when you need a larger semver bump.
  Use `./scripts/release-version.sh --prerelease` if you need the GitHub Release marked as a prerelease.

  ## Use The UpRock Node In Your Own n8n Instance

  These instructions are intended for DevOps teams running self-hosted n8n. They assume the npm package name is `@uprock-ai/n8n-nodes-uprock` and the node display name is **UpRock Crawler**.

  ### Prerequisites

  - Self-hosted n8n with community packages enabled. Keep `N8N_COMMUNITY_PACKAGES_ENABLED=true` explicit in Docker, Kubernetes, and systemd configs.
  - Owner or admin access to install community nodes.
  - Network egress from n8n to `https://mcp.uprock.ai`.
  - An UpRock MCP API key UUID for the n8n credential.
  - The same package version installed on every n8n process that can execute workflows. In queue mode, install it on the main, webhook, and worker containers or hosts.

  ### Docker

  The safest Docker setup is to persist n8n's user data directory, because n8n loads community packages from disk at startup. Persist `/home/node/.n8n`, or at minimum `/home/node/.n8n/nodes`.

  Example Docker Compose service:

  ```yaml
  services:
    n8n:
      image: n8nio/n8n:latest
      container_name: n8n
      ports:
        - '5678:5678'
      environment:
        N8N_COMMUNITY_PACKAGES_ENABLED: 'true'
        GENERIC_TIMEZONE: 'UTC'
        TZ: 'UTC'
      volumes:
        - n8n_data:/home/node/.n8n

  volumes:
    n8n_data:
  ```

  Use a pinned n8n image tag instead of `latest` for production rollouts.

  Install the package inside the running container:

  ```sh
  docker exec -it -u node n8n sh
  mkdir -p ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm install @uprock-ai/n8n-nodes-uprock
  exit
  docker restart n8n
  ```

  If your Compose service name is `n8n` but the container name is different, use:

  ```sh
  docker compose exec -u node n8n sh
  ```

  Upgrade or pin a specific package version by replacing `<version>` with the release you want:

  ```sh
  docker exec -it -u node n8n sh
  cd ~/.n8n/nodes
  npm install @uprock-ai/n8n-nodes-uprock@<version>
  exit
  docker restart n8n
  ```

  For blue/green, rolling, or queue-mode deployments, bake the package installation into the image or run the install step against the persistent n8n volume before starting the new containers. Do not deploy one worker version with the package and another without it.

  ### Without Docker

  Install the package as the same OS user that runs n8n. Do not install it as `root` unless n8n itself runs as `root`.

  For an n8n service user named `n8n`:

  ```sh
  sudo -u n8n sh -lc 'mkdir -p ~/.n8n/nodes && cd ~/.n8n/nodes && npm install @uprock-ai/n8n-nodes-uprock'
  sudo systemctl restart n8n
  ```

  For a local npm-based n8n install running as your current user:

  ```sh
  mkdir -p ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm install @uprock-ai/n8n-nodes-uprock
  n8n start
  ```

  Upgrade or pin a package version by replacing `<version>` with the release you want:

  ```sh
  cd ~/.n8n/nodes
  npm install @uprock-ai/n8n-nodes-uprock@<version>
  ```

  Restart every n8n process after installation or upgrade so n8n reloads the community package.

  ### Install An Unreleased Build From This Repository

  Use this when testing a commit before it is published to npm:

  ```sh
  npm ci
  npm run build
  npm pack
  ```

  Copy the generated `uprock-ai-n8n-nodes-uprock-<version>.tgz` to the n8n host or container, then install it from the same `~/.n8n/nodes` directory:

  ```sh
  cd ~/.n8n/nodes
  npm install /path/to/uprock-ai-n8n-nodes-uprock-<version>.tgz
  ```

  Restart n8n after installing the tarball.

  ### Configure The UpRock Credential

  After n8n restarts:

  1. Open n8n and create an **UpRock Crawler API** credential.
  2. Paste only the UpRock API key UUID into **API Key UUID**.
  3. Leave **MCP Base URL** as `https://mcp.uprock.ai` unless you are targeting a staging or local MCP endpoint.
  4. Add an **UpRock Crawler** node to a workflow and choose a command.

  ### Operational Notes

  - Keep the installed package version pinned in production change tickets and deployment manifests.
  - Persist `/home/node/.n8n/nodes` for Docker deployments, otherwise package files can disappear when containers are recreated.
  - If n8n reports missing community packages after a container replacement, verify that the persisted volume contains `~/.n8n/nodes/node_modules/@uprock-ai/n8n-nodes-uprock`.
  - Community packages execute inside the n8n runtime. Review and approve upgrades the same way you handle other workflow runtime dependencies.
  - n8n's official references: [community node installation](https://docs.n8n.io/integrations/community-nodes/installation/), [manual npm installation](https://docs.n8n.io/integrations/community-nodes/installation/manual-install/), and [community node troubleshooting](https://docs.n8n.io/integrations/community-nodes/troubleshooting/).

  ## Operations

  The UpRock Crawler node exposes one **Command** selector. Most commands map directly to UpRock MCP tools, while `fetch` is a convenience command that chains MCP calls:

  - `fetch`: Crawl a URL, then return both Markdown and HTML content
  - `crawl_fetch`: Fetch a URL through the UpRock crawl network
  - `resource_fetch`: Fetch full content for a `crawl://` or `sweep://` resource URI
  - `web_research`: Search the web across search engines and geographic perspectives

  The `sweep` command is currently hidden by a package feature flag while it is being fixed. It will be re-enabled in a future release once it is stable again.

  ### Command Parameters

  `fetch`

  - Required: `url`
  - Optional: `method`, `body`, `country`, `deviceType`, `timeoutSeconds`, `retries`
  - Returns both Markdown and HTML content plus crawl metadata
  - Internally runs `crawl_fetch`, then `resource_fetch` for returned Markdown and HTML resources

  `crawl_fetch`

  - Required: `url`
  - Optional: `method`, `body`, `country`, `deviceType`, `timeoutSeconds`, `retries`
  - Default method: `CRAWL_FULL_PAGE`
  - `body` is used only with `POST` and `PUT`

  `resource_fetch`

  - Required: `uri`
  - Accepts resource URIs starting with `crawl://` or `sweep://`

  `web_research`

  - Required: `query`
  - Optional: `max_results`, `num_sources`, `suggested_countries`
  - Defaults: `max_results` is `12`, `num_sources` is `5`
  - `suggested_countries` controls where the search runs from, not what the query is about

  ## Credentials

  Create an **UpRock Crawler API** credential in n8n.

  Required field:

  - **API Key UUID**: Your UpRock MCP API key UUID

  Advanced field:

  - **MCP Base URL**: Defaults to `https://mcp.uprock.ai`; change only for local or staging MCP endpoints

  The node builds the MCP URL internally as:

  ```text
  https://mcp.uprock.ai/{apiKey}/mcp
  ```

  You do not need to paste the full MCP URL into the node.

  Credential flow:

  1. Copy only the UUID part of your UpRock MCP URL.
  2. Paste that UUID into **API Key UUID**.
  3. Leave **MCP Base URL** unchanged unless you are testing a local or staging endpoint.
  4. The node combines the base URL and UUID internally when it calls MCP.

  ## Usage

  Use `crawl_fetch` to fetch a page. The default method is `CRAWL_FULL_PAGE`, which renders JavaScript and is the most reliable option for modern sites. Use `GET` when you know the target is a static page or API endpoint.

  Use `fetch` when you want the crawler output and the full page content in one node. It returns crawl metadata, summary, resource URIs, Markdown text, and HTML text.

  Use `resource_fetch` when a prior command returns a `crawl://` or `sweep://` resource URI. Markdown and HTML resources return text content, while screenshot-like resources return resource metadata and binary-safe fields.

  When the `sweep` feature flag is re-enabled in a future release, the command will again run regional reliability checks. The default regions are `NA`, `EU`, and `APAC`, and checks run concurrently.

  Use `web_research` for search. Put geographic terms in the query only when they are the subject of the search. Use **Suggested Countries** when you want search results from a particular geographic perspective.

  ## Common Workflows

  Fetch a URL:

  1. Add an UpRock Crawler node.
  2. Select `fetch`.
  3. Set `url`.
  4. Read Markdown from `markdown.text` and HTML from `html.text`.

  Fetch returned resources:

  1. Run `crawl_fetch` or, when the feature returns, `sweep`.
  2. Copy a returned `crawl://` or `sweep://` URI into a second UpRock Crawler node.
  3. Select `resource_fetch`.
  4. Read `text` for markdown or HTML resources, or use the returned metadata fields for screenshot-like resources.

  Run a regional sweep after the feature flag is re-enabled in a future release:

  1. Select `sweep`.
  2. Set `url`.
  3. Keep the default regions `NA`, `EU`, and `APAC`, or choose the regions to test from.
  4. Use `report_url`, `jobs`, `failedJobErrors`, and `screenshotResourceUris` from the output.

  Search from a geographic perspective:

  1. Select `web_research`.
  2. Put the subject in `query`.
  3. Use `suggested_countries` only to control where the search runs from.
  4. Read normalized search rows from `results`.

  ## Compatibility

  Compatible with n8n community node packages.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [UpRock](https://www.uprock.com/)

ai_documentation_summary:
  {"purpose":"The UpRock Crawler node lets n8n workflows crawl URLs, fetch rendered page content, and research the web through UpRock's MCP service.","capabilities":["Crawl URLs","Fetch rendered content from web pages","Research the web via UpRock","Run as an n8n community node in self-hosted instances"],"authentication":"An UpRock MCP API key UUID is required for the n8n credential.","commonUseCases":["Extracting rendered content from websites","Automating web research tasks in workflows","Crawling multiple URLs for data collection"],"limitations":["Not supported on n8n Cloud; requires a self-hosted n8n instance","Requires network egress from n8n to https://mcp.uprock.ai","The same package version must be installed on every n8n process that can execute workflows"],"relatedNodes":[]}


node_type: n8n-nodes-apogeoapi.apogeoAPI
package_name: n8n-nodes-apogeoapi
display_name: ApogeoAPI
description: IP geolocation, countries, cities, and exchange rates
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: apogeoapi
author_github_url: https://github.com/APOGEOAPI/
npm_package_name: n8n-nodes-apogeoapi
npm_version: 1.0.6
community_fetched_at: 2026-07-14T14:40:34.391Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "country",
      "options": [
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "IP Geolocation",
          "value": "ipGeolocation"
        },
        {
          "name": "Exchange Rate",
          "value": "exchangeRate"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCountry",
      "options": [
        {
          "name": "Get Country",
          "value": "getCountry",
          "action": "Get a country by ISO code",
          "description": "Get a country by ISO code"
        },
        {
          "name": "List Countries",
          "value": "listCountries",
          "action": "List all countries",
          "description": "List all countries, optionally filtered by region"
        },
        {
          "name": "Search Countries",
          "value": "searchCountries",
          "action": "Search countries by name",
          "description": "Search countries by name"
        },
        {
          "name": "Get States",
          "value": "getStates",
          "action": "Get states of a country",
          "description": "Get all states/provinces of a country"
        },
        {
          "name": "Get Cities",
          "value": "getCities",
          "action": "Get cities in a country",
          "description": "Get cities in a country, optionally filtered by state"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "country"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "geolocateIp",
      "options": [
        {
          "name": "Geolocate IP",
          "value": "geolocateIp",
          "action": "Geolocate an IP address",
          "description": "Get geolocation data for an IP address"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ipGeolocation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRate",
      "options": [
        {
          "name": "Get Rate",
          "value": "getRate",
          "action": "Get exchange rate for a currency",
          "description": "Get the USD exchange rate for a currency"
        },
        {
          "name": "List All Rates",
          "value": "listRates",
          "action": "List all exchange rates",
          "description": "List exchange rates for all available currencies"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "exchangeRate"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Country",
      "value": "getCountry",
      "action": "Get a country by ISO code",
      "description": "Get a country by ISO code",
      "resource": "country"
    },
    {
      "name": "List Countries",
      "value": "listCountries",
      "action": "List all countries",
      "description": "List all countries, optionally filtered by region",
      "resource": "country"
    },
    {
      "name": "Search Countries",
      "value": "searchCountries",
      "action": "Search countries by name",
      "description": "Search countries by name",
      "resource": "country"
    },
    {
      "name": "Get States",
      "value": "getStates",
      "action": "Get states of a country",
      "description": "Get all states/provinces of a country",
      "resource": "country"
    },
    {
      "name": "Get Cities",
      "value": "getCities",
      "action": "Get cities in a country",
      "description": "Get cities in a country, optionally filtered by state",
      "resource": "country"
    },
    {
      "name": "Geolocate IP",
      "value": "geolocateIp",
      "action": "Geolocate an IP address",
      "description": "Get geolocation data for an IP address",
      "resource": "ipGeolocation"
    },
    {
      "name": "Get Rate",
      "value": "getRate",
      "action": "Get exchange rate for a currency",
      "description": "Get the USD exchange rate for a currency",
      "resource": "exchangeRate"
    },
    {
      "name": "List All Rates",
      "value": "listRates",
      "action": "List all exchange rates",
      "description": "List exchange rates for all available currencies",
      "resource": "exchangeRate"
    }
  ]

npm_readme:
  # n8n-nodes-apogeoapi

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

  n8n community node for [ApogeoAPI](https://apogeoapi.com) — geographic data, live exchange rates, and IP geolocation in your n8n workflows.

  > **250+ countries · 5,000+ states · 150,000+ cities · 161+ live currency rates · IP geolocation**

  ---

  ## Installation

  ### Via the n8n UI (recommended, v0.187+)

  1. Go to **Settings → Community Nodes → Install**.
  2. Enter: `n8n-nodes-apogeoapi`.
  3. Agree to the risks and click **Install**.

  The **ApogeoAPI** node will appear in the node palette.

  ### Self-hosted n8n

  ```bash
  npm install n8n-nodes-apogeoapi
  ```

  Restart n8n and reload the editor.

  ---

  ## Credentials

  1. Create a free account at [apogeoapi.com](https://apogeoapi.com) — no credit card.
  2. Copy your API key from the dashboard → **API Keys**.
  3. In n8n, create a new credential of type **ApogeoAPI** and paste your key.

  The free tier includes **1,000 requests/month** (countries + states). Paid plans unlock cities, IP geolocation, and live FX rates.

  ---

  ## Operations

  | Operation | Description | Requires paid plan |
  |-----------|-------------|---------------------|
  | **Get Country** | Full country data by ISO-2 or ISO-3 code (name, capital, region, population, currency, flag, coordinates, **live USD exchange rate**) | No |
  | **List Countries** | All 250+ countries with filtering by region | No |
  | **Search Countries** | Find countries by name, region, currency, language | No |
  | **Get States** | States/provinces for a country | No |
  | **Get Cities** | 150,000+ cities with coordinates, population, state | Yes (Basic+) |
  | **Get Exchange Rate** | Live USD rate for 161 currencies (refreshed every 4h) | Yes (Basic+) |
  | **Geolocate IP** | Country, region, city, timezone, ISP from any IP | Yes (Basic+) |
  | **Global Search** | Fuzzy search across countries, cities, and currencies | No |

  All operations return typed JSON — no mapping required.

  ---

  ## Example workflows

  ### 1. IP → enrich + Slack notification

  Detect the country of a webhook visitor and post a formatted message to Slack.

  ```
  Webhook ─▶ ApogeoAPI (Geolocate IP) ─▶ Set (format message) ─▶ Slack
  ```

  Use the `ip` field from the webhook request. ApogeoAPI returns country, city, timezone, and flag URL that you can include in the Slack message.

  ### 2. Lead CRM → currency rate → USD normalization

  Every time a new deal is added to your CRM, fetch the live USD rate for its local currency and update the deal value in USD.

  ```
  HubSpot (New Deal) ─▶ ApogeoAPI (Get Exchange Rate, currency={{$json.currency}}) ─▶ HubSpot (Update Deal, valueUSD={{$json.amount / $json.rate}})
  ```

  ### 3. Form submission → localized welcome email

  When a user signs up, detect their country from IP, and send them a welcome email in the correct language.

  ```
  Typeform ─▶ ApogeoAPI (Geolocate IP) ─▶ Switch (by country) ─▶ SendGrid (template per region)
  ```

  More templates coming soon at [n8n.io/workflows](https://n8n.io/workflows).

  ---

  ## Links

  - **API documentation**: https://api.apogeoapi.com/api/docs
  - **Landing**: https://apogeoapi.com
  - **GitHub (node source)**: https://github.com/APOGEOAPI/n8n-nodes-apogeoapi
  - **Dashboard / signup**: https://app.apogeoapi.com
  - **Issues & feature requests**: https://github.com/APOGEOAPI/n8n-nodes-apogeoapi/issues
  - **Email**: support@apogeoapi.com

  ---

  ## License

  MIT © [ApogeoAPI](https://apogeoapi.com)

ai_documentation_summary:
  {"purpose":"ApogeoAPI provides geographic data, live exchange rates, and IP geolocation for use in n8n workflows. It can enrich records with country, city, currency, and location details.","capabilities":["Get country data by ISO-2 or ISO-3 code","List countries with optional region filtering","Search countries by name, region, currency, or language","Get states or provinces for a country","Get cities with coordinates, population, and state information","Get live USD exchange rates for currencies","Geolocate an IP address to return country, region, city, timezone, and ISP data","Perform global fuzzy search across countries, cities, and currencies","Return typed JSON outputs"],"authentication":"API key required via an ApogeoAPI credential in n8n","commonUseCases":["Enrich webhook visitors with geographic and timezone information","Normalize deal or transaction values using live currency exchange rates","Route or personalize messages and emails based on user country or location"],"limitations":["Free tier is limited to 1,000 requests per month and covers countries and states only","Cities, IP geolocation, and live FX rates require a paid plan (Basic+)"],"relatedNodes":["Webhook","Set","Slack","HubSpot","Typeform"]}


node_type: n8n-nodes-ploomes.ploomes
package_name: n8n-nodes-ploomes
display_name: Ploomes CRM
description: Interact with the Ploomes CRM API with full OData support
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main",
  "main",
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: caio_lopes
author_github_url: https://github.com/Ploomes/
npm_package_name: n8n-nodes-ploomes
npm_version: 0.1.17
community_fetched_at: 2026-07-14T14:40:34.392Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "City",
          "value": "city"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Line of Business",
          "value": "contactLineOfBusiness"
        },
        {
          "name": "Contact Number of Employees",
          "value": "contactNumberOfEmployees"
        },
        {
          "name": "Contact Origin",
          "value": "contactOrigin"
        },
        {
          "name": "Contact Product",
          "value": "contactProduct"
        },
        {
          "name": "Contact Relationship",
          "value": "contactRelationship"
        },
        {
          "name": "Contact Status",
          "value": "contactStatus"
        },
        {
          "name": "Contact Type",
          "value": "contactType"
        },
        {
          "name": "Country",
          "value": "country"
        },
        {
          "name": "Currency",
          "value": "currency"
        },
        {
          "name": "Deal",
          "value": "deal"
        },
        {
          "name": "Deal Loss Reason",
          "value": "dealLossReason"
        },
        {
          "name": "Deal Pipeline",
          "value": "dealPipeline"
        },
        {
          "name": "Deal Stage",
          "value": "dealStage"
        },
        {
          "name": "Deal Status",
          "value": "dealStatus"
        },
        {
          "name": "Department",
          "value": "department"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Document Template",
          "value": "documentTemplate"
        },
        {
          "name": "Field",
          "value": "field"
        },
        {
          "name": "Field Entity",
          "value": "fieldEntity"
        },
        {
          "name": "Field Options Table",
          "value": "fieldOptionsTable"
        },
        {
          "name": "Field Options Table Option",
          "value": "fieldOptionsTableOption"
        },
        {
          "name": "Field Type",
          "value": "fieldType"
        },
        {
          "name": "Interaction Record",
          "value": "interactionRecord"
        },
        {
          "name": "Operation",
          "value": "operation"
        },
        {
          "name": "Order",
          "value": "order"
        },
        {
          "name": "Order Stage",
          "value": "orderStage"
        },
        {
          "name": "Phone Type",
          "value": "phoneType"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Product Family",
          "value": "productFamily"
        },
        {
          "name": "Product Group",
          "value": "productGroup"
        },
        {
          "name": "Product Part",
          "value": "productPart"
        },
        {
          "name": "Quote",
          "value": "quote"
        },
        {
          "name": "Quote Approval Status",
          "value": "quoteApprovalStatus"
        },
        {
          "name": "Relative Date",
          "value": "relativeDate"
        },
        {
          "name": "Role",
          "value": "role"
        },
        {
          "name": "State",
          "value": "state"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Task Email Reminder",
          "value": "taskEmailReminder"
        },
        {
          "name": "Task Repeat Interval Unit",
          "value": "taskRepeatIntervalUnit"
        },
        {
          "name": "Task Type",
          "value": "taskType"
        },
        {
          "name": "Team",
          "value": "team"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "User Profile",
          "value": "userProfile"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        },
        {
          "name": "Webhook Action",
          "value": "webhookAction"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many account records",
          "description": "Retrieve many account records"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a account",
          "description": "Update an existing account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many city records",
          "description": "Retrieve many city records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "city"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deal records",
          "description": "Retrieve many deal records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a deal",
          "description": "Create a new deal"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a deal",
          "description": "Update an existing deal"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a deal",
          "description": "Delete a deal"
        },
        {
          "name": "Win",
          "value": "win",
          "action": "Win a deal",
          "description": "Mark a deal as won"
        },
        {
          "name": "Lose",
          "value": "lose",
          "action": "Lose a deal",
          "description": "Mark a deal as lost"
        },
        {
          "name": "Reopen",
          "value": "reopen",
          "action": "Reopen a deal",
          "description": "Reopen a closed deal"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deal pipeline records",
          "description": "Retrieve many deal pipeline records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a deal pipeline",
          "description": "Create a new deal pipeline"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a deal pipeline",
          "description": "Update an existing deal pipeline"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a deal pipeline",
          "description": "Delete a deal pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dealPipeline"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many field records",
          "description": "Retrieve many field records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a field",
          "description": "Create a new field"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a field",
          "description": "Update an existing field"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a field",
          "description": "Delete a field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "field"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many quote records",
          "description": "Retrieve many quote records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a quote",
          "description": "Create a new quote"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a quote",
          "description": "Update an existing quote"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a quote",
          "description": "Delete a quote"
        },
        {
          "name": "Review",
          "value": "review",
          "action": "Review a quote",
          "description": "Submit a quote for review"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "quote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many task records",
          "description": "Retrieve many task records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "description": "Update an existing task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "description": "Delete a task"
        },
        {
          "name": "Finish",
          "value": "finish",
          "action": "Finish a task",
          "description": "Mark a task as finished"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact relationship records",
          "description": "Retrieve many contact relationship records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactRelationship"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact status records",
          "description": "Retrieve many contact status records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact type records",
          "description": "Retrieve many contact type records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many country records",
          "description": "Retrieve many country records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "country"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many currency records",
          "description": "Retrieve many currency records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "currency"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deal loss reason records",
          "description": "Retrieve many deal loss reason records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dealLossReason"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deal stage records",
          "description": "Retrieve many deal stage records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dealStage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deal status records",
          "description": "Retrieve many deal status records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dealStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many document template records",
          "description": "Retrieve many document template records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many field entity records",
          "description": "Retrieve many field entity records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fieldEntity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many field type records",
          "description": "Retrieve many field type records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fieldType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many operation records",
          "description": "Retrieve many operation records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "operation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many phone type records",
          "description": "Retrieve many phone type records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phoneType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many quote approval status records",
          "description": "Retrieve many quote approval status records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "quoteApprovalStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many relative date records",
          "description": "Retrieve many relative date records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "relativeDate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many state records",
          "description": "Retrieve many state records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "state"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many task email reminder records",
          "description": "Retrieve many task email reminder records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "taskEmailReminder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many task repeat interval unit records",
          "description": "Retrieve many task repeat interval unit records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "taskRepeatIntervalUnit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many task type records",
          "description": "Retrieve many task type records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "taskType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many user profile records",
          "description": "Retrieve many user profile records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userProfile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhook action records",
          "description": "Retrieve many webhook action records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhookAction"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact records",
          "description": "Retrieve many contact records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact number of employees records",
          "description": "Retrieve many contact number of employees records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact number of employees",
          "description": "Create a new contact number of employees"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact number of employees",
          "description": "Update an existing contact number of employees"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact number of employees",
          "description": "Delete a contact number of employees"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactNumberOfEmployees"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact origin records",
          "description": "Retrieve many contact origin records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact origin",
          "description": "Create a new contact origin"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact origin",
          "description": "Update an existing contact origin"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact origin",
          "description": "Delete a contact origin"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactOrigin"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact line of business records",
          "description": "Retrieve many contact line of business records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact line of business",
          "description": "Create a new contact line of business"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact line of business",
          "description": "Update an existing contact line of business"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact line of business",
          "description": "Delete a contact line of business"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactLineOfBusiness"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contact product records",
          "description": "Retrieve many contact product records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact product",
          "description": "Create a new contact product"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact product",
          "description": "Update an existing contact product"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact product",
          "description": "Delete a contact product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactProduct"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many department records",
          "description": "Retrieve many department records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a department",
          "description": "Create a new department"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a department",
          "description": "Update an existing department"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a department",
          "description": "Delete a department"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "department"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many document records",
          "description": "Retrieve many document records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document",
          "description": "Create a new document"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update an existing document"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "description": "Delete a document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many interaction record records",
          "description": "Retrieve many interaction record records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a interaction record",
          "description": "Create a new interaction record"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a interaction record",
          "description": "Update an existing interaction record"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a interaction record",
          "description": "Delete a interaction record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "interactionRecord"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many order records",
          "description": "Retrieve many order records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a order",
          "description": "Create a new order"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a order",
          "description": "Update an existing order"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a order",
          "description": "Delete a order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "order"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many order stage records",
          "description": "Retrieve many order stage records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a order stage",
          "description": "Create a new order stage"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a order stage",
          "description": "Update an existing order stage"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a order stage",
          "description": "Delete a order stage"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "orderStage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many product records",
          "description": "Retrieve many product records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "description": "Create a new product"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "description": "Update an existing product"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product",
          "description": "Delete a product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many product family records",
          "description": "Retrieve many product family records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product family",
          "description": "Create a new product family"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product family",
          "description": "Update an existing product family"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product family",
          "description": "Delete a product family"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productFamily"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many product group records",
          "description": "Retrieve many product group records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product group",
          "description": "Create a new product group"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product group",
          "description": "Update an existing product group"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product group",
          "description": "Delete a product group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many product part records",
          "description": "Retrieve many product part records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product part",
          "description": "Create a new product part"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product part",
          "description": "Update an existing product part"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product part",
          "description": "Delete a product part"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productPart"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tag records",
          "description": "Retrieve many tag records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tag",
          "description": "Create a new tag"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tag",
          "description": "Update an existing tag"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a tag",
          "description": "Delete a tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many team records",
          "description": "Retrieve many team records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a team",
          "description": "Create a new team"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a team",
          "description": "Update an existing team"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a team",
          "description": "Delete a team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "team"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhook records",
          "description": "Retrieve many webhook records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "description": "Create a new webhook"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "description": "Update an existing webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "description": "Delete a webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many user records",
          "description": "Retrieve many user records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a user",
          "description": "Create a new user"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user",
          "description": "Update an existing user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many role records",
          "description": "Retrieve many role records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a role",
          "description": "Create a new role"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "role"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many field options table records",
          "description": "Retrieve many field options table records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a field options table",
          "description": "Create a new field options table"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fieldOptionsTable"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many field options table option records",
          "description": "Retrieve many field options table option records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a field options table option",
          "description": "Create a new field options table option"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fieldOptionsTableOption"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many account records",
      "description": "Retrieve many account records",
      "resource": "account"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a account",
      "description": "Update an existing account",
      "resource": "account"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many city records",
      "description": "Retrieve many city records",
      "resource": "city"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deal records",
      "description": "Retrieve many deal records",
      "resource": "deal"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a deal",
      "description": "Create a new deal",
      "resource": "deal"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a deal",
      "description": "Update an existing deal",
      "resource": "deal"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a deal",
      "description": "Delete a deal",
      "resource": "deal"
    },
    {
      "name": "Win",
      "value": "win",
      "action": "Win a deal",
      "description": "Mark a deal as won",
      "resource": "deal"
    },
    {
      "name": "Lose",
      "value": "lose",
      "action": "Lose a deal",
      "description": "Mark a deal as lost",
      "resource": "deal"
    },
    {
      "name": "Reopen",
      "value": "reopen",
      "action": "Reopen a deal",
      "description": "Reopen a closed deal",
      "resource": "deal"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deal pipeline records",
      "description": "Retrieve many deal pipeline records",
      "resource": "dealPipeline"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a deal pipeline",
      "description": "Create a new deal pipeline",
      "resource": "dealPipeline"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a deal pipeline",
      "description": "Update an existing deal pipeline",
      "resource": "dealPipeline"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a deal pipeline",
      "description": "Delete a deal pipeline",
      "resource": "dealPipeline"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many field records",
      "description": "Retrieve many field records",
      "resource": "field"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a field",
      "description": "Create a new field",
      "resource": "field"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a field",
      "description": "Update an existing field",
      "resource": "field"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a field",
      "description": "Delete a field",
      "resource": "field"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many quote records",
      "description": "Retrieve many quote records",
      "resource": "quote"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a quote",
      "description": "Create a new quote",
      "resource": "quote"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a quote",
      "description": "Update an existing quote",
      "resource": "quote"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a quote",
      "description": "Delete a quote",
      "resource": "quote"
    },
    {
      "name": "Review",
      "value": "review",
      "action": "Review a quote",
      "description": "Submit a quote for review",
      "resource": "quote"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many task records",
      "description": "Retrieve many task records",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "description": "Update an existing task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "description": "Delete a task",
      "resource": "task"
    },
    {
      "name": "Finish",
      "value": "finish",
      "action": "Finish a task",
      "description": "Mark a task as finished",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact relationship records",
      "description": "Retrieve many contact relationship records",
      "resource": "contactRelationship"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact status records",
      "description": "Retrieve many contact status records",
      "resource": "contactStatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact type records",
      "description": "Retrieve many contact type records",
      "resource": "contactType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many country records",
      "description": "Retrieve many country records",
      "resource": "country"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many currency records",
      "description": "Retrieve many currency records",
      "resource": "currency"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deal loss reason records",
      "description": "Retrieve many deal loss reason records",
      "resource": "dealLossReason"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deal stage records",
      "description": "Retrieve many deal stage records",
      "resource": "dealStage"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deal status records",
      "description": "Retrieve many deal status records",
      "resource": "dealStatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many document template records",
      "description": "Retrieve many document template records",
      "resource": "documentTemplate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many field entity records",
      "description": "Retrieve many field entity records",
      "resource": "fieldEntity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many field type records",
      "description": "Retrieve many field type records",
      "resource": "fieldType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many operation records",
      "description": "Retrieve many operation records",
      "resource": "operation"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many phone type records",
      "description": "Retrieve many phone type records",
      "resource": "phoneType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many quote approval status records",
      "description": "Retrieve many quote approval status records",
      "resource": "quoteApprovalStatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many relative date records",
      "description": "Retrieve many relative date records",
      "resource": "relativeDate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many state records",
      "description": "Retrieve many state records",
      "resource": "state"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many task email reminder records",
      "description": "Retrieve many task email reminder records",
      "resource": "taskEmailReminder"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many task repeat interval unit records",
      "description": "Retrieve many task repeat interval unit records",
      "resource": "taskRepeatIntervalUnit"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many task type records",
      "description": "Retrieve many task type records",
      "resource": "taskType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many user profile records",
      "description": "Retrieve many user profile records",
      "resource": "userProfile"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many webhook action records",
      "description": "Retrieve many webhook action records",
      "resource": "webhookAction"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact records",
      "description": "Retrieve many contact records",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact number of employees records",
      "description": "Retrieve many contact number of employees records",
      "resource": "contactNumberOfEmployees"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact number of employees",
      "description": "Create a new contact number of employees",
      "resource": "contactNumberOfEmployees"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact number of employees",
      "description": "Update an existing contact number of employees",
      "resource": "contactNumberOfEmployees"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact number of employees",
      "description": "Delete a contact number of employees",
      "resource": "contactNumberOfEmployees"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact origin records",
      "description": "Retrieve many contact origin records",
      "resource": "contactOrigin"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact origin",
      "description": "Create a new contact origin",
      "resource": "contactOrigin"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact origin",
      "description": "Update an existing contact origin",
      "resource": "contactOrigin"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact origin",
      "description": "Delete a contact origin",
      "resource": "contactOrigin"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact line of business records",
      "description": "Retrieve many contact line of business records",
      "resource": "contactLineOfBusiness"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact line of business",
      "description": "Create a new contact line of business",
      "resource": "contactLineOfBusiness"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact line of business",
      "description": "Update an existing contact line of business",
      "resource": "contactLineOfBusiness"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact line of business",
      "description": "Delete a contact line of business",
      "resource": "contactLineOfBusiness"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contact product records",
      "description": "Retrieve many contact product records",
      "resource": "contactProduct"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact product",
      "description": "Create a new contact product",
      "resource": "contactProduct"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact product",
      "description": "Update an existing contact product",
      "resource": "contactProduct"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact product",
      "description": "Delete a contact product",
      "resource": "contactProduct"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many department records",
      "description": "Retrieve many department records",
      "resource": "department"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a department",
      "description": "Create a new department",
      "resource": "department"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a department",
      "description": "Update an existing department",
      "resource": "department"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a department",
      "description": "Delete a department",
      "resource": "department"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many document records",
      "description": "Retrieve many document records",
      "resource": "document"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document",
      "description": "Create a new document",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update an existing document",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "description": "Delete a document",
      "resource": "document"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many interaction record records",
      "description": "Retrieve many interaction record records",
      "resource": "interactionRecord"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a interaction record",
      "description": "Create a new interaction record",
      "resource": "interactionRecord"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a interaction record",
      "description": "Update an existing interaction record",
      "resource": "interactionRecord"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a interaction record",
      "description": "Delete a interaction record",
      "resource": "interactionRecord"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many order records",
      "description": "Retrieve many order records",
      "resource": "order"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a order",
      "description": "Create a new order",
      "resource": "order"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a order",
      "description": "Update an existing order",
      "resource": "order"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a order",
      "description": "Delete a order",
      "resource": "order"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many order stage records",
      "description": "Retrieve many order stage records",
      "resource": "orderStage"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a order stage",
      "description": "Create a new order stage",
      "resource": "orderStage"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a order stage",
      "description": "Update an existing order stage",
      "resource": "orderStage"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a order stage",
      "description": "Delete a order stage",
      "resource": "orderStage"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many product records",
      "description": "Retrieve many product records",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "description": "Create a new product",
      "resource": "product"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "description": "Update an existing product",
      "resource": "product"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product",
      "description": "Delete a product",
      "resource": "product"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many product family records",
      "description": "Retrieve many product family records",
      "resource": "productFamily"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product family",
      "description": "Create a new product family",
      "resource": "productFamily"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product family",
      "description": "Update an existing product family",
      "resource": "productFamily"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product family",
      "description": "Delete a product family",
      "resource": "productFamily"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many product group records",
      "description": "Retrieve many product group records",
      "resource": "productGroup"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product group",
      "description": "Create a new product group",
      "resource": "productGroup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product group",
      "description": "Update an existing product group",
      "resource": "productGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product group",
      "description": "Delete a product group",
      "resource": "productGroup"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many product part records",
      "description": "Retrieve many product part records",
      "resource": "productPart"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product part",
      "description": "Create a new product part",
      "resource": "productPart"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product part",
      "description": "Update an existing product part",
      "resource": "productPart"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product part",
      "description": "Delete a product part",
      "resource": "productPart"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tag records",
      "description": "Retrieve many tag records",
      "resource": "tag"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tag",
      "description": "Create a new tag",
      "resource": "tag"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tag",
      "description": "Update an existing tag",
      "resource": "tag"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a tag",
      "description": "Delete a tag",
      "resource": "tag"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many team records",
      "description": "Retrieve many team records",
      "resource": "team"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a team",
      "description": "Create a new team",
      "resource": "team"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a team",
      "description": "Update an existing team",
      "resource": "team"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a team",
      "description": "Delete a team",
      "resource": "team"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many webhook records",
      "description": "Retrieve many webhook records",
      "resource": "webhook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "description": "Create a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "description": "Update an existing webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "description": "Delete a webhook",
      "resource": "webhook"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many user records",
      "description": "Retrieve many user records",
      "resource": "user"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a user",
      "description": "Create a new user",
      "resource": "user"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a user",
      "description": "Update an existing user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many role records",
      "description": "Retrieve many role records",
      "resource": "role"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a role",
      "description": "Create a new role",
      "resource": "role"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many field options table records",
      "description": "Retrieve many field options table records",
      "resource": "fieldOptionsTable"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a field options table",
      "description": "Create a new field options table",
      "resource": "fieldOptionsTable"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many field options table option records",
      "description": "Retrieve many field options table option records",
      "resource": "fieldOptionsTableOption"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a field options table option",
      "description": "Create a new field options table option",
      "resource": "fieldOptionsTableOption"
    }
  ]

npm_readme:
  <p align="center">
    <img src="nodes/Ploomes/ploomes.png" alt="Ploomes CRM" width="80" />
  </p>

  <h1 align="center">n8n-nodes-ploomes</h1>

  <p align="center">
    <strong>Community node for <a href="https://n8n.io">n8n</a> that integrates with the <a href="https://www.ploomes.com">Ploomes CRM</a> API</strong>
  </p>

  <p align="center">
    <a href="https://www.npmjs.com/package/n8n-nodes-ploomes"><img src="https://img.shields.io/npm/v/n8n-nodes-ploomes?style=flat-square&color=ff6d5a" alt="npm version" /></a>
    <a href="https://github.com/Ploomes/n8n-nodes-ploomes/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Ploomes/n8n-nodes-ploomes?style=flat-square" alt="license" /></a>
    <a href="https://developers.ploomes.com/"><img src="https://img.shields.io/badge/API%20Docs-developers.ploomes.com-blue?style=flat-square" alt="API docs" /></a>
    <a href="https://n8n.io"><img src="https://img.shields.io/badge/n8n-community%20node-ff6d5a?style=flat-square&logo=n8n" alt="n8n community node" /></a>
  </p>

  ---

  ## About

  This node lets you automate and integrate **Ploomes CRM** with hundreds of other apps in n8n. It provides full REST API coverage with native OData v4 support and visual builders for complex filters and expansions.

  ---

  ## Features

  | Feature | Description |
  |---|---|
  | **126 actions** | Full coverage of 50 API resources |
  | **Secure credentials** | Authentication via `User-Key` header with connection test |
  | **Optimized OData** | Smart defaults: `$top=1`, `$select=Id`, `$orderby=Id` |
  | **Visual Filter Builder** | Build `$filter` queries through the UI without writing OData |
  | **Visual Expand Builder** | Build `$expand` with nested `$select`, `$filter`, and `$expand` |
  | **Custom property filters** | Support for `OtherProperties/any(...)` via the UI |
  | **Raw mode** | Switch to free-text mode for advanced OData queries |
  | **Special actions** | Deal Win/Lose/Reopen, Task Finish, Quote Review |
  | **Custom API Call** | Generic resource for unmapped endpoints |

  ---

  ## Installation

  ### Via n8n (recommended)

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

  ### Via npm

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

  ### Local development

  ```bash
  git clone https://github.com/Ploomes/n8n-nodes-ploomes.git
  cd n8n-nodes-ploomes
  npm install
  npm run build
  npm link

  # In another terminal
  cd ~/.n8n/nodes
  npm link n8n-nodes-ploomes
  ```

  ---

  ## Credentials Setup

  1. In n8n, add the **Ploomes CRM** node to your workflow
  2. Click **Select Credential > Create new credential**
  3. Enter your Ploomes API **User-Key**
  4. Click **Save** — the connection will be tested automatically

  > To obtain your User-Key, go to your Ploomes account under **Settings > Integration > API**.
  > Documentation: [developers.ploomes.com](https://developers.ploomes.com/)

  ---

  ## Available Resources

  ### Core Entities

  | Resource | Operations |
  |---|---|
  | **Contact** | Get Many, Create, Update, Delete |
  | **Deal** | Get Many, Create, Update, Delete, Win, Lose, Reopen |
  | **Quote** | Get Many, Create, Update, Delete, Review |
  | **Task** | Get Many, Create, Update, Delete, Finish |
  | **Order** | Get Many, Create, Update, Delete |
  | **Product** | Get Many, Create, Update, Delete |
  | **Document** | Get Many, Create, Update, Delete |
  | **Interaction Record** | Get Many, Create, Update, Delete |

  ### Settings and Administration

  | Resource | Operations |
  |---|---|
  | **Account** | Get Many, Update |
  | **User** | Get Many, Create, Update |
  | **Role** | Get Many, Create |
  | **Team** | Get Many, Create, Update, Delete |
  | **Department** | Get Many, Create, Update, Delete |
  | **Field** | Get Many, Create, Update, Delete |
  | **Webhook** | Get Many, Create, Update, Delete |

  ### Contact Sub-resources

  | Resource | Operations |
  |---|---|
  | Contact Line of Business | CRUD |
  | Contact Number of Employees | CRUD |
  | Contact Origin | CRUD |
  | Contact Product | CRUD |
  | Contact Relationship | Get Many |
  | Contact Status | Get Many |
  | Contact Type | Get Many |

  ### Deal Sub-resources

  | Resource | Operations |
  |---|---|
  | Deal Pipeline | CRUD |
  | Deal Stage | Get Many |
  | Deal Status | Get Many |
  | Deal Loss Reason | Get Many |

  ### Product Sub-resources

  | Resource | Operations |
  |---|---|
  | Product Family | CRUD |
  | Product Group | CRUD |
  | Product Part | CRUD |

  ### Other Resources

  | Resource | Operations |
  |---|---|
  | City, Country, State | Get Many |
  | Currency | Get Many |
  | Document Template | Get Many |
  | Field Entity, Field Type | Get Many |
  | Field Options Table | Get Many, Create |
  | Order Stage | CRUD |
  | Phone Type | Get Many |
  | Quote Approval Status | Get Many |
  | Relative Date | Get Many |
  | Tag | CRUD |
  | Task Type, Task Email Reminder | Get Many |
  | User Profile | Get Many |
  | Webhook Action | Get Many |

  ---

  ## OData Filter Builder

  The node includes a visual builder that lets you create complex `$filter` queries without writing OData manually.

  ### Simple filters

  Add conditions with field, operator, and value:

  ```
  Field: Name    Operator: contains    Value: Ploomes    Type: String
  Field: Id      Operator: eq          Value: 12345      Type: Number
  ```

  Generated result:
  ```
  $filter=contains(Name,'Ploomes') and Id eq 12345
  ```

  ### Available operators

  | Operator | Description | Example |
  |---|---|---|
  | `eq` | Equal | `Id eq 123` |
  | `ne` | Not equal | `Status ne 'Closed'` |
  | `gt` / `ge` | Greater than / Greater than or equal | `Amount gt 1000` |
  | `lt` / `le` | Less than / Less than or equal | `Amount le 5000` |
  | `contains` | Contains text | `contains(Name,'test')` |
  | `startswith` | Starts with | `startswith(Name,'A')` |
  | `endswith` | Ends with | `endswith(Email,'.com')` |

  ### Custom property filters

  To filter by custom fields (`OtherProperties`), use the dedicated builder:

  ```
  FieldKey: contact_cf_123    Operator: eq    Value: test    Type: String
  ```

  Generated result:
  ```
  $filter=OtherProperties/any(p: p/FieldKey eq 'contact_cf_123' and p/StringValue eq 'test')
  ```

  ---

  ## OData Expand Builder

  Build complex `$expand` queries visually, with nesting support:

  ### Complex example via the UI

  The following expand can be built entirely through the visual builder:

  ```
  $expand=Stage($select=Id,Ordination,PipelineId,LastPipelineStage),
         Status,
         Owner($select=Id,Name),
         Creator($select=Id,Name),
         Pipeline($select=Id,ForbiddenStageReturn,MustPassAllStages,Stages;$expand=Stages),
         OtherProperties($expand=CurrencyValue;$filter=FieldId eq 40006914 or FieldId eq 40006915)
  ```

  ### How to configure

  1. **Expand Relations**: Add each relation with its optional `$select`
  2. **Expand Nested Filters**: Add filters inside expansions (e.g., filter `OtherProperties` by `FieldId`)

  ---

  ## OData Optimization Defaults

  All GET requests are automatically optimized:

  | Parameter | Default | Description |
  |---|---|---|
  | `$top` | `1` | Limit of returned records |
  | `$skip` | `0` | Offset for pagination |
  | `$select` | `Id` | Returned fields (reduces payload) |
  | `$orderby` | `Id` | Sort order of results |

  > All parameters are editable — adjust as needed for your automation.

  ---

  ## Usage Examples

  ### Fetch contacts with a filter

  ```
  Resource: Contact
  Operation: Get Many
  $top: 10
  $select: Id,Name,Email
  $filter: contains(Name,'Silva')
  ```

  ### Create a deal

  ```
  Resource: Deal
  Operation: Create
  Body: { "ContactId": 123, "Title": "New deal", "Amount": 5000 }
  ```

  ### Win a deal

  ```
  Resource: Deal
  Operation: Win
  ID: 456
  Body: { "WonAmount": 5000, "WonProductsAmount": 5000 }
  ```

  ### Fetch deals with a complex expand

  ```
  Resource: Deal
  Operation: Get Many
  $top: 50
  $select: Id,Title,Amount
  $expand: Stage($select=Id,Ordination),Owner($select=Id,Name),Pipeline($select=Id;$expand=Stages)
  ```

  ---

  ## API Limits

  | Limit | Value |
  |---|---|
  | Requests per minute | 120 per account |
  | Maximum payload size | 10 MB |
  | Records per page | 300 (Contacts, Deals, Cities, Tasks, Orders, Quotes) |

  ---

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build
  npm run build

  # Lint
  npm run lint

  # Format code
  npm run format

  # Watch mode
  npm run dev
  ```

  ---

  ## License

  [MIT](LICENSE)

  ---

  <p align="center">
    Made with &#10084;&#65039; by <a href="https://www.ploomes.com">Ploomes</a>
  </p>

ai_documentation_summary:
  {"purpose":"Integrates n8n with the Ploomes CRM API, providing broad REST/OData automation capabilities for CRM entities and administration. It supports visual builders for complex OData filters and expansions, plus custom API access for unmapped endpoints.","capabilities":["126 actions across 50 API resources","CRUD operations for core CRM entities such as Contacts, Deals, Quotes, Tasks, Orders, Products, Documents, and Interaction Records","Special deal and task actions including Win, Lose, Reopen, Finish, and Quote Review","Administration operations for accounts, users, roles, teams, departments, fields, and webhooks","Support for sub-resources like contact metadata, deal pipelines/stages/statuses, and product families/groups/parts","Full OData v4 support with optimized defaults for queries","Visual $filter builder with operators like eq, ne, gt, lt, contains, startswith, and endswith","Visual $expand builder with nested $select, $filter, and $expand support","Custom property filtering via OtherProperties/any(...)","Raw mode for advanced free-text OData queries"],"authentication":"User-Key header authentication with automatic connection test","commonUseCases":["Synchronizing contacts, deals, tasks, and products between Ploomes CRM and other apps in n8n","Automating deal lifecycle actions such as win, lose, reopen, and quote review","Building advanced CRM data queries with OData filters and expansions","Managing CRM administration data like users, teams, fields, and webhooks"],"limitations":["README does not list all actions in detail and is truncated","Custom API coverage may be needed for endpoints not mapped to dedicated resources"],"relatedNodes":["HTTP Request","Webhook"]}


node_type: n8n-nodes-joomreem-content.joomla
package_name: n8n-nodes-joomreem-content
display_name: Joomla Content (JoomReem)
description: Manage Joomla CMS content - by Mohamed Abdelaziz (JoomReem)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: mabdelaziz77
author_github_url: https://github.com/mabdelaziz77/
npm_package_name: n8n-nodes-joomreem-content
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.394Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "article",
      "options": [
        {
          "name": "Article",
          "value": "article"
        },
        {
          "name": "Category",
          "value": "category"
        },
        {
          "name": "Custom Field",
          "value": "field"
        },
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "Tag",
          "value": "tag"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an article",
          "description": "Create a new article"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an article",
          "description": "Delete a trashed article (must be in Trashed state first)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an article",
          "description": "Get an article by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many articles",
          "description": "Get many articles"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an article",
          "description": "Update an article"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "article"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a category",
          "description": "Create a new category"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a category",
          "description": "Delete a trashed category (must be in Trashed state first)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a category",
          "description": "Get a category by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many categories",
          "description": "Get many categories"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a category",
          "description": "Update a category"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "category"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a tag",
          "description": "Create a new tag"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a tag",
          "description": "Delete a trashed tag (must be in Trashed state first)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a tag",
          "description": "Get a tag by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tags",
          "description": "Get many tags"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a tag",
          "description": "Update a tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create Folder",
          "value": "createFolder",
          "action": "Create a folder",
          "description": "Create a new folder"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a file or folder",
          "description": "Delete a file or folder (Note: Due to Joomla API limitations with special characters in URLs, this operation may not work reliably. Consider using Joomla Media Manager for delete operations.)."
        },
        {
          "name": "List",
          "value": "list",
          "action": "List files and folders",
          "description": "List files and folders in a directory"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a file",
          "description": "Upload a file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a field",
          "description": "Create a new custom field"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a field",
          "description": "Delete a trashed custom field (must be in Trashed state first)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a field",
          "description": "Get a custom field by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many fields",
          "description": "Get many custom fields"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a field",
          "description": "Update a custom field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "field"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an article",
      "description": "Create a new article",
      "resource": "article"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an article",
      "description": "Delete a trashed article (must be in Trashed state first)",
      "resource": "article"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an article",
      "description": "Get an article by ID",
      "resource": "article"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many articles",
      "description": "Get many articles",
      "resource": "article"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an article",
      "description": "Update an article",
      "resource": "article"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a category",
      "description": "Create a new category",
      "resource": "category"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a category",
      "description": "Delete a trashed category (must be in Trashed state first)",
      "resource": "category"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a category",
      "description": "Get a category by ID",
      "resource": "category"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many categories",
      "description": "Get many categories",
      "resource": "category"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a category",
      "description": "Update a category",
      "resource": "category"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a tag",
      "description": "Create a new tag",
      "resource": "tag"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a tag",
      "description": "Delete a trashed tag (must be in Trashed state first)",
      "resource": "tag"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a tag",
      "description": "Get a tag by ID",
      "resource": "tag"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tags",
      "description": "Get many tags",
      "resource": "tag"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a tag",
      "description": "Update a tag",
      "resource": "tag"
    },
    {
      "name": "Create Folder",
      "value": "createFolder",
      "action": "Create a folder",
      "description": "Create a new folder",
      "resource": "media"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a file or folder",
      "description": "Delete a file or folder (Note: Due to Joomla API limitations with special characters in URLs, this operation may not work reliably. Consider using Joomla Media Manager for delete operations.).",
      "resource": "media"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List files and folders",
      "description": "List files and folders in a directory",
      "resource": "media"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a file",
      "description": "Upload a file",
      "resource": "media"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a field",
      "description": "Create a new custom field",
      "resource": "field"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a field",
      "description": "Delete a trashed custom field (must be in Trashed state first)",
      "resource": "field"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a field",
      "description": "Get a custom field by ID",
      "resource": "field"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many fields",
      "description": "Get many custom fields",
      "resource": "field"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a field",
      "description": "Update a custom field",
      "resource": "field"
    }
  ]

npm_readme:
  # n8n-nodes-joomreem-content

  This is an n8n community node by [JoomReem](https://joomreem.com) for [Joomla CMS](https://www.joomla.org/). It enables you to automate workflows that interact with your Joomla website through the Joomla Web Services API.

  **Developed by:** [Mohamed Abdelaziz](https://joomreem.com) (admin@joomreem.com)

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

  > **🤖 AI Agent Ready** — This node can be used as a tool by n8n AI Agents, enabling intelligent, conversational automation of your Joomla content.

  ## Features

  This node supports the following Joomla resources and operations:

  | Resource | Operations |
  |----------|------------|
  | **Article** | Create, Get, Get Many, Update, Delete |
  | **Category** | Create, Get, Get Many, Update, Delete |
  | **Custom Field** | Create, Get, Get Many, Update, Delete |
  | **Tag** | Create, Get, Get Many, Update, Delete |
  | **Media** | List Files, Upload, Create Folder, Delete |

  ### Article Features
  - **Tags Management** (Update): Structured tag handling with four modes:
    - **Replace All** — Replace all tags with a new selection
    - **Add** — Merge new tags into existing ones
    - **Remove** — Remove specific tags while preserving others
    - **Clear All** — Remove all tags
  - **Images** (Create & Update): Unified configuration for intro and fulltext images with path, alt text, and caption
    - Update supports per-image actions: **No Change**, **Set/Update**, or **Remove**
  - **Associations**: Link multilingual articles via the associations field
  - **Custom Fields**: Set custom field values when creating/updating articles
  - **Meta descriptions**: SEO-friendly meta data support

  ### Category Features
  - **Custom Fields**: Set custom field values for categories

  ### Custom Field Features
  Create and manage custom field definitions with type-specific options:

  | Field Type | Options |
  |------------|---------|
  | **Text** | Max Length |
  | **Textarea** | Rows, Columns, Max Length |
  | **Editor** | Show Buttons, Width, Height |
  | **Integer** | First Value, Last Value, Step |
  | **List** | Options, Multiple, Header/Placeholder |
  | **Radio** | Options |
  | **Checkboxes** | Options |
  | **Calendar** | Date Format, Show Time |
  | **URL** | Allowed Schemes, Relative URLs, Show URL |
  | **Media** | Directory, Preview |
  | **SQL** | Query, Header, Multiple |
  | **Color** | - |
  | **Email** | - |
  | **User** | - |

  ## Prerequisites

  - **Joomla 4.x or 5.x** - This node uses Joomla's native Web Services API which was introduced in Joomla 4.
  - **API Authentication Enabled** - Enable the "Web Services Joomla Token" plugin in your Joomla installation.
  - **API Token** - Generate an API token from a Super User account.

  ## Installation

  ### Community Nodes (Recommended)

  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Select **Install**
  3. Enter `n8n-nodes-joomreem-content` and confirm

  ### Manual Installation

  ```bash
  npm install n8n-nodes-joomreem-content
  ```

  ## Joomla Setup

  ### 1. Enable Web Services API

  1. Log in to your Joomla Administrator panel
  2. Go to **System → Plugins**
  3. Search for "Web Services" and enable the plugins for the content types you need:
     - **Web Services - Content** (for articles)
     - **Web Services - Tags** (for tags)
     - **Web Services - Media** (for media files)

  > **Note:** This node uses Joomla's API Token authentication (Bearer token), NOT Basic Auth. You do not need to enable the "Web Services - Basic Auth" plugin.

  ### 2. Generate API Token

  1. Go to **Users → Manage**
  2. Click on your Super User account
  3. Go to the **Joomla API Token** tab
  4. Click **Generate** to create a new token
  5. Copy the token immediately (it won't be shown again)

  ### 3. Configure n8n Credentials

  1. In n8n, go to **Credentials**
  2. Click **Add Credential**
  3. Search for "Joomla API"
  4. Enter:
     - **Site URL**: Your Joomla website URL (e.g., `https://example.com`)
     - **API Token**: The token you generated

  ## Usage Examples

  ### Create an Article with Images

  ```
  Resource: Article
  Operation: Create
  Title: My New Article
  Category: Blog (select from dropdown)
  Additional Fields:
    - State: Published
    - Full Article Text: <p>Full HTML content here...</p>
  Images:
    - Intro Image: images/my-image.jpg
    - Intro Image Alt: Alt text
    - Intro Image Caption: Caption text
  ```

  ### Update Article Tags (Add)

  ```
  Resource: Article
  Operation: Update
  Article ID: 11
  Tags:
    - Mode: Add
    - Tags: Tag A, Tag B (select from dropdown)
  ```

  ### Update Article Images

  ```
  Resource: Article
  Operation: Update
  Article ID: 11
  Images:
    - Intro Image Action: Set / Update
    - Intro Image: images/new-intro.jpg
    - Intro Alt Text: New alt text
    - Fulltext Image Action: No Change
  ```

  ### Link Multilingual Articles

  ```
  Resource: Article
  Operation: Update
  Article ID: 123
  Update Fields:
    - Associations: {"en-GB": "123", "ar-AA": "456"}
  ```

  ### Create a Custom Field

  ```
  Resource: Custom Field
  Operation: Create
  Context: Article
  Title: Rating
  Type: Integer
  First Value: 1
  Last Value: 5
  Step: 1
  ```

  ### Create a List Field with Options

  ```
  Resource: Custom Field
  Operation: Create
  Context: Article
  Title: Status
  Type: List
  Field Options: {"options": {"options0": {"name": "Draft", "value": "draft"}, "options1": {"name": "Review", "value": "review"}}}
  Header: "Select a status..."
  Multiple: false
  ```

  ## Compatibility

  | Joomla Version | Supported |
  |----------------|-----------|
  | 5.x | ✅ Yes |
  | 4.x | ✅ Yes |
  | 3.x | ❌ No (use com_api extension) |

  ## Known Limitations

  ### Delete Behavior

  Joomla requires items to be **trashed before permanently deleting**. The Delete operation will only work on items that are already in the Trashed state. To delete an item:
  1. First use Update to set `state = -2` (Trashed)
  2. Then use Delete to permanently remove it

  ### Media Delete Operation

  The Media delete operation may not work reliably due to Joomla API limitations. The Joomla Media API requires adapter paths like `local-images:/folder` which contain colons that cause URL routing issues. For deleting media files/folders, use the Joomla Media Manager UI.

  ## 🎬 Video Tutorials

  Check out these tutorials to see the node in action:

  - **[Bulk Edit Authors](https://youtu.be/W77OyrWgYFM)** – Automate bulk author updates across Joomla articles using n8n
  - **[Joomla Trash Cleaner](https://youtu.be/c8PKW7ldC4U)** – Automatically clean up trashed articles and categories in Joomla

  ## Resources

  - [Joomla Web Services API Documentation](https://docs.joomla.org/J4.x:Joomla_Core_APIs)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Report an Issue](https://github.com/mabdelaziz77/n8n-nodes-joomreem-content/issues)

  ## 🤝 Commercial Support & Services

  Need help automating your Joomla workflow?

  While this node is open-source and free to use, setting up a robust, self-hosted automation pipeline can be complex. I offer professional consulting services to help you build:

  * **Custom AI Content Factories:** Turn your YouTube channel or RSS feeds into a fully automated, multilingual blog.
  * **Complex Integrations:** Connect Joomla to CRMs, Payments (Stripe/PayPal), or Marketing tools via n8n.
  * **Self-Hosted Setup:** Secure installation of n8n on your own VPS (DigitalOcean/Hetzner) to save on monthly SaaS fees.

  **[Hire me on Upwork](https://www.upwork.com/freelancers/~0159bcc4ee43c02f66?mp_source=share)** to discuss your project.

  ---

  ## ❤️ Support the Project

  If this node saved you time or money, consider supporting its development. Your sponsorship helps maintain the code, add new features (like Custom Fields support), and keep it free for the community.

  [![Sponsor on GitHub](https://img.shields.io/badge/Sponsor-GitHub-pink?style=for-the-badge&logo=github)](https://github.com/sponsors/mabdelaziz77)
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-yellow?style=for-the-badge&logo=buy-me-a-coffee)](https://paypal.me/mabdelaziz77)

  ## License

  [MIT](LICENSE.md)

  ## Author

  **Mohamed Abdelaziz**  
  Website: [joomreem.com](https://joomreem.com)  
  Email: admin@joomreem.com

ai_documentation_summary:
  {"purpose":"This node automates interactions with Joomla CMS content through the Joomla Web Services API. It is designed to manage articles, categories, custom fields, tags, and media from n8n workflows and can also be used by n8n AI Agents.","capabilities":["Article create, get, get many, update, and delete","Category create, get, get many, update, and delete","Custom field create, get, get many, update, and delete","Tag create, get, get many, update, and delete","Media list files, upload, create folder, and delete","Article tag management with replace all, add, remove, and clear all modes","Intro and fulltext image handling for article create/update with set, update, remove, or no change actions","Multilingual article associations support","Custom field values on articles and categories","SEO meta description support"],"authentication":"Joomla API token (Bearer token) via the Web Services Joomla Token plugin; API authentication must be enabled in Joomla.","commonUseCases":["Create and update Joomla articles from automated content workflows","Manage article tags, images, and multilingual associations","Create Joomla custom fields and categories programmatically","Upload and organize media files in Joomla","Synchronize content between external systems and Joomla CMS"],"limitations":["Joomla 4.x or 5.x is required; Joomla 3.x is not supported","Delete operations only work on items already moved to the Trashed state; items must be updated to state = -2 before permanent deletion","The README notes a media delete limitation, but the details are truncated"],"relatedNodes":["Joomla API","HTTP Request"]}


node_type: n8n-nodes-rapiwa.rapiwa
package_name: n8n-nodes-rapiwa
display_name: Rapiwa
description: Send and verify WhatsApp numbers via Rapiwa API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: spagreen
author_github_url: https://github.com/rapiwa/
npm_package_name: n8n-nodes-rapiwa
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:34.395Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendWhatsAppMessage",
      "options": [
        {
          "name": "Send WhatsApp Message",
          "value": "sendWhatsAppMessage",
          "action": "Send whatsapp message",
          "description": "Send WhatsApp messages immediately"
        },
        {
          "name": "Verify WhatsApp Number",
          "value": "verifyWhatsAppNumber",
          "action": "Verify whatsapp number",
          "description": "Check if a WhatsApp number is valid or active"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send WhatsApp Message",
      "value": "sendWhatsAppMessage",
      "action": "Send whatsapp message",
      "description": "Send WhatsApp messages immediately"
    },
    {
      "name": "Verify WhatsApp Number",
      "value": "verifyWhatsAppNumber",
      "action": "Verify whatsapp number",
      "description": "Check if a WhatsApp number is valid or active"
    }
  ]

npm_readme:
  <p align="center">
    <img src="./nodes/Rapiwa/rapiwa-logo.svg" alt="Rapiwa Logo" width="120" height="120" />
  </p>

  <h1 align="center">n8n-nodes-rapiwa</h1>

  <p align="center">
    <b>Official Rapiwa integration for n8n</b>  
    <br />
    Send and verify WhatsApp messages, and receive incoming webhooks — all powered by the <a href="https://app.rapiwa.com" target="_blank">Rapiwa</a>.
  </p>

  <p align="center">
    <a href="https://www.npmjs.com/package/n8n-nodes-rapiwa">
      <img src="https://img.shields.io/npm/v/n8n-nodes-rapiwa.svg?style=flat-square" alt="npm version" />
    </a>
    <a href="https://github.com/rapiwa/n8n-nodes-rapiwa/blob/main/LICENSE.md">
      <img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License: MIT" />
    </a>
    <a href="https://community.n8n.io">
      <img src="https://img.shields.io/badge/n8n-community-green?style=flat-square" alt="n8n Community" />
    </a>
  </p>

  ---

  ## 📑 Table of Contents

  - [Overview](#overview)
  - [Features](#features)
  - [Installation](#installation)
  - [Credentials Setup](#credentials-setup)
  - [Common Use Cases](#common-use-cases)
  - [Node Operations](#node-operations)
    - [Send WhatsApp Message](#send-whatsapp-message)
    - [Verify WhatsApp Number](#verify-whatsapp-number)
  - [Trigger: Incoming Webhooks](#trigger-incoming-webhooks)
  - [Support](#support)
  - [License](#license)
  - [Resources](#resources)
  - [Running Locally](#running-locally)

  ---

  ## Overview

  **Rapiwa Node for n8n** allows you to integrate the [Rapiwa API](https://app.rapiwa.com) directly into your n8n workflows.

  You can:

  - Send automated WhatsApp messages (text, image, video, document)
  - Verify whether a number is active on WhatsApp
  - Trigger workflows from incoming Rapiwa webhooks

  This package follows the official [n8n custom node development standards](https://docs.n8n.io/integrations/creating-nodes/).

  ---

  ## Features

  - **Send WhatsApp Messages** — Send text or media messages directly via the Rapiwa API.
  - **Verify Numbers** — Check if a given phone number is active on WhatsApp.
  - **Incoming Webhooks** — Trigger n8n workflows when messages arrive.
  - **Secure Authentication** — Uses your Rapiwa API Key with Bearer Token.
  - **Error Handling** — Follows n8n’s native error behavior and `continueOnFail()` support.

  ---

  ## Installation

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

  To install this node in your n8n environment:

  ### From npm:

  ```bash
  npm install n8n-nodes-rapiwa
  ```

  ## Credentials Setup

  Before using the node, you must configure your Rapiwa API Key:

  1. In n8n, navigate to **Credentials** → **New** → **Rapiwa API.**
  2. Enter your API key (found in your [Rapiwa Dashboard](https://app.rapiwa.com) )
  3. Click Test — it should verify successfully.

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

  ---

  ## Common Use Cases

  - **Smart Support Automation:** Instantly respond to customers, automate FAQs, and collect feedback via WhatsApp.
  - **Instant Business Alerts:** Send real-time updates, reminders, and critical notifications directly to users.
  - **AI Chat Assistants:** Handle inquiries, returns, and support 24/7 with AI-driven bots.
  - **Lead Nurturing:** Automate personalized follow-ups and turn prospects into customers seamlessly.
  - **E-Commerce Updates:** Send order, shipping, and delivery alerts to boost customer engagement.
  - **Analytics & Insights:** Sync WhatsApp data with your CRM for real-time performance tracking.

  ---

  ## Node Operations

  ### 1\. Send WhatsApp Message

  Send WhatsApp messages to your users directly from n8n.

  **Fields:**

  - **Number** → Recipient’s number (e.g. 88017XXXXXXXX)
  - **Product Operation** → Choose between Welcome Message or Promotional Offer
  - **Message Type** → Text, Image, Video, or Document
  - **Message** → Text body or caption (for media)
  - **Media URL** → Public link for the media file

  **Example use case:**

  - Triggered when a new order is placed
  - Sends a WhatsApp confirmation message to the customer

  For detailed documentation, visit [Rapiwa Integration with n8n](https://docs.rapiwa.com/n8n.html)

  ### 2\. Verify WhatsApp Number

  Check if a given number is registered on WhatsApp before sending messages.

  **Fields:**

  - **Number** → Recipient’s number (e.g. 88017XXXXXXXX)

  The node will return:

  - exists: true/false
  - jid (WhatsApp unique ID)
  - message (response description)

  **Example use case:**

  - Validate WhatsApp numbers before sending campaigns
  - Clean your contact list automatically

  For detailed documentation, visit [Rapiwa Integration with n8n](https://docs.rapiwa.com/n8n.html)

  ---

  ## Trigger: Incoming Webhooks

  **Rapiwa Trigger:** Incoming Webhooks allows you to **receive incoming WhatsApp messages** directly into n8n workflows.

  Use this to:

  - Build chatbots
  - Capture inbound messages for automation
  - Log WhatsApp replies in databases or CRMs

  ---

  ## Support

  For technical support and assistance:

  - **Email Support**: Contact our dedicated support team
  - **Implementation Help**: Get expert assistance with workflows

  For enterprise-level support or custom solutions, contact our solution engineers at support@rapiwa.com

  ---

  ## License

  [MIT](LICENSE.md)

  ---

  ## Resources

  - [Rapiwa Website](https://rapiwa.com)
  - [n8n Documentation](https://docs.n8n.io)
  - [Rapiwa n8n Overview](https://docs.rapiwa.com/n8n.html)

  ---

  ## Running Locally

  To run and test this node on your local machine:

  1. **Clone the repository**
     ```bash
     git clone https://github.com/rapiwa/n8n-nodes-rapiwa
     cd n8n-nodes-rapiwa
     ```
  2. **Install dependencies**
     ```bash
     npm install
     ```
  3. **Build the project**

     ```bash
     npm run build
     ```
  4. **Run Tests:**
     ```bash
     npm run test
     ```
     > **Note:** Unit tests are included to ensure code quality. Please run tests before submitting a pull request.
  5. **Install the node into your local n8n instance:**
     ```bash
     npm link n8n-nodes-rapiwa
     ```
  6. **Start n8n:**
     ```bash
     n8n start
     ```
  7. **Test your node**
     - Open n8n in your browser (usually at `http://localhost:5678`)
     - Create a workflow and add your custom node to test its functionality

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

  ---

  ### Reporting Issues

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

  ### Code of Conduct

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

ai_documentation_summary:
  {"purpose":"Rapiwa is an n8n integration for sending and verifying WhatsApp messages through the Rapiwa API. It also supports an incoming webhook trigger to receive WhatsApp messages into workflows.","capabilities":["Send WhatsApp messages","Send media messages (image, video, document)","Verify whether a phone number is active on WhatsApp","Trigger workflows from incoming WhatsApp webhooks","Return verification details such as exists, jid, and message"],"authentication":"Rapiwa API key required, used as a Bearer token","commonUseCases":["Send order, shipping, or delivery notifications via WhatsApp","Validate WhatsApp numbers before sending campaigns","Build chatbots and automate inbound WhatsApp replies","Create customer support or lead nurturing workflows"],"limitations":["README only mentions text, image, video, and document message types","Incoming webhook support is described for receiving WhatsApp messages, but setup details are not included in the excerpt"],"relatedNodes":[]}


node_type: n8n-nodes-rapiwa.rapiwaTrigger
package_name: n8n-nodes-rapiwa
display_name: Rapiwa Incoming message Trigger
description: Starts the workflow when Rapiwa sends a webhook
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: spagreen
author_github_url: https://github.com/rapiwa/
npm_package_name: n8n-nodes-rapiwa
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:34.396Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  <p align="center">
    <img src="./nodes/Rapiwa/rapiwa-logo.svg" alt="Rapiwa Logo" width="120" height="120" />
  </p>

  <h1 align="center">n8n-nodes-rapiwa</h1>

  <p align="center">
    <b>Official Rapiwa integration for n8n</b>  
    <br />
    Send and verify WhatsApp messages, and receive incoming webhooks — all powered by the <a href="https://app.rapiwa.com" target="_blank">Rapiwa</a>.
  </p>

  <p align="center">
    <a href="https://www.npmjs.com/package/n8n-nodes-rapiwa">
      <img src="https://img.shields.io/npm/v/n8n-nodes-rapiwa.svg?style=flat-square" alt="npm version" />
    </a>
    <a href="https://github.com/rapiwa/n8n-nodes-rapiwa/blob/main/LICENSE.md">
      <img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="License: MIT" />
    </a>
    <a href="https://community.n8n.io">
      <img src="https://img.shields.io/badge/n8n-community-green?style=flat-square" alt="n8n Community" />
    </a>
  </p>

  ---

  ## 📑 Table of Contents

  - [Overview](#overview)
  - [Features](#features)
  - [Installation](#installation)
  - [Credentials Setup](#credentials-setup)
  - [Common Use Cases](#common-use-cases)
  - [Node Operations](#node-operations)
    - [Send WhatsApp Message](#send-whatsapp-message)
    - [Verify WhatsApp Number](#verify-whatsapp-number)
  - [Trigger: Incoming Webhooks](#trigger-incoming-webhooks)
  - [Support](#support)
  - [License](#license)
  - [Resources](#resources)
  - [Running Locally](#running-locally)

  ---

  ## Overview

  **Rapiwa Node for n8n** allows you to integrate the [Rapiwa API](https://app.rapiwa.com) directly into your n8n workflows.

  You can:

  - Send automated WhatsApp messages (text, image, video, document)
  - Verify whether a number is active on WhatsApp
  - Trigger workflows from incoming Rapiwa webhooks

  This package follows the official [n8n custom node development standards](https://docs.n8n.io/integrations/creating-nodes/).

  ---

  ## Features

  - **Send WhatsApp Messages** — Send text or media messages directly via the Rapiwa API.
  - **Verify Numbers** — Check if a given phone number is active on WhatsApp.
  - **Incoming Webhooks** — Trigger n8n workflows when messages arrive.
  - **Secure Authentication** — Uses your Rapiwa API Key with Bearer Token.
  - **Error Handling** — Follows n8n’s native error behavior and `continueOnFail()` support.

  ---

  ## Installation

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

  To install this node in your n8n environment:

  ### From npm:

  ```bash
  npm install n8n-nodes-rapiwa
  ```

  ## Credentials Setup

  Before using the node, you must configure your Rapiwa API Key:

  1. In n8n, navigate to **Credentials** → **New** → **Rapiwa API.**
  2. Enter your API key (found in your [Rapiwa Dashboard](https://app.rapiwa.com) )
  3. Click Test — it should verify successfully.

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

  ---

  ## Common Use Cases

  - **Smart Support Automation:** Instantly respond to customers, automate FAQs, and collect feedback via WhatsApp.
  - **Instant Business Alerts:** Send real-time updates, reminders, and critical notifications directly to users.
  - **AI Chat Assistants:** Handle inquiries, returns, and support 24/7 with AI-driven bots.
  - **Lead Nurturing:** Automate personalized follow-ups and turn prospects into customers seamlessly.
  - **E-Commerce Updates:** Send order, shipping, and delivery alerts to boost customer engagement.
  - **Analytics & Insights:** Sync WhatsApp data with your CRM for real-time performance tracking.

  ---

  ## Node Operations

  ### 1\. Send WhatsApp Message

  Send WhatsApp messages to your users directly from n8n.

  **Fields:**

  - **Number** → Recipient’s number (e.g. 88017XXXXXXXX)
  - **Product Operation** → Choose between Welcome Message or Promotional Offer
  - **Message Type** → Text, Image, Video, or Document
  - **Message** → Text body or caption (for media)
  - **Media URL** → Public link for the media file

  **Example use case:**

  - Triggered when a new order is placed
  - Sends a WhatsApp confirmation message to the customer

  For detailed documentation, visit [Rapiwa Integration with n8n](https://docs.rapiwa.com/n8n.html)

  ### 2\. Verify WhatsApp Number

  Check if a given number is registered on WhatsApp before sending messages.

  **Fields:**

  - **Number** → Recipient’s number (e.g. 88017XXXXXXXX)

  The node will return:

  - exists: true/false
  - jid (WhatsApp unique ID)
  - message (response description)

  **Example use case:**

  - Validate WhatsApp numbers before sending campaigns
  - Clean your contact list automatically

  For detailed documentation, visit [Rapiwa Integration with n8n](https://docs.rapiwa.com/n8n.html)

  ---

  ## Trigger: Incoming Webhooks

  **Rapiwa Trigger:** Incoming Webhooks allows you to **receive incoming WhatsApp messages** directly into n8n workflows.

  Use this to:

  - Build chatbots
  - Capture inbound messages for automation
  - Log WhatsApp replies in databases or CRMs

  ---

  ## Support

  For technical support and assistance:

  - **Email Support**: Contact our dedicated support team
  - **Implementation Help**: Get expert assistance with workflows

  For enterprise-level support or custom solutions, contact our solution engineers at support@rapiwa.com

  ---

  ## License

  [MIT](LICENSE.md)

  ---

  ## Resources

  - [Rapiwa Website](https://rapiwa.com)
  - [n8n Documentation](https://docs.n8n.io)
  - [Rapiwa n8n Overview](https://docs.rapiwa.com/n8n.html)

  ---

  ## Running Locally

  To run and test this node on your local machine:

  1. **Clone the repository**
     ```bash
     git clone https://github.com/rapiwa/n8n-nodes-rapiwa
     cd n8n-nodes-rapiwa
     ```
  2. **Install dependencies**
     ```bash
     npm install
     ```
  3. **Build the project**

     ```bash
     npm run build
     ```
  4. **Run Tests:**
     ```bash
     npm run test
     ```
     > **Note:** Unit tests are included to ensure code quality. Please run tests before submitting a pull request.
  5. **Install the node into your local n8n instance:**
     ```bash
     npm link n8n-nodes-rapiwa
     ```
  6. **Start n8n:**
     ```bash
     n8n start
     ```
  7. **Test your node**
     - Open n8n in your browser (usually at `http://localhost:5678`)
     - Create a workflow and add your custom node to test its functionality

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

  ---

  ### Reporting Issues

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

  ### Code of Conduct

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

ai_documentation_summary:
  {"purpose":"Triggers an n8n workflow when Rapiwa sends an incoming WhatsApp webhook. It is part of the official Rapiwa integration for handling WhatsApp message automation and inbound message events.","capabilities":["Starts workflows from incoming Rapiwa webhooks","Receives incoming WhatsApp messages into n8n","Can be used to capture inbound messages for automation, chatbots, and logging"],"authentication":"Rapiwa API key required (Bearer token)","commonUseCases":["Build chatbots that respond to incoming WhatsApp messages","Capture inbound WhatsApp messages for automation workflows","Log WhatsApp replies into databases or CRMs"],"limitations":["This is a trigger node only; it does not send messages or verify numbers","Requires a configured Rapiwa API key in n8n credentials"],"relatedNodes":["Rapiwa Send WhatsApp Message","Rapiwa Verify WhatsApp Number"]}


node_type: n8n-nodes-smskub.Smskub
package_name: n8n-nodes-smskub
display_name: SMSKUB
description: Send SMS messages and manage OTP via SMSKUB API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: smskub.com
author_github_url: https://github.com/thanalucks-smskub/
npm_package_name: n8n-nodes-smskub
npm_version: 1.0.19
community_fetched_at: 2026-07-14T14:40:34.397Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sms",
      "options": [
        {
          "name": "SMS",
          "value": "sms",
          "description": "Send SMS messages"
        },
        {
          "name": "OTP",
          "value": "otp",
          "description": "Request and verify OTP codes"
        }
      ],
      "description": "The resource to operate on",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send Quick Message",
          "value": "send",
          "action": "Send a quick SMS message",
          "description": "Send a quick SMS message to a phone number"
        }
      ],
      "description": "The operation to perform",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "request",
      "options": [
        {
          "name": "Request OTP",
          "value": "request",
          "action": "Request an OTP",
          "description": "Send an OTP code to a phone number"
        },
        {
          "name": "Verify OTP",
          "value": "verify",
          "action": "Verify an OTP",
          "description": "Verify an OTP code entered by the user"
        }
      ],
      "description": "The operation to perform",
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "otp"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send Quick Message",
      "value": "send",
      "action": "Send a quick SMS message",
      "description": "Send a quick SMS message to a phone number",
      "resource": "sms"
    },
    {
      "name": "Request OTP",
      "value": "request",
      "action": "Request an OTP",
      "description": "Send an OTP code to a phone number",
      "resource": "otp"
    },
    {
      "name": "Verify OTP",
      "value": "verify",
      "action": "Verify an OTP",
      "description": "Verify an OTP code entered by the user",
      "resource": "otp"
    }
  ]

npm_readme:
  # n8n-nodes-smskub  
  Official SMSKUB Node for n8n  
  Send SMS, Request OTP, and Verify OTP with SMSKUB API.

  <p align="center">
    <img src="https://raw.githubusercontent.com/thanalucks-smskub/n8n-nodes-smskub/main/nodes/Smskub/smskub.svg" width="100" />

  </p>

  ---

  ## 📌 Features

  This n8n node provides seamless access to **SMSKUB SMS & OTP API**, supporting:

  - 📤 Send Quick SMS Message  
  - 🔐 Request OTP  
  - ✅ Verify OTP  
  - 🔄 Dynamic Sender List (loadOptions)  
  - 🔑 Credential Testing (built-in)  

  This node is fully compatible with **n8n v1.120+** and **n8n Cloud**.

  ---

  ## 🚀 Installation

  ### Community Node (Self-hosted n8n)
  Run:

  ```bash
  npm install n8n-nodes-smskub
  ```

  Then restart n8n.

  ### Verified Node (n8n Cloud)
  Once approved by n8n, this node will appear in:

  ```
  Settings → Community Nodes → Search "SMSKUB"
  ```

  ---

  ## 🔑 Credentials Setup

  Go to:

  ```
  n8n → Credentials → New → SMSKUB API
  ```

  Enter your:

  - **API Key**

  Then click **"Test"**.  
  You should see:

  ```
  ✓ Connection successful!
  ```

  ---

  ## 📤 Example: Send SMS

  1. Add **SMSKUB** node  
  2. Select **Resource:** `SMS`  
  3. Select **Operation:** `Send Quick Message`  
  4. Fill:

  - **Phone Number:** `66812345678`  
  - **Sender Name:** (loaded automatically)  
  - **Message:** `"Your OTP is 123456"`  

  Example workflow JSON:

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "sms",
          "operation": "send",
          "msgPhone": "66812345678",
          "msgFrom": "SENDER",
          "msgText": "Hello from SMSKUB"
        },
        "id": "SMSKUB1",
        "name": "SMSKUB",
        "type": "n8n-nodes-smskub.Smskub",
        "typeVersion": 1,
        "position": [500, 300]
      }
    ]
  }
  ```

  ---

  ## 🔐 Example: Request OTP

  1. Add **SMSKUB** node  
  2. Select **Resource:** `OTP`  
  3. Select **Operation:** `Request OTP`  
  4. Fill:

  - **Phone Number**
  - **Project ID**
  - **OTP Message** (optional)

  ---

  ## 🔎 Example: Verify OTP

  1. Add **SMSKUB** node  
  2. Select **Resource:** `OTP`  
  3. Select **Operation:** `Verify OTP`  
  4. Fill:

  - **OTP Code**  
  - **Project ID**  
  - **Phone Number**  

  ---

  ## 📚 API Documentation

  Full API reference:  
  https://documenter.getpostman.com/view/9887776/2sAYXCjyAF

  ---

  ## 🧩 Node Files Included

  | File | Description |
  |------|-------------|
  | `Smskub.node.ts` | Main node logic |
  | `SmskubApi.credentials.ts` | Credential type with authenticate method |
  | `smskub.svg` | Node icon |
  | `package.json` | Node metadata |
  | `gulpfile.js` | Icon build pipeline |

  ---

  ## 📄 License

  MIT License (Same as n8n community nodes)

  ---

  ## ❤️ Support

  For help with API usage:  
  https://sms-kub.com  
  Or contact SMSKUB support team.

ai_documentation_summary:
  {"purpose":"Provides access to the SMSKUB SMS & OTP API for sending SMS messages and handling one-time password workflows in n8n.","capabilities":["Send quick SMS messages","Request OTP codes","Verify OTP codes","Load sender names dynamically","Test credentials from within n8n"],"authentication":"API key required via SMSKUB API credentials","commonUseCases":["Sending transactional or notification SMS messages","Implementing OTP-based login or verification flows","Validating user-entered OTP codes in automated workflows"],"limitations":["Compatible with n8n v1.120+ and n8n Cloud","Uses SMSKUB-specific API and credential type"],"relatedNodes":[]}


node_type: n8n-nodes-biala-lista-vat.bialaListaVat
package_name: n8n-nodes-biala-lista-vat
display_name: Biala Lista VAT
description: Verify Polish VAT taxpayers and bank accounts via the White List (Biala Lista)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: michal.ploneczka
author_github_url: https://github.com/michalploneczka/n8n-polish-nodes.git
npm_package_name: n8n-nodes-biala-lista-vat
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.399Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "subject",
      "options": [
        {
          "name": "Subject",
          "value": "subject"
        },
        {
          "name": "Verification",
          "value": "verification"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchByNip",
      "options": [
        {
          "name": "Search by Bank Account",
          "value": "searchByBankAccount",
          "action": "Search subject by bank account",
          "description": "Find VAT taxpayer by bank account number"
        },
        {
          "name": "Search by Bank Accounts (Batch)",
          "value": "searchByBankAccounts",
          "action": "Batch search subjects by bank accounts",
          "description": "Batch search up to 30 bank account numbers"
        },
        {
          "name": "Search by NIP",
          "value": "searchByNip",
          "action": "Search subject by NIP",
          "description": "Search VAT taxpayer by NIP number"
        },
        {
          "name": "Search by NIPs (Batch)",
          "value": "searchByNips",
          "action": "Batch search subjects by NIP numbers",
          "description": "Batch search up to 30 NIP numbers"
        },
        {
          "name": "Search by REGON",
          "value": "searchByRegon",
          "action": "Search subject by REGON",
          "description": "Search VAT taxpayer by REGON number"
        },
        {
          "name": "Search by REGONs (Batch)",
          "value": "searchByRegons",
          "action": "Batch search subjects by REGON numbers",
          "description": "Batch search up to 30 REGON numbers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subject"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkNipAccount",
      "options": [
        {
          "name": "Check NIP + Bank Account",
          "value": "checkNipAccount",
          "action": "Check NIP and bank account match",
          "description": "Verify if bank account belongs to NIP holder"
        },
        {
          "name": "Check REGON + Bank Account",
          "value": "checkRegonAccount",
          "action": "Check REGON and bank account match",
          "description": "Verify if bank account belongs to REGON holder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "verification"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search by Bank Account",
      "value": "searchByBankAccount",
      "action": "Search subject by bank account",
      "description": "Find VAT taxpayer by bank account number",
      "resource": "subject"
    },
    {
      "name": "Search by Bank Accounts (Batch)",
      "value": "searchByBankAccounts",
      "action": "Batch search subjects by bank accounts",
      "description": "Batch search up to 30 bank account numbers",
      "resource": "subject"
    },
    {
      "name": "Search by NIP",
      "value": "searchByNip",
      "action": "Search subject by NIP",
      "description": "Search VAT taxpayer by NIP number",
      "resource": "subject"
    },
    {
      "name": "Search by NIPs (Batch)",
      "value": "searchByNips",
      "action": "Batch search subjects by NIP numbers",
      "description": "Batch search up to 30 NIP numbers",
      "resource": "subject"
    },
    {
      "name": "Search by REGON",
      "value": "searchByRegon",
      "action": "Search subject by REGON",
      "description": "Search VAT taxpayer by REGON number",
      "resource": "subject"
    },
    {
      "name": "Search by REGONs (Batch)",
      "value": "searchByRegons",
      "action": "Batch search subjects by REGON numbers",
      "description": "Batch search up to 30 REGON numbers",
      "resource": "subject"
    },
    {
      "name": "Check NIP + Bank Account",
      "value": "checkNipAccount",
      "action": "Check NIP and bank account match",
      "description": "Verify if bank account belongs to NIP holder",
      "resource": "verification"
    },
    {
      "name": "Check REGON + Bank Account",
      "value": "checkRegonAccount",
      "action": "Check REGON and bank account match",
      "description": "Verify if bank account belongs to REGON holder",
      "resource": "verification"
    }
  ]

npm_readme:
  # n8n-nodes-biala-lista-vat

  n8n community node for **Biala Lista VAT** (White List of VAT Taxpayers) -- verify Polish VAT taxpayers and bank accounts via the official Ministry of Finance API.

  This is a **public API** that requires **no credentials** or registration.

  ## Operations

  ### Subject (Search)

  | Operation | Description |
  |-----------|-------------|
  | Search by NIP | Search VAT taxpayer by NIP number |
  | Search by NIPs (Batch) | Batch search up to 30 NIP numbers |
  | Search by REGON | Search VAT taxpayer by REGON number |
  | Search by REGONs (Batch) | Batch search up to 30 REGON numbers |
  | Search by Bank Account | Find VAT taxpayer by bank account number |
  | Search by Bank Accounts (Batch) | Batch search up to 30 bank account numbers |

  ### Verification (Check)

  | Operation | Description |
  |-----------|-------------|
  | Check NIP + Bank Account | Verify if a bank account belongs to a NIP holder |
  | Check REGON + Bank Account | Verify if a bank account belongs to a REGON holder |

  ## Important Notes

  ### Date Parameter

  The `date` parameter is **required** on every request (format: `YYYY-MM-DD`). The API returns the taxpayer status as of the specified date.

  ### Bank Account Format

  Bank account numbers must be in **NRB format** -- 26 digits, no spaces, no dashes.

  Example: `12345678901234567890123456`

  ### Batch Operations

  Batch operations accept a maximum of **30 comma-separated values** (no spaces between values).

  Example: `5213017228,1234567890,9876543210`

  ### VAT Status Values

  The `statusVat` field in responses can have the following values:

  | Value | Meaning |
  |-------|---------|
  | `Czynny` | Active VAT taxpayer |
  | `Zwolniony` | Exempt from VAT |
  | `Niezarejestrowany` | Not registered for VAT |

  ### Rate Limits

  The API enforces daily rate limits (reset at 00:00 CET):

  | Endpoint Type | Daily Limit |
  |---------------|-------------|
  | Search (`/api/search/...`) | 10 requests/day |
  | Check (`/api/check/...`) | 5,000 requests/day |

  Use batch operations to maximize efficiency within the search limit.

  ## Installation

  ### In n8n (Community Nodes)

  1. Go to **Settings > Community Nodes**
  2. Select **Install**
  3. Enter `n8n-nodes-biala-lista-vat`
  4. Agree to the risks and click **Install**

  ### Manual Installation

  ```bash
  cd ~/.n8n/custom
  npm install n8n-nodes-biala-lista-vat
  ```

  Then restart n8n.

  ## API Documentation

  - [Ministry of Finance - API Wykazu Podatnikow VAT](https://www.gov.pl/web/kas/api-wykazu-podatnikow-vat)

  ## License

  [MIT](https://github.com/michalploneczka/n8n-polish-nodes/blob/main/LICENSE)

ai_documentation_summary:
  {"purpose":"Verifies Polish VAT taxpayers and bank accounts using the official Ministry of Finance White List (Biala Lista VAT) API. It can search taxpayer records by NIP, REGON, or bank account and check whether a bank account belongs to a specific taxpayer.","capabilities":["Search by NIP","Search by NIPs (batch, up to 30 values)","Search by REGON","Search by REGONs (batch, up to 30 values)","Search by Bank Account","Search by Bank Accounts (batch, up to 30 values)","Check NIP + Bank Account","Check REGON + Bank Account"],"authentication":"None; public API with no credentials or registration required","commonUseCases":["Validating whether a Polish company is registered as a VAT taxpayer","Verifying if a bank account belongs to a given NIP or REGON holder","Batch checking multiple taxpayer identifiers or bank accounts in workflows","Confirming VAT status for compliance or onboarding processes"],"limitations":["A date parameter is required for every request in YYYY-MM-DD format","Bank account numbers must be in NRB format: exactly 26 digits with no spaces or dashes","Batch operations are limited to 30 comma-separated values","Search endpoints are limited to 10 requests per day","Check endpoints are limited to 5,000 requests per day"],"relatedNodes":[]}


node_type: n8n-nodes-ceidg.ceidg
package_name: n8n-nodes-ceidg
display_name: CEIDG
description: Look up Polish companies in the CEIDG registry (dane.biznes.gov.pl)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: michal.ploneczka
author_github_url: https://github.com/michalploneczka/n8n-polish-nodes.git
npm_package_name: n8n-nodes-ceidg
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:34.400Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "company",
      "options": [
        {
          "name": "Company",
          "value": "company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "searchByNip",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a company",
          "description": "Get a company by CEIDG entry ID"
        },
        {
          "name": "Search by Name",
          "value": "searchByName",
          "action": "Search companies by name",
          "description": "Search for companies by name"
        },
        {
          "name": "Search by NIP",
          "value": "searchByNip",
          "action": "Search company by NIP",
          "description": "Search for a company by NIP number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a company",
      "description": "Get a company by CEIDG entry ID",
      "resource": "company"
    },
    {
      "name": "Search by Name",
      "value": "searchByName",
      "action": "Search companies by name",
      "description": "Search for companies by name",
      "resource": "company"
    },
    {
      "name": "Search by NIP",
      "value": "searchByNip",
      "action": "Search company by NIP",
      "description": "Search for a company by NIP number",
      "resource": "company"
    }
  ]

npm_readme:
  # n8n-nodes-ceidg

  [![npm](https://img.shields.io/npm/v/n8n-nodes-ceidg)](https://www.npmjs.com/package/n8n-nodes-ceidg)

  n8n community node for looking up Polish companies in **CEIDG** (Centralna Ewidencja i Informacja o Dzialalnosci Gospodarczej) -- the Polish government business registry at [dane.biznes.gov.pl](https://dane.biznes.gov.pl).

  This node lets you search for sole proprietorships registered in Poland by NIP (tax ID) or company name, and retrieve full details of any CEIDG entry.

  ## Operations

  | Resource | Operation      | Description                             |
  | -------- | -------------- | --------------------------------------- |
  | Company  | Search by NIP  | Look up a company by NIP (tax ID)       |
  | Company  | Search by Name | Search for companies by name            |
  | Company  | Get            | Get full details of a CEIDG entry by ID |

  ## Credentials

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

  1. Register for a free API key at [dane.biznes.gov.pl](https://dane.biznes.gov.pl)
  2. In n8n, create a new **CEIDG API** credential
  3. Paste your API key into the **API Token** field

  ## Installation

  ### Community Nodes (recommended)

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

  ### Manual installation

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

  Restart n8n after installation.

  ## Usage

  1. Add the **CEIDG** node to your workflow
  2. Select a credential with your API key
  3. Choose an operation:
     - **Search by NIP** -- enter a 10-digit NIP number (e.g. `1234567890`) to find the matching company
     - **Search by Name** -- enter a full or partial company name to search
     - **Get** -- enter a CEIDG entry ID to retrieve full company details

  The node returns JSON data including company name, address, registration dates, PKD codes, and current status.

  ## Example Workflow

  Below is a minimal workflow that looks up a company by NIP:

  ```json
  {
    "nodes": [
      {
        "parameters": {
          "resource": "company",
          "operation": "searchByNip",
          "nip": "1234567890"
        },
        "name": "CEIDG Lookup",
        "type": "n8n-nodes-ceidg.ceidg",
        "typeVersion": 1,
        "position": [450, 300]
      }
    ]
  }
  ```

  ## API Documentation

  Full API reference: [https://dane.biznes.gov.pl/api](https://dane.biznes.gov.pl/api)

  ## License

  [MIT](https://opensource.org/licenses/MIT)

  ## Author

  [Michal Ploneczka](https://codersgroup.pl) (michal.ploneczka@gmail.com)

ai_documentation_summary:
  {"purpose":"This node looks up Polish companies in the CEIDG government registry at dane.biznes.gov.pl. It can search sole proprietorships by NIP or name and fetch full details for a CEIDG entry.","capabilities":["Search companies by NIP (tax ID)","Search companies by name","Get full details of a CEIDG entry by ID","Return company data such as name, address, registration dates, PKD codes, and current status"],"authentication":"API key required (CEIDG API credential with API Token)","commonUseCases":["Validate or enrich a Polish sole proprietorship using a NIP number","Find businesses by partial or full company name","Retrieve detailed registry information for an existing CEIDG entry"],"limitations":["Designed for Polish CEIDG sole proprietorship records only","Search by NIP expects a 10-digit NIP number"],"relatedNodes":[]}


node_type: n8n-nodes-dageno-ai.dagenoApi
package_name: n8n-nodes-dageno-ai
display_name: Dageno API
description: Interact with Dageno API for GEO analysis and insights
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: dudulhc
author_github_url: https://github.com/dageno-agents/n8n-nodes-dageno.git
npm_package_name: n8n-nodes-dageno-ai
npm_version: 1.2.12
community_fetched_at: 2026-07-14T14:40:34.401Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "brand",
      "options": [
        {
          "name": "Brand",
          "value": "brand"
        },
        {
          "name": "Citation",
          "value": "citation"
        },
        {
          "name": "GEO Analysis",
          "value": "geoAnalysis"
        },
        {
          "name": "Keyword",
          "value": "keyword"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Prompt",
          "value": "prompt"
        },
        {
          "name": "SEO",
          "value": "seo"
        },
        {
          "name": "Topic",
          "value": "topic"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Brand Info",
          "value": "get",
          "action": "Get brand base information"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "brand"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listDomains",
      "options": [
        {
          "name": "List Domains",
          "value": "listDomains",
          "action": "List citation domains"
        },
        {
          "name": "List Domains by Prompt",
          "value": "listDomainsByPrompt",
          "action": "List citation domains by prompt"
        },
        {
          "name": "List URLs",
          "value": "listUrls",
          "action": "List citation URLs"
        },
        {
          "name": "List URLs by Prompt",
          "value": "listUrlsByPrompt",
          "action": "List citation URLs by prompt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "citation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "execute",
      "options": [
        {
          "name": "Execute Query",
          "value": "execute",
          "action": "Execute GEO analysis query"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "geoAnalysis"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getVolume",
      "options": [
        {
          "name": "Get Keyword Volume",
          "value": "getVolume",
          "action": "Get keyword volume"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "keyword"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "content",
      "options": [
        {
          "name": "List Backlink Opportunity",
          "value": "backlink",
          "action": "List backlink opportunity"
        },
        {
          "name": "List Community Opportunity",
          "value": "community",
          "action": "List community opportunity"
        },
        {
          "name": "List Content Opportunity",
          "value": "content",
          "action": "List content opportunity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Batch Create Prompt",
          "value": "batchCreate",
          "action": "Batch create prompt"
        },
        {
          "name": "Batch Delete Prompt",
          "value": "batchDelete",
          "action": "Batch delete prompt"
        },
        {
          "name": "Batch Get Prompt",
          "value": "batchGet",
          "action": "Batch get prompt"
        },
        {
          "name": "Batch Update Prompt",
          "value": "batchUpdate",
          "action": "Batch update prompt"
        },
        {
          "name": "Get Response Detail",
          "value": "getResponseDetail",
          "action": "Get response detail by prompt"
        },
        {
          "name": "List Prompt",
          "value": "list",
          "action": "List prompt"
        },
        {
          "name": "List Prompt Response",
          "value": "listResponses",
          "action": "List prompt response"
        },
        {
          "name": "List Query Fanout",
          "value": "listQueryFanout",
          "action": "List query fanout by prompt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prompt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTraffic",
      "options": [
        {
          "name": "Get Traffic Data",
          "value": "getTraffic",
          "action": "Get SEO traffic data"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "seo"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Topic",
          "value": "list",
          "action": "List topic"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "topic"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Brand Info",
      "value": "get",
      "action": "Get brand base information",
      "resource": "brand"
    },
    {
      "name": "List Domains",
      "value": "listDomains",
      "action": "List citation domains",
      "resource": "citation"
    },
    {
      "name": "List Domains by Prompt",
      "value": "listDomainsByPrompt",
      "action": "List citation domains by prompt",
      "resource": "citation"
    },
    {
      "name": "List URLs",
      "value": "listUrls",
      "action": "List citation URLs",
      "resource": "citation"
    },
    {
      "name": "List URLs by Prompt",
      "value": "listUrlsByPrompt",
      "action": "List citation URLs by prompt",
      "resource": "citation"
    },
    {
      "name": "Execute Query",
      "value": "execute",
      "action": "Execute GEO analysis query",
      "resource": "geoAnalysis"
    },
    {
      "name": "Get Keyword Volume",
      "value": "getVolume",
      "action": "Get keyword volume",
      "resource": "keyword"
    },
    {
      "name": "List Backlink Opportunity",
      "value": "backlink",
      "action": "List backlink opportunity",
      "resource": "opportunity"
    },
    {
      "name": "List Community Opportunity",
      "value": "community",
      "action": "List community opportunity",
      "resource": "opportunity"
    },
    {
      "name": "List Content Opportunity",
      "value": "content",
      "action": "List content opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Batch Create Prompt",
      "value": "batchCreate",
      "action": "Batch create prompt",
      "resource": "prompt"
    },
    {
      "name": "Batch Delete Prompt",
      "value": "batchDelete",
      "action": "Batch delete prompt",
      "resource": "prompt"
    },
    {
      "name": "Batch Get Prompt",
      "value": "batchGet",
      "action": "Batch get prompt",
      "resource": "prompt"
    },
    {
      "name": "Batch Update Prompt",
      "value": "batchUpdate",
      "action": "Batch update prompt",
      "resource": "prompt"
    },
    {
      "name": "Get Response Detail",
      "value": "getResponseDetail",
      "action": "Get response detail by prompt",
      "resource": "prompt"
    },
    {
      "name": "List Prompt",
      "value": "list",
      "action": "List prompt",
      "resource": "prompt"
    },
    {
      "name": "List Prompt Response",
      "value": "listResponses",
      "action": "List prompt response",
      "resource": "prompt"
    },
    {
      "name": "List Query Fanout",
      "value": "listQueryFanout",
      "action": "List query fanout by prompt",
      "resource": "prompt"
    },
    {
      "name": "Get Traffic Data",
      "value": "getTraffic",
      "action": "Get SEO traffic data",
      "resource": "seo"
    },
    {
      "name": "List Topic",
      "value": "list",
      "action": "List topic",
      "resource": "topic"
    }
  ]

npm_readme:
  # n8n-nodes-dageno-ai

  This is an n8n community node to interact with the [Dageno Open API](https://open-api-docs.dageno.ai/).

  [Dageno](https://dageno.ai/) is a GEO (Generative Engine Optimization) analysis tool that helps you understand how AI search engines perceive your brand and identify opportunities for optimization.

  ## Features

  - **Brand**: Get basic information about your brand.
  - **GEO Analysis**: Execute complex GEO analysis queries to see how AI engines respond to your brand.
  - **Keyword**: Get keyword volume, CPC, competition, and trend data.
  - **Opportunities**: Discover content, backlink, and community opportunities.
  - **SEO**: Get traffic and ranking data for a domain.
  - **Topics & Prompts**: List and manage topics and prompts used in your analysis, including batch prompt operations.
  - **Citations**: Track citation domains and URLs across AI search engine responses.

  ## Installation

  To install this node in your n8n instance:

  1. Go to **Settings > Community Nodes**.
  2. Click **Install a community node**.
  3. Enter `n8n-nodes-dageno-ai` as the package name.
  4. Click **Install**.

  ## Release Process

  1. Bump `package.json` version to the next published version.
  2. Create a matching Git tag in GitHub (for example `v1.2.7`).
  3. Publish through the GitHub Actions workflow with npm provenance enabled.

  ## Credentials

  To use this node, you need a Dageno API Key. You can obtain it from your Dageno dashboard.

  1. Create a new credential in n8n.
  2. Select **Dageno API**.
  3. Enter your `x-api-key`.

  ## Resources & Operations

  ### Brand
  - **Get**: Retrieve basic brand information.

  ### GEO Analysis
  - **Execute**: Run a GEO analysis query by providing a JSON body.

  ### Keyword
  - **Get Keyword Volume**: Retrieve volume, CPC, competition, and trend data for keywords.

  ### Opportunities
  - **List**: Retrieve opportunities for Content, Backlinks, or Community.

  ### Topics
  - **List**: Get a list of all topics.

  ### Prompts
  - **List**: Get a list of all prompts.
  - **List Responses**: Get responses for a specific prompt.
  - **Get Response Detail**: Get detailed information for a specific response.
  - **List Query Fanout**: Get query fanout data for a specific prompt.
  - **Batch Create**: Create prompts in bulk.
  - **Batch Delete**: Delete prompts in bulk.
  - **Batch Get**: Retrieve prompts in bulk.
  - **Batch Update**: Update prompts in bulk.

  ### SEO
  - **Get Traffic Data**: Retrieve SEO traffic, rank, country, source, and keyword data for a domain.

  ### Citations
  - **List Domains**: Get a list of citation domains.
  - **List URLs**: Get a list of citation URLs.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This node connects n8n to the Dageno Open API for GEO (Generative Engine Optimization) analysis and related brand, SEO, keyword, opportunity, and citation insights. It helps workflows retrieve and manage data used to understand how AI search engines perceive a brand and where to optimize.","capabilities":["Get basic brand information","Execute GEO analysis queries with a JSON body","Retrieve keyword volume, CPC, competition, and trend data","List content, backlink, and community opportunities","Get SEO traffic and ranking data for a domain","List and manage topics and prompts","List prompt responses and response details","List query fanout data for prompts","Batch create, delete, get, and update prompts","List citation domains"],"authentication":"API key required (Dageno API Key via x-api-key credential)","commonUseCases":["Analyze how AI search engines respond to a brand","Research keyword and SEO opportunities for content optimization","Manage prompts and review analysis responses in bulk","Track citation sources and domains across AI search engine responses"],"limitations":["Requires a Dageno API key from the Dageno dashboard","GEO analysis execution requires providing a JSON body","Only the operations listed in the README are documented"],"relatedNodes":[]}


node_type: n8n-nodes-companyenrich.companyEnrich
package_name: n8n-nodes-companyenrich
display_name: Company Enrich
description: Enrich company data and find lookalikes via CompanyEnrich API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: namirali
author_github_url: https://github.com/kovanio/companyenrich-n8n.git
npm_package_name: n8n-nodes-companyenrich
npm_version: 0.2.0
community_fetched_at: 2026-07-14T14:40:34.403Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "company",
      "options": [
        {
          "name": "Company",
          "value": "company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrich",
      "options": [
        {
          "name": "Count",
          "value": "count",
          "action": "Count companies matching criteria",
          "description": "Count companies matching criteria"
        },
        {
          "name": "Enrich",
          "value": "enrich",
          "action": "Enrich company data",
          "description": "Enrich company data"
        },
        {
          "name": "Find Similar",
          "value": "findSimilar",
          "action": "Find similar companies",
          "description": "Find similar companies"
        },
        {
          "name": "Get Usage",
          "value": "getUsage",
          "action": "Get account usage",
          "description": "Get account usage"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search companies",
          "description": "Search companies"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Count",
      "value": "count",
      "action": "Count companies matching criteria",
      "description": "Count companies matching criteria",
      "resource": "company"
    },
    {
      "name": "Enrich",
      "value": "enrich",
      "action": "Enrich company data",
      "description": "Enrich company data",
      "resource": "company"
    },
    {
      "name": "Find Similar",
      "value": "findSimilar",
      "action": "Find similar companies",
      "description": "Find similar companies",
      "resource": "company"
    },
    {
      "name": "Get Usage",
      "value": "getUsage",
      "action": "Get account usage",
      "description": "Get account usage",
      "resource": "company"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search companies",
      "description": "Search companies",
      "resource": "company"
    }
  ]

npm_readme:
  # n8n-nodes-companyenrich

  This is an n8n community node. It lets you use the [CompanyEnrich API](https://companyenrich.com) in your n8n workflows.

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

  ## Installation

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

  ## Credentials

  You need a CompanyEnrich API Key to use this node.
  1. Sign up at [CompanyEnrich](https://companyenrich.com).
  2. Get your API Key from the dashboard.
  3. In n8n, create a new credential for **Company Enrich API** and paste your key.

  ## Operations

  ### Company
  *   **Enrich**: Enrich company data using a domain name.
  *   **Find Similar**: Find similar companies (lookalikes) based on a seed domain and various filters.
  *   **Search**: Search for companies using advanced filters (Location, Industry, Revenue, etc.).
  *   **Count**: Count the number of companies matching specific criteria.
  *   **Get Usage**: Retrieve your current API usage stats.

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This node connects n8n workflows to the CompanyEnrich API so you can enrich company records, discover similar companies, and search or count companies using advanced filters.","capabilities":["Enrich company data from a domain name","Find similar companies (lookalikes) from a seed domain with filters","Search companies using filters such as location, industry, and revenue","Count companies matching specified criteria","Retrieve current API usage statistics"],"authentication":"API key required (Company Enrich API Key credential)","commonUseCases":["Enhancing CRM or lead data with company enrichment details","Building prospecting workflows to find similar companies","Filtering and searching company databases by attributes like location, industry, or revenue"],"limitations":["Requires a CompanyEnrich API key and account","No additional limitations are mentioned in the README"],"relatedNodes":[]}


node_type: n8n-nodes-spike.spike
package_name: n8n-nodes-spike
display_name: Spike
description: Create Spike forms or submit data to a Spike form
category: Community
development_style: declarative
version: 1
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: saeedmshdi
author_github_url: https://github.com/spike-forms/
npm_package_name: n8n-nodes-spike
npm_version: 0.7.1
community_fetched_at: 2026-07-14T14:40:34.404Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "form",
      "options": [
        {
          "name": "Create Form",
          "value": "form"
        },
        {
          "name": "Submit Form",
          "value": "submission"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    }
  ]

npm_readme:
  # n8n-nodes-spike

  Official Spike community node for n8n.

  `n8n-nodes-spike` lets you create Spike forms, submit data to public Spike forms, and trigger n8n workflows whenever a new submission is received.

  ## Features

  - Trigger: `New Submission`
  - Action: `Create Form`
  - Action: `Submit Form`
  - Live dropdowns for organizations and forms
  - API key authentication

  ## Installation

  In n8n:

  1. Open `Settings`
  2. Open `Community Nodes`
  3. Click `Install`
  4. Enter `n8n-nodes-spike`
  5. Restart n8n if your deployment requires it

  You can also install manually:

  ```bash
  npm install n8n-nodes-spike
  ```

  ## Credentials

  Create `Spike API` credentials in n8n with:

  - `API Key`: your Spike API key
  - `Base URL`: usually `https://api.spike.ac`

  ## Nodes

  ### Spike Trigger

  Starts a workflow when Spike receives a new submission for a selected form.

  How it works:

  - n8n registers a webhook subscription with Spike
  - Spike stores the subscription in `automation_webhooks`
  - Each new submission is delivered to your n8n webhook URL

  ### Spike

  Available operations:

  - `Create Form`
  - `Submit Form`

  `Create Form` uses your authenticated Spike API account.

  `Submit Form` sends raw JSON to a public Spike form endpoint using:

  - organization slug
  - form slug

  ## Requirements

  - A Spike account
  - A Spike API key
  - A reachable Spike API deployment for webhook subscriptions if you use `Spike Trigger`

  ## Webhook Trigger Requirements

  For `Spike Trigger` to work, your Spike backend must expose:

  - `POST /integrations/n8n/hooks`
  - `DELETE /integrations/n8n/hooks`

  and must dispatch submission events from Spike to stored automation webhooks.

  ## Package

  - npm: `https://www.npmjs.com/package/n8n-nodes-spike`

  ## Development

  ```bash
  pnpm install
  pnpm --filter n8n-nodes-spike build
  pnpm --filter n8n-nodes-spike typecheck
  ```

ai_documentation_summary:
  {"purpose":"This node integrates n8n with Spike to create forms, submit data to public Spike forms, and trigger workflows when new form submissions are received.","capabilities":["Create Spike forms","Submit raw JSON data to a public Spike form endpoint","Trigger workflows on new form submissions","Use live dropdowns to select organizations and forms"],"authentication":"API key required (Spike API credentials with API Key and Base URL)","commonUseCases":["Automatically create Spike forms from an n8n workflow","Send data from n8n to a public Spike form","Trigger automations when a Spike form receives a new submission"],"limitations":["Submit Form only works with public Spike form endpoints using organization slug and form slug","Spike Trigger requires a reachable Spike API deployment and webhook endpoints at POST /integrations/n8n/hooks and DELETE /integrations/n8n/hooks"],"relatedNodes":[]}


node_type: n8n-nodes-spike.spikeTrigger
package_name: n8n-nodes-spike
display_name: Spike Trigger
description: Triggers when a new submission is received in Spike
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/spike-forms/
npm_package_name: n8n-nodes-spike
npm_version: 0.7.1
community_fetched_at: 2026-07-14T14:40:34.405Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-spike

  Official Spike community node for n8n.

  `n8n-nodes-spike` lets you create Spike forms, submit data to public Spike forms, and trigger n8n workflows whenever a new submission is received.

  ## Features

  - Trigger: `New Submission`
  - Action: `Create Form`
  - Action: `Submit Form`
  - Live dropdowns for organizations and forms
  - API key authentication

  ## Installation

  In n8n:

  1. Open `Settings`
  2. Open `Community Nodes`
  3. Click `Install`
  4. Enter `n8n-nodes-spike`
  5. Restart n8n if your deployment requires it

  You can also install manually:

  ```bash
  npm install n8n-nodes-spike
  ```

  ## Credentials

  Create `Spike API` credentials in n8n with:

  - `API Key`: your Spike API key
  - `Base URL`: usually `https://api.spike.ac`

  ## Nodes

  ### Spike Trigger

  Starts a workflow when Spike receives a new submission for a selected form.

  How it works:

  - n8n registers a webhook subscription with Spike
  - Spike stores the subscription in `automation_webhooks`
  - Each new submission is delivered to your n8n webhook URL

  ### Spike

  Available operations:

  - `Create Form`
  - `Submit Form`

  `Create Form` uses your authenticated Spike API account.

  `Submit Form` sends raw JSON to a public Spike form endpoint using:

  - organization slug
  - form slug

  ## Requirements

  - A Spike account
  - A Spike API key
  - A reachable Spike API deployment for webhook subscriptions if you use `Spike Trigger`

  ## Webhook Trigger Requirements

  For `Spike Trigger` to work, your Spike backend must expose:

  - `POST /integrations/n8n/hooks`
  - `DELETE /integrations/n8n/hooks`

  and must dispatch submission events from Spike to stored automation webhooks.

  ## Package

  - npm: `https://www.npmjs.com/package/n8n-nodes-spike`

  ## Development

  ```bash
  pnpm install
  pnpm --filter n8n-nodes-spike build
  pnpm --filter n8n-nodes-spike typecheck
  ```

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows when a new Spike form submission is received, and also supports creating and submitting Spike forms. It connects n8n to Spike via webhook subscriptions and API-based form operations.","capabilities":["Trigger on New Submission","Create Form","Submit Form","Live dropdown selection for organizations and forms","Webhook subscription setup and delivery for submissions"],"authentication":"API key required (Spike API credentials with API Key and Base URL)","commonUseCases":["Start a workflow when a new Spike form submission arrives","Create Spike forms from an n8n workflow","Submit data to a public Spike form from n8n"],"limitations":["Spike Trigger requires a reachable Spike API deployment that supports webhook subscription endpoints","Webhook trigger requires backend endpoints POST /integrations/n8n/hooks and DELETE /integrations/n8n/hooks","Submit Form only works with public Spike form endpoints using organization slug and form slug"],"relatedNodes":["Spike"]}


node_type: @testsavant/n8n-nodes-testsavant.testSavantGuard
package_name: @testsavant/n8n-nodes-testsavant
display_name: TestSavant.AI
description: Guardrails prompts and outputs using TestSavant.AI.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main",
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kubaf
author_github_url: https://github.com/TestSavantAI/n8n-nodes-testsavant.git
npm_package_name: @testsavant/n8n-nodes-testsavant
npm_version: 1.0.8
community_fetched_at: 2026-07-14T14:40:34.406Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "scan",
      "options": [
        {
          "name": "Scan",
          "value": "scan"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate a scan"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scan"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate a scan",
      "resource": "scan"
    }
  ]

npm_readme:
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/1acb44ce-098f-4e95-b151-8158d23e578e" />
    <source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/b4cb72e0-34fa-4c21-9969-fc07b95071ff" />
    <img width="400px" height="auto" alt="TestSavant.AI Logo Image" src="https://github.com/user-attachments/assets/b4cb72e0-34fa-4c21-9969-fc07b95071ff" />
  </picture>

  # TestSavant.AI for n8n

  An n8n community node that runs TestSavant.AI Guard safety checks on prompts or model outputs. Use it to detect policy violations (e.g., harmful content) and gate your AI workflows.

  - npm: `@testsavant/n8n-nodes-testsavant`
  - Repo: https://github.com/TestSavantAI/n8n-nodes-testsavant
  - Docs: https://docs.testsavant.ai

  ## Requirements

  - n8n ( self‑hosted or desktop )
  - A TestSavant API key ( get one from your TestSavant account at https://app.testsavant.ai )

  ## Install

  - In n8n UI: Settings → Community Nodes → Install → enter:
    ```
    @testsavant/n8n-nodes-testsavant
    ```
  - Or via terminal (for self‑hosted setups):
    ```
    npm install @testsavant/n8n-nodes-testsavant
    ```

  ## Set up credentials

  1. In n8n, go to Settings → Credentials → New.
  2. Search for “TestSavant.AI API”.
  3. Fill in:
    - API Key: your TestSavant API key.
  4. Save the credential.

  ### Get your API key (app.testsavant.ai)

  1. Sign in at https://app.testsavant.ai
  2. Open your account or workspace settings and go to “API Keys”.
  3. Create a new key → give it a name → copy the key value.
  4. Paste the key into the “TestSavant.AI API” credential in n8n.

  Notes:
  - Treat your API key like a password. Store it in n8n credentials only.
  - You can revoke/regenerate keys any time from the API Keys page.

  #### Create an API Key
  <img width="auto" height="230" alt="Screenshot 2025-09-24 at 1 59 26 PM" src="https://github.com/user-attachments/assets/9ff59662-6fa8-4976-804f-4f745058a95b" />
  <img width="auto" height="230" alt="Screenshot 2025-09-24 at 1 59 36 PM" src="https://github.com/user-attachments/assets/2b882b89-86b1-4b74-9e1e-0296cdd71249" />

  <img width="1488" height="314" alt="Screenshot 2025-09-24 at 1 59 59 PM" src="https://github.com/user-attachments/assets/68d9cf67-0ee3-4555-a0c4-512cd0075578" />

  ### Create or manage Projects

  1. In the TestSavant app, go to “Projects”.
  2. Click “New Project”, provide a name and optional description, and save.
  3. Your node’s “Project” dropdown will list your projects after you select credentials.
  4. Select the project you want to use for guardrailing (its policies/config apply to scans).

  #### Use API Key in n8n
  <img width="1214" height="455" alt="Screenshot 2025-09-24 at 1 56 06 PM" src="https://github.com/user-attachments/assets/a93c4ba2-0385-4604-be04-6aa8a7445e4e" />

  Credentials are stored securely by n8n.

  ## Use the node

  1. Add “TestSavant.AI” to your workflow.
  2. Connect it after a node that produces the text you want to check (e.g., an LLM node).
  3. Configure fields:
    - Prompt / Output: strings to validate (you can map from previous node output, e.g. `{{$json.data}}`).
    - Scan Type: Input or Output.
    - Project: optional. Pick one to auto-apply its scanners, or choose “— No Project —” to manage scanners manually.
    - Scanners: loads every scanner available to your account. Selecting a project automatically pre-selects its active scanners, and you can add more from the full list.

  4. Run the workflow.

  The node processes one item per incoming item, so it fits naturally in n8n pipelines.

  <img width="1438" height="769" alt="Screenshot 2025-09-23 at 6 31 57 PM" src="https://github.com/user-attachments/assets/8af38a14-2fc2-48ac-9f68-e0a28ff6247c" />

  <img width="1768" height="923" alt="Screenshot 2025-09-23 at 6 33 37 PM" src="https://github.com/user-attachments/assets/3d7dbe7f-9446-45d2-90b0-5eab58b982cf" />

  ## Input/Output

  - Input
    - Expects an item with a string field you map to “Text”.

  - Output
    - Two outputs: the first is “valid”, the second is “not valid”.
    - Each output item contains safety evaluation details:
      ```json
      [
        {
          "valid": true,
          "prompt": "test message",
          "output": "",
          "result": {
            "sanitized_prompt": "test message",
            "is_valid": true,
            "scanners": {
              "PromptInjection:base": -1,
            },
            "validity": {
              "PromptInjection:base": true,
            }
          }
        }
      ]
      ```
    - Inspect the node’s output panel in n8n to see the exact structure.

  ## Common patterns

  - Guard an LLM:
    - LLM node → TestSavant.AI → If node (check `testsavant.decision !== "allow"`) → handle violations.
  - Pre‑check user input:
    - Webhook → TestSavant.AI (Mode: Prompt) → proceed or reject.

  ## What is guardrailing?

  Guardrailing evaluates prompts and/or model outputs to detect policy violations and risky behavior before results are used or returned. Typical checks include:
  - Prompt injection and jailbreak attempts
  - PII leakage and data exfiltration
  - Toxicity, hate speech, violence, sexual content
  - Custom organization policies configured per project

  With a selected Project, the node applies your project’s policies and thresholds and returns a decision and per‑scanner details. Use the decision to allow, block, or route for human review.

  ## Error handling

  - 401/403: Invalid or missing API key. Recheck the credential.
  - 429: Rate limited. Add retry/Wait node or reduce throughput.
  - Timeouts: Increase timeout in the node (Advanced) or in n8n global settings.
  - Don’t want the workflow to stop on violation? Enable “Continue On Fail” in the node so the item is annotated instead of throwing.

  ## Development

  - Local build:
    ```
    npm run build
    ```
  - Deploy to your local n8n user directory (macOS):
    ```
    npm run deploy
    ```
  - Lint/format:
    ```
    npm run lint
    npm run format
    ```

  ## Support

  - Issues: https://github.com/TestSavantAI/n8n-nodes-testsavant/issues
  - Docs: https://docs.testsavant.ai

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Runs TestSavant.AI Guard safety checks on prompts or model outputs in n8n workflows. It helps detect policy violations such as harmful content, prompt injection, and other risky behavior before AI results are used or returned.","capabilities":["Scan text as either input (prompt) or output","Apply project-specific guardrail policies and thresholds","Manually select scanners when no project is chosen","Return per-scanner evaluation details and validity results","Split results into valid and not valid outputs","Process one item per incoming item for workflow chaining"],"authentication":"API key required via n8n credential named “TestSavant.AI API”","commonUseCases":["Guarding LLM outputs before they are returned to users","Pre-checking user prompts for unsafe or policy-violating content","Blocking or routing suspicious AI interactions for human review","Enforcing organization-specific AI safety policies in workflows"],"limitations":["Requires a TestSavant API key and an available TestSavant account/workspace","Rate limits may occur and may require retry or throttling","One item is processed per incoming item","Only evaluates text mapped to the configured text field"],"relatedNodes":[]}


node_type: n8n-nodes-cortana-ai.cortanaAiTrigger
package_name: n8n-nodes-cortana-ai
display_name: Cortana AI Trigger
description: Starts the workflow when a new conversion or contact is recorded in Cortana
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kanchan404
author_github_url: https://github.com/AgentKong/
npm_package_name: n8n-nodes-cortana-ai
npm_version: 0.3.3
community_fetched_at: 2026-07-14T14:40:34.408Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-cortana-ai

  Cortana AI community node for [n8n](https://n8n.io) — trigger workflows on new
  conversions or contacts, create conversions with full attribution, and look up
  contacts and conversion types.

  ## Installation

  In n8n: **Settings → Community Nodes → Install** and enter
  `n8n-nodes-cortana-ai`.

  ## Credentials

  1. In Cortana, open **Control Center → Settings → API Keys** and generate a key
     (`sk-ak-…`) with these scopes:
     `contacts:read, contacts:write, conversions:read, conversions:write, webhooks:read, webhooks:write`.
  2. In n8n, create a **Cortana AI API** credential and paste the key.

  One credential covers every business the key can access — you pick the business
  on each node. The credential test calls `GET /api/v1/businesses`; if it succeeds
  but the Business dropdown is empty, the key has no accessible businesses
  (restricted allowlist) — create a key with the right business scope.

  The optional **Base URL** field defaults to Cortana cloud
  (`https://app.usecortana.ai/api/v1`); override it only for local or staging
  testing (e.g. `http://localhost:3000/api/v1`).

  ## Nodes

  ### Cortana AI (action)

  | Resource | Operations |
  |---|---|
  | Conversion | Create (contact matched by email/phone, auto-managed source), Get, Get Many |
  | Contact | Create, Get, Get Many (search / email / phone / tag filters) |
  | Attribution | Get Data (date range, model, group-by), Get UTMs, Get Presets, Get Contacts by LTV |
  | Agent · Appointment · Conversation · Conversion Type · Form Submission · Tracking Session | Get, Get Many |
  | Custom Field · Tag · Meeting Recording · Business | Get Many |
  | Message | Get Many (per conversation) |
  | Voice Call | Get, Get Many, Get Transcript |
  | Stripe | Payments, Subscriptions, Customers, Metrics, Products, Invoices, Disputes, Payment Intents, Payment Links, Prices, Promotion Codes |
  | Shopify | Orders, Customers, Products, Analytics, Abandoned Carts |
  | Whop | Payments, Connections, Customers, Memberships |

  ### Cortana AI Trigger

  Fires on **New Conversion** (optionally filtered to specific conversion types)
  and/or **New Contact**. Activation registers a webhook subscription with
  Cortana; deactivation removes it. Payloads are signed
  (`X-Cortana-Signature: t=<ts>,v1=<hmac>`) and verified against the stored
  signing secret by default — invalid signatures are logged and ignored.

  Payload shape (v2 envelope):

  ```jsonc
  {
    "event": "conversion.created",
    "deliveryId": "…",          // unique per delivery
    "timestamp": "…",
    "businessId": "…",
    "id": "…",                  // entity id — dedup key across redeliveries
    "data": {
      "conversion": { "id": "…", "type": "purchase", "displayName": "New Deals Closed", "value": 99.9, "currency": "USD", "occurredAt": "…", "createdAt": "…", "attributionMethod": "…", "metadata": null },
      "contact": { "id": "…", "email": "…", "phone": "…", "firstName": "…", "lastName": "…", "name": "…", "company": "…", "tags": [], "customFields": {}, "createdAt": "…" },
      "attribution": { "source": "…", "medium": "…", "campaign": "…", "ad": "…", "fbclid": null, "gclid": null, "firstTouch": null, "lastTouch": null }
    }
  }
  ```

  `data.contact` is `null` for anonymous conversions. Compare `occurredAt` with
  `createdAt` to detect late/backfilled events.

  ## Migrating from 0.1.x

  Version 0.2.0 is a **breaking release** — 0.1.x called an API that no longer
  exists, so every 0.1.x node has been non-functional:

  1. **Old `ak_live_*` keys don't work.** Create a new `sk-ak-` key with the
     scopes listed above and update your credential (the `businessId` field is
     gone from the credential).
  2. **Re-select the business** on every Cortana node — it's now the first
     parameter on both nodes.
  3. **Re-activate trigger workflows.** Old subscriptions never existed
     server-side (activation errors on 0.1.x were expected); deactivate + activate
     each trigger workflow once to register it.
  4. The trigger's filter now uses **conversion types** (not source ids).

  ## Development

  ```bash
  npm install
  npm run build     # tsc + icon copy into dist/
  npm run lint
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"This node package integrates Cortana AI with n8n workflows to either trigger workflows when new conversions are recorded or send conversion data into Cortana AI. The trigger node starts workflows in real time on conversion events.","capabilities":["Trigger workflows on new Cortana AI conversion events","Create conversions in Cortana AI from other workflow tools","List conversions","Search contacts","Get conversion types","Receive detailed conversion, contact, attribution, and business data in trigger output"],"authentication":"Cortana AI API credentials required: API Key and Business ID","commonUseCases":["Send a Slack alert when a new conversion is created in Cortana AI","Add new Cortana AI conversion data to Google Sheets","Create or update CRM contacts in HubSpot from conversion events","Create Cortana AI conversions from Typeform submissions, Stripe payments, or HubSpot deal closures"],"limitations":["Requires an API key starting with ak_live_ and a Business ID","Webhook signature verification requires manual validation if needed","Create Conversion requires a Conversion Type and at least one contact identifier: Email or Phone"],"relatedNodes":["Slack","Google Sheets","HubSpot","Typeform","Function"]}


node_type: n8n-nodes-cortana-ai.cortanaAi
package_name: n8n-nodes-cortana-ai
display_name: Cortana AI
description: Read and create data in Cortana — conversions, contacts, attribution, and more
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kanchan404
author_github_url: https://github.com/AgentKong/
npm_package_name: n8n-nodes-cortana-ai
npm_version: 0.3.3
community_fetched_at: 2026-07-14T14:40:34.409Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "conversion",
      "options": [
        {
          "name": "Agent",
          "value": "agent"
        },
        {
          "name": "Appointment",
          "value": "appointment"
        },
        {
          "name": "Attribution",
          "value": "attribution"
        },
        {
          "name": "Business",
          "value": "business"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Conversation",
          "value": "conversation"
        },
        {
          "name": "Conversion",
          "value": "conversion"
        },
        {
          "name": "Conversion Type",
          "value": "conversionType"
        },
        {
          "name": "Custom Field",
          "value": "customField"
        },
        {
          "name": "Form Submission",
          "value": "formSubmission"
        },
        {
          "name": "Meeting Recording",
          "value": "meetingRecording"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Shopify",
          "value": "shopify"
        },
        {
          "name": "Stripe",
          "value": "stripe"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Tracking Session",
          "value": "trackingSession"
        },
        {
          "name": "Voice Call",
          "value": "voiceCall"
        },
        {
          "name": "Whop",
          "value": "whop"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a agent",
          "description": "Retrieve a single agent"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many agents",
          "description": "Retrieve a list of agents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a appointment",
          "description": "Retrieve a single appointment"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many appointments",
          "description": "Retrieve a list of appointments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getData",
      "options": [
        {
          "name": "Get Contacts by LTV",
          "value": "getContactsByLtv",
          "action": "Get contacts by LTV",
          "description": "Retrieve contacts ranked by lifetime value"
        },
        {
          "name": "Get Data",
          "value": "getData",
          "action": "Get attribution data",
          "description": "Retrieve aggregated attribution rows for a date range"
        },
        {
          "name": "Get Presets",
          "value": "getPresets",
          "action": "Get attribution presets",
          "description": "Retrieve saved attribution presets"
        },
        {
          "name": "Get UTMs",
          "value": "getUtms",
          "action": "Get UTM values",
          "description": "Retrieve known UTM values for the business"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attribution"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many businesses",
          "description": "Retrieve a list of businesses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "business"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact (matched server-side, no duplicates)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Retrieve a single contact"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many contacts",
          "description": "Retrieve a list of contacts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversation",
          "description": "Retrieve a single conversation"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many conversations",
          "description": "Retrieve a list of conversations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a conversion",
          "description": "Record a new conversion entry in Cortana"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversion entry",
          "description": "Retrieve a single conversion entry"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many conversion entries",
          "description": "Retrieve a list of conversion entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversion"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversion type",
          "description": "Retrieve a single conversion type"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many conversion types",
          "description": "Retrieve a list of conversion types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversionType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many custom fields",
          "description": "Retrieve a list of custom fields"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customField"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a form submission",
          "description": "Retrieve a single form submission"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many form submissions",
          "description": "Retrieve a list of form submissions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "formSubmission"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many meeting recordings",
          "description": "Retrieve a list of meeting recordings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "meetingRecording"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many messages",
          "description": "Retrieve a list of messages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getOrders",
      "options": [
        {
          "name": "Get Abandoned Carts",
          "value": "getAbandonedCarts",
          "action": "Get Shopify abandoned carts",
          "description": "Retrieve a list of abandoned checkouts"
        },
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get Shopify analytics",
          "description": "Retrieve the Shopify analytics summary"
        },
        {
          "name": "Get Customers",
          "value": "getCustomers",
          "action": "Get Shopify customers",
          "description": "Retrieve a list of Shopify customers"
        },
        {
          "name": "Get Orders",
          "value": "getOrders",
          "action": "Get Shopify orders",
          "description": "Retrieve a list of Shopify orders"
        },
        {
          "name": "Get Products",
          "value": "getProducts",
          "action": "Get Shopify products",
          "description": "Retrieve a list of Shopify products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "shopify"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPayments",
      "options": [
        {
          "name": "Get Customers",
          "value": "getCustomers",
          "action": "Get Stripe customers",
          "description": "Retrieve a list of Stripe customers"
        },
        {
          "name": "Get Disputes",
          "value": "getDisputes",
          "action": "Get Stripe disputes",
          "description": "Retrieve a list of Stripe disputes"
        },
        {
          "name": "Get Invoices",
          "value": "getInvoices",
          "action": "Get Stripe invoices",
          "description": "Retrieve a list of Stripe invoices"
        },
        {
          "name": "Get Metrics",
          "value": "getMetrics",
          "action": "Get Stripe metrics",
          "description": "Retrieve the Stripe revenue metrics summary"
        },
        {
          "name": "Get Payment Intents",
          "value": "getPaymentIntents",
          "action": "Get Stripe payment intents",
          "description": "Retrieve a list of Stripe payment intents"
        },
        {
          "name": "Get Payment Links",
          "value": "getPaymentLinks",
          "action": "Get Stripe payment links",
          "description": "Retrieve a list of Stripe payment links"
        },
        {
          "name": "Get Payments",
          "value": "getPayments",
          "action": "Get Stripe payments",
          "description": "Retrieve a list of Stripe payments"
        },
        {
          "name": "Get Prices",
          "value": "getPrices",
          "action": "Get Stripe prices",
          "description": "Retrieve a list of Stripe prices"
        },
        {
          "name": "Get Products",
          "value": "getProducts",
          "action": "Get Stripe products",
          "description": "Retrieve a list of Stripe products"
        },
        {
          "name": "Get Promotion Codes",
          "value": "getPromotionCodes",
          "action": "Get Stripe promotion codes",
          "description": "Retrieve a list of Stripe promotion codes"
        },
        {
          "name": "Get Subscriptions",
          "value": "getSubscriptions",
          "action": "Get Stripe subscriptions",
          "description": "Retrieve a list of Stripe subscriptions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "stripe"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many tags",
          "description": "Retrieve a list of tags"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a tracking session",
          "description": "Retrieve a single tracking session"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many tracking sessions",
          "description": "Retrieve a list of tracking sessions"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "trackingSession"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a voice call",
          "description": "Retrieve a single voice call"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many voice calls",
          "description": "Retrieve a list of voice calls"
        },
        {
          "name": "Get Transcript",
          "value": "getTranscript",
          "action": "Get a call transcript",
          "description": "Retrieve the transcript of a voice call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceCall"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPayments",
      "options": [
        {
          "name": "Get Connections",
          "value": "getConnections",
          "action": "Get Whop connections",
          "description": "Retrieve a list of Whop connections"
        },
        {
          "name": "Get Customers",
          "value": "getCustomers",
          "action": "Get Whop customers",
          "description": "Retrieve a list of Whop customers"
        },
        {
          "name": "Get Memberships",
          "value": "getMemberships",
          "action": "Get Whop memberships",
          "description": "Retrieve a list of Whop memberships"
        },
        {
          "name": "Get Payments",
          "value": "getPayments",
          "action": "Get Whop payments",
          "description": "Retrieve a list of Whop payments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whop"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get a agent",
      "description": "Retrieve a single agent",
      "resource": "agent"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many agents",
      "description": "Retrieve a list of agents",
      "resource": "agent"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a appointment",
      "description": "Retrieve a single appointment",
      "resource": "appointment"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many appointments",
      "description": "Retrieve a list of appointments",
      "resource": "appointment"
    },
    {
      "name": "Get Contacts by LTV",
      "value": "getContactsByLtv",
      "action": "Get contacts by LTV",
      "description": "Retrieve contacts ranked by lifetime value",
      "resource": "attribution"
    },
    {
      "name": "Get Data",
      "value": "getData",
      "action": "Get attribution data",
      "description": "Retrieve aggregated attribution rows for a date range",
      "resource": "attribution"
    },
    {
      "name": "Get Presets",
      "value": "getPresets",
      "action": "Get attribution presets",
      "description": "Retrieve saved attribution presets",
      "resource": "attribution"
    },
    {
      "name": "Get UTMs",
      "value": "getUtms",
      "action": "Get UTM values",
      "description": "Retrieve known UTM values for the business",
      "resource": "attribution"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many businesses",
      "description": "Retrieve a list of businesses",
      "resource": "business"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact (matched server-side, no duplicates)",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Retrieve a single contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many contacts",
      "description": "Retrieve a list of contacts",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversation",
      "description": "Retrieve a single conversation",
      "resource": "conversation"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many conversations",
      "description": "Retrieve a list of conversations",
      "resource": "conversation"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a conversion",
      "description": "Record a new conversion entry in Cortana",
      "resource": "conversion"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversion entry",
      "description": "Retrieve a single conversion entry",
      "resource": "conversion"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many conversion entries",
      "description": "Retrieve a list of conversion entries",
      "resource": "conversion"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversion type",
      "description": "Retrieve a single conversion type",
      "resource": "conversionType"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many conversion types",
      "description": "Retrieve a list of conversion types",
      "resource": "conversionType"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many custom fields",
      "description": "Retrieve a list of custom fields",
      "resource": "customField"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a form submission",
      "description": "Retrieve a single form submission",
      "resource": "formSubmission"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many form submissions",
      "description": "Retrieve a list of form submissions",
      "resource": "formSubmission"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many meeting recordings",
      "description": "Retrieve a list of meeting recordings",
      "resource": "meetingRecording"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many messages",
      "description": "Retrieve a list of messages",
      "resource": "message"
    },
    {
      "name": "Get Abandoned Carts",
      "value": "getAbandonedCarts",
      "action": "Get Shopify abandoned carts",
      "description": "Retrieve a list of abandoned checkouts",
      "resource": "shopify"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get Shopify analytics",
      "description": "Retrieve the Shopify analytics summary",
      "resource": "shopify"
    },
    {
      "name": "Get Customers",
      "value": "getCustomers",
      "action": "Get Shopify customers",
      "description": "Retrieve a list of Shopify customers",
      "resource": "shopify"
    },
    {
      "name": "Get Orders",
      "value": "getOrders",
      "action": "Get Shopify orders",
      "description": "Retrieve a list of Shopify orders",
      "resource": "shopify"
    },
    {
      "name": "Get Products",
      "value": "getProducts",
      "action": "Get Shopify products",
      "description": "Retrieve a list of Shopify products",
      "resource": "shopify"
    },
    {
      "name": "Get Customers",
      "value": "getCustomers",
      "action": "Get Stripe customers",
      "description": "Retrieve a list of Stripe customers",
      "resource": "stripe"
    },
    {
      "name": "Get Disputes",
      "value": "getDisputes",
      "action": "Get Stripe disputes",
      "description": "Retrieve a list of Stripe disputes",
      "resource": "stripe"
    },
    {
      "name": "Get Invoices",
      "value": "getInvoices",
      "action": "Get Stripe invoices",
      "description": "Retrieve a list of Stripe invoices",
      "resource": "stripe"
    },
    {
      "name": "Get Metrics",
      "value": "getMetrics",
      "action": "Get Stripe metrics",
      "description": "Retrieve the Stripe revenue metrics summary",
      "resource": "stripe"
    },
    {
      "name": "Get Payment Intents",
      "value": "getPaymentIntents",
      "action": "Get Stripe payment intents",
      "description": "Retrieve a list of Stripe payment intents",
      "resource": "stripe"
    },
    {
      "name": "Get Payment Links",
      "value": "getPaymentLinks",
      "action": "Get Stripe payment links",
      "description": "Retrieve a list of Stripe payment links",
      "resource": "stripe"
    },
    {
      "name": "Get Payments",
      "value": "getPayments",
      "action": "Get Stripe payments",
      "description": "Retrieve a list of Stripe payments",
      "resource": "stripe"
    },
    {
      "name": "Get Prices",
      "value": "getPrices",
      "action": "Get Stripe prices",
      "description": "Retrieve a list of Stripe prices",
      "resource": "stripe"
    },
    {
      "name": "Get Products",
      "value": "getProducts",
      "action": "Get Stripe products",
      "description": "Retrieve a list of Stripe products",
      "resource": "stripe"
    },
    {
      "name": "Get Promotion Codes",
      "value": "getPromotionCodes",
      "action": "Get Stripe promotion codes",
      "description": "Retrieve a list of Stripe promotion codes",
      "resource": "stripe"
    },
    {
      "name": "Get Subscriptions",
      "value": "getSubscriptions",
      "action": "Get Stripe subscriptions",
      "description": "Retrieve a list of Stripe subscriptions",
      "resource": "stripe"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many tags",
      "description": "Retrieve a list of tags",
      "resource": "tag"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a tracking session",
      "description": "Retrieve a single tracking session",
      "resource": "trackingSession"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many tracking sessions",
      "description": "Retrieve a list of tracking sessions",
      "resource": "trackingSession"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a voice call",
      "description": "Retrieve a single voice call",
      "resource": "voiceCall"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many voice calls",
      "description": "Retrieve a list of voice calls",
      "resource": "voiceCall"
    },
    {
      "name": "Get Transcript",
      "value": "getTranscript",
      "action": "Get a call transcript",
      "description": "Retrieve the transcript of a voice call",
      "resource": "voiceCall"
    },
    {
      "name": "Get Connections",
      "value": "getConnections",
      "action": "Get Whop connections",
      "description": "Retrieve a list of Whop connections",
      "resource": "whop"
    },
    {
      "name": "Get Customers",
      "value": "getCustomers",
      "action": "Get Whop customers",
      "description": "Retrieve a list of Whop customers",
      "resource": "whop"
    },
    {
      "name": "Get Memberships",
      "value": "getMemberships",
      "action": "Get Whop memberships",
      "description": "Retrieve a list of Whop memberships",
      "resource": "whop"
    },
    {
      "name": "Get Payments",
      "value": "getPayments",
      "action": "Get Whop payments",
      "description": "Retrieve a list of Whop payments",
      "resource": "whop"
    }
  ]

npm_readme:
  # n8n-nodes-cortana-ai

  Cortana AI community node for [n8n](https://n8n.io) — trigger workflows on new
  conversions or contacts, create conversions with full attribution, and look up
  contacts and conversion types.

  ## Installation

  In n8n: **Settings → Community Nodes → Install** and enter
  `n8n-nodes-cortana-ai`.

  ## Credentials

  1. In Cortana, open **Control Center → Settings → API Keys** and generate a key
     (`sk-ak-…`) with these scopes:
     `contacts:read, contacts:write, conversions:read, conversions:write, webhooks:read, webhooks:write`.
  2. In n8n, create a **Cortana AI API** credential and paste the key.

  One credential covers every business the key can access — you pick the business
  on each node. The credential test calls `GET /api/v1/businesses`; if it succeeds
  but the Business dropdown is empty, the key has no accessible businesses
  (restricted allowlist) — create a key with the right business scope.

  The optional **Base URL** field defaults to Cortana cloud
  (`https://app.usecortana.ai/api/v1`); override it only for local or staging
  testing (e.g. `http://localhost:3000/api/v1`).

  ## Nodes

  ### Cortana AI (action)

  | Resource | Operations |
  |---|---|
  | Conversion | Create (contact matched by email/phone, auto-managed source), Get, Get Many |
  | Contact | Create, Get, Get Many (search / email / phone / tag filters) |
  | Attribution | Get Data (date range, model, group-by), Get UTMs, Get Presets, Get Contacts by LTV |
  | Agent · Appointment · Conversation · Conversion Type · Form Submission · Tracking Session | Get, Get Many |
  | Custom Field · Tag · Meeting Recording · Business | Get Many |
  | Message | Get Many (per conversation) |
  | Voice Call | Get, Get Many, Get Transcript |
  | Stripe | Payments, Subscriptions, Customers, Metrics, Products, Invoices, Disputes, Payment Intents, Payment Links, Prices, Promotion Codes |
  | Shopify | Orders, Customers, Products, Analytics, Abandoned Carts |
  | Whop | Payments, Connections, Customers, Memberships |

  ### Cortana AI Trigger

  Fires on **New Conversion** (optionally filtered to specific conversion types)
  and/or **New Contact**. Activation registers a webhook subscription with
  Cortana; deactivation removes it. Payloads are signed
  (`X-Cortana-Signature: t=<ts>,v1=<hmac>`) and verified against the stored
  signing secret by default — invalid signatures are logged and ignored.

  Payload shape (v2 envelope):

  ```jsonc
  {
    "event": "conversion.created",
    "deliveryId": "…",          // unique per delivery
    "timestamp": "…",
    "businessId": "…",
    "id": "…",                  // entity id — dedup key across redeliveries
    "data": {
      "conversion": { "id": "…", "type": "purchase", "displayName": "New Deals Closed", "value": 99.9, "currency": "USD", "occurredAt": "…", "createdAt": "…", "attributionMethod": "…", "metadata": null },
      "contact": { "id": "…", "email": "…", "phone": "…", "firstName": "…", "lastName": "…", "name": "…", "company": "…", "tags": [], "customFields": {}, "createdAt": "…" },
      "attribution": { "source": "…", "medium": "…", "campaign": "…", "ad": "…", "fbclid": null, "gclid": null, "firstTouch": null, "lastTouch": null }
    }
  }
  ```

  `data.contact` is `null` for anonymous conversions. Compare `occurredAt` with
  `createdAt` to detect late/backfilled events.

  ## Migrating from 0.1.x

  Version 0.2.0 is a **breaking release** — 0.1.x called an API that no longer
  exists, so every 0.1.x node has been non-functional:

  1. **Old `ak_live_*` keys don't work.** Create a new `sk-ak-` key with the
     scopes listed above and update your credential (the `businessId` field is
     gone from the credential).
  2. **Re-select the business** on every Cortana node — it's now the first
     parameter on both nodes.
  3. **Re-activate trigger workflows.** Old subscriptions never existed
     server-side (activation errors on 0.1.x were expected); deactivate + activate
     each trigger workflow once to register it.
  4. The trigger's filter now uses **conversion types** (not source ids).

  ## Development

  ```bash
  npm install
  npm run build     # tsc + icon copy into dist/
  npm run lint
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Integrates n8n workflows with Cortana AI to receive real-time conversion attribution events and create/manage conversion data. It includes a trigger for new conversions and an action node for creating conversions and querying Cortana AI data.","capabilities":["Trigger workflows when a new conversion is recorded in Cortana AI","Create conversions in Cortana AI","List conversions","Search contacts","Get conversion types","Receive webhook payloads containing conversion, contact, attribution, and business data"],"authentication":"Cortana AI API credentials are required: an API Key and Business ID configured in the 'Cortana AI API' credential type.","commonUseCases":["Send a Slack alert when a new conversion is created in Cortana AI","Create a Cortana AI conversion from Typeform, Stripe, or HubSpot events","Sync conversion attribution data into Google Sheets or CRM tools","Look up contacts or conversion types while building enrichment or routing workflows"],"limitations":["Creating conversions requires a Conversion Type and at least one contact identifier: Email or Phone","Webhook signature verification requires custom handling in a Function node","Webhook signature header examples in the README show different header names, so implementation should be verified"],"relatedNodes":["Slack","Google Sheets","HubSpot","Typeform","Stripe"]}


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

updated_at: 2026-07-14 14:40:34
author_name: jamesnightingale
author_github_url: https://github.com/scribeless/
npm_package_name: n8n-nodes-scribeless
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.410Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "recipient",
      "options": [
        {
          "name": "Recipient",
          "value": "recipient"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add to Campaign",
          "value": "create",
          "action": "Add a recipient to a campaign",
          "description": "Add a recipient to a recurring campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recipient"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add to Campaign",
      "value": "create",
      "action": "Add a recipient to a campaign",
      "description": "Add a recipient to a recurring campaign",
      "resource": "recipient"
    }
  ]

npm_readme:
  # n8n-nodes-scribeless

  This is an n8n community node. It lets you add recipients to Scribeless campaigns from n8n workflows and start workflows when a Scribeless QR code is scanned.

  Scribeless helps teams send automated handwritten direct mail.

  [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

  Recipient:

  * Add to Campaign

  Trigger:

  * QR Code Scanned

  ## Credentials

  This node uses Scribeless API key authentication.

  1. In Scribeless, go to `https://platform.scribeless.co/settings#/api-keys`.
  2. Create or copy an API key.
  3. In n8n, create a Scribeless API credential and paste the key.

  The credential test calls `GET https://platform.scribeless.co/api/auth/whoami`.

  The Base URL field defaults to `https://platform.scribeless.co`. For local development against Scribeless dev, set it to the dev base URL, for example `https://core-125289108818.europe-west2.run.app`. Published production credentials should keep the default unless Scribeless support instructs otherwise.

  ## Compatibility

  Built with the official `@n8n/node-cli` scaffold. Test against the n8n version installed by `npm run dev`.

  ## Usage

  Use **Recipient > Add to Campaign** to send a recipient into a Scribeless campaign. The Campaign field loads your campaigns from Scribeless so you can select a campaign by name instead of pasting an ID. The selected campaign ID is sent to `POST /api/recipients`.

  Use **Scribeless Trigger > QR Code Scanned** to start a workflow from Smart QR scan events. When the workflow is activated, n8n registers the workflow webhook URL with Scribeless using `POST /api/webhooks` and stores the returned subscription ID and secret in workflow static data. If the workflow is reactivated with an existing subscription, the node updates it with `PATCH /api/webhooks/:id` and `status: "active"`. When the workflow is deactivated, the node uses `PATCH /api/webhooks/:id` with `status: "inactive"` because local HubSpot/Attio connector code does not show a supported delete route.

  Incoming scan deliveries are accepted only when `X-Scribeless-Event` and the payload `type` are `qr_code.scanned`. The trigger verifies `X-Scribeless-Signature` with the stored webhook secret and n8n's raw request body before emitting workflow data. Output contains the Scribeless payload plus a `scribelessWebhook` object with delivery metadata and `signatureVerified: true`.

  For local dev testing, run n8n with this community node, expose n8n's webhook URL with a public tunnel such as n8n tunnel/ngrok/Cloudflare Tunnel, set the Scribeless credential Base URL to the dev base URL, activate or listen for the trigger workflow, then visit a dev SQR URL that has a QR code scan configured. Change the Base URL back to the production default before publishing or using production workflows.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [Scribeless](https://scribeless.co)

  ## Version history

  ### 0.1.7

  Added the Scribeless Trigger node for signed `qr_code.scanned` webhook deliveries, plus a credential Base URL setting for local dev testing.

  ### 0.1.3

  Updated campaign selection to use a campaign dropdown on the recipient action, and changed credential documentation links to the public package repository.

  ### 0.1.0

  Initial private build with campaign lookup and recipient creation.

ai_documentation_summary:
  {"purpose":"This node integrates n8n with Scribeless, allowing workflows to add recipients to Scribeless campaigns and to trigger workflows when Scribeless QR codes are scanned. It is designed for automated handwritten direct mail and signed webhook-based event handling.","capabilities":["Add a recipient to a Scribeless campaign","Load and select campaigns from Scribeless via a campaign dropdown","Trigger workflows on Scribeless QR code scanned events","Register and update webhook subscriptions automatically when workflows are activated or reactivated","Verify incoming webhook signatures using Scribeless webhook secrets","Expose scan event payloads plus delivery metadata in workflow output","Support a configurable Base URL for local development against Scribeless dev"],"authentication":"API key authentication is required. Create or copy a Scribeless API key and store it in an n8n Scribeless API credential; the credential test calls GET https://platform.scribeless.co/api/auth/whoami.","commonUseCases":["Automatically add contacts or recipients into a handwritten mail campaign from another workflow","Start an automation when a Scribeless QR code is scanned","Test Scribeless webhook-triggered workflows in local development environments","Manage campaign enrollment based on events from other systems"],"limitations":["Only two operations are documented: Add to Campaign and QR Code Scanned","Webhook deletion is not supported; deactivation uses PATCH to set webhook status to inactive","Incoming trigger events are accepted only for X-Scribeless-Event with payload type qr_code.scanned","Production credentials should keep the default base URL unless Scribeless support instructs otherwise"],"relatedNodes":[]}


node_type: n8n-nodes-team-dynamix.teamDynamix
package_name: n8n-nodes-team-dynamix
display_name: Team Dynamix
description: Work with TeamDynamix tickets and knowledge base articles
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: blackfenix2
author_github_url: https://github.com/BlackFenix2/
npm_package_name: n8n-nodes-team-dynamix
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:34.411Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "ticket",
      "options": [
        {
          "name": "KB Article",
          "value": "kbArticle"
        },
        {
          "name": "Ticket",
          "value": "ticket"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a knowledge base article",
          "description": "Create a new knowledge base article"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a knowledge base article",
          "description": "Delete a knowledge base article by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a knowledge base article",
          "description": "Fetch a single knowledge base article by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many knowledge base articles",
          "description": "Fetch a list of knowledge base articles"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a knowledge base article",
          "description": "Update a knowledge base article by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "kbArticle"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Feed",
          "value": "addFeed",
          "action": "Add a ticket feed entry",
          "description": "Add a feed entry to a ticket"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a ticket",
          "description": "Create a new ticket"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a ticket",
          "description": "Delete a ticket by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a ticket",
          "description": "Fetch a single ticket by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tickets",
          "description": "Fetch a list of tickets"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a ticket",
          "description": "Update a ticket by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a knowledge base article",
      "description": "Create a new knowledge base article",
      "resource": "kbArticle"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a knowledge base article",
      "description": "Delete a knowledge base article by ID",
      "resource": "kbArticle"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a knowledge base article",
      "description": "Fetch a single knowledge base article by ID",
      "resource": "kbArticle"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many knowledge base articles",
      "description": "Fetch a list of knowledge base articles",
      "resource": "kbArticle"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a knowledge base article",
      "description": "Update a knowledge base article by ID",
      "resource": "kbArticle"
    },
    {
      "name": "Add Feed",
      "value": "addFeed",
      "action": "Add a ticket feed entry",
      "description": "Add a feed entry to a ticket",
      "resource": "ticket"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a ticket",
      "description": "Create a new ticket",
      "resource": "ticket"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a ticket",
      "description": "Delete a ticket by ID",
      "resource": "ticket"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a ticket",
      "description": "Fetch a single ticket by ID",
      "resource": "ticket"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tickets",
      "description": "Fetch a list of tickets",
      "resource": "ticket"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a ticket",
      "description": "Update a ticket by ID",
      "resource": "ticket"
    }
  ]

npm_readme:
  # n8n-nodes-team-dynamix

  An n8n community node package providing integration with the TeamDynamix API for ticket management and knowledge base operations.

  **Status:** n8n Community Node Package | **Node Type:** Integration | **License:** MIT

  For developers and collaborators: This repository follows n8n community node standards and publishing requirements. See [N8N_COMMUNITY_NODE_REQUIREMENTS.md](./N8N_COMMUNITY_NODE_REQUIREMENTS.md) and [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed information.

  ## Features

  - **TeamDynamix API Credential** - Multiple authentication modes (User Login, Admin Login, Token)
  - **Ticket Operations:**
    - Create tickets
    - Get many tickets (with filtering and pagination)
    - Update tickets
    - Delete tickets
    - Add feed entries to tickets
  - **Knowledge Base Operations:** KB article access
  - **Automatic Publishing:** CI/CD pipeline publishes to npm after `main` updates
  - **Manual Versioning Control:** `package.json` version is intentionally managed by maintainers via `develop` -> `main` PRs

  ## Installation

  ### From npm (for n8n users)

  Follow the n8n community node installation guide:

  - https://docs.n8n.io/integrations/community-nodes/installation/

  Package name:

  ```bash
  n8n-nodes-team-dynamix
  ```

  ### For local development

  ```bash
  npm install
  ```

  ## Local Development

  Start n8n with this node loaded and hot-reloaded:

  ```bash
  npm run dev
  ```

  Useful commands:

  ```bash
  npm run lint
  npm run lint:fix
  npm run build
  ```

  ### Docker Development

  Run the development environment in Docker:

  ```bash
  # Build and start the container
  npm run docker:dev

  # Or run in detached mode (background)
  npm run docker:dev:detached

  # View logs
  npm run docker:logs

  # Stop the container
  npm run docker:stop
  ```

  The n8n instance will be available at: `http://localhost:5678`

  Docker setup includes:

  - Automatic hot-reload for code changes
  - Persistent n8n data volume
  - Debug logging enabled

  ## Credentials

  Credential type: `TeamDynamix API` (`teamDynamixApi`)

  Supported auth modes:

  - User Login
  - Admin Login
  - Existing Token (Manual)

  Configure your TeamDynamix base URL and whichever auth fields apply to your mode.

  ## Operations

  Resource: `Ticket`

  - **Create**
    - Mode: Guided Fields or Raw JSON
    - Endpoint: `POST /tickets`
  - **Get Many**
    - Endpoint: `POST /tickets/search`
    - Uses `Search Data` JSON body to refine results
  - **Update**
    - Endpoint: `PUT /tickets/{ticketId}`
  - **Delete**
    - Endpoint: `DELETE /tickets/{ticketId}`
  - **Add Feed**
    - Endpoint: `POST /tickets/{ticketId}/feed`

  Resource: `KB Article`

  - **Get Many**
    - Endpoint: `POST /knowledgebase/articles/search`
    - Uses `KB Search Data` JSON body to refine results

  Example `KB Search Data` payload:

  ```json
  {
  	"StatusIDs": [],
  	"SearchText": "onboarding",
  	"MaxResults": 25
  }
  ```

  All requests are made against your configured credential `baseUrl`.

  ## Compatibility

  - Node.js 22+
  - Built with `@n8n/node-cli`

  ## Contributing

  We welcome contributions! Before contributing, please see:

  - **[CONTRIBUTING.md](./CONTRIBUTING.md)** - Development workflow, branch strategy, and testing guidelines
  - **[N8N_COMMUNITY_NODE_REQUIREMENTS.md](./N8N_COMMUNITY_NODE_REQUIREMENTS.md)** - N8N standards, publishing requirements, and submission process

  ### Quick Setup for Development

  ```bash
  npm install                # Install dependencies
  npm run dev               # Start with hot reload
  npm run lint             # Check code quality
  npm run build            # Build distribution
  ```

  ## Publishing

  This package is automatically published to npm on pushes to `main` via GitHub Actions.

  Version numbers are **not** auto-bumped by workflows. Maintainers must manually update `package.json` before merge, and PR checks enforce that the version is increased for `develop` -> `main` pull requests.

  **Setup required:** Configure npm Trusted Publisher (OIDC) for this repository and workflow.

  **Important:** All n8n community nodes must follow [publishing requirements](./N8N_COMMUNITY_NODE_REQUIREMENTS.md#publishing-requirements), including:

  - ✅ Automatic linting and building on all commits
  - ✅ Publishing to npm registry with proper authentication
  - ✅ Publishing with GitHub Actions and provenance statement

  See [N8N_COMMUNITY_NODE_REQUIREMENTS.md](./N8N_COMMUNITY_NODE_REQUIREMENTS.md) for full publishing standards.

  ## Required for n8n Submission

  Before submitting this package to the n8n Creator Portal, confirm:

  - ✅ Package name follows `n8n-nodes-*` convention
  - ✅ Includes `n8n-community-node-package` keyword
  - ✅ `package.json` includes valid `n8n` configuration
  - ✅ No runtime dependencies (devDependencies only)
  - ✅ `npm run lint` and `npm run build` both pass
  - ✅ Published to npm via GitHub Actions with provenance
  - ✅ README includes installation, credentials, and operations details

  Submission details: https://creators.n8n.io/nodes

  ## Resources

  - **N8N Documentation:** https://docs.n8n.io/integrations/creating-nodes/
  - **N8N Community Nodes:** https://docs.n8n.io/integrations/community-nodes/
  - **N8N Creator Portal (Submission):** https://creators.n8n.io/nodes
  - **TeamDynamix API Docs:** https://solutions.teamdynamix.com/TDWebApi/
  - **NPM Package:** https://www.npmjs.com/package/n8n-nodes-team-dynamix

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Integrates n8n with the TeamDynamix API for managing tickets and accessing knowledge base articles. It supports common ticket lifecycle actions plus KB article searches.","capabilities":["Create tickets","Get many tickets with filtering and pagination","Update tickets","Delete tickets","Add feed entries to tickets","Search knowledge base articles","Use guided fields or raw JSON for ticket creation","Configure requests against a custom TeamDynamix base URL"],"authentication":"TeamDynamix API credential required; supports User Login, Admin Login, or Existing Token (Manual).","commonUseCases":["Create and manage TeamDynamix support tickets from n8n workflows","Search and retrieve TeamDynamix knowledge base articles","Automate ticket updates, deletions, and feed/comment additions","Filter and paginate ticket search results for reporting or triage"],"limitations":["Only ticket and knowledge base article operations are documented","Knowledge base support is limited to getting many articles/searching articles","All requests depend on a configured TeamDynamix base URL"],"relatedNodes":[]}


node_type: n8n-nodes-lindo.lindo
package_name: n8n-nodes-lindo
display_name: Lindo
description: Interact with the Lindo.ai API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  {
  "type": "main"
  }
  ]

updated_at: 2026-07-14 14:40:34
author_name: saeedmshdi
author_github_url: https://github.com/lindoai/
npm_package_name: n8n-nodes-lindo
npm_version: 1.4.0
community_fetched_at: 2026-07-14T14:40:34.412Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "website",
      "options": [
        {
          "name": "Website",
          "value": "website"
        },
        {
          "name": "Page",
          "value": "page"
        },
        {
          "name": "Blog",
          "value": "blog"
        },
        {
          "name": "Client",
          "value": "client"
        },
        {
          "name": "Credits",
          "value": "credits"
        },
        {
          "name": "Workflow Status",
          "value": "workflow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Website (AI)",
          "value": "create",
          "action": "Create a website using AI",
          "description": "Create a new website using AI"
        },
        {
          "name": "Edit Website (AI)",
          "value": "edit",
          "action": "Edit a website using AI",
          "description": "Edit an existing website (across its pages) using AI"
        },
        {
          "name": "Batch Create Websites (AI)",
          "value": "batchCreate",
          "action": "Batch create websites using AI",
          "description": "Create up to 25 websites at once using AI"
        },
        {
          "name": "List Websites",
          "value": "list",
          "action": "List websites",
          "description": "List websites in the workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "website"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List Pages",
          "value": "list",
          "action": "List pages",
          "description": "List pages for a website"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "page"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Blog (AI)",
          "value": "create",
          "action": "Create a blog post using AI",
          "description": "Create a new blog post using AI"
        },
        {
          "name": "Batch Create Blogs (AI)",
          "value": "batchCreate",
          "action": "Batch create blogs using AI",
          "description": "Create up to 25 blog posts on a website at once using AI"
        },
        {
          "name": "List Blogs",
          "value": "list",
          "action": "List blogs",
          "description": "List blog posts for a website"
        },
        {
          "name": "Publish Blog",
          "value": "publish",
          "action": "Publish a blog post",
          "description": "Publish a static blog post with markdown content"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Client",
          "value": "create",
          "action": "Create a client",
          "description": "Create a new client in the workspace"
        },
        {
          "name": "List Clients",
          "value": "list",
          "action": "List clients",
          "description": "List clients in the workspace"
        },
        {
          "name": "Assign Website",
          "value": "assignWebsite",
          "action": "Assign a website to a client",
          "description": "Assign a website to a client"
        },
        {
          "name": "Generate Magic Link",
          "value": "generateMagicLink",
          "action": "Generate a magic link",
          "description": "Generate a magic link for client login"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "allocate",
      "options": [
        {
          "name": "Get Workspace Credits",
          "value": "get",
          "action": "Get workspace credits",
          "description": "Get the credit balance for the workspace"
        },
        {
          "name": "Get Client Credits",
          "value": "getClient",
          "action": "Get client credits",
          "description": "Get the credit balance for a specific client"
        },
        {
          "name": "Allocate Credits",
          "value": "allocate",
          "action": "Allocate credits to a client",
          "description": "Allocate credits to a client"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "credits"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "checkWebsite",
      "options": [
        {
          "name": "Check Website Status",
          "value": "checkWebsite",
          "action": "Check website workflow status",
          "description": "Check the status of a website-creation workflow"
        },
        {
          "name": "Check Edit Status",
          "value": "checkEdit",
          "action": "Check website edit workflow status",
          "description": "Check the status of a website-edit workflow"
        },
        {
          "name": "Check Blog Status",
          "value": "checkBlog",
          "action": "Check blog workflow status",
          "description": "Check the status of a blog-creation workflow"
        },
        {
          "name": "Batch Check Website Status",
          "value": "batchCheckWebsite",
          "action": "Batch check website workflow status",
          "description": "Check up to 25 website-creation workflows at once"
        },
        {
          "name": "Batch Check Blog Status",
          "value": "batchCheckBlog",
          "action": "Batch check blog workflow status",
          "description": "Check up to 25 blog-creation workflows at once"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workflow"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Website (AI)",
      "value": "create",
      "action": "Create a website using AI",
      "description": "Create a new website using AI",
      "resource": "website"
    },
    {
      "name": "Edit Website (AI)",
      "value": "edit",
      "action": "Edit a website using AI",
      "description": "Edit an existing website (across its pages) using AI",
      "resource": "website"
    },
    {
      "name": "Batch Create Websites (AI)",
      "value": "batchCreate",
      "action": "Batch create websites using AI",
      "description": "Create up to 25 websites at once using AI",
      "resource": "website"
    },
    {
      "name": "List Websites",
      "value": "list",
      "action": "List websites",
      "description": "List websites in the workspace",
      "resource": "website"
    },
    {
      "name": "List Pages",
      "value": "list",
      "action": "List pages",
      "description": "List pages for a website",
      "resource": "page"
    },
    {
      "name": "Create Blog (AI)",
      "value": "create",
      "action": "Create a blog post using AI",
      "description": "Create a new blog post using AI",
      "resource": "blog"
    },
    {
      "name": "Batch Create Blogs (AI)",
      "value": "batchCreate",
      "action": "Batch create blogs using AI",
      "description": "Create up to 25 blog posts on a website at once using AI",
      "resource": "blog"
    },
    {
      "name": "List Blogs",
      "value": "list",
      "action": "List blogs",
      "description": "List blog posts for a website",
      "resource": "blog"
    },
    {
      "name": "Publish Blog",
      "value": "publish",
      "action": "Publish a blog post",
      "description": "Publish a static blog post with markdown content",
      "resource": "blog"
    },
    {
      "name": "Create Client",
      "value": "create",
      "action": "Create a client",
      "description": "Create a new client in the workspace",
      "resource": "client"
    },
    {
      "name": "List Clients",
      "value": "list",
      "action": "List clients",
      "description": "List clients in the workspace",
      "resource": "client"
    },
    {
      "name": "Assign Website",
      "value": "assignWebsite",
      "action": "Assign a website to a client",
      "description": "Assign a website to a client",
      "resource": "client"
    },
    {
      "name": "Generate Magic Link",
      "value": "generateMagicLink",
      "action": "Generate a magic link",
      "description": "Generate a magic link for client login",
      "resource": "client"
    },
    {
      "name": "Get Workspace Credits",
      "value": "get",
      "action": "Get workspace credits",
      "description": "Get the credit balance for the workspace",
      "resource": "credits"
    },
    {
      "name": "Get Client Credits",
      "value": "getClient",
      "action": "Get client credits",
      "description": "Get the credit balance for a specific client",
      "resource": "credits"
    },
    {
      "name": "Allocate Credits",
      "value": "allocate",
      "action": "Allocate credits to a client",
      "description": "Allocate credits to a client",
      "resource": "credits"
    },
    {
      "name": "Check Website Status",
      "value": "checkWebsite",
      "action": "Check website workflow status",
      "description": "Check the status of a website-creation workflow",
      "resource": "workflow"
    },
    {
      "name": "Check Edit Status",
      "value": "checkEdit",
      "action": "Check website edit workflow status",
      "description": "Check the status of a website-edit workflow",
      "resource": "workflow"
    },
    {
      "name": "Check Blog Status",
      "value": "checkBlog",
      "action": "Check blog workflow status",
      "description": "Check the status of a blog-creation workflow",
      "resource": "workflow"
    },
    {
      "name": "Batch Check Website Status",
      "value": "batchCheckWebsite",
      "action": "Batch check website workflow status",
      "description": "Check up to 25 website-creation workflows at once",
      "resource": "workflow"
    },
    {
      "name": "Batch Check Blog Status",
      "value": "batchCheckBlog",
      "action": "Batch check blog workflow status",
      "description": "Check up to 25 blog-creation workflows at once",
      "resource": "workflow"
    }
  ]

npm_readme:
  # n8n-nodes-lindo

  This is an [n8n](https://n8n.io/) community node for [Lindo.ai](https://lindo.ai), a website builder platform. It lets you automate website and client management directly from your n8n workflows.

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

  ## Installation

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

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

  ## Credentials

  You need a Lindo.ai API key to use this node.

  1. Log in to your [Lindo.ai](https://lindo.ai) workspace
  2. Go to **Settings** and find your API key (starts with `lindo_sk_`)
  3. In n8n, create a new **Lindo API** credential and paste your key

  | Field    | Description                                                    |
  | -------- | -------------------------------------------------------------- |
  | API Key  | Your Lindo API key (`lindo_sk_...`)                            |
  | Base URL | `https://api.lindo.ai` (change only for staging environments) |

  ## Nodes

  ### Lindo Trigger

  Starts a workflow when an event occurs in your Lindo workspace.

  | Event                | Description                              |
  | -------------------- | ---------------------------------------- |
  | New Website Created  | Fires when a new website is created      |
  | New Client Created   | Fires when a new client is created       |

  ### Lindo

  Performs actions in your Lindo workspace.

  | Resource | Operation | Description                              |
  | -------- | --------- | ---------------------------------------- |
  | Website  | Create    | Create a new website in the workspace    |
  | Client   | Create    | Create a new client in the workspace     |

  #### Create Website fields

  | Field                | Required | Description                        |
  | -------------------- | -------- | ---------------------------------- |
  | Business Name        | Yes      | Name of the business or website    |
  | Business Description | No       | Short description of the business  |
  | Language             | No       | Language code (default: `en`)      |

  #### Create Client fields

  | Field         | Required | Description                              |
  | ------------- | -------- | ---------------------------------------- |
  | Email         | Yes      | Email address of the new client          |
  | Full Name     | No       | Full name of the client                  |
  | Website Limit | No       | Max websites for this client (default: 1)|

  ## Workflow Templates

  Ready-to-use workflow templates are included in the `templates/` folder:

  | Template | Description |
  | -------- | ----------- |
  | [New website → Slack](templates/new-website-to-slack.json) | Post a Slack message when a website is created |
  | [New client → Google Sheets](templates/new-client-to-google-sheets.json) | Log new clients to a spreadsheet |
  | [New client → Welcome email](templates/new-client-to-email.json) | Send a welcome email to new clients |
  | [Google Sheets → Create websites](templates/create-website-from-google-sheets.json) | Bulk-create websites from spreadsheet rows |

  To use a template: copy the JSON, go to your n8n instance, click **Import from file**, and paste.

  ## Resources

  - [Lindo.ai](https://lindo.ai)
  - [Lindo API Documentation](https://lindo.ai/docs/api)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community node for interacting with the Lindo.ai website builder API from n8n. It can automate website and client management and react to events in a Lindo workspace.","capabilities":["Create websites in a Lindo workspace","Create clients in a Lindo workspace","Trigger workflows when a new website is created","Trigger workflows when a new client is created","Use workflow templates for Slack, Google Sheets, email, and bulk website creation"],"authentication":"API key required (Lindo API key starting with `lindo_sk_`), stored in an n8n Lindo API credential; base URL defaults to `https://api.lindo.ai`","commonUseCases":["Automatically create websites from workflow data or spreadsheet rows","Add new clients to Lindo from external systems","Trigger downstream automations when new websites or clients are created in Lindo","Send Slack messages, emails, or log records when Lindo events occur"],"limitations":["Only create operations are documented for the main Lindo node; no update, delete, or list actions are mentioned","Base URL changes are only intended for staging environments"],"relatedNodes":["Lindo Trigger"]}


node_type: n8n-nodes-lindo.lindoTrigger
package_name: n8n-nodes-lindo
display_name: Lindo Trigger
description: Triggers when events occur in your Lindo workspace
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  {
  "type": "main"
  }
  ]

updated_at: 2026-07-14 14:40:34
author_name: saeedmshdi
author_github_url: https://github.com/lindoai/
npm_package_name: n8n-nodes-lindo
npm_version: 1.4.0
community_fetched_at: 2026-07-14T14:40:34.413Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-lindo

  This is an [n8n](https://n8n.io/) community node for [Lindo.ai](https://lindo.ai), a website builder platform. It lets you automate website and client management directly from your n8n workflows.

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

  ## Installation

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

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

  ## Credentials

  You need a Lindo.ai API key to use this node.

  1. Log in to your [Lindo.ai](https://lindo.ai) workspace
  2. Go to **Settings** and find your API key (starts with `lindo_sk_`)
  3. In n8n, create a new **Lindo API** credential and paste your key

  | Field    | Description                                                    |
  | -------- | -------------------------------------------------------------- |
  | API Key  | Your Lindo API key (`lindo_sk_...`)                            |
  | Base URL | `https://api.lindo.ai` (change only for staging environments) |

  ## Nodes

  ### Lindo Trigger

  Starts a workflow when an event occurs in your Lindo workspace.

  | Event                | Description                              |
  | -------------------- | ---------------------------------------- |
  | New Website Created  | Fires when a new website is created      |
  | New Client Created   | Fires when a new client is created       |

  ### Lindo

  Performs actions in your Lindo workspace.

  | Resource | Operation | Description                              |
  | -------- | --------- | ---------------------------------------- |
  | Website  | Create    | Create a new website in the workspace    |
  | Client   | Create    | Create a new client in the workspace     |

  #### Create Website fields

  | Field                | Required | Description                        |
  | -------------------- | -------- | ---------------------------------- |
  | Business Name        | Yes      | Name of the business or website    |
  | Business Description | No       | Short description of the business  |
  | Language             | No       | Language code (default: `en`)      |

  #### Create Client fields

  | Field         | Required | Description                              |
  | ------------- | -------- | ---------------------------------------- |
  | Email         | Yes      | Email address of the new client          |
  | Full Name     | No       | Full name of the client                  |
  | Website Limit | No       | Max websites for this client (default: 1)|

  ## Workflow Templates

  Ready-to-use workflow templates are included in the `templates/` folder:

  | Template | Description |
  | -------- | ----------- |
  | [New website → Slack](templates/new-website-to-slack.json) | Post a Slack message when a website is created |
  | [New client → Google Sheets](templates/new-client-to-google-sheets.json) | Log new clients to a spreadsheet |
  | [New client → Welcome email](templates/new-client-to-email.json) | Send a welcome email to new clients |
  | [Google Sheets → Create websites](templates/create-website-from-google-sheets.json) | Bulk-create websites from spreadsheet rows |

  To use a template: copy the JSON, go to your n8n instance, click **Import from file**, and paste.

  ## Resources

  - [Lindo.ai](https://lindo.ai)
  - [Lindo API Documentation](https://lindo.ai/docs/api)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Triggers workflows when events occur in a Lindo.ai workspace, and supports creating websites and clients from n8n. It helps automate website and client management tasks directly within n8n workflows.","capabilities":["Trigger on new website created events","Trigger on new client created events","Create a website in a Lindo workspace","Create a client in a Lindo workspace"],"authentication":"API key required (Lindo API key starting with `lindo_sk_`) via a Lindo API credential in n8n","commonUseCases":["Notify a team when a new website is created","Log new clients into Google Sheets or another system","Send welcome emails to new clients","Bulk-create websites from spreadsheet data"],"limitations":["The README only documents create operations for the Lindo node; no update, delete, or list operations are mentioned.","The trigger node only lists two event types: new website created and new client created."],"relatedNodes":["Slack","Google Sheets","Email"]}


node_type: @nowcapital/n8n-nodes-nowcapital.nowCapital
package_name: @nowcapital/n8n-nodes-nowcapital
display_name: NowCapital
description: Advanced Canadian retirement planning & Monte Carlo simulations
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: nowcapital
author_github_url: https://github.com/XmeleeLabs/n8n-nodes-nowcapital.git
npm_package_name: @nowcapital/n8n-nodes-nowcapital
npm_version: 1.0.21
community_fetched_at: 2026-07-14T14:40:34.414Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "plan",
      "options": [
        {
          "name": "Plan",
          "value": "plan"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "calculateMaxSpend",
      "options": [
        {
          "name": "Calculate Specific Spend",
          "value": "calculateWithTargetSpend",
          "action": "Calculate with target spending"
        },
        {
          "name": "Calculate Sustainable Spend",
          "value": "calculateMaxSpend",
          "action": "Calculate sustainable monthly spending"
        },
        {
          "name": "Get Detailed Projections",
          "value": "calculateMaxSpendWithYearlyData",
          "action": "Get detailed yearly projections"
        },
        {
          "name": "Get Simulation Result",
          "value": "getSimulationResult",
          "action": "Get simulation result"
        },
        {
          "name": "Get Simulation Status",
          "value": "getSimulationStatus",
          "action": "Get simulation status"
        },
        {
          "name": "Run Monte Carlo Simulation",
          "value": "monteCarlo",
          "action": "Start monte carlo simulation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "plan"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Calculate Specific Spend",
      "value": "calculateWithTargetSpend",
      "action": "Calculate with target spending",
      "resource": "plan"
    },
    {
      "name": "Calculate Sustainable Spend",
      "value": "calculateMaxSpend",
      "action": "Calculate sustainable monthly spending",
      "resource": "plan"
    },
    {
      "name": "Get Detailed Projections",
      "value": "calculateMaxSpendWithYearlyData",
      "action": "Get detailed yearly projections",
      "resource": "plan"
    },
    {
      "name": "Get Simulation Result",
      "value": "getSimulationResult",
      "action": "Get simulation result",
      "resource": "plan"
    },
    {
      "name": "Get Simulation Status",
      "value": "getSimulationStatus",
      "action": "Get simulation status",
      "resource": "plan"
    },
    {
      "name": "Run Monte Carlo Simulation",
      "value": "monteCarlo",
      "action": "Start monte carlo simulation",
      "resource": "plan"
    }
  ]

npm_readme:
  # n8n-nodes-nowcapital

  This is an n8n community node for integrating with the [NowCapital.ca](https://nowcapital.ca) Canadian Retirement Planning API. It allows you to automate retirement simulations, calculate sustainable spending, and perform risk analysis using Canadian tax laws.

  [NowCapital](https://nowcapital.ca) is a specialized retirement planning tool designed for Canadians, handling RRSPs, TFSAs, CPP/OAS, and income splitting.

  ## Features

  - **Calculate Sustainable Spend**: Find the maximum monthly amount you can safely spend throughout retirement.
  - **Detailed Projections**: Get a year-by-year breakdown of account balances and cash flows.
  - **Scenario Modeling**: Model specific spending targets to see how long your money will last.
  - **Monte Carlo Simulations**: ⭐ *Premium*: Perform risk analysis to see the probability of success for your retirement plan.
  - **Localized Tax Logic**: Specifically built for Canadian provinces and territories.

  ## Installation

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

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

  ## Credentials

  You will need an API Key from NowCapital.ca:

  1. Log in to your [NowCapital.ca](https://nowcapital.ca) account.
  2. Navigate to the **API Access** section.
  3. Generate a new API Key.
  4. (Optional) A **Premium API Key** is required for Monte Carlo simulations and advanced event modeling.

  ---

  ## Operations & Usage

  ### 📈 Calculate Sustainable Spend
  Optimizes for the highest possible monthly spend (inflation-adjusted) that results in a $0 balance at the end of the planning horizon.

  ### 📊 Get Detailed Projections
  Provides the same calculation as above but returns a full array of yearly data, useful for creating charts or CSV records.

  ### 🎯 Calculate Specific Spend
  Models how your portfolio behaves with a fixed spending goal. Useful for "What if I spend $5,000/month?" scenarios.

  ### 🎲 Run Monte Carlo Simulation (Premium)
  Starts a background risk simulation based on thousands of market scenarios. **This is an asynchronous operation.**

  ---

  ## 🔁 Handling Asynchronous Monte Carlo Simulations

  Monte Carlo simulations are computationally intensive and take between 5 to 30 seconds to complete. To use this feature in n8n, you must implement a **Polling Loop**.

  ### Step-by-Step Polling Pattern

  1. **Run Monte Carlo Simulation**: Use this node to start the task. It will return a `task_id` and a status of `PENDING`.
  2. **Wait Node**: Connect a Wait node set to **5 seconds**.
  3. **Get Simulation Status**: Connect a second NowCapital node. Use the `task_id` from the first node.
  4. **IF Node**: Check if the status is equal to `SUCCESS`.
      - **Falsepath**: Route this back to the **Wait Node** (Step 2) to loop.
      - **Truepath**: Route this to the final node.
  5. **Get Simulation Result**: Use a final NowCapital node with the same `task_id` to retrieve the completed math and success probability.

  ### Smart ID Handover
  The NowCapital node includes built-in "Smart Handover" logic. If the backend switches task IDs during processing (from Orchestrator to Worker), the node will automatically detect this and follow the correct ID. You only ever need to pass the **original** `task_id` through your loop.

  ---

  ## Technical Support

  For issues, visit [NowCapital.ca Support](https://nowcapital.ca).
  For bugs specifically related to this n8n node, please open an issue on [GitHub](https://github.com/XmeleeLabs/n8n-nodes-nowcapital).

  ## License
  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Integrates n8n with the NowCapital.ca Canadian retirement planning API to automate retirement simulations, sustainable spending calculations, and risk analysis. It is designed for Canadian retirement planning with support for provincial/territorial tax logic and retirement account types like RRSPs, TFSAs, CPP/OAS, and income splitting.","capabilities":["Calculate sustainable spend","Get detailed retirement projections","Calculate specific/fixed spending scenarios","Run Monte Carlo simulations for retirement risk analysis","Support asynchronous polling workflows for simulation jobs","Handle smart task ID handover during Monte Carlo processing"],"authentication":"API key required; premium API key required for Monte Carlo simulations and advanced event modeling","commonUseCases":["Estimating the maximum safe monthly retirement spending amount","Generating year-by-year retirement balance and cash flow projections","Testing fixed spending scenarios to see how long funds last","Running probability-of-success and risk analysis for retirement plans"],"limitations":["Monte Carlo simulations are asynchronous and require a polling loop in n8n","Monte Carlo simulations can take 5 to 30 seconds to complete","Monte Carlo simulations and advanced event modeling require a premium API key"],"relatedNodes":["Wait node","IF node"]}


node_type: n8n-nodes-parcel-app.parcelApp
package_name: n8n-nodes-parcel-app
display_name: Parcel App
description: Track deliveries using the Parcel App API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: hra42
author_github_url: https://github.com/hra42/
npm_package_name: n8n-nodes-parcel-app
npm_version: 0.1.5
community_fetched_at: 2026-07-14T14:40:34.415Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "addDelivery",
      "options": [
        {
          "name": "Add Delivery",
          "value": "addDelivery",
          "action": "Add a delivery",
          "routing": {
            "request": {
              "url": "/add-delivery/",
              "method": "POST"
            }
          },
          "description": "Add a new delivery to track"
        },
        {
          "name": "Get Deliveries",
          "value": "getDeliveries",
          "action": "Get deliveries",
          "routing": {
            "request": {
              "url": "/deliveries/",
              "method": "GET"
            }
          },
          "description": "Retrieve a list of deliveries"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Delivery",
      "value": "addDelivery",
      "action": "Add a delivery",
      "routing": {
        "request": {
          "url": "/add-delivery/",
          "method": "POST"
        }
      },
      "description": "Add a new delivery to track"
    },
    {
      "name": "Get Deliveries",
      "value": "getDeliveries",
      "action": "Get deliveries",
      "routing": {
        "request": {
          "url": "/deliveries/",
          "method": "GET"
        }
      },
      "description": "Retrieve a list of deliveries"
    }
  ]

npm_readme:
  # n8n-nodes-parcel-app

  This is an [n8n](https://n8n.io/) community node for the [Parcel](https://parcelapp.net) delivery tracking API.

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

  ## Installation

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

  ## Operations

  ### Get Deliveries

  Retrieve your tracked deliveries with an optional filter:

  - **Recent** — recently updated deliveries (default)
  - **Active** — currently active deliveries only

  ### Add Delivery

  Add a new delivery to track:

  - **Tracking Number** — the shipment tracking number
  - **Carrier Code** — the carrier identifier (e.g. `ups`, `fedex`, `dhl`). Full list: [supported_carriers.json](https://api.parcel.app/external/supported_carriers.json)
  - **Description** — a label for the delivery
  - **Language** (optional) — ISO 639-1 language code (default: `en`)
  - **Send Push Confirmation** (optional) — send a push notification on success

  ## Credentials

  You need a Parcel API key. Generate one at [web.parcelapp.net](https://web.parcelapp.net).

  ## Rate Limits

  - **Get Deliveries:** 20 requests per hour
  - **Add Delivery:** 20 requests per day

  ## Resources

  - [Parcel API — View Deliveries](https://parcelapp.net/help/api-view-deliveries.html)
  - [Parcel API — Add Delivery](https://parcelapp.net/help/api-add-delivery.html)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"An n8n community node for the Parcel delivery tracking API. It lets you retrieve tracked deliveries and add new deliveries to monitor within Parcel App.","capabilities":["Retrieve tracked deliveries with filters for Recent or Active deliveries","Add a new delivery to track using tracking number, carrier code, and description","Optionally set the delivery language and send a push confirmation on creation"],"authentication":"API key required (Parcel API key generated in Parcel App web dashboard)","commonUseCases":["Monitor shipment status for current or recently updated deliveries","Create new tracked deliveries automatically from orders or shipment events"],"limitations":["Get Deliveries is limited to 20 requests per hour","Add Delivery is limited to 20 requests per day","Carrier codes must be supported by Parcel's supported carriers list"],"relatedNodes":["n8n community nodes"]}


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

updated_at: 2026-07-14 14:40:34
author_name: sattip
author_github_url: https://github.com/OBSTechnologies/
npm_package_name: n8n-nodes-perfexcrm
npm_version: 0.1.40
community_fetched_at: 2026-07-14T14:40:34.416Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # PerfexCRM for n8n — Community Node for API & Webhook Workflow Automation

  [![npm version](https://badge.fury.io/js/n8n-nodes-perfexcrm.svg "n8n-nodes-perfexcrm on npm")](https://www.npmjs.com/package/n8n-nodes-perfexcrm)
  [![GitHub release](https://img.shields.io/github/release/OBSTechnologies/n8n-nodes-perfexcrm.svg "GitHub release version")](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/releases)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg "MIT License")](https://opensource.org/licenses/MIT)
  [![Verified n8n Community Node](https://img.shields.io/badge/n8n-Verified%20Community%20Node-EA4B71 "Verified n8n community node — installable in one click on n8n Cloud")](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/)

  Connect [PerfexCRM](https://www.perfexcrm.com/) to [n8n](https://n8n.io/) with this **verified n8n community node** — installable in one click directly from the n8n canvas, on n8n Cloud or self-hosted — and build no-code / low-code workflow automations across your entire CRM. It ships with **21 PerfexCRM resources**, **181 REST API operations**, and a trigger node with **103 real-time webhook events** — enough coverage to automate leads, tickets, invoices, projects, contracts, subscriptions, and more without writing glue code. Whether you want to sync PerfexCRM data to Slack, Google Sheets, HubSpot, or Mailchimp, push webhook-driven events into any of n8n's 400+ integrations, or orchestrate multi-step CRM workflows, this node is a complete PerfexCRM automation toolkit.

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

  ## Table of Contents

  - [Why use this node?](#why-use-this-node)
  - [Prerequisites — PerfexCRM API & Webhooks Module](#prerequisites--perfexcrm-api--webhooks-module)
  - [Installation](#installation)
  - [PerfexCRM API Operations (21 Resources, 181 Operations)](#perfexcrm-api-operations-21-resources-181-operations)
  - [PerfexCRM Trigger Node — 103 Real-Time Webhook Events](#perfexcrm-trigger-node--103-real-time-webhook-events)
  - [Authentication & API Credentials](#authentication--api-credentials)
  - [Example PerfexCRM Automation Workflows](#example-perfexcrm-automation-workflows)
  - [Compatibility & Requirements](#compatibility--requirements)
  - [FAQ](#faq)
  - [Resources](#resources)
  - [Support](#support)
  - [Contributing](#contributing)

  ## Why use this node?

  - **Sync PerfexCRM leads and customers** to any tool — Slack, Google Sheets, HubSpot, Mailchimp, Airtable, Notion, or any of n8n's 400+ integrations.
  - **Automate invoice and payment notifications** the moment a PerfexCRM invoice is paid, overdue, or cancelled.
  - **Route support tickets intelligently** based on department, priority, or customer tier, and page the right team in real time.
  - **Trigger workflows from 103 PerfexCRM webhook events** — from `lead.created` and `invoice.paid` to `contract.expiring` and `task.overdue`.
  - **Eliminate manual PerfexCRM admin work** with no-code / low-code automation — no glue scripts, no cron jobs, no duct-taped Zaps.

  ## Prerequisites — PerfexCRM API & Webhooks Module

  **This n8n node requires the PerfexCRM API & Webhooks module to be installed on your PerfexCRM instance.**

  ### [Purchase the PerfexCRM API & Webhooks Module at perfexapi.com](https://perfexapi.com)

  The module provides:
  - RESTful API endpoints for all PerfexCRM entities
  - Webhook support for real-time events
  - API key authentication
  - Rate limiting and security features
  - Comprehensive documentation

  ## Installation

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

  ### Manual Installation

  1. Clone or download this repository
  2. In your n8n installation folder, navigate to `~/.n8n/nodes/`
  3. Create a folder called `n8n-nodes-perfexcrm`
  4. Copy all files from this repository into that folder
  5. Build the node:
     ```bash
     cd ~/.n8n/nodes/n8n-nodes-perfexcrm
     npm install
     npm run build
     ```
  6. Restart n8n

  ## PerfexCRM API Operations (21 Resources, 181 Operations)

  ### PerfexCRM Action Node — REST API Coverage

  **21 resources** with **181 operations** covering the entire PerfexCRM API.

  | Resource | Ops | Operations |
  |----------|:---:|------------|
  | **Customer** | 10 | Create, Get, Get Many, Update, Delete, Get Contacts, Get Contracts, Get Invoices, Get Projects, Get Tickets |
  | **Ticket** | 14 | Create, Get, Get Many, Update, Delete, Add Reply, Get Reply, Update Reply, Delete Reply, List Replies, Get Attachments, Get History, Assign, Change Status |
  | **Invoice** | 8 | Create, Get, Get Many, Update, Delete, Get Payments, Get PDF, Send |
  | **Lead** | 8 | Create, Get, Get Many, Update, Delete, Convert, Get Activities, Get Notes |
  | **Project** | 9 | Create, Get, Get Many, Update, Delete, Get Activity, Get Files, Get Milestones, Get Tasks |
  | **Contract** | 11 | Create, Get, Get Many, Update, Delete, Sign, Get Attachments, Get Comments, Get Expired, Get Expiring, Renew |
  | **Task** | 22 | Create, Get, Get Many, Update, Delete, Assign, Change Status, Mark Complete, Get Attachments, List Comments, Add Comment, List Timesheets, Add Timesheet, List Checklist, Add Checklist Item, Get Checklist Item, Update Checklist Item, Delete Checklist Item, Change Priority, List Followers, Add Follower, Remove Follower |
  | **Expense** | 6 | Create, Get, Get Many, Update, Delete, Get Categories |
  | **Estimate** | 8 | Create, Get, Get Many, Update, Delete, Send, Convert, Get PDF |
  | **Staff** | 14 | Create, Get, Get Many, Update, Delete, Activate, Deactivate, Get Permissions, Get Departments, Get Roles, Get Department List, Change Password, Get Tasks, Get Timesheets |
  | **Proposal** | 11 | Create, Get, Get Many, Update, Delete, Send, Accept, Decline, List Comments, Add Comment, Get PDF |
  | **Credit Note** | 10 | Create, Get, Get Many, Update, Delete, Add Refund, List Refunds, Apply Credit, List Credits, Get PDF |
  | **Subscription** | 5 | Create, Get, Get Many, Update, Delete |
  | **Item** | 6 | Create, Get, Get Many, Update, Delete, Get Groups |
  | **Payment** | 5 | Create, Get, Get Many, Update, Delete |
  | **Contact** | 5 | Create, Get, Get Many, Update, Delete |
  | **Timesheet** | 5 | Create, Get, Get Many, Update, Delete |
  | **Note** | 5 | Create, Get, Get Many, Update, Delete |
  | **Knowledge Base** | 5 | Create, Get, Get Many, Update, Delete |
  | **Knowledge Base Group** | 5 | Create, Get, Get Many, Update, Delete |
  | **Utility** | 10 | Get Currencies, Get Taxes, Get Departments, Get Payment Modes, Get Countries, Get Ticket Statuses, Get Ticket Priorities, Get Lead Statuses, Get Lead Sources, Get Contract Types |

  ### PerfexCRM Trigger Node — 103 Real-Time Webhook Events

  Listen for webhooks from PerfexCRM and start n8n workflows the instant something happens in your CRM — no polling required.

  #### Supported Events (103 webhook events)

  | Category | Events |
  |----------|--------|
  | **Contact** | created, deleted, updated |
  | **Contract** | cancelled, created, deleted, expired, expiring, renewed, signed, updated |
  | **Credit Note** | created, credits_applied, deleted, refund_created, sent, status_changed, updated |
  | **Customer** | contact_added, created, deleted, status_changed, updated |
  | **Estimate** | accepted, converted, created, declined, deleted, expiring, sent, updated |
  | **Expense** | created, deleted, updated |
  | **Invoice** | cancelled, created, deleted, overdue, paid, sent, status_changed, updated |
  | **Item** | created, deleted, updated |
  | **Knowledge Base** | article.created, article.deleted, article.updated |
  | **Lead** | assigned, converted, created, status_changed, updated |
  | **Note** | created, deleted, updated |
  | **Payment** | created, deleted, updated |
  | **Project** | completed, created, status_changed, updated |
  | **Proposal** | accepted, comment_added, converted, created, declined, deleted, sent, updated |
  | **Staff** | activated, created, deactivated, deleted, login, password_changed, permissions_changed, updated |
  | **Subscription** | created |
  | **Task** | assigned, comment_added, completed, created, deleted, overdue, priority_changed, status_changed, timesheet_added, updated |
  | **Ticket** | assigned, attachment_added, closed, created, deleted, priority_changed, reopened, reply_added, status_changed, updated |
  | **Timesheet** | created, deleted, updated |

  ## Authentication & API Credentials

  You'll need to enter the following credentials to use this node:

  1. **Base URL**: The URL of your PerfexCRM installation (e.g., `https://your-perfex.com`)
  2. **API Key**: Your PerfexCRM API key (starts with `pk_`)
  3. **API Version**: The API version to use (currently only `v1` is supported)

  ### Getting your PerfexCRM API Key

  1. Log in to your PerfexCRM admin panel
  2. Navigate to **Setup** > **API & Webhooks**
  3. Click on **API Keys**
  4. Create a new API key with the appropriate permissions
  5. Copy the API key (you'll only see it once!)

  ## Example PerfexCRM Automation Workflows

  ### Lead to Customer Automation
  When a new lead is created in PerfexCRM, automatically score it, convert qualifying leads to customers, spin up a dedicated project, draft a welcome invoice, and fire a personalised onboarding email via Gmail or SendGrid. Eliminates the manual hand-off between sales and delivery.

  ### Invoice Payment Tracking
  Subscribe to the `invoice.paid` and `invoice.overdue` webhook events, push paid invoices to your accounting system (QuickBooks, Xero, or a Google Sheet), and alert your finance team in Slack or Microsoft Teams the moment an invoice goes overdue. Cash flow visibility without a single manual check.

  ### Support Ticket Routing
  Automatically triage every new PerfexCRM ticket: route VIP customers to senior staff, page on-call engineers for P1 priorities, assign by department keyword, and post a digest of open tickets to a Slack channel each morning. A support inbox that sorts itself.

  ### Customer Onboarding
  Build an end-to-end onboarding workflow: create the PerfexCRM customer record, create a matching project and initial milestones, generate and send the first invoice, provision accounts in third-party tools (Stripe, HubSpot, Intercom), and deliver a branded welcome package — all triggered by one webhook.

  ## Compatibility & Requirements

  - n8n version 0.180.0 or later
  - PerfexCRM 2.3.x or later
  - PerfexCRM API & Webhooks Module (required)

  ## FAQ

  ### Is this an official n8n node?
  No — it's a community node built and maintained by [OBS Technologies](https://obstechnologies.com), now **verified by n8n**. As a verified community node it installs in one click on **n8n Cloud** and any self-hosted n8n (v1.94+) via the Community Nodes feature. (Verification means the node passed n8n's security and quality review; it doesn't imply n8n endorses PerfexCRM.)

  ### Do I need the PerfexCRM API & Webhooks module?
  Yes. This node talks to the PerfexCRM REST API exposed by the [PerfexCRM API & Webhooks module](https://perfexapi.com). Without it installed on your PerfexCRM instance, neither the action node nor the trigger node can reach your data.

  ### Which PerfexCRM versions are supported?
  PerfexCRM 2.3.x and later. Older PerfexCRM versions may work for read-only operations but are not officially tested.

  ### Can I use this node on n8n Cloud?
  Yes. `n8n-nodes-perfexcrm` is a [verified community node](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/), so it's available on **n8n Cloud** as well as self-hosted. On n8n v1.94+ with verified community nodes enabled, open the nodes panel, find it under **"More from the community,"** and install it in one click — no manual npm setup required.

  ### How do I get a PerfexCRM API key?
  In your PerfexCRM admin panel, go to **Setup → API & Webhooks → API Keys**, create a new key with the permissions you need, and copy the value (shown once). See [Authentication & API Credentials](#authentication--api-credentials) for details.

  ### What PerfexCRM events can trigger an n8n workflow?
  103 webhook events across 19 categories — leads, customers, invoices, tickets, tasks, contracts, projects, proposals, estimates, payments, subscriptions, knowledge base, and more. See the [full event table](#supported-events-103-webhook-events).

  ### How do I add line items to an invoice, estimate or credit note?
  Create operations for Invoices, Estimates and Credit Notes include a **Line Items** section where you add one or more items (description, quantity, rate, and optionally long description, unit and tax name). Totals are calculated from the line items — without at least one item the document value is 0.

  ### Does this node support PerfexCRM custom fields?
  Yes. Create and Update operations include a **Custom Fields** section (under Additional/Update Fields) where you add custom field values — keyed by the field's numeric ID or its slug. Custom field values are also returned in the payload on Get operations and webhook events. Supported across Customers, Contacts, Leads, Projects, Tasks, Tickets, Contracts, Expenses, Invoices, Estimates, Proposals, Credit Notes and Staff (requires the PerfexCRM API & Webhooks module v2.8.9+).

  ### Is there a rate limit?
  Rate limiting is handled by the PerfexCRM API & Webhooks module itself. n8n will surface the HTTP 429 responses if you exceed your configured rate limit so you can implement retries.

  ## Resources

  * [Purchase PerfexCRM API & Webhooks Module](https://perfexapi.com)
  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [PerfexCRM API Documentation](https://your-perfex.com/admin/api_webhooks/documentation)
  * [GitHub Repository](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm)
  * [npm Package](https://www.npmjs.com/package/n8n-nodes-perfexcrm)

  ## Support

  ### For n8n Node Issues:
  - [Open an issue on GitHub](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/issues)
  - [n8n Community Forum](https://community.n8n.io/)

  ### For PerfexCRM API & Webhooks Module:
  - [Support at perfexapi.com](https://perfexapi.com)
  - Email: support@obstechnologies.com

  ## Contributing

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

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

  ## Author

  **OBS Technologies**
  - Website: [obstechnologies.com](https://obstechnologies.com)
  - PerfexCRM Modules: [perfexapi.com](https://perfexapi.com)
  - GitHub: [@OBSTechnologies](https://github.com/OBSTechnologies)

  ## License

  [MIT](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/blob/main/LICENSE) (c) OBS Technologies

  ---

  **Built for the n8n community by [OBS Technologies](https://obstechnologies.com)** — specialists in PerfexCRM automation, custom CRM integrations, and workflow engineering.

  If you find this node useful, please star it on [GitHub](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm)!

ai_documentation_summary:
  {"purpose":"Triggers n8n workflows from real-time PerfexCRM webhook events. It is part of a broader community node for automating PerfexCRM data and event handling in n8n.","capabilities":["Starts workflows on PerfexCRM webhook events","Supports real-time event-driven automation from PerfexCRM","Covers 103 webhook event types such as lead.created, invoice.paid, contract.expiring, and task.overdue","Integrates with other n8n nodes for downstream automation"],"authentication":"Requires the PerfexCRM API & Webhooks module; authentication uses API key authentication provided by that module.","commonUseCases":["Trigger notifications when invoices are paid, overdue, or cancelled","Start workflows when leads, tickets, contracts, or tasks change in PerfexCRM","Route support tickets based on department, priority, or customer tier","Sync PerfexCRM events into other tools like Slack, Google Sheets, HubSpot, or Mailchimp"],"limitations":["Requires the PerfexCRM API & Webhooks module to be installed on the PerfexCRM instance","Webhook functionality depends on PerfexCRM module support and configuration"],"relatedNodes":["PerfexCRM API node","Webhook Trigger","HTTP Request"]}


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

updated_at: 2026-07-14 14:40:34
author_name: sattip
author_github_url: https://github.com/OBSTechnologies/
npm_package_name: n8n-nodes-perfexcrm
npm_version: 0.1.40
community_fetched_at: 2026-07-14T14:40:34.417Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "customer",
      "options": [
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Ticket",
          "value": "ticket"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Contract",
          "value": "contract"
        },
        {
          "name": "Estimate",
          "value": "estimate"
        },
        {
          "name": "Expense",
          "value": "expense"
        },
        {
          "name": "Proposal",
          "value": "proposal"
        },
        {
          "name": "Staff",
          "value": "staff"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Credit Note",
          "value": "creditNote"
        },
        {
          "name": "Item",
          "value": "item"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Timesheet",
          "value": "timesheet"
        },
        {
          "name": "Note",
          "value": "note"
        },
        {
          "name": "Knowledge Base",
          "value": "knowledgeBase"
        },
        {
          "name": "Knowledge Base Group",
          "value": "knowledgeBaseGroup"
        },
        {
          "name": "Subscription",
          "value": "subscription"
        },
        {
          "name": "Utility",
          "value": "utility"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a customer",
          "description": "Create a new customer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a customer",
          "description": "Delete a customer"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a customer",
          "description": "Get a customer"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many customers",
          "description": "Get many customers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a customer",
          "description": "Update a customer"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts for a customer",
          "description": "Get contacts for a customer"
        },
        {
          "name": "Get Contracts",
          "value": "getContracts",
          "action": "Get contracts for a customer",
          "description": "Get contracts for a customer"
        },
        {
          "name": "Get Invoices",
          "value": "getInvoices",
          "action": "Get invoices for a customer",
          "description": "Get invoices for a customer"
        },
        {
          "name": "Get Projects",
          "value": "getProjects",
          "action": "Get projects for a customer",
          "description": "Get projects for a customer"
        },
        {
          "name": "Get Tickets",
          "value": "getTickets",
          "action": "Get tickets for a customer",
          "description": "Get tickets for a customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add Reply",
          "value": "addReply",
          "action": "Add reply to ticket",
          "description": "Add a reply to a ticket"
        },
        {
          "name": "Assign",
          "value": "assign",
          "action": "Assign a ticket",
          "description": "Assign a ticket to a staff member"
        },
        {
          "name": "Change Status",
          "value": "changeStatus",
          "action": "Change ticket status",
          "description": "Change the status of a ticket"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a ticket",
          "description": "Create a new ticket"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a ticket",
          "description": "Delete a ticket"
        },
        {
          "name": "Delete Reply",
          "value": "deleteReply",
          "action": "Delete reply from ticket",
          "description": "Delete a reply from a ticket"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a ticket",
          "description": "Get a ticket"
        },
        {
          "name": "Get Attachments",
          "value": "getAttachments",
          "action": "Get attachments from ticket",
          "description": "Get all attachments from a ticket"
        },
        {
          "name": "Get History",
          "value": "getHistory",
          "action": "Get ticket history",
          "description": "Get the history/activity log of a ticket"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tickets",
          "description": "Get many tickets"
        },
        {
          "name": "Get Reply",
          "value": "getReply",
          "action": "Get reply from ticket",
          "description": "Get a reply from a ticket"
        },
        {
          "name": "List Replies",
          "value": "listReplies",
          "action": "Get all replies from ticket",
          "description": "Get all replies from a ticket"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a ticket",
          "description": "Update a ticket"
        },
        {
          "name": "Update Reply",
          "value": "updateReply",
          "action": "Update reply on ticket",
          "description": "Update a reply on a ticket"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ticket"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an invoice",
          "description": "Create a new invoice"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an invoice",
          "description": "Delete an invoice"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an invoice",
          "description": "Get an invoice"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "description": "Get many invoices"
        },
        {
          "name": "Get PDF",
          "value": "getPdf",
          "action": "Get an invoice PDF",
          "description": "Get the invoice as a base64-encoded PDF"
        },
        {
          "name": "Get Payments",
          "value": "getPayments",
          "action": "Get payments for invoice",
          "description": "Get all payments for an invoice"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send an invoice",
          "description": "Send an invoice to the client via email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an invoice",
          "description": "Update an invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Convert",
          "value": "convert",
          "action": "Convert a lead",
          "description": "Convert a lead to a customer"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "description": "Create a new lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "description": "Delete a lead"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "description": "Get a lead"
        },
        {
          "name": "Get Activities",
          "value": "getActivities",
          "action": "Get activities for lead",
          "description": "Get all activities for a lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads",
          "description": "Get many leads"
        },
        {
          "name": "Get Notes",
          "value": "getNotes",
          "action": "Get notes for lead",
          "description": "Get all notes for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "description": "Update a lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a project",
          "description": "Create a new project"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a project",
          "description": "Delete a project"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a project",
          "description": "Get a project"
        },
        {
          "name": "Get Activity",
          "value": "getActivity",
          "action": "Get activity for project",
          "description": "Get activity log for a project"
        },
        {
          "name": "Get Files",
          "value": "getFiles",
          "action": "Get files for project",
          "description": "Get all files for a project"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many projects",
          "description": "Get many projects"
        },
        {
          "name": "Get Milestones",
          "value": "getMilestones",
          "action": "Get milestones for project",
          "description": "Get all milestones for a project"
        },
        {
          "name": "Get Tasks",
          "value": "getTasks",
          "action": "Get tasks for project",
          "description": "Get all tasks for a project"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a project",
          "description": "Update a project"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contract",
          "description": "Create a new contract"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contract",
          "description": "Delete a contract"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contract",
          "description": "Get a contract"
        },
        {
          "name": "Get Attachments",
          "value": "getAttachments",
          "action": "Get attachments for contract",
          "description": "Get all attachments for a contract"
        },
        {
          "name": "Get Comments",
          "value": "getComments",
          "action": "Get comments for contract",
          "description": "Get all comments for a contract"
        },
        {
          "name": "Get Expired",
          "value": "getExpired",
          "action": "Get expired contracts",
          "description": "Get all expired contracts"
        },
        {
          "name": "Get Expiring",
          "value": "getExpiring",
          "action": "Get expiring contracts",
          "description": "Get contracts expiring soon"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contracts",
          "description": "Get many contracts"
        },
        {
          "name": "Renew",
          "value": "renew",
          "action": "Renew a contract",
          "description": "Renew an expired or expiring contract"
        },
        {
          "name": "Sign",
          "value": "sign",
          "action": "Sign a contract",
          "description": "Sign a contract"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contract",
          "description": "Update a contract"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contract"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add Checklist Item",
          "value": "addChecklistItem",
          "action": "Add checklist item to task",
          "description": "Add a checklist item to a task"
        },
        {
          "name": "Add Comment",
          "value": "addComment",
          "action": "Add comment to task",
          "description": "Add a comment to a task"
        },
        {
          "name": "Add Timesheet",
          "value": "addTimesheet",
          "action": "Add timesheet to task",
          "description": "Add a timesheet entry to a task"
        },
        {
          "name": "Assign",
          "value": "assign",
          "action": "Assign a task",
          "description": "Assign a task to a staff member"
        },
        {
          "name": "Change Status",
          "value": "changeStatus",
          "action": "Change task status",
          "description": "Change the status of a task"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task",
          "description": "Create a new task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task",
          "description": "Delete a task"
        },
        {
          "name": "Delete Checklist Item",
          "value": "deleteChecklistItem",
          "action": "Delete checklist item from task",
          "description": "Delete a checklist item from a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task",
          "description": "Get a task"
        },
        {
          "name": "Get Attachments",
          "value": "getAttachments",
          "action": "Get attachments from task",
          "description": "Get all attachments from a task"
        },
        {
          "name": "Get Checklist Item",
          "value": "getChecklistItem",
          "action": "Get checklist item from task",
          "description": "Get a checklist item from a task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks",
          "description": "Get many tasks"
        },
        {
          "name": "List Checklist",
          "value": "listChecklist",
          "action": "Get all checklist items from task",
          "description": "Get all checklist items from a task"
        },
        {
          "name": "List Comments",
          "value": "listComments",
          "action": "Get all comments from task",
          "description": "Get all comments from a task"
        },
        {
          "name": "List Timesheets",
          "value": "listTimesheets",
          "action": "Get all timesheets from task",
          "description": "Get all timesheet entries from a task"
        },
        {
          "name": "Mark Complete",
          "value": "markComplete",
          "action": "Mark task as complete",
          "description": "Mark a task as complete"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task",
          "description": "Update a task"
        },
        {
          "name": "Update Checklist Item",
          "value": "updateChecklistItem",
          "action": "Update checklist item on task",
          "description": "Update a checklist item on a task"
        },
        {
          "name": "Change Priority",
          "value": "changePriority",
          "action": "Change task priority",
          "description": "Change the priority of a task"
        },
        {
          "name": "List Followers",
          "value": "listFollowers",
          "action": "List task followers",
          "description": "Get all followers of a task"
        },
        {
          "name": "Add Follower",
          "value": "addFollower",
          "action": "Add a task follower",
          "description": "Add a follower to a task"
        },
        {
          "name": "Remove Follower",
          "value": "removeFollower",
          "action": "Remove a task follower",
          "description": "Remove a follower from a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an expense",
          "description": "Create a new expense"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an expense",
          "description": "Delete an expense"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an expense",
          "description": "Get an expense"
        },
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Get all expense categories",
          "description": "Get all expense categories"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many expenses",
          "description": "Get many expenses"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an expense",
          "description": "Update an expense"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "expense"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Convert",
          "value": "convert",
          "action": "Convert an estimate",
          "description": "Convert an estimate to an invoice"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an estimate",
          "description": "Create a new estimate"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an estimate",
          "description": "Delete an estimate"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an estimate",
          "description": "Get an estimate"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many estimates",
          "description": "Get many estimates"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send an estimate",
          "description": "Send an estimate to the client via email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an estimate",
          "description": "Update an estimate"
        },
        {
          "name": "Get PDF",
          "value": "getPdf",
          "action": "Get estimate PDF",
          "description": "Download an estimate as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "estimate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Activate",
          "value": "activate",
          "action": "Activate a staff member",
          "description": "Activate a staff member"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a staff member",
          "description": "Create a new staff member"
        },
        {
          "name": "Deactivate",
          "value": "deactivate",
          "action": "Deactivate a staff member",
          "description": "Deactivate a staff member"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a staff member",
          "description": "Delete a staff member"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a staff member",
          "description": "Get a staff member"
        },
        {
          "name": "Get Department List",
          "value": "getDepartmentList",
          "action": "Get all departments",
          "description": "Get all departments"
        },
        {
          "name": "Get Departments",
          "value": "getDepartments",
          "action": "Get departments for a staff member",
          "description": "Get departments for a staff member"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many staff members",
          "description": "Get many staff members"
        },
        {
          "name": "Get Permissions",
          "value": "getPermissions",
          "action": "Get permissions for a staff member",
          "description": "Get permissions for a staff member"
        },
        {
          "name": "Get Roles",
          "value": "getRoles",
          "action": "Get all roles",
          "description": "Get all roles"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a staff member",
          "description": "Update a staff member"
        },
        {
          "name": "Change Password",
          "value": "changePassword",
          "action": "Change staff password",
          "description": "Change a staff member password"
        },
        {
          "name": "Get Tasks",
          "value": "getTasks",
          "action": "Get staff tasks",
          "description": "Get tasks assigned to a staff member"
        },
        {
          "name": "Get Timesheets",
          "value": "getTimesheets",
          "action": "Get staff timesheets",
          "description": "Get timesheets for a staff member"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "staff"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Accept",
          "value": "accept",
          "action": "Accept a proposal",
          "description": "Mark a proposal as accepted"
        },
        {
          "name": "Add Comment",
          "value": "addComment",
          "action": "Add comment to proposal",
          "description": "Add a comment to a proposal"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a proposal",
          "description": "Create a new proposal"
        },
        {
          "name": "Decline",
          "value": "decline",
          "action": "Decline a proposal",
          "description": "Mark a proposal as declined"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a proposal",
          "description": "Delete a proposal"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a proposal",
          "description": "Get a proposal"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many proposals",
          "description": "Get many proposals"
        },
        {
          "name": "List Comments",
          "value": "listComments",
          "action": "Get all comments for proposal",
          "description": "Get all comments for a proposal"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a proposal",
          "description": "Send a proposal to the customer via email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a proposal",
          "description": "Update a proposal"
        },
        {
          "name": "Get PDF",
          "value": "getPdf",
          "action": "Get proposal PDF",
          "description": "Download a proposal as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "proposal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Add Refund",
          "value": "addRefund",
          "action": "Add a refund to a credit note",
          "description": "Add a refund to a credit note"
        },
        {
          "name": "Apply Credit",
          "value": "applyCredit",
          "action": "Apply credit to an invoice",
          "description": "Apply credit to an invoice"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a credit note",
          "description": "Create a new credit note"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a credit note",
          "description": "Delete a credit note"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a credit note",
          "description": "Get a credit note"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many credit notes",
          "description": "Get many credit notes"
        },
        {
          "name": "List Credits",
          "value": "listCredits",
          "action": "List credits for a credit note",
          "description": "List all credits applied from a credit note"
        },
        {
          "name": "List Refunds",
          "value": "listRefunds",
          "action": "List refunds for a credit note",
          "description": "List all refunds for a credit note"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a credit note",
          "description": "Update a credit note"
        },
        {
          "name": "Get PDF",
          "value": "getPdf",
          "action": "Get credit note PDF",
          "description": "Download a credit note as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "creditNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a subscription",
          "description": "Create a new subscription"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a subscription",
          "description": "Delete a subscription"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a subscription",
          "description": "Get a subscription"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many subscriptions",
          "description": "Get many subscriptions"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a subscription",
          "description": "Update a subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subscription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a catalog item",
          "description": "Create a catalog item"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a catalog item",
          "description": "Delete a catalog item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a catalog item",
          "description": "Get a catalog item"
        },
        {
          "name": "Get Groups",
          "value": "getGroups",
          "action": "Get all item groups",
          "description": "Get all item groups"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many catalog items",
          "description": "Get many catalog items"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a catalog item",
          "description": "Update a catalog item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "item"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a payment",
          "description": "Create a new payment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a payment",
          "description": "Delete a payment"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment",
          "description": "Get a payment"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many payments",
          "description": "Get many payments"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a payment",
          "description": "Update a payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "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": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a timesheet entry",
          "description": "Create a new timesheet entry"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a timesheet entry",
          "description": "Delete a timesheet entry"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a timesheet entry",
          "description": "Get a timesheet entry"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many timesheet entries",
          "description": "Get many timesheet entries"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a timesheet entry",
          "description": "Update a timesheet entry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timesheet"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a note",
          "description": "Create a new note"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a note",
          "description": "Delete a note"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a note",
          "description": "Get a note"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many notes",
          "description": "Get many notes"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a note",
          "description": "Update a note"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "note"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a knowledge base article",
          "description": "Create a knowledge base article"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a knowledge base article",
          "description": "Delete a knowledge base article"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a knowledge base article",
          "description": "Get a knowledge base article"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many knowledge base articles",
          "description": "Get many knowledge base articles"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a knowledge base article",
          "description": "Update a knowledge base article"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "knowledgeBase"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a knowledge base group",
          "description": "Create a knowledge base group"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a knowledge base group",
          "description": "Delete a knowledge base group"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a knowledge base group",
          "description": "Get a knowledge base group"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many knowledge base groups",
          "description": "Get many knowledge base groups"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a knowledge base group",
          "description": "Update a knowledge base group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "knowledgeBaseGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCurrencies",
      "options": [
        {
          "name": "Get Contract Types",
          "value": "getContractTypes",
          "action": "Get all contract types",
          "description": "Get all contract types"
        },
        {
          "name": "Get Countries",
          "value": "getCountries",
          "action": "Get all countries",
          "description": "Get all countries"
        },
        {
          "name": "Get Currencies",
          "value": "getCurrencies",
          "action": "Get all currencies",
          "description": "Get all currencies"
        },
        {
          "name": "Get Departments",
          "value": "getDepartments",
          "action": "Get all departments",
          "description": "Get all departments"
        },
        {
          "name": "Get Lead Sources",
          "value": "getLeadSources",
          "action": "Get all lead sources",
          "description": "Get all lead sources"
        },
        {
          "name": "Get Lead Statuses",
          "value": "getLeadStatuses",
          "action": "Get all lead statuses",
          "description": "Get all lead statuses"
        },
        {
          "name": "Get Payment Modes",
          "value": "getPaymentModes",
          "action": "Get all payment modes",
          "description": "Get all payment modes"
        },
        {
          "name": "Get Taxes",
          "value": "getTaxes",
          "action": "Get all tax rates",
          "description": "Get all tax rates"
        },
        {
          "name": "Get Ticket Priorities",
          "value": "getTicketPriorities",
          "action": "Get all ticket priorities",
          "description": "Get all ticket priorities"
        },
        {
          "name": "Get Ticket Statuses",
          "value": "getTicketStatuses",
          "action": "Get all ticket statuses",
          "description": "Get all ticket statuses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "utility"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a customer",
      "description": "Create a new customer",
      "resource": "customer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a customer",
      "description": "Delete a customer",
      "resource": "customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a customer",
      "description": "Get a customer",
      "resource": "customer"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many customers",
      "description": "Get many customers",
      "resource": "customer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a customer",
      "description": "Update a customer",
      "resource": "customer"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts for a customer",
      "description": "Get contacts for a customer",
      "resource": "customer"
    },
    {
      "name": "Get Contracts",
      "value": "getContracts",
      "action": "Get contracts for a customer",
      "description": "Get contracts for a customer",
      "resource": "customer"
    },
    {
      "name": "Get Invoices",
      "value": "getInvoices",
      "action": "Get invoices for a customer",
      "description": "Get invoices for a customer",
      "resource": "customer"
    },
    {
      "name": "Get Projects",
      "value": "getProjects",
      "action": "Get projects for a customer",
      "description": "Get projects for a customer",
      "resource": "customer"
    },
    {
      "name": "Get Tickets",
      "value": "getTickets",
      "action": "Get tickets for a customer",
      "description": "Get tickets for a customer",
      "resource": "customer"
    },
    {
      "name": "Add Reply",
      "value": "addReply",
      "action": "Add reply to ticket",
      "description": "Add a reply to a ticket",
      "resource": "ticket"
    },
    {
      "name": "Assign",
      "value": "assign",
      "action": "Assign a ticket",
      "description": "Assign a ticket to a staff member",
      "resource": "ticket"
    },
    {
      "name": "Change Status",
      "value": "changeStatus",
      "action": "Change ticket status",
      "description": "Change the status of a ticket",
      "resource": "ticket"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a ticket",
      "description": "Create a new ticket",
      "resource": "ticket"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a ticket",
      "description": "Delete a ticket",
      "resource": "ticket"
    },
    {
      "name": "Delete Reply",
      "value": "deleteReply",
      "action": "Delete reply from ticket",
      "description": "Delete a reply from a ticket",
      "resource": "ticket"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a ticket",
      "description": "Get a ticket",
      "resource": "ticket"
    },
    {
      "name": "Get Attachments",
      "value": "getAttachments",
      "action": "Get attachments from ticket",
      "description": "Get all attachments from a ticket",
      "resource": "ticket"
    },
    {
      "name": "Get History",
      "value": "getHistory",
      "action": "Get ticket history",
      "description": "Get the history/activity log of a ticket",
      "resource": "ticket"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tickets",
      "description": "Get many tickets",
      "resource": "ticket"
    },
    {
      "name": "Get Reply",
      "value": "getReply",
      "action": "Get reply from ticket",
      "description": "Get a reply from a ticket",
      "resource": "ticket"
    },
    {
      "name": "List Replies",
      "value": "listReplies",
      "action": "Get all replies from ticket",
      "description": "Get all replies from a ticket",
      "resource": "ticket"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a ticket",
      "description": "Update a ticket",
      "resource": "ticket"
    },
    {
      "name": "Update Reply",
      "value": "updateReply",
      "action": "Update reply on ticket",
      "description": "Update a reply on a ticket",
      "resource": "ticket"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an invoice",
      "description": "Create a new invoice",
      "resource": "invoice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an invoice",
      "description": "Delete an invoice",
      "resource": "invoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an invoice",
      "description": "Get an invoice",
      "resource": "invoice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "description": "Get many invoices",
      "resource": "invoice"
    },
    {
      "name": "Get PDF",
      "value": "getPdf",
      "action": "Get an invoice PDF",
      "description": "Get the invoice as a base64-encoded PDF",
      "resource": "invoice"
    },
    {
      "name": "Get Payments",
      "value": "getPayments",
      "action": "Get payments for invoice",
      "description": "Get all payments for an invoice",
      "resource": "invoice"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send an invoice",
      "description": "Send an invoice to the client via email",
      "resource": "invoice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an invoice",
      "description": "Update an invoice",
      "resource": "invoice"
    },
    {
      "name": "Convert",
      "value": "convert",
      "action": "Convert a lead",
      "description": "Convert a lead to a customer",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "description": "Create a new lead",
      "resource": "lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "description": "Delete a lead",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "description": "Get a lead",
      "resource": "lead"
    },
    {
      "name": "Get Activities",
      "value": "getActivities",
      "action": "Get activities for lead",
      "description": "Get all activities for a lead",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "description": "Get many leads",
      "resource": "lead"
    },
    {
      "name": "Get Notes",
      "value": "getNotes",
      "action": "Get notes for lead",
      "description": "Get all notes for a lead",
      "resource": "lead"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "description": "Update a lead",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a project",
      "description": "Create a new project",
      "resource": "project"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a project",
      "description": "Delete a project",
      "resource": "project"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a project",
      "description": "Get a project",
      "resource": "project"
    },
    {
      "name": "Get Activity",
      "value": "getActivity",
      "action": "Get activity for project",
      "description": "Get activity log for a project",
      "resource": "project"
    },
    {
      "name": "Get Files",
      "value": "getFiles",
      "action": "Get files for project",
      "description": "Get all files for a project",
      "resource": "project"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many projects",
      "description": "Get many projects",
      "resource": "project"
    },
    {
      "name": "Get Milestones",
      "value": "getMilestones",
      "action": "Get milestones for project",
      "description": "Get all milestones for a project",
      "resource": "project"
    },
    {
      "name": "Get Tasks",
      "value": "getTasks",
      "action": "Get tasks for project",
      "description": "Get all tasks for a project",
      "resource": "project"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a project",
      "description": "Update a project",
      "resource": "project"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contract",
      "description": "Create a new contract",
      "resource": "contract"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contract",
      "description": "Delete a contract",
      "resource": "contract"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contract",
      "description": "Get a contract",
      "resource": "contract"
    },
    {
      "name": "Get Attachments",
      "value": "getAttachments",
      "action": "Get attachments for contract",
      "description": "Get all attachments for a contract",
      "resource": "contract"
    },
    {
      "name": "Get Comments",
      "value": "getComments",
      "action": "Get comments for contract",
      "description": "Get all comments for a contract",
      "resource": "contract"
    },
    {
      "name": "Get Expired",
      "value": "getExpired",
      "action": "Get expired contracts",
      "description": "Get all expired contracts",
      "resource": "contract"
    },
    {
      "name": "Get Expiring",
      "value": "getExpiring",
      "action": "Get expiring contracts",
      "description": "Get contracts expiring soon",
      "resource": "contract"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contracts",
      "description": "Get many contracts",
      "resource": "contract"
    },
    {
      "name": "Renew",
      "value": "renew",
      "action": "Renew a contract",
      "description": "Renew an expired or expiring contract",
      "resource": "contract"
    },
    {
      "name": "Sign",
      "value": "sign",
      "action": "Sign a contract",
      "description": "Sign a contract",
      "resource": "contract"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contract",
      "description": "Update a contract",
      "resource": "contract"
    },
    {
      "name": "Add Checklist Item",
      "value": "addChecklistItem",
      "action": "Add checklist item to task",
      "description": "Add a checklist item to a task",
      "resource": "task"
    },
    {
      "name": "Add Comment",
      "value": "addComment",
      "action": "Add comment to task",
      "description": "Add a comment to a task",
      "resource": "task"
    },
    {
      "name": "Add Timesheet",
      "value": "addTimesheet",
      "action": "Add timesheet to task",
      "description": "Add a timesheet entry to a task",
      "resource": "task"
    },
    {
      "name": "Assign",
      "value": "assign",
      "action": "Assign a task",
      "description": "Assign a task to a staff member",
      "resource": "task"
    },
    {
      "name": "Change Status",
      "value": "changeStatus",
      "action": "Change task status",
      "description": "Change the status of a task",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "description": "Create a new task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "description": "Delete a task",
      "resource": "task"
    },
    {
      "name": "Delete Checklist Item",
      "value": "deleteChecklistItem",
      "action": "Delete checklist item from task",
      "description": "Delete a checklist item from a task",
      "resource": "task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "description": "Get a task",
      "resource": "task"
    },
    {
      "name": "Get Attachments",
      "value": "getAttachments",
      "action": "Get attachments from task",
      "description": "Get all attachments from a task",
      "resource": "task"
    },
    {
      "name": "Get Checklist Item",
      "value": "getChecklistItem",
      "action": "Get checklist item from task",
      "description": "Get a checklist item from a task",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "description": "Get many tasks",
      "resource": "task"
    },
    {
      "name": "List Checklist",
      "value": "listChecklist",
      "action": "Get all checklist items from task",
      "description": "Get all checklist items from a task",
      "resource": "task"
    },
    {
      "name": "List Comments",
      "value": "listComments",
      "action": "Get all comments from task",
      "description": "Get all comments from a task",
      "resource": "task"
    },
    {
      "name": "List Timesheets",
      "value": "listTimesheets",
      "action": "Get all timesheets from task",
      "description": "Get all timesheet entries from a task",
      "resource": "task"
    },
    {
      "name": "Mark Complete",
      "value": "markComplete",
      "action": "Mark task as complete",
      "description": "Mark a task as complete",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "description": "Update a task",
      "resource": "task"
    },
    {
      "name": "Update Checklist Item",
      "value": "updateChecklistItem",
      "action": "Update checklist item on task",
      "description": "Update a checklist item on a task",
      "resource": "task"
    },
    {
      "name": "Change Priority",
      "value": "changePriority",
      "action": "Change task priority",
      "description": "Change the priority of a task",
      "resource": "task"
    },
    {
      "name": "List Followers",
      "value": "listFollowers",
      "action": "List task followers",
      "description": "Get all followers of a task",
      "resource": "task"
    },
    {
      "name": "Add Follower",
      "value": "addFollower",
      "action": "Add a task follower",
      "description": "Add a follower to a task",
      "resource": "task"
    },
    {
      "name": "Remove Follower",
      "value": "removeFollower",
      "action": "Remove a task follower",
      "description": "Remove a follower from a task",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an expense",
      "description": "Create a new expense",
      "resource": "expense"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an expense",
      "description": "Delete an expense",
      "resource": "expense"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an expense",
      "description": "Get an expense",
      "resource": "expense"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Get all expense categories",
      "description": "Get all expense categories",
      "resource": "expense"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many expenses",
      "description": "Get many expenses",
      "resource": "expense"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an expense",
      "description": "Update an expense",
      "resource": "expense"
    },
    {
      "name": "Convert",
      "value": "convert",
      "action": "Convert an estimate",
      "description": "Convert an estimate to an invoice",
      "resource": "estimate"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an estimate",
      "description": "Create a new estimate",
      "resource": "estimate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an estimate",
      "description": "Delete an estimate",
      "resource": "estimate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an estimate",
      "description": "Get an estimate",
      "resource": "estimate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many estimates",
      "description": "Get many estimates",
      "resource": "estimate"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send an estimate",
      "description": "Send an estimate to the client via email",
      "resource": "estimate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an estimate",
      "description": "Update an estimate",
      "resource": "estimate"
    },
    {
      "name": "Get PDF",
      "value": "getPdf",
      "action": "Get estimate PDF",
      "description": "Download an estimate as PDF",
      "resource": "estimate"
    },
    {
      "name": "Activate",
      "value": "activate",
      "action": "Activate a staff member",
      "description": "Activate a staff member",
      "resource": "staff"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a staff member",
      "description": "Create a new staff member",
      "resource": "staff"
    },
    {
      "name": "Deactivate",
      "value": "deactivate",
      "action": "Deactivate a staff member",
      "description": "Deactivate a staff member",
      "resource": "staff"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a staff member",
      "description": "Delete a staff member",
      "resource": "staff"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a staff member",
      "description": "Get a staff member",
      "resource": "staff"
    },
    {
      "name": "Get Department List",
      "value": "getDepartmentList",
      "action": "Get all departments",
      "description": "Get all departments",
      "resource": "staff"
    },
    {
      "name": "Get Departments",
      "value": "getDepartments",
      "action": "Get departments for a staff member",
      "description": "Get departments for a staff member",
      "resource": "staff"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many staff members",
      "description": "Get many staff members",
      "resource": "staff"
    },
    {
      "name": "Get Permissions",
      "value": "getPermissions",
      "action": "Get permissions for a staff member",
      "description": "Get permissions for a staff member",
      "resource": "staff"
    },
    {
      "name": "Get Roles",
      "value": "getRoles",
      "action": "Get all roles",
      "description": "Get all roles",
      "resource": "staff"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a staff member",
      "description": "Update a staff member",
      "resource": "staff"
    },
    {
      "name": "Change Password",
      "value": "changePassword",
      "action": "Change staff password",
      "description": "Change a staff member password",
      "resource": "staff"
    },
    {
      "name": "Get Tasks",
      "value": "getTasks",
      "action": "Get staff tasks",
      "description": "Get tasks assigned to a staff member",
      "resource": "staff"
    },
    {
      "name": "Get Timesheets",
      "value": "getTimesheets",
      "action": "Get staff timesheets",
      "description": "Get timesheets for a staff member",
      "resource": "staff"
    },
    {
      "name": "Accept",
      "value": "accept",
      "action": "Accept a proposal",
      "description": "Mark a proposal as accepted",
      "resource": "proposal"
    },
    {
      "name": "Add Comment",
      "value": "addComment",
      "action": "Add comment to proposal",
      "description": "Add a comment to a proposal",
      "resource": "proposal"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a proposal",
      "description": "Create a new proposal",
      "resource": "proposal"
    },
    {
      "name": "Decline",
      "value": "decline",
      "action": "Decline a proposal",
      "description": "Mark a proposal as declined",
      "resource": "proposal"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a proposal",
      "description": "Delete a proposal",
      "resource": "proposal"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a proposal",
      "description": "Get a proposal",
      "resource": "proposal"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many proposals",
      "description": "Get many proposals",
      "resource": "proposal"
    },
    {
      "name": "List Comments",
      "value": "listComments",
      "action": "Get all comments for proposal",
      "description": "Get all comments for a proposal",
      "resource": "proposal"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a proposal",
      "description": "Send a proposal to the customer via email",
      "resource": "proposal"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a proposal",
      "description": "Update a proposal",
      "resource": "proposal"
    },
    {
      "name": "Get PDF",
      "value": "getPdf",
      "action": "Get proposal PDF",
      "description": "Download a proposal as PDF",
      "resource": "proposal"
    },
    {
      "name": "Add Refund",
      "value": "addRefund",
      "action": "Add a refund to a credit note",
      "description": "Add a refund to a credit note",
      "resource": "creditNote"
    },
    {
      "name": "Apply Credit",
      "value": "applyCredit",
      "action": "Apply credit to an invoice",
      "description": "Apply credit to an invoice",
      "resource": "creditNote"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a credit note",
      "description": "Create a new credit note",
      "resource": "creditNote"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a credit note",
      "description": "Delete a credit note",
      "resource": "creditNote"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a credit note",
      "description": "Get a credit note",
      "resource": "creditNote"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many credit notes",
      "description": "Get many credit notes",
      "resource": "creditNote"
    },
    {
      "name": "List Credits",
      "value": "listCredits",
      "action": "List credits for a credit note",
      "description": "List all credits applied from a credit note",
      "resource": "creditNote"
    },
    {
      "name": "List Refunds",
      "value": "listRefunds",
      "action": "List refunds for a credit note",
      "description": "List all refunds for a credit note",
      "resource": "creditNote"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a credit note",
      "description": "Update a credit note",
      "resource": "creditNote"
    },
    {
      "name": "Get PDF",
      "value": "getPdf",
      "action": "Get credit note PDF",
      "description": "Download a credit note as PDF",
      "resource": "creditNote"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a subscription",
      "description": "Create a new subscription",
      "resource": "subscription"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a subscription",
      "description": "Delete a subscription",
      "resource": "subscription"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a subscription",
      "description": "Get a subscription",
      "resource": "subscription"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many subscriptions",
      "description": "Get many subscriptions",
      "resource": "subscription"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a subscription",
      "description": "Update a subscription",
      "resource": "subscription"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a catalog item",
      "description": "Create a catalog item",
      "resource": "item"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a catalog item",
      "description": "Delete a catalog item",
      "resource": "item"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a catalog item",
      "description": "Get a catalog item",
      "resource": "item"
    },
    {
      "name": "Get Groups",
      "value": "getGroups",
      "action": "Get all item groups",
      "description": "Get all item groups",
      "resource": "item"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many catalog items",
      "description": "Get many catalog items",
      "resource": "item"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a catalog item",
      "description": "Update a catalog item",
      "resource": "item"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a payment",
      "description": "Create a new payment",
      "resource": "payment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a payment",
      "description": "Delete a payment",
      "resource": "payment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment",
      "description": "Get a payment",
      "resource": "payment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many payments",
      "description": "Get many payments",
      "resource": "payment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a payment",
      "description": "Update a payment",
      "resource": "payment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact",
      "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 a contact",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a timesheet entry",
      "description": "Create a new timesheet entry",
      "resource": "timesheet"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a timesheet entry",
      "description": "Delete a timesheet entry",
      "resource": "timesheet"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a timesheet entry",
      "description": "Get a timesheet entry",
      "resource": "timesheet"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many timesheet entries",
      "description": "Get many timesheet entries",
      "resource": "timesheet"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a timesheet entry",
      "description": "Update a timesheet entry",
      "resource": "timesheet"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a note",
      "description": "Create a new note",
      "resource": "note"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a note",
      "description": "Delete a note",
      "resource": "note"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a note",
      "description": "Get a note",
      "resource": "note"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many notes",
      "description": "Get many notes",
      "resource": "note"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a note",
      "description": "Update a note",
      "resource": "note"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a knowledge base article",
      "description": "Create a knowledge base article",
      "resource": "knowledgeBase"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a knowledge base article",
      "description": "Delete a knowledge base article",
      "resource": "knowledgeBase"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a knowledge base article",
      "description": "Get a knowledge base article",
      "resource": "knowledgeBase"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many knowledge base articles",
      "description": "Get many knowledge base articles",
      "resource": "knowledgeBase"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a knowledge base article",
      "description": "Update a knowledge base article",
      "resource": "knowledgeBase"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a knowledge base group",
      "description": "Create a knowledge base group",
      "resource": "knowledgeBaseGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a knowledge base group",
      "description": "Delete a knowledge base group",
      "resource": "knowledgeBaseGroup"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a knowledge base group",
      "description": "Get a knowledge base group",
      "resource": "knowledgeBaseGroup"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many knowledge base groups",
      "description": "Get many knowledge base groups",
      "resource": "knowledgeBaseGroup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a knowledge base group",
      "description": "Update a knowledge base group",
      "resource": "knowledgeBaseGroup"
    },
    {
      "name": "Get Contract Types",
      "value": "getContractTypes",
      "action": "Get all contract types",
      "description": "Get all contract types",
      "resource": "utility"
    },
    {
      "name": "Get Countries",
      "value": "getCountries",
      "action": "Get all countries",
      "description": "Get all countries",
      "resource": "utility"
    },
    {
      "name": "Get Currencies",
      "value": "getCurrencies",
      "action": "Get all currencies",
      "description": "Get all currencies",
      "resource": "utility"
    },
    {
      "name": "Get Departments",
      "value": "getDepartments",
      "action": "Get all departments",
      "description": "Get all departments",
      "resource": "utility"
    },
    {
      "name": "Get Lead Sources",
      "value": "getLeadSources",
      "action": "Get all lead sources",
      "description": "Get all lead sources",
      "resource": "utility"
    },
    {
      "name": "Get Lead Statuses",
      "value": "getLeadStatuses",
      "action": "Get all lead statuses",
      "description": "Get all lead statuses",
      "resource": "utility"
    },
    {
      "name": "Get Payment Modes",
      "value": "getPaymentModes",
      "action": "Get all payment modes",
      "description": "Get all payment modes",
      "resource": "utility"
    },
    {
      "name": "Get Taxes",
      "value": "getTaxes",
      "action": "Get all tax rates",
      "description": "Get all tax rates",
      "resource": "utility"
    },
    {
      "name": "Get Ticket Priorities",
      "value": "getTicketPriorities",
      "action": "Get all ticket priorities",
      "description": "Get all ticket priorities",
      "resource": "utility"
    },
    {
      "name": "Get Ticket Statuses",
      "value": "getTicketStatuses",
      "action": "Get all ticket statuses",
      "description": "Get all ticket statuses",
      "resource": "utility"
    }
  ]

npm_readme:
  # PerfexCRM for n8n — Community Node for API & Webhook Workflow Automation

  [![npm version](https://badge.fury.io/js/n8n-nodes-perfexcrm.svg "n8n-nodes-perfexcrm on npm")](https://www.npmjs.com/package/n8n-nodes-perfexcrm)
  [![GitHub release](https://img.shields.io/github/release/OBSTechnologies/n8n-nodes-perfexcrm.svg "GitHub release version")](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/releases)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg "MIT License")](https://opensource.org/licenses/MIT)
  [![Verified n8n Community Node](https://img.shields.io/badge/n8n-Verified%20Community%20Node-EA4B71 "Verified n8n community node — installable in one click on n8n Cloud")](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/)

  Connect [PerfexCRM](https://www.perfexcrm.com/) to [n8n](https://n8n.io/) with this **verified n8n community node** — installable in one click directly from the n8n canvas, on n8n Cloud or self-hosted — and build no-code / low-code workflow automations across your entire CRM. It ships with **21 PerfexCRM resources**, **181 REST API operations**, and a trigger node with **103 real-time webhook events** — enough coverage to automate leads, tickets, invoices, projects, contracts, subscriptions, and more without writing glue code. Whether you want to sync PerfexCRM data to Slack, Google Sheets, HubSpot, or Mailchimp, push webhook-driven events into any of n8n's 400+ integrations, or orchestrate multi-step CRM workflows, this node is a complete PerfexCRM automation toolkit.

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

  ## Table of Contents

  - [Why use this node?](#why-use-this-node)
  - [Prerequisites — PerfexCRM API & Webhooks Module](#prerequisites--perfexcrm-api--webhooks-module)
  - [Installation](#installation)
  - [PerfexCRM API Operations (21 Resources, 181 Operations)](#perfexcrm-api-operations-21-resources-181-operations)
  - [PerfexCRM Trigger Node — 103 Real-Time Webhook Events](#perfexcrm-trigger-node--103-real-time-webhook-events)
  - [Authentication & API Credentials](#authentication--api-credentials)
  - [Example PerfexCRM Automation Workflows](#example-perfexcrm-automation-workflows)
  - [Compatibility & Requirements](#compatibility--requirements)
  - [FAQ](#faq)
  - [Resources](#resources)
  - [Support](#support)
  - [Contributing](#contributing)

  ## Why use this node?

  - **Sync PerfexCRM leads and customers** to any tool — Slack, Google Sheets, HubSpot, Mailchimp, Airtable, Notion, or any of n8n's 400+ integrations.
  - **Automate invoice and payment notifications** the moment a PerfexCRM invoice is paid, overdue, or cancelled.
  - **Route support tickets intelligently** based on department, priority, or customer tier, and page the right team in real time.
  - **Trigger workflows from 103 PerfexCRM webhook events** — from `lead.created` and `invoice.paid` to `contract.expiring` and `task.overdue`.
  - **Eliminate manual PerfexCRM admin work** with no-code / low-code automation — no glue scripts, no cron jobs, no duct-taped Zaps.

  ## Prerequisites — PerfexCRM API & Webhooks Module

  **This n8n node requires the PerfexCRM API & Webhooks module to be installed on your PerfexCRM instance.**

  ### [Purchase the PerfexCRM API & Webhooks Module at perfexapi.com](https://perfexapi.com)

  The module provides:
  - RESTful API endpoints for all PerfexCRM entities
  - Webhook support for real-time events
  - API key authentication
  - Rate limiting and security features
  - Comprehensive documentation

  ## Installation

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

  ### Manual Installation

  1. Clone or download this repository
  2. In your n8n installation folder, navigate to `~/.n8n/nodes/`
  3. Create a folder called `n8n-nodes-perfexcrm`
  4. Copy all files from this repository into that folder
  5. Build the node:
     ```bash
     cd ~/.n8n/nodes/n8n-nodes-perfexcrm
     npm install
     npm run build
     ```
  6. Restart n8n

  ## PerfexCRM API Operations (21 Resources, 181 Operations)

  ### PerfexCRM Action Node — REST API Coverage

  **21 resources** with **181 operations** covering the entire PerfexCRM API.

  | Resource | Ops | Operations |
  |----------|:---:|------------|
  | **Customer** | 10 | Create, Get, Get Many, Update, Delete, Get Contacts, Get Contracts, Get Invoices, Get Projects, Get Tickets |
  | **Ticket** | 14 | Create, Get, Get Many, Update, Delete, Add Reply, Get Reply, Update Reply, Delete Reply, List Replies, Get Attachments, Get History, Assign, Change Status |
  | **Invoice** | 8 | Create, Get, Get Many, Update, Delete, Get Payments, Get PDF, Send |
  | **Lead** | 8 | Create, Get, Get Many, Update, Delete, Convert, Get Activities, Get Notes |
  | **Project** | 9 | Create, Get, Get Many, Update, Delete, Get Activity, Get Files, Get Milestones, Get Tasks |
  | **Contract** | 11 | Create, Get, Get Many, Update, Delete, Sign, Get Attachments, Get Comments, Get Expired, Get Expiring, Renew |
  | **Task** | 22 | Create, Get, Get Many, Update, Delete, Assign, Change Status, Mark Complete, Get Attachments, List Comments, Add Comment, List Timesheets, Add Timesheet, List Checklist, Add Checklist Item, Get Checklist Item, Update Checklist Item, Delete Checklist Item, Change Priority, List Followers, Add Follower, Remove Follower |
  | **Expense** | 6 | Create, Get, Get Many, Update, Delete, Get Categories |
  | **Estimate** | 8 | Create, Get, Get Many, Update, Delete, Send, Convert, Get PDF |
  | **Staff** | 14 | Create, Get, Get Many, Update, Delete, Activate, Deactivate, Get Permissions, Get Departments, Get Roles, Get Department List, Change Password, Get Tasks, Get Timesheets |
  | **Proposal** | 11 | Create, Get, Get Many, Update, Delete, Send, Accept, Decline, List Comments, Add Comment, Get PDF |
  | **Credit Note** | 10 | Create, Get, Get Many, Update, Delete, Add Refund, List Refunds, Apply Credit, List Credits, Get PDF |
  | **Subscription** | 5 | Create, Get, Get Many, Update, Delete |
  | **Item** | 6 | Create, Get, Get Many, Update, Delete, Get Groups |
  | **Payment** | 5 | Create, Get, Get Many, Update, Delete |
  | **Contact** | 5 | Create, Get, Get Many, Update, Delete |
  | **Timesheet** | 5 | Create, Get, Get Many, Update, Delete |
  | **Note** | 5 | Create, Get, Get Many, Update, Delete |
  | **Knowledge Base** | 5 | Create, Get, Get Many, Update, Delete |
  | **Knowledge Base Group** | 5 | Create, Get, Get Many, Update, Delete |
  | **Utility** | 10 | Get Currencies, Get Taxes, Get Departments, Get Payment Modes, Get Countries, Get Ticket Statuses, Get Ticket Priorities, Get Lead Statuses, Get Lead Sources, Get Contract Types |

  ### PerfexCRM Trigger Node — 103 Real-Time Webhook Events

  Listen for webhooks from PerfexCRM and start n8n workflows the instant something happens in your CRM — no polling required.

  #### Supported Events (103 webhook events)

  | Category | Events |
  |----------|--------|
  | **Contact** | created, deleted, updated |
  | **Contract** | cancelled, created, deleted, expired, expiring, renewed, signed, updated |
  | **Credit Note** | created, credits_applied, deleted, refund_created, sent, status_changed, updated |
  | **Customer** | contact_added, created, deleted, status_changed, updated |
  | **Estimate** | accepted, converted, created, declined, deleted, expiring, sent, updated |
  | **Expense** | created, deleted, updated |
  | **Invoice** | cancelled, created, deleted, overdue, paid, sent, status_changed, updated |
  | **Item** | created, deleted, updated |
  | **Knowledge Base** | article.created, article.deleted, article.updated |
  | **Lead** | assigned, converted, created, status_changed, updated |
  | **Note** | created, deleted, updated |
  | **Payment** | created, deleted, updated |
  | **Project** | completed, created, status_changed, updated |
  | **Proposal** | accepted, comment_added, converted, created, declined, deleted, sent, updated |
  | **Staff** | activated, created, deactivated, deleted, login, password_changed, permissions_changed, updated |
  | **Subscription** | created |
  | **Task** | assigned, comment_added, completed, created, deleted, overdue, priority_changed, status_changed, timesheet_added, updated |
  | **Ticket** | assigned, attachment_added, closed, created, deleted, priority_changed, reopened, reply_added, status_changed, updated |
  | **Timesheet** | created, deleted, updated |

  ## Authentication & API Credentials

  You'll need to enter the following credentials to use this node:

  1. **Base URL**: The URL of your PerfexCRM installation (e.g., `https://your-perfex.com`)
  2. **API Key**: Your PerfexCRM API key (starts with `pk_`)
  3. **API Version**: The API version to use (currently only `v1` is supported)

  ### Getting your PerfexCRM API Key

  1. Log in to your PerfexCRM admin panel
  2. Navigate to **Setup** > **API & Webhooks**
  3. Click on **API Keys**
  4. Create a new API key with the appropriate permissions
  5. Copy the API key (you'll only see it once!)

  ## Example PerfexCRM Automation Workflows

  ### Lead to Customer Automation
  When a new lead is created in PerfexCRM, automatically score it, convert qualifying leads to customers, spin up a dedicated project, draft a welcome invoice, and fire a personalised onboarding email via Gmail or SendGrid. Eliminates the manual hand-off between sales and delivery.

  ### Invoice Payment Tracking
  Subscribe to the `invoice.paid` and `invoice.overdue` webhook events, push paid invoices to your accounting system (QuickBooks, Xero, or a Google Sheet), and alert your finance team in Slack or Microsoft Teams the moment an invoice goes overdue. Cash flow visibility without a single manual check.

  ### Support Ticket Routing
  Automatically triage every new PerfexCRM ticket: route VIP customers to senior staff, page on-call engineers for P1 priorities, assign by department keyword, and post a digest of open tickets to a Slack channel each morning. A support inbox that sorts itself.

  ### Customer Onboarding
  Build an end-to-end onboarding workflow: create the PerfexCRM customer record, create a matching project and initial milestones, generate and send the first invoice, provision accounts in third-party tools (Stripe, HubSpot, Intercom), and deliver a branded welcome package — all triggered by one webhook.

  ## Compatibility & Requirements

  - n8n version 0.180.0 or later
  - PerfexCRM 2.3.x or later
  - PerfexCRM API & Webhooks Module (required)

  ## FAQ

  ### Is this an official n8n node?
  No — it's a community node built and maintained by [OBS Technologies](https://obstechnologies.com), now **verified by n8n**. As a verified community node it installs in one click on **n8n Cloud** and any self-hosted n8n (v1.94+) via the Community Nodes feature. (Verification means the node passed n8n's security and quality review; it doesn't imply n8n endorses PerfexCRM.)

  ### Do I need the PerfexCRM API & Webhooks module?
  Yes. This node talks to the PerfexCRM REST API exposed by the [PerfexCRM API & Webhooks module](https://perfexapi.com). Without it installed on your PerfexCRM instance, neither the action node nor the trigger node can reach your data.

  ### Which PerfexCRM versions are supported?
  PerfexCRM 2.3.x and later. Older PerfexCRM versions may work for read-only operations but are not officially tested.

  ### Can I use this node on n8n Cloud?
  Yes. `n8n-nodes-perfexcrm` is a [verified community node](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/), so it's available on **n8n Cloud** as well as self-hosted. On n8n v1.94+ with verified community nodes enabled, open the nodes panel, find it under **"More from the community,"** and install it in one click — no manual npm setup required.

  ### How do I get a PerfexCRM API key?
  In your PerfexCRM admin panel, go to **Setup → API & Webhooks → API Keys**, create a new key with the permissions you need, and copy the value (shown once). See [Authentication & API Credentials](#authentication--api-credentials) for details.

  ### What PerfexCRM events can trigger an n8n workflow?
  103 webhook events across 19 categories — leads, customers, invoices, tickets, tasks, contracts, projects, proposals, estimates, payments, subscriptions, knowledge base, and more. See the [full event table](#supported-events-103-webhook-events).

  ### How do I add line items to an invoice, estimate or credit note?
  Create operations for Invoices, Estimates and Credit Notes include a **Line Items** section where you add one or more items (description, quantity, rate, and optionally long description, unit and tax name). Totals are calculated from the line items — without at least one item the document value is 0.

  ### Does this node support PerfexCRM custom fields?
  Yes. Create and Update operations include a **Custom Fields** section (under Additional/Update Fields) where you add custom field values — keyed by the field's numeric ID or its slug. Custom field values are also returned in the payload on Get operations and webhook events. Supported across Customers, Contacts, Leads, Projects, Tasks, Tickets, Contracts, Expenses, Invoices, Estimates, Proposals, Credit Notes and Staff (requires the PerfexCRM API & Webhooks module v2.8.9+).

  ### Is there a rate limit?
  Rate limiting is handled by the PerfexCRM API & Webhooks module itself. n8n will surface the HTTP 429 responses if you exceed your configured rate limit so you can implement retries.

  ## Resources

  * [Purchase PerfexCRM API & Webhooks Module](https://perfexapi.com)
  * [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  * [PerfexCRM API Documentation](https://your-perfex.com/admin/api_webhooks/documentation)
  * [GitHub Repository](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm)
  * [npm Package](https://www.npmjs.com/package/n8n-nodes-perfexcrm)

  ## Support

  ### For n8n Node Issues:
  - [Open an issue on GitHub](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/issues)
  - [n8n Community Forum](https://community.n8n.io/)

  ### For PerfexCRM API & Webhooks Module:
  - [Support at perfexapi.com](https://perfexapi.com)
  - Email: support@obstechnologies.com

  ## Contributing

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

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

  ## Author

  **OBS Technologies**
  - Website: [obstechnologies.com](https://obstechnologies.com)
  - PerfexCRM Modules: [perfexapi.com](https://perfexapi.com)
  - GitHub: [@OBSTechnologies](https://github.com/OBSTechnologies)

  ## License

  [MIT](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm/blob/main/LICENSE) (c) OBS Technologies

  ---

  **Built for the n8n community by [OBS Technologies](https://obstechnologies.com)** — specialists in PerfexCRM automation, custom CRM integrations, and workflow engineering.

  If you find this node useful, please star it on [GitHub](https://github.com/OBSTechnologies/n8n-nodes-perfexcrm)!

ai_documentation_summary:
  {"purpose":"Connects n8n to PerfexCRM for API-driven workflow automation and real-time webhook triggering. It provides broad REST API coverage plus trigger support to automate CRM processes like leads, invoices, tickets, projects, and contracts.","capabilities":["Access 21 PerfexCRM resources via REST API","Perform 181 API operations across PerfexCRM entities","Trigger workflows from 103 real-time webhook events","Automate lead, customer, invoice, payment, ticket, project, contract, subscription, and task workflows","Integrate PerfexCRM events and data with other n8n apps and services"],"authentication":"API key authentication via the PerfexCRM API & Webhooks module","commonUseCases":["Sync PerfexCRM leads and customers to tools like Slack, Google Sheets, HubSpot, Airtable, Notion, or Mailchimp","Send notifications when invoices are paid, overdue, or cancelled","Route and escalate support tickets based on department, priority, or customer tier","Trigger automations from PerfexCRM webhook events such as lead.created or invoice.paid"],"limitations":["Requires the PerfexCRM API & Webhooks module to be installed on the PerfexCRM instance","The README excerpt does not list the full set of resources and operations in detail"],"relatedNodes":["n8n Webhook","Slack","Google Sheets","HubSpot","Mailchimp"]}


