# nodes

node_type: n8n-nodes-coreclaw.coreClaw
package_name: n8n-nodes-coreclaw
display_name: CoreClaw
description: Run scrapers on the CoreClaw marketplace, fetch results, and manage runs from n8n
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: coreclaw
author_github_url: https://github.com/Core-Claw/
npm_package_name: n8n-nodes-coreclaw
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.262Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "scraper",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Run",
          "value": "run"
        },
        {
          "name": "Scraper",
          "value": "scraper"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search scrapers",
          "description": "Search the CoreClaw marketplace for ready-to-run scrapers by keyword"
        },
        {
          "name": "Get Details",
          "value": "getDetails",
          "action": "Get scraper details",
          "description": "Fetch the full spec of a scraper (current version, system defaults, custom input schema, README)"
        },
        {
          "name": "Run",
          "value": "run",
          "action": "Run a scraper",
          "description": "Start an asynchronous scraper run with custom parameters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scraper"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Abort",
          "value": "abort",
          "action": "Abort a run",
          "description": "Abort an in-progress scraper run"
        },
        {
          "name": "Export Results",
          "value": "exportResults",
          "action": "Export run results",
          "description": "Export a run's full result set as a downloadable CSV or JSON file"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a run",
          "description": "Get the current execution status of a run (status / started_at / duration / cost)"
        },
        {
          "name": "Get Logs",
          "value": "getLogs",
          "action": "Get run logs",
          "description": "Fetch execution logs from a run for debugging or understanding failures"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many runs",
          "description": "List the user's historical scraper runs with pagination and filters"
        },
        {
          "name": "Get Results",
          "value": "getResults",
          "action": "Get run results",
          "description": "Get paginated result records from a completed run"
        },
        {
          "name": "Rerun",
          "value": "rerun",
          "action": "Rerun a run",
          "description": "Re-run a previous run with the exact same parameters"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "run"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "run",
      "options": [
        {
          "name": "Run",
          "value": "run",
          "action": "Run a task",
          "description": "Run a pre-configured saved task from the CoreClaw console — parameters are stored with the task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getInfo",
      "options": [
        {
          "name": "Get Info",
          "value": "getInfo",
          "action": "Get account info",
          "description": "Get account info — balance, traffic usage, plan expiry"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search",
      "value": "search",
      "action": "Search scrapers",
      "description": "Search the CoreClaw marketplace for ready-to-run scrapers by keyword",
      "resource": "scraper"
    },
    {
      "name": "Get Details",
      "value": "getDetails",
      "action": "Get scraper details",
      "description": "Fetch the full spec of a scraper (current version, system defaults, custom input schema, README)",
      "resource": "scraper"
    },
    {
      "name": "Run",
      "value": "run",
      "action": "Run a scraper",
      "description": "Start an asynchronous scraper run with custom parameters",
      "resource": "scraper"
    },
    {
      "name": "Abort",
      "value": "abort",
      "action": "Abort a run",
      "description": "Abort an in-progress scraper run",
      "resource": "run"
    },
    {
      "name": "Export Results",
      "value": "exportResults",
      "action": "Export run results",
      "description": "Export a run's full result set as a downloadable CSV or JSON file",
      "resource": "run"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a run",
      "description": "Get the current execution status of a run (status / started_at / duration / cost)",
      "resource": "run"
    },
    {
      "name": "Get Logs",
      "value": "getLogs",
      "action": "Get run logs",
      "description": "Fetch execution logs from a run for debugging or understanding failures",
      "resource": "run"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many runs",
      "description": "List the user's historical scraper runs with pagination and filters",
      "resource": "run"
    },
    {
      "name": "Get Results",
      "value": "getResults",
      "action": "Get run results",
      "description": "Get paginated result records from a completed run",
      "resource": "run"
    },
    {
      "name": "Rerun",
      "value": "rerun",
      "action": "Rerun a run",
      "description": "Re-run a previous run with the exact same parameters",
      "resource": "run"
    },
    {
      "name": "Run",
      "value": "run",
      "action": "Run a task",
      "description": "Run a pre-configured saved task from the CoreClaw console — parameters are stored with the task",
      "resource": "task"
    },
    {
      "name": "Get Info",
      "value": "getInfo",
      "action": "Get account info",
      "description": "Get account info — balance, traffic usage, plan expiry",
      "resource": "account"
    }
  ]

npm_readme:
  # n8n-nodes-coreclaw

  Use [CoreClaw](https://coreclaw.com) API v2 in n8n to discover workers, run workers and saved tasks, manage worker runs, fetch results, export data, inspect account state, and receive run callbacks.

  [n8n](https://n8n.io/) is a workflow automation platform. This package provides:

  - **CoreClaw**: an action node for CoreClaw API v2 workers, worker runs, worker tasks, store workers, proxy regions, and account data.
  - **CoreClaw Trigger**: a webhook trigger node for CoreClaw `callback_url` run events.

  ## Table of contents

  - [Installation](#installation)
  - [Credentials](#credentials)
  - [CoreClaw Node](#coreclaw-node)
  - [One-step: Run and Get Results](#one-step-run-and-get-results)
  - [Running Workers](#running-workers)
  - [CoreClaw Trigger](#coreclaw-trigger)
  - [Workflows](#workflows)
  - [Error Handling](#error-handling)
  - [Troubleshooting](#troubleshooting)
  - [Live Tests](#live-tests)
  - [Endpoint Scope](#endpoint-scope)
  - [Compatibility](#compatibility)

  ## Installation

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

  On self-hosted n8n:

  1. Go to **Settings > Community Nodes**.
  2. Install `n8n-nodes-coreclaw`.
  3. Reload the editor. The **CoreClaw** and **CoreClaw Trigger** nodes will appear in the node panel.

  ## Credentials

  1. Create a CoreClaw API key in the CoreClaw console.
  2. In n8n, create a credential of type **CoreClaw API**.

  | Field | Value |
  | --- | --- |
  | **API Key** | Your CoreClaw API v2 key. |
  | **Base URL** | `https://openapi.coreclaw.com` by default. Change only for private deployments. |

  Requests send both `api-key: <key>` and `Authorization: Bearer <key>`. The credential test calls `GET /api/v2/users/account`.

  ## CoreClaw Node

  The action node exposes 34 CoreClaw API v2 operations.

  ### Store Worker

  - **List**: list public store workers, with keyword search and pagination.

  ### Worker

  - **List**
  - **Get**
  - **Get Input Schema**
  - **Run**
  - **Run and Get Results** *(run → wait → return result rows in one step)*
  - **Get Last Run**
  - **Abort Last Run**
  - **Export Last Run Results**
  - **Get Last Run Log**
  - **Rerun Last Run**
  - **List Last Run Results**

  ### Worker Run

  - **List**
  - **Get Last**
  - **Abort Last**
  - **Export Last Results**
  - **Get Last Log**
  - **Rerun Last**
  - **List Last Results**
  - **Get**
  - **Abort**
  - **Get Log**
  - **Rerun**
  - **Rerun and Get Results** *(rerun → wait → return result rows in one step)*
  - **List Results**
  - **Export Results**

  ### Worker Task

  - **List**
  - **Create** — save a worker config as a reusable, optionally scheduled task. Input JSON is sent as `input.parameters.custom`.
  - **Get**
  - **Update** — update title, description, or schedule (partial).
  - **Delete**
  - **Get Input** — read a saved task's input payload.
  - **Update Input** — replace a saved task's input (wrapped as `input.parameters.custom`).
  - **Run**
  - **Run and Get Results** *(run → wait → return result rows in one step)*

  ### Proxy

  - **List Regions**

  ### Account

  - **Get Info**

  Worker, worker task, and worker run fields use resource locators where useful. You can pick from CoreClaw lists or paste an ID/path manually.

  ## One-step: Run and Get Results

  The **Run and Get Results** operations (on Worker, Worker Task, and Worker Run) run a worker in one node and return the result rows directly — no need to wire separate Run → Get → List Results nodes.

  The node:

  1. Submits the run asynchronously.
  2. Polls `GET /api/v2/worker-runs/{runId}` until the run reaches a terminal status (`succeeded`, `failed`, or `aborted`).
  3. Fetches the result rows from `GET /api/v2/worker-runs/{runId}/result` and returns each row as an n8n item.

  Use **Return All** to page through every result (capped at 10,000 rows for safety), or set **Offset** / **Limit** for a single page.

  If the run finishes unsuccessfully, the node throws an error that includes the run status, `err_msg`, and the run log when available — so you can see why it failed without a separate Get Log step.

  > Polling runs client-side for up to ~4 minutes (120 attempts × 2s). For longer jobs, keep **Worker > Run** asynchronous and use **CoreClaw Trigger** with `callback_url` instead.

  ## Running Workers

  **Worker > Run** supports two input modes:

  - **Input JSON**: worker business input. The node sends it as `input.parameters.custom`.
  - **Raw Input JSON**: advanced full CoreClaw `input` object.

  Use one input mode per run. If both are set, the node fails before making a request.

  Run, rerun, and worker task run operations support `callback_url`, `is_async`, `offset`, and `limit` where the CoreClaw API supports them.

  Enable **Wait for Finish** to poll the returned run through **Get Worker Run Detail** until it reaches a terminal status. For long jobs or event-driven workflows, keep asynchronous mode and use **CoreClaw Trigger** with `callback_url`.

  ## CoreClaw Trigger

  CoreClaw does not currently provide a documented webhook registration API. The **CoreClaw Trigger** node is a local n8n webhook receiver.

  Use it by copying the trigger webhook URL into `callback_url` on **Worker > Run**, **Worker Task > Run**, or rerun operations.

  The trigger:

  - Accepts `POST` callback payloads.
  - Can validate `run_id` and `run_status`.
  - Can filter events by status: Any, Succeeded, Failed, Running, or Aborted.
  - Can include request headers under `_headers`.

  Expected callback payload fields include `run_id`, `run_status`, `error_message`, `execution_start_timestamp`, `execution_end_timestamp`, `running_duration`, `result_count`, and `result_message`.

  ## Workflows

  ### Run a Worker and Get Results (one step)

  1. **CoreClaw: Worker > Run and Get Results** — run, wait, and return result rows in a single node.
  2. Pipe the result items straight into your downstream step (spreadsheet, AI, database…).

  ### Discover, Run, Fetch Results (manual)

  1. **CoreClaw: Store Worker > List**
  2. **CoreClaw: Worker > Get Input Schema**
  3. **CoreClaw: Worker > Run**
  4. **CoreClaw: Worker Run > Get**
  5. **CoreClaw: Worker Run > List Results**

  ### Run a Saved Task and Export

  1. **CoreClaw: Worker Task > Run and Get Results** — or, to export a file instead of rows:
  2. **CoreClaw: Worker Task > Run**
  3. **CoreClaw: Worker Run > Export Results**

  ### Receive Callback Events

  1. Add **CoreClaw Trigger** to a workflow.
  2. Copy its webhook URL.
  3. Paste that URL into `callback_url` on **Worker > Run**, **Worker Task > Run**, or rerun.
  4. Use the trigger output in downstream workflow steps.

  ## Error Handling

  CoreClaw API v2 responses use an envelope with `code`, `message`, `data`, and sometimes `request_id` or `details`.

  The node:

  - Returns `data` when `code` is `0`.
  - Throws an n8n API error for non-zero CoreClaw codes.
  - Includes CoreClaw messages, details, and request IDs when available.
  - Retries only safe GET requests on retryable failures.
  - Does not retry run, rerun, or abort POST requests.

  Enable **Continue On Fail** in n8n to emit an item containing `error` and `errorDescription` instead of stopping the workflow.

  ## Troubleshooting

  | Symptom | Cause / Fix |
  | --- | --- |
  | **Credential test fails with `CoreClaw error 12001/12002`** | Invalid API key. Regenerate the key in the CoreClaw console and paste it into the credential. |
  | **`Resource not found` (CoreClaw error 11004/50001/70001)`** | Wrong ID. Use the resource locator's **From List** mode to pick a valid worker/task/run, or verify the slug/owner path format (`owner~demo-worker`). |
  | **`Insufficient balance` (CoreClaw error 30001)** | Top up the CoreClaw account before running workers. |
  | **Run and Get Results never returns** | The run may exceed the ~4-minute polling budget. Switch to asynchronous **Worker > Run** + **CoreClaw Trigger** with `callback_url` for long jobs. |
  | **Run and Get Results returns a `failed`/`aborted` error** | The node attaches the run log to the error description. Open the node's error output or check **Continue On Fail** output for the `errorDescription` containing the log. |
  | **Empty result rows on a succeeded run** | The worker produced no results. Inspect the run with **Worker Run > Get Log** and validate the input against **Worker > Get Input Schema**. |
  | **Webhook trigger never fires** | CoreClaw cannot reach n8n. Set a public `WEBHOOK_URL` (or tunnel) and paste the trigger URL into `callback_url` on the run operation. |

  ## Live Tests

  Live smoke tests are opt-in:

  ```powershell
  $env:CORECLAW_LIVE_TESTS='1'
  $env:CORECLAW_API_KEY='<your key>'
  npm test -- nodes/CoreClaw/__tests__/e2e.live.test.ts
  Remove-Item Env:\CORECLAW_API_KEY
  Remove-Item Env:\CORECLAW_LIVE_TESTS
  ```

  Without both environment variables, the live suite is skipped.

  ## Endpoint Scope

  This package intentionally does not expose `POST /api/v2/workers/{workerId}/versions`, `PUT /api/v2/workers/{workerId}/versions/{version}`, or `GET /api/v2/workers/{workerId}/internal`.

  ## Compatibility

  - n8n community node API version 1.
  - Node.js `>=20.15`.

  ## Resources

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

  ## Changelog

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

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n node enables users to search, run, and manage scrapers from the CoreClaw marketplace directly within n8n workflows, fetching structured data and execution logs.","capabilities":["Search the scraper marketplace by keyword","Retrieve scraper details including version and parameter schemas","Run scrapers asynchronously with custom parameters","Poll execution status of scraper runs","Fetch paginated results from completed runs","Export results as CSV or JSON","Retrieve execution logs","Abort in-flight scraper runs","Rerun previous scraper executions","Execute saved tasks configured in the CoreClaw console"],"authentication":"API key required (sent via request header 'api-key')","commonUseCases":["Automated data extraction from Amazon, Google Maps, TikTok, or Twitter","Scheduled scraping of dynamic websites","Real-time monitoring of product prices or inventory","Competitor analysis via automated scraper execution"],"limitations":["Requires n8n version 1.x or higher","Requires Node.js version >= 20.15","Scraper runs are asynchronous and require polling or webhook callbacks for completion","Some errors may not halt the workflow unless 'Continue On Fail' is enabled"],"relatedNodes":["n8n Webhook node","n8n Wait node","n8n If node","n8n HTTP Request node"]}


node_type: n8n-nodes-wildix.wildixTrigger
package_name: n8n-nodes-wildix
display_name: Wildix Trigger
description: Receive real-time call events from Wildix via webhooks
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: enzpic
author_github_url: https://github.com/enzpic/
npm_package_name: n8n-nodes-wildix
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:34.263Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-wildix

  This is an [n8n](https://n8n.io) community node package that lets you use [Wildix](https://www.wildix.com) in your n8n workflows.

  Wildix is a cloud-based UCaaS platform providing business telephony (PBX/SIP/WebRTC), team messaging, contact center, and SMS/WhatsApp via Classound.

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

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

  ---

  ## Installation

  This node works on any self-hosted n8n instance. It is available on npm but not yet listed in the official n8n community nodes directory — you can still install it directly.

  1. Open your n8n instance and go to **Settings → Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-wildix` and click **Install**
  4. Restart n8n when prompted

  The **Wildix** and **Wildix Trigger** nodes will then appear in the node picker.

  > **Note:** Community nodes are not available on n8n Cloud. You need a self-hosted instance (Docker, npm, or desktop app).

  ---

  ## Operations

  ### Wildix (action node)

  | Resource | Operations |
  |---|---|
  | **ACL Group** | Create, Create Rule, Delete, Delete Rule, Get Many, Get Permissions, Get Rules, Update, Update Rule |
  | **Alarm Clock** | Create, Delete, Get Many |
  | **Application** | Create S2S Application, Create Simple Token, Delete S2S Application, Delete Simple Token, Get S2S Applications, Get Simple Tokens, Update Simple Token |
  | **Broadcast** | Send |
  | **Call** | Answer, Attendant Transfer, Blind Transfer, Hang Up, Hold, List Active Calls, Make Call, Originate, Originate (Advanced), Send DTMF, Set Active Device, Unhold, Update Contact Info |
  | **Call History** | Change Tags, Delete Call Record, Delete Voicemails, Get Call History by User, Get Call Record, Get Full Call History, Get Personal Call History, Update Archived Status, Update Voicemails Status |
  | **Call Queue** | Add Dynamic Member, Get Dynamic Members, Get Many, Get Settings, Remove Dynamic Member |
  | **Colleague** | Create, Delete, Get, Get Many, Get My Info, Update |
  | **Contact** | Create, Delete, Get, Get Many, Update |
  | **Department** | Get Many |
  | **Device** | Add, Connect, Delete, Disconnect, Get Many, List User Devices, Reset Token, Scan, Update, Verify |
  | **Dialplan** | Create IVR, Create Paging Group, Create Switch, Create Time Table, Delete IVR, Delete Paging Group, Delete Switch, Delete Time Table, Get Dialplans, Get General Settings, Get IVR, Get Paging Groups, Get Switches, Get Time Tables, Update General Settings, Update IVR, Update Paging Group, Update Switch, Update Time Table |
  | **Fax** | Delete, Get Many, Get Settings, Send, Update Settings |
  | **Group** | Get Call Groups, Get Many |
  | **Notification** | Send |
  | **OAuth2 Client** | Create, Delete, Get Many, Update |
  | **PBX** | Get Many |
  | **PBX Setting** | Get HTTP Proxy, Get License, Get NTP, Get Settings, Get SMTP, Test SMTP, Update HTTP Proxy, Update NTP, Update Settings, Update SMTP |
  | **PBX System** | Get Candidates, Get Ports Status, Get Version, Ping, Reboot |
  | **PBX Upgrade** | Check for Updates, Get Upgrade Settings, Get Upgrade Status, Start Upgrade, Update Upgrade Settings |
  | **Personal** | Get ACL, Get Features, Get Locations, Get Paging Groups, Get Presence, Get Presence Location, Get Roster, Get Settings, Get Token, Reset Token, Update Features, Update Presence, Update Presence Location, Update Settings |
  | **Phonebook** | Create, Delete, Get, Get Many, Update |
  | **Recording** | Delete, Get Many |
  | **SIP Registration** | Get Many |
  | **SMS** | Send |
  | **Sound** | Create, Delete, Get Directory Contents, Get Many, Update |
  | **Trunk** | Create FXO Trunk, Create PSTN Trunk, Create SIP Trunk, Create Trunk Group, Delete FXO Trunk, Delete PSTN Trunk, Delete SIP Trunk, Delete Trunk Group, Get FXO Trunks, Get PSTN Trunks, Get SIP Trunks, Get Trunk Groups, Get Trunk Prices, Update FXO Trunk, Update PSTN Trunk, Update SIP Trunk, Update Trunk Group |
  | **Trusted IP** | Create, Delete, Get Many |
  | **Video Conference** | Create Room, Delete Room, Get Rooms, Invite, Update Room |
  | **Voicemail** | Delete, Get Many, Update Status |

  ### Wildix Trigger (webhook trigger)

  Listens for real-time call events from Wildix:

  | Event | Description |
  |---|---|
  | `call:live:progress` | Call started or state changed |
  | `call:live:completed` | Call ended normally |
  | `call:live:interrupted` | Call ended due to an error |
  | `call:live:transcription` | Transcription segment available |

  Incoming webhook requests are verified using HMAC-SHA256 (`X-Wildix-Signature` header). Requests with invalid signatures are rejected with HTTP 401.

  ---

  ## Credentials

  Two authentication methods are supported:

  ### Bearer Token (recommended for testing)

  1. In your Wildix Administration Console, generate a personal access token.
  2. In n8n, create a **Wildix Bearer Token API** credential and enter:
     - **PBX Subdomain** — e.g. `company.wildixin.com`
     - **Bearer Token** — your access token

  ### OAuth2

  1. In your Wildix Administration Console, create an OAuth2 application under **Integrations → OAuth2 Clients**.
  2. Note the **Client ID** and **Client Secret**.
  3. In n8n, create a **Wildix OAuth2 API** credential and enter:
     - **PBX Subdomain** — e.g. `company.wildixin.com`
     - **Client ID** and **Client Secret**
  4. Complete the OAuth2 authorization flow.

  ### Webhook Setup (Wildix Trigger)

  1. Add a **Wildix Trigger** node to your workflow and activate the workflow — n8n will generate a webhook URL.
  2. In your Wildix Administration Console, register the webhook URL under **Integrations → Webhooks**.
  3. Copy the webhook secret from the Wildix console and paste it into the **Webhook Secret** field on the trigger node.

  ---

  ## Compatibility

  Tested against n8n `>=1.0.0`.

  Requires Node.js `>=18`.

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Wildix API reference](https://docs.wildix.com/api-reference/)
  - [Wildix webhooks guide](https://docs.wildix.com/docs/calls/webhooks/)
  - [Wildix authentication](https://docs.wildix.com/wms/index.html#section/Authentication)

ai_documentation_summary:
  {"purpose":"The Wildix Trigger node receives real-time call events from Wildix via webhooks, while the Wildix action node enables comprehensive management of Wildix UCaaS platform resources.","capabilities":["Receive real-time call events (progress, completed, interrupted, transcription)","Manage ACL Groups (Create, Delete, Get, Update)","Handle Call operations (Answer, Make Call, Hang Up, Transfer, DTMF)","Manage Trunks (FXO, PSTN, SIP) (Create, Delete, Update)","Send SMS and Broadcast notifications","Manage Video Conference rooms","Handle Voicemail and Recording operations","Manage Dialplan and IVR configurations","Monitor PBX system status and upgrades"],"authentication":"Bearer Token (Personal Access Token) or OAuth2","commonUseCases":["Automate call logging and analytics","Trigger actions based on call events (e.g., send SMS after call)","Manage telephony resources and configurations","Integrate Wildix UCaaS with n8n workflows"],"limitations":["Not available on n8n Cloud; requires self-hosted instance","Webhook verification requires HMAC-SHA256 signature validation","Requires Node.js >=18"],"relatedNodes":["n8n-nodes-wildix.wildixAction","Webhook Trigger","HTTP Request"]}


node_type: n8n-nodes-wildix.wildix
package_name: n8n-nodes-wildix
display_name: Wildix
description: Interact with Wildix UCaaS platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: enzpic
author_github_url: https://github.com/enzpic/
npm_package_name: n8n-nodes-wildix
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:34.264Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "call",
      "options": [
        {
          "name": "ACL Group",
          "value": "aclGroup"
        },
        {
          "name": "Alarm Clock",
          "value": "alarmClock"
        },
        {
          "name": "Application",
          "value": "application"
        },
        {
          "name": "Broadcast",
          "value": "broadcast"
        },
        {
          "name": "Call",
          "value": "call"
        },
        {
          "name": "Call History",
          "value": "callHistory"
        },
        {
          "name": "Call Queue",
          "value": "callQueue"
        },
        {
          "name": "Colleague",
          "value": "colleague"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Department",
          "value": "department"
        },
        {
          "name": "Device",
          "value": "device"
        },
        {
          "name": "Dialplan",
          "value": "dialplan"
        },
        {
          "name": "Fax",
          "value": "fax"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Notification",
          "value": "notification"
        },
        {
          "name": "OAuth2 Client",
          "value": "oauth2Client"
        },
        {
          "name": "PBX",
          "value": "pbx"
        },
        {
          "name": "PBX Setting",
          "value": "pbxSettings"
        },
        {
          "name": "PBX System",
          "value": "pbxSystem"
        },
        {
          "name": "PBX Upgrade",
          "value": "pbxUpgrade"
        },
        {
          "name": "Personal",
          "value": "personal"
        },
        {
          "name": "Phonebook",
          "value": "phonebook"
        },
        {
          "name": "Recording",
          "value": "recording"
        },
        {
          "name": "SIP Registration",
          "value": "sipRegistration"
        },
        {
          "name": "SMS",
          "value": "sms"
        },
        {
          "name": "Sound",
          "value": "sound"
        },
        {
          "name": "Trunk",
          "value": "trunk"
        },
        {
          "name": "Trusted IP",
          "value": "trustedIp"
        },
        {
          "name": "Video Conference",
          "value": "videoConference"
        },
        {
          "name": "Voicemail",
          "value": "voiceMail"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an ACL group",
          "description": "Create a new ACL group on the PBX"
        },
        {
          "name": "Create Rule",
          "value": "createRule",
          "action": "Create an ACL group rule",
          "description": "Create a new ACL group rule"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an ACL group",
          "description": "Delete an ACL group by ID"
        },
        {
          "name": "Delete Rule",
          "value": "deleteRule",
          "action": "Delete an ACL group rule",
          "description": "Delete an ACL group rule by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many ACL groups",
          "description": "Return the list of ACL groups"
        },
        {
          "name": "Get Permissions",
          "value": "getPermissions",
          "action": "Get ACL group permissions",
          "description": "Retrieve the permissions for an ACL group"
        },
        {
          "name": "Get Rules",
          "value": "getRules",
          "action": "Get ACL group rules",
          "description": "Return the list of ACL group rules"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an ACL group",
          "description": "Update an existing ACL group by ID"
        },
        {
          "name": "Update Rule",
          "value": "updateRule",
          "action": "Update an ACL group rule",
          "description": "Update an ACL group rule by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aclGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "originate",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an alarm clock",
          "description": "Remove a scheduled alarm clock by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an alarm clock",
          "description": "Retrieve a scheduled alarm clock by ID"
        },
        {
          "name": "Originate",
          "value": "originate",
          "action": "Originate an alarm clock call",
          "description": "Schedule an alarm clock call to a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "alarmClock"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSimpleTokens",
      "options": [
        {
          "name": "Create S2S Application",
          "value": "createS2s",
          "action": "Create an S2S application",
          "description": "Create a new server-to-server application"
        },
        {
          "name": "Create Simple Token",
          "value": "createSimpleToken",
          "action": "Create a simple token application",
          "description": "Create a new simple token application"
        },
        {
          "name": "Delete S2S Application",
          "value": "deleteS2s",
          "action": "Delete an S2S application",
          "description": "Delete a server-to-server application by ID"
        },
        {
          "name": "Delete Simple Token",
          "value": "deleteSimpleToken",
          "action": "Delete a simple token application",
          "description": "Delete a simple token application by ID"
        },
        {
          "name": "Get S2S Applications",
          "value": "getS2s",
          "action": "Get S2S applications",
          "description": "Return the list of server-to-server applications"
        },
        {
          "name": "Get Simple Tokens",
          "value": "getSimpleTokens",
          "action": "Get simple token applications",
          "description": "Return the list of simple token applications"
        },
        {
          "name": "Update S2S Application",
          "value": "updateS2s",
          "action": "Update an S2S application",
          "description": "Update a server-to-server application by ID"
        },
        {
          "name": "Update Simple Token",
          "value": "updateSimpleToken",
          "action": "Update a simple token application",
          "description": "Update a simple token application by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "application"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "reload",
      "options": [
        {
          "name": "Reload",
          "value": "reload",
          "action": "Reload broadcasts",
          "description": "Reload the broadcast configuration on the PBX"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "broadcast"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "originate",
      "options": [
        {
          "name": "Answer",
          "value": "answer",
          "action": "Answer a call",
          "description": "Answer an incoming call"
        },
        {
          "name": "Attendant Transfer",
          "value": "attendantTransfer",
          "action": "Attendant transfer a call",
          "description": "Transfer a call with consultation (attended transfer)"
        },
        {
          "name": "Blind Transfer",
          "value": "blindTransfer",
          "action": "Blind transfer a call",
          "description": "Transfer a call without consultation"
        },
        {
          "name": "Get Call Recordings",
          "value": "getRecordings",
          "action": "Get call recordings",
          "description": "Get recordings of an active call by SIP channel"
        },
        {
          "name": "Get Call Status",
          "value": "getStatus",
          "action": "Get call status",
          "description": "Get the status of an active call by SIP channel"
        },
        {
          "name": "Get Call Tags",
          "value": "getTags",
          "action": "Get call tags",
          "description": "Get the tags of an active call by SIP channel"
        },
        {
          "name": "Hang Up",
          "value": "hangup",
          "action": "Hang up a call",
          "description": "Terminate an active call"
        },
        {
          "name": "Hold",
          "value": "hold",
          "action": "Hold a call",
          "description": "Place an active call on hold"
        },
        {
          "name": "List Active Calls",
          "value": "listActive",
          "action": "List active calls",
          "description": "List all active calls for a user"
        },
        {
          "name": "Make Call",
          "value": "makeCall",
          "action": "Make a call",
          "description": "Initiate a call from a specific device to a destination"
        },
        {
          "name": "Make Call (Legacy)",
          "value": "makeCallLegacy",
          "action": "Make a call legacy",
          "description": "Initiate a call using the legacy v1 Calls endpoint"
        },
        {
          "name": "Originate",
          "value": "originate",
          "action": "Originate a call",
          "description": "Quick click-to-call: dial a number on behalf of a user"
        },
        {
          "name": "Originate (Advanced)",
          "value": "originateAdvanced",
          "action": "Originate a call advanced",
          "description": "Full AMI-style originate with channel, context, caller ID and more"
        },
        {
          "name": "Originate Mobility Call",
          "value": "originateMobility",
          "action": "Originate a mobility call",
          "description": "Trigger a mobility call to the given number"
        },
        {
          "name": "Send DTMF",
          "value": "dtmf",
          "action": "Send DTMF",
          "description": "Send DTMF tones during a call"
        },
        {
          "name": "Send DTMF (by Channel)",
          "value": "dtmfByChannel",
          "action": "Send DTMF by channel",
          "description": "Send a DTMF code to an active call by SIP channel (legacy v1)"
        },
        {
          "name": "Set Active Device",
          "value": "setActiveDevice",
          "action": "Set active device",
          "description": "Set the active device for call control"
        },
        {
          "name": "Set Call Tags",
          "value": "setTags",
          "action": "Set call tags",
          "description": "Set the tags of an active call by SIP channel"
        },
        {
          "name": "Transfer (by Channel)",
          "value": "transferByChannel",
          "action": "Transfer a call by channel",
          "description": "Transfer an active call by SIP channel (legacy v1, redirect or bridge)"
        },
        {
          "name": "Unhold",
          "value": "unhold",
          "action": "Unhold a call",
          "description": "Resume a call that is on hold"
        },
        {
          "name": "Update Contact Info",
          "value": "updateContactInfo",
          "action": "Update contact info",
          "description": "Update the caller name and phone number shown during an active call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Change Tags",
          "value": "changeTags",
          "action": "Change tags of a call record",
          "description": "Update the tags on a call history record"
        },
        {
          "name": "Delete Call Record",
          "value": "delete",
          "action": "Delete a call record",
          "description": "Permanently delete a call history record"
        },
        {
          "name": "Delete Voicemails",
          "value": "deleteVoicemails",
          "action": "Delete voicemails",
          "description": "Delete one or more voicemail records"
        },
        {
          "name": "Get Call History by User",
          "value": "getByUser",
          "action": "Get call history by user",
          "description": "Retrieve call history for a specific user"
        },
        {
          "name": "Get Call Record",
          "value": "get",
          "action": "Get a call record",
          "description": "Retrieve a single call history record by ID"
        },
        {
          "name": "Get Full Call History",
          "value": "getMany",
          "action": "Get full call history",
          "description": "Retrieve all call history records"
        },
        {
          "name": "Get Personal Call History",
          "value": "getPersonal",
          "action": "Get personal call history",
          "description": "Retrieve call history for the authenticated user"
        },
        {
          "name": "Update Archived Status",
          "value": "updateArchived",
          "action": "Update archived status of a call record",
          "description": "Archive or unarchive a call history record"
        },
        {
          "name": "Update Voicemails Status",
          "value": "updateVoicemailStatus",
          "action": "Update voicemails status",
          "description": "Mark one or more voicemails as read or unread"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "callHistory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Dynamic Member",
          "value": "addDynamicMember",
          "action": "Add a dynamic member to a call group",
          "description": "Add a user as a dynamic member to a call group"
        },
        {
          "name": "Forward Call",
          "value": "forwardCall",
          "action": "Forward a call in a call group queue",
          "description": "Forward an active queued call to another destination"
        },
        {
          "name": "Get Dynamic Members",
          "value": "getDynamicMembers",
          "action": "Get dynamic members of a call group",
          "description": "Return the list of dynamic members for a call group"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many call queues",
          "description": "Return the list of all call queues"
        },
        {
          "name": "Get Settings",
          "value": "getSettings",
          "action": "Get call queue settings",
          "description": "Retrieve the configuration for a call queue group"
        },
        {
          "name": "Remove Dynamic Member",
          "value": "removeDynamicMember",
          "action": "Remove a dynamic member from a call group",
          "description": "Remove a dynamic member from a call group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "callQueue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Copy Preferences",
          "value": "copyPreferences",
          "action": "Copy preferences from another colleague"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a colleague"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a colleague"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a colleague"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many colleagues"
        },
        {
          "name": "Get Many (Basic)",
          "value": "getManyBasic",
          "action": "Get many colleagues basic"
        },
        {
          "name": "Get My Info",
          "value": "getMe",
          "action": "Get my info"
        },
        {
          "name": "Get User Presence",
          "value": "getUserPresence",
          "action": "Get user presence by extension"
        },
        {
          "name": "Set Batch Presence",
          "value": "setBatchPresence",
          "action": "Set batch presence for colleagues"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a colleague"
        },
        {
          "name": "Update User Presence",
          "value": "updateUserPresence",
          "action": "Update user presence by extension"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "colleague"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "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 by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Return a single contact by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many contacts",
          "description": "Return a list of contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update a contact by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many departments",
          "description": "Retrieve all departments on the PBX"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "department"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add devices",
          "description": "Add one or more devices to the PBX by MAC address"
        },
        {
          "name": "Connect",
          "value": "connect",
          "action": "Connect a device",
          "description": "Connect a device to a user extension"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a device",
          "description": "Remove a device from the PBX"
        },
        {
          "name": "Disconnect",
          "value": "disconnect",
          "action": "Disconnect a device",
          "description": "Disconnect a device from the PBX"
        },
        {
          "name": "Get iOS Config",
          "value": "getIosConfig",
          "action": "Get an iOS config",
          "description": "Retrieve the iOS provisioning configuration"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many devices",
          "description": "Retrieve many provisioned devices on the PBX"
        },
        {
          "name": "List User Devices",
          "value": "listUserDevices",
          "action": "List user devices",
          "description": "Retrieve all call-control devices registered to a user"
        },
        {
          "name": "Reset Token",
          "value": "resetToken",
          "action": "Reset device token",
          "description": "Reset the provisioning token for a device"
        },
        {
          "name": "Scan",
          "value": "scan",
          "action": "Scan devices",
          "description": "Scan an IP address or range for discoverable devices"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a device",
          "description": "Update device settings"
        },
        {
          "name": "Verify",
          "value": "verify",
          "action": "Verify devices",
          "description": "Verify device provisioning status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "device"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getDialplans",
      "options": [
        {
          "name": "Add DB Value",
          "value": "addDbValue",
          "action": "Add a dialplan database value",
          "description": "Add a value to the dialplan database under a family/key"
        },
        {
          "name": "Create Dialplan",
          "value": "createDialplan",
          "action": "Create a dialplan",
          "description": "Create a new PBX dialplan"
        },
        {
          "name": "Create IVR",
          "value": "createIvr",
          "action": "Create an IVR entry",
          "description": "Create a new IVR entry"
        },
        {
          "name": "Create Paging Group",
          "value": "createPagingGroup",
          "action": "Create a paging group",
          "description": "Create a new paging group"
        },
        {
          "name": "Create Switch",
          "value": "createSwitch",
          "action": "Create a switch",
          "description": "Create a new dialplan switch"
        },
        {
          "name": "Create Time Table",
          "value": "createTimeTable",
          "action": "Create a time table",
          "description": "Create a new time table"
        },
        {
          "name": "Delete DB Family",
          "value": "deleteDbFamily",
          "action": "Delete a dialplan database family",
          "description": "Delete all keys in a dialplan database family"
        },
        {
          "name": "Delete DB Key",
          "value": "deleteDbKey",
          "action": "Delete a dialplan database key",
          "description": "Delete a key and its value from the dialplan database"
        },
        {
          "name": "Delete Dialplan",
          "value": "deleteDialplan",
          "action": "Delete a dialplan",
          "description": "Delete one or more dialplans by ID"
        },
        {
          "name": "Delete IVR",
          "value": "deleteIvr",
          "action": "Delete an IVR entry",
          "description": "Delete an IVR entry by ID"
        },
        {
          "name": "Delete Paging Group",
          "value": "deletePagingGroup",
          "action": "Delete a paging group",
          "description": "Delete a paging group by ID"
        },
        {
          "name": "Delete Switch",
          "value": "deleteSwitch",
          "action": "Delete a switch",
          "description": "Delete a dialplan switch by ID"
        },
        {
          "name": "Delete Time Table",
          "value": "deleteTimeTable",
          "action": "Delete a time table",
          "description": "Delete a time table by ID"
        },
        {
          "name": "Get DB Family Keys",
          "value": "getDbFamilyKeys",
          "action": "Get dialplan database family keys",
          "description": "Return all keys in a dialplan database family"
        },
        {
          "name": "Get DB Value",
          "value": "getDbValue",
          "action": "Get a dialplan database value",
          "description": "Return a value from the dialplan database by family/key"
        },
        {
          "name": "Get Dialplan",
          "value": "getDialplan",
          "action": "Get a dialplan",
          "description": "Return a single PBX dialplan by ID"
        },
        {
          "name": "Get Dialplans",
          "value": "getDialplans",
          "action": "Get PBX dialplans",
          "description": "Return the list of PBX dialplans"
        },
        {
          "name": "Get General Settings",
          "value": "getGeneralSettings",
          "action": "Get dialplan general settings",
          "description": "Return dialplan general settings"
        },
        {
          "name": "Get IVR",
          "value": "getIvr",
          "action": "Get IVR entries",
          "description": "Return the list of IVR entries"
        },
        {
          "name": "Get Paging Groups",
          "value": "getPagingGroups",
          "action": "Get paging groups",
          "description": "Return the list of paging groups"
        },
        {
          "name": "Get Switches",
          "value": "getSwitches",
          "action": "Get switches",
          "description": "Return the list of dialplan switches"
        },
        {
          "name": "Get Time Tables",
          "value": "getTimeTables",
          "action": "Get time tables",
          "description": "Return the list of time tables"
        },
        {
          "name": "Import Time Tables",
          "value": "importTimeTables",
          "action": "Import time tables",
          "description": "Import a list of time tables"
        },
        {
          "name": "Update DB Value",
          "value": "updateDbValue",
          "action": "Update a dialplan database value",
          "description": "Update a value in the dialplan database by family/key"
        },
        {
          "name": "Update Dialplan",
          "value": "updateDialplan",
          "action": "Update a dialplan",
          "description": "Update a PBX dialplan by ID"
        },
        {
          "name": "Update General Settings",
          "value": "updateGeneralSettings",
          "action": "Update dialplan general settings",
          "description": "Update dialplan general settings"
        },
        {
          "name": "Update IVR",
          "value": "updateIvr",
          "action": "Update an IVR entry",
          "description": "Update an IVR entry by ID"
        },
        {
          "name": "Update Paging Group",
          "value": "updatePagingGroup",
          "action": "Update a paging group",
          "description": "Update a paging group by ID"
        },
        {
          "name": "Update Switch",
          "value": "updateSwitch",
          "action": "Update a switch",
          "description": "Update a dialplan switch by ID"
        },
        {
          "name": "Update Time Table",
          "value": "updateTimeTable",
          "action": "Update a time table",
          "description": "Update a time table by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dialplan"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a fax",
          "description": "Send a fax to one or more numbers"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload a fax file",
          "description": "Upload a file to be used in a fax"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fax"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create Call Group",
          "value": "createCallGroup",
          "action": "Create a call group",
          "description": "Create a new call group"
        },
        {
          "name": "Delete Call Group",
          "value": "deleteCallGroup",
          "action": "Delete a call group",
          "description": "Delete a call group by ID"
        },
        {
          "name": "Get Call Group Stats",
          "value": "getCallGroupStat",
          "action": "Get call group statistics",
          "description": "Retrieve live queue statistics for a single call group"
        },
        {
          "name": "Get Call Groups",
          "value": "getCallGroups",
          "action": "Get call groups",
          "description": "Retrieve all call groups on the PBX"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many groups",
          "description": "Retrieve all groups on the PBX"
        },
        {
          "name": "Update Call Group",
          "value": "updateCallGroup",
          "action": "Update a call group",
          "description": "Update a call group by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a notification",
          "description": "Send a notification or broadcast message to colleagues"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "notification"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a client",
          "description": "Create a new OAuth2 client application"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a client",
          "description": "Delete an OAuth2 client by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many clients",
          "description": "Retrieve all OAuth2 clients on the PBX"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a client",
          "description": "Update an existing OAuth2 client"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "oauth2Client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many PBX instances",
          "description": "Retrieve all PBX instances available to the account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pbx"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSettings",
      "options": [
        {
          "name": "Get HTTP Proxy",
          "value": "getHttpProxy",
          "action": "Get HTTP proxy settings",
          "description": "Return HTTP proxy settings"
        },
        {
          "name": "Get License",
          "value": "getLicense",
          "action": "Get PBX license info",
          "description": "Return PBX license information"
        },
        {
          "name": "Get NTP",
          "value": "getNtp",
          "action": "Get NTP settings",
          "description": "Return NTP server settings"
        },
        {
          "name": "Get Settings",
          "value": "getSettings",
          "action": "Get PBX general settings",
          "description": "Return PBX general settings"
        },
        {
          "name": "Get SMTP",
          "value": "getSmtp",
          "action": "Get SMTP settings",
          "description": "Return SMTP email settings"
        },
        {
          "name": "Get SMTP Test Status",
          "value": "getSmtpTestStatus",
          "action": "Get SMTP test status",
          "description": "Poll the result of a previously started SMTP test"
        },
        {
          "name": "Test SMTP",
          "value": "testSmtp",
          "action": "Test SMTP settings",
          "description": "Send a test email using the current SMTP settings"
        },
        {
          "name": "Update HTTP Proxy",
          "value": "updateHttpProxy",
          "action": "Update HTTP proxy settings",
          "description": "Update HTTP proxy settings"
        },
        {
          "name": "Update NTP",
          "value": "updateNtp",
          "action": "Update NTP settings",
          "description": "Update NTP server settings"
        },
        {
          "name": "Update Settings",
          "value": "updateSettings",
          "action": "Update PBX general settings",
          "description": "Update PBX general settings"
        },
        {
          "name": "Update SMTP",
          "value": "updateSmtp",
          "action": "Update SMTP settings",
          "description": "Update SMTP email settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pbxSettings"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ping",
      "options": [
        {
          "name": "Get Candidates",
          "value": "getCandidates",
          "action": "Get PBX candidates",
          "description": "Return the list of PBX network candidates"
        },
        {
          "name": "Get Dictionaries",
          "value": "getDictionaries",
          "action": "Get dialplan dictionaries",
          "description": "Return a list of dialplan dictionaries"
        },
        {
          "name": "Get Ports Status",
          "value": "getPorts",
          "action": "Get PBX port status",
          "description": "Return the status of PBX ports"
        },
        {
          "name": "Get Version",
          "value": "getVersion",
          "action": "Get PBX version",
          "description": "Return the PBX firmware version"
        },
        {
          "name": "Ping",
          "value": "ping",
          "action": "Ping the PBX",
          "description": "Check PBX connectivity"
        },
        {
          "name": "Reboot",
          "value": "reboot",
          "action": "Reboot the PBX",
          "description": "Trigger a PBX system reboot"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pbxSystem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStatus",
      "options": [
        {
          "name": "Check for Updates",
          "value": "check",
          "action": "Check for PBX updates",
          "description": "Check if firmware updates are available"
        },
        {
          "name": "Get Upgrade Settings",
          "value": "getSettings",
          "action": "Get upgrade settings",
          "description": "Return upgrade configuration settings"
        },
        {
          "name": "Get Upgrade Status",
          "value": "getStatus",
          "action": "Get upgrade status",
          "description": "Return the current upgrade status"
        },
        {
          "name": "Start Check",
          "value": "startCheck",
          "action": "Start an update check",
          "description": "Trigger a new check for available firmware updates"
        },
        {
          "name": "Start Upgrade",
          "value": "start",
          "action": "Start a PBX upgrade",
          "description": "Start a firmware upgrade"
        },
        {
          "name": "Update Upgrade Settings",
          "value": "updateSettings",
          "action": "Update upgrade settings",
          "description": "Update upgrade configuration settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pbxUpgrade"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getSettings",
      "options": [
        {
          "name": "Delete Location",
          "value": "deleteLocation",
          "action": "Delete a personal location",
          "description": "Remove a saved personal location by IP"
        },
        {
          "name": "Get ACL",
          "value": "getAcl",
          "action": "Get personal ACL",
          "description": "Return the personal ACL permissions"
        },
        {
          "name": "Get Features",
          "value": "getFeatures",
          "action": "Get personal features",
          "description": "Return the enabled personal features"
        },
        {
          "name": "Get Locations",
          "value": "getLocations",
          "action": "Get personal locations",
          "description": "Return saved personal locations"
        },
        {
          "name": "Get Paging Groups",
          "value": "getPagingGroups",
          "action": "Get personal paging groups",
          "description": "Return the paging groups the user belongs to"
        },
        {
          "name": "Get Settings",
          "value": "getSettings",
          "action": "Get personal settings",
          "description": "Return personal user settings"
        },
        {
          "name": "Get Token",
          "value": "getToken",
          "action": "Get personal token",
          "description": "Return the personal API token"
        },
        {
          "name": "Reset Token",
          "value": "resetToken",
          "action": "Reset personal token",
          "description": "Generate a new personal API token"
        },
        {
          "name": "Update Features",
          "value": "updateFeatures",
          "action": "Update personal features",
          "description": "Update personal feature settings"
        },
        {
          "name": "Update Presence",
          "value": "updatePresence",
          "action": "Update personal presence",
          "description": "Update the current presence status"
        },
        {
          "name": "Update Presence Location",
          "value": "updatePresenceLocation",
          "action": "Update presence location",
          "description": "Update the current presence location"
        },
        {
          "name": "Update Roster",
          "value": "updateRoster",
          "action": "Update personal roster",
          "description": "Update the personal contact roster"
        },
        {
          "name": "Update Settings",
          "value": "updateSettings",
          "action": "Update personal settings",
          "description": "Update personal user settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "personal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Contact",
          "value": "addContact",
          "action": "Add a contact to a phonebook",
          "description": "Add a contact to a phonebook"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a phonebook",
          "description": "Create a new phonebook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a phonebook",
          "description": "Delete a phonebook by ID"
        },
        {
          "name": "Delete All Contacts",
          "value": "deleteContacts",
          "action": "Delete all contacts in a phonebook",
          "description": "Delete every contact in a phonebook"
        },
        {
          "name": "Delete Contact",
          "value": "deleteContact",
          "action": "Delete a contact from a phonebook",
          "description": "Delete a single contact from a phonebook"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a phonebook",
          "description": "Return a single phonebook by ID"
        },
        {
          "name": "Get Contact",
          "value": "getContact",
          "action": "Get a contact from a phonebook",
          "description": "Return a single contact from a phonebook"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts from a phonebook",
          "description": "Return the contacts in a phonebook"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many phonebooks",
          "description": "Return a list of phonebooks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a phonebook",
          "description": "Update a phonebook by ID"
        },
        {
          "name": "Update Contact",
          "value": "updateContact",
          "action": "Update a contact in a phonebook",
          "description": "Update a single contact in a phonebook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "phonebook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many recordings",
          "description": "Return a list of call recordings"
        },
        {
          "name": "Create Download Task",
          "value": "createDownloadTask",
          "action": "Create a recording download task",
          "description": "Create a task to download recordings as a ZIP archive"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a recording",
          "description": "Download a single recording by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recording"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many SIP registrations",
          "description": "Return SIP registrations for many users"
        },
        {
          "name": "Get By Extension",
          "value": "getByExtension",
          "action": "Get SIP registrations by extension",
          "description": "Return SIP registrations for a specific extension"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sipRegistration"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send an SMS",
          "description": "Send an SMS message via the PBX originate endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a sound",
          "description": "Upload a new sound file"
        },
        {
          "name": "Create Directory",
          "value": "createDirectory",
          "action": "Create a sound directory",
          "description": "Create a new sound directory"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a sound",
          "description": "Delete a sound file by name"
        },
        {
          "name": "Delete Directory",
          "value": "deleteDirectory",
          "action": "Delete a sound directory",
          "description": "Delete a sound directory by path"
        },
        {
          "name": "Get Directory Contents",
          "value": "getDirectories",
          "action": "Get contents of a sound directory",
          "description": "Return the sound files inside a specific directory"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many sounds",
          "description": "Return a list of sound files"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a sound",
          "description": "Update a sound file by name"
        },
        {
          "name": "Update Directory",
          "value": "updateDirectory",
          "action": "Update a sound directory",
          "description": "Rename or move a sound directory"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sound"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get trusted i ps",
          "description": "Return the list of trusted IP addresses"
        },
        {
          "name": "Set",
          "value": "set",
          "action": "Set trusted i ps",
          "description": "Replace the entire trusted IP list"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "trustedIp"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getGroups",
      "options": [
        {
          "name": "Create FXO Trunk",
          "value": "createFxo",
          "action": "Create a FXO trunk",
          "description": "Create a new FXO trunk"
        },
        {
          "name": "Create PSTN Trunk",
          "value": "createPstn",
          "action": "Create a PSTN trunk",
          "description": "Create a new PSTN trunk"
        },
        {
          "name": "Create SIP Trunk",
          "value": "createSip",
          "action": "Create a SIP trunk",
          "description": "Create a new SIP trunk"
        },
        {
          "name": "Create Trunk Group",
          "value": "createGroup",
          "action": "Create a trunk group",
          "description": "Create a new trunk group"
        },
        {
          "name": "Create Trunk Price List",
          "value": "createPrice",
          "action": "Create a trunk price list",
          "description": "Create a new trunk price list (optionally upload a .csv rate file)"
        },
        {
          "name": "Delete FXO Trunk",
          "value": "deleteFxo",
          "action": "Delete a FXO trunk",
          "description": "Delete a FXO trunk by ID"
        },
        {
          "name": "Delete PSTN Trunk",
          "value": "deletePstn",
          "action": "Delete a PSTN trunk",
          "description": "Delete a PSTN trunk by ID"
        },
        {
          "name": "Delete SIP Trunk",
          "value": "deleteSip",
          "action": "Delete a SIP trunk",
          "description": "Delete a SIP trunk by ID"
        },
        {
          "name": "Delete Trunk Group",
          "value": "deleteGroup",
          "action": "Delete a trunk group",
          "description": "Delete a trunk group by ID"
        },
        {
          "name": "Delete Trunk Price List",
          "value": "deletePrice",
          "action": "Delete a trunk price list",
          "description": "Delete a trunk price list by ID"
        },
        {
          "name": "Export Trunk Price List",
          "value": "exportPrice",
          "action": "Export a trunk price list",
          "description": "Export a trunk price list by ID"
        },
        {
          "name": "Get FXO Trunks",
          "value": "getFxo",
          "action": "Get FXO trunks",
          "description": "Return the list of FXO trunks"
        },
        {
          "name": "Get PSTN Trunks",
          "value": "getPstn",
          "action": "Get PSTN trunks",
          "description": "Return the list of PSTN trunks"
        },
        {
          "name": "Get SIP Trunks",
          "value": "getSip",
          "action": "Get SIP trunks",
          "description": "Return the list of SIP trunks"
        },
        {
          "name": "Get Trunk Groups",
          "value": "getGroups",
          "action": "Get trunk groups",
          "description": "Return the list of trunk groups with rules"
        },
        {
          "name": "Get Trunk Prices",
          "value": "getPrices",
          "action": "Get trunk prices",
          "description": "Return trunk pricing information"
        },
        {
          "name": "Update FXO Trunk",
          "value": "updateFxo",
          "action": "Update a FXO trunk",
          "description": "Update a FXO trunk by ID"
        },
        {
          "name": "Update PSTN Trunk",
          "value": "updatePstn",
          "action": "Update a PSTN trunk",
          "description": "Update a PSTN trunk by ID"
        },
        {
          "name": "Update SIP Trunk",
          "value": "updateSip",
          "action": "Update a SIP trunk",
          "description": "Update a SIP trunk by ID"
        },
        {
          "name": "Update Trunk Group",
          "value": "updateGroup",
          "action": "Update a trunk group",
          "description": "Update a trunk group by ID"
        },
        {
          "name": "Update Trunk Price List",
          "value": "updatePrice",
          "action": "Update a trunk price list",
          "description": "Update a trunk price list by ID (optionally upload a .csv rate file)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "trunk"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRooms",
      "options": [
        {
          "name": "Create Room",
          "value": "createRoom",
          "action": "Create a video conference room",
          "description": "Create a new video conference room"
        },
        {
          "name": "Delete Room",
          "value": "deleteRoom",
          "action": "Delete a video conference room",
          "description": "Delete a video conference room by ID"
        },
        {
          "name": "Get Rooms",
          "value": "getRooms",
          "action": "Get video conference rooms",
          "description": "Return the rooms in which the user is a participant"
        },
        {
          "name": "Invite",
          "value": "invite",
          "action": "Invite to a video conference room",
          "description": "Invite a participant to a video conference room"
        },
        {
          "name": "Update Room",
          "value": "updateRoom",
          "action": "Update a video conference room",
          "description": "Update a video conference room by ID"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "videoConference"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete voicemails",
          "description": "Delete one or more voicemail messages by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get all voicemails",
          "description": "Return all voicemails from the PBX"
        },
        {
          "name": "Mark as Read",
          "value": "markAsRead",
          "action": "Mark voicemail as read",
          "description": "Mark a voicemail message as read"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "voiceMail"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an ACL group",
      "description": "Create a new ACL group on the PBX",
      "resource": "aclGroup"
    },
    {
      "name": "Create Rule",
      "value": "createRule",
      "action": "Create an ACL group rule",
      "description": "Create a new ACL group rule",
      "resource": "aclGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an ACL group",
      "description": "Delete an ACL group by ID",
      "resource": "aclGroup"
    },
    {
      "name": "Delete Rule",
      "value": "deleteRule",
      "action": "Delete an ACL group rule",
      "description": "Delete an ACL group rule by ID",
      "resource": "aclGroup"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many ACL groups",
      "description": "Return the list of ACL groups",
      "resource": "aclGroup"
    },
    {
      "name": "Get Permissions",
      "value": "getPermissions",
      "action": "Get ACL group permissions",
      "description": "Retrieve the permissions for an ACL group",
      "resource": "aclGroup"
    },
    {
      "name": "Get Rules",
      "value": "getRules",
      "action": "Get ACL group rules",
      "description": "Return the list of ACL group rules",
      "resource": "aclGroup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an ACL group",
      "description": "Update an existing ACL group by ID",
      "resource": "aclGroup"
    },
    {
      "name": "Update Rule",
      "value": "updateRule",
      "action": "Update an ACL group rule",
      "description": "Update an ACL group rule by ID",
      "resource": "aclGroup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an alarm clock",
      "description": "Remove a scheduled alarm clock by ID",
      "resource": "alarmClock"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an alarm clock",
      "description": "Retrieve a scheduled alarm clock by ID",
      "resource": "alarmClock"
    },
    {
      "name": "Originate",
      "value": "originate",
      "action": "Originate an alarm clock call",
      "description": "Schedule an alarm clock call to a user",
      "resource": "alarmClock"
    },
    {
      "name": "Create S2S Application",
      "value": "createS2s",
      "action": "Create an S2S application",
      "description": "Create a new server-to-server application",
      "resource": "application"
    },
    {
      "name": "Create Simple Token",
      "value": "createSimpleToken",
      "action": "Create a simple token application",
      "description": "Create a new simple token application",
      "resource": "application"
    },
    {
      "name": "Delete S2S Application",
      "value": "deleteS2s",
      "action": "Delete an S2S application",
      "description": "Delete a server-to-server application by ID",
      "resource": "application"
    },
    {
      "name": "Delete Simple Token",
      "value": "deleteSimpleToken",
      "action": "Delete a simple token application",
      "description": "Delete a simple token application by ID",
      "resource": "application"
    },
    {
      "name": "Get S2S Applications",
      "value": "getS2s",
      "action": "Get S2S applications",
      "description": "Return the list of server-to-server applications",
      "resource": "application"
    },
    {
      "name": "Get Simple Tokens",
      "value": "getSimpleTokens",
      "action": "Get simple token applications",
      "description": "Return the list of simple token applications",
      "resource": "application"
    },
    {
      "name": "Update S2S Application",
      "value": "updateS2s",
      "action": "Update an S2S application",
      "description": "Update a server-to-server application by ID",
      "resource": "application"
    },
    {
      "name": "Update Simple Token",
      "value": "updateSimpleToken",
      "action": "Update a simple token application",
      "description": "Update a simple token application by ID",
      "resource": "application"
    },
    {
      "name": "Reload",
      "value": "reload",
      "action": "Reload broadcasts",
      "description": "Reload the broadcast configuration on the PBX",
      "resource": "broadcast"
    },
    {
      "name": "Answer",
      "value": "answer",
      "action": "Answer a call",
      "description": "Answer an incoming call",
      "resource": "call"
    },
    {
      "name": "Attendant Transfer",
      "value": "attendantTransfer",
      "action": "Attendant transfer a call",
      "description": "Transfer a call with consultation (attended transfer)",
      "resource": "call"
    },
    {
      "name": "Blind Transfer",
      "value": "blindTransfer",
      "action": "Blind transfer a call",
      "description": "Transfer a call without consultation",
      "resource": "call"
    },
    {
      "name": "Get Call Recordings",
      "value": "getRecordings",
      "action": "Get call recordings",
      "description": "Get recordings of an active call by SIP channel",
      "resource": "call"
    },
    {
      "name": "Get Call Status",
      "value": "getStatus",
      "action": "Get call status",
      "description": "Get the status of an active call by SIP channel",
      "resource": "call"
    },
    {
      "name": "Get Call Tags",
      "value": "getTags",
      "action": "Get call tags",
      "description": "Get the tags of an active call by SIP channel",
      "resource": "call"
    },
    {
      "name": "Hang Up",
      "value": "hangup",
      "action": "Hang up a call",
      "description": "Terminate an active call",
      "resource": "call"
    },
    {
      "name": "Hold",
      "value": "hold",
      "action": "Hold a call",
      "description": "Place an active call on hold",
      "resource": "call"
    },
    {
      "name": "List Active Calls",
      "value": "listActive",
      "action": "List active calls",
      "description": "List all active calls for a user",
      "resource": "call"
    },
    {
      "name": "Make Call",
      "value": "makeCall",
      "action": "Make a call",
      "description": "Initiate a call from a specific device to a destination",
      "resource": "call"
    },
    {
      "name": "Make Call (Legacy)",
      "value": "makeCallLegacy",
      "action": "Make a call legacy",
      "description": "Initiate a call using the legacy v1 Calls endpoint",
      "resource": "call"
    },
    {
      "name": "Originate",
      "value": "originate",
      "action": "Originate a call",
      "description": "Quick click-to-call: dial a number on behalf of a user",
      "resource": "call"
    },
    {
      "name": "Originate (Advanced)",
      "value": "originateAdvanced",
      "action": "Originate a call advanced",
      "description": "Full AMI-style originate with channel, context, caller ID and more",
      "resource": "call"
    },
    {
      "name": "Originate Mobility Call",
      "value": "originateMobility",
      "action": "Originate a mobility call",
      "description": "Trigger a mobility call to the given number",
      "resource": "call"
    },
    {
      "name": "Send DTMF",
      "value": "dtmf",
      "action": "Send DTMF",
      "description": "Send DTMF tones during a call",
      "resource": "call"
    },
    {
      "name": "Send DTMF (by Channel)",
      "value": "dtmfByChannel",
      "action": "Send DTMF by channel",
      "description": "Send a DTMF code to an active call by SIP channel (legacy v1)",
      "resource": "call"
    },
    {
      "name": "Set Active Device",
      "value": "setActiveDevice",
      "action": "Set active device",
      "description": "Set the active device for call control",
      "resource": "call"
    },
    {
      "name": "Set Call Tags",
      "value": "setTags",
      "action": "Set call tags",
      "description": "Set the tags of an active call by SIP channel",
      "resource": "call"
    },
    {
      "name": "Transfer (by Channel)",
      "value": "transferByChannel",
      "action": "Transfer a call by channel",
      "description": "Transfer an active call by SIP channel (legacy v1, redirect or bridge)",
      "resource": "call"
    },
    {
      "name": "Unhold",
      "value": "unhold",
      "action": "Unhold a call",
      "description": "Resume a call that is on hold",
      "resource": "call"
    },
    {
      "name": "Update Contact Info",
      "value": "updateContactInfo",
      "action": "Update contact info",
      "description": "Update the caller name and phone number shown during an active call",
      "resource": "call"
    },
    {
      "name": "Change Tags",
      "value": "changeTags",
      "action": "Change tags of a call record",
      "description": "Update the tags on a call history record",
      "resource": "callHistory"
    },
    {
      "name": "Delete Call Record",
      "value": "delete",
      "action": "Delete a call record",
      "description": "Permanently delete a call history record",
      "resource": "callHistory"
    },
    {
      "name": "Delete Voicemails",
      "value": "deleteVoicemails",
      "action": "Delete voicemails",
      "description": "Delete one or more voicemail records",
      "resource": "callHistory"
    },
    {
      "name": "Get Call History by User",
      "value": "getByUser",
      "action": "Get call history by user",
      "description": "Retrieve call history for a specific user",
      "resource": "callHistory"
    },
    {
      "name": "Get Call Record",
      "value": "get",
      "action": "Get a call record",
      "description": "Retrieve a single call history record by ID",
      "resource": "callHistory"
    },
    {
      "name": "Get Full Call History",
      "value": "getMany",
      "action": "Get full call history",
      "description": "Retrieve all call history records",
      "resource": "callHistory"
    },
    {
      "name": "Get Personal Call History",
      "value": "getPersonal",
      "action": "Get personal call history",
      "description": "Retrieve call history for the authenticated user",
      "resource": "callHistory"
    },
    {
      "name": "Update Archived Status",
      "value": "updateArchived",
      "action": "Update archived status of a call record",
      "description": "Archive or unarchive a call history record",
      "resource": "callHistory"
    },
    {
      "name": "Update Voicemails Status",
      "value": "updateVoicemailStatus",
      "action": "Update voicemails status",
      "description": "Mark one or more voicemails as read or unread",
      "resource": "callHistory"
    },
    {
      "name": "Add Dynamic Member",
      "value": "addDynamicMember",
      "action": "Add a dynamic member to a call group",
      "description": "Add a user as a dynamic member to a call group",
      "resource": "callQueue"
    },
    {
      "name": "Forward Call",
      "value": "forwardCall",
      "action": "Forward a call in a call group queue",
      "description": "Forward an active queued call to another destination",
      "resource": "callQueue"
    },
    {
      "name": "Get Dynamic Members",
      "value": "getDynamicMembers",
      "action": "Get dynamic members of a call group",
      "description": "Return the list of dynamic members for a call group",
      "resource": "callQueue"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many call queues",
      "description": "Return the list of all call queues",
      "resource": "callQueue"
    },
    {
      "name": "Get Settings",
      "value": "getSettings",
      "action": "Get call queue settings",
      "description": "Retrieve the configuration for a call queue group",
      "resource": "callQueue"
    },
    {
      "name": "Remove Dynamic Member",
      "value": "removeDynamicMember",
      "action": "Remove a dynamic member from a call group",
      "description": "Remove a dynamic member from a call group",
      "resource": "callQueue"
    },
    {
      "name": "Copy Preferences",
      "value": "copyPreferences",
      "action": "Copy preferences from another colleague",
      "resource": "colleague"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a colleague",
      "resource": "colleague"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a colleague",
      "resource": "colleague"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a colleague",
      "resource": "colleague"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many colleagues",
      "resource": "colleague"
    },
    {
      "name": "Get Many (Basic)",
      "value": "getManyBasic",
      "action": "Get many colleagues basic",
      "resource": "colleague"
    },
    {
      "name": "Get My Info",
      "value": "getMe",
      "action": "Get my info",
      "resource": "colleague"
    },
    {
      "name": "Get User Presence",
      "value": "getUserPresence",
      "action": "Get user presence by extension",
      "resource": "colleague"
    },
    {
      "name": "Set Batch Presence",
      "value": "setBatchPresence",
      "action": "Set batch presence for colleagues",
      "resource": "colleague"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a colleague",
      "resource": "colleague"
    },
    {
      "name": "Update User Presence",
      "value": "updateUserPresence",
      "action": "Update user presence by extension",
      "resource": "colleague"
    },
    {
      "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 by ID",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Return a single contact by ID",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many contacts",
      "description": "Return a list of contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update a contact by ID",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many departments",
      "description": "Retrieve all departments on the PBX",
      "resource": "department"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add devices",
      "description": "Add one or more devices to the PBX by MAC address",
      "resource": "device"
    },
    {
      "name": "Connect",
      "value": "connect",
      "action": "Connect a device",
      "description": "Connect a device to a user extension",
      "resource": "device"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a device",
      "description": "Remove a device from the PBX",
      "resource": "device"
    },
    {
      "name": "Disconnect",
      "value": "disconnect",
      "action": "Disconnect a device",
      "description": "Disconnect a device from the PBX",
      "resource": "device"
    },
    {
      "name": "Get iOS Config",
      "value": "getIosConfig",
      "action": "Get an iOS config",
      "description": "Retrieve the iOS provisioning configuration",
      "resource": "device"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many devices",
      "description": "Retrieve many provisioned devices on the PBX",
      "resource": "device"
    },
    {
      "name": "List User Devices",
      "value": "listUserDevices",
      "action": "List user devices",
      "description": "Retrieve all call-control devices registered to a user",
      "resource": "device"
    },
    {
      "name": "Reset Token",
      "value": "resetToken",
      "action": "Reset device token",
      "description": "Reset the provisioning token for a device",
      "resource": "device"
    },
    {
      "name": "Scan",
      "value": "scan",
      "action": "Scan devices",
      "description": "Scan an IP address or range for discoverable devices",
      "resource": "device"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a device",
      "description": "Update device settings",
      "resource": "device"
    },
    {
      "name": "Verify",
      "value": "verify",
      "action": "Verify devices",
      "description": "Verify device provisioning status",
      "resource": "device"
    },
    {
      "name": "Add DB Value",
      "value": "addDbValue",
      "action": "Add a dialplan database value",
      "description": "Add a value to the dialplan database under a family/key",
      "resource": "dialplan"
    },
    {
      "name": "Create Dialplan",
      "value": "createDialplan",
      "action": "Create a dialplan",
      "description": "Create a new PBX dialplan",
      "resource": "dialplan"
    },
    {
      "name": "Create IVR",
      "value": "createIvr",
      "action": "Create an IVR entry",
      "description": "Create a new IVR entry",
      "resource": "dialplan"
    },
    {
      "name": "Create Paging Group",
      "value": "createPagingGroup",
      "action": "Create a paging group",
      "description": "Create a new paging group",
      "resource": "dialplan"
    },
    {
      "name": "Create Switch",
      "value": "createSwitch",
      "action": "Create a switch",
      "description": "Create a new dialplan switch",
      "resource": "dialplan"
    },
    {
      "name": "Create Time Table",
      "value": "createTimeTable",
      "action": "Create a time table",
      "description": "Create a new time table",
      "resource": "dialplan"
    },
    {
      "name": "Delete DB Family",
      "value": "deleteDbFamily",
      "action": "Delete a dialplan database family",
      "description": "Delete all keys in a dialplan database family",
      "resource": "dialplan"
    },
    {
      "name": "Delete DB Key",
      "value": "deleteDbKey",
      "action": "Delete a dialplan database key",
      "description": "Delete a key and its value from the dialplan database",
      "resource": "dialplan"
    },
    {
      "name": "Delete Dialplan",
      "value": "deleteDialplan",
      "action": "Delete a dialplan",
      "description": "Delete one or more dialplans by ID",
      "resource": "dialplan"
    },
    {
      "name": "Delete IVR",
      "value": "deleteIvr",
      "action": "Delete an IVR entry",
      "description": "Delete an IVR entry by ID",
      "resource": "dialplan"
    },
    {
      "name": "Delete Paging Group",
      "value": "deletePagingGroup",
      "action": "Delete a paging group",
      "description": "Delete a paging group by ID",
      "resource": "dialplan"
    },
    {
      "name": "Delete Switch",
      "value": "deleteSwitch",
      "action": "Delete a switch",
      "description": "Delete a dialplan switch by ID",
      "resource": "dialplan"
    },
    {
      "name": "Delete Time Table",
      "value": "deleteTimeTable",
      "action": "Delete a time table",
      "description": "Delete a time table by ID",
      "resource": "dialplan"
    },
    {
      "name": "Get DB Family Keys",
      "value": "getDbFamilyKeys",
      "action": "Get dialplan database family keys",
      "description": "Return all keys in a dialplan database family",
      "resource": "dialplan"
    },
    {
      "name": "Get DB Value",
      "value": "getDbValue",
      "action": "Get a dialplan database value",
      "description": "Return a value from the dialplan database by family/key",
      "resource": "dialplan"
    },
    {
      "name": "Get Dialplan",
      "value": "getDialplan",
      "action": "Get a dialplan",
      "description": "Return a single PBX dialplan by ID",
      "resource": "dialplan"
    },
    {
      "name": "Get Dialplans",
      "value": "getDialplans",
      "action": "Get PBX dialplans",
      "description": "Return the list of PBX dialplans",
      "resource": "dialplan"
    },
    {
      "name": "Get General Settings",
      "value": "getGeneralSettings",
      "action": "Get dialplan general settings",
      "description": "Return dialplan general settings",
      "resource": "dialplan"
    },
    {
      "name": "Get IVR",
      "value": "getIvr",
      "action": "Get IVR entries",
      "description": "Return the list of IVR entries",
      "resource": "dialplan"
    },
    {
      "name": "Get Paging Groups",
      "value": "getPagingGroups",
      "action": "Get paging groups",
      "description": "Return the list of paging groups",
      "resource": "dialplan"
    },
    {
      "name": "Get Switches",
      "value": "getSwitches",
      "action": "Get switches",
      "description": "Return the list of dialplan switches",
      "resource": "dialplan"
    },
    {
      "name": "Get Time Tables",
      "value": "getTimeTables",
      "action": "Get time tables",
      "description": "Return the list of time tables",
      "resource": "dialplan"
    },
    {
      "name": "Import Time Tables",
      "value": "importTimeTables",
      "action": "Import time tables",
      "description": "Import a list of time tables",
      "resource": "dialplan"
    },
    {
      "name": "Update DB Value",
      "value": "updateDbValue",
      "action": "Update a dialplan database value",
      "description": "Update a value in the dialplan database by family/key",
      "resource": "dialplan"
    },
    {
      "name": "Update Dialplan",
      "value": "updateDialplan",
      "action": "Update a dialplan",
      "description": "Update a PBX dialplan by ID",
      "resource": "dialplan"
    },
    {
      "name": "Update General Settings",
      "value": "updateGeneralSettings",
      "action": "Update dialplan general settings",
      "description": "Update dialplan general settings",
      "resource": "dialplan"
    },
    {
      "name": "Update IVR",
      "value": "updateIvr",
      "action": "Update an IVR entry",
      "description": "Update an IVR entry by ID",
      "resource": "dialplan"
    },
    {
      "name": "Update Paging Group",
      "value": "updatePagingGroup",
      "action": "Update a paging group",
      "description": "Update a paging group by ID",
      "resource": "dialplan"
    },
    {
      "name": "Update Switch",
      "value": "updateSwitch",
      "action": "Update a switch",
      "description": "Update a dialplan switch by ID",
      "resource": "dialplan"
    },
    {
      "name": "Update Time Table",
      "value": "updateTimeTable",
      "action": "Update a time table",
      "description": "Update a time table by ID",
      "resource": "dialplan"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a fax",
      "description": "Send a fax to one or more numbers",
      "resource": "fax"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload a fax file",
      "description": "Upload a file to be used in a fax",
      "resource": "fax"
    },
    {
      "name": "Create Call Group",
      "value": "createCallGroup",
      "action": "Create a call group",
      "description": "Create a new call group",
      "resource": "group"
    },
    {
      "name": "Delete Call Group",
      "value": "deleteCallGroup",
      "action": "Delete a call group",
      "description": "Delete a call group by ID",
      "resource": "group"
    },
    {
      "name": "Get Call Group Stats",
      "value": "getCallGroupStat",
      "action": "Get call group statistics",
      "description": "Retrieve live queue statistics for a single call group",
      "resource": "group"
    },
    {
      "name": "Get Call Groups",
      "value": "getCallGroups",
      "action": "Get call groups",
      "description": "Retrieve all call groups on the PBX",
      "resource": "group"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many groups",
      "description": "Retrieve all groups on the PBX",
      "resource": "group"
    },
    {
      "name": "Update Call Group",
      "value": "updateCallGroup",
      "action": "Update a call group",
      "description": "Update a call group by ID",
      "resource": "group"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a notification",
      "description": "Send a notification or broadcast message to colleagues",
      "resource": "notification"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a client",
      "description": "Create a new OAuth2 client application",
      "resource": "oauth2Client"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a client",
      "description": "Delete an OAuth2 client by ID",
      "resource": "oauth2Client"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many clients",
      "description": "Retrieve all OAuth2 clients on the PBX",
      "resource": "oauth2Client"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a client",
      "description": "Update an existing OAuth2 client",
      "resource": "oauth2Client"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many PBX instances",
      "description": "Retrieve all PBX instances available to the account",
      "resource": "pbx"
    },
    {
      "name": "Get HTTP Proxy",
      "value": "getHttpProxy",
      "action": "Get HTTP proxy settings",
      "description": "Return HTTP proxy settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Get License",
      "value": "getLicense",
      "action": "Get PBX license info",
      "description": "Return PBX license information",
      "resource": "pbxSettings"
    },
    {
      "name": "Get NTP",
      "value": "getNtp",
      "action": "Get NTP settings",
      "description": "Return NTP server settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Get Settings",
      "value": "getSettings",
      "action": "Get PBX general settings",
      "description": "Return PBX general settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Get SMTP",
      "value": "getSmtp",
      "action": "Get SMTP settings",
      "description": "Return SMTP email settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Get SMTP Test Status",
      "value": "getSmtpTestStatus",
      "action": "Get SMTP test status",
      "description": "Poll the result of a previously started SMTP test",
      "resource": "pbxSettings"
    },
    {
      "name": "Test SMTP",
      "value": "testSmtp",
      "action": "Test SMTP settings",
      "description": "Send a test email using the current SMTP settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Update HTTP Proxy",
      "value": "updateHttpProxy",
      "action": "Update HTTP proxy settings",
      "description": "Update HTTP proxy settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Update NTP",
      "value": "updateNtp",
      "action": "Update NTP settings",
      "description": "Update NTP server settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Update Settings",
      "value": "updateSettings",
      "action": "Update PBX general settings",
      "description": "Update PBX general settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Update SMTP",
      "value": "updateSmtp",
      "action": "Update SMTP settings",
      "description": "Update SMTP email settings",
      "resource": "pbxSettings"
    },
    {
      "name": "Get Candidates",
      "value": "getCandidates",
      "action": "Get PBX candidates",
      "description": "Return the list of PBX network candidates",
      "resource": "pbxSystem"
    },
    {
      "name": "Get Dictionaries",
      "value": "getDictionaries",
      "action": "Get dialplan dictionaries",
      "description": "Return a list of dialplan dictionaries",
      "resource": "pbxSystem"
    },
    {
      "name": "Get Ports Status",
      "value": "getPorts",
      "action": "Get PBX port status",
      "description": "Return the status of PBX ports",
      "resource": "pbxSystem"
    },
    {
      "name": "Get Version",
      "value": "getVersion",
      "action": "Get PBX version",
      "description": "Return the PBX firmware version",
      "resource": "pbxSystem"
    },
    {
      "name": "Ping",
      "value": "ping",
      "action": "Ping the PBX",
      "description": "Check PBX connectivity",
      "resource": "pbxSystem"
    },
    {
      "name": "Reboot",
      "value": "reboot",
      "action": "Reboot the PBX",
      "description": "Trigger a PBX system reboot",
      "resource": "pbxSystem"
    },
    {
      "name": "Check for Updates",
      "value": "check",
      "action": "Check for PBX updates",
      "description": "Check if firmware updates are available",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Get Upgrade Settings",
      "value": "getSettings",
      "action": "Get upgrade settings",
      "description": "Return upgrade configuration settings",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Get Upgrade Status",
      "value": "getStatus",
      "action": "Get upgrade status",
      "description": "Return the current upgrade status",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Start Check",
      "value": "startCheck",
      "action": "Start an update check",
      "description": "Trigger a new check for available firmware updates",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Start Upgrade",
      "value": "start",
      "action": "Start a PBX upgrade",
      "description": "Start a firmware upgrade",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Update Upgrade Settings",
      "value": "updateSettings",
      "action": "Update upgrade settings",
      "description": "Update upgrade configuration settings",
      "resource": "pbxUpgrade"
    },
    {
      "name": "Delete Location",
      "value": "deleteLocation",
      "action": "Delete a personal location",
      "description": "Remove a saved personal location by IP",
      "resource": "personal"
    },
    {
      "name": "Get ACL",
      "value": "getAcl",
      "action": "Get personal ACL",
      "description": "Return the personal ACL permissions",
      "resource": "personal"
    },
    {
      "name": "Get Features",
      "value": "getFeatures",
      "action": "Get personal features",
      "description": "Return the enabled personal features",
      "resource": "personal"
    },
    {
      "name": "Get Locations",
      "value": "getLocations",
      "action": "Get personal locations",
      "description": "Return saved personal locations",
      "resource": "personal"
    },
    {
      "name": "Get Paging Groups",
      "value": "getPagingGroups",
      "action": "Get personal paging groups",
      "description": "Return the paging groups the user belongs to",
      "resource": "personal"
    },
    {
      "name": "Get Settings",
      "value": "getSettings",
      "action": "Get personal settings",
      "description": "Return personal user settings",
      "resource": "personal"
    },
    {
      "name": "Get Token",
      "value": "getToken",
      "action": "Get personal token",
      "description": "Return the personal API token",
      "resource": "personal"
    },
    {
      "name": "Reset Token",
      "value": "resetToken",
      "action": "Reset personal token",
      "description": "Generate a new personal API token",
      "resource": "personal"
    },
    {
      "name": "Update Features",
      "value": "updateFeatures",
      "action": "Update personal features",
      "description": "Update personal feature settings",
      "resource": "personal"
    },
    {
      "name": "Update Presence",
      "value": "updatePresence",
      "action": "Update personal presence",
      "description": "Update the current presence status",
      "resource": "personal"
    },
    {
      "name": "Update Presence Location",
      "value": "updatePresenceLocation",
      "action": "Update presence location",
      "description": "Update the current presence location",
      "resource": "personal"
    },
    {
      "name": "Update Roster",
      "value": "updateRoster",
      "action": "Update personal roster",
      "description": "Update the personal contact roster",
      "resource": "personal"
    },
    {
      "name": "Update Settings",
      "value": "updateSettings",
      "action": "Update personal settings",
      "description": "Update personal user settings",
      "resource": "personal"
    },
    {
      "name": "Add Contact",
      "value": "addContact",
      "action": "Add a contact to a phonebook",
      "description": "Add a contact to a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a phonebook",
      "description": "Create a new phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a phonebook",
      "description": "Delete a phonebook by ID",
      "resource": "phonebook"
    },
    {
      "name": "Delete All Contacts",
      "value": "deleteContacts",
      "action": "Delete all contacts in a phonebook",
      "description": "Delete every contact in a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Delete Contact",
      "value": "deleteContact",
      "action": "Delete a contact from a phonebook",
      "description": "Delete a single contact from a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a phonebook",
      "description": "Return a single phonebook by ID",
      "resource": "phonebook"
    },
    {
      "name": "Get Contact",
      "value": "getContact",
      "action": "Get a contact from a phonebook",
      "description": "Return a single contact from a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts from a phonebook",
      "description": "Return the contacts in a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many phonebooks",
      "description": "Return a list of phonebooks",
      "resource": "phonebook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a phonebook",
      "description": "Update a phonebook by ID",
      "resource": "phonebook"
    },
    {
      "name": "Update Contact",
      "value": "updateContact",
      "action": "Update a contact in a phonebook",
      "description": "Update a single contact in a phonebook",
      "resource": "phonebook"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many recordings",
      "description": "Return a list of call recordings",
      "resource": "recording"
    },
    {
      "name": "Create Download Task",
      "value": "createDownloadTask",
      "action": "Create a recording download task",
      "description": "Create a task to download recordings as a ZIP archive",
      "resource": "recording"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a recording",
      "description": "Download a single recording by ID",
      "resource": "recording"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many SIP registrations",
      "description": "Return SIP registrations for many users",
      "resource": "sipRegistration"
    },
    {
      "name": "Get By Extension",
      "value": "getByExtension",
      "action": "Get SIP registrations by extension",
      "description": "Return SIP registrations for a specific extension",
      "resource": "sipRegistration"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send an SMS",
      "description": "Send an SMS message via the PBX originate endpoint",
      "resource": "sms"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a sound",
      "description": "Upload a new sound file",
      "resource": "sound"
    },
    {
      "name": "Create Directory",
      "value": "createDirectory",
      "action": "Create a sound directory",
      "description": "Create a new sound directory",
      "resource": "sound"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a sound",
      "description": "Delete a sound file by name",
      "resource": "sound"
    },
    {
      "name": "Delete Directory",
      "value": "deleteDirectory",
      "action": "Delete a sound directory",
      "description": "Delete a sound directory by path",
      "resource": "sound"
    },
    {
      "name": "Get Directory Contents",
      "value": "getDirectories",
      "action": "Get contents of a sound directory",
      "description": "Return the sound files inside a specific directory",
      "resource": "sound"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many sounds",
      "description": "Return a list of sound files",
      "resource": "sound"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a sound",
      "description": "Update a sound file by name",
      "resource": "sound"
    },
    {
      "name": "Update Directory",
      "value": "updateDirectory",
      "action": "Update a sound directory",
      "description": "Rename or move a sound directory",
      "resource": "sound"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get trusted i ps",
      "description": "Return the list of trusted IP addresses",
      "resource": "trustedIp"
    },
    {
      "name": "Set",
      "value": "set",
      "action": "Set trusted i ps",
      "description": "Replace the entire trusted IP list",
      "resource": "trustedIp"
    },
    {
      "name": "Create FXO Trunk",
      "value": "createFxo",
      "action": "Create a FXO trunk",
      "description": "Create a new FXO trunk",
      "resource": "trunk"
    },
    {
      "name": "Create PSTN Trunk",
      "value": "createPstn",
      "action": "Create a PSTN trunk",
      "description": "Create a new PSTN trunk",
      "resource": "trunk"
    },
    {
      "name": "Create SIP Trunk",
      "value": "createSip",
      "action": "Create a SIP trunk",
      "description": "Create a new SIP trunk",
      "resource": "trunk"
    },
    {
      "name": "Create Trunk Group",
      "value": "createGroup",
      "action": "Create a trunk group",
      "description": "Create a new trunk group",
      "resource": "trunk"
    },
    {
      "name": "Create Trunk Price List",
      "value": "createPrice",
      "action": "Create a trunk price list",
      "description": "Create a new trunk price list (optionally upload a .csv rate file)",
      "resource": "trunk"
    },
    {
      "name": "Delete FXO Trunk",
      "value": "deleteFxo",
      "action": "Delete a FXO trunk",
      "description": "Delete a FXO trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Delete PSTN Trunk",
      "value": "deletePstn",
      "action": "Delete a PSTN trunk",
      "description": "Delete a PSTN trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Delete SIP Trunk",
      "value": "deleteSip",
      "action": "Delete a SIP trunk",
      "description": "Delete a SIP trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Delete Trunk Group",
      "value": "deleteGroup",
      "action": "Delete a trunk group",
      "description": "Delete a trunk group by ID",
      "resource": "trunk"
    },
    {
      "name": "Delete Trunk Price List",
      "value": "deletePrice",
      "action": "Delete a trunk price list",
      "description": "Delete a trunk price list by ID",
      "resource": "trunk"
    },
    {
      "name": "Export Trunk Price List",
      "value": "exportPrice",
      "action": "Export a trunk price list",
      "description": "Export a trunk price list by ID",
      "resource": "trunk"
    },
    {
      "name": "Get FXO Trunks",
      "value": "getFxo",
      "action": "Get FXO trunks",
      "description": "Return the list of FXO trunks",
      "resource": "trunk"
    },
    {
      "name": "Get PSTN Trunks",
      "value": "getPstn",
      "action": "Get PSTN trunks",
      "description": "Return the list of PSTN trunks",
      "resource": "trunk"
    },
    {
      "name": "Get SIP Trunks",
      "value": "getSip",
      "action": "Get SIP trunks",
      "description": "Return the list of SIP trunks",
      "resource": "trunk"
    },
    {
      "name": "Get Trunk Groups",
      "value": "getGroups",
      "action": "Get trunk groups",
      "description": "Return the list of trunk groups with rules",
      "resource": "trunk"
    },
    {
      "name": "Get Trunk Prices",
      "value": "getPrices",
      "action": "Get trunk prices",
      "description": "Return trunk pricing information",
      "resource": "trunk"
    },
    {
      "name": "Update FXO Trunk",
      "value": "updateFxo",
      "action": "Update a FXO trunk",
      "description": "Update a FXO trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Update PSTN Trunk",
      "value": "updatePstn",
      "action": "Update a PSTN trunk",
      "description": "Update a PSTN trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Update SIP Trunk",
      "value": "updateSip",
      "action": "Update a SIP trunk",
      "description": "Update a SIP trunk by ID",
      "resource": "trunk"
    },
    {
      "name": "Update Trunk Group",
      "value": "updateGroup",
      "action": "Update a trunk group",
      "description": "Update a trunk group by ID",
      "resource": "trunk"
    },
    {
      "name": "Update Trunk Price List",
      "value": "updatePrice",
      "action": "Update a trunk price list",
      "description": "Update a trunk price list by ID (optionally upload a .csv rate file)",
      "resource": "trunk"
    },
    {
      "name": "Create Room",
      "value": "createRoom",
      "action": "Create a video conference room",
      "description": "Create a new video conference room",
      "resource": "videoConference"
    },
    {
      "name": "Delete Room",
      "value": "deleteRoom",
      "action": "Delete a video conference room",
      "description": "Delete a video conference room by ID",
      "resource": "videoConference"
    },
    {
      "name": "Get Rooms",
      "value": "getRooms",
      "action": "Get video conference rooms",
      "description": "Return the rooms in which the user is a participant",
      "resource": "videoConference"
    },
    {
      "name": "Invite",
      "value": "invite",
      "action": "Invite to a video conference room",
      "description": "Invite a participant to a video conference room",
      "resource": "videoConference"
    },
    {
      "name": "Update Room",
      "value": "updateRoom",
      "action": "Update a video conference room",
      "description": "Update a video conference room by ID",
      "resource": "videoConference"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete voicemails",
      "description": "Delete one or more voicemail messages by ID",
      "resource": "voiceMail"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get all voicemails",
      "description": "Return all voicemails from the PBX",
      "resource": "voiceMail"
    },
    {
      "name": "Mark as Read",
      "value": "markAsRead",
      "action": "Mark voicemail as read",
      "description": "Mark a voicemail message as read",
      "resource": "voiceMail"
    }
  ]

npm_readme:
  # n8n-nodes-wildix

  This is an [n8n](https://n8n.io) community node package that lets you use [Wildix](https://www.wildix.com) in your n8n workflows.

  Wildix is a cloud-based UCaaS platform providing business telephony (PBX/SIP/WebRTC), team messaging, contact center, and SMS/WhatsApp via Classound.

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

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

  ---

  ## Installation

  This node works on any self-hosted n8n instance. It is available on npm but not yet listed in the official n8n community nodes directory — you can still install it directly.

  1. Open your n8n instance and go to **Settings → Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-wildix` and click **Install**
  4. Restart n8n when prompted

  The **Wildix** and **Wildix Trigger** nodes will then appear in the node picker.

  > **Note:** Community nodes are not available on n8n Cloud. You need a self-hosted instance (Docker, npm, or desktop app).

  ---

  ## Operations

  ### Wildix (action node)

  | Resource | Operations |
  |---|---|
  | **ACL Group** | Create, Create Rule, Delete, Delete Rule, Get Many, Get Permissions, Get Rules, Update, Update Rule |
  | **Alarm Clock** | Create, Delete, Get Many |
  | **Application** | Create S2S Application, Create Simple Token, Delete S2S Application, Delete Simple Token, Get S2S Applications, Get Simple Tokens, Update Simple Token |
  | **Broadcast** | Send |
  | **Call** | Answer, Attendant Transfer, Blind Transfer, Hang Up, Hold, List Active Calls, Make Call, Originate, Originate (Advanced), Send DTMF, Set Active Device, Unhold, Update Contact Info |
  | **Call History** | Change Tags, Delete Call Record, Delete Voicemails, Get Call History by User, Get Call Record, Get Full Call History, Get Personal Call History, Update Archived Status, Update Voicemails Status |
  | **Call Queue** | Add Dynamic Member, Get Dynamic Members, Get Many, Get Settings, Remove Dynamic Member |
  | **Colleague** | Create, Delete, Get, Get Many, Get My Info, Update |
  | **Contact** | Create, Delete, Get, Get Many, Update |
  | **Department** | Get Many |
  | **Device** | Add, Connect, Delete, Disconnect, Get Many, List User Devices, Reset Token, Scan, Update, Verify |
  | **Dialplan** | Create IVR, Create Paging Group, Create Switch, Create Time Table, Delete IVR, Delete Paging Group, Delete Switch, Delete Time Table, Get Dialplans, Get General Settings, Get IVR, Get Paging Groups, Get Switches, Get Time Tables, Update General Settings, Update IVR, Update Paging Group, Update Switch, Update Time Table |
  | **Fax** | Delete, Get Many, Get Settings, Send, Update Settings |
  | **Group** | Get Call Groups, Get Many |
  | **Notification** | Send |
  | **OAuth2 Client** | Create, Delete, Get Many, Update |
  | **PBX** | Get Many |
  | **PBX Setting** | Get HTTP Proxy, Get License, Get NTP, Get Settings, Get SMTP, Test SMTP, Update HTTP Proxy, Update NTP, Update Settings, Update SMTP |
  | **PBX System** | Get Candidates, Get Ports Status, Get Version, Ping, Reboot |
  | **PBX Upgrade** | Check for Updates, Get Upgrade Settings, Get Upgrade Status, Start Upgrade, Update Upgrade Settings |
  | **Personal** | Get ACL, Get Features, Get Locations, Get Paging Groups, Get Presence, Get Presence Location, Get Roster, Get Settings, Get Token, Reset Token, Update Features, Update Presence, Update Presence Location, Update Settings |
  | **Phonebook** | Create, Delete, Get, Get Many, Update |
  | **Recording** | Delete, Get Many |
  | **SIP Registration** | Get Many |
  | **SMS** | Send |
  | **Sound** | Create, Delete, Get Directory Contents, Get Many, Update |
  | **Trunk** | Create FXO Trunk, Create PSTN Trunk, Create SIP Trunk, Create Trunk Group, Delete FXO Trunk, Delete PSTN Trunk, Delete SIP Trunk, Delete Trunk Group, Get FXO Trunks, Get PSTN Trunks, Get SIP Trunks, Get Trunk Groups, Get Trunk Prices, Update FXO Trunk, Update PSTN Trunk, Update SIP Trunk, Update Trunk Group |
  | **Trusted IP** | Create, Delete, Get Many |
  | **Video Conference** | Create Room, Delete Room, Get Rooms, Invite, Update Room |
  | **Voicemail** | Delete, Get Many, Update Status |

  ### Wildix Trigger (webhook trigger)

  Listens for real-time call events from Wildix:

  | Event | Description |
  |---|---|
  | `call:live:progress` | Call started or state changed |
  | `call:live:completed` | Call ended normally |
  | `call:live:interrupted` | Call ended due to an error |
  | `call:live:transcription` | Transcription segment available |

  Incoming webhook requests are verified using HMAC-SHA256 (`X-Wildix-Signature` header). Requests with invalid signatures are rejected with HTTP 401.

  ---

  ## Credentials

  Two authentication methods are supported:

  ### Bearer Token (recommended for testing)

  1. In your Wildix Administration Console, generate a personal access token.
  2. In n8n, create a **Wildix Bearer Token API** credential and enter:
     - **PBX Subdomain** — e.g. `company.wildixin.com`
     - **Bearer Token** — your access token

  ### OAuth2

  1. In your Wildix Administration Console, create an OAuth2 application under **Integrations → OAuth2 Clients**.
  2. Note the **Client ID** and **Client Secret**.
  3. In n8n, create a **Wildix OAuth2 API** credential and enter:
     - **PBX Subdomain** — e.g. `company.wildixin.com`
     - **Client ID** and **Client Secret**
  4. Complete the OAuth2 authorization flow.

  ### Webhook Setup (Wildix Trigger)

  1. Add a **Wildix Trigger** node to your workflow and activate the workflow — n8n will generate a webhook URL.
  2. In your Wildix Administration Console, register the webhook URL under **Integrations → Webhooks**.
  3. Copy the webhook secret from the Wildix console and paste it into the **Webhook Secret** field on the trigger node.

  ---

  ## Compatibility

  Tested against n8n `>=1.0.0`.

  Requires Node.js `>=18`.

  ---

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Wildix API reference](https://docs.wildix.com/api-reference/)
  - [Wildix webhooks guide](https://docs.wildix.com/docs/calls/webhooks/)
  - [Wildix authentication](https://docs.wildix.com/wms/index.html#section/Authentication)

ai_documentation_summary:
  {"purpose":"Enables interaction with the Wildix UCaaS platform in n8n workflows, supporting telephony, messaging, and contact center operations.","capabilities":["Create, update, and delete ACL groups and rules","Manage alarm clocks and applications (S2S, Simple Token)","Send broadcast messages and SMS/WhatsApp via Classound","Handle call operations (answer, transfer, hang up, make calls, DTMF)","Retrieve and manage call history and voicemails","Configure call queues and dynamic members","Manage colleagues, contacts, departments, and phonebooks","Configure devices (add, connect, disconnect, reset token)","Manage dialplans, IVR, paging groups, and trunk types (FXO, PSTN, SIP)","Handle fax operations (send, delete, settings)"],"authentication":"Bearer Token or OAuth2","commonUseCases":["Automating inbound/outbound call responses","Integrating telephony with CRM systems","Managing contact center workflows","Sending automated SMS notifications","Handling call transfers and attendant services"],"limitations":["Not available on n8n Cloud; requires self-hosted instance","Community node not yet listed in official n8n community nodes directory","Webhook verification requires HMAC-SHA256 signature handling"],"relatedNodes":["Webhook","HTTP Request","Wait Until","Switch"]}


node_type: n8n-nodes-teable-io.teable
package_name: n8n-nodes-teable-io
display_name: Teable
description: Read and write records, tables, and spaces in Teable
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: zacharia-kimotho
author_github_url: https://github.com/Imperol3/n8n-nodes-teable.git
npm_package_name: n8n-nodes-teable-io
npm_version: 0.4.2
community_fetched_at: 2026-07-14T14:40:34.267Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "record",
      "options": [
        {
          "name": "Record",
          "value": "record"
        },
        {
          "name": "Table",
          "value": "table"
        },
        {
          "name": "Space / Base",
          "value": "space"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all records",
          "description": "List records with optional filters and sorting"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a record",
          "description": "Retrieve a single record by its ID"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a record",
          "description": "Create a new record"
        },
        {
          "name": "Create Many",
          "value": "createMany",
          "action": "Create many records",
          "description": "Create multiple records (batched at 1,000)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a record",
          "description": "Update fields on an existing record"
        },
        {
          "name": "Update Many",
          "value": "updateMany",
          "action": "Update many records",
          "description": "Update multiple records by ID"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a record",
          "description": "Delete a record"
        },
        {
          "name": "Upsert",
          "value": "upsert",
          "action": "Upsert a record",
          "description": "Create or update a record based on a matching field"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search records",
          "description": "Search records by field value"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "record"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get All",
          "value": "getAll",
          "action": "Get all tables",
          "description": "List all tables within a base"
        },
        {
          "name": "Get Schema",
          "value": "getSchema",
          "action": "Get table schema",
          "description": "Return fields and their types for a table"
        },
        {
          "name": "Get Views",
          "value": "getViews",
          "action": "Get table views",
          "description": "List all views for a table"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "table"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listSpaces",
      "options": [
        {
          "name": "List Spaces",
          "value": "listSpaces",
          "action": "List spaces",
          "description": "Return all spaces accessible to your API token"
        },
        {
          "name": "List Bases",
          "value": "listBases",
          "action": "List bases in a space",
          "description": "Return all bases within a space"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "space"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all records",
      "description": "List records with optional filters and sorting",
      "resource": "record"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a record",
      "description": "Retrieve a single record by its ID",
      "resource": "record"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a record",
      "description": "Create a new record",
      "resource": "record"
    },
    {
      "name": "Create Many",
      "value": "createMany",
      "action": "Create many records",
      "description": "Create multiple records (batched at 1,000)",
      "resource": "record"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a record",
      "description": "Update fields on an existing record",
      "resource": "record"
    },
    {
      "name": "Update Many",
      "value": "updateMany",
      "action": "Update many records",
      "description": "Update multiple records by ID",
      "resource": "record"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a record",
      "description": "Delete a record",
      "resource": "record"
    },
    {
      "name": "Upsert",
      "value": "upsert",
      "action": "Upsert a record",
      "description": "Create or update a record based on a matching field",
      "resource": "record"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search records",
      "description": "Search records by field value",
      "resource": "record"
    },
    {
      "name": "Get All",
      "value": "getAll",
      "action": "Get all tables",
      "description": "List all tables within a base",
      "resource": "table"
    },
    {
      "name": "Get Schema",
      "value": "getSchema",
      "action": "Get table schema",
      "description": "Return fields and their types for a table",
      "resource": "table"
    },
    {
      "name": "Get Views",
      "value": "getViews",
      "action": "Get table views",
      "description": "List all views for a table",
      "resource": "table"
    },
    {
      "name": "List Spaces",
      "value": "listSpaces",
      "action": "List spaces",
      "description": "Return all spaces accessible to your API token",
      "resource": "space"
    },
    {
      "name": "List Bases",
      "value": "listBases",
      "action": "List bases in a space",
      "description": "Return all bases within a space",
      "resource": "space"
    }
  ]

npm_readme:
  # n8n-nodes-teable

  An [n8n](https://n8n.io/) community node for [Teable](https://teable.ai) — the fast, real-time, no-code database built on Postgres.

  Replace clunky HTTP nodes with a proper Teable integration: dynamic dropdowns, full CRUD, bulk operations, upsert, and auto-pagination — all in one node.

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

  ---

  ## Installation

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

  ```
  n8n-nodes-teable-io
  ```

  Or install via npm (self-hosted n8n):

  ```bash
  npm install n8n-nodes-teable-io
  ```

  ---

  ## Credentials

  Create a **Teable API** credential with:

  | Field | Description |
  |---|---|
  | **API Token** | Your personal access token from Teable account settings |
  | **Base URL** | `https://app.teable.ai` (default) or your self-hosted URL |

  After saving, click **Test** — n8n verifies the token works regardless of which permission scope it was issued with (space, base, table, or record level).

  ---

  ## Nodes

  ### Teable (action node)

  #### Record

  | Operation | Description |
  |---|---|
  | **Get All** | List records with optional filter, sort, view, field selection, and auto-pagination |
  | **Get** | Fetch a single record by its ID |
  | **Create** | Create a new record with a field-value UI |
  | **Create Many** | Bulk-create from a JSON array (auto-batched at 1 000 per request) |
  | **Update** | Patch fields on a single record |
  | **Update Many** | Bulk-update from a JSON array |
  | **Delete** | Delete a record by ID |
  | **Upsert** | Create or update based on a unique field match |
  | **Search** | Full-text or field-scoped search |

  #### Table

  | Operation | Description |
  |---|---|
  | **Get All** | List all tables in a base |
  | **Get Schema** | Return all fields with their types and settings |
  | **Get Views** | List all views for a table |

  #### Space / Base

  | Operation | Description |
  |---|---|
  | **List Spaces** | All spaces accessible to your token |
  | **List Bases** | All bases within a space |

  ---

  ### Teable Trigger (polling trigger)

  Polls for new or updated records on a schedule you set in the workflow settings.

  | Event | Description |
  |---|---|
  | **New Record** | Fires when a record is added |
  | **Record Updated** | Fires when an existing record is modified (excludes newly created records) |
  | **New or Updated Record** | Fires on any change |

  Each trigger output includes:
  - `event` — `"created"` or `"updated"`
  - `current` — current field values (flattened for easy expression access)
  - `previous` — previous field snapshot (null on first run)

  ---

  ## Usage Tips

  **Finding IDs:** Run *Space → List Spaces* then *Space → List Bases* to get your IDs, or copy them from the Teable URL.

  **Return All:** Toggle on "Return All" in *Get All* to automatically paginate through every record (uses skip/take internally, max 1 000 per page).

  **Field Key Type:** Switch between *Field Name* (human-readable) and *Field ID* (`fldXXX`) per operation.

  **Upsert:** Pick the match field from the dropdown — the node searches for a record with that value and updates it, or creates a new one if not found.

  **Bulk operations:** Pass a JSON array to *Create Many* / *Update Many*. Each update object needs `id` and `fields`:
  ```json
  [
    { "id": "recABC123", "fields": { "Status": "Done" } },
    { "id": "recXYZ456", "fields": { "Status": "In Progress" } }
  ]
  ```

  **Filter JSON:** The *Get All* filter follows Teable's filter schema:
  ```json
  {
    "conjunction": "and",
    "filterSet": [
      { "fieldId": "fldXXX", "operator": "=", "value": "Active" }
    ]
  }
  ```

  ---

  ## Known Limitations

  | Limitation | Detail |
  |---|---|
  | **n8n version** | `usableAsTool` (AI Agent support) requires n8n ≥ 1.22.0. Workflow node works on any supported n8n version. |
  | **Large table sorting** | Ordering by `createdTime` or `lastModifiedTime` on very large tables can cause 504 timeouts. The trigger falls back to unordered fetching automatically. The main node does not — avoid sorting by system fields on tables with millions of rows. |
  | **Trigger poll volume** | The trigger fetches up to the configured limit per poll cycle. If your table receives bursts larger than that limit between polls, some records may be missed. Raise the limit or shorten the poll interval to compensate. |
  | **Static crawl only** | JS-rendered pages are not relevant here, but the Teable API is REST-only — there is no real-time webhook trigger yet. Polling introduces latency equal to your poll interval. |
  | **Return All cap** | All `Return All` operations are hard-capped at 100,000 records to prevent out-of-memory crashes in n8n. |

  ---

  ## Roadmap

  - **Webhook trigger** — real-time record events via Teable webhooks (no polling)
  - **Additional record operations** — bulk delete, record history, and more

  ---

  ## Security

  `0.2.5` introduced a security hardening pass:

  - SSRF protection on the `baseUrl` credential field
  - Path injection prevention on all resource ID parameters
  - Improved credential test endpoint (works with any token scope)
  - Error message hardening (no raw user input in logs)

  See [CHANGELOG.md](CHANGELOG.md) for full details.

  ---

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build (compiles TypeScript to dist/)
  npm run build

  # Link to local n8n for testing
  npm link
  cd ~/.n8n && mkdir -p nodes && cd nodes
  npm link n8n-nodes-teable-io

  # Start n8n — the Teable node appears in the node picker
  npx n8n start
  ```

  ---

  ## Author

  Built and maintained by **ZACHARIA Kimotho (Imperol)**

  [![LinkedIn](https://img.shields.io/badge/LinkedIn-ZACHARIA%20Kimotho-0077B5?logo=linkedin)](https://www.linkedin.com/in/zacharia-kimotho/)
  [![GitHub](https://img.shields.io/badge/GitHub-Imperol3-181717?logo=github)](https://github.com/Imperol3)

  ---

  ## License

  [MIT](LICENSE) © ZACHARIA Kimotho (Imperol)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables full CRUD operations, bulk processing, and search capabilities for Teable databases, including a polling trigger for real-time monitoring.","capabilities":["Get All records with filtering, sorting, and auto-pagination","Get single record by ID","Create new records","Bulk-create records (up to 1,000 per request)","Update single record fields","Bulk-update records","Delete records by ID","Upsert records based on unique field matches","Full-text and field-scoped search","List and manage tables, views, spaces, and bases"],"authentication":"API Token (Personal Access Token from Teable account settings)","commonUseCases":["Synchronizing Teable data with n8n workflows","Automated data entry and updates","Real-time monitoring of record changes via polling","Bulk data migration or cleanup","Replacing generic HTTP nodes for Teable integration"],"limitations":["Sorting by system fields (createdTime, lastModifiedTime) on very large tables can cause 504 timeouts","Polling trigger may miss records if bursts exceed configured limits","No real-time webhook trigger available (REST-only API)","Polling introduces latency based on interval settings","Return All operations are capped at 100,000 records"],"relatedNodes":["n8n HTTP Request","n8n Trigger","n8n Code","n8n Split In Batches"]}


node_type: n8n-nodes-teable-io.teableTrigger
package_name: n8n-nodes-teable-io
display_name: Teable Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: zacharia-kimotho
author_github_url: https://github.com/Imperol3/n8n-nodes-teable.git
npm_package_name: n8n-nodes-teable-io
npm_version: 0.4.2
community_fetched_at: 2026-07-14T14:40:34.269Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Polls for new or updated records in a Teable table. Set the poll interval in the workflow schedule settings.

npm_readme:
  # n8n-nodes-teable

  An [n8n](https://n8n.io/) community node for [Teable](https://teable.ai) — the fast, real-time, no-code database built on Postgres.

  Replace clunky HTTP nodes with a proper Teable integration: dynamic dropdowns, full CRUD, bulk operations, upsert, and auto-pagination — all in one node.

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

  ---

  ## Installation

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

  ```
  n8n-nodes-teable-io
  ```

  Or install via npm (self-hosted n8n):

  ```bash
  npm install n8n-nodes-teable-io
  ```

  ---

  ## Credentials

  Create a **Teable API** credential with:

  | Field | Description |
  |---|---|
  | **API Token** | Your personal access token from Teable account settings |
  | **Base URL** | `https://app.teable.ai` (default) or your self-hosted URL |

  After saving, click **Test** — n8n verifies the token works regardless of which permission scope it was issued with (space, base, table, or record level).

  ---

  ## Nodes

  ### Teable (action node)

  #### Record

  | Operation | Description |
  |---|---|
  | **Get All** | List records with optional filter, sort, view, field selection, and auto-pagination |
  | **Get** | Fetch a single record by its ID |
  | **Create** | Create a new record with a field-value UI |
  | **Create Many** | Bulk-create from a JSON array (auto-batched at 1 000 per request) |
  | **Update** | Patch fields on a single record |
  | **Update Many** | Bulk-update from a JSON array |
  | **Delete** | Delete a record by ID |
  | **Upsert** | Create or update based on a unique field match |
  | **Search** | Full-text or field-scoped search |

  #### Table

  | Operation | Description |
  |---|---|
  | **Get All** | List all tables in a base |
  | **Get Schema** | Return all fields with their types and settings |
  | **Get Views** | List all views for a table |

  #### Space / Base

  | Operation | Description |
  |---|---|
  | **List Spaces** | All spaces accessible to your token |
  | **List Bases** | All bases within a space |

  ---

  ### Teable Trigger (polling trigger)

  Polls for new or updated records on a schedule you set in the workflow settings.

  | Event | Description |
  |---|---|
  | **New Record** | Fires when a record is added |
  | **Record Updated** | Fires when an existing record is modified (excludes newly created records) |
  | **New or Updated Record** | Fires on any change |

  Each trigger output includes:
  - `event` — `"created"` or `"updated"`
  - `current` — current field values (flattened for easy expression access)
  - `previous` — previous field snapshot (null on first run)

  ---

  ## Usage Tips

  **Finding IDs:** Run *Space → List Spaces* then *Space → List Bases* to get your IDs, or copy them from the Teable URL.

  **Return All:** Toggle on "Return All" in *Get All* to automatically paginate through every record (uses skip/take internally, max 1 000 per page).

  **Field Key Type:** Switch between *Field Name* (human-readable) and *Field ID* (`fldXXX`) per operation.

  **Upsert:** Pick the match field from the dropdown — the node searches for a record with that value and updates it, or creates a new one if not found.

  **Bulk operations:** Pass a JSON array to *Create Many* / *Update Many*. Each update object needs `id` and `fields`:
  ```json
  [
    { "id": "recABC123", "fields": { "Status": "Done" } },
    { "id": "recXYZ456", "fields": { "Status": "In Progress" } }
  ]
  ```

  **Filter JSON:** The *Get All* filter follows Teable's filter schema:
  ```json
  {
    "conjunction": "and",
    "filterSet": [
      { "fieldId": "fldXXX", "operator": "=", "value": "Active" }
    ]
  }
  ```

  ---

  ## Known Limitations

  | Limitation | Detail |
  |---|---|
  | **n8n version** | `usableAsTool` (AI Agent support) requires n8n ≥ 1.22.0. Workflow node works on any supported n8n version. |
  | **Large table sorting** | Ordering by `createdTime` or `lastModifiedTime` on very large tables can cause 504 timeouts. The trigger falls back to unordered fetching automatically. The main node does not — avoid sorting by system fields on tables with millions of rows. |
  | **Trigger poll volume** | The trigger fetches up to the configured limit per poll cycle. If your table receives bursts larger than that limit between polls, some records may be missed. Raise the limit or shorten the poll interval to compensate. |
  | **Static crawl only** | JS-rendered pages are not relevant here, but the Teable API is REST-only — there is no real-time webhook trigger yet. Polling introduces latency equal to your poll interval. |
  | **Return All cap** | All `Return All` operations are hard-capped at 100,000 records to prevent out-of-memory crashes in n8n. |

  ---

  ## Roadmap

  - **Webhook trigger** — real-time record events via Teable webhooks (no polling)
  - **Additional record operations** — bulk delete, record history, and more

  ---

  ## Security

  `0.2.5` introduced a security hardening pass:

  - SSRF protection on the `baseUrl` credential field
  - Path injection prevention on all resource ID parameters
  - Improved credential test endpoint (works with any token scope)
  - Error message hardening (no raw user input in logs)

  See [CHANGELOG.md](CHANGELOG.md) for full details.

  ---

  ## Development

  ```bash
  # Install dependencies
  npm install

  # Build (compiles TypeScript to dist/)
  npm run build

  # Link to local n8n for testing
  npm link
  cd ~/.n8n && mkdir -p nodes && cd nodes
  npm link n8n-nodes-teable-io

  # Start n8n — the Teable node appears in the node picker
  npx n8n start
  ```

  ---

  ## Author

  Built and maintained by **ZACHARIA Kimotho (Imperol)**

  [![LinkedIn](https://img.shields.io/badge/LinkedIn-ZACHARIA%20Kimotho-0077B5?logo=linkedin)](https://www.linkedin.com/in/zacharia-kimotho/)
  [![GitHub](https://img.shields.io/badge/GitHub-Imperol3-181717?logo=github)](https://github.com/Imperol3)

  ---

  ## License

  [MIT](LICENSE) © ZACHARIA Kimotho (Imperol)

ai_documentation_summary:
  {"purpose":"A community n8n node that provides CRUD operations, bulk actions, and a polling trigger for Teable databases.","capabilities":["Get All records with filtering, sorting, and auto-pagination","Get single record by ID","Create new records","Bulk create records (auto-batched at 1,000)","Update single record fields","Bulk update records","Delete records by ID","Upsert records based on unique field match","Full-text or field-scoped search","List tables, views, spaces, and bases"],"authentication":"API Token (Personal Access Token from Teable account settings)","commonUseCases":["Automated data synchronization from Teable to n8n workflows","Real-time monitoring of record changes via polling trigger","Bulk data import and management operations","Dynamic dropdowns and form integrations with Teable data"],"limitations":["Webhook trigger not yet available (requires polling with latency)","Sorting by system fields (createdTime, lastModifiedTime) on large tables can cause 504 timeouts","Polling trigger may miss records if bursts exceed configured limit between cycles","Return All operations are hard-capped at 100,000 records","usableAsTool (AI Agent support) requires n8n version >= 1.22.0"],"relatedNodes":["n8n-nodes-teable-io.teable","n8n-nodes-base.httpRequest","n8n-nodes-base.scheduleTrigger"]}


node_type: @mercadopago/n8n-nodes-mercadopago.mercadoPago
package_name: @mercadopago/n8n-nodes-mercadopago
display_name: MercadoPago
description: Consume MercadoPago API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: alefossati
author_github_url: https://github.com/mercadopago/n8n-nodes-mercadopago.git
npm_package_name: @mercadopago/n8n-nodes-mercadopago
npm_version: 0.3.6
community_fetched_at: 2026-07-14T14:40:34.270Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "payments",
      "options": [
        {
          "name": "Payment",
          "value": "payments",
          "description": "Create payment links and manage checkout preferences"
        },
        {
          "name": "Reporting",
          "value": "reporting",
          "description": "Release Report operations"
        }
      ],
      "displayName": "Resource"
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createPaymentLink",
      "options": [
        {
          "name": "Create Payment Link",
          "value": "createPaymentLink",
          "description": "Create a payment link (preference)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payments"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyReleaseReports",
      "options": [
        {
          "name": "Get Many Release Reports",
          "value": "getManyReleaseReports",
          "description": "Retrieve a list of generated release reports"
        },
        {
          "name": "Get Many Settlement Reports",
          "value": "getManySettlementReports",
          "description": "Retrieve a list of generated settlement reports"
        },
        {
          "name": "Create or Update Release Report Config",
          "value": "createOrUpdateReleaseReportConfig",
          "description": "Create a new release report configuration or update an existing one (upsert)"
        },
        {
          "name": "Create or Update Settlement Report Config",
          "value": "createOrUpdateSettlementReportConfig",
          "description": "Create a new settlement report configuration or update an existing one (upsert)"
        },
        {
          "name": "Get Release Report Config",
          "value": "getReleaseReportConfig",
          "description": "Retrieve the current release report configuration for the account"
        },
        {
          "name": "Get Settlement Report Config",
          "value": "getSettlementReportConfig",
          "description": "Retrieve the current settlement report configuration for the account"
        },
        {
          "name": "Download Release Report",
          "value": "downloadReleaseReport",
          "description": "Download a generated release report file as CSV"
        },
        {
          "name": "Download Settlement Report",
          "value": "downloadSettlementReport",
          "description": "Download a generated settlement report file as CSV"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "reporting"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Payment Link",
      "value": "createPaymentLink",
      "description": "Create a payment link (preference)",
      "resource": "payments"
    },
    {
      "name": "Get Many Release Reports",
      "value": "getManyReleaseReports",
      "description": "Retrieve a list of generated release reports",
      "resource": "reporting"
    },
    {
      "name": "Get Many Settlement Reports",
      "value": "getManySettlementReports",
      "description": "Retrieve a list of generated settlement reports",
      "resource": "reporting"
    },
    {
      "name": "Create or Update Release Report Config",
      "value": "createOrUpdateReleaseReportConfig",
      "description": "Create a new release report configuration or update an existing one (upsert)",
      "resource": "reporting"
    },
    {
      "name": "Create or Update Settlement Report Config",
      "value": "createOrUpdateSettlementReportConfig",
      "description": "Create a new settlement report configuration or update an existing one (upsert)",
      "resource": "reporting"
    },
    {
      "name": "Get Release Report Config",
      "value": "getReleaseReportConfig",
      "description": "Retrieve the current release report configuration for the account",
      "resource": "reporting"
    },
    {
      "name": "Get Settlement Report Config",
      "value": "getSettlementReportConfig",
      "description": "Retrieve the current settlement report configuration for the account",
      "resource": "reporting"
    },
    {
      "name": "Download Release Report",
      "value": "downloadReleaseReport",
      "description": "Download a generated release report file as CSV",
      "resource": "reporting"
    },
    {
      "name": "Download Settlement Report",
      "value": "downloadSettlementReport",
      "description": "Download a generated settlement report file as CSV",
      "resource": "reporting"
    }
  ]

npm_readme:
  <div align="center">

  <img src="nodes/MercadoPago/icon-mercadopago.svg" width="80" alt="MercadoPago" />

  # n8n-nodes-mercadopago

  **The official Mercado Pago community node for n8n**

  Connect your workflows to Mercado Pago — create payment links, configure automated reports, and download your financial data, all without leaving n8n.

  [![npm version](https://img.shields.io/npm/v/@mercadopago/n8n-nodes-mercadopago?color=blue&label=npm)](https://www.npmjs.com/package/@mercadopago/n8n-nodes-mercadopago)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.15-brightgreen)](https://nodejs.org)
  [![n8n community node](https://img.shields.io/badge/n8n-community%20node-orange)](https://docs.n8n.io/integrations/community-nodes/)

  </div>

  ---

  ## ✨ What can you do with this node?

  | Resource | What you get |
  |----------|-------------|
  | 💳 **Payments** | Create Checkout Preference links with items, back URLs, expiration dates and more |
  | 📊 **Reporting** | Configure, list and download Release & Settlement reports |

  ---

  ## 🗺️ Operations at a glance

  ### 💳 Payments

  | Operation | Method | Description |
  |-----------|--------|-------------|
  | **Create Payment Link** | `POST` | Generate a Checkout Preference link to accept payments |

  ### 📊 Reporting — Release Reports

  | Operation | Method | Description |
  |-----------|--------|-------------|
  | **List Release Reports** | `GET` | List generated report files (supports pagination & returnAll) |
  | **Configure Release Report** | `POST / PUT` | Create **or** update preferences — columns, frequency, SFTP delivery |
  | **Get Release Report Config** | `GET` | Read the current configuration for your account |
  | **Download Release Report** | `GET` | Download a specific report file as CSV |

  ### 📊 Reporting — Settlement Reports

  | Operation | Method | Description |
  |-----------|--------|-------------|
  | **List Settlement Reports** | `GET` | List generated settlement report files |
  | **Configure Settlement Report** | `POST / PUT` | Create **or** update preferences — columns, frequency, SFTP delivery |
  | **Get Settlement Report Config** | `GET` | Read the current configuration for your account |
  | **Download Settlement Report** | `GET` | Download a specific settlement report file as CSV |

  > **💡 Smart configure:** The Configure operations are _upsert_ — they automatically create the config if it doesn't exist yet, or update it if it does. No need to know what state you're in.

  ---

  ## 🚀 Quick start

  ### 1. Install the node

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

  ```
  @mercadopago/n8n-nodes-mercadopago
  ```

  ### 2. Set up your credential

  1. In n8n go to **Credentials → New** → search for **MercadoPago API**
  2. Paste your **Access Token** (found in the [Mercado Pago Developer Portal](https://www.mercadopago.com.br/developers))
  3. Click **Test credential** — you'll get a green ✅ if it's valid

  > **Optional — SFTP delivery:** If you want reports delivered automatically to an SFTP server, create a **MercadoPago SFTP** credential with the connection details and attach it to the node.

  ### 3. Build your first workflow

  ```
  Trigger → MercadoPago (Create Payment Link) → Send email with payment URL
  ```

  ```
  Schedule → MercadoPago (List Release Reports) → Filter → Save to Google Sheets
  ```

  ---

  ## 📋 Operation details

  <details>
  <summary><strong>💳 Create Payment Link</strong></summary>

  Creates a [Checkout Preference](https://www.mercadopago.com.br/developers/en/reference/preferences/_checkout_preferences/post) — a hosted payment page with your items.

  **Required:**
  - At least one **Item** (title, quantity, currency, unit price)

  **Optional fields:**
  - `external_reference` — your internal order ID (max 64 chars)
  - `notification_url` — HTTPS webhook for payment status updates
  - `back_urls` — redirect URLs for success / pending / failure
  - `auto_return` — auto-redirect after approved payment
  - `expiration_date_from` / `expiration_date_to` — limit when the link is valid
  - `statement_descriptor` — text on the buyer's bank statement (max 13 chars)
  - `binary_mode` — only approved/rejected (no pending)

  </details>

  <details>
  <summary><strong>📊 Configure Release Report</strong></summary>

  Sets up automatic Release Report generation for your account. Works as an **upsert** — safe to run multiple times.

  **Required:**
  - **Columns** — at least one column key (e.g. `DATE`, `SOURCE_ID`, `NET_CREDIT_AMOUNT`)
  - **File Name Prefix** — prefix for generated file names
  - **Frequency** — hour (0–23), interval value, and type (`daily` / `weekly` / `monthly`)

  **Optional:**
  - SFTP credential for automatic file delivery
  - `separator`, `display_timezone`, `report_translation`
  - Email notification list
  - Boolean flags: `include_withdrawal_at_end`, `check_available_balance`, `compensate_detail`, `execute_after_withdrawal`, `scheduled`

  </details>

  <details>
  <summary><strong>📊 Configure Settlement Report</strong></summary>

  Same as Configure Release Report but for Settlement Reports. Supports a different set of columns and fewer boolean flags.

  </details>

  <details>
  <summary><strong>⬇️ Download Report (Release or Settlement)</strong></summary>

  Downloads a generated report file by name.

  - Returns a JSON object with a `content` field containing the raw CSV string
  - Pipe this into a **Write Binary File** node or a **Code** node to process it

  </details>

  ---

  ## 🔐 Credentials

  ### MercadoPago API _(required)_

  | Field | Description |
  |-------|-------------|
  | **Access Token** | Your Bearer token from the Mercado Pago Developer Portal |

  Get your token at: [mercadopago.com.br/developers → Your integrations → Credentials](https://www.mercadopago.com.br/developers)

  ### MercadoPago SFTP _(optional)_

  Only needed if you configure SFTP delivery for reports.

  | Field | Description |
  |-------|-------------|
  | **Server** | SFTP hostname or IP |
  | **Username** | SFTP login |
  | **Password** | SFTP password (stored encrypted) |
  | **Remote Dir** | Destination directory on the SFTP server |
  | **Port** | Default: 22 |

  ---

  ## 🏗️ Architecture

  The node follows a modular handler pattern where each operation lives in its own file.

  ```
  credentials/
    MercadoPagoApi.credentials.ts    ← API access token credential
    MercadoPagoSftp.credentials.ts   ← Optional SFTP credential

  nodes/MercadoPago/
    MercadoPago.node.ts              ← Node definition, UI properties, request wrapper
    MercadoPago.node.json            ← Metadata (categories, docs links)
    icon-mercadopago.svg
    icon-mercadopago.dark.svg
    operations/
      index.ts                       ← Handler registry + shared types (HandlerCtx)
      utils.ts                       ← Shared parsing helpers
      createPaymentLink.ts
      listReleaseReports.ts
      configureReleaseReport.ts      ← Upsert: POST → fallback PUT on 409
      getReleaseReportConfig.ts
      downloadReleaseReport.ts
      listSettlementReports.ts
      configureSettlementReport.ts   ← Upsert: POST → fallback PUT on 409
      getSettlementReportConfig.ts
      downloadSettlementReport.ts

  tests/operations/                  ← Vitest unit tests (one per operation)
  ```

  **How operations work:**

  ```
  execute() in MercadoPago.node.ts
    └── builds HandlerCtx (credential, request wrapper, helpers)
    └── dispatches to operations[operationName](ctx)
        └── handler validates input → builds body → calls ctx.request()
            └── makeRequest() adds Auth header, handles httpRequest
  ```

  ---

  ## 🛠️ Development

  ### Prerequisites
  - Node.js >= 20.15
  - npm

  ### Commands

  ```bash
  npm install          # Install dependencies
  npm run build        # Compile TypeScript → dist/
  npm run test:unit    # Run unit tests once
  npm run test         # Run tests in watch mode
  npm run test:coverage # Generate coverage report
  npm run lint         # ESLint
  npm run format       # Prettier
  ```

  ### Adding a new operation

  1. Create `nodes/MercadoPago/operations/myOperation.ts`
  2. Implement the handler using `HandlerCtx`
  3. Register it in `operations/index.ts`
  4. Add UI properties to `MercadoPago.node.ts`
  5. Write tests in `tests/operations/myOperation.test.ts`

  ---

  ## 🤝 Contributing

  Contributions are welcome! Read [CONTRIBUTING.md](CONTRIBUTING.md) to learn about the development process, branching model, and how to submit a pull request.

  ---

  ## 📄 License

  [MIT](LICENSE) — maintained by the **Tech Stuff IXF** team at Mercado Pago.

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with MercadoPago API to manage payments and financial reporting within automated workflows.","capabilities":["Create Checkout Preference payment links with items, expiration dates, and webhook notifications","List, configure, and download Release Reports (CSV)","List, configure, and download Settlement Reports (CSV)","Configure report delivery via SFTP","Upsert report configurations (create or update without state checks)"],"authentication":"API Key required (MercadoPago Access Token)","commonUseCases":["Generate hosted payment links for e-commerce checkout","Automate financial report generation and delivery to SFTP","Download settlement data for accounting reconciliation","Integrate MercadoPago webhooks into n8n workflows"],"limitations":["Requires Node.js version >= 20.15","SFTP delivery requires separate SFTP credential setup","Limited to MercadoPago's API capabilities for report configurations"],"relatedNodes":["Code","Write Binary File","Schedule Trigger","HTTP Request","SFTP"]}


node_type: n8n-nodes-sendit.sendItTrigger
package_name: n8n-nodes-sendit
display_name: SendIt Trigger
description: Triggers when events occur in SendIt
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kancha_ai
author_github_url: https://github.com/Shree-git/
npm_package_name: n8n-nodes-sendit
npm_version: 1.3.2
community_fetched_at: 2026-07-14T14:40:34.272Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-sendit

  This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com), an AI-native multi-platform social publishing API.

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

  ## Release Notes (v1.3.2)

  `1.3.2` is an n8n verification follow-up release:

  - **n8n verification readiness**: Added GitHub Actions provenance publishing support for npm releases
  - **n8n review fixes**: Uses `NodeConnectionTypes.Main`, removes unused request defaults, adds a credential icon, and returns `NodeOperationError` for JSON object validation
  - **Cloud-safe media upload**: Removed host file path reads; media uploads now use n8n binary data only
  - **Standalone package fix**: Removed package imports from the SendIt server codebase
  - **Refactored architecture**: Monolithic 2,842-line node split into handler-per-resource dispatch map (23 handler modules)
  - **New resources**: Dead Letter Queue, Audit Log, Conversions
  - **Expanded resources**: Brand Voice (get/update/delete), Webhooks (list/get/update), AI (reply suggestions, mention summary, feedback)
  - **Multi-event triggers**: Trigger node now supports subscribing to multiple events at once
  - **Pagination**: Added limit/offset to account, campaign, approvals, and brand voice list operations
  - **Quick fixes**: Credential test uses `/capabilities` (lighter, scope-free), removed dead `gulp` dependency, fixed ESLint 9 lint script, scoped `requestTimeoutMs` to advanced resource, added missing operation descriptions, narrowed type casts

  ## Installation

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

  ```bash
  npm install n8n-nodes-sendit
  ```

  ## Quick Start

  ### 1. Get your API key

  Sign in to [SendIt](https://sendit.infiniteappsai.com), go to **Dashboard > API Keys > Create New Key**, and copy the key (format: `sk_live_...`).

  ### 2. Add credentials in n8n

  Go to **Credentials > Add Credential**, search for **SendIt API**, paste your key, and save. n8n tests the connection automatically.

  ### 3. Publish your first post

  Add a **SendIt** node to a workflow, select **Post > Publish**, pick your target platforms, enter text, and execute. That's it.

  ### 4. Set up a trigger

  Add a **SendIt Trigger** node as the first node in a new workflow. Select events to listen for (e.g., Post Published, Post Failed). Activate the workflow and n8n registers a webhook with SendIt automatically.

  ### 5. Example: AI social publishing pipeline

  ```
  [Google Sheets] → [SendIt: AI > Generate Content] → [SendIt: Post > Publish] → [SendIt Trigger: post.published]
  ```

  Read content ideas from a spreadsheet, generate AI copy, publish to multiple platforms, and get notified on success.

  ## Node Coverage (v1.3.2)

  ### Trigger

  `SendIt Trigger` supports catalog events with multi-select plus custom override:

  - Post lifecycle: `post.published`, `post.scheduled`, `post.failed`, `post.deleted`, `post.dead_lettered`
  - Account lifecycle: `account.connected`, `account.disconnected`, `account.token_expiring`, `account.token_refresh_failed`, `account.reconnect_required`, `account.refresh_recovered`, `account.auth_recovery_completed`
  - Listening: `mention.detected`, `mention.negative_sentiment`
  - Team: `team.member_joined`, `team.member_left`, `team.member_role_changed`, `team.invitation_sent`, `team.invitation_accepted`, `team.invitation_declined`
  - Approvals: `approval.submitted`, `approval.step_approved`, `approval.request_changes`, `approval.rejected`
  - Analytics/Security/Audit: `analytics.anomaly_detected`, `security.api_key_rotation_due`, `audit.critical`

  `Custom Event` lets you subscribe to an event string not listed yet in the static dropdown.

  ### Actions

  | Resource        | Operation(s)                                                                                                                                                                                                                   |
  | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `post`          | `publish`, `publishAi`                                                                                                                                                                                                         |
  | `ai`            | `generate`, `replySuggestions`, `mentionSummary`, `feedback`                                                                                                                                                                   |
  | `media`         | `upload`                                                                                                                                                                                                                       |
  | `scheduledPost` | `create`, `getAll`, `delete`, `trigger`                                                                                                                                                                                        |
  | `account`       | `getAll`                                                                                                                                                                                                                       |
  | `validation`    | `validate`                                                                                                                                                                                                                     |
  | `analytics`     | `getAnalytics`                                                                                                                                                                                                                 |
  | `brandVoice`    | `create`, `list`, `get`, `update`, `delete`                                                                                                                                                                                    |
  | `campaign`      | `plan`, `list`, `schedule`                                                                                                                                                                                                     |
  | `inbox`         | `list`, `reply`, `getThread`, `updateStatus`                                                                                                                                                                                   |
  | `listening`     | `refresh`, `listKeywords`, `createKeyword`, `getKeyword`, `updateKeyword`, `deleteKeyword`, `listMentions`, `getMention`, `markMentionsRead`, `archiveMentions`, `listAlerts`, `markAlertsRead`, `dismissAlerts`, `getSummary` |
  | `aiMedia`       | `create`, `getStatus`                                                                                                                                                                                                          |
  | `meta`          | `getCapabilities`, `getRequirements`, `getPlatformSettingsSchema`, `getBestTimes`, `getWebhookEventsCatalog`, `getWebhookTriggers`                                                                                             |
  | `contentScore`  | `score`                                                                                                                                                                                                                        |
  | `library`       | `list`, `create`, `get`, `update`, `delete`, `listCategories`, `listTags`                                                                                                                                                      |
  | `approvals`     | `list`, `approve`, `reject`                                                                                                                                                                                                    |
  | `bulkSchedule`  | `listImports`, `getImport`, `validateCsv`, `importCsv`, `downloadTemplate`                                                                                                                                                     |
  | `connect`       | `getConnectAction`, `connectToken`, `connectWebhook`                                                                                                                                                                           |
  | `webhooks`      | `list`, `get`, `update`, `testWebhook`                                                                                                                                                                                         |
  | `deadLetter`    | `list`, `requeue`, `discard`                                                                                                                                                                                                   |
  | `auditLog`      | `list`                                                                                                                                                                                                                         |
  | `conversions`   | `track`                                                                                                                                                                                                                        |
  | `advanced`      | `apiRequest`                                                                                                                                                                                                                   |

  ### Global Optional Headers

  The action node supports optional request-scoped headers:

  - `teamId` -> sent as `X-Team-ID`
  - `idempotencyKey` -> sent as `Idempotency-Key`

  ## Supported Platforms

  The node ships with the full SendIt platform catalog option list and should be treated as catalog-driven. Always use capabilities/meta operations (`meta.getCapabilities`) to verify current operator-side availability.

  ## Examples

  ### Connect token credentials (`connect.connectToken`)

  `Credentials JSON` example:

  ```json
  { "apiKey": "your-platform-key", "apiSecret": "your-platform-secret" }
  ```

  ### Create library item (`library.create`)

  - `libraryTitle`: `Weekly Product Update`
  - `libraryText`: `New launch highlights...`
  - `libraryType`: `template`
  - `libraryTargetPlatforms`: `linkedin`, `x`

  ### Approve scheduled post (`approvals.approve`)

  - `approvalPostId`: `sched_abc123`
  - `approvalComment`: `Approved for publishing`

  ### Requeue a failed post (`deadLetter.requeue`)

  - `deadLetterId`: `dl_abc123`

  ### Track a conversion (`conversions.track`)

  - `conversionTrackedLinkId`: `tl_abc123`
  - `conversionType`: `signup`
  - `conversionValue`: `10`

  ### Advanced request (`advanced.apiRequest`)

  - `method`: `GET`
  - `path`: `/api/v2/capabilities`
  - `queryJson`: `{"include_beta":"1"}`
  - `responseMode`: `json`

  Allowed path prefixes:

  - `/api/v1/`
  - `/api/v2/`

  ## API Contract Notes

  - Inbox replies use `text` in `POST /api/v1/inbox/:threadId/reply`.
  - Campaign planning uses `brief` + `platforms` (optional `postCount`, `startDate`, `endDate`).
  - AI media create uses `provider`, `prompt`, `media_type`, and `parameters`.
  - Bulk CSV validation/import expect raw CSV string in `csvContent`.

  ## Developer Note: 1.2.0 Endpoint Map

  ### Typed coverage

  - Meta: `/capabilities`, `/requirements`, `/platforms/schema`, `/best-times`, `/webhooks/events-catalog`, `/webhooks/triggers`
  - Publishing/scheduling: `/publish`, `/publish-ai`, `/schedule`, `/scheduled`, `/scheduled/:id`, `/scheduled/:id/trigger`
  - AI/media: `/ai/generate-content`, `/ai/reply-suggestions`, `/ai/mention-summary`, `/ai/feedback`, `/media/upload`, `/ai-media`, `/ai-media/:id`
  - Quality/validation: `/validate`, `/content-score`, `/analytics`
  - Collaboration: `/inbox`, `/inbox/:threadId`, `/inbox/:threadId/reply`, `/inbox/:threadId/status`
  - Listening: `/listening/*` keyword/mention/alert/summary/refresh routes
  - Library: `/library`, `/library/:id`, `/library/categories`, `/library/tags`
  - Brand Voice: `/brand-voice`, `/brand-voice/:id` (full CRUD)
  - Approvals: `/approvals`, `/approvals/:postId/approve`, `/approvals/:postId/reject`
  - Bulk: `/bulk-schedule`, `/bulk-schedule/:id`, `/bulk-schedule/validate`, `/bulk-schedule/import`, `/bulk-schedule/template`
  - Connect: `/connect/:platform`, `/connect/token`, `/connect/webhook`
  - Webhooks: `/webhooks`, `/webhooks/:id`, `/webhooks/:id/test` (list, get, update, test)
  - Dead Letter: `/dead-letter`, `/dead-letter/:id/requeue`, `/dead-letter/:id/discard`
  - Audit Log: `/audit-log`
  - Conversions: `/conversions`

  ### Advanced coverage (long-tail + v2)

  Use `advanced.apiRequest` for operations outside typed coverage, including v2 dashboard-heavy surfaces.

  ## Credentials

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

  1. Sign in to [SendIt](https://sendit.infiniteappsai.com)
  2. Open your [Dashboard](https://sendit.infiniteappsai.com/dashboard)
  3. Create an API key in **API Keys**
  4. Configure in n8n under **Credentials** -> **SendIt API**

  API key format:

  ```text
  sk_live_<32_character_string>
  ```

  ## Resources

  - [SendIt Documentation](https://sendit.infiniteappsai.com/documentation.html)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The SendIt Trigger node monitors and responds to events from the SendIt API, an AI-native multi-platform social publishing service, allowing workflows to react to post lifecycle, account status, team changes, and other system events.","capabilities":["Subscribe to multiple events simultaneously","Trigger on post lifecycle events (published, scheduled, failed, deleted, dead_lettered)","Trigger on account lifecycle events (connected, disconnected, token expiring, etc.)","Trigger on team member events (joined, left, role changed, invitations)","Trigger on approval workflow events (submitted, approved, rejected, request changes)","Trigger on analytics and security events (anomaly detected, API key rotation due)","Trigger on audit events (critical)","Support for custom events via string override","Automatic webhook registration with SendIt","Support for pagination (limit/offset) on list operations"],"authentication":"API key required (format: sk_live_...)","commonUseCases":["Automated social media publishing with AI-generated content","Real-time notifications for post publishing status","Monitoring account connection health and token expiration","Alerting on team member changes or invitation status","Tracking approval workflow progress"],"limitations":["Trigger node requires manual configuration of event subscriptions","Some advanced resources may require additional setup or permissions","Custom events require manual string entry rather than predefined options"],"relatedNodes":["SendIt Post","SendIt AI","SendIt Media","SendIt Scheduled Post","SendIt Account"]}


node_type: n8n-nodes-sendit.sendIt
package_name: n8n-nodes-sendit
display_name: SendIt
description: Multi-platform social media publishing with AI content generation
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: kancha_ai
author_github_url: https://github.com/Shree-git/
npm_package_name: n8n-nodes-sendit
npm_version: 1.3.2
community_fetched_at: 2026-07-14T14:40:34.274Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "post",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Advanced",
          "value": "advanced"
        },
        {
          "name": "AI",
          "value": "ai"
        },
        {
          "name": "AI Media",
          "value": "aiMedia"
        },
        {
          "name": "Analytics",
          "value": "analytics"
        },
        {
          "name": "Approval",
          "value": "approvals"
        },
        {
          "name": "Audit Log",
          "value": "auditLog"
        },
        {
          "name": "Brand Voice",
          "value": "brandVoice"
        },
        {
          "name": "Bulk Schedule",
          "value": "bulkSchedule"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Connect",
          "value": "connect"
        },
        {
          "name": "Content Score",
          "value": "contentScore"
        },
        {
          "name": "Conversion",
          "value": "conversions"
        },
        {
          "name": "Dead Letter",
          "value": "deadLetter"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Library",
          "value": "library"
        },
        {
          "name": "Listening",
          "value": "listening"
        },
        {
          "name": "Media",
          "value": "media"
        },
        {
          "name": "Meta",
          "value": "meta"
        },
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Scheduled Post",
          "value": "scheduledPost"
        },
        {
          "name": "Validation",
          "value": "validation"
        },
        {
          "name": "Webhook",
          "value": "webhooks"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "publish",
      "options": [
        {
          "name": "Publish",
          "value": "publish",
          "action": "Publish a post",
          "description": "Publish content to social media platforms immediately"
        },
        {
          "name": "Publish with AI",
          "value": "publishAi",
          "action": "Publish with ai generated content",
          "description": "Generate content with AI and publish to platforms"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Feedback",
          "value": "feedback",
          "action": "Submit AI feedback",
          "description": "Rate AI-generated content quality"
        },
        {
          "name": "Generate Content",
          "value": "generate",
          "action": "Generate AI content",
          "description": "Generate platform-specific content from media or prompt"
        },
        {
          "name": "Mention Summary",
          "value": "mentionSummary",
          "action": "Summarize mentions with AI",
          "description": "Generate an AI summary of recent mentions"
        },
        {
          "name": "Reply Suggestions",
          "value": "replySuggestions",
          "action": "Get AI reply suggestions",
          "description": "Get AI-drafted reply suggestions for a mention"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "ai"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload media",
          "description": "Upload media file to get a URL"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "media"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Schedule a post",
          "description": "Schedule a post for future publishing"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Cancel a scheduled post",
          "description": "Cancel a scheduled post"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many scheduled posts",
          "description": "Get many scheduled posts"
        },
        {
          "name": "Trigger Now",
          "value": "trigger",
          "action": "Trigger scheduled post now",
          "description": "Publish a scheduled post immediately"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "scheduledPost"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounts",
          "description": "Get many connected accounts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate content",
          "description": "Validate content against platform rules before publishing (character limits, media requirements)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "validation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAnalytics",
      "options": [
        {
          "name": "Get Analytics",
          "value": "getAnalytics",
          "action": "Get analytics for a platform",
          "description": "Get engagement analytics for posts on a platform"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analytics"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a brand voice",
          "description": "Create a new brand voice profile"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a brand voice",
          "description": "Delete a brand voice profile"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a brand voice",
          "description": "Get a single brand voice profile"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List brand voices",
          "description": "List all brand voice profiles"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a brand voice",
          "description": "Update a brand voice profile"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "brandVoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "plan",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List campaigns",
          "description": "List all campaigns"
        },
        {
          "name": "Plan",
          "value": "plan",
          "action": "Plan a campaign",
          "description": "Create a new campaign with AI-planned posts"
        },
        {
          "name": "Schedule",
          "value": "schedule",
          "action": "Schedule a campaign",
          "description": "Schedule all posts in a campaign"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get Thread",
          "value": "getThread",
          "action": "Get an inbox thread",
          "description": "Get a single inbox thread with messages"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List inbox threads",
          "description": "List inbox threads"
        },
        {
          "name": "Reply",
          "value": "reply",
          "action": "Reply to a thread",
          "description": "Reply to an inbox thread"
        },
        {
          "name": "Update Status",
          "value": "updateStatus",
          "action": "Update inbox thread status",
          "description": "Update thread status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "refresh",
      "options": [
        {
          "name": "Archive Mentions",
          "value": "archiveMentions",
          "action": "Archive listening mentions"
        },
        {
          "name": "Create Keyword",
          "value": "createKeyword",
          "action": "Create listening keyword",
          "description": "Create a listening keyword"
        },
        {
          "name": "Delete Keyword",
          "value": "deleteKeyword",
          "action": "Delete listening keyword",
          "description": "Delete listening keyword"
        },
        {
          "name": "Dismiss Alerts",
          "value": "dismissAlerts",
          "action": "Dismiss listening alerts"
        },
        {
          "name": "Get Keyword",
          "value": "getKeyword",
          "action": "Get listening keyword",
          "description": "Get listening keyword by ID"
        },
        {
          "name": "Get Mention",
          "value": "getMention",
          "action": "Get listening mention",
          "description": "Get mention by ID"
        },
        {
          "name": "Get Summary",
          "value": "getSummary",
          "action": "Get listening summary",
          "description": "Get listening summary"
        },
        {
          "name": "List Alerts",
          "value": "listAlerts",
          "action": "List listening alerts",
          "description": "List listening alerts"
        },
        {
          "name": "List Keywords",
          "value": "listKeywords",
          "action": "List listening keywords",
          "description": "List tracked listening keywords"
        },
        {
          "name": "List Mentions",
          "value": "listMentions",
          "action": "List listening mentions"
        },
        {
          "name": "Mark Alerts Read",
          "value": "markAlertsRead",
          "action": "Mark listening alerts as read",
          "description": "Mark alerts as read"
        },
        {
          "name": "Mark Mentions Read",
          "value": "markMentionsRead",
          "action": "Mark listening mentions as read",
          "description": "Mark mentions as read"
        },
        {
          "name": "Refresh",
          "value": "refresh",
          "action": "Refresh social listening data",
          "description": "Trigger a refresh of social listening data for tracked keywords"
        },
        {
          "name": "Update Keyword",
          "value": "updateKeyword",
          "action": "Update listening keyword",
          "description": "Update listening keyword"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "listening"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create AI media",
          "description": "Generate AI media (image or video)"
        },
        {
          "name": "Get Status",
          "value": "getStatus",
          "action": "Get AI media status",
          "description": "Get the status of an AI media generation job"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "aiMedia"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCapabilities",
      "options": [
        {
          "name": "Get Best Times",
          "value": "getBestTimes",
          "action": "Get best times to post",
          "description": "Get optimal posting times for a platform"
        },
        {
          "name": "Get Capabilities",
          "value": "getCapabilities",
          "action": "Get capabilities",
          "description": "Get supported platform capabilities"
        },
        {
          "name": "Get Platform Settings Schema",
          "value": "getPlatformSettingsSchema",
          "action": "Get platform settings schema",
          "description": "Get the settings schema for a platform"
        },
        {
          "name": "Get Requirements",
          "value": "getRequirements",
          "action": "Get platform requirements",
          "description": "Get content requirements for a platform"
        },
        {
          "name": "Get Webhook Events Catalog",
          "value": "getWebhookEventsCatalog",
          "action": "Get webhook events catalog",
          "description": "Get all available webhook event types"
        },
        {
          "name": "Get Webhook Triggers",
          "value": "getWebhookTriggers",
          "action": "Get webhook triggers",
          "description": "Get configured webhook trigger schemas"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "meta"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "score",
      "options": [
        {
          "name": "Score",
          "value": "score",
          "action": "Score content quality",
          "description": "Score content quality across platforms"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contentScore"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create library item"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete library item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get library item"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List library items"
        },
        {
          "name": "List Categories",
          "value": "listCategories",
          "action": "List library categories"
        },
        {
          "name": "List Tags",
          "value": "listTags",
          "action": "List library tags"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update library item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "library"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Approve",
          "value": "approve",
          "action": "Approve post"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List approvals"
        },
        {
          "name": "Reject",
          "value": "reject",
          "action": "Reject post"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "approvals"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listImports",
      "options": [
        {
          "name": "Download Template",
          "value": "downloadTemplate",
          "action": "Download bulk schedule template"
        },
        {
          "name": "Get Import",
          "value": "getImport",
          "action": "Get bulk import"
        },
        {
          "name": "Import CSV",
          "value": "importCsv",
          "action": "Import CSV payload"
        },
        {
          "name": "List Imports",
          "value": "listImports",
          "action": "List bulk imports"
        },
        {
          "name": "Validate CSV",
          "value": "validateCsv",
          "action": "Validate CSV payload"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bulkSchedule"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getConnectAction",
      "options": [
        {
          "name": "Connect Token",
          "value": "connectToken",
          "action": "Connect with token credentials"
        },
        {
          "name": "Connect Webhook",
          "value": "connectWebhook",
          "action": "Connect with webhook credentials"
        },
        {
          "name": "Get Connect Action",
          "value": "getConnectAction",
          "action": "Get connect action for platform"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connect"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get webhook",
          "description": "Get a webhook by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List webhooks",
          "description": "List all registered webhooks"
        },
        {
          "name": "Test Webhook",
          "value": "testWebhook",
          "action": "Send a test webhook delivery",
          "description": "Send a test delivery to a webhook"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update webhook",
          "description": "Update a webhook subscription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhooks"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Discard",
          "value": "discard",
          "action": "Discard dead letter post",
          "description": "Permanently discard a dead letter post"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List dead letter posts",
          "description": "List posts in the dead letter queue"
        },
        {
          "name": "Requeue",
          "value": "requeue",
          "action": "Requeue dead letter post",
          "description": "Retry a failed post from the dead letter queue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deadLetter"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List audit log entries",
          "description": "List audit log entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "auditLog"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "track",
      "options": [
        {
          "name": "Track",
          "value": "track",
          "action": "Track conversion",
          "description": "Track a conversion event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversions"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "apiRequest",
      "options": [
        {
          "name": "API Request",
          "value": "apiRequest",
          "action": "Run advanced API request",
          "description": "Send a custom API request to any SendIt v1/v2 endpoint"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "advanced"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Publish",
      "value": "publish",
      "action": "Publish a post",
      "description": "Publish content to social media platforms immediately",
      "resource": "post"
    },
    {
      "name": "Publish with AI",
      "value": "publishAi",
      "action": "Publish with ai generated content",
      "description": "Generate content with AI and publish to platforms",
      "resource": "post"
    },
    {
      "name": "Feedback",
      "value": "feedback",
      "action": "Submit AI feedback",
      "description": "Rate AI-generated content quality",
      "resource": "ai"
    },
    {
      "name": "Generate Content",
      "value": "generate",
      "action": "Generate AI content",
      "description": "Generate platform-specific content from media or prompt",
      "resource": "ai"
    },
    {
      "name": "Mention Summary",
      "value": "mentionSummary",
      "action": "Summarize mentions with AI",
      "description": "Generate an AI summary of recent mentions",
      "resource": "ai"
    },
    {
      "name": "Reply Suggestions",
      "value": "replySuggestions",
      "action": "Get AI reply suggestions",
      "description": "Get AI-drafted reply suggestions for a mention",
      "resource": "ai"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload media",
      "description": "Upload media file to get a URL",
      "resource": "media"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Schedule a post",
      "description": "Schedule a post for future publishing",
      "resource": "scheduledPost"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Cancel a scheduled post",
      "description": "Cancel a scheduled post",
      "resource": "scheduledPost"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many scheduled posts",
      "description": "Get many scheduled posts",
      "resource": "scheduledPost"
    },
    {
      "name": "Trigger Now",
      "value": "trigger",
      "action": "Trigger scheduled post now",
      "description": "Publish a scheduled post immediately",
      "resource": "scheduledPost"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounts",
      "description": "Get many connected accounts",
      "resource": "account"
    },
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate content",
      "description": "Validate content against platform rules before publishing (character limits, media requirements)",
      "resource": "validation"
    },
    {
      "name": "Get Analytics",
      "value": "getAnalytics",
      "action": "Get analytics for a platform",
      "description": "Get engagement analytics for posts on a platform",
      "resource": "analytics"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a brand voice",
      "description": "Create a new brand voice profile",
      "resource": "brandVoice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a brand voice",
      "description": "Delete a brand voice profile",
      "resource": "brandVoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a brand voice",
      "description": "Get a single brand voice profile",
      "resource": "brandVoice"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List brand voices",
      "description": "List all brand voice profiles",
      "resource": "brandVoice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a brand voice",
      "description": "Update a brand voice profile",
      "resource": "brandVoice"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List campaigns",
      "description": "List all campaigns",
      "resource": "campaign"
    },
    {
      "name": "Plan",
      "value": "plan",
      "action": "Plan a campaign",
      "description": "Create a new campaign with AI-planned posts",
      "resource": "campaign"
    },
    {
      "name": "Schedule",
      "value": "schedule",
      "action": "Schedule a campaign",
      "description": "Schedule all posts in a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Thread",
      "value": "getThread",
      "action": "Get an inbox thread",
      "description": "Get a single inbox thread with messages",
      "resource": "inbox"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List inbox threads",
      "description": "List inbox threads",
      "resource": "inbox"
    },
    {
      "name": "Reply",
      "value": "reply",
      "action": "Reply to a thread",
      "description": "Reply to an inbox thread",
      "resource": "inbox"
    },
    {
      "name": "Update Status",
      "value": "updateStatus",
      "action": "Update inbox thread status",
      "description": "Update thread status",
      "resource": "inbox"
    },
    {
      "name": "Archive Mentions",
      "value": "archiveMentions",
      "action": "Archive listening mentions",
      "resource": "listening"
    },
    {
      "name": "Create Keyword",
      "value": "createKeyword",
      "action": "Create listening keyword",
      "description": "Create a listening keyword",
      "resource": "listening"
    },
    {
      "name": "Delete Keyword",
      "value": "deleteKeyword",
      "action": "Delete listening keyword",
      "description": "Delete listening keyword",
      "resource": "listening"
    },
    {
      "name": "Dismiss Alerts",
      "value": "dismissAlerts",
      "action": "Dismiss listening alerts",
      "resource": "listening"
    },
    {
      "name": "Get Keyword",
      "value": "getKeyword",
      "action": "Get listening keyword",
      "description": "Get listening keyword by ID",
      "resource": "listening"
    },
    {
      "name": "Get Mention",
      "value": "getMention",
      "action": "Get listening mention",
      "description": "Get mention by ID",
      "resource": "listening"
    },
    {
      "name": "Get Summary",
      "value": "getSummary",
      "action": "Get listening summary",
      "description": "Get listening summary",
      "resource": "listening"
    },
    {
      "name": "List Alerts",
      "value": "listAlerts",
      "action": "List listening alerts",
      "description": "List listening alerts",
      "resource": "listening"
    },
    {
      "name": "List Keywords",
      "value": "listKeywords",
      "action": "List listening keywords",
      "description": "List tracked listening keywords",
      "resource": "listening"
    },
    {
      "name": "List Mentions",
      "value": "listMentions",
      "action": "List listening mentions",
      "resource": "listening"
    },
    {
      "name": "Mark Alerts Read",
      "value": "markAlertsRead",
      "action": "Mark listening alerts as read",
      "description": "Mark alerts as read",
      "resource": "listening"
    },
    {
      "name": "Mark Mentions Read",
      "value": "markMentionsRead",
      "action": "Mark listening mentions as read",
      "description": "Mark mentions as read",
      "resource": "listening"
    },
    {
      "name": "Refresh",
      "value": "refresh",
      "action": "Refresh social listening data",
      "description": "Trigger a refresh of social listening data for tracked keywords",
      "resource": "listening"
    },
    {
      "name": "Update Keyword",
      "value": "updateKeyword",
      "action": "Update listening keyword",
      "description": "Update listening keyword",
      "resource": "listening"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create AI media",
      "description": "Generate AI media (image or video)",
      "resource": "aiMedia"
    },
    {
      "name": "Get Status",
      "value": "getStatus",
      "action": "Get AI media status",
      "description": "Get the status of an AI media generation job",
      "resource": "aiMedia"
    },
    {
      "name": "Get Best Times",
      "value": "getBestTimes",
      "action": "Get best times to post",
      "description": "Get optimal posting times for a platform",
      "resource": "meta"
    },
    {
      "name": "Get Capabilities",
      "value": "getCapabilities",
      "action": "Get capabilities",
      "description": "Get supported platform capabilities",
      "resource": "meta"
    },
    {
      "name": "Get Platform Settings Schema",
      "value": "getPlatformSettingsSchema",
      "action": "Get platform settings schema",
      "description": "Get the settings schema for a platform",
      "resource": "meta"
    },
    {
      "name": "Get Requirements",
      "value": "getRequirements",
      "action": "Get platform requirements",
      "description": "Get content requirements for a platform",
      "resource": "meta"
    },
    {
      "name": "Get Webhook Events Catalog",
      "value": "getWebhookEventsCatalog",
      "action": "Get webhook events catalog",
      "description": "Get all available webhook event types",
      "resource": "meta"
    },
    {
      "name": "Get Webhook Triggers",
      "value": "getWebhookTriggers",
      "action": "Get webhook triggers",
      "description": "Get configured webhook trigger schemas",
      "resource": "meta"
    },
    {
      "name": "Score",
      "value": "score",
      "action": "Score content quality",
      "description": "Score content quality across platforms",
      "resource": "contentScore"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create library item",
      "resource": "library"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete library item",
      "resource": "library"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get library item",
      "resource": "library"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List library items",
      "resource": "library"
    },
    {
      "name": "List Categories",
      "value": "listCategories",
      "action": "List library categories",
      "resource": "library"
    },
    {
      "name": "List Tags",
      "value": "listTags",
      "action": "List library tags",
      "resource": "library"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update library item",
      "resource": "library"
    },
    {
      "name": "Approve",
      "value": "approve",
      "action": "Approve post",
      "resource": "approvals"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List approvals",
      "resource": "approvals"
    },
    {
      "name": "Reject",
      "value": "reject",
      "action": "Reject post",
      "resource": "approvals"
    },
    {
      "name": "Download Template",
      "value": "downloadTemplate",
      "action": "Download bulk schedule template",
      "resource": "bulkSchedule"
    },
    {
      "name": "Get Import",
      "value": "getImport",
      "action": "Get bulk import",
      "resource": "bulkSchedule"
    },
    {
      "name": "Import CSV",
      "value": "importCsv",
      "action": "Import CSV payload",
      "resource": "bulkSchedule"
    },
    {
      "name": "List Imports",
      "value": "listImports",
      "action": "List bulk imports",
      "resource": "bulkSchedule"
    },
    {
      "name": "Validate CSV",
      "value": "validateCsv",
      "action": "Validate CSV payload",
      "resource": "bulkSchedule"
    },
    {
      "name": "Connect Token",
      "value": "connectToken",
      "action": "Connect with token credentials",
      "resource": "connect"
    },
    {
      "name": "Connect Webhook",
      "value": "connectWebhook",
      "action": "Connect with webhook credentials",
      "resource": "connect"
    },
    {
      "name": "Get Connect Action",
      "value": "getConnectAction",
      "action": "Get connect action for platform",
      "resource": "connect"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get webhook",
      "description": "Get a webhook by ID",
      "resource": "webhooks"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List webhooks",
      "description": "List all registered webhooks",
      "resource": "webhooks"
    },
    {
      "name": "Test Webhook",
      "value": "testWebhook",
      "action": "Send a test webhook delivery",
      "description": "Send a test delivery to a webhook",
      "resource": "webhooks"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update webhook",
      "description": "Update a webhook subscription",
      "resource": "webhooks"
    },
    {
      "name": "Discard",
      "value": "discard",
      "action": "Discard dead letter post",
      "description": "Permanently discard a dead letter post",
      "resource": "deadLetter"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List dead letter posts",
      "description": "List posts in the dead letter queue",
      "resource": "deadLetter"
    },
    {
      "name": "Requeue",
      "value": "requeue",
      "action": "Requeue dead letter post",
      "description": "Retry a failed post from the dead letter queue",
      "resource": "deadLetter"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List audit log entries",
      "description": "List audit log entries",
      "resource": "auditLog"
    },
    {
      "name": "Track",
      "value": "track",
      "action": "Track conversion",
      "description": "Track a conversion event",
      "resource": "conversions"
    },
    {
      "name": "API Request",
      "value": "apiRequest",
      "action": "Run advanced API request",
      "description": "Send a custom API request to any SendIt v1/v2 endpoint",
      "resource": "advanced"
    }
  ]

npm_readme:
  # n8n-nodes-sendit

  This is an n8n community node for [SendIt](https://sendit.infiniteappsai.com), an AI-native multi-platform social publishing API.

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

  ## Release Notes (v1.3.2)

  `1.3.2` is an n8n verification follow-up release:

  - **n8n verification readiness**: Added GitHub Actions provenance publishing support for npm releases
  - **n8n review fixes**: Uses `NodeConnectionTypes.Main`, removes unused request defaults, adds a credential icon, and returns `NodeOperationError` for JSON object validation
  - **Cloud-safe media upload**: Removed host file path reads; media uploads now use n8n binary data only
  - **Standalone package fix**: Removed package imports from the SendIt server codebase
  - **Refactored architecture**: Monolithic 2,842-line node split into handler-per-resource dispatch map (23 handler modules)
  - **New resources**: Dead Letter Queue, Audit Log, Conversions
  - **Expanded resources**: Brand Voice (get/update/delete), Webhooks (list/get/update), AI (reply suggestions, mention summary, feedback)
  - **Multi-event triggers**: Trigger node now supports subscribing to multiple events at once
  - **Pagination**: Added limit/offset to account, campaign, approvals, and brand voice list operations
  - **Quick fixes**: Credential test uses `/capabilities` (lighter, scope-free), removed dead `gulp` dependency, fixed ESLint 9 lint script, scoped `requestTimeoutMs` to advanced resource, added missing operation descriptions, narrowed type casts

  ## Installation

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

  ```bash
  npm install n8n-nodes-sendit
  ```

  ## Quick Start

  ### 1. Get your API key

  Sign in to [SendIt](https://sendit.infiniteappsai.com), go to **Dashboard > API Keys > Create New Key**, and copy the key (format: `sk_live_...`).

  ### 2. Add credentials in n8n

  Go to **Credentials > Add Credential**, search for **SendIt API**, paste your key, and save. n8n tests the connection automatically.

  ### 3. Publish your first post

  Add a **SendIt** node to a workflow, select **Post > Publish**, pick your target platforms, enter text, and execute. That's it.

  ### 4. Set up a trigger

  Add a **SendIt Trigger** node as the first node in a new workflow. Select events to listen for (e.g., Post Published, Post Failed). Activate the workflow and n8n registers a webhook with SendIt automatically.

  ### 5. Example: AI social publishing pipeline

  ```
  [Google Sheets] → [SendIt: AI > Generate Content] → [SendIt: Post > Publish] → [SendIt Trigger: post.published]
  ```

  Read content ideas from a spreadsheet, generate AI copy, publish to multiple platforms, and get notified on success.

  ## Node Coverage (v1.3.2)

  ### Trigger

  `SendIt Trigger` supports catalog events with multi-select plus custom override:

  - Post lifecycle: `post.published`, `post.scheduled`, `post.failed`, `post.deleted`, `post.dead_lettered`
  - Account lifecycle: `account.connected`, `account.disconnected`, `account.token_expiring`, `account.token_refresh_failed`, `account.reconnect_required`, `account.refresh_recovered`, `account.auth_recovery_completed`
  - Listening: `mention.detected`, `mention.negative_sentiment`
  - Team: `team.member_joined`, `team.member_left`, `team.member_role_changed`, `team.invitation_sent`, `team.invitation_accepted`, `team.invitation_declined`
  - Approvals: `approval.submitted`, `approval.step_approved`, `approval.request_changes`, `approval.rejected`
  - Analytics/Security/Audit: `analytics.anomaly_detected`, `security.api_key_rotation_due`, `audit.critical`

  `Custom Event` lets you subscribe to an event string not listed yet in the static dropdown.

  ### Actions

  | Resource        | Operation(s)                                                                                                                                                                                                                   |
  | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `post`          | `publish`, `publishAi`                                                                                                                                                                                                         |
  | `ai`            | `generate`, `replySuggestions`, `mentionSummary`, `feedback`                                                                                                                                                                   |
  | `media`         | `upload`                                                                                                                                                                                                                       |
  | `scheduledPost` | `create`, `getAll`, `delete`, `trigger`                                                                                                                                                                                        |
  | `account`       | `getAll`                                                                                                                                                                                                                       |
  | `validation`    | `validate`                                                                                                                                                                                                                     |
  | `analytics`     | `getAnalytics`                                                                                                                                                                                                                 |
  | `brandVoice`    | `create`, `list`, `get`, `update`, `delete`                                                                                                                                                                                    |
  | `campaign`      | `plan`, `list`, `schedule`                                                                                                                                                                                                     |
  | `inbox`         | `list`, `reply`, `getThread`, `updateStatus`                                                                                                                                                                                   |
  | `listening`     | `refresh`, `listKeywords`, `createKeyword`, `getKeyword`, `updateKeyword`, `deleteKeyword`, `listMentions`, `getMention`, `markMentionsRead`, `archiveMentions`, `listAlerts`, `markAlertsRead`, `dismissAlerts`, `getSummary` |
  | `aiMedia`       | `create`, `getStatus`                                                                                                                                                                                                          |
  | `meta`          | `getCapabilities`, `getRequirements`, `getPlatformSettingsSchema`, `getBestTimes`, `getWebhookEventsCatalog`, `getWebhookTriggers`                                                                                             |
  | `contentScore`  | `score`                                                                                                                                                                                                                        |
  | `library`       | `list`, `create`, `get`, `update`, `delete`, `listCategories`, `listTags`                                                                                                                                                      |
  | `approvals`     | `list`, `approve`, `reject`                                                                                                                                                                                                    |
  | `bulkSchedule`  | `listImports`, `getImport`, `validateCsv`, `importCsv`, `downloadTemplate`                                                                                                                                                     |
  | `connect`       | `getConnectAction`, `connectToken`, `connectWebhook`                                                                                                                                                                           |
  | `webhooks`      | `list`, `get`, `update`, `testWebhook`                                                                                                                                                                                         |
  | `deadLetter`    | `list`, `requeue`, `discard`                                                                                                                                                                                                   |
  | `auditLog`      | `list`                                                                                                                                                                                                                         |
  | `conversions`   | `track`                                                                                                                                                                                                                        |
  | `advanced`      | `apiRequest`                                                                                                                                                                                                                   |

  ### Global Optional Headers

  The action node supports optional request-scoped headers:

  - `teamId` -> sent as `X-Team-ID`
  - `idempotencyKey` -> sent as `Idempotency-Key`

  ## Supported Platforms

  The node ships with the full SendIt platform catalog option list and should be treated as catalog-driven. Always use capabilities/meta operations (`meta.getCapabilities`) to verify current operator-side availability.

  ## Examples

  ### Connect token credentials (`connect.connectToken`)

  `Credentials JSON` example:

  ```json
  { "apiKey": "your-platform-key", "apiSecret": "your-platform-secret" }
  ```

  ### Create library item (`library.create`)

  - `libraryTitle`: `Weekly Product Update`
  - `libraryText`: `New launch highlights...`
  - `libraryType`: `template`
  - `libraryTargetPlatforms`: `linkedin`, `x`

  ### Approve scheduled post (`approvals.approve`)

  - `approvalPostId`: `sched_abc123`
  - `approvalComment`: `Approved for publishing`

  ### Requeue a failed post (`deadLetter.requeue`)

  - `deadLetterId`: `dl_abc123`

  ### Track a conversion (`conversions.track`)

  - `conversionTrackedLinkId`: `tl_abc123`
  - `conversionType`: `signup`
  - `conversionValue`: `10`

  ### Advanced request (`advanced.apiRequest`)

  - `method`: `GET`
  - `path`: `/api/v2/capabilities`
  - `queryJson`: `{"include_beta":"1"}`
  - `responseMode`: `json`

  Allowed path prefixes:

  - `/api/v1/`
  - `/api/v2/`

  ## API Contract Notes

  - Inbox replies use `text` in `POST /api/v1/inbox/:threadId/reply`.
  - Campaign planning uses `brief` + `platforms` (optional `postCount`, `startDate`, `endDate`).
  - AI media create uses `provider`, `prompt`, `media_type`, and `parameters`.
  - Bulk CSV validation/import expect raw CSV string in `csvContent`.

  ## Developer Note: 1.2.0 Endpoint Map

  ### Typed coverage

  - Meta: `/capabilities`, `/requirements`, `/platforms/schema`, `/best-times`, `/webhooks/events-catalog`, `/webhooks/triggers`
  - Publishing/scheduling: `/publish`, `/publish-ai`, `/schedule`, `/scheduled`, `/scheduled/:id`, `/scheduled/:id/trigger`
  - AI/media: `/ai/generate-content`, `/ai/reply-suggestions`, `/ai/mention-summary`, `/ai/feedback`, `/media/upload`, `/ai-media`, `/ai-media/:id`
  - Quality/validation: `/validate`, `/content-score`, `/analytics`
  - Collaboration: `/inbox`, `/inbox/:threadId`, `/inbox/:threadId/reply`, `/inbox/:threadId/status`
  - Listening: `/listening/*` keyword/mention/alert/summary/refresh routes
  - Library: `/library`, `/library/:id`, `/library/categories`, `/library/tags`
  - Brand Voice: `/brand-voice`, `/brand-voice/:id` (full CRUD)
  - Approvals: `/approvals`, `/approvals/:postId/approve`, `/approvals/:postId/reject`
  - Bulk: `/bulk-schedule`, `/bulk-schedule/:id`, `/bulk-schedule/validate`, `/bulk-schedule/import`, `/bulk-schedule/template`
  - Connect: `/connect/:platform`, `/connect/token`, `/connect/webhook`
  - Webhooks: `/webhooks`, `/webhooks/:id`, `/webhooks/:id/test` (list, get, update, test)
  - Dead Letter: `/dead-letter`, `/dead-letter/:id/requeue`, `/dead-letter/:id/discard`
  - Audit Log: `/audit-log`
  - Conversions: `/conversions`

  ### Advanced coverage (long-tail + v2)

  Use `advanced.apiRequest` for operations outside typed coverage, including v2 dashboard-heavy surfaces.

  ## Credentials

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

  1. Sign in to [SendIt](https://sendit.infiniteappsai.com)
  2. Open your [Dashboard](https://sendit.infiniteappsai.com/dashboard)
  3. Create an API key in **API Keys**
  4. Configure in n8n under **Credentials** -> **SendIt API**

  API key format:

  ```text
  sk_live_<32_character_string>
  ```

  ## Resources

  - [SendIt Documentation](https://sendit.infiniteappsai.com/documentation.html)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"A community n8n node that enables multi-platform social media publishing with integrated AI content generation capabilities.","capabilities":["Publish posts to multiple social platforms","Generate AI content for social media","Schedule posts","Upload media files","Monitor social media events via webhooks","Manage brand voice settings","Access analytics and audit logs","Handle approval workflows","Support for dead letter queues and conversions tracking"],"authentication":"API key required (format: sk_live_...)","commonUseCases":["Automated social media content scheduling","AI-driven post generation from external data sources","Multi-platform content distribution","Social media monitoring and alerting","Brand voice management across platforms"],"limitations":["Community node (not official n8n node)","Custom event subscriptions require manual configuration outside static dropdowns","Some advanced features may require additional setup or API permissions"],"relatedNodes":["n8n Trigger Node","n8n Webhook Node","n8n HTTP Request Node","n8n Code Node"]}


node_type: @truelist/n8n-nodes-truelist.truelist
package_name: @truelist/n8n-nodes-truelist
display_name: Truelist
description: Validate email addresses with Truelist
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ayushtruelist
author_github_url: https://github.com/Truelist-Labs/truelist-n8n.git
npm_package_name: @truelist/n8n-nodes-truelist
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.276Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "email",
      "options": [
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Batch",
          "value": "batch"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "validate",
      "options": [
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate an email",
          "description": "Validate a single email address"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List emails",
          "description": "List previously validated email addresses"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a batch",
          "description": "Create a new batch of emails to validate"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a batch",
          "description": "Delete a batch"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download batch results",
          "description": "Download batch results as CSV"
        },
        {
          "name": "Estimate",
          "value": "estimate",
          "action": "Estimate a batch",
          "description": "Estimate processing time and credit cost for a batch"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a batch",
          "description": "Get details of a batch"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List batches",
          "description": "List all batches"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "batch"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate an email",
      "description": "Validate a single email address",
      "resource": "email"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List emails",
      "description": "List previously validated email addresses",
      "resource": "email"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a batch",
      "description": "Create a new batch of emails to validate",
      "resource": "batch"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a batch",
      "description": "Delete a batch",
      "resource": "batch"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download batch results",
      "description": "Download batch results as CSV",
      "resource": "batch"
    },
    {
      "name": "Estimate",
      "value": "estimate",
      "action": "Estimate a batch",
      "description": "Estimate processing time and credit cost for a batch",
      "resource": "batch"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a batch",
      "description": "Get details of a batch",
      "resource": "batch"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List batches",
      "description": "List all batches",
      "resource": "batch"
    }
  ]

npm_readme:
  # truelist-n8n

  [![npm version](https://img.shields.io/npm/v/truelist-n8n?style=flat-square)](https://www.npmjs.com/package/truelist-n8n)
  [![Free tier](https://img.shields.io/badge/free_plan-100_validations-4A7C59?style=flat-square)](https://truelist.io/pricing)

  n8n community node for [Truelist](https://truelist.io) email validation. Validate email addresses directly from your n8n workflows.

  > **Start free** — 100 validations + 10 enhanced credits, no credit card required.
  > [Get your API key →](https://app.truelist.io/signup?utm_source=github&utm_medium=readme&utm_campaign=free-plan&utm_content=truelist-n8n)

  ## Installation

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

  ```
  truelist-n8n
  ```

  ## Configuration

  1. Add a **Truelist API** credential in n8n
  2. Paste your API key (get one at [app.truelist.io](https://app.truelist.io/signup?utm_source=github&utm_medium=readme&utm_campaign=free-plan&utm_content=truelist-n8n))
  3. Use the **Truelist** node in your workflows

  ---

  ## Operations

  ### Email Resource

  #### Validate

  Validate a single email address synchronously and get an immediate result.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Email Address | Yes | The email address to validate |

  **Output:** A single object with the validation result, including `email_state` (`ok`, `invalid`, `risky`, `unknown`) and `email_sub_state`.

  ---

  #### List

  List previously validated email addresses stored in your Truelist account.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Return All | No | Return all records (ignores Limit) |
  | Limit | No | Max results to return (1–100, default 50) |
  | Filters → Email State | No | Filter by: All, OK, Invalid, Risky, Unknown |
  | Filters → Email Sub-State | No | Filter by sub-state (disposable, role, no mailbox, etc.) |
  | Filters → Email Address | No | Search by a specific email address |
  | Filters → Batch ID | No | Filter to emails from a specific batch |

  ---

  ### Batch Resource

  #### Create

  Upload a list of emails for bulk validation.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Emails | Yes | Comma-separated list, newline-separated, or a JSON array via expression |
  | Filename | No | Label for this batch (default: `data.csv`) |
  | Validation Strategy | No | `fast`, `accurate` (default), or `enhanced` — see [Validation Strategies](#validation-strategies) |
  | Webhook URL | No | URL to call when the batch finishes processing |

  **Output:** Batch object including `id`, `status`, and progress fields.

  > **Note:** Batches start automatically within a few seconds — no separate "start" step is needed.

  ---

  #### Get

  Fetch the current status and details of a batch.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Batch ID | Yes | The UUID of the batch |

  ---

  #### List

  List all batches on your account.

  ---

  #### Estimate

  Estimate the credit cost and processing time for a list of emails before creating a batch. Useful for checking you have enough credits before kicking off a large run.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Emails | Yes | Comma-separated list or JSON array |

  ---

  #### Download

  Download validated batch results as a CSV file. The output item includes the CSV as binary data attached under the `data` key.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Batch ID | Yes | The UUID of the batch |
  | Result Type | Yes | Which result set to download (see below) |

  **Result types:**

  | Value | Description |
  |-------|-------------|
  | Annotated | All emails with validation results appended as extra columns |
  | Safest Bet | Only emails confirmed as valid — most conservative send list |
  | Highest Reach | Valid emails plus accept-all domains — most inclusive send list |
  | Only Invalid | Only emails that failed validation |

  ---

  #### Delete

  Permanently delete a batch and its results.

  **Inputs:**

  | Field | Required | Description |
  |-------|----------|-------------|
  | Batch ID | Yes | The UUID of the batch to delete |

  ---

  ## Validation Results

  | State | Sub-state | Meaning |
  |-------|-----------|---------|
  | `ok` | `email_ok` | Valid, deliverable email address |
  | `ok` | `accept_all` | Domain accepts all mail — individual deliverability unverified |
  | `risky` | `is_disposable` | Temporary or disposable email address |
  | `risky` | `is_role` | Role address (e.g. `info@`, `support@`, `admin@`) |
  | `invalid` | `failed_syntax_check` | Invalid email format |
  | `invalid` | `failed_mx_check` | Domain has no valid mail server |
  | `invalid` | `failed_smtp_check` | SMTP server rejected the address |
  | `invalid` | `failed_no_mailbox` | Mailbox does not exist |
  | `invalid` | `failed_greylisted` | Server greylisted the check; could not confirm |
  | `unknown` | — | Validity could not be determined |

  ---

  ## Validation Strategies

  | Strategy | Description | Cost |
  |----------|-------------|------|
  | Fast | SMTP check only — fastest option | 1 credit per email |
  | Accurate *(default)* | SMTP check with improved accuracy | 1 credit per email |
  | Enhanced | SMTP + HaveIBeenPwned lookup + browser-based validation | 1 standard + 1 enhanced credit |

  ---

  ## Example Workflows

  ### Validate a single email and branch on result

  1. Add a **Truelist** node
  2. Set **Resource** → `Email`, **Operation** → `Validate`
  3. Set **Email Address** to `{{ $json.email }}`
  4. Add an **IF** node after it: check `{{ $json.email_state }} === "ok"`

  ### Bulk validate a list and download clean results

  1. **Truelist** → Resource: `Batch`, Operation: `Estimate` — confirm you have enough credits
  2. **Truelist** → Resource: `Batch`, Operation: `Create` — pass your email list
  3. **Loop / Wait** until `status` is `completed` (poll with **Truelist** → `Batch: Get`)
  4. **Truelist** → Resource: `Batch`, Operation: `Download`, Result Type: `Safest Bet`
  5. Write the binary CSV to disk or pass it downstream

  ---

  ## Resources

  - [Truelist website](https://truelist.io)
  - [API documentation](https://apidocs.truelist.io)
  - [Verification result codes](https://truelist.io/docs/usage/result-codes)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)
  - [Support](mailto:hello@truelist.io)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Validates email addresses using Truelist's API, supporting single email checks, bulk batch processing, and result retrieval.","capabilities":["Validate single email addresses synchronously","List previously validated emails with filters","Create and manage bulk validation batches","Estimate credit costs before bulk processing","Download batch results in annotated, safest bet, highest reach, or invalid-only formats","Delete completed batches","Support multiple validation strategies (Fast, Accurate, Enhanced)","Return detailed validation states and sub-states"],"authentication":"API key required","commonUseCases":["Cleaning email lists before sending marketing campaigns","Validating user sign-up emails for data quality","Removing disposable or role-based email addresses","Bulk email verification with credit cost estimation"],"limitations":["Free tier limited to 100 validations per month","Enhanced strategy requires additional credits beyond the free tier","Batch processing relies on asynchronous webhook callbacks for completion status"],"relatedNodes":["n8n IF node","n8n Set node","n8n Binary node","n8n HTTP Request node"]}


node_type: n8n-nodes-gravityzone.gravityZone
package_name: n8n-nodes-gravityzone
display_name: Bitdefender GravityZone
description: Consume the Bitdefender GravityZone API
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: dainartz
author_github_url: https://github.com/DainArtz/
npm_package_name: n8n-nodes-gravityzone
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.277Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  # n8n-nodes-gravityzone

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

  Bitdefender GravityZone is a business cybersecurity platform for centrally managing protection across endpoints, cloud workloads, networks, identities, and productivity applications. It combines layered prevention, detection, response, hardening, machine learning, behavioral analysis, and optional EDR / XDR / MDR capabilities to help organizations stop and investigate threats.

  <p align="center">
    <img src="docs/assets/node.png" alt="Node" />
  </p>

  <p align="center">
    <img src="docs/assets/ui.png" alt="UI" />
  </p>

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

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

  ## Installation

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

  ## Operations

  The node supports the following actions grouped by their respective category:

  ### Accounts

  - Configure Notifications Settings
  - Create
  - Delete
  - Get Details
  - Get List
  - Get Notifications Settings
  - Update

  ### Companies

  - Get Details
  - Update Details

  ### General

  - Generate Email Verification Code
  - Get API Key Details

  ### Incidents

  - Add to Blocklist
  - Change Incident Status
  - Create Custom Rule
  - Create Isolate Endpoint Task
  - Create Response Action
  - Create Restore Endpoint From Isolation Task
  - Delete Custom Rule
  - Get Blocklist Items
  - Get Custom Rules List
  - Get Response Action Status
  - Get Similar Emails
  - Remove From Blocklist
  - Update Custom Rule
  - Update Incident Note

  ### Integrations

  - Configure Amazon EC2 Integration Using Cross-Account Role
  - Create Integration
  - Delete Integration
  - Disable Amazon EC2 Integration
  - Generate Amazon EC2 External ID for Cross-Account Role
  - Get Amazon EC2 External ID for Cross-Account Role
  - Get Configured Integrations
  - Get Hourly Usage for Amazon EC2 Instances
  - Get Integration Details
  - Manage Integration
  - Update Integration

  ### Licensing

  - Add Product Key
  - Get License Info
  - Get Monthly Usage
  - Get Monthly Usage Per Product Type
  - Remove Product Key
  - Set License Key

  ### Maintenance Windows

  - Assign Maintenance Windows
  - Create Patch Management Maintenance Window
  - Delete Maintenance Window
  - Get Maintenance Window Details
  - Get Maintenance Windows List
  - Get Manually Approved Patches
  - Unassign Maintenance Windows
  - Update Patch Management Maintenance Window

  ### Network

  - Add Integrators
  - Assign Policy
  - Create Custom Group
  - Create Reconfigure Client Task
  - Create Scan Task
  - Create Scan Task by MAC
  - Create Submit to Sandbox Analyzer Task
  - Delete Custom Group
  - Delete Endpoint
  - Delete Task
  - Get Custom Groups List
  - Get Endpoints List
  - Get Integrators
  - Get Managed Endpoint Details
  - Get Network Inventory Items
  - Get Scan Tasks List
  - Get Task Status
  - Kill Process
  - Move Custom Group
  - Move Endpoints
  - Remove Integrators
  - Run Live Search Query
  - Set Endpoint Label

  ### Packages

  - Create Package
  - Delete Package
  - Get Installation Links
  - Get Package Details
  - Get Packages List
  - Update Package

  ### Patch Management

  - Get Installed Patches
  - Get Missing Patches

  ### PHASR

  - Apply Recommendations
  - Edit Monitored Rules Access
  - Get All Company Identities
  - Get All Company Resources
  - Get Monitored Rule Data
  - Get Monitored Rules
  - Get PHASR Recommendations
  - Get Recommendation Profiles
  - Take Request Access Action

  ### Policies

  - Get Policies List
  - Get Policy Details
  - Set Policy Modules State

  ### Push

  - Get Push Event Settings
  - Get Push Event Stats
  - Reset Push Event Stats
  - Send Test Push Event
  - Set Push Event Settings

  ### Quarantine

  - Create Add File to Quarantine Task
  - Create Empty Quarantine Task
  - Create Release Quarantine Exchange Item Task
  - Create Remove Quarantine Item Task
  - Create Restore Quarantine Exchange Item Task
  - Create Restore Quarantine Item Task
  - Get Quarantine Items List

  ### Reports

  - Create Report
  - Delete Report
  - Get Download Links
  - Get Reports List

  ## Credentials

  In order to use this node, you must authenticate with the Bitdefender GravityZone platform. For this step to work, you must already have a valid account. Follow these steps:

  1. In GravityZone, navigate to **User Menu** > **My Account**. You should now be on the **Account details** page.
  2. Scroll down to the **API keys** section and add a new API key.
  3. Check the action categories of interest. Actions from unselected categories will be denied.
  4. Save the newly generated API key, as you will not be able to see it again, as well as the access URL placed right above the **API keys** section.
  5. Create new GravityZone credentials in n8n with those two strings.

  ## Compatibility

  Compatible with n8n >= 2.x.  
  Tested with n8n 2.19.5. 
  No known incompatibilities.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [GravityZone public API documentation](https://www.bitdefender.com/business/support/en/77209-125277-public-api.html)

ai_documentation_summary:
  {"purpose":"This n8n community node enables workflow automation by connecting to the Bitdefender GravityZone API to manage cybersecurity operations across endpoints, cloud workloads, and network security.","capabilities":["Manage user accounts (create, delete, update, get details)","Handle incidents (blocklist, status changes, custom rules, response actions)","Configure integrations (Amazon EC2, cross-account roles)","Manage licensing (product keys, license info, monthly usage)","Control maintenance windows and patch management","Network operations (endpoints, groups, scans, sandbox tasks, process killing)","Package management (create, delete, update, installation links)","PHASR operations (recommendations, monitored rules, identity management)","Policy management (list, details, module states)","Push event handling (settings, stats, test events)"],"authentication":"API key required (must be generated in Bitdefender GravityZone User Menu > My Account > API keys section)","commonUseCases":["Automating threat response workflows","Managing endpoint security policies","Handling incident lifecycle management","Monitoring and reporting on security metrics","Automating patch management and maintenance windows"],"limitations":["Actions from unselected API key categories will be denied","API key must be manually generated and configured in n8n","Community node (not official n8n package)"],"relatedNodes":["Bitdefender GravityZone API","n8n community nodes","Security automation nodes"]}


node_type: n8n-nodes-teckel-ipfs.teckelIpfs
package_name: n8n-nodes-teckel-ipfs
display_name: teckel IPFS
description: Store, retrieve and manage files on IPFS via the teckel platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: teckel-io
author_github_url: https://github.com/teckel-io/n8n-nodes.git
npm_package_name: n8n-nodes-teckel-ipfs
npm_version: 1.0.10
community_fetched_at: 2026-07-14T14:40:34.278Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "listFiles",
      "options": [
        {
          "name": "List Files",
          "value": "listFiles",
          "action": "List files",
          "description": "List IPFS files for the account, with optional filters"
        },
        {
          "name": "Pin by CID",
          "value": "pinByCid",
          "action": "Pin by CID",
          "description": "Pin a single file by its CID"
        },
        {
          "name": "Pin Files",
          "value": "pinFiles",
          "action": "Pin files",
          "description": "Pin IPFS files matching filters"
        },
        {
          "name": "Publish to Web",
          "value": "publishToWeb",
          "action": "Publish to web",
          "description": "Publish an IPFS file to the teckel web server and return a public URL"
        },
        {
          "name": "Remove by CID",
          "value": "removeByCid",
          "action": "Remove by CID",
          "description": "Unpin and remove a single file by its CID"
        },
        {
          "name": "Remove Files",
          "value": "removeFiles",
          "action": "Remove files",
          "description": "Unpin and remove IPFS files matching filters"
        },
        {
          "name": "Retrieve File",
          "value": "retrieveFile",
          "action": "Retrieve file",
          "description": "Retrieve a file from IPFS as binary data"
        },
        {
          "name": "Unpin Files",
          "value": "unpinFiles",
          "action": "Unpin files",
          "description": "Unpin IPFS files matching filters"
        },
        {
          "name": "Upload Base64",
          "value": "uploadBase64",
          "action": "Upload base64",
          "description": "Upload a base64-encoded file to IPFS"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload file",
          "description": "Upload a binary file to IPFS"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List Files",
      "value": "listFiles",
      "action": "List files",
      "description": "List IPFS files for the account, with optional filters"
    },
    {
      "name": "Pin by CID",
      "value": "pinByCid",
      "action": "Pin by CID",
      "description": "Pin a single file by its CID"
    },
    {
      "name": "Pin Files",
      "value": "pinFiles",
      "action": "Pin files",
      "description": "Pin IPFS files matching filters"
    },
    {
      "name": "Publish to Web",
      "value": "publishToWeb",
      "action": "Publish to web",
      "description": "Publish an IPFS file to the teckel web server and return a public URL"
    },
    {
      "name": "Remove by CID",
      "value": "removeByCid",
      "action": "Remove by CID",
      "description": "Unpin and remove a single file by its CID"
    },
    {
      "name": "Remove Files",
      "value": "removeFiles",
      "action": "Remove files",
      "description": "Unpin and remove IPFS files matching filters"
    },
    {
      "name": "Retrieve File",
      "value": "retrieveFile",
      "action": "Retrieve file",
      "description": "Retrieve a file from IPFS as binary data"
    },
    {
      "name": "Unpin Files",
      "value": "unpinFiles",
      "action": "Unpin files",
      "description": "Unpin IPFS files matching filters"
    },
    {
      "name": "Upload Base64",
      "value": "uploadBase64",
      "action": "Upload base64",
      "description": "Upload a base64-encoded file to IPFS"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload file",
      "description": "Upload a binary file to IPFS"
    }
  ]

npm_readme:
  # n8n-nodes-teckel-ipfs

  An [n8n](https://n8n.io) community node for the [teckel](https://teckel.io) IPFS platform. Store, retrieve, pin and unpin encrypted files on IPFS via teckel's apigateway.

  ## Installation

  In your self-hosted n8n instance:

  1. **Settings** → **Community Nodes** → **Install**
  2. Enter `n8n-nodes-teckel-ipfs`
  3. Confirm and install

  ## Credentials

  A **teckel IPFS API** credential is required:

  | Field | Description |
  |-------|-------------|
  | API Key | Your teckel API key |
  | Base URL | teckel API gateway URL (default: `https://mcp-servers.bh.tkllabs.io:9780`) |

  ### How to obtain your teckel API Key

  #### First, download and install the teckel App.

  [<img width="120" height="40" alt="Download on the App Store" src="https://github.com/user-attachments/assets/ecbe6c7a-02c9-4212-b2ab-58dd90c91bca" />](https://apps.apple.com/gb/app/teckel/id6746805799)
  [<img width="135" height="45" alt="Get it on Google Play" src="https://github.com/user-attachments/assets/9f9b8443-d759-41c1-9fce-399dc690b439" />](https://play.google.com/store/apps/details?id=io.teckel.app)

  #### Next, generate an API key using the teckel App.

  1. Navigate to the Accounts page by tapping on the wallet icon in the upper right corner of the App home screen. Access the API Key Manager for the created or imported Ethereum Account by tapping **Manage API Key** on the Accounts page.
  2. Enter the API key in the n8n credentials edit box.

  ## Operations

  | Operation | Description |
  |-----------|-------------|
  | List Files | List files stored on IPFS by the authenticated agent (filters: pinned/unpinned, encrypted/unencrypted) |
  | Pin Files | Pin selected files |
  | Pin by CID | Pin a file by its CID |
  | Publish to Web | Publish a file to the public web gateway |
  | Remove by CID | Remove a file by its CID |
  | Remove Files | Remove selected files |
  | Retrieve File | Download a file from IPFS (returns binary) |
  | Unpin Files | Unpin selected files |
  | Upload Base64 | Upload a base64-encoded payload |
  | Upload File | Upload a binary file from a previous node |

  Upload operations support optional client-side encryption via the **Encrypt on IPFS** toggle and an optional human-readable nickname stored alongside the CID.

  ## Resources

  - [teckel platform](https://teckel.io)
  - [GitHub repo](https://github.com/teckel-io/n8n-nodes)
  - [Issues](https://github.com/teckel-io/n8n-nodes/issues)

  ## License

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

ai_documentation_summary:
  {"purpose":"Stores, retrieves, and manages encrypted files on IPFS via the teckel platform, supporting pinning, unpinning, and publishing to the public web gateway.","capabilities":["List files by pinned/unpinned status and encrypted/unencrypted status","Pin files to IPFS","Pin files by CID","Publish files to the public web gateway","Remove files by CID","Remove selected files","Retrieve/download files (returns binary)","Unpin selected files","Upload base64-encoded payloads","Upload binary files from previous nodes"],"authentication":"API Key required (teckel IPFS API key via credentials)","commonUseCases":["Securely storing and retrieving files on IPFS","Managing file persistence with pinning/unpinning","Publishing encrypted files to the public web","Automated file archival and retrieval in n8n workflows"],"limitations":["Requires teckel App installation to generate API keys","API key must be managed through teckel's wallet/account system","Default base URL may require configuration for custom deployments"],"relatedNodes":["n8n-nodes-ipfs","n8n-nodes-binary-file","n8n-nodes-credentials"]}


node_type: n8n-nodes-pipelex.pipelex
package_name: n8n-nodes-pipelex
display_name: Pipelex
description: Execute Pipelex pipelines
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: pipelex-admin
author_github_url: https://github.com/Pipelex/
npm_package_name: n8n-nodes-pipelex
npm_version: 0.1.0
community_fetched_at: 2026-07-14T14:40:34.279Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "startAndPoll",
      "options": [
        {
          "name": "Start & Wait for Result",
          "value": "startAndPoll",
          "action": "Start a pipeline and wait for its result",
          "description": "Start a durable run and poll internally until it finishes — paste your method + inputs, run, get the result. If Max Wait is exceeded, returns the pipeline_run_id to fetch later."
        },
        {
          "name": "Start Pipeline",
          "value": "start",
          "action": "Start a pipeline",
          "description": "Start a durable run and return immediately with its pipeline_run_id (no waiting) — collect the result later with Poll & Get Result or Get Run Result, even from another workflow"
        },
        {
          "name": "Poll & Get Result",
          "value": "poll",
          "action": "Poll a run until its result is ready",
          "description": "Wait for an already-started run by its pipeline_run_id: poll until it finishes or Max Wait is exceeded (then returns a \"still running\" output, not an error)"
        },
        {
          "name": "Get Run Result",
          "value": "getResult",
          "action": "Get a run result",
          "description": "Fetch a run result once by its pipeline_run_id (no polling) — returns status RUNNING while still in flight, the result when completed"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Start & Wait for Result",
      "value": "startAndPoll",
      "action": "Start a pipeline and wait for its result",
      "description": "Start a durable run and poll internally until it finishes — paste your method + inputs, run, get the result. If Max Wait is exceeded, returns the pipeline_run_id to fetch later."
    },
    {
      "name": "Start Pipeline",
      "value": "start",
      "action": "Start a pipeline",
      "description": "Start a durable run and return immediately with its pipeline_run_id (no waiting) — collect the result later with Poll & Get Result or Get Run Result, even from another workflow"
    },
    {
      "name": "Poll & Get Result",
      "value": "poll",
      "action": "Poll a run until its result is ready",
      "description": "Wait for an already-started run by its pipeline_run_id: poll until it finishes or Max Wait is exceeded (then returns a \"still running\" output, not an error)"
    },
    {
      "name": "Get Run Result",
      "value": "getResult",
      "action": "Get a run result",
      "description": "Fetch a run result once by its pipeline_run_id (no polling) — returns status RUNNING while still in flight, the result when completed"
    }
  ]

npm_readme:
  <div align="center">
    <a href="https://www.pipelex.com/"><img src="https://raw.githubusercontent.com/Pipelex/pipelex/main/.github/assets/logo.png" alt="Pipelex Logo" width="400" style="max-width: 100%; height: auto;"></a>

    <h1>n8n-nodes-pipelex</h1>
    <h3>Execute Pipelex AI pipelines in your n8n workflows</h3>

    <p>
      <a href="https://www.npmjs.com/package/n8n-nodes-pipelex"><img src="https://img.shields.io/npm/v/n8n-nodes-pipelex.svg" alt="npm version"></a>
      <a href="LICENSE.md"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"></a>
      <a href="https://docs.pipelex.com/"><img src="https://img.shields.io/badge/Docs-03bb95?logo=read-the-docs&logoColor=white&style=flat" alt="Documentation"></a>
    </p>

    <p>
      📦 <a href="https://www.npmjs.com/package/n8n-nodes-pipelex">npm install n8n-nodes-pipelex</a>
    </p>

    <p>
      <a href="#installation">Installation</a> •
      <a href="#what-is-pipelex">What is Pipelex?</a> •
      <a href="#usage">Usage</a> •
      <a href="#examples">Examples</a> •
      <a href="#resources">Resources</a>
    </p>
  </div>

  ---

  ## What is this?

  This is an [n8n](https://n8n.io/) community node that lets you execute [Pipelex](https://github.com/Pipelex/pipelex) AI pipelines directly in your n8n workflows. Transform unstructured data into structured knowledge using repeatable AI operations.

  ## What is Pipelex?

  **[Pipelex](https://github.com/Pipelex/pipelex)** is an open-source runtime to **build and run AI methods**. A *method* is a reusable, typed AI procedure declared in a `.mthds` file and executed by Pipelex — each step is explicit, every output is structured, and every run is repeatable.

  Compose "pipes" that route across 60+ models, return structured outputs, and orchestrate sequentially, in parallel, or conditionally — sharing methods with the community via [mthds.sh](https://mthds.sh).

  Learn more about Pipelex:

  - 📖 [Manifesto: Why Pipelex?](https://go.pipelex.com/manifesto)
  - 📚 [Pipelex Documentation](https://docs.pipelex.com/)
  - 🚀 [Live Demo](https://go.pipelex.com/demo)
  - 🍳 [Cookbook: Ready-to-run Examples](https://github.com/Pipelex/pipelex-cookbook)

  ---

  ## Installation

  ### Prerequisites

  This node runs your pipelines through the **hosted Pipelex API's durable run lifecycle**: it starts a run via `POST /v1/start` and polls `GET /v1/runs/{pipeline_run_id}/results` internally until the result is ready. The credential's **Base URL** defaults to the hosted API at **`https://api.pipelex.com`**.

  > 🔑 **On the hosted API (`api.pipelex.com`), run access is gated for now.** Starting runs there currently requires an **admin / `runs:execute`-scoped** key. The credential **Test** only checks that your token is valid, so a non-scoped key will test green but return a clear *"lacks runs access"* error when you actually run a pipeline. Join the [waitlist](https://go.pipelex.com/waitlist) to be notified when self-serve run access opens up.

  > ℹ️ **Hosted-only:** the run-lifecycle polling routes (`/v1/runs/*`) and the `Method ID` field are hosted-API extensions, not part of the bare MTHDS Protocol — a bare runner does not implement them. To use your own backend, point the Base URL at a server exposing the same hosted surface (`/v1/start`, `/v1/runs/{pipeline_run_id}/results`, `/v1/auth/verify`).

  ### Install the n8n Community Node

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

  ---

  ## Credentials

  This node requires a **Pipelex API credential** to authenticate with your Pipelex API server. The credential carries both the **Base URL** and the **Bearer Token**.

  ### Setting up credentials:

  1. In your n8n workflow, add a Pipelex node
  2. Click on **Credential to connect with** → **Create New Credential**
  3. Fill in:
     - **Base URL** — defaults to `https://api.pipelex.com` (the hosted Pipelex API). Point it at your own server if you self-host the hosted run surface.
     - **Bearer Token** — your Pipelex API token (sent as `Authorization: Bearer <token>`)
  4. (Optional) Click **Test** — the credential is verified against `GET /v1/auth/verify` on your base URL.

  > ⚠️ The credential Test only confirms your token is **valid**, not that it can **start runs**. Running a pipeline needs a key with runs access (admin / `runs:execute` scope, see above). A valid-but-unscoped key passes the Test and then returns an actionable error on Run.

  **Where to get your Bearer Token:** create one at [app.pipelex.com](https://app.pipelex.com/). Hosted run access is gated for now — join the [waitlist](https://go.pipelex.com/waitlist).

  ---

  ## Node Configuration

  The Pipelex node has one **Operation** selector with four operations, mirroring the mthds-js client surface (`start` / `waitForResult` / `getRunResult` — SDK conveniences over the MTHDS Protocol routes):

  | Operation | What it does | Endpoint | Returns |
  |---|---|---|---|
  | **Start & Wait for Result** (default) | Starts a durable run and polls internally until it finishes — paste, run, get the result. The polling is invisible: no Wait-node loop to assemble. If **Max Wait** (default 300s) is exceeded, returns the `pipeline_run_id` with a "still running" message instead of failing. | `POST /v1/start` then `GET /v1/runs/{pipeline_run_id}/results` | `{ status, pipeline_run_id, main_stuff }` |
  | **Start Pipeline** | Starts a durable run and returns **immediately** — no waiting. The output's `pipeline_run_id` is the point: feed it to Poll & Get Result or Get Run Result later, even from another workflow branch or a separate scheduled workflow. | `POST /v1/start` | `{ pipeline_run_id, state, created_at }` (the StartAck) |
  | **Poll & Get Result** | Waits for an **already-started** run by `pipeline_run_id`: polls until it finishes or Max Wait is exceeded (then the same "still running" output, not an error). | `GET /v1/runs/{pipeline_run_id}/results` (polled) | `{ status, pipeline_run_id, main_stuff }` |
  | **Get Run Result** | Fetches a run's result **once** by `pipeline_run_id` — no polling. Returns `status: "RUNNING"` while still in flight, the result when `COMPLETED`. | `GET /v1/runs/{pipeline_run_id}/results` | `{ status, pipeline_run_id, main_stuff }` |

  **Which one to use?**

  - **Quick runs** → **Start & Wait for Result**: one node, start to result.
  - **Long runs** → **Start Pipeline**, then **Poll & Get Result** later (or on another workflow branch) when you actually need the result.
  - **Webhook-style / fire-and-collect** → **Start Pipeline**, then **Get Run Result** on a schedule until it reports `COMPLETED`.

  > ℹ️ The published 0.0.x `execute` operation value (the old "Execute Pipeline") still executes as a hidden alias of **Start & Wait for Result** — existing saved workflows keep running without edits.

  **Pipeline-definition fields** (Start & Wait for Result / Start Pipeline):

  | Parameter | API Field | Description |
  |---|---|---|
  | **MTHDS Bundles** | `mthds_contents` | One or more inline MTHDS bundles (a `string[]`). Combinable with Method ID — inline bundles run, `method_id` links the run to the stored method. |
  | **Inputs** | `inputs` | JSON object whose keys match your pipeline's expected inputs. Defaults to `{}`. |
  | **Pipe Code** | `pipe_code` | Code of the pipe to execute (registered on the server, or defined in the MTHDS Bundles). |
  | **Method ID** | `method_id` | ID of a stored method whose MTHDS source supplies the bundle (hosted API only) — the alternative to pasting bundles inline. |
  | **Output Name** | `output_name` | Optional name of the output variable. |
  | **Output Multiplicity** | `output_multiplicity` | Optional output multiplicity. |
  | **Dynamic Output Concept Ref** | `dynamic_output_concept_ref` | Optional override for the dynamic output concept ref. |

  **Run target** (Poll & Get Result / Get Run Result): **Pipeline Run ID** — the `pipeline_run_id` returned by Start Pipeline (or by a "still running" output).

  **Polling control** (Start & Wait for Result / Poll & Get Result): **Max Wait (Seconds)** — max seconds to wait for the run to finish (**default 300**, safe under typical n8n Cloud execution caps). On exceed, the node returns the `pipeline_run_id` + a "still running" message so you can fetch it later with **Get Run Result**. `0` waits indefinitely (only sensible on self-hosted n8n without execution timeouts). The server's `Retry-After` drives the poll cadence (5s when absent).

  **Note:** Provide at least one of `Pipe Code`, `MTHDS Bundles`, or `Method ID`. Learn more about the Pipelex API [here](https://docs.pipelex.com/pages/api/).

  **No "Custom API Call" entry:** n8n injects that raw-HTTP operation into nodes whose credential declares a generic `authenticate` block. This node's credential doesn't (the node builds its `Authorization` header itself), so the dropdown contains only the four curated operations above.

  ---

  ## Usage

  ### Quick Start

  1. **Add the Pipelex node** to your n8n workflow
  2. **Configure the credential** (Base URL + Bearer Token) — defaults to `https://api.pipelex.com`
  3. **Pick the operation:**
     - **Start & Wait for Result** (default) — start the run and get the result in one node; the polling happens internally
     - **Start Pipeline** — start the run and return immediately with its `pipeline_run_id` (collect the result later)
     - **Poll & Get Result** — wait for an already-started run by `pipeline_run_id` until it finishes (or Max Wait)
     - **Get Run Result** — a one-shot, non-blocking fetch by `pipeline_run_id` (returns `status: "RUNNING"` while still running)
  4. **Provide the pipeline:** a `Pipe Code`, inline `MTHDS Bundles`, or a stored `Method ID`
  5. **Set Inputs** as a JSON object matching your pipeline's expected inputs
  6. **Run** the workflow

  Long-running pipelines: **Max Wait** (default 300s) caps how long the polling operations block the n8n execution. If a run outlives it, the node returns the `pipeline_run_id` with a "still running" message — feed that id to **Get Run Result** later (e.g. on a schedule) or to **Poll & Get Result** to keep waiting. Or skip the first wait entirely: **Start Pipeline** now, collect later. Learn more about the output format [here](https://docs.pipelex.com/pages/api/).

  ---

  ## Examples

  WIP

  ---

  ## Resources

  ### Documentation
  - 📚 **[Pipelex Documentation](https://docs.pipelex.com/)** - Complete guide to building pipelines
  - 🔌 **[Pipelex API Documentation](https://docs.pipelex.com/pages/api/)** - API reference and integration guide
  - 🔧 **[n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)** - n8n node development guide

  ### Community & Support
  - 💬 **[Discord Community](https://go.pipelex.com/discord)** - Get help and share your workflows
  - 🐛 **[GitHub Issues](https://github.com/pipelex/n8n-nodes-pipelex/issues)** - Bug reports and feature requests
  - 🌐 **[Pipelex Homepage](https://www.pipelex.com)** - Learn more about Pipelex

  ---

  ## Contributing

  We welcome contributions! If you'd like to improve this node:

  See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.

  Please report bugs and request features via [GitHub Issues](https://github.com/pipelex/n8n-nodes-pipelex/issues).

  ---

  ## License

  [MIT](LICENSE.md)

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

  ---

  ## Acknowledgments

  Built with ❤️ by the Pipelex team and community.

  Special thanks to the [n8n community](https://n8n.io/) for building an amazing automation platform.

  ---

  <div align="center">
    <p>
      <a href="https://go.pipelex.com/discord"><img src="https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
      <a href="https://www.youtube.com/@PipelexAI"><img src="https://img.shields.io/badge/YouTube-FF0000?logo=youtube&logoColor=white" alt="YouTube"></a>
      <a href="https://pipelex.com"><img src="https://img.shields.io/badge/Homepage-03bb95?logo=google-chrome&logoColor=white&style=flat" alt="Website"></a>
    </p>

    <p><em>"Pipelex" is a trademark of Evotis S.A.S.</em></p>
    <p><em>© 2025 Evotis S.A.S.</em></p>
  </div>

ai_documentation_summary:
  {"purpose":"Execute Pipelex AI pipelines within n8n workflows by running pre-registered or custom AI methods to transform unstructured data into structured knowledge.","capabilities":["Execute pre-registered AI pipelines via Pipelex code","Run custom AI methods using MTHDS bundles","Support sequential, parallel, and conditional pipeline orchestration","Route data across 60+ AI models","Return structured outputs from AI operations","Share methods with the community via mthds.sh"],"authentication":"API Key (Bearer Token) required","commonUseCases":["Automating data transformation workflows","Integrating AI-driven decision-making processes","Running custom AI procedures in n8n workflows","Connecting self-hosted or hosted Pipelex API servers"],"limitations":["Hosted API is not yet available (waitlist required)","Self-hosting requires Docker setup and external server access","Localhost URLs only work on the same machine as the API server","Requires external Pipelex API server configuration"],"relatedNodes":["n8n-nodes-core.httpRequest","n8n-nodes-core.code"]}


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

updated_at: 2026-07-14 14:40:34
author_name: peak-api
author_github_url: https://github.com/PEAK-Account-Lab/peak-n8n-node.git
npm_package_name: n8n-nodes-peak
npm_version: 0.1.7
community_fetched_at: 2026-07-14T14:40:34.280Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Client Token",
          "value": "clientToken"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Daily Journal",
          "value": "dailyJournal"
        },
        {
          "name": "File Vault",
          "value": "fileVault"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Payment Method",
          "value": "paymentMethod"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Receipt",
          "value": "receipt"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a client token"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clientToken"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a daily journal"
        },
        {
          "name": "Get Account Code",
          "value": "getAccountCode",
          "action": "Get account codes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "dailyJournal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "insert",
      "options": [
        {
          "name": "Insert",
          "value": "insert",
          "action": "Insert a file into File Vault"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "fileVault"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createInvoice",
      "options": [
        {
          "name": "Create Invoice",
          "value": "createInvoice",
          "action": "Create an invoice"
        },
        {
          "name": "Create Expense",
          "value": "createExpense",
          "action": "Create an expense"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment method"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "paymentMethod"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getProduct",
      "options": [
        {
          "name": "Get Product",
          "value": "getProduct",
          "action": "Get a product"
        },
        {
          "name": "Get Service",
          "value": "getService",
          "action": "Get a service"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a receipt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "receipt"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a client token",
      "resource": "clientToken"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a daily journal",
      "resource": "dailyJournal"
    },
    {
      "name": "Get Account Code",
      "value": "getAccountCode",
      "action": "Get account codes",
      "resource": "dailyJournal"
    },
    {
      "name": "Insert",
      "value": "insert",
      "action": "Insert a file into File Vault",
      "resource": "fileVault"
    },
    {
      "name": "Create Invoice",
      "value": "createInvoice",
      "action": "Create an invoice",
      "resource": "invoice"
    },
    {
      "name": "Create Expense",
      "value": "createExpense",
      "action": "Create an expense",
      "resource": "invoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment method",
      "resource": "paymentMethod"
    },
    {
      "name": "Get Product",
      "value": "getProduct",
      "action": "Get a product",
      "resource": "product"
    },
    {
      "name": "Get Service",
      "value": "getService",
      "action": "Get a service",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a receipt",
      "resource": "receipt"
    }
  ]

npm_readme:
  # 🧩 n8n-nodes-peak  
  Official n8n community node for integrating with **PEAK Accounting Platform**.

  PEAK is a cloud-based accounting and financial automation platform that helps businesses automate receipts, expenses, invoices, order synchronization, and workflow integrations with marketplaces.  

  With this node, you can build automated workflows that interact directly with your PEAK business.

  ---
  ## 🚀 Features  
  This node allows you to perform a variety of accounting operations, including:

  - **Create Daily Journal** – Create daily journal documents via API  
  - **Create Receipt** – Create receipt documents via API  
  - **Create Invoice** – Create invoice documents via API  
  - **Create Expense** – Create expense documents via API  
  - **Get Master Data** – Retrieve contacts, products, payment methods, and other essential master data  

  Additional operations may be added in future releases.

  ---

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

  Once installed, you'll be able to use all PEAK-related operations.

  ---

  ## 🔐 Credentials (Required Before Use)

  To use this node, you must obtain **PEAK API Credentials**.  
  These credentials are issued **only** by the PEAK Sales / Partner team.

  ### Your credential will consist of four fields:

  | Field | Description |
  |-------|-------------|
  | **Connect ID** | Used only for requesting a Client Token and identifying your integration |
  | **Connect Key** | Secret used together with Connect ID when requesting a Client Token |
  | **Application Code** | Code required for generate User Token |
  | **User Token** | Access token linked to a specific user & merchant |

  ---

  ## 🧭 How to Obtain PEAK API Credentials

  ### 1️⃣ Contact PEAK Sales Team  
  Request API integration access.  
  You will receive:
  - Connect ID  
  - Connect Key  
  - Application Code  

  ### 2️⃣ Generate the User Token inside PEAK  
  1. Log in to the PEAK web app  
  2. Open the merchant you want to connect  
  3. Navigate to **Connect Apps Setting -> Connect Partner App -> Connect Non-Partner App** in Setting  
  4. Enter your **Application Code**  
  5. PEAK will generate a **User Token**  

  Once you have all four values, create a new credential in n8n:

  **Settings → Credentials → New → PEAK API**

  After saving, all PEAK nodes will be ready to use.

  ---

  ## ⚙️ Authentication  
  Every PEAK request requires:

  - `Time-Stamp`  
  - `Time-Signature`
  - `User-Token`  
  - `Client-Token`

  The PEAK n8n node **automatically handles all signature generation**, timestamps, and headers — no manual work required.

  ---

  ## 🛠 Operations  
  ### **PEAK Node**
  Available actions:

  | Resource | Operation | Description |
  |----------|-----------|-------------|
  | Daily Journal | Create | Create a daily Journal document |
  | Receipt | Create | Create a receipt document |
  | Invoice | Create | Create a invoice document |
  | Expense | Create | Create an expense document |

  More resources will be added in future versions.

  ---

  ## 📘 Usage

  ### **Action Node (PEAK)**
  1. Drag the **PEAK** node into your workflow  
  2. Select the resource (e.g., Receipt, Expense)  
  3. Choose an operation  
  4. Fill in required fields  
  5. Run the workflow

  ### Example Use Cases  
  - **Shopee Webhook → PEAK Create Receipt**  
  - **Google Sheets → PEAK Create Expense**  
  - **Internal System → Automated Accounting Workflows**  
  - **Marketplace Sync → PEAK Billing or Receipt Generation**
  ---

  ## 🔗 Resources  
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [PEAK API Documentation](https://developers.peakaccount.com/reference/peak-open-api)  
  - [n8n Official Docs](https://docs.n8n.io/)

  ---

  ## 🧩 Version History

  ### **0.1.0**  
  - Initial release  
  - Added:
    - Create Receipt  
    - Create Expense  
    - Fetch Master Data

  ### **0.1.1**  
  - Added:
    - Create Client Token

  ### **0.1.2**  
  - Standardized HTTP request handling

  ### **0.1.3**  
  - Fixed npm packaging issue

  ### **0.1.4**  
  - Fixed npm packaging issue
  ---

ai_documentation_summary:
  {"purpose":"This n8n community node enables automation of financial operations by interacting with the PEAK Accounting Platform API to create accounting documents and retrieve master data.","capabilities":["Create Daily Journal","Create Receipt","Create Invoice","Create Expense","Get Master Data (contacts, products, payment methods)","Generate Client Token","Automatic signature and timestamp handling"],"authentication":"Custom API credentials (Connect ID, Connect Key, Application Code, User Token) requiring manual configuration in n8n Credentials; node handles signature generation automatically","commonUseCases":["Automated receipt creation from Shopee webhooks","Expense tracking from Google Sheets","Marketplace order synchronization","Automated accounting workflows from internal systems"],"limitations":["Credentials must be obtained exclusively through PEAK Sales/Partner team","User Token is tied to a specific user and merchant","Limited to create operations and master data retrieval in current version; additional resources pending future releases"],"relatedNodes":["n8n-nodes-base.webhook","n8n-nodes-base.googleSheets","n8n-nodes-base.httpRequest"]}


node_type: n8n-nodes-finimpulse.finImpulse
package_name: n8n-nodes-finimpulse
display_name: FinImpulse
description: FinImpulse
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: finimpulse
author_github_url: https://github.com/finimpulse/
npm_package_name: n8n-nodes-finimpulse
npm_version: 1.0.2
community_fetched_at: 2026-07-14T14:40:34.281Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "market_data",
      "options": [
        {
          "name": "Market Data",
          "value": "market_data"
        },
        {
          "name": "Analyst Insights",
          "value": "analyst_insights"
        },
        {
          "name": "Financial Statistics & Risk",
          "value": "statistics"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search Assets",
          "value": "search",
          "action": "Search assets",
          "description": "Returns assets that match a search query (stocks, ETFs, funds)"
        },
        {
          "name": "Get Price History",
          "value": "histories",
          "action": "Get price history",
          "description": "Returns price history, dividends, splits, and other time-based data for an asset"
        },
        {
          "name": "Get Asset Summary",
          "value": "summary",
          "action": "Get asset summary",
          "description": "Returns a full snapshot of an asset, including price, fundamentals, and key metrics"
        },
        {
          "name": "Get Asset Profile",
          "value": "profile",
          "action": "Get asset profile",
          "description": "Returns basic information about an asset, such as company details, sector, and classification"
        },
        {
          "name": "Get News",
          "value": "news",
          "action": "Get news",
          "description": "Returns the latest news and press releases for an asset"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "market_data"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "earnings",
      "options": [
        {
          "name": "Get Earnings Data",
          "value": "earnings",
          "action": "Get earnings data",
          "description": "Returns earnings-related data for an asset, including EPS, revenue, analyst estimates, revisions, trends, and growth metrics"
        },
        {
          "name": "Get Recommendation Trends",
          "value": "recommendations",
          "action": "Get recommendation trends",
          "description": "Returns a breakdown of analyst recommendations for an asset over time, including counts for Strong Buy, Buy, Hold, Sell, and Strong Sell"
        },
        {
          "name": "Get Analyst Actions",
          "value": "upgrades_downgrades",
          "action": "Get analyst actions",
          "description": "Returns a feed of analyst rating actions for an asset, including upgrades, downgrades, reiterations, and price target changes"
        },
        {
          "name": "Get Analyst Ratings",
          "value": "analysts",
          "action": "Get analyst ratings",
          "description": "Returns a list of analysts covering an asset, including their ratings, sentiment, price targets, and latest updates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analyst_insights"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "general",
      "options": [
        {
          "name": "Get Key Metrics",
          "value": "general",
          "action": "Get key metrics",
          "description": "Returns key financial and performance metrics for an asset, including valuation, performance, and other key indicators"
        },
        {
          "name": "Get Risk Metrics",
          "value": "risks",
          "action": "Get risk metrics",
          "description": "Returns risk and risk-adjusted performance metrics for an asset, including volatility, drawdown, and other risk indicators"
        },
        {
          "name": "Get Annual Returns",
          "value": "annual_returns",
          "action": "Get annual returns",
          "description": "Returns annual return data for an asset by year, including historical returns by calendar year"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statistics"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Search Assets",
      "value": "search",
      "action": "Search assets",
      "description": "Returns assets that match a search query (stocks, ETFs, funds)",
      "resource": "market_data"
    },
    {
      "name": "Get Price History",
      "value": "histories",
      "action": "Get price history",
      "description": "Returns price history, dividends, splits, and other time-based data for an asset",
      "resource": "market_data"
    },
    {
      "name": "Get Asset Summary",
      "value": "summary",
      "action": "Get asset summary",
      "description": "Returns a full snapshot of an asset, including price, fundamentals, and key metrics",
      "resource": "market_data"
    },
    {
      "name": "Get Asset Profile",
      "value": "profile",
      "action": "Get asset profile",
      "description": "Returns basic information about an asset, such as company details, sector, and classification",
      "resource": "market_data"
    },
    {
      "name": "Get News",
      "value": "news",
      "action": "Get news",
      "description": "Returns the latest news and press releases for an asset",
      "resource": "market_data"
    },
    {
      "name": "Get Earnings Data",
      "value": "earnings",
      "action": "Get earnings data",
      "description": "Returns earnings-related data for an asset, including EPS, revenue, analyst estimates, revisions, trends, and growth metrics",
      "resource": "analyst_insights"
    },
    {
      "name": "Get Recommendation Trends",
      "value": "recommendations",
      "action": "Get recommendation trends",
      "description": "Returns a breakdown of analyst recommendations for an asset over time, including counts for Strong Buy, Buy, Hold, Sell, and Strong Sell",
      "resource": "analyst_insights"
    },
    {
      "name": "Get Analyst Actions",
      "value": "upgrades_downgrades",
      "action": "Get analyst actions",
      "description": "Returns a feed of analyst rating actions for an asset, including upgrades, downgrades, reiterations, and price target changes",
      "resource": "analyst_insights"
    },
    {
      "name": "Get Analyst Ratings",
      "value": "analysts",
      "action": "Get analyst ratings",
      "description": "Returns a list of analysts covering an asset, including their ratings, sentiment, price targets, and latest updates",
      "resource": "analyst_insights"
    },
    {
      "name": "Get Key Metrics",
      "value": "general",
      "action": "Get key metrics",
      "description": "Returns key financial and performance metrics for an asset, including valuation, performance, and other key indicators",
      "resource": "statistics"
    },
    {
      "name": "Get Risk Metrics",
      "value": "risks",
      "action": "Get risk metrics",
      "description": "Returns risk and risk-adjusted performance metrics for an asset, including volatility, drawdown, and other risk indicators",
      "resource": "statistics"
    },
    {
      "name": "Get Annual Returns",
      "value": "annual_returns",
      "action": "Get annual returns",
      "description": "Returns annual return data for an asset by year, including historical returns by calendar year",
      "resource": "statistics"
    }
  ]

npm_readme:
  FinImpulse Node for n8n
  ==========

  To use the FinImpulse node, you must have a FinImpulse account. You can create an account at [finimpulse.com](https://finimpulse.com/).

  Refer to the [FinImpulse API documentation](https://developers.finimpulse.com/) for the list of available endpoints.

  ## Contents
  - [Connect FinImpulse to n8n](#connect-finimpulse-to-n8n)
  - [Available FinImpulse Operations](#available-finimpulse-operations)


  Connect FinImpulse to n8n
  --------------------------

  ## Prerequisites

  - FinImpulse account
  - n8n installed or cloud account

  ## Setup

  To establish the connection, you must:

  1.  [Obtain your FinImpulse API credentials.](#obtain-your-finimpulse-api-credentials "Obtain Your FinImpulse API Credentials")
      
  2.  [Establish the connection in n8n.](#establish-the-connection-with-finimpulse-in-n8n "Establish the connection with FinImpulse in n8n")
      

  ### Obtain Your FinImpulse API Credentials

  To obtain your FinImpulse API credentials (API token):

  1.  Log in to your FinImpulse account dashboard.
      
  2.  In the left sidebar, click **API Settings**.
      
  3.  Add Token and store it in a safe place. 

  ### Establish the connection with FinImpulse in n8n

  To establish the connection in n8n:

  1.  Log in to your n8n account, add a FinImpulse node to your workflow, and click **Create new credential**.
      
  2.  Optional: Rename the credential.
      
  3.  In the **API Token** field, enter the values copied above.
      
  4.  Click **Save**.
      

  You have successfully established the connection. You can now build workflows using FinImpulse operations.


  Available FinImpulse Operations
  --------------------------

  After connecting the app, you can perform the following operations:

  ## Market Data

  ### [Search Assets](https://developers.finimpulse.com/v1/search/)

  Returns assets that match a search query (stocks, ETFs, funds).

  + **Search Text**: Free-text query (e.g., “NVDA”, “NVIDIA”, partial ticker, partial name).
  + **Quote Types**: Which asset types are included in the search. Available types: Stock, ETF, Mutualfund.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.
  + **Has Public Financial Reports?**: 'Whether the company provides public financial statements.
  + **Include Tickers with Missing Names?**: This parameter determines the filtering logic in the dashboard for tickers with or without company/fund names.
  + **Exclude Tickers with Available Names?**: This parameter determines the filtering logic in the dashboard for tickers with or without company/fund names.

  ### [Get Price History](https://developers.finimpulse.com/v1/histories/)

  Returns price history, dividends, splits, and other time-based data for an asset.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Types**: Record types to include. Supported values: historical_price, dividends, splits, capital_gains. All parameters are of type string and are optional. If none are provided, all supported types are returned.
  + **Interval**: Granularity for returned history records. Available values: 1d (1 day), 1wk (1 week), 1mo (1 month), 3mo (3 , month), 6mo (6 month), 1y (1 year). Supported intervals depend on the data source and asset coverage.
  + **Start Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **End Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Use USD?**: Controls whether currency-denominated fields are returned in USD or in the asset's native currency.

  ### [Get Asset Summary](https://developers.finimpulse.com/v1/summary/)

  Returns a full snapshot of an asset, including price, fundamentals, and key metrics.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).

  ### [Get Asset Profile](https://developers.finimpulse.com/v1/profile/)

  Returns basic information about an asset, such as company details, sector, and classification.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).

  ### [Get News](https://developers.finimpulse.com/v1/news/)

  Returns the latest news and press releases for an asset.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Types**: News types to include. Supported values: news, press_release. All parameters are of type string and are optional. If none are provided, all supported types are returned.
  + **Start Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **End Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ## Analyst Insights

  ### [Get Earnings Data](https://developers.finimpulse.com/v1/analysis/earnings/)

  Returns earnings-related data for an asset, including EPS, revenue, analyst estimates, revisions, trends, and growth metrics.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Types**: List of analysis record types to return. Supported values: neps_actual, earnings_revenue, earnings, revenue, eps_trend, eps_revisions, growth. All parameters are of type string and are optional. If none are provided, all supported types are returned.
  + **Methodologies**: Accounting methodologies to filter earnings data. Supported values: GAAP - Official earnings calculated according to Generally Accepted Accounting Principles, normalized - Adjusted earnings, excluding one-time or non-recurring items.
  + **Comparison Symbols**: Tickers or indices to include in growth estimates comparisons. Note that S&P 500 is always included by default and does not need to be specified.
  + **Start Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **End Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ### [Get Recommendation Trends](https://developers.finimpulse.com/v1/analysis/recommendations/)

  Returns a breakdown of analyst recommendations for an asset over time, including counts for Strong Buy, Buy, Hold, Sell, and Strong Sell.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Start Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **End Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ### [Get Analyst Actions](https://developers.finimpulse.com/v1/analysis/upgrades-downgrades/)

  Returns a feed of analyst rating actions for an asset, including upgrades, downgrades, reiterations, and price target changes.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Start Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **End Date**: Date range filter (YYYY-MM-DD). Records returned fall within the requested period.
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ### [Get Analyst Ratings](https://developers.finimpulse.com/v1/analysis/analysts/)

  Returns a list of analysts covering an asset, including their ratings, sentiment, price targets, and latest updates.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ## Financial Statistics & Risk

  ## [Get Key Metrics](https://developers.finimpulse.com/v1/statistics/general/)

  Returns key financial and performance metrics for an asset, including valuation, performance, and other key indicators.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).

  ### [Get Risk Metrics](https://developers.finimpulse.com/v1/statistics/risks/)

  Returns risk and risk-adjusted performance metrics for an asset, including volatility, drawdown, and other risk indicators.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).
  + **Limit**: Maximum number of matched items returned.
  + **Offset**: Pagination offset (0-based).
  + **Filters**: Optional filter expressions.
  + **Sort By**: Optional sorting configuration for result items. Each sorting setup is defined as [selector, desc]:selector - Metric used for sorting (e.g., amount_usd). desc - Sorting direction (true for descending, false for ascending). Sortings can be combined using ,.

  ### [Get Annual Returns](https://developers.finimpulse.com/v1/statistics/annual-returns/)

  Returns annual return data for an asset by year, including historical returns by calendar year.

  + **Asset Identifier (Ticker Symbol)**: Asset identifier (ticker symbol).

ai_documentation_summary:
  {"purpose":"The FinImpulse node enables n8n workflows to access financial market data, including asset search, price history, summaries, profiles, news, and analyst insights.","capabilities":["Search stocks, ETFs, and mutual funds by ticker or name","Retrieve historical price data with customizable intervals and date ranges","Fetch dividend, split, and capital gains history","Get asset summaries with fundamentals and key metrics","Retrieve asset profiles including company details and sector classification","Fetch latest news and press releases with date filtering","Access earnings data including EPS, revenue, and analyst estimates","Sort and paginate results for large datasets"],"authentication":"API Token (API Key)","commonUseCases":["Building stock market monitoring dashboards","Automated financial news aggregation","Portfolio analysis and historical data retrieval","Real-time asset price tracking"],"limitations":["Requires a separate FinImpulse account and API token setup","Some data availability depends on the specific asset and data source","Intervals and data types may vary based on asset coverage"],"relatedNodes":["Google Sheets","Webhook","Code","HTTP Request"]}


node_type: n8n-nodes-mindlytics.mindlytics
package_name: n8n-nodes-mindlytics
display_name: Mindlytics WhatsApp Marketing
description: Send WhatsApp messages, manage contacts, templates, and broadcasts via Mindlytics
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: analytical-being
author_github_url: https://github.com/Analytical-being/
npm_package_name: n8n-nodes-mindlytics
npm_version: 0.1.17
community_fetched_at: 2026-07-14T14:40:34.282Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Broadcast",
          "value": "broadcast"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Template",
          "value": "template"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Bulk Import",
          "value": "bulkImport",
          "action": "Bulk import contacts",
          "description": "Import up to 1000 contacts at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact by ID"
        },
        {
          "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": "sendTemplate",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a message",
          "description": "Get delivery status of a message"
        },
        {
          "name": "Send Template",
          "value": "sendTemplate",
          "action": "Send a template message",
          "description": "Send a WhatsApp template message to a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a template",
          "description": "Get a template by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many templates",
          "description": "Get many approved templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "template"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a broadcast",
          "description": "Create and trigger a broadcast campaign"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a broadcast",
          "description": "Get broadcast status and analytics"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many broadcasts",
          "description": "List broadcast campaigns"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "broadcast"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Bulk Import",
      "value": "bulkImport",
      "action": "Bulk import contacts",
      "description": "Import up to 1000 contacts at once",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact by ID",
      "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": "Get",
      "value": "get",
      "action": "Get a message",
      "description": "Get delivery status of a message",
      "resource": "message"
    },
    {
      "name": "Send Template",
      "value": "sendTemplate",
      "action": "Send a template message",
      "description": "Send a WhatsApp template message to a contact",
      "resource": "message"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a template",
      "description": "Get a template by ID",
      "resource": "template"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many templates",
      "description": "Get many approved templates",
      "resource": "template"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a broadcast",
      "description": "Create and trigger a broadcast campaign",
      "resource": "broadcast"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a broadcast",
      "description": "Get broadcast status and analytics",
      "resource": "broadcast"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many broadcasts",
      "description": "List broadcast campaigns",
      "resource": "broadcast"
    }
  ]

npm_readme:
  # n8n-nodes-mindlytics

  An [n8n](https://n8n.io) community node for **[Mindlytics](https://mindlytics.in)** — send WhatsApp template messages, manage contacts, templates, and run broadcast campaigns, all from your n8n workflows.

  ## Resources

  | Resource | Operations |
  |---|---|
  | **Contact** | Create, Get, Get Many, Update, Delete, Bulk Import |
  | **Message** | Send Template, Get |
  | **Template** | Get Many |
  | **Broadcast** | Create, Get, Get Many |

  ## Installation

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

  ```
  n8n-nodes-mindlytics
  ```

  ## Credentials

  After installation, create a **Mindlytics API** credential:

  | Field | Description |
  |---|---|
  | **API Key** | Generate one in your Mindlytics dashboard under **Settings → API Keys** (format: `wbp_api_...`) |

  ## Usage Examples

  ### Send a Template Message

  1. Set Resource → **Message**, Operation → **Send Template**
  2. Pick a contact **From List**, enter a **Contact ID**, or enter a **Phone Number** directly (the contact is created automatically if it doesn't exist)
  3. Pick a **Template** and fill in any header / body / button variables

  ### Bulk Import Contacts

  1. Set Resource → **Contact**, Operation → **Bulk Import**
  2. Provide a JSON array:

  ```json
  [
    { "phoneNumber": "+919876543210", "name": "John Doe", "tags": ["vip"] },
    { "phoneNumber": "+919876543211", "name": "Jane Smith" }
  ]
  ```

  ### Create a Broadcast Campaign

  1. Set Resource → **Broadcast**, Operation → **Create**
  2. Choose a Template
  3. Set at least one **Audience** filter (Tag IDs, Language, Source, etc.)
  4. Optionally add static parameters or per-contact field mappings for personalisation

  ### List Broadcasts

  1. Set Resource → **Broadcast**, Operation → **Get Many**
  2. Filter by status (Sent, Scheduled, Failed, …) or enable **Return All** to auto-paginate

  ## Notes

  - Phone numbers must be in **E.164 format** (e.g. `+919876543210`) or without the leading `+` (e.g. `919876543210`) — the API adds it automatically
  - Only **APPROVED** templates can be sent
  - Contacts must be **ACTIVE** and not opted out to receive messages
  - **Get Many** operations support **Return All** to auto-paginate large result sets

  ## Links

  - [Mindlytics](https://mindlytics.in)
  - [Documentation](https://docs.mindlytics.in)
  - [OpenAPI Spec](https://wbp-api.mindlytics.in/api/v1/openapi.json)
  - [n8n Community Nodes docs](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables WhatsApp marketing operations by allowing users to send template messages, manage contacts, create templates, and execute broadcast campaigns through Mindlytics.","capabilities":["Send WhatsApp template messages to individual contacts or phone numbers","Create, retrieve, update, and delete contact records","Bulk import contacts via JSON array","Retrieve contact details and lists","Create, retrieve, and list broadcast campaigns","Manage WhatsApp templates (get many)","Personalize broadcasts with static parameters and per-contact field mappings","Auto-create contacts when sending messages to non-existent numbers"],"authentication":"API Key required (format: wbp_api_...)","commonUseCases":["Automated WhatsApp marketing campaigns","Customer engagement via template messages","Bulk contact management and import","Scheduled broadcast campaigns with audience filtering","Personalized messaging using contact tags and fields"],"limitations":["Only APPROVED templates can be sent","Contacts must be ACTIVE and not opted out to receive messages","Phone numbers must be in E.164 format or without leading +","No mention of rate limiting or message volume constraints"],"relatedNodes":["n8n-nodes-whatsapp","n8n-nodes-mindlytics.contact","n8n-nodes-mindlytics.message","n8n-nodes-mindlytics.template","n8n-nodes-mindlytics.broadcast"]}


node_type: @rrulenet/n8n-nodes-rrulenet.rruleNetScheduleTrigger
package_name: @rrulenet/n8n-nodes-rrulenet
display_name: rrule.net Schedule Trigger
description: Advanced schedule trigger powered by rrule.net
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: rrulenet
author_github_url: https://github.com/rrulenet/n8n-nodes-rrulenet.git
npm_package_name: @rrulenet/n8n-nodes-rrulenet
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:34.286Z
ai_summary_generated_at: 2026-05-22 10:26:01
npm_readme:
  <p align="center">
    <a href="https://rrule.net">
      <img src="./nodes/RruleNetScheduleTrigger/rrulenet.svg" alt="rrule.net" width="96" height="96">
    </a>
  </p>

  <h1 align="center">@rrulenet/n8n-nodes-rrulenet</h1>

  <p align="center">
    n8n community node for <a href="https://rrule.net">rrule.net</a> schedules.
  </p>

  <p align="center">
    <a href="https://rrule.net">rrule.net</a> •
    <a href="https://docs.n8n.io/integrations/community-nodes/">n8n community nodes</a> •
    <strong>@rrulenet ecosystem</strong>
  </p>

  <p align="center">
    <code>@rrulenet/rrule</code> ·
    <code>@rrulenet/recurrence</code> ·
    <code>@rrulenet/core</code> ·
    <code>@rrulenet/cli</code>
  </p>

  <p align="center">
    <a href="https://www.npmjs.com/package/@rrulenet/n8n-nodes-rrulenet"><img src="https://img.shields.io/npm/v/%40rrulenet%2Fn8n-nodes-rrulenet" alt="npm version"></a>
    <img src="https://img.shields.io/badge/license-MIT-2563EB" alt="MIT License">
  </p>

  The first node in this package is **rrule.net Schedule Trigger**. It starts an n8n workflow from a hosted [rrule.net](https://rrule.net) schedule, so schedule creation, timezone handling, recurrence evaluation, and webhook delivery live in a dedicated scheduling layer.

  ## Why Use It

  [rrule.net](https://rrule.net) is a hosted scheduler for automation workflows. It can run simple schedules such as `Every minute`, but also gives you a more explicit and testable scheduling model than cron as your workflows grow.

  Use it when you want:

  - a schedule you can describe in natural language
  - timezone-aware execution with DST handling
  - a persistent remote schedule that can be paused, resumed, and inspected
  - clear validation errors before a workflow is published
  - webhook delivery into n8n without maintaining your own scheduler stack
  - target-aware executions for routing by market, region, timezone, or custom metadata
  - support for non-English natural-language schedules, depending on your rrule.net account and API configuration

  For a deeper comparison of recurrence semantics and cron limitations, see [RRule vs Cron](https://rrule.net/guides/rrule-vs-cron).

  It also covers schedules that are awkward or brittle with cron, such as:

  - Every second Tuesday at 18:00 except August
  - Every business day at 9:00 and weekends at 10:00

  [rrule.net](https://rrule.net) handles the recurrence model and calls your n8n webhook when an occurrence is due.

  ## Installation

  Install this package as an n8n community node package.

  Package name:

  ```text
  @rrulenet/n8n-nodes-rrulenet
  ```

  Follow n8n's community node installation guide:

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

  ## Credentials

  Create a **rrule.net API** credential in n8n:

  - **API Key**: an [rrule.net](https://rrule.net) API key from your dashboard
  - **API Base URL**: defaults to `https://api.rrule.net`

  The API base URL is configurable so you can use local or staging rrule.net APIs during development.

  ## Trigger Setup

  Add **rrule.net Schedule Trigger** to a workflow and configure:

  - **Name**: optional display name for the remote schedule
  - **Schedule Text**: natural-language schedule text
  - **Timezone**: IANA timezone, for example `Europe/Paris`
  - **On Deactivate**: pause or delete the remote schedule when the workflow is unpublished

  Example:

  ```text
  Every minute
  ```

  Complex example:

  ```text
  Every second Tuesday at 18:00 except August
  ```

  ## Activation Behavior

  When the workflow is published, the node creates or resumes a persistent schedule in [rrule.net](https://rrule.net).

  The remote schedule points to the workflow's production n8n webhook URL. If you are testing locally, make sure n8n is reachable from the internet through a tunnel and that `WEBHOOK_URL` is set to the public tunnel URL.

  When the workflow is unpublished, the node pauses the remote schedule by default. You can choose to delete it instead.

  If the stored remote schedule was deleted manually, the node recreates it on the next publish.

  ## Webhook Troubleshooting

  The node registers the workflow's production n8n webhook URL with [rrule.net](https://rrule.net) when the workflow is published or activated.

  If rrule.net reports failed deliveries, check these common causes first:

  - **HTTP 404 from n8n**: the workflow is usually not published or active, or the webhook URL is not the production URL.
  - **`webhook-test` URL**: n8n test webhook URLs only work while n8n is explicitly listening for a test event. Use the production webhook URL for persistent schedules.
  - **Local n8n instance**: expose n8n through a public HTTPS tunnel and set `WEBHOOK_URL` to that public URL before activating the workflow.
  - **Stopped tunnel or changed public URL**: reactivate the workflow so the node updates the remote rrule.net schedule with the current webhook URL.

  rrule.net automatically pauses clearly broken webhook endpoints. For example, a `404` or `410` response is treated as a terminal endpoint failure, while likely configuration errors such as `400`, `401`, or `403` are paused after repeated failures. Fix the n8n endpoint, then resume or reactivate the schedule.

  ## Target-Aware Schedules

  rrule.net can run one logical schedule across multiple execution targets, such as regions, markets, stores, audiences, or local timezones.

  For targeted schedules, the trigger output includes normalized target fields:

  - `target_id`
  - `target_label`
  - `target_timezone`
  - `target_metadata`

  Use these fields in downstream n8n nodes to route each execution. Untargeted schedules keep the same webhook payload shape and leave target fields empty, except `target_metadata`, which is an empty object.

  Learn more in the rrule.net schedule targets guide:

  https://rrule.net/guides/schedule-targets

  ## Output

  Each trigger execution emits one item with normalized fields:

  ```json
  {
    "schedule_id": "6b02511c-d936-42cf-932f-cb1ce3832a4c",
    "schedule_name": "n8n lead sync",
    "execution_id": "148bdd21-39af-45a6-8f7f-ea6b40ca39a4",
    "scheduled_for": "2026-05-04T09:23:00+00:00",
    "executed_at": "2026-05-04T09:23:29.173Z",
    "timezone": "Europe/Paris",
    "target_id": "paris",
    "target_label": "Paris audience",
    "target_timezone": "Europe/Paris",
    "target_metadata": {
      "market": "fr",
      "segmentId": "brevo-fr"
    },
    "input_type": "natural",
    "input_value": "Every minute",
    "raw_payload": {}
  }
  ```

  ## Quotas And Plans

  Persistent schedules run on [rrule.net](https://rrule.net). API key, quota, and subscription errors are returned by the rrule.net API and shown in n8n when the workflow is published.

  Manage your account and API keys from:

  https://rrule.net/dashboard

ai_documentation_summary:
  {"purpose":"This n8n community node triggers workflows based on schedules managed by rrule.net, offering advanced recurrence rules with natural language support, timezone awareness, and DST handling.","capabilities":["Natural language schedule definition (e.g., 'Every second Tuesday at 18:00 except August')","Timezone-aware execution with IANA timezone support","Automatic schedule creation, resumption, and deletion via rrule.net API","Webhook delivery to n8n without maintaining local scheduler infrastructure","Support for complex recurrence patterns not easily handled by cron","Pause or delete remote schedule on workflow deactivation"],"authentication":"API Key required (rrule.net API Key from dashboard)","commonUseCases":["Automated recurring tasks with complex recurrence rules","Timezone-aware scheduled workflows across different regions","Replacing cron jobs with more explicit scheduling models","Testing and managing schedules in a persistent remote layer"],"limitations":["Requires external rrule.net service and API quota/subscription","Workflow must be accessible from the internet via public webhook URL","Local testing requires n8n to be reachable through a tunnel","Non-English natural-language schedule support depends on rrule.net account configuration"],"relatedNodes":["n8n Webhook Node","n8n Schedule Trigger (standard)","n8n Community Nodes"]}


node_type: n8n-nodes-pegalaunchpad.pegaLaunchpad
package_name: n8n-nodes-pegalaunchpad
display_name: Launchpad by Pegasystems
description: Consume Pega Launchpad API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: sasiveeramachaneni
author_github_url: https://github.com/SasiVeeramachaneni/
npm_package_name: n8n-nodes-pegalaunchpad
npm_version: 0.1.3
community_fetched_at: 2026-07-14T14:40:34.287Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "case",
      "options": [
        {
          "name": "Agent",
          "value": "agent",
          "description": "Interact with Pega AI agents"
        },
        {
          "name": "Assignment",
          "value": "assignment",
          "description": "Represents an assignment in Pega Launchpad"
        },
        {
          "name": "Attachment",
          "value": "attachment",
          "description": "Represents an attachment in Pega Launchpad"
        },
        {
          "name": "Case",
          "value": "case",
          "description": "Represents a case in Pega Launchpad"
        },
        {
          "name": "Pulse",
          "value": "pulse",
          "description": "Represents a pulse in Pega Launchpad"
        },
        {
          "name": "User",
          "value": "user",
          "description": "Represents user actions in Pega Launchpad"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "initiateConversation",
      "options": [
        {
          "name": "Get Final Response",
          "value": "getFinalResponse",
          "action": "Get final response from an agent conversation",
          "description": "Get the final response from an agent conversation"
        },
        {
          "name": "Initiate Conversation",
          "value": "initiateConversation",
          "action": "Initiate conversation with an AI agent",
          "description": "Initiate a new conversation with an AI agent"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message to an agent conversation",
          "description": "Send a message to an existing agent conversation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "agent"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get assignment details",
          "description": "Get assignment details"
        },
        {
          "name": "Perform Action",
          "value": "performAction",
          "action": "Perform action on assignment",
          "description": "Perform an action on an assignment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "assignment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a case",
          "description": "Create a case"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a case",
          "description": "Get a case"
        },
        {
          "name": "Get Attachments",
          "value": "getAttachments",
          "action": "Get case attachments",
          "description": "Get attachments for a case"
        },
        {
          "name": "Get History",
          "value": "getHistory",
          "action": "Get case history",
          "description": "Get history of a case"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many cases",
          "description": "Get a list of cases"
        },
        {
          "name": "Query Cases",
          "value": "queryCases",
          "action": "Query cases",
          "description": "Query cases with advanced filtering"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "case"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an attachment",
          "description": "Delete an attachment"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an attachment",
          "description": "Get an attachment"
        },
        {
          "name": "Link to Case",
          "value": "linkToCase",
          "action": "Link attachment to case",
          "description": "Link an attachment to a case"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload an attachment",
          "description": "Upload a file as an attachment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add pulse to case",
          "description": "Add pulse to case"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get pulse of case",
          "description": "Get pulse of case"
        },
        {
          "name": "Reply",
          "value": "reply",
          "action": "Reply to pulse",
          "description": "Reply to pulse"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pulse"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createPersona",
      "options": [
        {
          "name": "Create Persona",
          "value": "createPersona",
          "action": "Create persona",
          "description": "Create a new persona"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many users",
          "description": "Get a list of users/personas"
        },
        {
          "name": "Mark as Active",
          "value": "markAsActive",
          "action": "Mark user as active",
          "description": "Mark a user as active"
        },
        {
          "name": "Mark as Inactive",
          "value": "markAsInactive",
          "action": "Mark user as inactive",
          "description": "Mark a user as inactive"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Final Response",
      "value": "getFinalResponse",
      "action": "Get final response from an agent conversation",
      "description": "Get the final response from an agent conversation",
      "resource": "agent"
    },
    {
      "name": "Initiate Conversation",
      "value": "initiateConversation",
      "action": "Initiate conversation with an AI agent",
      "description": "Initiate a new conversation with an AI agent",
      "resource": "agent"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send message to an agent conversation",
      "description": "Send a message to an existing agent conversation",
      "resource": "agent"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get assignment details",
      "description": "Get assignment details",
      "resource": "assignment"
    },
    {
      "name": "Perform Action",
      "value": "performAction",
      "action": "Perform action on assignment",
      "description": "Perform an action on an assignment",
      "resource": "assignment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a case",
      "description": "Create a case",
      "resource": "case"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a case",
      "description": "Get a case",
      "resource": "case"
    },
    {
      "name": "Get Attachments",
      "value": "getAttachments",
      "action": "Get case attachments",
      "description": "Get attachments for a case",
      "resource": "case"
    },
    {
      "name": "Get History",
      "value": "getHistory",
      "action": "Get case history",
      "description": "Get history of a case",
      "resource": "case"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many cases",
      "description": "Get a list of cases",
      "resource": "case"
    },
    {
      "name": "Query Cases",
      "value": "queryCases",
      "action": "Query cases",
      "description": "Query cases with advanced filtering",
      "resource": "case"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an attachment",
      "description": "Delete an attachment",
      "resource": "attachment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an attachment",
      "description": "Get an attachment",
      "resource": "attachment"
    },
    {
      "name": "Link to Case",
      "value": "linkToCase",
      "action": "Link attachment to case",
      "description": "Link an attachment to a case",
      "resource": "attachment"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload an attachment",
      "description": "Upload a file as an attachment",
      "resource": "attachment"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add pulse to case",
      "description": "Add pulse to case",
      "resource": "pulse"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get pulse of case",
      "description": "Get pulse of case",
      "resource": "pulse"
    },
    {
      "name": "Reply",
      "value": "reply",
      "action": "Reply to pulse",
      "description": "Reply to pulse",
      "resource": "pulse"
    },
    {
      "name": "Create Persona",
      "value": "createPersona",
      "action": "Create persona",
      "description": "Create a new persona",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many users",
      "description": "Get a list of users/personas",
      "resource": "user"
    },
    {
      "name": "Mark as Active",
      "value": "markAsActive",
      "action": "Mark user as active",
      "description": "Mark a user as active",
      "resource": "user"
    },
    {
      "name": "Mark as Inactive",
      "value": "markAsInactive",
      "action": "Mark user as inactive",
      "description": "Mark a user as inactive",
      "resource": "user"
    }
  ]

npm_readme:
  # n8n-nodes-pegalaunchpad

  This is an n8n community node that lets you interact with the **Pega Launchpad** DX API directly from your n8n workflows.

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

  ## Features

  | Resource       | Operations |
  |----------------|------------|
  | **Case**       | Create, Get, Get Many, Get Attachments, Get History, Query Cases |
  | **Attachment** | Get, Delete, Link to Case, Upload |
  | **Assignment** | Get, Perform Action |
  | **Pulse**      | Add, Get, Reply |
  | **User**       | Create Persona, Get Many, Mark as Active, Mark as Inactive |
  | **Agent**      | Initiate Conversation, Send Message, Get Final Response |

  ## Prerequisites

  - An [n8n](https://n8n.io/) instance (self-hosted or cloud)
  - A Pega Launchpad instance with an **OAuth2 Client Credentials** profile configured  
    ([Pega docs: Configure OAuth2](https://docs.pega.com/bundle/launchpad/page/platform/launchpad/configure-oauth2-authentication-profile.html))

  ## Installation

  ### Community Nodes (recommended)

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

  ### Manual installation

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

  Then restart n8n.

  ## Credentials

  1. In n8n, create a new credential of type **Pega Launchpad OAuth2 API**.
  2. Fill in:
     - **Base URL** — Your Pega Launchpad instance URL (e.g. `https://my-org.pegalaunchpad.io`)
     - **Access Token URL** — The OAuth2 token endpoint (e.g. `https://my-org.pegalaunchpad.io/prweb/PRRestService/oauth2/v1/token`)
     - **Client ID** / **Client Secret** — From your Pega OAuth2 profile
     - **Scope** _(optional)_

  ## Compatibility

  Tested with n8n version 1.x.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n community node enables interaction with the Pega Launchpad DX API to manage cases, attachments, assignments, pulse messages, users, and agents directly within n8n workflows.","capabilities":["Create, retrieve, and query cases","Manage case attachments (upload, delete, link)","Perform actions on assignments","Add, retrieve, and reply to pulse messages","Create personas and manage user status","Initiate and manage agent conversations"],"authentication":"OAuth2 (Client Credentials)","commonUseCases":["Automating customer support ticket workflows","Integrating Pega Launchpad with n8n for automated case management","Synchronizing user personas and agents between systems"],"limitations":["Requires a Pega Launchpad instance with OAuth2 Client Credentials profile configured","Tested only with n8n version 1.x"],"relatedNodes":["n8n-nodes-pegasystems","n8n-nodes-pegasystems-pegasystems","n8n-nodes-pegasystems-pegasystems-pegasystems"]}


node_type: n8n-nodes-digitalsac.digitalsac
package_name: n8n-nodes-digitalsac
display_name: Digitalsac Izing Pro
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: digitalsac
author_github_url: https://github.com/digitalsac-io/
npm_package_name: n8n-nodes-digitalsac
npm_version: 1.2.2
community_fetched_at: 2026-07-14T14:40:34.288Z
ai_summary_generated_at: 2026-05-22 10:26:01
description:
  Interact with the Digitalsac Izing Pro API (WhatsApp, tickets, scheduling, WABA templates and more).

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "validateWhatsapp",
      "options": [
        {
          "name": "Cancel Schedule",
          "value": "cancelSchedule",
          "action": "Cancel a schedule"
        },
        {
          "name": "Cancel Scheduled Message",
          "value": "cancelScheduledMessage",
          "action": "Cancel a scheduled message"
        },
        {
          "name": "Close Ticket",
          "value": "closeTicket",
          "action": "Close a ticket"
        },
        {
          "name": "Create Schedule",
          "value": "createSchedule",
          "action": "Create a schedule"
        },
        {
          "name": "Create Tag",
          "value": "createTag",
          "action": "Create a tag"
        },
        {
          "name": "Generate Calendar Link (.ics)",
          "value": "calendarLink",
          "action": "Generate a calendar link"
        },
        {
          "name": "Link Kanban",
          "value": "linkKanban",
          "action": "Link a kanban to a ticket"
        },
        {
          "name": "Link Tag",
          "value": "linkTag",
          "action": "Link a tag to a ticket"
        },
        {
          "name": "Link Wallet",
          "value": "linkCarteira",
          "action": "Link a wallet to a ticket"
        },
        {
          "name": "List Agents",
          "value": "listAgents",
          "action": "List agents"
        },
        {
          "name": "List Available Slots",
          "value": "listAvailableSlots",
          "action": "List available time slots"
        },
        {
          "name": "List Available Users",
          "value": "listAvailableUsers",
          "action": "List available users for a service"
        },
        {
          "name": "List Kanbans",
          "value": "listKanbans",
          "action": "List kanbans"
        },
        {
          "name": "List Queues",
          "value": "listQueues",
          "action": "List queues"
        },
        {
          "name": "List Scheduled Messages (Typebot)",
          "value": "listScheduledMessagesTypebot",
          "action": "List scheduled messages"
        },
        {
          "name": "List Schedules",
          "value": "listSchedules",
          "action": "List existing schedules"
        },
        {
          "name": "List Services",
          "value": "listServices",
          "action": "List scheduling services"
        },
        {
          "name": "List Tags",
          "value": "listTags",
          "action": "List tags"
        },
        {
          "name": "List WABA Templates",
          "value": "listWabaTemplates",
          "action": "List whats app business templates"
        },
        {
          "name": "List Wallets",
          "value": "listCarteiras",
          "action": "List wallets"
        },
        {
          "name": "Next Assignee in Queue",
          "value": "nextAssignee",
          "action": "Get next assignee in queue"
        },
        {
          "name": "Schedule Message (Typebot)",
          "value": "scheduleMessageTypebot",
          "action": "Create a scheduled message"
        },
        {
          "name": "Send Base64 File",
          "value": "sendBase64",
          "action": "Send a base64 encoded file"
        },
        {
          "name": "Send Buttons",
          "value": "sendButtons",
          "action": "Send interactive buttons"
        },
        {
          "name": "Send Carousel",
          "value": "sendCarousel",
          "action": "Send a carousel"
        },
        {
          "name": "Send List",
          "value": "sendList",
          "action": "Send a list"
        },
        {
          "name": "Send Media With Caption",
          "value": "sendMediaCaption",
          "action": "Send media with caption"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message"
        },
        {
          "name": "Send Short SMS",
          "value": "sendTypebotSms",
          "action": "Send a short SMS"
        },
        {
          "name": "Send WABA Template",
          "value": "sendWabaTemplate",
          "action": "Send a whats app business template"
        },
        {
          "name": "Transfer to Agent",
          "value": "transferAgent",
          "action": "Transfer ticket to agent"
        },
        {
          "name": "Transfer to Next Assignee",
          "value": "transferNextAssignee",
          "action": "Transfer to next assignee"
        },
        {
          "name": "Transfer to Queue",
          "value": "transferQueue",
          "action": "Transfer ticket to queue"
        },
        {
          "name": "Validate CPF",
          "value": "validateCpf",
          "action": "Validate a CPF document"
        },
        {
          "name": "Validate Date",
          "value": "validateDate",
          "action": "Validate a date"
        },
        {
          "name": "Validate WhatsApp",
          "value": "validateWhatsapp",
          "action": "Validate a whats app number"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Cancel Schedule",
      "value": "cancelSchedule",
      "action": "Cancel a schedule"
    },
    {
      "name": "Cancel Scheduled Message",
      "value": "cancelScheduledMessage",
      "action": "Cancel a scheduled message"
    },
    {
      "name": "Close Ticket",
      "value": "closeTicket",
      "action": "Close a ticket"
    },
    {
      "name": "Create Schedule",
      "value": "createSchedule",
      "action": "Create a schedule"
    },
    {
      "name": "Create Tag",
      "value": "createTag",
      "action": "Create a tag"
    },
    {
      "name": "Generate Calendar Link (.ics)",
      "value": "calendarLink",
      "action": "Generate a calendar link"
    },
    {
      "name": "Link Kanban",
      "value": "linkKanban",
      "action": "Link a kanban to a ticket"
    },
    {
      "name": "Link Tag",
      "value": "linkTag",
      "action": "Link a tag to a ticket"
    },
    {
      "name": "Link Wallet",
      "value": "linkCarteira",
      "action": "Link a wallet to a ticket"
    },
    {
      "name": "List Agents",
      "value": "listAgents",
      "action": "List agents"
    },
    {
      "name": "List Available Slots",
      "value": "listAvailableSlots",
      "action": "List available time slots"
    },
    {
      "name": "List Available Users",
      "value": "listAvailableUsers",
      "action": "List available users for a service"
    },
    {
      "name": "List Kanbans",
      "value": "listKanbans",
      "action": "List kanbans"
    },
    {
      "name": "List Queues",
      "value": "listQueues",
      "action": "List queues"
    },
    {
      "name": "List Scheduled Messages (Typebot)",
      "value": "listScheduledMessagesTypebot",
      "action": "List scheduled messages"
    },
    {
      "name": "List Schedules",
      "value": "listSchedules",
      "action": "List existing schedules"
    },
    {
      "name": "List Services",
      "value": "listServices",
      "action": "List scheduling services"
    },
    {
      "name": "List Tags",
      "value": "listTags",
      "action": "List tags"
    },
    {
      "name": "List WABA Templates",
      "value": "listWabaTemplates",
      "action": "List whats app business templates"
    },
    {
      "name": "List Wallets",
      "value": "listCarteiras",
      "action": "List wallets"
    },
    {
      "name": "Next Assignee in Queue",
      "value": "nextAssignee",
      "action": "Get next assignee in queue"
    },
    {
      "name": "Schedule Message (Typebot)",
      "value": "scheduleMessageTypebot",
      "action": "Create a scheduled message"
    },
    {
      "name": "Send Base64 File",
      "value": "sendBase64",
      "action": "Send a base64 encoded file"
    },
    {
      "name": "Send Buttons",
      "value": "sendButtons",
      "action": "Send interactive buttons"
    },
    {
      "name": "Send Carousel",
      "value": "sendCarousel",
      "action": "Send a carousel"
    },
    {
      "name": "Send List",
      "value": "sendList",
      "action": "Send a list"
    },
    {
      "name": "Send Media With Caption",
      "value": "sendMediaCaption",
      "action": "Send media with caption"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message"
    },
    {
      "name": "Send Short SMS",
      "value": "sendTypebotSms",
      "action": "Send a short SMS"
    },
    {
      "name": "Send WABA Template",
      "value": "sendWabaTemplate",
      "action": "Send a whats app business template"
    },
    {
      "name": "Transfer to Agent",
      "value": "transferAgent",
      "action": "Transfer ticket to agent"
    },
    {
      "name": "Transfer to Next Assignee",
      "value": "transferNextAssignee",
      "action": "Transfer to next assignee"
    },
    {
      "name": "Transfer to Queue",
      "value": "transferQueue",
      "action": "Transfer ticket to queue"
    },
    {
      "name": "Validate CPF",
      "value": "validateCpf",
      "action": "Validate a CPF document"
    },
    {
      "name": "Validate Date",
      "value": "validateDate",
      "action": "Validate a date"
    },
    {
      "name": "Validate WhatsApp",
      "value": "validateWhatsapp",
      "action": "Validate a whats app number"
    }
  ]

npm_readme:
  # n8n-nodes-digitalsac

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

  Community node for [n8n](https://n8n.io) that integrates with the **Digitalsac DigiCrm** API for WhatsApp messaging, ticket management, scheduling and WhatsApp Business (WABA) templates.

  ---

  ## ✨ Features

  - 🟢 **WhatsApp** — send text, buttons, lists, carousels, media (file or base64)
  - 🎫 **Tickets** — transfer to queue/agent, close, fetch next assignee, transfer to next assignee
  - 🏷️ **Tags · Kanbans · Wallets** — list, create, link to tickets
  - 📅 **Scheduling** — services, available users, available slots, schedule and cancel appointments, generate `.ics` calendar links
  - 💬 **WABA Templates** — list templates and send with **dynamic body, header (TEXT/IMAGE/VIDEO/DOCUMENT) and URL buttons**
  - 📲 **Short SMS**
  - ✅ Input/output validators (WhatsApp number, CPF, date)

  ## 🆕 What's new in 1.2.3

  - ✨ **Rebrand**: product renamed from **Izing Pro** to **DigiCrm**
  - 🎨 New DigiCrm logo (SVG) on the node and credential icons
  - 🔁 Display names and docs updated — same package and credentials, existing workflows keep working

  ## What's new in 1.2.1

  - 🔧 **n8n verification compliance**: removed `overrides` field from `package.json`, declared `n8n-workflow` as a `peerDependency`, and the documentation is now English-only

  ## What's new in 1.2.0

  - ✅ **Send WABA Template** now supports fully dynamic payloads:
    - **Header Media URL** (`mediaUrl`) — overrides stored media for `IMAGE`/`VIDEO`/`DOCUMENT` headers
    - **Header Parameters** (`headerParams`) — variables for `TEXT` headers
    - **Button Parameters** (`buttonParams`) — values for URL buttons with placeholders
  - 🐛 Fixed: header component was not sent for `IMAGE`/`VIDEO`/`DOCUMENT` templates without `header_text` stored
  - 🐛 Static URL buttons no longer send invalid parameters (rejected by Meta)
  - 🔁 100% backward compatible — existing workflows keep working unchanged
  - 🔧 **n8n verification compliance**: `httpRequestWithAuthentication`, `pairedItem` tracking, `NodeApiError`/`NodeOperationError`, `continueOnFail()` handling, English UI, node `subtitle`, codex file, credential icon and a GitHub Actions publish workflow with NPM provenance

  See [`CHANGELOG-1.2.0.md`](./CHANGELOG-1.2.0.md) for details.

  ## 🚀 Installation

  ### Via the n8n UI
  1. Open **Settings → Community Nodes**
  2. Search for `n8n-nodes-digitalsac`
  3. Click **Install**

  ### Via CLI
  ```bash
  npm install -g n8n-nodes-digitalsac
  ```

  If your n8n is installed in a custom directory:
  ```bash
  cd ~/.n8n
  npm install n8n-nodes-digitalsac
  ```

  ## 🔐 Credentials

  Create a **Digitalsac DigiCrm API** credential with:

  | Field          | Description                                            | Example                                |
  |----------------|--------------------------------------------------------|----------------------------------------|
  | API Base URL   | Base URL of your Digitalsac instance (no trailing `/`) | `https://yourdomain.digitalsac.com.br` |
  | Bearer Token   | API token issued by Digitalsac                         | `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXV...` |

  The node automatically attaches the `Authorization: Bearer <token>` header on every request via n8n's authenticated HTTP helper.

  ## ⚙️ Operations overview

  | Group              | Operation                                                                                |
  |--------------------|------------------------------------------------------------------------------------------|
  | Validation         | Validate WhatsApp · Validate CPF · Validate Date                                         |
  | Queues / Agents    | List Queues · List Agents · Next Assignee · Transfer to Queue / Agent / Next Assignee    |
  | Tickets            | Close Ticket                                                                             |
  | Messaging          | Send Message · Send Buttons · Send List · Send Carousel · Send Media With Caption · Send Base64 |
  | Tags               | List Tags · Link Tag · Create Tag                                                        |
  | Kanbans            | List Kanbans · Link Kanban                                                               |
  | Wallets            | List Wallets · Link Wallet                                                               |
  | Scheduling         | List Services · List Available Users · List Available Slots · List Schedules · Create Schedule · Cancel Schedule · Calendar Link |
  | Scheduled Messaging | List Scheduled Messages (Typebot) · Schedule Message (Typebot) · Cancel Scheduled Message |
  | WABA Templates     | List WABA Templates · **Send WABA Template** (dynamic)                                   |
  | SMS                | Send Short SMS                                                                           |

  ---

  ## 📖 Detailed usage

  ### Validate WhatsApp
  1. Choose **Validate WhatsApp**.
  2. Fill **Parameter** with the phone number you want to validate.

  ### Validate CPF
  1. Choose **Validate CPF**.
  2. Fill **Parameter** with the CPF number.

  ### Validate Date
  1. Choose **Validate Date**.
  2. Fill **Data (JSON)** with:
  ```json
  { "data": "2024-01-15" }
  ```

  ### List Queues / Agents
  - **List Queues** and **List Agents** require no extra parameters.
  - For **List Agents** you can pick the response format: `Full JSON` (default) or `Formatted Text` (compatibility).

  ### Transfer to Queue
  ```json
  { "ticketId": 123, "queueId": 5 }
  ```

  ### Transfer to Agent
  ```json
  { "ticketId": 123, "userId": 10 }
  ```

  ### Close Ticket
  ```json
  { "ticketId": 123 }
  ```

  ### Next Assignee in Queue / Transfer to Next Assignee
  Both require the **Parameter** field filled with the connection UUID and the JSON body:
  ```json
  { "queueId": 3, "ticketId": 1201, "method": "S", "allowOffline": false }
  ```

  ### Send Message (text or file)
  1. Fill **Parameter** with the connection UUID (e.g. `999ab3a2-9f1f-4ffb-969a-bfb72234ece1`).
  2. Fill **Message Body**, **Phone Number** (`5511999999999`) and **External Key**.
  3. **Optional**: connect a previous node that emits binary data (HTTP Request, Read Binary File, Google Drive, …) and the node will automatically switch to multipart upload (`FormData`).

  ### Send Buttons
  Button JSON example:
  ```json
  [
    {
      "tipo": {"label": "Quick Reply", "value": "quick_reply"},
      "display_text": "✅ Yes",
      "conteudo": "yes"
    },
    {
      "tipo": {"label": "Quick Reply", "value": "quick_reply"},
      "display_text": "❌ No",
      "conteudo": "no"
    },
    {
      "tipo": {"label": "URL", "value": "url"},
      "display_text": "🌐 Visit site",
      "conteudo": "https://www.digitalsac.com.br"
    },
    {
      "tipo": {"label": "Copy", "value": "copy"},
      "display_text": "📋 Copy code",
      "conteudo": "PROMO2024"
    },
    {
      "tipo": {"label": "Call", "value": "call"},
      "display_text": "📞 Call now",
      "conteudo": "5511999999999"
    }
  ]
  ```

  Available button types:
  - `quick_reply` — replies are echoed back into the conversation
  - `url` — opens a link in the browser
  - `copy` — copies text to the clipboard
  - `call` — starts a phone call

  ### Send List
  ```json
  [
    {
      "title": "🛍️ Products",
      "lines": [
        { "title": "Premium Smartphone", "description": "iPhone 15 Pro Max 256GB", "rowId": 1 },
        { "title": "Gaming Laptop", "description": "Dell Alienware with RTX 4090", "rowId": 2 }
      ]
    },
    {
      "title": "🛠️ Services",
      "lines": [
        { "title": "Tech Support", "description": "Specialized assistance", "rowId": 3 },
        { "title": "Consulting", "description": "Custom consulting", "rowId": 4 }
      ]
    }
  ]
  ```

  ### Send Carousel
  ```json
  [
    {
      "body": "Starter Plan",
      "footer": "Starting at $49.90",
      "image": { "url": "https://picsum.photos/800/600" },
      "buttons": [
        { "type": "url", "text": "See details", "url": "https://digitalsac.com.br" }
      ]
    },
    {
      "body": "Pro Plan",
      "footer": "Starting at $99.98",
      "image": { "url": "https://picsum.photos/801/600" },
      "buttons": [
        { "type": "reply", "text": "Tell me more", "id": "pro_plan" }
      ]
    }
  ]
  ```

  ### Send Media With Caption
  1. Connect a node providing binary data.
  2. Choose **Send Media With Caption**, fill the connection UUID, **Caption**, **Phone Number** and **External Key**.
  3. Supported types: images (JPG/PNG/GIF), documents (PDF/DOC), videos (MP4/AVI), audio (MP3/WAV).

  ### Send Base64 File
  Provide the file as base64, the MIME type, the file name and (optionally) a caption.

  To convert a file to base64:
  - Linux/macOS: `base64 file.pdf`
  - Windows: `[Convert]::ToBase64String([IO.File]::ReadAllBytes("file.pdf"))`

  ### Tags
  - **List Tags** — no extra params.
  - **Link Tag** — `{ "ticketId": 123, "tagId": 456 }`.
  - **Create Tag** — fill **Tag Name** and **Tag Color** (hex format like `#FF5733`).

  ### Kanbans
  - **List Kanbans** — fill **User ID**.
  - **Link Kanban** — full payload supported:
  ```json
  {
    "ticketId": 123,
    "kanbanId": 456,
    "userId": 789,
    "value": 500.5,
    "status": "new",
    "kanbanCreatedAt": "2026-03-09T10:00:00Z",
    "shortDesc": "Inbound lead",
    "probability": 70,
    "funnelStatus": "open",
    "expectedCloseAt": "2026-04-01T12:00:00Z",
    "assignedUserId": 12
  }
  ```
  Required: `ticketId`, `kanbanId`, `userId`. Everything else is optional.

  ### Wallets
  - **List Wallets** — no extra params.
  - **Link Wallet** — `{ "ticketId": 123, "userId": 456 }`.

  ### Scheduling

  **List Services** — optional **User ID** to filter services by attendant.

  **List Available Users**
  - **Service ID**, **Date** (`YYYY-MM-DD`), optional **Time** (`HH:mm`).

  **List Available Slots**
  - **Service ID**, **User ID**, **Date** (`YYYY-MM-DD`).

  **List Schedules**
  - **Date** (`YYYY-MM-DD`), optional **User ID**.

  **Create Schedule**
  | Field                      | Required | Notes                                                       |
  |----------------------------|----------|-------------------------------------------------------------|
  | Service ID                 | yes      |                                                             |
  | User ID                    | yes      |                                                             |
  | Date / Time                | yes      | `YYYY-MM-DD` and `HH:mm`                                    |
  | Contact Name / Phone       | yes      | Contact is created if it does not exist yet                 |
  | Notes                      | no       |                                                             |
  | WhatsApp Connection ID     | no       | Defaults to the first available connection                  |
  | Custom Message             | no       |                                                             |
  | Reminders (minutes)        | no       | Comma separated, e.g. `60,240,1440`                         |
  | Interval Duration          | no       | Default `30` minutes                                        |
  | Close Ticket After         | no       | Closes the originating ticket on success                    |

  Sample response:
  ```json
  {
    "status": 1,
    "mensagem": "Schedule created successfully",
    "scheduleId": 123,
    "contactId": 456,
    "whatsappId": 789
  }
  ```

  **Cancel Schedule** — fill **Schedule ID**.

  **Generate Calendar Link (.ics)** — fill **Schedule ID**. Returns a downloadable `.ics` URL plus schedule metadata (client, service, date, attendant) so you can:
  - send the link directly to the customer,
  - trigger an automated `.ics` download,
  - import into Google Calendar / Outlook / Apple Calendar.

  ### Scheduled Messaging (Typebot)

  **List Scheduled Messages (Typebot)**
  - Optional filters: **Status**, **Ticket ID**, **Phone Number**, **Limit**, **Offset**.
  - Returns each scheduled item with `messageId` (used by **Cancel Scheduled Message**).

  **Schedule Message (Typebot)** — fill **Scheduled Message Data (JSON)** with payload accepted by `/typebot/agendar_mensagem`, for example:
  ```json
  {
    "number": "5511999999999",
    "name": "João",
    "body": "Olá João, passando para lembrar do seu atendimento.",
    "date": "29/05/2026",
    "time": "10:00"
  }
  ```
  `timezone` is optional. If omitted, Digitalsac uses the tenant timezone.

  **Cancel Scheduled Message** — fill **Scheduled Message ID** (`messageId` returned by the scheduling endpoint).

  #### List WABA Templates
  Lists all WhatsApp Business templates available for a connection. Fill **WhatsApp ID**.

  Sample response:
  ```json
  [
    { "id": "123456789", "name": "welcome", "language": "pt_BR", "category": "MARKETING", "status": "APPROVED", "alreadyImported": true },
    { "id": "987654321", "name": "order_confirmation", "language": "pt_BR", "category": "UTILITY", "status": "APPROVED", "alreadyImported": false }
  ]
  ```

  ### 📤 Send WABA Template (dynamic)

  The most powerful operation in this release. Supports any combination of static template fields, dynamic body variables, dynamic header media or text, and URL button parameters.

  **Fields**

  | Field                       | Type     | Required | Description                                                                                              |
  |-----------------------------|----------|----------|----------------------------------------------------------------------------------------------------------|
  | WhatsApp ID                 | number   | yes      | WhatsApp WABA connection ID                                                                              |
  | Template ID                 | number   | yes      | Template ID stored in Digitalsac after sync                                                              |
  | Phone Number                | string   | yes      | Recipient with country and area code (e.g. `5511999999999`)                                              |
  | Body Parameters (JSON)      | json     | no       | Body variables — supports `{"1":"John","2":"123"}` and named keys                                        |
  | Header Media URL            | string   | no       | Public URL for `IMAGE`/`VIDEO`/`DOCUMENT` headers — overrides stored media                               |
  | Header Parameters (JSON)    | json     | no       | Variables for `TEXT` headers (e.g. `{"1":"April Promotion"}`)                                            |
  | Button Parameters (JSON)    | json     | no       | Overrides for dynamic URL buttons — e.g. `[{"index":0,"type":"url","value":"order-123"}]`                |

  **Usage scenarios**

  1. **Body variables only**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "templateParams": { "1": "John", "2": "9988" }
  }
  ```

  2. **Image header dynamic**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "mediaUrl": "https://cdn.example.com/banner.jpg",
    "templateParams": { "1": "John" }
  }
  ```

  3. **Image header — fallback to stored media**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10
  }
  ```

  4. **Document header dynamic**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "mediaUrl": "https://cdn.example.com/contract.pdf"
  }
  ```

  5. **Dynamic URL button**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "buttonParams": [
      { "index": 0, "type": "url", "value": "order-123" }
    ]
  }
  ```

  6. **Text header with variable**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "headerParams": { "1": "April Promotion" }
  }
  ```

  7. **Combined header + body + button**
  ```json
  {
    "templateId": 1,
    "phoneNumber": "5511999999999",
    "whatsappId": 10,
    "mediaUrl": "https://cdn.example.com/banner.jpg",
    "templateParams": { "1": "John", "2": "9988" },
    "buttonParams": [{ "index": 0, "type": "url", "value": "order-123" }]
  }
  ```

  **Sample successful response**
  ```json
  {
    "success": true,
    "message": "Template sent successfully",
    "messageId": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIYIDNBNjdFRjg5...",
    "templateName": "welcome",
    "recipient": "5511999999999",
    "whatsappId": 3,
    "ticketId": 4521
  }
  ```

  **HTTP errors**

  | Status | Reason                                                                                            |
  |--------|---------------------------------------------------------------------------------------------------|
  | 400    | Missing required fields, invalid JSON, template requires media but neither `mediaUrl` nor stored `header_media` is available, invalid button override |
  | 404    | Template or WABA connection not found                                                             |
  | 500    | Meta Graph API error (full error returned in `details`)                                           |

  **Notes**

  - Empty optional fields fall back to template-level defaults (full backward compatibility).
  - Placeholders `{{1}}`, `{{2}}`, … are replaced from `templateParams` / `headerParams` indexed by number.
  - Static URL buttons no longer send invalid `parameters` (Meta would reject them).
  - Template language is taken from the stored template; falls back to `pt_BR`.

  ### Send Short SMS
  Fill **Phone Number** and **SMS Message** to use the `/typebot/enviar_sms` endpoint.

  ---

  ## 🧪 Example flows

  **Send a PDF to a contact**
  1. Read Binary File → reads `report.pdf`.
  2. Digitalsac → **Send Message** with the connection UUID and the binary attachment connected.

  **Create a tag and link it to a ticket**
  1. Digitalsac → **Create Tag** (`Tech Support`, `#2196F3`).
  2. Digitalsac → **Link Tag** with `{ "ticketId": 123, "tagId": "{{$json.tagId}}" }`.

  **Schedule + close ticket**
  1. Webhook captures the lead.
  2. Digitalsac → **Create Schedule** with `closeTicket: true`.

  **Marketing campaign with WABA template + banner + dynamic URL**
  1. Database → list of customers.
  2. Loop Over Items.
  3. Digitalsac → **Send WABA Template** with `mediaUrl`, `templateParams` and `buttonParams`.

  **Order approved notification (WABA)**
  ```
  Webhook (order approved)
      ↓
  Digitalsac → List WABA Templates (find confirmation template)
      ↓
  Digitalsac → Send WABA Template
      templateParams: {
        "1": "{{$json.customer_name}}",
        "2": "{{$json.order_id}}",
        "3": "{{$json.total}}",
        "4": "{{$json.delivery_date}}"
      }
  ```

  ## 💡 Practical use cases

  **Interactive support bot**
  1. Send Buttons → main menu
  2. Send List → product/service catalog
  3. Send Media → product images
  4. Send Base64 → contracts / documents

  **E-commerce automation**
  ```
  Webhook → Send Buttons → Send List (payment methods) → Send Base64 (PDF contract) → Send Media (receipt)
  ```

  **Automated visual reports**
  ```
  Scheduler → HTTP Request → Code (build chart base64) → Send Base64 (visual report)
  ```

  ## 🤝 Contributing

  Issues and pull requests are welcome at [github.com/digitalsac-io/n8n-nodes-digitalsac](https://github.com/digitalsac-io/n8n-nodes-digitalsac).

  ## 📄 License

  [MIT](LICENSE.md). Support: [contato@digitalsac.io](mailto:contato@digitalsac.io).

ai_documentation_summary:
  {"purpose":"A community n8n node that integrates with the Digitalsac Izing Pro API to manage WhatsApp communications, ticket support systems, scheduling, and WABA templates.","capabilities":["Send WhatsApp messages (text, buttons, lists, carousels, media)","Manage tickets (transfer to queue/agent, close, assign)","Handle tags, kanbans, and wallets","Manage scheduling (services, slots, appointments, calendar links)","Send WABA templates with dynamic payloads and media headers","Send short SMS messages","Validate WhatsApp numbers, CPFs, and dates"],"authentication":"API Key (Bearer Token) via Base URL and Token fields in credentials","commonUseCases":["Automated customer support via WhatsApp","Appointment scheduling and calendar generation","Ticket management and agent assignment","Sending promotional messages with media attachments"],"limitations":["Requires a Digitalsac Izing Pro API account and credentials","Documentation is English-only","Some operations require specific parameters like connection UUIDs"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code","n8n-nodes-base.webhook"]}


node_type: n8n-nodes-seleqt.seleqt
package_name: n8n-nodes-seleqt
display_name: Seleqt
description: Interact with the Seleqt lead generation, enrichment, and campaign API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vitalii_podgornii
author_github_url: https://github.com/AdilSeleqt/
npm_package_name: n8n-nodes-seleqt
npm_version: 0.3.0
community_fetched_at: 2026-07-14T14:40:34.289Z
ai_summary_generated_at: 2026-05-22 10:26:01
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Lead List",
          "value": "leadList"
        },
        {
          "name": "Prospect",
          "value": "prospect"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a campaign",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "campaign"
                  }
                }
              ]
            },
            "request": {
              "url": "/public/campaigns/",
              "body": {
                "name": "={{$parameter.name}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a new draft campaign in the active workspace"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a campaign",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "campaign"
                  }
                }
              ]
            },
            "request": {
              "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/\" }}",
              "method": "GET"
            }
          },
          "description": "Retrieve one campaign by ID with its full step tree"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "List campaigns",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "campaigns"
                  }
                }
              ]
            },
            "request": {
              "url": "/public/campaigns/",
              "method": "GET"
            }
          },
          "description": "Retrieve every campaign visible to the API key"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get campaign analytics",
          "routing": {
            "request": {
              "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/analytics/\" }}",
              "method": "GET"
            }
          },
          "description": "Retrieve aggregated stats (sent, opened, replied, ...) for a campaign"
        },
        {
          "name": "Get Steps",
          "value": "getSteps",
          "action": "Get campaign steps",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "steps"
                  }
                }
              ]
            },
            "request": {
              "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/steps/\" }}",
              "method": "GET"
            }
          },
          "description": "Retrieve the ordered list of steps for a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a campaign",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "campaign"
                  }
                }
              ]
            },
            "request": {
              "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/\" }}",
              "body": {},
              "method": "PATCH"
            }
          },
          "description": "Patch campaign settings (name, timezone, sending limits, …)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Add Leads",
          "value": "addLeads",
          "action": "Add leads to a list",
          "routing": {
            "request": {
              "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/add-leads/\" }}",
              "body": {
                "company_ids": "={{$parameter.addCompanyIds}}",
                "prospect_ids": "={{$parameter.addProspectIds}}"
              },
              "method": "POST"
            }
          },
          "description": "Attach existing prospect IDs (or company IDs for COMPANY lists) to a lead list"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead list",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "lead_list"
                  }
                }
              ]
            },
            "request": {
              "url": "/public/lead-lists/",
              "body": {
                "name": "={{$parameter.name}}",
                "search_type": "={{$parameter.searchType}}"
              },
              "method": "POST"
            }
          },
          "description": "Create a new draft lead list (PEOPLE or COMPANY)"
        },
        {
          "name": "Enrich",
          "value": "enrich",
          "action": "Enrich a lead list",
          "routing": {
            "request": {
              "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/enrichment/\" }}",
              "method": "POST"
            }
          },
          "description": "Trigger contact-info enrichment (email/phone) for prospects in a lead list"
        },
        {
          "name": "Get Leads",
          "value": "getLeads",
          "action": "Get leads from a list",
          "routing": {
            "request": {
              "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/leads/\" }}",
              "method": "GET"
            }
          },
          "description": "Retrieve the prospects/companies currently in a lead list"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "List lead lists",
          "routing": {
            "request": {
              "url": "/public/lead-lists/",
              "method": "GET"
            }
          },
          "description": "Retrieve every lead list in the active workspace"
        },
        {
          "name": "Move to Campaign",
          "value": "moveToCampaign",
          "action": "Move list to a campaign",
          "routing": {
            "request": {
              "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/move-to-campaign/\" }}",
              "body": {
                "campaign_id": "={{$parameter.targetCampaignId}}",
                "prospect_ids": "={{$parameter.moveProspectIds}}"
              },
              "method": "POST"
            }
          },
          "description": "Move prospects from a PEOPLE lead list into a campaign without re-importing them"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "leadList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search prospects or companies",
          "routing": {
            "request": {
              "url": "/public/prospects/search/",
              "body": {
                "page": "={{$parameter.page}}",
                "filters": "={{JSON.parse($parameter.filters || \"{}\")}}",
                "page_size": "={{$parameter.pageSize}}",
                "search_type": "={{$parameter.searchType}}"
              },
              "method": "POST"
            }
          },
          "description": "Filter Seleqt prospects (or companies) by job title, location, industry, etc. Results are paginated."
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prospect"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message to a prospect",
          "routing": {
            "request": {
              "url": "={{ \"/public/chats/\" + $parameter.prospectId + \"/send-message/\" }}",
              "body": {
                "message": "={{$parameter.message}}"
              },
              "method": "POST"
            }
          },
          "description": "Reply to a prospect's existing conversation (LinkedIn or email — Seleqt picks the channel based on the prospect's last message)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a campaign",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "campaign"
              }
            }
          ]
        },
        "request": {
          "url": "/public/campaigns/",
          "body": {
            "name": "={{$parameter.name}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a new draft campaign in the active workspace",
      "resource": "campaign"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a campaign",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "campaign"
              }
            }
          ]
        },
        "request": {
          "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/\" }}",
          "method": "GET"
        }
      },
      "description": "Retrieve one campaign by ID with its full step tree",
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "List campaigns",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "campaigns"
              }
            }
          ]
        },
        "request": {
          "url": "/public/campaigns/",
          "method": "GET"
        }
      },
      "description": "Retrieve every campaign visible to the API key",
      "resource": "campaign"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get campaign analytics",
      "routing": {
        "request": {
          "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/analytics/\" }}",
          "method": "GET"
        }
      },
      "description": "Retrieve aggregated stats (sent, opened, replied, ...) for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Steps",
      "value": "getSteps",
      "action": "Get campaign steps",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "steps"
              }
            }
          ]
        },
        "request": {
          "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/steps/\" }}",
          "method": "GET"
        }
      },
      "description": "Retrieve the ordered list of steps for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a campaign",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "campaign"
              }
            }
          ]
        },
        "request": {
          "url": "={{ \"/public/campaigns/\" + $parameter.campaignId + \"/\" }}",
          "body": {},
          "method": "PATCH"
        }
      },
      "description": "Patch campaign settings (name, timezone, sending limits, …)",
      "resource": "campaign"
    },
    {
      "name": "Add Leads",
      "value": "addLeads",
      "action": "Add leads to a list",
      "routing": {
        "request": {
          "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/add-leads/\" }}",
          "body": {
            "company_ids": "={{$parameter.addCompanyIds}}",
            "prospect_ids": "={{$parameter.addProspectIds}}"
          },
          "method": "POST"
        }
      },
      "description": "Attach existing prospect IDs (or company IDs for COMPANY lists) to a lead list",
      "resource": "leadList"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead list",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "lead_list"
              }
            }
          ]
        },
        "request": {
          "url": "/public/lead-lists/",
          "body": {
            "name": "={{$parameter.name}}",
            "search_type": "={{$parameter.searchType}}"
          },
          "method": "POST"
        }
      },
      "description": "Create a new draft lead list (PEOPLE or COMPANY)",
      "resource": "leadList"
    },
    {
      "name": "Enrich",
      "value": "enrich",
      "action": "Enrich a lead list",
      "routing": {
        "request": {
          "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/enrichment/\" }}",
          "method": "POST"
        }
      },
      "description": "Trigger contact-info enrichment (email/phone) for prospects in a lead list",
      "resource": "leadList"
    },
    {
      "name": "Get Leads",
      "value": "getLeads",
      "action": "Get leads from a list",
      "routing": {
        "request": {
          "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/leads/\" }}",
          "method": "GET"
        }
      },
      "description": "Retrieve the prospects/companies currently in a lead list",
      "resource": "leadList"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "List lead lists",
      "routing": {
        "request": {
          "url": "/public/lead-lists/",
          "method": "GET"
        }
      },
      "description": "Retrieve every lead list in the active workspace",
      "resource": "leadList"
    },
    {
      "name": "Move to Campaign",
      "value": "moveToCampaign",
      "action": "Move list to a campaign",
      "routing": {
        "request": {
          "url": "={{ \"/public/lead-lists/\" + $parameter.leadListId + \"/move-to-campaign/\" }}",
          "body": {
            "campaign_id": "={{$parameter.targetCampaignId}}",
            "prospect_ids": "={{$parameter.moveProspectIds}}"
          },
          "method": "POST"
        }
      },
      "description": "Move prospects from a PEOPLE lead list into a campaign without re-importing them",
      "resource": "leadList"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search prospects or companies",
      "routing": {
        "request": {
          "url": "/public/prospects/search/",
          "body": {
            "page": "={{$parameter.page}}",
            "filters": "={{JSON.parse($parameter.filters || \"{}\")}}",
            "page_size": "={{$parameter.pageSize}}",
            "search_type": "={{$parameter.searchType}}"
          },
          "method": "POST"
        }
      },
      "description": "Filter Seleqt prospects (or companies) by job title, location, industry, etc. Results are paginated.",
      "resource": "prospect"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message to a prospect",
      "routing": {
        "request": {
          "url": "={{ \"/public/chats/\" + $parameter.prospectId + \"/send-message/\" }}",
          "body": {
            "message": "={{$parameter.message}}"
          },
          "method": "POST"
        }
      },
      "description": "Reply to a prospect's existing conversation (LinkedIn or email — Seleqt picks the channel based on the prospect's last message)",
      "resource": "inbox"
    }
  ]

npm_readme:
  # n8n-nodes-seleqt

  <p align="center">
    <img src="./seleqt-n8n-banner.png" width="80%" />
  </p>

  Official [n8n](https://n8n.io) node for [Seleqt](https://seleqt.ai) — integrate Seleqt's AI-powered outbound engine directly into n8n to find your ideal buyers from 700M+ contacts, qualify them automatically, and send hyper-personalized messages across LinkedIn and email so you book more meetings without the manual grind.

  ---

  ## Features
  <p align="center">
    <img src="./seleqt-n8n-banner2.png" width="23%" />
    <img src="./seleqt-n8n-banner3.png" width="23%" />
    <img src="./seleqt-n8n-banner4.png" width="23%" />
  </p>

  - **Campaigns** — create, update, and retrieve campaigns and their analytics
  - **Lead Lists** — build lists, add leads, enrich profiles, and move leads into campaigns
  - **Prospect Search** — search and filter prospects from the Seleqt database
  - **Inbox** — send messages to prospects programmatically

  ---

  ## Installation

  ### n8n Cloud / Self-hosted UI

  1. Go to **Settings → Community Nodes**
  2. Click **Install**
  3. Enter `n8n-nodes-seleqt` and confirm

  The Seleqt node will appear in the node panel under **Transform**.

  ### Self-hosted Docker

  ```bash
  docker exec -u node <your-n8n-container> npm install n8n-nodes-seleqt
  docker restart <your-n8n-container>
  ```

  ---

  ## Credentials

  1. Log in to [Seleqt](https://seleqt.ai) and go to **Settings → API Keys → New key**
  2. In n8n, open any workflow and add the **Seleqt** node
  3. Click **Credential → Create New**
  4. Paste your API key and click **Test** to verify

  > The Base URL defaults to `https://api.seleqt.ai/api/v1`. Only change this if you are on a self-hosted Seleqt instance.

  ---

  ## Supported Operations

  ### Campaign

  | Operation | Description |
  |-----------|-------------|
  | Get Many | List all campaigns |
  | Get | Retrieve a single campaign by ID |
  | Create | Create a new campaign |
  | Update | Update campaign details |
  | Get Stats | Retrieve campaign analytics |
  | Get Steps | Retrieve campaign steps |

  ### Lead List

  | Operation | Description |
  |-----------|-------------|
  | Get Many | List all lead lists |
  | Get Leads | Retrieve leads in a list |
  | Create | Create a new lead list |
  | Add Leads | Add leads to an existing list |
  | Move to Campaign | Move leads from a list into a campaign |
  | Enrich | Enrich lead profiles in a list |

  ### Prospect

  | Operation | Description |
  |-----------|-------------|
  | Search | Search and filter prospects |

  ### Inbox

  | Operation | Description |
  |-----------|-------------|
  | Send Message | Send a message to a prospect |

  ---

  ## API Reference

  Full API documentation: [https://docs.seleqt.ai](https://docs.seleqt.ai)

  ---

  ## Development

  ```bash
  npm install
  npm run build       # compile TypeScript + copy assets
  npm run dev         # watch mode
  npm run lint        # run n8n-nodes-base linting rules
  npm run lintfix     # auto-fix lint issues
  ```

  To test locally inside a running n8n instance:

  ```bash
  # In this repo
  npm link

  # In your n8n custom nodes directory (~/.n8n/custom)
  npm link n8n-nodes-seleqt
  ```

  Then restart n8n.

  ---

  ## License

  [MIT](./LICENSE) © Seleqt

ai_documentation_summary:
  {"purpose":"This n8n node enables integration with the Seleqt AI-powered lead generation platform to manage campaigns, enrich lead profiles, search prospects, and send personalized outreach messages via LinkedIn and email.","capabilities":["Create, update, and retrieve campaigns with analytics","Build and manage lead lists","Add and enrich lead profiles","Move leads from lists into campaigns","Search and filter prospects from the database","Send hyper-personalized messages to prospects"],"authentication":"API key required","commonUseCases":["Automated outbound lead generation","Lead qualification and enrichment workflows","Personalized LinkedIn and email outreach campaigns","Meeting booking automation"],"limitations":["Base URL defaults to the public Seleqt instance; self-hosted instances require manual configuration","Full API details are external to this node and must be consulted at docs.seleqt.ai"],"relatedNodes":["n8n-nodes-base.httpRequest","n8n-nodes-base.code"]}


