# nodes

node_type: n8n-nodes-hyperspell.hyperspell
package_name: n8n-nodes-hyperspell
display_name: Hyperspell
description: Add documents to Hyperspell and run semantic search or grounded generation from any workflow
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: david-hyperspell
author_github_url: https://github.com/hyperspell/hyperspell-n8n-node.git
npm_package_name: n8n-nodes-hyperspell
npm_version: 0.4.0
community_fetched_at: 2026-07-14T14:40:34.554Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "document",
      "options": [
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Live",
          "value": "live"
        },
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a document to the index",
          "routing": {
            "request": {
              "url": "/memories/add",
              "method": "POST"
            }
          },
          "description": "Index a document so it becomes searchable"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document by resource ID",
          "routing": {
            "request": {
              "url": "=/memories/get/{{$parameter.source}}/{{$parameter.resourceId}}",
              "method": "GET"
            }
          },
          "description": "Retrieve a single document and its metadata"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List documents in the index",
          "routing": {
            "request": {
              "url": "/memories/list",
              "method": "GET"
            }
          },
          "description": "Paginate through indexed documents with optional filters"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document from the index",
          "routing": {
            "request": {
              "url": "=/memories/delete/{{$parameter.source}}/{{$parameter.resourceId}}",
              "method": "DELETE"
            }
          },
          "description": "Remove a document and its associated chunks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search the index",
          "routing": {
            "request": {
              "url": "/memories/query",
              "body": {
                "answer": false
              },
              "method": "POST"
            }
          },
          "description": "Retrieve chunks ranked by semantic + lexical relevance"
        },
        {
          "name": "Answer",
          "value": "answer",
          "action": "Generate an answer grounded in the index",
          "routing": {
            "request": {
              "url": "/memories/query",
              "body": {
                "answer": true
              },
              "method": "POST"
            }
          },
          "description": "Run a query and get a grounded answer with cited source documents"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "List Sources",
          "value": "listSources",
          "action": "List live queryable sources",
          "routing": {
            "request": {
              "url": "/live/sources",
              "method": "GET"
            }
          },
          "description": "List connected sources and the live capabilities (search, fetch, list) each supports"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search a source live",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/live/{{$parameter.source}}/search",
              "method": "POST"
            }
          },
          "description": "Search a connected source live for data that may not be indexed yet"
        },
        {
          "name": "Get Resource",
          "value": "getResource",
          "action": "Fetch one resource live",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/live/{{$parameter.source}}/resources/{{$parameter.resourceId}}",
              "method": "GET"
            }
          },
          "description": "Fetch a single resource live by its ID (may fan out into several documents)"
        },
        {
          "name": "List Resources",
          "value": "listResources",
          "action": "List resources from a source live",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "=/live/{{$parameter.source}}/resources",
              "method": "GET"
            }
          },
          "description": "Paginate through a source's resources live"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "live"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add",
      "value": "add",
      "action": "Add a document to the index",
      "routing": {
        "request": {
          "url": "/memories/add",
          "method": "POST"
        }
      },
      "description": "Index a document so it becomes searchable",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document by resource ID",
      "routing": {
        "request": {
          "url": "=/memories/get/{{$parameter.source}}/{{$parameter.resourceId}}",
          "method": "GET"
        }
      },
      "description": "Retrieve a single document and its metadata",
      "resource": "document"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List documents in the index",
      "routing": {
        "request": {
          "url": "/memories/list",
          "method": "GET"
        }
      },
      "description": "Paginate through indexed documents with optional filters",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document from the index",
      "routing": {
        "request": {
          "url": "=/memories/delete/{{$parameter.source}}/{{$parameter.resourceId}}",
          "method": "DELETE"
        }
      },
      "description": "Remove a document and its associated chunks",
      "resource": "document"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search the index",
      "routing": {
        "request": {
          "url": "/memories/query",
          "body": {
            "answer": false
          },
          "method": "POST"
        }
      },
      "description": "Retrieve chunks ranked by semantic + lexical relevance",
      "resource": "search"
    },
    {
      "name": "Answer",
      "value": "answer",
      "action": "Generate an answer grounded in the index",
      "routing": {
        "request": {
          "url": "/memories/query",
          "body": {
            "answer": true
          },
          "method": "POST"
        }
      },
      "description": "Run a query and get a grounded answer with cited source documents",
      "resource": "search"
    },
    {
      "name": "List Sources",
      "value": "listSources",
      "action": "List live queryable sources",
      "routing": {
        "request": {
          "url": "/live/sources",
          "method": "GET"
        }
      },
      "description": "List connected sources and the live capabilities (search, fetch, list) each supports",
      "resource": "live"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search a source live",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/live/{{$parameter.source}}/search",
          "method": "POST"
        }
      },
      "description": "Search a connected source live for data that may not be indexed yet",
      "resource": "live"
    },
    {
      "name": "Get Resource",
      "value": "getResource",
      "action": "Fetch one resource live",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/live/{{$parameter.source}}/resources/{{$parameter.resourceId}}",
          "method": "GET"
        }
      },
      "description": "Fetch a single resource live by its ID (may fan out into several documents)",
      "resource": "live"
    },
    {
      "name": "List Resources",
      "value": "listResources",
      "action": "List resources from a source live",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "=/live/{{$parameter.source}}/resources",
          "method": "GET"
        }
      },
      "description": "Paginate through a source's resources live",
      "resource": "live"
    }
  ]

npm_readme:
  # n8n-nodes-hyperspell

  An [n8n](https://n8n.io/) community node for [Hyperspell](https://hyperspell.com) — add documents, run semantic search, generate grounded answers, and query connected sources live from any workflow.

  Hyperspell is the memory layer for your business: it unifies everything a company knows — across Slack, email, drive, CRM, and more — and makes it instantly queryable by people and AI agents.

  ## Installation

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

  In short, in your n8n instance: **Settings → Community Nodes → Install** and enter `n8n-nodes-hyperspell`.

  ## Credentials

  You'll need a Hyperspell API key. Create one at [app.hyperspell.com](https://app.hyperspell.com) under **Settings → API Keys**.

  The credential takes three fields:
  - **API Key** — your Hyperspell API key (sent as `Authorization: Bearer …`)
  - **Act as User** — optional user ID (sent as `X-As-User`). An API key alone is scoped to the app; set this to query a specific user's documents and connected sources. Required for Live operations.
  - **Base URL** — defaults to `https://api.hyperspell.com`. Override only for self-hosted Hyperspell deployments.

  ## Operations

  The node exposes three resources with the following operations:

  ### Document

  | Operation | Description |
  |---|---|
  | **Add** | Index a document. Supply `text`, optional `title`, `resourceId` (upsert key), `date`, and `metadata`. |
  | **Get** | Retrieve a single document by `source` + `resourceId`. |
  | **List** | Paginate through indexed documents. Supports filters by source, status, and metadata (MongoDB-style). |
  | **Delete** | Remove a document and its chunks. |

  ### Search

  | Operation | Description |
  |---|---|
  | **Search** | Return the top-ranked chunks for a query (semantic + lexical). |
  | **Answer** | Same query, but Hyperspell also generates a grounded answer with citations. |

  ### Live

  Query a user's connected sources (Slack, Notion, HubSpot, …) directly — useful for data that isn't indexed yet. Live operations act on a specific user's connections, so set **Act as User** in the credential.

  **Output shape:** Search and Get Resource emit **one item per document**, with the response envelope's `indexed` and `notes` fields merged onto each item. List Resources emits **one item per resource** with `next_cursor` on each — feed it back via the **Cursor** field to page manually when **Return All** is off (`null` means last page). Document content lives under each item's nested `document` tree.

  | Operation | Description |
  |---|---|
  | **List Sources** | List the user's connected sources and the live capabilities each supports. |
  | **Search** | Search a connected source live (where the source supports it). |
  | **Get Resource** | Fetch a single resource live by ID, optionally queueing it for indexing. |
  | **List Resources** | Paginate through a source's resources live (cursor-based). |

  ## Use as an AI Agent tool

  This node sets `usableAsTool: true`, so n8n's **Tools Agent** can invoke any operation directly. Connect the Hyperspell node as a Tool input on an Agent node and the LLM will call `Search` / `Answer` whenever it needs grounded context.

  ## Example workflow

  A common pattern:

  1. **Trigger** (Schedule, Webhook, anything) →
  2. **HTTP Request / Slack / Gmail** to fetch content →
  3. **Hyperspell — Document → Add** to index it →
  4. Later: **Hyperspell — Search → Answer** to query the index from chat / another workflow.

  ## Development

  To hack on this node locally, see [CONTRIBUTING.md](./CONTRIBUTING.md) — it covers the two install paths (`npm run dev` hot-reload vs `npm pack` tarball install), how to mint a local Hyperspell API key, and the per-operation curl recipes for debugging routing.

  ## Resources

  - [Hyperspell docs](https://docs.hyperspell.com)
  - [Hyperspell GitHub](https://github.com/hyperspell)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)

  ## License

  [MIT](./LICENSE.md)

ai_documentation_summary:
  {"purpose":"Adds documents to Hyperspell for indexing and lets workflows perform semantic search, grounded Q&A, and live queries against connected sources. It serves as a memory/search layer for company knowledge across tools like Slack, email, drive, and CRM.","capabilities":["Add documents with text, title, resourceId, date, and metadata","Get a single indexed document by source and resourceId","List indexed documents with pagination and filters","Delete indexed documents and their chunks","Semantic + lexical search over indexed content","Generate grounded answers with citations","List a user's connected live sources and their capabilities","Search connected sources live","Fetch a live resource by ID and optionally queue it for indexing","List live resources with cursor-based pagination"],"authentication":"API key required; sent as Bearer token. Optional 'Act as User' field for user-scoped and Live operations. Base URL can be overridden for self-hosted deployments.","commonUseCases":["Index content from workflows for later retrieval","Answer questions over previously stored company knowledge","Query live connected sources when data is not yet indexed","Use as a tool for an n8n AI Agent to fetch grounded context"],"limitations":["Live operations require 'Act as User' to be set","Live operations depend on whether the connected source supports the requested capability","Base URL override is intended only for self-hosted Hyperspell deployments"],"relatedNodes":["HTTP Request","Slack","Gmail","Tools Agent"]}


node_type: n8n-nodes-astrolabe.astrolabe
package_name: n8n-nodes-astrolabe
display_name: Astrolabe
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: okitooo
author_github_url: https://github.com/astrolabe-chat/
npm_package_name: n8n-nodes-astrolabe
npm_version: 0.6.0
community_fetched_at: 2026-07-14T14:40:34.555Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Sovereign EU AI for the social economy — chat, embeddings and knowledge bases (OpenAI-compatible API)

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "model",
      "options": [
        {
          "name": "AI",
          "value": "model",
          "description": "Chat completions and embeddings"
        },
        {
          "name": "Chunk",
          "value": "chunk",
          "description": "Individual extracts inside a document"
        },
        {
          "name": "Document",
          "value": "document",
          "description": "Documents inside a knowledge base"
        },
        {
          "name": "Knowledge Base",
          "value": "knowledgeBase",
          "description": "RAG knowledge bases"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "chat",
      "options": [
        {
          "name": "Create an Embedding",
          "value": "embedding",
          "action": "Create an embedding",
          "description": "Turn text into a vector for semantic search or RAG"
        },
        {
          "name": "Message a Model",
          "value": "chat",
          "action": "Message a model",
          "description": "Send messages and get a chat completion"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "model"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a knowledge base",
          "description": "Create a knowledge base"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a knowledge base",
          "description": "Delete a knowledge base and all its content"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List knowledge bases",
          "description": "List all knowledge bases"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search a knowledge base",
          "description": "Semantic search over a base (no model call)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a knowledge base",
          "description": "Rename or re-slug a knowledge base"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "knowledgeBase"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a document",
          "description": "Add a text document (chunked, embedded and encrypted server-side)"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document",
          "description": "Delete a document and its chunks"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document",
          "description": "Get a document by UUID or external ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List documents",
          "description": "List a base's documents"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document",
          "description": "Update a document's metadata"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add a chunk",
          "description": "Add a chunk to a document by hand"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a chunk",
          "description": "Delete a chunk"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List chunks",
          "description": "List a document's chunks (decrypted)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a chunk",
          "description": "Update a chunk"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "chunk"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create an Embedding",
      "value": "embedding",
      "action": "Create an embedding",
      "description": "Turn text into a vector for semantic search or RAG",
      "resource": "model"
    },
    {
      "name": "Message a Model",
      "value": "chat",
      "action": "Message a model",
      "description": "Send messages and get a chat completion",
      "resource": "model"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a knowledge base",
      "description": "Create a knowledge base",
      "resource": "knowledgeBase"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a knowledge base",
      "description": "Delete a knowledge base and all its content",
      "resource": "knowledgeBase"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List knowledge bases",
      "description": "List all knowledge bases",
      "resource": "knowledgeBase"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search a knowledge base",
      "description": "Semantic search over a base (no model call)",
      "resource": "knowledgeBase"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a knowledge base",
      "description": "Rename or re-slug a knowledge base",
      "resource": "knowledgeBase"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a document",
      "description": "Add a text document (chunked, embedded and encrypted server-side)",
      "resource": "document"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document",
      "description": "Delete a document and its chunks",
      "resource": "document"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document",
      "description": "Get a document by UUID or external ID",
      "resource": "document"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List documents",
      "description": "List a base's documents",
      "resource": "document"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document",
      "description": "Update a document's metadata",
      "resource": "document"
    },
    {
      "name": "Add",
      "value": "add",
      "action": "Add a chunk",
      "description": "Add a chunk to a document by hand",
      "resource": "chunk"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a chunk",
      "description": "Delete a chunk",
      "resource": "chunk"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List chunks",
      "description": "List a document's chunks (decrypted)",
      "resource": "chunk"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a chunk",
      "description": "Update a chunk",
      "resource": "chunk"
    }
  ]

npm_readme:
  # n8n-nodes-astrolabe

  [n8n](https://n8n.io) community node for **[Astrolabe](https://astrolabe.chat)** — sovereign EU AI for the social and solidarity economy. Astrolabe's API is OpenAI-compatible, so this node talks to `api.astrolabe.chat` with no code.

  [Installation](#installation) · [Credential](#credential) · [Operations](#operations) · [Development](#development) · [License](#license)

  ## Installation

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

  In n8n: **Settings → Community Nodes → Install**, then enter `n8n-nodes-astrolabe`.

  ## Credential

  1. **Credentials → New → Astrolabe API**
  2. **API Key**: your `sk-astrolabe-...` key (from the [developer portal](https://app.astrolabe.chat))
  3. **Base URL**: `https://api.astrolabe.chat/v1` (default)

  ## Operations

  The node is organised by **resource**. Every knowledge-base dropdown is loaded live from your account.

  ### AI

  | Operation | Description |
  | --- | --- |
  | **Message a Model** | Chat completion. The model is picked from a dropdown loaded live from the Astrolabe catalogue. Returns `content` + `reasoning_content` (internal reasoning) + `usage`. Optionally **grounds the answer on one or more knowledge bases** (RAG) — the extracts used come back in `astrolabe_sources`. RAG supports **static or agentic** mode (the model searches on its own, multi-step — trace in `astrolabe_steps`), plus facet filter, date range, graph expansion, history window and source-link citation. |
  | **Create an Embedding** | Turns text into a vector for semantic search or RAG. The embedding model is picked from the same live catalogue. |

  > ⚠️ `astrolabe-base` reasons before answering: keep **Max Tokens ≥ 600** or the reply may come back empty. The node already defaults to 600.

  ### Knowledge Base

  | Operation | Endpoint |
  | --- | --- |
  | **List** | `GET /kb` |
  | **Create** | `POST /kb` (name, intent, **type `data` / `process`**, facet schema) |
  | **Update** | `PATCH /kb/{slug}` (rename / re-slug / change type) |
  | **Delete** | `DELETE /kb/{slug}` |
  | **Search** | `POST /kb/{slug}/search` — **semantic** (with a query) **and/or analytic** (filters, sort, group by, offset, date range, graph expansion, numeric aggregates), no model call |

  ### Document

  | Operation | Endpoint |
  | --- | --- |
  | **List** | `GET /kb/{slug}/documents` |
  | **Add** | `POST /kb/{slug}/documents` — text, date, external ID, source URL, facet overrides, **upsert**, **simple / AI chunking** |
  | **Get** | `GET …/documents/{id}` — by UUID **or** external ID |
  | **Update** | `PATCH …/documents/{id}` — title / date / external ID / source URL |
  | **Delete** | `DELETE …/documents/{id}` |

  ### Chunk

  | Operation | Endpoint |
  | --- | --- |
  | **List** | `GET …/documents/{id}/chunks` (decrypted) |
  | **Add** | `POST …/documents/{id}/chunks` (facets, date) |
  | **Update** | `PATCH …/chunks/{chunkId}` |
  | **Delete** | `DELETE …/chunks/{chunkId}` |

  ### Notes

  - **List** operations fan out one n8n item per result, so you can map over them directly.
  - **Search** returns a **single structured item** — `results` (the rows) plus the analytic metadata `group_by`, `total` (exact count at the chosen granularity), `truncated` (page incomplete → paginate with *Offset*), `distinct_documents` (date mode) and `aggregates` (`{field, count, sum, avg, min, max}` per numeric facet). Use a *Split Out* node on `results` to fan them out. To **count records**, set *Return* = `Documents` and read `total`; to **sum/average** a numeric facet, set *Aggregate* and read `aggregates`.
  - **Analytic search**: leave *Query* empty to list/filter only (no score, no embedding cost). Compose typed *Filters* (`eq/neq/gt/gte/lt/lte/in/contains`), exact-match *Facets*, *Date Range*, *Sort* and *Offset* freely.
  - **Documents and chunks are addressable by UUID *or* your own `external_id`.** Adding a document with an existing `external_id` **replaces** it (idempotent upsert).
  - **Chunking (Add Document)**: `Simple` (paragraphs, default) or `AI (intent-driven)`. AI chunking reveals a **Chunking Model** dropdown (default `mistral-small`) used to split the text along the base's intent — metered on your key, **on top of** the embedding cost. *Facet Overrides (JSON)* forces facet values on every chunk (takes priority over AI-extracted ones).
  - **Knowledge base type**: a base is `data` (facts, default) or `process` (playbooks describing how to run an analysis — consulted first in agentic RAG).
  - **RAG on chat**: select one or more **Knowledge Base(s)**; in **Options** set the *Knowledge Base Mode* (`static` / `agentic`), *Query*, *Facet Filter (JSON)*, *Top K*, *Date Range*, *Graph Expansion (JSON)*, *Cite Source Links*, *Search Conversation Turns* and *Max Tool Calls* (agentic). Empty fields are omitted, so a plain chat call is unchanged.
  - **JSON fields** (facets, filters, facet schema, facet overrides, graph expansion, aggregate): pass a JSON value as text, e.g. `{"theme":"billing"}`. The API accepts a JSON string or a real object.

  ## Sovereignty

  Data flows through Astrolabe's infrastructure (France / EU). Routing to a cloud model (Claude/GPT/Mistral) moves data outside the EU and is opt-in only.

  ## Development

  ```bash
  npm install
  npm run build   # tsc + icon copy
  npm run lint    # verified community node rules
  ```

  To test locally, link the package into your n8n custom folder (`~/.n8n/custom`) with `npm link`.

  ### Releasing

  CI publishes to npm **with a provenance statement** when `version` in `package.json` is new (idempotent otherwise). To release: bump the version and merge to `main`. Requires the repo secret `NPM_TOKEN` (npm Automation token).

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Astrolabe is an n8n community node for interacting with Astrolabe's OpenAI-compatible API for sovereign EU AI. It supports chat completions, embeddings, and full knowledge base/document/chunk management for RAG workflows.","capabilities":["Message a Model for chat completions with live model selection","Return reasoning content, usage, and optional knowledge-base grounded answers with sources","Support static or agentic RAG with filters, date ranges, graph expansion, history window, source links, and max tool calls","Create embeddings for semantic search or RAG","List, create, update, delete, and search knowledge bases","List, add, get, update, and delete documents in a knowledge base","List, add, update, and delete chunks for a document","Perform semantic and analytic search across knowledge bases with filters, sorting, grouping, offsets, and aggregates","Use UUID or external_id to address documents and chunks","Support document upsert by external_id"],"authentication":"API key required via Astrolabe API credentials, using an sk-astrolabe-... key and base URL https://api.astrolabe.chat/v1","commonUseCases":["Build chat workflows powered by Astrolabe models","Generate embeddings for semantic search or retrieval-augmented generation","Create and manage knowledge bases for organizational content","Ingest, update, and chunk documents for RAG pipelines","Search knowledge bases semantically or analytically for reporting and retrieval"],"limitations":["Chat with astrolabe-base requires Max Tokens to be at least 600 or the response may come back empty","AI chunking incurs additional model usage cost on top of embedding cost","Knowledge base and document search/list operations may return paginated or structured results that need splitting or pagination handling in n8n","Routing to cloud models outside Astrolabe's EU infrastructure is opt-in only"],"relatedNodes":[]}


node_type: @onlyoffice/n8n-nodes-docspace.onlyofficeDocspaceTrigger
package_name: @onlyoffice/n8n-nodes-docspace
display_name: ONLYOFFICE DocSpace Trigger
description: Starts the workflow when ONLYOFFICE DocSpace events occur
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: onlyoffice
author_github_url: https://github.com/ONLYOFFICE/onlyoffice-docspace-n8n.git
npm_package_name: @onlyoffice/n8n-nodes-docspace
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.556Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # ONLYOFFICE DocSpace n8n Nodes

  [![npm version](https://img.shields.io/npm/v/@onlyoffice/n8n-nodes-docspace.svg)](https://www.npmjs.com/package/@onlyoffice/n8n-nodes-docspace)
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/LICENSE)

  This is an n8n community node that lets you use [ONLYOFFICE DocSpace] in your n8n workflows.

  ONLYOFFICE DocSpace is a room-based collaborative platform which allows organizing a clear file structure depending on users' needs or project goals.

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

  ## Installation

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

  ### Community nodes (recommended)

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

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

  ### Manual installation

  To get started install the package in your n8n root directory:

  ```bash
  npm install @onlyoffice/n8n-nodes-docspace
  ```

  For Docker-based deployments add the following line before the font installation command in your [n8n Dockerfile]:

  ```dockerfile
  RUN cd /usr/local/lib/node_modules/n8n && npm install @onlyoffice/n8n-nodes-docspace
  ```

  ## Nodes

  This package provides the following nodes:

  - **ONLYOFFICE DocSpace**: Interact with ONLYOFFICE DocSpace API
  - **ONLYOFFICE DocSpace Trigger**: Trigger workflows on ONLYOFFICE DocSpace events

  ## Operations

  The ONLYOFFICE DocSpace node supports the following operations:

  ### File operations
  - Copy a file
  - Create a file
  - Delete a file
  - Download a file
  - Get file info
  - Get file shared link
  - Move a file
  - Update a file
  - Upload a file

  ### Folder operations
  - Copy a folder
  - Create a folder
  - Delete a folder
  - Get folder contents
  - Get folder history
  - Get folder info
  - Get folder shared link
  - Move a folder
  - Update a folder

  ### Room operations
  - Archive a room
  - Create a room
  - Get room info
  - Get room shared link
  - Invite user to a room
  - Remove user from a room
  - Search for a room
  - Search for a user in a room
  - Update a room
  - Update user in a room

  ### User operations
  - Delete a user
  - Disable a user
  - Enable a user
  - Get a user
  - Invite a user
  - Search for a user
  - Update a user

  ## Events

  The ONLYOFFICE DocSpace Trigger node supports the following webhook events:

  - All Events
  - User Created
  - User Invited
  - User Updated
  - User Deleted
  - Group Created
  - Group Updated
  - Group Deleted
  - File Created
  - File Uploaded
  - File Updated
  - File Trashed
  - File Deleted
  - File Restored
  - File Copied
  - File Moved
  - Folder Created
  - Folder Updated
  - Folder Trashed
  - Folder Deleted
  - Folder Restored
  - Folder Copied
  - Folder Moved
  - Room Created
  - Room Updated
  - Room Archived
  - Room Deleted
  - Room Restored
  - Room Copied

  ## Credentials

  This node supports the following authentication methods:

  - **API Key** (recommended)
  - **Basic Auth**
  - **OAuth2**
  - **Personal Access Token**

  Refer to [ONLYOFFICE DocSpace credentials documentation][Credentials] for detailed setup instructions.

  ## Documentation

  Detailed documentation is available in the [docs/] directory:

  - [Credentials Setup][Credentials]
  - [ONLYOFFICE DocSpace Node Operations][App Node]
  - [ONLYOFFICE DocSpace Trigger Node][Trigger Node]

  ## License

  The ONLYOFFICE DocSpace n8n Nodes are distributed under the MIT license. See [LICENSE] for more information.

  ## Versions

  See [CHANGELOG.md] for version history and release notes.

  ## Useful links & support

  | Resource | URL |
  |----------|-----|
  | ONLYOFFICE website | [onlyoffice.com](https://www.onlyoffice.com) |
  | ONLYOFFICE DocSpace | [onlyoffice.com/docspace](https://www.onlyoffice.com/docspace) |
  | n8n community nodes documentation | [docs.n8n.io](https://docs.n8n.io/integrations/community-nodes/) |
  | API documentation | [api.onlyoffice.com](https://api.onlyoffice.com/docspace/) |
  | Community forum | [community.onlyoffice.com](https://community.onlyoffice.com/) |
  | Help Center | [helpcenter.onlyoffice.com](https://helpcenter.onlyoffice.com/docspace/) |
  | Found a bug? | [Report an issue](https://github.com/ONLYOFFICE/onlyoffice-docspace-n8n/issues) |
  | Support email | [support@onlyoffice.com](mailto:support@onlyoffice.com) |

  <p align="center">Made with ❤️ by the ONLYOFFICE Team</p>

  <!-- Definitions -->

  [n8n]: https://n8n.io/
  [ONLYOFFICE DocSpace]: https://www.onlyoffice.com/docspace
  [n8n Dockerfile]: https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/Dockerfile
  [docs/]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/
  [Credentials]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/credentials/
  [App Node]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/app-node/
  [Trigger Node]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/trigger-node/
  [LICENSE]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/LICENSE
  [CHANGELOG.md]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/CHANGELOG.md

ai_documentation_summary:
  {"purpose":"Integrates ONLYOFFICE DocSpace with n8n workflows. The trigger node starts workflows when DocSpace events occur, and the companion node can perform API actions against DocSpace.","capabilities":["Triggers workflows on DocSpace webhook events such as user, group, file, folder, and room changes","Supports file operations including create, copy, update, move, delete, download, upload, and shared link retrieval","Supports folder operations including create, copy, update, move, delete, contents/history/info retrieval, and shared link retrieval","Supports room operations including create, archive, update, search, info retrieval, shared link retrieval, and user invitation/removal","Supports user operations including invite, search, get, update, enable, disable, and delete"],"authentication":"API Key, Basic Auth, OAuth2, or Personal Access Token","commonUseCases":["Automatically react to DocSpace file, folder, room, or user events in n8n","Automate file and folder management in ONLYOFFICE DocSpace","Manage DocSpace rooms and users from n8n workflows"],"limitations":["Only the Trigger node is event-based; other functionality is provided by the separate DocSpace action node","No specific rate limits or operation constraints are mentioned in the README"],"relatedNodes":["ONLYOFFICE DocSpace","ONLYOFFICE DocSpace Trigger"]}


node_type: @onlyoffice/n8n-nodes-docspace.onlyofficeDocspace
package_name: @onlyoffice/n8n-nodes-docspace
display_name: ONLYOFFICE DocSpace
description: Consume ONLYOFFICE DocSpace API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: onlyoffice
author_github_url: https://github.com/ONLYOFFICE/onlyoffice-docspace-n8n.git
npm_package_name: @onlyoffice/n8n-nodes-docspace
npm_version: 1.0.1
community_fetched_at: 2026-07-14T14:40:34.557Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "file",
      "options": [
        {
          "name": "File",
          "value": "file"
        },
        {
          "name": "Folder",
          "value": "folder"
        },
        {
          "name": "Room",
          "value": "room"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createFile",
      "options": [
        {
          "name": "Copy File",
          "value": "copyFile",
          "action": "Copy a file"
        },
        {
          "name": "Create File",
          "value": "createFile",
          "action": "Create a file"
        },
        {
          "name": "Delete File",
          "value": "deleteFile",
          "action": "Delete a file"
        },
        {
          "name": "Download File",
          "value": "downloadFile",
          "action": "Download a file"
        },
        {
          "name": "Get File Info",
          "value": "getFileInfo",
          "action": "Get the info of a file"
        },
        {
          "name": "Get File Shared Link",
          "value": "getFileSharedLink",
          "action": "Get the shared link of a file"
        },
        {
          "name": "Move File",
          "value": "moveFile",
          "action": "Move a file"
        },
        {
          "name": "Update File",
          "value": "updateFile",
          "action": "Update a file"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload a file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createFolder",
      "options": [
        {
          "name": "Copy Folder",
          "value": "copyFolder",
          "action": "Copy a folder"
        },
        {
          "name": "Create Folder",
          "value": "createFolder",
          "action": "Create a folder"
        },
        {
          "name": "Delete Folder",
          "value": "deleteFolder",
          "action": "Delete a folder"
        },
        {
          "name": "Get Folder Contents",
          "value": "getFolderContents",
          "action": "Get the contents of a folder"
        },
        {
          "name": "Get Folder History",
          "value": "getFolderHistory",
          "action": "Get the history of a folder"
        },
        {
          "name": "Get Folder Info",
          "value": "getFolderInfo",
          "action": "Get the info of a folder"
        },
        {
          "name": "Get Folder Shared Link",
          "value": "getFolderSharedLink",
          "action": "Get the shared link of a folder"
        },
        {
          "name": "Move Folder",
          "value": "moveFolder",
          "action": "Move a folder"
        },
        {
          "name": "Update Folder",
          "value": "updateFolder",
          "action": "Update a folder"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "folder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createRoom",
      "options": [
        {
          "name": "Archive Room",
          "value": "archiveRoom",
          "action": "Archive a room"
        },
        {
          "name": "Create Room",
          "value": "createRoom",
          "action": "Create a room"
        },
        {
          "name": "Get Room Info",
          "value": "getRoomInfo",
          "action": "Get the info of a room"
        },
        {
          "name": "Get Room Shared Link",
          "value": "getRoomSharedLink",
          "action": "Get the shared link of a room"
        },
        {
          "name": "Invite User",
          "value": "inviteUser",
          "action": "Invite a user to a room"
        },
        {
          "name": "Remove User",
          "value": "removeUser",
          "action": "Remove a user from a room"
        },
        {
          "name": "Search Room",
          "value": "searchRoom",
          "action": "Search for a room"
        },
        {
          "name": "Search User",
          "value": "searchUser",
          "action": "Search for a user in a room"
        },
        {
          "name": "Update Room",
          "value": "updateRoom",
          "action": "Update a room"
        },
        {
          "name": "Update User",
          "value": "updateUser",
          "action": "Update a user in a room"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "room"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getUser",
      "options": [
        {
          "name": "Delete User",
          "value": "deleteUser",
          "action": "Delete a user"
        },
        {
          "name": "Disable User",
          "value": "disableUser",
          "action": "Disable a user"
        },
        {
          "name": "Enable User",
          "value": "enableUser",
          "action": "Enable a user"
        },
        {
          "name": "Get User",
          "value": "getUser",
          "action": "Get a user"
        },
        {
          "name": "Invite User",
          "value": "inviteUser",
          "action": "Invite a user"
        },
        {
          "name": "Search User",
          "value": "searchUser",
          "action": "Search for a user"
        },
        {
          "name": "Update User",
          "value": "updateUser",
          "action": "Update a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Copy File",
      "value": "copyFile",
      "action": "Copy a file",
      "resource": "file"
    },
    {
      "name": "Create File",
      "value": "createFile",
      "action": "Create a file",
      "resource": "file"
    },
    {
      "name": "Delete File",
      "value": "deleteFile",
      "action": "Delete a file",
      "resource": "file"
    },
    {
      "name": "Download File",
      "value": "downloadFile",
      "action": "Download a file",
      "resource": "file"
    },
    {
      "name": "Get File Info",
      "value": "getFileInfo",
      "action": "Get the info of a file",
      "resource": "file"
    },
    {
      "name": "Get File Shared Link",
      "value": "getFileSharedLink",
      "action": "Get the shared link of a file",
      "resource": "file"
    },
    {
      "name": "Move File",
      "value": "moveFile",
      "action": "Move a file",
      "resource": "file"
    },
    {
      "name": "Update File",
      "value": "updateFile",
      "action": "Update a file",
      "resource": "file"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload a file",
      "resource": "file"
    },
    {
      "name": "Copy Folder",
      "value": "copyFolder",
      "action": "Copy a folder",
      "resource": "folder"
    },
    {
      "name": "Create Folder",
      "value": "createFolder",
      "action": "Create a folder",
      "resource": "folder"
    },
    {
      "name": "Delete Folder",
      "value": "deleteFolder",
      "action": "Delete a folder",
      "resource": "folder"
    },
    {
      "name": "Get Folder Contents",
      "value": "getFolderContents",
      "action": "Get the contents of a folder",
      "resource": "folder"
    },
    {
      "name": "Get Folder History",
      "value": "getFolderHistory",
      "action": "Get the history of a folder",
      "resource": "folder"
    },
    {
      "name": "Get Folder Info",
      "value": "getFolderInfo",
      "action": "Get the info of a folder",
      "resource": "folder"
    },
    {
      "name": "Get Folder Shared Link",
      "value": "getFolderSharedLink",
      "action": "Get the shared link of a folder",
      "resource": "folder"
    },
    {
      "name": "Move Folder",
      "value": "moveFolder",
      "action": "Move a folder",
      "resource": "folder"
    },
    {
      "name": "Update Folder",
      "value": "updateFolder",
      "action": "Update a folder",
      "resource": "folder"
    },
    {
      "name": "Archive Room",
      "value": "archiveRoom",
      "action": "Archive a room",
      "resource": "room"
    },
    {
      "name": "Create Room",
      "value": "createRoom",
      "action": "Create a room",
      "resource": "room"
    },
    {
      "name": "Get Room Info",
      "value": "getRoomInfo",
      "action": "Get the info of a room",
      "resource": "room"
    },
    {
      "name": "Get Room Shared Link",
      "value": "getRoomSharedLink",
      "action": "Get the shared link of a room",
      "resource": "room"
    },
    {
      "name": "Invite User",
      "value": "inviteUser",
      "action": "Invite a user to a room",
      "resource": "room"
    },
    {
      "name": "Remove User",
      "value": "removeUser",
      "action": "Remove a user from a room",
      "resource": "room"
    },
    {
      "name": "Search Room",
      "value": "searchRoom",
      "action": "Search for a room",
      "resource": "room"
    },
    {
      "name": "Search User",
      "value": "searchUser",
      "action": "Search for a user in a room",
      "resource": "room"
    },
    {
      "name": "Update Room",
      "value": "updateRoom",
      "action": "Update a room",
      "resource": "room"
    },
    {
      "name": "Update User",
      "value": "updateUser",
      "action": "Update a user in a room",
      "resource": "room"
    },
    {
      "name": "Delete User",
      "value": "deleteUser",
      "action": "Delete a user",
      "resource": "user"
    },
    {
      "name": "Disable User",
      "value": "disableUser",
      "action": "Disable a user",
      "resource": "user"
    },
    {
      "name": "Enable User",
      "value": "enableUser",
      "action": "Enable a user",
      "resource": "user"
    },
    {
      "name": "Get User",
      "value": "getUser",
      "action": "Get a user",
      "resource": "user"
    },
    {
      "name": "Invite User",
      "value": "inviteUser",
      "action": "Invite a user",
      "resource": "user"
    },
    {
      "name": "Search User",
      "value": "searchUser",
      "action": "Search for a user",
      "resource": "user"
    },
    {
      "name": "Update User",
      "value": "updateUser",
      "action": "Update a user",
      "resource": "user"
    }
  ]

npm_readme:
  # ONLYOFFICE DocSpace n8n Nodes

  [![npm version](https://img.shields.io/npm/v/@onlyoffice/n8n-nodes-docspace.svg)](https://www.npmjs.com/package/@onlyoffice/n8n-nodes-docspace)
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/LICENSE)

  This is an n8n community node that lets you use [ONLYOFFICE DocSpace] in your n8n workflows.

  ONLYOFFICE DocSpace is a room-based collaborative platform which allows organizing a clear file structure depending on users' needs or project goals.

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

  ## Installation

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

  ### Community nodes (recommended)

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

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

  ### Manual installation

  To get started install the package in your n8n root directory:

  ```bash
  npm install @onlyoffice/n8n-nodes-docspace
  ```

  For Docker-based deployments add the following line before the font installation command in your [n8n Dockerfile]:

  ```dockerfile
  RUN cd /usr/local/lib/node_modules/n8n && npm install @onlyoffice/n8n-nodes-docspace
  ```

  ## Nodes

  This package provides the following nodes:

  - **ONLYOFFICE DocSpace**: Interact with ONLYOFFICE DocSpace API
  - **ONLYOFFICE DocSpace Trigger**: Trigger workflows on ONLYOFFICE DocSpace events

  ## Operations

  The ONLYOFFICE DocSpace node supports the following operations:

  ### File operations
  - Copy a file
  - Create a file
  - Delete a file
  - Download a file
  - Get file info
  - Get file shared link
  - Move a file
  - Update a file
  - Upload a file

  ### Folder operations
  - Copy a folder
  - Create a folder
  - Delete a folder
  - Get folder contents
  - Get folder history
  - Get folder info
  - Get folder shared link
  - Move a folder
  - Update a folder

  ### Room operations
  - Archive a room
  - Create a room
  - Get room info
  - Get room shared link
  - Invite user to a room
  - Remove user from a room
  - Search for a room
  - Search for a user in a room
  - Update a room
  - Update user in a room

  ### User operations
  - Delete a user
  - Disable a user
  - Enable a user
  - Get a user
  - Invite a user
  - Search for a user
  - Update a user

  ## Events

  The ONLYOFFICE DocSpace Trigger node supports the following webhook events:

  - All Events
  - User Created
  - User Invited
  - User Updated
  - User Deleted
  - Group Created
  - Group Updated
  - Group Deleted
  - File Created
  - File Uploaded
  - File Updated
  - File Trashed
  - File Deleted
  - File Restored
  - File Copied
  - File Moved
  - Folder Created
  - Folder Updated
  - Folder Trashed
  - Folder Deleted
  - Folder Restored
  - Folder Copied
  - Folder Moved
  - Room Created
  - Room Updated
  - Room Archived
  - Room Deleted
  - Room Restored
  - Room Copied

  ## Credentials

  This node supports the following authentication methods:

  - **API Key** (recommended)
  - **Basic Auth**
  - **OAuth2**
  - **Personal Access Token**

  Refer to [ONLYOFFICE DocSpace credentials documentation][Credentials] for detailed setup instructions.

  ## Documentation

  Detailed documentation is available in the [docs/] directory:

  - [Credentials Setup][Credentials]
  - [ONLYOFFICE DocSpace Node Operations][App Node]
  - [ONLYOFFICE DocSpace Trigger Node][Trigger Node]

  ## License

  The ONLYOFFICE DocSpace n8n Nodes are distributed under the MIT license. See [LICENSE] for more information.

  ## Versions

  See [CHANGELOG.md] for version history and release notes.

  ## Useful links & support

  | Resource | URL |
  |----------|-----|
  | ONLYOFFICE website | [onlyoffice.com](https://www.onlyoffice.com) |
  | ONLYOFFICE DocSpace | [onlyoffice.com/docspace](https://www.onlyoffice.com/docspace) |
  | n8n community nodes documentation | [docs.n8n.io](https://docs.n8n.io/integrations/community-nodes/) |
  | API documentation | [api.onlyoffice.com](https://api.onlyoffice.com/docspace/) |
  | Community forum | [community.onlyoffice.com](https://community.onlyoffice.com/) |
  | Help Center | [helpcenter.onlyoffice.com](https://helpcenter.onlyoffice.com/docspace/) |
  | Found a bug? | [Report an issue](https://github.com/ONLYOFFICE/onlyoffice-docspace-n8n/issues) |
  | Support email | [support@onlyoffice.com](mailto:support@onlyoffice.com) |

  <p align="center">Made with ❤️ by the ONLYOFFICE Team</p>

  <!-- Definitions -->

  [n8n]: https://n8n.io/
  [ONLYOFFICE DocSpace]: https://www.onlyoffice.com/docspace
  [n8n Dockerfile]: https://github.com/n8n-io/n8n/blob/master/docker/images/n8n/Dockerfile
  [docs/]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/
  [Credentials]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/credentials/
  [App Node]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/app-node/
  [Trigger Node]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/tree/master/docs/trigger-node/
  [LICENSE]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/LICENSE
  [CHANGELOG.md]: https://github.com/onlyoffice/onlyoffice-docspace-n8n/blob/master/CHANGELOG.md

ai_documentation_summary:
  {"purpose":"Integrates n8n with the ONLYOFFICE DocSpace API to manage files, folders, rooms, and users in a room-based collaborative workspace. It also provides a trigger node for reacting to DocSpace events in workflows.","capabilities":["File operations: copy, create, delete, download, get info, get shared link, move, update, upload","Folder operations: copy, create, delete, get contents, get history, get info, get shared link, move, update","Room operations: archive, create, get info, get shared link, invite/remove users, search rooms/users, update room/user","User operations: delete, disable, enable, get, invite, search, update","Webhook trigger events for users, groups, files, folders, and rooms"],"authentication":"Supports API Key (recommended), Basic Auth, OAuth2, and Personal Access Token","commonUseCases":["Automatically upload, move, copy, or delete files and folders in DocSpace","Create and manage rooms and users for collaborative document workflows","Trigger n8n workflows when DocSpace events occur, such as file uploads or room changes"],"limitations":[],"relatedNodes":["ONLYOFFICE DocSpace Trigger"]}


node_type: n8n-nodes-emboss.emboss
package_name: n8n-nodes-emboss
display_name: Emboss
description: Create fillable PDFs and fill forms from context via Emboss
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: edwinorange
author_github_url: https://github.com/GetEmboss-ai/
npm_package_name: n8n-nodes-emboss
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:34.558Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createForm",
      "options": [
        {
          "name": "Create Fillable Form",
          "value": "createForm",
          "action": "Create a fillable form",
          "description": "Turn a flat PDF into a fillable form"
        },
        {
          "name": "Fill From PDF + Context",
          "value": "fillFromPdf",
          "action": "Fill a form from a PDF and context",
          "description": "Upload a PDF and context; get the filled PDF"
        },
        {
          "name": "Fill Existing Form",
          "value": "fillExisting",
          "action": "Fill an existing form",
          "description": "Fill a form already created in Emboss"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create Fillable Form",
      "value": "createForm",
      "action": "Create a fillable form",
      "description": "Turn a flat PDF into a fillable form"
    },
    {
      "name": "Fill From PDF + Context",
      "value": "fillFromPdf",
      "action": "Fill a form from a PDF and context",
      "description": "Upload a PDF and context; get the filled PDF"
    },
    {
      "name": "Fill Existing Form",
      "value": "fillExisting",
      "action": "Fill an existing form",
      "description": "Fill a form already created in Emboss"
    }
  ]

npm_readme:
  # n8n-nodes-emboss

  An [n8n](https://n8n.io) community node for [Emboss](https://getemboss.ai) — turn flat PDFs into fillable forms and fill them from context.

  ## Operations
  - **Create Fillable Form** — a flat PDF in, a fillable PDF out.
  - **Fill From PDF + Context** — a PDF plus context (text or a file), the filled PDF out.
  - **Fill Existing Form** — fill a form you already created in Emboss, by ID.

  ## Credentials
  An Emboss API key (`Authorization: Bearer`). Create one at https://getemboss.ai/dashboard, then add it as an **Emboss API** credential in n8n.

  ## Installation
  Settings → Community Nodes → Install `n8n-nodes-emboss`.

  ## How it works

  Every operation takes a PDF (and, for the fill operations, some context), runs the job on
  Emboss, **waits for it to finish**, and returns the resulting PDF on the node's **binary
  output** (property `data`) alongside a small JSON summary. Wire the binary output straight
  into a **Write Binary File**, **Google Drive**, **email**, or any node that accepts a file.

  The input PDF is read from a **binary property** of the incoming item (default `data`), so
  put a node that produces a PDF — e.g. **HTTP Request** (download), **Read Binary File**, or
  a Google Drive download — immediately before the Emboss node.

  ## Usage examples

  ### Example 1 — Fill a form from context (most common)

  **Operation:** `Fill From PDF + Context`

  **Configure:**
  - **Input PDF Field:** `data` (the binary property holding your flat PDF)
  - **Context (Text):** the information to fill in, in plain language, e.g.
    `Customer is Jane Doe, 412 Oak Street, Fresno CA. Installed a 40-gallon water heater on 2026-06-14. Total $1,240.`
  - **Context File Field:** *(optional)* the name of a binary property holding a supporting
    document (PDF, DOCX, CSV, image, or text) — e.g. a work order to read details from.

  **Input item:** an item whose binary `data` is the flat PDF (e.g. from a preceding
  **Read Binary File** node).

  **Output item:**
  - `binary.data` — the **filled PDF**, ready to save or send.
  - `json`:
    ```json
    {
      "session_id": "a1b2c3d4-…",
      "report": {
        "filled": ["customer_name", "address", "install_date", "amount"],
        "left_blank": ["second_unit_serial"]
      }
    }
    ```
    `report.filled` and `report.left_blank` list the field names Emboss filled and the ones it
    left empty (no matching context), so you can check coverage downstream.

  A minimal workflow: **Read Binary File** (the blank form) → **Emboss** (Fill From PDF +
  Context) → **Write Binary File** (save the filled PDF).

  ### Example 2 — Turn a flat PDF into a reusable fillable form

  **Operation:** `Create Fillable Form`

  **Configure:**
  - **Input PDF Field:** `data`

  **Output item:**
  - `binary.data` — the **fillable PDF** (now has form fields).
  - `json`:
    ```json
    { "form_id": "f47ac10b-…", "status": "ready" }
    ```

  Keep the returned `form_id` to fill the same form repeatedly with the next operation.

  ### Example 3 — Fill a form you already created

  **Operation:** `Fill Existing Form`

  **Configure:**
  - **Form:** pick it from the list (the node loads your Emboss forms), or switch to **By ID**
    and paste a `form_id` (e.g. from Example 2).
  - **Context (Text)** and/or **Context File Field:** same as Example 1.

  **Output item:** same shape as Example 1 — `binary.data` is the filled PDF, `json` carries
  the `session_id` and `report`.

  ## Notes
  - Jobs are polled to completion inside the node, so a single execution returns the finished
    PDF — no separate "wait" step needed. Larger forms take longer (typically seconds to ~a
    minute).
  - HTTP errors from the Emboss API surface in the n8n UI with their status and response.
    Enable **Continue On Fail** to route failures to the error output instead of stopping the
    workflow.

ai_documentation_summary:
  {"purpose":"Creates fillable PDFs from flat PDFs and fills PDF forms using provided context. It can also fill an existing Emboss form by form ID and returns the completed PDF as binary output.","capabilities":["Create a fillable form from a flat PDF","Fill a PDF from context text and/or a supporting context file","Fill an existing Emboss form by selecting it or providing a form ID","Waits for Emboss jobs to complete and returns the final PDF in binary output","Returns a JSON summary including form/session details and field coverage report"],"authentication":"Emboss API key required (Authorization: Bearer) via Emboss API credential in n8n","commonUseCases":["Convert a static PDF into a reusable fillable form","Automatically populate PDF forms from written context or supporting documents","Reuse an existing form template to generate filled PDFs for repeated workflows"],"limitations":["Input PDF must come from a binary property on the incoming item","Jobs are polled synchronously inside the node, so large forms may take seconds to about a minute","Only supports the three listed operations"],"relatedNodes":["Read Binary File","HTTP Request","Google Drive","Write Binary File","Email"]}


node_type: @crm-kraft/n8n-nodes-close.close
package_name: @crm-kraft/n8n-nodes-close
display_name: Close
category: Sales
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: crm-kraft
author_github_url: https://github.com/crm-kraft/n8n-nodes-close.git
npm_package_name: @crm-kraft/n8n-nodes-close
npm_version: 2.3.55
community_fetched_at: 2026-07-14T14:40:34.559Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Interact with Close CRM — manage leads, contacts, opportunities, tasks, notes, calls, emails, custom activities, pipelines, and more (80+ operations across 19 resources)

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "lead",
      "options": [
        {
          "name": "Call",
          "value": "call"
        },
        {
          "name": "Comment",
          "value": "comment"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Custom Activity",
          "value": "customActivity"
        },
        {
          "name": "Custom Activity Type",
          "value": "customActivityType"
        },
        {
          "name": "Custom Field",
          "value": "customField"
        },
        {
          "name": "Email",
          "value": "email"
        },
        {
          "name": "Email Template",
          "value": "emailTemplate"
        },
        {
          "name": "Integration Link",
          "value": "integrationLink"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Lead Status",
          "value": "leadStatus"
        },
        {
          "name": "Note",
          "value": "note"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Opportunity Status",
          "value": "opportunityStatus"
        },
        {
          "name": "Pipeline",
          "value": "pipeline"
        },
        {
          "name": "SMS",
          "value": "sms"
        },
        {
          "name": "Smart View",
          "value": "smartView"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "User",
          "value": "user"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads"
        },
        {
          "name": "Merge",
          "value": "merge",
          "action": "Merge leads"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search leads"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead status"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead status"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead status"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many lead statuses"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "leadStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an opportunity"
        },
        {
          "name": "Create or Update",
          "value": "upsert",
          "action": "Create or update an opportunity"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an opportunity"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an opportunity"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many opportunities"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an opportunity"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an opportunity status"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an opportunity status"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an opportunity status"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many opportunity statuses"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an opportunity status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunityStatus"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a pipeline"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a pipeline"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a pipeline"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many pipelines"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "pipeline"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a task"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a task"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a task"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many tasks"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a note"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a note"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a note"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many notes for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a note"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "note"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a call"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a call"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a call"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calls for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create (Send)",
          "value": "create",
          "action": "Send an email"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an email"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an email"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many emails for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "email"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create (Send)",
          "value": "create",
          "action": "Send an SMS"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an SMS"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an SMS"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many SMS messages for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an SMS"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sms"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a custom activity instance"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a custom activity instance"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a custom activity instance"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many custom activity instances for a lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a custom activity instance"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customActivity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a custom activity type"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a custom activity type"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a custom activity type"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many custom activity types"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a custom activity type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customActivityType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a comment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a comment"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many comments for a lead"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "comment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an email template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an email template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an email template"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many email templates"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an email template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "emailTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a smart view"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a smart view"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a smart view"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many smart views"
        },
        {
          "name": "Get Leads",
          "value": "getLeads",
          "action": "Get leads from a smart view"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a smart view"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "smartView"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user by ID"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many users"
        },
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get current user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a custom field"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a custom field"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a custom field"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many custom fields"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a custom field"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customField"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an integration link"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an integration link"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an integration link"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many integration links"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an integration link"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "integrationLink"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "resource": "lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "resource": "lead"
    },
    {
      "name": "Merge",
      "value": "merge",
      "action": "Merge leads",
      "resource": "lead"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search leads",
      "resource": "lead"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead status",
      "resource": "leadStatus"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead status",
      "resource": "leadStatus"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead status",
      "resource": "leadStatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many lead statuses",
      "resource": "leadStatus"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead status",
      "resource": "leadStatus"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Create or Update",
      "value": "upsert",
      "action": "Create or update an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many opportunities",
      "resource": "opportunity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an opportunity",
      "resource": "opportunity"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an opportunity status",
      "resource": "opportunityStatus"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an opportunity status",
      "resource": "opportunityStatus"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an opportunity status",
      "resource": "opportunityStatus"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many opportunity statuses",
      "resource": "opportunityStatus"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an opportunity status",
      "resource": "opportunityStatus"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many pipelines",
      "resource": "pipeline"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a pipeline",
      "resource": "pipeline"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a task",
      "resource": "task"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a task",
      "resource": "task"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a task",
      "resource": "task"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many tasks",
      "resource": "task"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a task",
      "resource": "task"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a note",
      "resource": "note"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a note",
      "resource": "note"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a note",
      "resource": "note"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many notes for a lead",
      "resource": "note"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a note",
      "resource": "note"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a call",
      "resource": "call"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a call",
      "resource": "call"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a call",
      "resource": "call"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calls for a lead",
      "resource": "call"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a call",
      "resource": "call"
    },
    {
      "name": "Create (Send)",
      "value": "create",
      "action": "Send an email",
      "resource": "email"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an email",
      "resource": "email"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an email",
      "resource": "email"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many emails for a lead",
      "resource": "email"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an email",
      "resource": "email"
    },
    {
      "name": "Create (Send)",
      "value": "create",
      "action": "Send an SMS",
      "resource": "sms"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an SMS",
      "resource": "sms"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an SMS",
      "resource": "sms"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many SMS messages for a lead",
      "resource": "sms"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an SMS",
      "resource": "sms"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a custom activity instance",
      "resource": "customActivity"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a custom activity instance",
      "resource": "customActivity"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a custom activity instance",
      "resource": "customActivity"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many custom activity instances for a lead",
      "resource": "customActivity"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a custom activity instance",
      "resource": "customActivity"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a custom activity type",
      "resource": "customActivityType"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a custom activity type",
      "resource": "customActivityType"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a custom activity type",
      "resource": "customActivityType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many custom activity types",
      "resource": "customActivityType"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a custom activity type",
      "resource": "customActivityType"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a comment",
      "resource": "comment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a comment",
      "resource": "comment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many comments for a lead",
      "resource": "comment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an email template",
      "resource": "emailTemplate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an email template",
      "resource": "emailTemplate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an email template",
      "resource": "emailTemplate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many email templates",
      "resource": "emailTemplate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an email template",
      "resource": "emailTemplate"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a smart view",
      "resource": "smartView"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a smart view",
      "resource": "smartView"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a smart view",
      "resource": "smartView"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many smart views",
      "resource": "smartView"
    },
    {
      "name": "Get Leads",
      "value": "getLeads",
      "action": "Get leads from a smart view",
      "resource": "smartView"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a smart view",
      "resource": "smartView"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user by ID",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many users",
      "resource": "user"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get current user",
      "resource": "user"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a custom field",
      "resource": "customField"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a custom field",
      "resource": "customField"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a custom field",
      "resource": "customField"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many custom fields",
      "resource": "customField"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a custom field",
      "resource": "customField"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an integration link",
      "resource": "integrationLink"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an integration link",
      "resource": "integrationLink"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an integration link",
      "resource": "integrationLink"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many integration links",
      "resource": "integrationLink"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an integration link",
      "resource": "integrationLink"
    }
  ]

npm_readme:
  # n8n-nodes-close — Close CRM Integration for n8n

  [![npm version](https://img.shields.io/npm/v/@crm-kraft/n8n-nodes-close.svg)](https://www.npmjs.com/package/@crm-kraft/n8n-nodes-close)
  [![npm downloads](https://img.shields.io/npm/dm/@crm-kraft/n8n-nodes-close.svg)](https://www.npmjs.com/package/@crm-kraft/n8n-nodes-close)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Maintained by CRM Kraft](https://img.shields.io/badge/Maintained%20by-CRM%20Kraft-blue)](https://crm-kraft.com)

  The most complete and actively maintained **Close CRM** community node for [n8n](https://n8n.io). Supports 87+ operations across 19 resources. Built and maintained by [CRM Kraft](https://crm-kraft.com) — a specialist Close CRM consultancy with 5+ years of experience and 130+ Close CRM implementations.

  ---

  ## Features

  - **Full Action Node** — Create, read, update, and delete all major Close CRM resources directly from your n8n workflows
  - **Comprehensive Trigger Node** — React to any Close CRM event in real time via webhooks, covering every trigger that Zapier supports and more
  - **Published Custom Activity Trigger** — A uniquely powerful trigger that fires precisely when a custom activity is published, using Close's server-side filtering for reliability
  - **Actively maintained** — Kept up to date with every Close CRM API change by a dedicated engineering team

  ---

  ## Installation

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

  ```
  @crm-kraft/n8n-nodes-close
  ```

  Or install via npm:

  ```bash
  npm install @crm-kraft/n8n-nodes-close
  ```

  ---

  ## Credentials

  This node uses **Close CRM API Key** authentication.

  1. In Close CRM, go to **Settings → API Keys** and create a new API key
  2. In n8n, create a new **Close API** credential and paste your API key

  ---

  ## Nodes

  ### Close CRM (Action Node)

  Perform operations on all major Close CRM resources.

  | Resource | Operations |
  |---|---|
  | **Lead** | Create, Get, Get All, Update, Delete, Search |
  | **Contact** | Create, Get, Get All, Update, Delete |
  | **Opportunity** | Create, Get, Get All, Update, Delete |
  | **Task** | Create, Get, Get All, Update, Delete |
  | **Note** | Create, Get, Get All, Update, Delete |
  | **Call** | Create, Get, Get All, Update, Delete |
  | **Email** | Create, Get, Get All, Update, Delete |
  | **SMS** | Create, Get, Get All |
  | **Pipeline** | Get, Get All |
  | **Lead Status** | Get, Get All |
  | **Opportunity Status** | Get, Get All |
  | **Custom Field** | Get Many |
  | **Smart View** | Get Many, Get Leads |
  | **Email Template** | Get, Get Many |
  | **Integration Link** | Create, Get, Get Many, Update, Delete |
  | **Custom Activity** | Create, Get, Get All, Update, Delete |
  | **Custom Activity Type** | Get, Get All |
  | **Comment** | Create, Get, Get All, Update, Delete |
  | **User** | Get, Get All |

  ---

  ### Close CRM Trigger (Webhook Node)

  Starts a workflow automatically when a selected event occurs in Close CRM. The node automatically registers and deregisters the webhook subscription in Close CRM when the workflow is activated or deactivated.

  #### Available Trigger Events

  | Category | Events |
  |---|---|
  | **Lead** | Created, Updated, Deleted, Merged |
  | **Contact** | Created, Updated, Deleted |
  | **Opportunity** | Created, Updated, Deleted |
  | **Task** | Created, Updated, Deleted, Completed |
  | **Note** | Created, Updated, Deleted |
  | **Call** | Created, Updated, Deleted, Completed |
  | **Email** | Created, Updated, Deleted, Sent |
  | **SMS** | Created, Updated, Deleted, Sent |
  | **Meeting** | Created, Updated, Deleted, Scheduled, Started, Completed, Canceled |
  | **Custom Activity** | Created, Updated, Deleted |
  | **On Custom Activity Published** ⭐ | Fires when a custom activity is published (created as published or status changed to published) |
  | **Lead Status Changed** | — |
  | **Opportunity Status Changed** | — |
  | **Form Submission Created** | — |
  | **Email Unsubscribed / Resubscribed** | — |

  #### On Custom Activity Published ⭐

  This trigger uses Close CRM's server-side `extra_filter` to fire **only** when a custom activity is genuinely published — either created directly as published, or when a draft activity's status changes to published. It requires you to select a specific **Custom Activity Type** and registers two webhook events in a single subscription:

  - `updated` with filter: `status == published AND changed_fields contains "status"`
  - `created` with filter: `status == published`

  This matches the behaviour of Zapier's "Published Custom Activity" trigger and is the most precise way to detect publishing events in Close CRM.

  ---

  ## Example Use Cases

  - **Lead Created → Enrich & Notify** — When a new lead is created in Close, enrich it with data from Clearbit and send a Slack notification to the sales team
  - **Opportunity Won → Onboarding** — When an opportunity status changes to "Won", automatically create an onboarding task, send a welcome email, and add the contact to a Mailchimp list
  - **Published Custom Activity → CRM Update** — When a sales rep publishes a custom activity (e.g. a demo feedback form), automatically update the lead score and trigger a follow-up sequence
  - **Task Completed → Invoice** — When a task is marked complete, create an invoice in your billing system

  ---

  ## About CRM Kraft

  [CRM Kraft](https://crm-kraft.com) is a specialist CRM automation consultancy based in Germany. We have been implementing Close CRM solutions for B2B companies for over 5 years, with more than 130 successful projects delivered. Our team of 11, including full-time programmers, builds and maintains automation infrastructure on top of Close CRM and n8n for clients across Europe and beyond.

  We built this node because we use it ourselves — every day, across every client project. That means it is always kept up to date, thoroughly tested in production, and built with a deep understanding of how Close CRM actually works.

  **Website:** [https://crm-kraft.com](https://crm-kraft.com)  
  **Contact:** justus@crm-kraft.de  
  **GitHub:** [https://github.com/crm-kraft/n8n-nodes-close](https://github.com/crm-kraft/n8n-nodes-close)

  ---

  ## Contributing

  Issues and pull requests are welcome. Please open an issue on GitHub before submitting a pull request for significant changes.

  ---

  ## License

  [MIT](LICENSE)

  ---

  ## Related Packages

  Other n8n community nodes maintained by CRM Kraft:

  - [`n8n-nodes-calendly`](https://www.npmjs.com/package/n8n-nodes-calendly) — Calendly integration for n8n
  - [`n8n-nodes-youcanbookme`](https://www.npmjs.com/package/n8n-nodes-youcanbookme) — YouCanBookMe integration for n8n
  - [`n8n-nodes-ablefy`](https://www.npmjs.com/package/n8n-nodes-ablefy) — Ablefy integration for n8n

ai_documentation_summary:
  {"purpose":"Integrates n8n with Close CRM to manage core CRM records and react to CRM events in real time. It provides a broad action node for CRUD-style operations plus a webhook trigger node for automated workflows.","capabilities":["Create, get, list, update, delete, and search leads","Create, get, list, update, and delete contacts, opportunities, tasks, notes, calls, emails, custom activities, and comments","Create and retrieve SMS messages","Get pipelines, lead statuses, opportunity statuses, custom fields, email templates, integration links, custom activity types, and users","Retrieve smart views and lead lists from smart views","Create, get, list, update, and delete integration links","Trigger workflows on Close CRM webhooks for leads, contacts, opportunities, tasks, notes, calls, emails, SMS, meetings, custom activities, status changes, form submissions, and unsubscribe/resubscribe events","Detect when a custom activity is published using server-side filtering with a specific custom activity type"],"authentication":"Close CRM API Key required","commonUseCases":["Automatically enrich and notify the team when a new lead is created","Trigger onboarding, follow-up, or notification workflows when opportunity or task status changes","Update CRM processes when a custom activity is published","Create downstream actions such as invoices, emails, or marketing list updates from Close CRM events"],"limitations":["The published custom activity trigger requires selecting a specific Custom Activity Type","SMS supports create, get, and get all operations only","Some resources are read-only or limited to retrieval operations, such as pipelines, lead statuses, opportunity statuses, custom fields, email templates, custom activity types, and users"],"relatedNodes":["Webhook Trigger","Close CRM"]}


node_type: @crm-kraft/n8n-nodes-close.closeTrigger
package_name: @crm-kraft/n8n-nodes-close
display_name: Close Trigger
category: Sales
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: crm-kraft
author_github_url: https://github.com/crm-kraft/n8n-nodes-close.git
npm_package_name: @crm-kraft/n8n-nodes-close
npm_version: 2.3.55
community_fetched_at: 2026-07-14T14:40:34.560Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Interact with Close CRM — manage leads, contacts, opportunities, tasks, notes, calls, emails, custom activities, pipelines, and more. Includes a full webhook trigger for real-time events.

npm_readme:
  # n8n-nodes-close — Close CRM Integration for n8n

  [![npm version](https://img.shields.io/npm/v/@crm-kraft/n8n-nodes-close.svg)](https://www.npmjs.com/package/@crm-kraft/n8n-nodes-close)
  [![npm downloads](https://img.shields.io/npm/dm/@crm-kraft/n8n-nodes-close.svg)](https://www.npmjs.com/package/@crm-kraft/n8n-nodes-close)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Maintained by CRM Kraft](https://img.shields.io/badge/Maintained%20by-CRM%20Kraft-blue)](https://crm-kraft.com)

  The most complete and actively maintained **Close CRM** community node for [n8n](https://n8n.io). Supports 87+ operations across 19 resources. Built and maintained by [CRM Kraft](https://crm-kraft.com) — a specialist Close CRM consultancy with 5+ years of experience and 130+ Close CRM implementations.

  ---

  ## Features

  - **Full Action Node** — Create, read, update, and delete all major Close CRM resources directly from your n8n workflows
  - **Comprehensive Trigger Node** — React to any Close CRM event in real time via webhooks, covering every trigger that Zapier supports and more
  - **Published Custom Activity Trigger** — A uniquely powerful trigger that fires precisely when a custom activity is published, using Close's server-side filtering for reliability
  - **Actively maintained** — Kept up to date with every Close CRM API change by a dedicated engineering team

  ---

  ## Installation

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

  ```
  @crm-kraft/n8n-nodes-close
  ```

  Or install via npm:

  ```bash
  npm install @crm-kraft/n8n-nodes-close
  ```

  ---

  ## Credentials

  This node uses **Close CRM API Key** authentication.

  1. In Close CRM, go to **Settings → API Keys** and create a new API key
  2. In n8n, create a new **Close API** credential and paste your API key

  ---

  ## Nodes

  ### Close CRM (Action Node)

  Perform operations on all major Close CRM resources.

  | Resource | Operations |
  |---|---|
  | **Lead** | Create, Get, Get All, Update, Delete, Search |
  | **Contact** | Create, Get, Get All, Update, Delete |
  | **Opportunity** | Create, Get, Get All, Update, Delete |
  | **Task** | Create, Get, Get All, Update, Delete |
  | **Note** | Create, Get, Get All, Update, Delete |
  | **Call** | Create, Get, Get All, Update, Delete |
  | **Email** | Create, Get, Get All, Update, Delete |
  | **SMS** | Create, Get, Get All |
  | **Pipeline** | Get, Get All |
  | **Lead Status** | Get, Get All |
  | **Opportunity Status** | Get, Get All |
  | **Custom Field** | Get Many |
  | **Smart View** | Get Many, Get Leads |
  | **Email Template** | Get, Get Many |
  | **Integration Link** | Create, Get, Get Many, Update, Delete |
  | **Custom Activity** | Create, Get, Get All, Update, Delete |
  | **Custom Activity Type** | Get, Get All |
  | **Comment** | Create, Get, Get All, Update, Delete |
  | **User** | Get, Get All |

  ---

  ### Close CRM Trigger (Webhook Node)

  Starts a workflow automatically when a selected event occurs in Close CRM. The node automatically registers and deregisters the webhook subscription in Close CRM when the workflow is activated or deactivated.

  #### Available Trigger Events

  | Category | Events |
  |---|---|
  | **Lead** | Created, Updated, Deleted, Merged |
  | **Contact** | Created, Updated, Deleted |
  | **Opportunity** | Created, Updated, Deleted |
  | **Task** | Created, Updated, Deleted, Completed |
  | **Note** | Created, Updated, Deleted |
  | **Call** | Created, Updated, Deleted, Completed |
  | **Email** | Created, Updated, Deleted, Sent |
  | **SMS** | Created, Updated, Deleted, Sent |
  | **Meeting** | Created, Updated, Deleted, Scheduled, Started, Completed, Canceled |
  | **Custom Activity** | Created, Updated, Deleted |
  | **On Custom Activity Published** ⭐ | Fires when a custom activity is published (created as published or status changed to published) |
  | **Lead Status Changed** | — |
  | **Opportunity Status Changed** | — |
  | **Form Submission Created** | — |
  | **Email Unsubscribed / Resubscribed** | — |

  #### On Custom Activity Published ⭐

  This trigger uses Close CRM's server-side `extra_filter` to fire **only** when a custom activity is genuinely published — either created directly as published, or when a draft activity's status changes to published. It requires you to select a specific **Custom Activity Type** and registers two webhook events in a single subscription:

  - `updated` with filter: `status == published AND changed_fields contains "status"`
  - `created` with filter: `status == published`

  This matches the behaviour of Zapier's "Published Custom Activity" trigger and is the most precise way to detect publishing events in Close CRM.

  ---

  ## Example Use Cases

  - **Lead Created → Enrich & Notify** — When a new lead is created in Close, enrich it with data from Clearbit and send a Slack notification to the sales team
  - **Opportunity Won → Onboarding** — When an opportunity status changes to "Won", automatically create an onboarding task, send a welcome email, and add the contact to a Mailchimp list
  - **Published Custom Activity → CRM Update** — When a sales rep publishes a custom activity (e.g. a demo feedback form), automatically update the lead score and trigger a follow-up sequence
  - **Task Completed → Invoice** — When a task is marked complete, create an invoice in your billing system

  ---

  ## About CRM Kraft

  [CRM Kraft](https://crm-kraft.com) is a specialist CRM automation consultancy based in Germany. We have been implementing Close CRM solutions for B2B companies for over 5 years, with more than 130 successful projects delivered. Our team of 11, including full-time programmers, builds and maintains automation infrastructure on top of Close CRM and n8n for clients across Europe and beyond.

  We built this node because we use it ourselves — every day, across every client project. That means it is always kept up to date, thoroughly tested in production, and built with a deep understanding of how Close CRM actually works.

  **Website:** [https://crm-kraft.com](https://crm-kraft.com)  
  **Contact:** justus@crm-kraft.de  
  **GitHub:** [https://github.com/crm-kraft/n8n-nodes-close](https://github.com/crm-kraft/n8n-nodes-close)

  ---

  ## Contributing

  Issues and pull requests are welcome. Please open an issue on GitHub before submitting a pull request for significant changes.

  ---

  ## License

  [MIT](LICENSE)

  ---

  ## Related Packages

  Other n8n community nodes maintained by CRM Kraft:

  - [`n8n-nodes-calendly`](https://www.npmjs.com/package/n8n-nodes-calendly) — Calendly integration for n8n
  - [`n8n-nodes-youcanbookme`](https://www.npmjs.com/package/n8n-nodes-youcanbookme) — YouCanBookMe integration for n8n
  - [`n8n-nodes-ablefy`](https://www.npmjs.com/package/n8n-nodes-ablefy) — Ablefy integration for n8n

ai_documentation_summary:
  {"purpose":"Integrates Close CRM with n8n for both managing CRM data and reacting to real-time Close events. It provides a webhook trigger node for automations and supports a wide range of Close CRM resources and operations.","capabilities":["Create, read, update, delete, and search leads","Manage contacts, opportunities, tasks, notes, calls, emails, SMS, comments, users, and custom activities","Read pipeline, lead status, opportunity status, custom field, smart view, email template, integration link, and custom activity type data","Create and manage integration links and custom activities","Webhook trigger for real-time Close CRM events","Auto-register and deregister webhook subscriptions when workflows are activated or deactivated","Special trigger for published custom activities using server-side filtering"],"authentication":"Close CRM API Key required","commonUseCases":["Trigger workflows when leads, opportunities, tasks, calls, emails, or other Close CRM records are created or updated","Automatically process published custom activities and sync CRM changes to other systems","Enrich new leads and notify sales teams","Automate onboarding when an opportunity is won","Create follow-up actions when tasks are completed"],"limitations":["The trigger node requires selecting a specific Custom Activity Type for the 'On Custom Activity Published' event","The README notes that the package documentation is truncated, so additional features may exist beyond the visible content"],"relatedNodes":["Close CRM (Action Node)","Close CRM Trigger (Webhook Node)"]}


node_type: @wizcut/n8n-nodes-wizcut.wizcut
package_name: @wizcut/n8n-nodes-wizcut
display_name: WizCut
description: AI-powered multicam podcast editing
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: wizcut-admin
author_github_url: https://github.com/wizcut-app/n8n-nodes-wizcut.git
npm_package_name: @wizcut/n8n-nodes-wizcut
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:34.561Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "createJob",
      "options": [
        {
          "name": "Approve",
          "value": "approve",
          "action": "Approve a rendered job",
          "description": "Approve the rendered video for download"
        },
        {
          "name": "Create Job",
          "value": "createJob",
          "action": "Create a new editing job",
          "description": "Create a new editing job and get upload URLs for source files"
        },
        {
          "name": "Get Job",
          "value": "getJob",
          "action": "Get job status",
          "description": "Get the current status and details of a job"
        },
        {
          "name": "Start Processing",
          "value": "startProcessing",
          "action": "Start processing a job",
          "description": "Start audio sync and speaker detection"
        },
        {
          "name": "Start Render",
          "value": "startRender",
          "action": "Start rendering a job",
          "description": "Start rendering the final video after speaker mapping is confirmed"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Approve",
      "value": "approve",
      "action": "Approve a rendered job",
      "description": "Approve the rendered video for download"
    },
    {
      "name": "Create Job",
      "value": "createJob",
      "action": "Create a new editing job",
      "description": "Create a new editing job and get upload URLs for source files"
    },
    {
      "name": "Get Job",
      "value": "getJob",
      "action": "Get job status",
      "description": "Get the current status and details of a job"
    },
    {
      "name": "Start Processing",
      "value": "startProcessing",
      "action": "Start processing a job",
      "description": "Start audio sync and speaker detection"
    },
    {
      "name": "Start Render",
      "value": "startRender",
      "action": "Start rendering a job",
      "description": "Start rendering the final video after speaker mapping is confirmed"
    }
  ]

npm_readme:
  # n8n-nodes-wizcut

  [n8n](https://n8n.io/) community node for [WizCut](https://wizcut.com) — AI-powered multicam podcast editing.

  WizCut automatically syncs, detects speakers, and cuts multicam podcast recordings. Upload your camera angles, confirm speaker mapping in the WizCut editor, and get a finished video back.

  ![WizCut](wizcut-hero.gif)

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

  ## Operations

  ### WizCut Node

  | Operation | Description |
  |---|---|
  | **Create Job** | Create a new editing job with source files. Returns upload URLs. |
  | **Get Job** | Check the current status and details of a job. |
  | **Start Processing** | Kick off audio sync and speaker detection. |
  | **Start Render** | Render the final video (after speaker mapping is done in WizCut). |
  | **Approve** | Mark a rendered video as approved. |

  ### WizCut Trigger

  Webhook-based trigger that starts your workflow when a job changes status:

  | Event | When it fires |
  |---|---|
  | **Mapping Ready** | Speakers detected. Waiting for you to confirm mapping in the WizCut editor. |
  | **Cuts Ready** | Speaker mapping confirmed and cuts generated. Ready for review or render. |
  | **Render Complete** | Video rendering finished. |
  | **Approved** | Rendered video approved for download. |

  ## Typical workflow

  1. Files land in Google Drive / Dropbox / S3
  2. **WizCut: Create Job** — register sources, get presigned upload URLs
  3. **HTTP Request** — upload files to the presigned URLs
  4. **WizCut: Start Processing** — kicks off sync + speaker detection
  5. **WizCut Trigger** receives `mapping` webhook — send a Slack/email with the review link
  6. You confirm speaker mapping in the WizCut editor (takes ~30 seconds)
  7. **WizCut Trigger** receives `ready` webhook — trigger render (or review cuts first)
  8. **WizCut: Start Render** — render the final video
  9. **WizCut Trigger** receives `complete` webhook — download, upload to YouTube, notify team

  The human-in-the-loop step (speaker mapping) ensures your podcast always looks right. WizCut does the heavy lifting; you just confirm which camera shows which speaker.

  ## Credentials

  You need a WizCut API key. Get one at [wizcut.com/settings](https://wizcut.com/settings).

  API keys start with `wc_live_`.

  ## Installation

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

  Search for `n8n-nodes-wizcut` in the community nodes panel, or install manually:

  ```
  npm install n8n-nodes-wizcut
  ```

  ## Resources

  - [WizCut website](https://wizcut.com)
  - [WizCut API docs](https://wizcut.com/docs/api)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"WizCut is an n8n community node for AI-powered multicam podcast editing. It automates job creation, speaker detection, syncing, rendering, and approval workflows for podcast video production.","capabilities":["Create a new editing job and return presigned upload URLs","Get job status and job details","Start processing to sync audio and detect speakers","Start render to generate the final video after speaker mapping","Approve a rendered video","Trigger workflows on job status changes via webhooks","Support events for Mapping Ready, Cuts Ready, Render Complete, and Approved"],"authentication":"API key required (WizCut API key, starting with wc_live_)","commonUseCases":["Automating multicam podcast editing from uploaded source files","Notifying teams when speaker mapping is ready for review","Triggering final render and distribution steps after cuts are ready"],"limitations":["Speaker mapping must be confirmed manually in the WizCut editor before rendering","The node relies on a webhook-based trigger for status change events"],"relatedNodes":["HTTP Request","Google Drive","Dropbox","Amazon S3","Slack"]}


node_type: @wizcut/n8n-nodes-wizcut.wizcutTrigger
package_name: @wizcut/n8n-nodes-wizcut
display_name: WizCut Trigger
description: Starts a workflow when a WizCut job changes status
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: wizcut-admin
author_github_url: https://github.com/wizcut-app/n8n-nodes-wizcut.git
npm_package_name: @wizcut/n8n-nodes-wizcut
npm_version: 0.1.8
community_fetched_at: 2026-07-14T14:40:34.562Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-wizcut

  [n8n](https://n8n.io/) community node for [WizCut](https://wizcut.com) — AI-powered multicam podcast editing.

  WizCut automatically syncs, detects speakers, and cuts multicam podcast recordings. Upload your camera angles, confirm speaker mapping in the WizCut editor, and get a finished video back.

  ![WizCut](wizcut-hero.gif)

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

  ## Operations

  ### WizCut Node

  | Operation | Description |
  |---|---|
  | **Create Job** | Create a new editing job with source files. Returns upload URLs. |
  | **Get Job** | Check the current status and details of a job. |
  | **Start Processing** | Kick off audio sync and speaker detection. |
  | **Start Render** | Render the final video (after speaker mapping is done in WizCut). |
  | **Approve** | Mark a rendered video as approved. |

  ### WizCut Trigger

  Webhook-based trigger that starts your workflow when a job changes status:

  | Event | When it fires |
  |---|---|
  | **Mapping Ready** | Speakers detected. Waiting for you to confirm mapping in the WizCut editor. |
  | **Cuts Ready** | Speaker mapping confirmed and cuts generated. Ready for review or render. |
  | **Render Complete** | Video rendering finished. |
  | **Approved** | Rendered video approved for download. |

  ## Typical workflow

  1. Files land in Google Drive / Dropbox / S3
  2. **WizCut: Create Job** — register sources, get presigned upload URLs
  3. **HTTP Request** — upload files to the presigned URLs
  4. **WizCut: Start Processing** — kicks off sync + speaker detection
  5. **WizCut Trigger** receives `mapping` webhook — send a Slack/email with the review link
  6. You confirm speaker mapping in the WizCut editor (takes ~30 seconds)
  7. **WizCut Trigger** receives `ready` webhook — trigger render (or review cuts first)
  8. **WizCut: Start Render** — render the final video
  9. **WizCut Trigger** receives `complete` webhook — download, upload to YouTube, notify team

  The human-in-the-loop step (speaker mapping) ensures your podcast always looks right. WizCut does the heavy lifting; you just confirm which camera shows which speaker.

  ## Credentials

  You need a WizCut API key. Get one at [wizcut.com/settings](https://wizcut.com/settings).

  API keys start with `wc_live_`.

  ## Installation

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

  Search for `n8n-nodes-wizcut` in the community nodes panel, or install manually:

  ```
  npm install n8n-nodes-wizcut
  ```

  ## Resources

  - [WizCut website](https://wizcut.com)
  - [WizCut API docs](https://wizcut.com/docs/api)
  - [n8n community nodes docs](https://docs.n8n.io/integrations/community-nodes/)

ai_documentation_summary:
  {"purpose":"WizCut Trigger starts an n8n workflow when a WizCut job changes status. It is used to react to key milestones in the multicam podcast editing process, such as speaker mapping, cuts generation, render completion, and approval.","capabilities":["Triggers on Mapping Ready events when speakers are detected and waiting for mapping confirmation","Triggers on Cuts Ready events when speaker mapping is confirmed and cuts are generated","Triggers on Render Complete events when video rendering finishes","Triggers on Approved events when a rendered video is approved for download","Webhook-based workflow start for job status changes"],"authentication":"WizCut API key required (keys start with wc_live_)","commonUseCases":["Notify a team when speaker mapping is ready for review","Automatically start rendering when cuts are ready","Trigger downstream actions like downloads, uploads, or notifications after render completion","Coordinate human-in-the-loop review and approval steps in a podcast editing workflow"],"limitations":["Trigger only reacts to the listed WizCut job status events","Requires a WizCut account and API key"],"relatedNodes":["WizCut"]}


node_type: @nodrel-dev/n8n-nodes-fedex.fedex
package_name: @nodrel-dev/n8n-nodes-fedex
display_name: FedEx
description: Track shipments, validate addresses, get rates, and create labels with your own FedEx account
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: noctissella
author_github_url: https://github.com/nodrel-dev/n8n-fedex-node.git
npm_package_name: @nodrel-dev/n8n-nodes-fedex
npm_version: 0.2.5
community_fetched_at: 2026-07-14T14:40:34.563Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "tracking",
      "options": [
        {
          "name": "Shipping",
          "value": "shipping"
        },
        {
          "name": "Tracking",
          "value": "tracking"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "track",
      "options": [
        {
          "name": "Track",
          "value": "track",
          "action": "Track a shipment",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "output.completeTrackResults"
                  }
                }
              ]
            },
            "request": {
              "url": "/track/v1/trackingnumbers",
              "method": "POST"
            }
          },
          "description": "Get the status and scan history for a tracking number"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tracking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getRates",
      "options": [
        {
          "name": "Get Rates",
          "value": "getRates",
          "action": "Get rates for a shipment",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/rate/v1/rates/quotes",
              "method": "POST"
            }
          },
          "description": "Quote negotiated and list rates for available services"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a shipment and label",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/ship/v1/shipments",
              "method": "POST"
            }
          },
          "description": "Buy a shipment and get a printable label plus tracking number"
        },
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate an address",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "output.resolvedAddresses"
                  }
                }
              ]
            },
            "request": {
              "url": "/address/v1/addresses/resolve",
              "method": "POST"
            }
          },
          "description": "Standardize an address and classify it residential vs commercial"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "shipping"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Track",
      "value": "track",
      "action": "Track a shipment",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "output.completeTrackResults"
              }
            }
          ]
        },
        "request": {
          "url": "/track/v1/trackingnumbers",
          "method": "POST"
        }
      },
      "description": "Get the status and scan history for a tracking number",
      "resource": "tracking"
    },
    {
      "name": "Get Rates",
      "value": "getRates",
      "action": "Get rates for a shipment",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/rate/v1/rates/quotes",
          "method": "POST"
        }
      },
      "description": "Quote negotiated and list rates for available services",
      "resource": "shipping"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a shipment and label",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/ship/v1/shipments",
          "method": "POST"
        }
      },
      "description": "Buy a shipment and get a printable label plus tracking number",
      "resource": "shipping"
    },
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate an address",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "output.resolvedAddresses"
              }
            }
          ]
        },
        "request": {
          "url": "/address/v1/addresses/resolve",
          "method": "POST"
        }
      },
      "description": "Standardize an address and classify it residential vs commercial",
      "resource": "shipping"
    }
  ]

npm_readme:
  <div align="center">

  # 📦 n8n-fedex-node

  **Use the FedEx REST API directly in your n8n workflows.**

  Track shipments · validate addresses · quote rates · create labels — against _your own_ FedEx account, with no aggregator in the middle.

  [![npm version](https://img.shields.io/npm/v/@nodrel-dev/n8n-nodes-fedex?logo=npm&color=cb3837)](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex)
  [![npm downloads](https://img.shields.io/npm/dm/@nodrel-dev/n8n-nodes-fedex)](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex)
  [![CI](https://github.com/nodrel-dev/n8n-fedex-node/actions/workflows/ci.yml/badge.svg)](https://github.com/nodrel-dev/n8n-fedex-node/actions/workflows/ci.yml)
  [![license: MIT](https://img.shields.io/npm/l/@nodrel-dev/n8n-nodes-fedex)](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex)
  [![published with provenance](https://img.shields.io/badge/published%20with-provenance-3b82f6?logo=npm)](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex#provenance)

  [Installation](#installation) · [Operations](#operations) · [Credentials](#credentials) · [Usage](#usage) · [npm](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex) · [FedEx Developer Portal](https://developer.fedex.com/) · [Report an issue](https://github.com/nodrel-dev/n8n-fedex-node/issues)

  </div>

  ## What is this?

  This is an [n8n](https://n8n.io/) community node for the **FedEx REST API**. It lets your workflows track shipments, validate addresses, quote rates, and create shipping labels — talking straight to FedEx with your own API credentials.

  Because there's no aggregator in the middle, you get **your own negotiated rates** and FedEx bills your account directly. [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.

  ### Highlights

  - 🚚 **Direct to FedEx** — your API keys, your negotiated rates, your account billed. No aggregator markup or middleman.
  - 🏷️ **Labels as real binary** — Create returns a print-ready PDF / PNG / ZPL / EPL label as n8n binary data, not a base64 blob buried in JSON.
  - 🔀 **One sandbox / production switch** — a single credential field repoints every API request and the OAuth token URL together, so a call can never straddle environments.
  - 🔐 **Native OAuth2, no token code** — n8n performs the client-credentials exchange and refreshes the ~1 hour token for you.
  - 📦 **Zero runtime dependencies** — ships only `dist/`, published to npm with signed [provenance](https://docs.npmjs.com/generating-provenance-statements) and scanned on every push by Dependabot and Snyk.

  ## Who it's for

  - **E-commerce & retail** — print labels at fulfillment, surface tracking to customers, and rate-shop services per order.
  - **3PLs & fulfillment ops** — automate shipping for many accounts and wire labels into existing pick-and-pack flows.
  - **Finance & operations teams** — quote live negotiated rates inside approval and reconciliation workflows.
  - **Developers & integrators** — embed FedEx tracking, address validation, and labels into any n8n automation without hand-rolling OAuth.

  ## How it works

  The node sits between your workflow and FedEx. A single **FedEx OAuth2** credential holds your API key/secret and the sandbox-or-production switch; n8n handles the token exchange, and every request is routed to the matching FedEx host.

  ```mermaid
  flowchart LR
      subgraph wf["n8n workflow"]
          prev["Upstream node"] --> fedex["FedEx node"]
          fedex --> down["Downstream node<br/>(Write Binary File,<br/>Send Email, …)"]
      end

      cred["FedEx OAuth2 credential<br/>API Key + Secret Key<br/>Sandbox / Production"]
      cred -. "n8n exchanges and refreshes token" .-> fedex

      fedex -->|"HTTPS + bearer token"| api["FedEx REST API<br/>(your account and rates)"]
  ```

  ## Installation

  Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation. In n8n, go to **Settings → Community Nodes → Install** and enter `@nodrel-dev/n8n-nodes-fedex`.

  ## Operations

  The node exposes two resources: **Shipment** and **Address**.

  ```mermaid
  flowchart TD
      node["FedEx node"]
      node --> shipment["📦 Shipment"]
      node --> address["📍 Address"]

      shipment --> track["Track<br/>POST /track/v1/trackingnumbers"]
      shipment --> rates["Get Rates<br/>POST /rate/v1/rates/quotes"]
      shipment --> create["Create<br/>POST /ship/v1/shipments"]
      address --> validate["Validate<br/>POST /address/v1/addresses/resolve"]
  ```

  ### Shipment

  - **Track** — Get the status and scan history for one or more tracking numbers (`POST /track/v1/trackingnumbers`). Toggle **Track Multiple Numbers** to pass a comma-separated list, and **Include Detailed Scans** for the full scan event history.
  - **Get Rates** — Quote negotiated and list rates for available services (`POST /rate/v1/rates/quotes`). Leave **Service Type** as _All Available Services_ to compare every eligible service, or pin a single one. Requires a **Shipping Account Number**. The panel shows a short required core (addresses, weight); optional inputs live under **Additional Fields**.
  - **Create** — Buy a shipment and get a printable label plus tracking number (`POST /ship/v1/shipments`). The label is returned as **n8n binary data** (see [Usage](#usage)). Requires a **Shipping Account Number**. **Service Type** defaults to **FedEx Ground**; optional inputs (company, email, packaging, label stock, dimensions, …) live under **Additional Fields**.

  ### Address

  - **Validate** — Standardize an address and classify it residential vs commercial (`POST /address/v1/addresses/resolve`).

  ## Credentials

  You authenticate with a FedEx **API Key** and **Secret Key** using OAuth2 client-credentials. n8n performs the token exchange and refreshes the ~1 hour token automatically — you never handle tokens yourself.

  ### Prerequisites

  1. Create a free account on the [FedEx Developer Portal](https://developer.fedex.com/).
  2. Create a project and add the APIs you need (Track, Address Validation, Rate, Ship).
  3. The portal issues an **API Key** (client ID) and **Secret Key** (client secret) for both a **test/sandbox** project and, once approved, a **production** project.
  4. For Get Rates and Create you also need your FedEx **shipping account number**.

  ### Two credential types (one per FedEx project)

  The FedEx Developer Portal provisions the **Track API** in a different group from the **shipping** APIs (Rate, Ship, Address Validation), so a single portal project usually cannot hold all four — each project issues its own API Key / Secret Key. The node mirrors this with **two credential types**, and each operation automatically uses the right one:

  - **FedEx Track OAuth2 API** → from the project that has the Track API → used by **Track**.
  - **FedEx Shipping OAuth2 API** → from the project that has Rate + Ship + Address Validation → used by **Get Rates**, **Create**, and **Validate**.

  If your portal account provisions all four APIs in one project, use the same API Key / Secret Key in both credentials.

  ### Set up a credential in n8n

  1. Add a new **FedEx Track OAuth2 API** or **FedEx Shipping OAuth2 API** credential (the node shows the right field per operation).
  2. Set **Environment** to **Sandbox (Test)** while developing, or **Production (Live)** for real shipments. This single switch points both the OAuth token URL and every API request at the matching FedEx host, so a request can never straddle sandbox and production.
  3. Enter your **Client ID** (FedEx API Key) and **Client Secret** (FedEx Secret Key).
  4. Save — n8n runs the credential test against that API and shows a green confirmation when the keys are valid.

  > **Sandbox vs production:** credentials default to **Sandbox** on purpose, so a half-configured connection can't hit a live account. Switch to **Production** only when you are ready to create real, billable shipments.

  ### Production: Create (Ship) requires FedEx label certification

  Sandbox label creation works immediately. **Production** is different: before FedEx authorizes your production credentials to transmit live label transactions, you must complete the [FedEx Shipper Validation](https://developer.fedex.com/) process — generate sample labels, submit them to the FedEx Bar Code Analysis group, and wait for approval (about a three-business-day turnaround). Approval is **per project**. Track, Get Rates, and Validate do not require this; only Ship does.

  ## Compatibility

  - Requires n8n with `n8nNodesApiVersion: 1`.
  - Built and tested against the FedEx REST API (Track v1, Address v1, Rate v1, Ship v1).
  - The shipping **account number** is never defaulted or hardcoded — it always comes from the node field, and your API keys live only in the credential.

  ## Security & dependencies

  The published package ships only `dist/` with **zero runtime dependencies** (`n8n-workflow` is a peer, provided by your n8n instance). Any `pnpm audit` / Dependabot findings are confined to the build, test, and release tooling or the host-provided peer — none of them reach an installed node. Outstanding upstream advisories (waiting on newer `@n8n/node-cli` and `n8n-workflow` releases) are tracked in [#2](https://github.com/nodrel-dev/n8n-fedex-node/issues/2).

  The repository is continuously scanned for vulnerabilities by both **Dependabot** and **[Snyk](https://snyk.io/)** — Snyk checks dependencies and source on every push and pull request, so each release commit is scanned before it ships.

  Every release is published to npm with a signed **[provenance](https://docs.npmjs.com/generating-provenance-statements) attestation** through GitHub Actions [OIDC trusted publishing](https://docs.npmjs.com/trusted-publishers): no long-lived npm token is stored in the repo, and anyone can cryptographically verify that a given version was built by this workflow from this exact commit (see the **Provenance** panel on the [npm page](https://www.npmjs.com/package/@nodrel-dev/n8n-nodes-fedex)).

  ## Usage

  ### Get Rates and Create

  Both operations share the same **Shipper** and **Recipient** address/contact fields, so values carry over when you switch between them.

  Only the fields a shipment genuinely needs sit flat at the top of the panel — addresses, contact name and phone, weight, and (for Create) service and label format. Everything optional is grouped under a single **Additional Fields** collection: company name, email, the **Recipient Is Residential** flag, **Pickup Type**, **Packaging Type**, **Label Stock Type**, and parcel dimensions. Add only what you need; anything you leave out falls back to the same FedEx default it always used. Package dimensions (length/width/height) are still only sent to FedEx when all three are greater than zero.

  ### The label binary (Create)

  Create returns the label as proper n8n **binary data** on the output property named `label` — not a base64 string buried in JSON. Under the hood, the node requests an inline base64 label, decodes it, and attaches it as binary so downstream nodes can print or save it directly:

  ```mermaid
  sequenceDiagram
      participant WF as n8n workflow
      participant Node as FedEx node
      participant Auth as OAuth2 (n8n-managed)
      participant API as FedEx Ship API

      WF->>Node: Execute "Create"
      Node->>Auth: Need access token
      Auth-->>Node: Cached / refreshed token (~1h)
      Node->>API: POST /ship/v1/shipments<br/>(labelResponseOptions: LABEL)
      API-->>Node: JSON + base64 encodedLabel
      Node->>Node: Decode base64 →<br/>attach as binary "label"
      Node-->>WF: JSON (tracking #, rates)<br/>+ binary label
  ```

  Choose the format with **Label Format**:

  | Label Format | MIME type | Typical use |
  |---|---|---|
  | PDF | `application/pdf` | Office printers |
  | PNG | `image/png` | Preview / embedding |
  | Thermal (ZPLII) | `application/octet-stream` | Zebra thermal printers |
  | Thermal (EPL2) | `application/octet-stream` | Eltron thermal printers |

  The tracking number and rate details are passed through on the main JSON output. Wire the `label` binary into **Write Binary File**, **Send Email** (as an attachment), or any node that consumes binary data.

  ### Errors and Continue On Fail

  FedEx error messages (`errors[].message`) are surfaced directly through n8n's error handling, and the node honors **Continue On Fail** — failed items emit an `error` entry and the workflow keeps processing the rest.

  ## Documentation

  Deeper docs for contributors and integrators live in [`docs/`](docs/):

  - [System Overview](docs/system-overview.md) — architecture, auth/environment model, request lifecycle (with diagrams).
  - [Integration Specification](docs/integration-spec.md) — endpoints, request/response shapes, enums, and error handling for all four operations.
  - [Data Model](docs/data-model.md) — the typed shapes the node assembles, and the node-parameter → FedEx-field mapping.
  - [Architecture Decision Records](docs/adr/) — why the key design choices were made.

  ## Resources

  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [FedEx Developer Portal](https://developer.fedex.com/)
  - [FedEx API documentation](https://developer.fedex.com/api/en-us/catalog.html)

  ## Version history

  See [CHANGELOG.md](CHANGELOG.md) for the full, per-release history (kept current automatically on each release).

ai_documentation_summary:
  {"purpose":"Provides direct access to the FedEx REST API in n8n workflows for shipment tracking, address validation, rate quoting, and shipping label creation using the user's own FedEx account. It avoids an aggregator and uses FedEx-native OAuth2 authentication.","capabilities":["Track shipments for one or more tracking numbers, including detailed scan history","Get shipping rates and quote negotiated/list rates for available services","Create shipments and return printable labels plus tracking numbers","Validate addresses and classify them as residential or commercial","Return created labels as n8n binary data in formats such as PDF, PNG, ZPL, or EPL"],"authentication":"OAuth2 client-credentials using a FedEx API Key and Secret Key; n8n handles token exchange and automatic refresh. Supports a sandbox/production switch in the credential.","commonUseCases":["Printing shipping labels during order fulfillment","Showing tracking status updates to customers","Comparing FedEx rates during checkout or approval workflows","Validating shipping addresses before label purchase","Automating shipping workflows for e-commerce, 3PL, and operations teams"],"limitations":["Get Rates and Create require a Shipping Account Number","Only two resources are exposed: Shipment and Address","Authentication is limited to FedEx OAuth2 client-credentials; no manual token handling is supported"],"relatedNodes":[]}


node_type: n8n-nodes-sendseven.sendSevenTrigger
package_name: n8n-nodes-sendseven
display_name: SendSeven Trigger
description: Send and receive WhatsApp Business API, Instagram, Telegram, Email etc. messages in a unified 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: sendseven
author_github_url: https://github.com/SendSeven-GmbH/
npm_package_name: n8n-nodes-sendseven
npm_version: 1.2.9
community_fetched_at: 2026-07-14T14:40:34.564Z
ai_summary_generated_at: 2026-06-26 10:29:17
npm_readme:
  # n8n-nodes-sendseven

  This is an n8n community node for [SendSeven](https://sendseven.com) - a unified messaging API platform enabling multi-channel messaging through WhatsApp, Telegram, SMS, Email, Messenger, Instagram, and more.

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

  ## Installation

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

  ### npm Installation

  ```bash
  npm install n8n-nodes-sendseven
  ```

  ### Manual Installation

  1. Clone this repository
  2. Run `npm install`
  3. Run `npm run build`
  4. Copy the `dist` folder to your n8n custom nodes directory

  ## Operations

  ### SendSeven Node (Actions)

  #### Message
  - **Send**: Send a message through any channel (WhatsApp, Telegram, SMS, Email, etc.)
    - Supports **attachments**: provide a comma-separated list of attachment UUIDs (from the Attachment resource) in the **Attachment IDs** field. These map to the `attachments` array of `POST /messages`. Raw URLs are not accepted — upload first.

  #### Contact
  - **Create**: Create a new contact
  - **Update**: Update an existing contact (name, email, phone, avatar URL)
  - **Get**: Get a contact by ID
  - **Delete**: Delete a contact (GDPR delete — conversations anonymized, billing preserved)
  - **Search**: Search contacts by name, email, or phone
  - **Add Tag**: Add a tag to a contact
  - **Remove Tag**: Remove a tag from a contact
  - **Set Custom Field**: Set a custom field value on a contact. The **Custom Field** dropdown is populated from your tenant's field definitions (`GET /custom-fields`); the value is written via `POST /contacts/{id}/fields/{field_id}`.
  - **Add Method**: Add a contact method (platform ID). Method types: `phone`, `email`, `whatsapp_id`, `telegram_id`, `messenger_id`, `instagram_id`. For `messenger_id`/`instagram_id` a **Channel** must be selected (these IDs are page-scoped).
  - **Delete Method**: Delete a contact method by its method ID.

  #### Conversation
  - **Get**: Get a conversation by ID
  - **Search**: Search conversations by contact, status, or channel type
  - **Close**: Close a conversation
  - **Assign**: Assign a conversation to a team member

  #### WhatsApp Template
  - **Send**: Send a pre-approved WhatsApp template message. Provide **at least one recipient** (Contact ID is no longer mandatory):
    - **Contact ID** — a contact; uses its first WhatsApp method, phone as fallback.
    - **WhatsApp ID** — a phone number without a leading `+` (stripped automatically) or an alphanumeric WhatsApp ID; matches an existing contact or creates one (ideal for stateless integrations).
    - **Contact Method ID** (Additional Options) — target a specific WhatsApp number when a contact has several; must be a `whatsapp_id`-type method. If Contact ID is also set it must name the same contact.
    - **Conversation ID** (Additional Options) — send within an existing WhatsApp conversation.

    Additional Options also expose **Channel ID** (disambiguates a template referenced by NAME across channels, and selects the sending channel when only a WhatsApp ID is given), **Language** (Meta locale code such as `en`, `de`, `en_US`, `pt_BR` — needed only when a template name exists in multiple languages; auto-resolved from the contact's preferred language otherwise), **Header Media URL**, **Header Document Filename**, and **Variable Values (JSON)**.
  - **List**: List available WhatsApp templates

  #### Attachment
  - **Upload**: Upload a binary file (from an incoming binary property such as the output of an HTTP/Read-Binary node) as a multipart `POST /attachments/upload`. Returns the attachment `id`.
  - **Upload from URL**: Fetch a public http(s) URL server-side via `POST /attachments/from-url` and store it. Returns the attachment `id`. Note: the URL-fetch MIME allowlist is stricter than direct upload (images, mp4/mov/webm, common audio, pdf).

  ##### Sending a message with an attachment

  Chain two nodes:

  1. **Attachment → Upload** (or **Upload from URL**) — produces an attachment object whose `id` is the attachment UUID.
  2. **Message → Send** — set the **Attachment IDs** field to an expression referencing the previous node's `id` (e.g. `{{ $json.id }}`), or a comma-separated list of several UUIDs. The node passes these into the `attachments` array of `POST /messages`, and the channel adapter renders them by content type (e.g. WhatsApp image/document, email attachment).

  ### SendSeven Trigger Node (Webhooks)

  Listen for real-time events:

  - **Message Received**: Triggers when a new inbound message is received
  - **Message Sent**: Triggers when an outbound message is delivered
  - **Message Delivered**: Triggers when message delivery is confirmed
  - **Message Failed**: Triggers when a message fails to send
  - **Message Read**: Triggers when a message read receipt is received
  - **Email Received**: Triggers when an inbound email is received
  - **Email Sent**: Triggers when an outbound email is sent
  - **Email Delivered**: Triggers when an email delivery is confirmed
  - **Email Bounced**: Triggers when an email bounces
  - **Email Opened**: Triggers when an email is opened
  - **Conversation Created**: Triggers when a new conversation starts
  - **Conversation Closed**: Triggers when a conversation is closed
  - **Conversation Assigned**: Triggers when a conversation is assigned to an agent
  - **Conversation Reopened**: Triggers when a conversation is reopened
  - **Contact Created**: Triggers when a new contact is created
  - **Contact Updated**: Triggers when a contact is updated
  - **Contact Deleted**: Triggers when a contact is deleted
  - **Link Clicked**: Triggers when a tracked link is clicked
  - **Campaign Sent**: Triggers when a campaign completes sending

  ## Authentication

  This node supports two authentication methods:

  ### API Key (Recommended for most users)

  1. Log in to your SendSeven account at https://app.sendseven.com
  2. Navigate to **Settings > API Tokens**
  3. Create a new API token with the required scopes
  4. Copy the token (format: `s7_xxxxxxxxxxxx`)
  5. In n8n, add a new credential of type "SendSeven API"
  6. Paste your API token

  ### OAuth2 (For advanced integrations)

  1. Log in to your SendSeven account
  2. Navigate to **Settings > OAuth Apps**
  3. Create a new OAuth application
  4. Configure the redirect URI to match your n8n instance
  5. In n8n, add a new credential of type "SendSeven OAuth2 API"
  6. Complete the OAuth2 authorization flow

  ## Required Scopes

  Different operations require different scopes:

  | Operation | Required Scopes |
  |-----------|-----------------|
  | Send Message | `messages:create` |
  | Upload Attachment | `messages:create` |
  | Read Messages | `messages:read` |
  | Create/Update Contact | `contacts:create`, `contacts:update` |
  | Delete Contact / Add or Delete Method / Set Custom Field | `contacts:update` (delete: `contacts:delete`) |
  | Read Contacts | `contacts:read` |
  | Read Custom Field Definitions | `settings:read` |
  | Manage Tags | `tags:read` |
  | Read Conversations | `conversations:read` |
  | Manage Conversations | `conversations:update` |
  | Webhooks | `webhooks:create`, `webhooks:read`, `webhooks:delete` |
  | Knowledge Base | `knowledge_base:read` |
  | Team Members | `team:read` |

  ## Example Workflows

  ### Send WhatsApp notification on new CRM lead

  1. Add a trigger from your CRM (e.g., HubSpot, Salesforce)
  2. Add SendSeven node with "WhatsApp Template > Send" operation
  3. Map the lead data to template variables

  ### Log support conversations to spreadsheet

  1. Add SendSeven Trigger with "Conversation Closed" event
  2. Add Google Sheets node to append row
  3. Map conversation data to spreadsheet columns

  ### Auto-respond to incoming messages

  1. Add SendSeven Trigger with "Message Received" event
  2. Add IF node to check message content
  3. Add SendSeven node with "Message > Send" to reply

  ## Resources

  - [SendSeven Documentation](https://docs.sendseven.com/guides/integrations/n8n)
  - [SendSeven API Reference](https://api.sendseven.com/api/v1/docs)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## Support

  - **Email**: dev@sendseven.com
  - **Documentation**: https://docs.sendseven.com/guides/integrations/n8n
  - **Status**: https://status.sendseven.com

  ## License

  MIT License - see LICENSE file for details.

  ## Changelog

  ### 1.2.4

  - Republished from GitHub Actions with an npm **provenance** statement (required for n8n verified community node review). No functional changes from 1.2.3.
  - Normalized `repository.url` to the `git+https://...git` form required for provenance verification.

  ### 1.2.0

  - **BREAKING FIX (custom fields)**: Custom fields are no longer sent in the contact Create/Update body — the backend silently dropped them (they are not contact-body fields). The dead `Custom Fields` JSON option was removed from Contact → Create. Use the new **Contact → Set Custom Field** operation, which resolves the field definition via `GET /custom-fields` (loadOptions dropdown) and writes the value via `POST /contacts/{id}/fields/{field_id}`. **Action required:** any workflow that relied on the old `Custom Fields` create/update option must switch to Set Custom Field — the old option had no effect.
  - Added **Attachment** resource:
    - **Upload** — binary input → multipart `POST /attachments/upload` (file part `file`, optional `message_id`).
    - **Upload from URL** — `POST /attachments/from-url` (stricter MIME allowlist).
    - Both return the attachment `id` for downstream use.
  - **Message → Send**: added an **Attachment IDs** field (comma-separated attachment UUIDs) wired into the `attachments` array of `POST /messages`.
  - Added **Contact → Delete** (`DELETE /contacts/{id}`, GDPR delete).
  - Added **Contact → Add Method** / **Delete Method** (`POST`/`DELETE /contacts/{id}/methods`). Channel selection is shown conditionally and required for `messenger_id`/`instagram_id`.
  - Added **Contact → Remove Tag** (`DELETE /contacts/{id}/tags/{tag_id}`).
  - Added `getCustomFields` loadOptions helper and a `sendSevenApiRequestFormData` helper for authenticated multipart uploads.

  ### 1.1.0

  - **BREAKING**: Webhook endpoint path changed from `/webhooks` to `/webhook-endpoints`
  - **BREAKING**: Conversation close now uses POST (was PUT) with `notes` field (was `resolution_note`)
  - **BREAKING**: Conversation assign now uses POST with user_id in URL path (was PUT with body)
  - **BREAKING**: Removed `pending` conversation status (only `open` and `closed` remain)
  - Added 3 message addressing modes: Recipient+Channel, Conversation ID, Contact+Channel
  - Added `contact_methods` support for contact creation
  - Updated contact fields: removed `firstName`, `lastName`, `company`, `notes`; added `contactMethods`, `language`, `isBlocked`
  - Updated conversation fields: `assigned_user_id` (was `assigned_to_user_id`), added `needs_reply`, `is_live_chat`, `is_email`, `subject`; removed `message_count`, `unread_count`
  - Updated contact update to only accept `name`, `email`, `phone`, `avatar_url`
  - Added close options: `notes` and `summarize` fields
  - Added conversation search filter: `needs_reply`
  - Updated webhook events: added `message.delivered`, `message.failed`, `message.read`, `email.*`, `conversation.assigned`, `conversation.reopened`, `contact.deleted`, `link.clicked`; removed `message.status_updated`, `ticket.created`, `ticket.closed`
  - Updated OAuth2 scopes: replaced `webhooks:update` with `webhooks:create`/`webhooks:delete`; added `knowledge_base:read`, `team:read`

  ### 1.0.0

  - Initial release
  - Actions: Send Message, Create/Update/Get/Search Contact, Add Tag, Get/Search Conversation, Close/Assign Conversation, Send WhatsApp Template
  - Triggers: Message Received/Sent, Conversation Created/Closed, Contact Created/Updated, Ticket Created/Closed, Campaign Sent
  - Authentication: API Key and OAuth2 support

ai_documentation_summary:
  {"purpose":"SendSeven is a unified messaging integration for n8n that lets you send, receive, and manage multi-channel communications such as WhatsApp, Telegram, SMS, Email, Messenger, and Instagram. The Trigger node listens for real-time messaging, email, contact, conversation, and campaign events from SendSeven.","capabilities":["Trigger workflows on inbound and outbound message events (received, sent, delivered, failed, read)","Trigger workflows on email events (received, sent, delivered, bounced, opened)","Trigger workflows on conversation events (created, closed, assigned, reopened)","Trigger workflows on contact events (created, updated, deleted)","Trigger workflows on link click and campaign sent events","Send messages across multiple channels","Send WhatsApp template messages and list available templates","Create, update, get, delete, search contacts","Add and remove contact tags","Set custom fields on contacts"],"authentication":"API key or OAuth2","commonUseCases":["Automating responses to incoming WhatsApp, Telegram, or email messages","Syncing messaging events into CRM or support workflows","Managing contacts and conversations from n8n","Sending campaign or template-based notifications with attachments","Tracking delivery, read receipts, and engagement events"],"limitations":["Raw URLs cannot be used directly as message attachments; files must be uploaded first and referenced by attachment ID","Upload from URL supports a stricter MIME allowlist than direct binary upload","Messenger and Instagram contact methods require a selected channel because the IDs are page-scoped"],"relatedNodes":[]}


node_type: n8n-nodes-sendseven.sendSeven
package_name: n8n-nodes-sendseven
display_name: SendSeven
description: Send messages, manage contacts, and handle conversations via SendSeven
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: sendseven
author_github_url: https://github.com/SendSeven-GmbH/
npm_package_name: n8n-nodes-sendseven
npm_version: 1.2.9
community_fetched_at: 2026-07-14T14:40:34.565Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "message",
      "options": [
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Conversation",
          "value": "conversation"
        },
        {
          "name": "WhatsApp Template",
          "value": "whatsappTemplate"
        },
        {
          "name": "Attachment",
          "value": "attachment"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send a message",
          "description": "Send a message through a channel"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search contacts",
          "description": "Search for contacts"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact (GDPR delete)"
        },
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag to contact",
          "description": "Add a tag to a contact"
        },
        {
          "name": "Remove Tag",
          "value": "removeTag",
          "action": "Remove tag from contact",
          "description": "Remove a tag from a contact"
        },
        {
          "name": "Set Custom Field",
          "value": "setCustomField",
          "action": "Set custom field on contact",
          "description": "Set a custom field value on a contact"
        },
        {
          "name": "Add Method",
          "value": "addMethod",
          "action": "Add method to contact",
          "description": "Add a contact method (platform ID) to a contact"
        },
        {
          "name": "Delete Method",
          "value": "deleteMethod",
          "action": "Delete method from contact",
          "description": "Delete a contact method from a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get a conversation",
          "description": "Get a conversation by ID"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search conversations",
          "description": "Search for conversations"
        },
        {
          "name": "Close",
          "value": "close",
          "action": "Close a conversation",
          "description": "Close a conversation"
        },
        {
          "name": "Assign",
          "value": "assign",
          "action": "Assign a conversation",
          "description": "Assign a conversation to a user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "conversation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "send",
      "options": [
        {
          "name": "Send",
          "value": "send",
          "action": "Send WhatsApp template",
          "description": "Send a WhatsApp template message"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List WhatsApp templates",
          "description": "List available WhatsApp templates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whatsappTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload an attachment",
          "description": "Upload a binary file as an attachment"
        },
        {
          "name": "Upload from URL",
          "value": "uploadFromUrl",
          "action": "Upload an attachment from URL",
          "description": "Fetch a public URL and store it as an attachment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "attachment"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Send",
      "value": "send",
      "action": "Send a message",
      "description": "Send a message through a channel",
      "resource": "message"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact by ID",
      "resource": "contact"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search contacts",
      "description": "Search for contacts",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact (GDPR delete)",
      "resource": "contact"
    },
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag to contact",
      "description": "Add a tag to a contact",
      "resource": "contact"
    },
    {
      "name": "Remove Tag",
      "value": "removeTag",
      "action": "Remove tag from contact",
      "description": "Remove a tag from a contact",
      "resource": "contact"
    },
    {
      "name": "Set Custom Field",
      "value": "setCustomField",
      "action": "Set custom field on contact",
      "description": "Set a custom field value on a contact",
      "resource": "contact"
    },
    {
      "name": "Add Method",
      "value": "addMethod",
      "action": "Add method to contact",
      "description": "Add a contact method (platform ID) to a contact",
      "resource": "contact"
    },
    {
      "name": "Delete Method",
      "value": "deleteMethod",
      "action": "Delete method from contact",
      "description": "Delete a contact method from a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a conversation",
      "description": "Get a conversation by ID",
      "resource": "conversation"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search conversations",
      "description": "Search for conversations",
      "resource": "conversation"
    },
    {
      "name": "Close",
      "value": "close",
      "action": "Close a conversation",
      "description": "Close a conversation",
      "resource": "conversation"
    },
    {
      "name": "Assign",
      "value": "assign",
      "action": "Assign a conversation",
      "description": "Assign a conversation to a user",
      "resource": "conversation"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send WhatsApp template",
      "description": "Send a WhatsApp template message",
      "resource": "whatsappTemplate"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List WhatsApp templates",
      "description": "List available WhatsApp templates",
      "resource": "whatsappTemplate"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload an attachment",
      "description": "Upload a binary file as an attachment",
      "resource": "attachment"
    },
    {
      "name": "Upload from URL",
      "value": "uploadFromUrl",
      "action": "Upload an attachment from URL",
      "description": "Fetch a public URL and store it as an attachment",
      "resource": "attachment"
    }
  ]

npm_readme:
  # n8n-nodes-sendseven

  This is an n8n community node for [SendSeven](https://sendseven.com) - a unified messaging API platform enabling multi-channel messaging through WhatsApp, Telegram, SMS, Email, Messenger, Instagram, and more.

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

  ## Installation

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

  ### npm Installation

  ```bash
  npm install n8n-nodes-sendseven
  ```

  ### Manual Installation

  1. Clone this repository
  2. Run `npm install`
  3. Run `npm run build`
  4. Copy the `dist` folder to your n8n custom nodes directory

  ## Operations

  ### SendSeven Node (Actions)

  #### Message
  - **Send**: Send a message through any channel (WhatsApp, Telegram, SMS, Email, etc.)
    - Supports **attachments**: provide a comma-separated list of attachment UUIDs (from the Attachment resource) in the **Attachment IDs** field. These map to the `attachments` array of `POST /messages`. Raw URLs are not accepted — upload first.

  #### Contact
  - **Create**: Create a new contact
  - **Update**: Update an existing contact (name, email, phone, avatar URL)
  - **Get**: Get a contact by ID
  - **Delete**: Delete a contact (GDPR delete — conversations anonymized, billing preserved)
  - **Search**: Search contacts by name, email, or phone
  - **Add Tag**: Add a tag to a contact
  - **Remove Tag**: Remove a tag from a contact
  - **Set Custom Field**: Set a custom field value on a contact. The **Custom Field** dropdown is populated from your tenant's field definitions (`GET /custom-fields`); the value is written via `POST /contacts/{id}/fields/{field_id}`.
  - **Add Method**: Add a contact method (platform ID). Method types: `phone`, `email`, `whatsapp_id`, `telegram_id`, `messenger_id`, `instagram_id`. For `messenger_id`/`instagram_id` a **Channel** must be selected (these IDs are page-scoped).
  - **Delete Method**: Delete a contact method by its method ID.

  #### Conversation
  - **Get**: Get a conversation by ID
  - **Search**: Search conversations by contact, status, or channel type
  - **Close**: Close a conversation
  - **Assign**: Assign a conversation to a team member

  #### WhatsApp Template
  - **Send**: Send a pre-approved WhatsApp template message. Provide **at least one recipient** (Contact ID is no longer mandatory):
    - **Contact ID** — a contact; uses its first WhatsApp method, phone as fallback.
    - **WhatsApp ID** — a phone number without a leading `+` (stripped automatically) or an alphanumeric WhatsApp ID; matches an existing contact or creates one (ideal for stateless integrations).
    - **Contact Method ID** (Additional Options) — target a specific WhatsApp number when a contact has several; must be a `whatsapp_id`-type method. If Contact ID is also set it must name the same contact.
    - **Conversation ID** (Additional Options) — send within an existing WhatsApp conversation.

    Additional Options also expose **Channel ID** (disambiguates a template referenced by NAME across channels, and selects the sending channel when only a WhatsApp ID is given), **Language** (Meta locale code such as `en`, `de`, `en_US`, `pt_BR` — needed only when a template name exists in multiple languages; auto-resolved from the contact's preferred language otherwise), **Header Media URL**, **Header Document Filename**, and **Variable Values (JSON)**.
  - **List**: List available WhatsApp templates

  #### Attachment
  - **Upload**: Upload a binary file (from an incoming binary property such as the output of an HTTP/Read-Binary node) as a multipart `POST /attachments/upload`. Returns the attachment `id`.
  - **Upload from URL**: Fetch a public http(s) URL server-side via `POST /attachments/from-url` and store it. Returns the attachment `id`. Note: the URL-fetch MIME allowlist is stricter than direct upload (images, mp4/mov/webm, common audio, pdf).

  ##### Sending a message with an attachment

  Chain two nodes:

  1. **Attachment → Upload** (or **Upload from URL**) — produces an attachment object whose `id` is the attachment UUID.
  2. **Message → Send** — set the **Attachment IDs** field to an expression referencing the previous node's `id` (e.g. `{{ $json.id }}`), or a comma-separated list of several UUIDs. The node passes these into the `attachments` array of `POST /messages`, and the channel adapter renders them by content type (e.g. WhatsApp image/document, email attachment).

  ### SendSeven Trigger Node (Webhooks)

  Listen for real-time events:

  - **Message Received**: Triggers when a new inbound message is received
  - **Message Sent**: Triggers when an outbound message is delivered
  - **Message Delivered**: Triggers when message delivery is confirmed
  - **Message Failed**: Triggers when a message fails to send
  - **Message Read**: Triggers when a message read receipt is received
  - **Email Received**: Triggers when an inbound email is received
  - **Email Sent**: Triggers when an outbound email is sent
  - **Email Delivered**: Triggers when an email delivery is confirmed
  - **Email Bounced**: Triggers when an email bounces
  - **Email Opened**: Triggers when an email is opened
  - **Conversation Created**: Triggers when a new conversation starts
  - **Conversation Closed**: Triggers when a conversation is closed
  - **Conversation Assigned**: Triggers when a conversation is assigned to an agent
  - **Conversation Reopened**: Triggers when a conversation is reopened
  - **Contact Created**: Triggers when a new contact is created
  - **Contact Updated**: Triggers when a contact is updated
  - **Contact Deleted**: Triggers when a contact is deleted
  - **Link Clicked**: Triggers when a tracked link is clicked
  - **Campaign Sent**: Triggers when a campaign completes sending

  ## Authentication

  This node supports two authentication methods:

  ### API Key (Recommended for most users)

  1. Log in to your SendSeven account at https://app.sendseven.com
  2. Navigate to **Settings > API Tokens**
  3. Create a new API token with the required scopes
  4. Copy the token (format: `s7_xxxxxxxxxxxx`)
  5. In n8n, add a new credential of type "SendSeven API"
  6. Paste your API token

  ### OAuth2 (For advanced integrations)

  1. Log in to your SendSeven account
  2. Navigate to **Settings > OAuth Apps**
  3. Create a new OAuth application
  4. Configure the redirect URI to match your n8n instance
  5. In n8n, add a new credential of type "SendSeven OAuth2 API"
  6. Complete the OAuth2 authorization flow

  ## Required Scopes

  Different operations require different scopes:

  | Operation | Required Scopes |
  |-----------|-----------------|
  | Send Message | `messages:create` |
  | Upload Attachment | `messages:create` |
  | Read Messages | `messages:read` |
  | Create/Update Contact | `contacts:create`, `contacts:update` |
  | Delete Contact / Add or Delete Method / Set Custom Field | `contacts:update` (delete: `contacts:delete`) |
  | Read Contacts | `contacts:read` |
  | Read Custom Field Definitions | `settings:read` |
  | Manage Tags | `tags:read` |
  | Read Conversations | `conversations:read` |
  | Manage Conversations | `conversations:update` |
  | Webhooks | `webhooks:create`, `webhooks:read`, `webhooks:delete` |
  | Knowledge Base | `knowledge_base:read` |
  | Team Members | `team:read` |

  ## Example Workflows

  ### Send WhatsApp notification on new CRM lead

  1. Add a trigger from your CRM (e.g., HubSpot, Salesforce)
  2. Add SendSeven node with "WhatsApp Template > Send" operation
  3. Map the lead data to template variables

  ### Log support conversations to spreadsheet

  1. Add SendSeven Trigger with "Conversation Closed" event
  2. Add Google Sheets node to append row
  3. Map conversation data to spreadsheet columns

  ### Auto-respond to incoming messages

  1. Add SendSeven Trigger with "Message Received" event
  2. Add IF node to check message content
  3. Add SendSeven node with "Message > Send" to reply

  ## Resources

  - [SendSeven Documentation](https://docs.sendseven.com/guides/integrations/n8n)
  - [SendSeven API Reference](https://api.sendseven.com/api/v1/docs)
  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)

  ## Support

  - **Email**: dev@sendseven.com
  - **Documentation**: https://docs.sendseven.com/guides/integrations/n8n
  - **Status**: https://status.sendseven.com

  ## License

  MIT License - see LICENSE file for details.

  ## Changelog

  ### 1.2.4

  - Republished from GitHub Actions with an npm **provenance** statement (required for n8n verified community node review). No functional changes from 1.2.3.
  - Normalized `repository.url` to the `git+https://...git` form required for provenance verification.

  ### 1.2.0

  - **BREAKING FIX (custom fields)**: Custom fields are no longer sent in the contact Create/Update body — the backend silently dropped them (they are not contact-body fields). The dead `Custom Fields` JSON option was removed from Contact → Create. Use the new **Contact → Set Custom Field** operation, which resolves the field definition via `GET /custom-fields` (loadOptions dropdown) and writes the value via `POST /contacts/{id}/fields/{field_id}`. **Action required:** any workflow that relied on the old `Custom Fields` create/update option must switch to Set Custom Field — the old option had no effect.
  - Added **Attachment** resource:
    - **Upload** — binary input → multipart `POST /attachments/upload` (file part `file`, optional `message_id`).
    - **Upload from URL** — `POST /attachments/from-url` (stricter MIME allowlist).
    - Both return the attachment `id` for downstream use.
  - **Message → Send**: added an **Attachment IDs** field (comma-separated attachment UUIDs) wired into the `attachments` array of `POST /messages`.
  - Added **Contact → Delete** (`DELETE /contacts/{id}`, GDPR delete).
  - Added **Contact → Add Method** / **Delete Method** (`POST`/`DELETE /contacts/{id}/methods`). Channel selection is shown conditionally and required for `messenger_id`/`instagram_id`.
  - Added **Contact → Remove Tag** (`DELETE /contacts/{id}/tags/{tag_id}`).
  - Added `getCustomFields` loadOptions helper and a `sendSevenApiRequestFormData` helper for authenticated multipart uploads.

  ### 1.1.0

  - **BREAKING**: Webhook endpoint path changed from `/webhooks` to `/webhook-endpoints`
  - **BREAKING**: Conversation close now uses POST (was PUT) with `notes` field (was `resolution_note`)
  - **BREAKING**: Conversation assign now uses POST with user_id in URL path (was PUT with body)
  - **BREAKING**: Removed `pending` conversation status (only `open` and `closed` remain)
  - Added 3 message addressing modes: Recipient+Channel, Conversation ID, Contact+Channel
  - Added `contact_methods` support for contact creation
  - Updated contact fields: removed `firstName`, `lastName`, `company`, `notes`; added `contactMethods`, `language`, `isBlocked`
  - Updated conversation fields: `assigned_user_id` (was `assigned_to_user_id`), added `needs_reply`, `is_live_chat`, `is_email`, `subject`; removed `message_count`, `unread_count`
  - Updated contact update to only accept `name`, `email`, `phone`, `avatar_url`
  - Added close options: `notes` and `summarize` fields
  - Added conversation search filter: `needs_reply`
  - Updated webhook events: added `message.delivered`, `message.failed`, `message.read`, `email.*`, `conversation.assigned`, `conversation.reopened`, `contact.deleted`, `link.clicked`; removed `message.status_updated`, `ticket.created`, `ticket.closed`
  - Updated OAuth2 scopes: replaced `webhooks:update` with `webhooks:create`/`webhooks:delete`; added `knowledge_base:read`, `team:read`

  ### 1.0.0

  - Initial release
  - Actions: Send Message, Create/Update/Get/Search Contact, Add Tag, Get/Search Conversation, Close/Assign Conversation, Send WhatsApp Template
  - Triggers: Message Received/Sent, Conversation Created/Closed, Contact Created/Updated, Ticket Created/Closed, Campaign Sent
  - Authentication: API Key and OAuth2 support

ai_documentation_summary:
  {"purpose":"SendSeven is an n8n community node for unified multi-channel messaging through SendSeven. It lets workflows send messages, manage contacts and conversations, handle attachments, use WhatsApp templates, and react to real-time messaging events.","capabilities":["Send messages across channels such as WhatsApp, Telegram, SMS, Email, Messenger, and Instagram","Create, update, get, delete, search contacts and manage contact tags, custom fields, and contact methods","Get, search, close, and assign conversations","Send and list WhatsApp templates","Upload attachments from binary data or from public URLs","Trigger on inbound/outbound message, email, conversation, contact, link click, and campaign events"],"authentication":"Supports API Key authentication and OAuth2. API Key is recommended for most users; OAuth2 is also available for advanced integrations.","commonUseCases":["Automating customer support or sales messaging across multiple channels","Syncing and enriching contact records in SendSeven from n8n workflows","Tracking conversation lifecycle events and routing assignments","Sending WhatsApp template messages and message attachments","Listening for inbound messages, delivery receipts, and engagement events"],"limitations":["Attachment IDs must come from uploaded attachments; raw URLs cannot be used directly when sending messages","Upload from URL supports a stricter MIME allowlist than direct binary upload","Messenger and Instagram contact methods require a selected Channel because the IDs are page-scoped"],"relatedNodes":[]}


node_type: n8n-nodes-warmy-io.warmy
package_name: n8n-nodes-warmy-io
display_name: Warmy
description: Manage Warmy.io mailboxes and warmup settings
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: skachkis
author_github_url: https://github.com/skachkiss/
npm_package_name: n8n-nodes-warmy-io
npm_version: 0.1.4
community_fetched_at: 2026-07-14T14:40:34.566Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "mailbox",
      "options": [
        {
          "name": "Deliverability Checker",
          "value": "deliverabilityChecker"
        },
        {
          "name": "Mailbox",
          "value": "mailbox"
        },
        {
          "name": "Seedlist",
          "value": "seedlist"
        },
        {
          "name": "Standalone Deliverability Checker",
          "value": "standaloneDeliverabilityChecker"
        },
        {
          "name": "User Template",
          "value": "userTemplate"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a deliverability checker",
          "description": "Run a new deliverability test"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a deliverability checker",
          "description": "Get full info about a deliverability checker by token"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many deliverability checkers",
          "description": "List deliverability checkers for a mailbox"
        },
        {
          "name": "Mass Update Auto Checker",
          "value": "massUpdateAutoChecker",
          "action": "Mass update auto checker",
          "description": "Change auto checker settings for many mailboxes at once"
        },
        {
          "name": "Toggle Auto Checker",
          "value": "toggleAutoChecker",
          "action": "Toggle auto checker",
          "description": "Activate or deactivate auto checker for a single mailbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deliverabilityChecker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Change Tariff Plan",
          "value": "changeTariffPlan",
          "action": "Change tariff plan",
          "description": "Change tariff plan for a mailbox"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a mailbox",
          "description": "Create a new mailbox"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a mailbox",
          "description": "Permanently delete a mailbox"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a mailbox",
          "description": "Get details of a single mailbox"
        },
        {
          "name": "Get Domains List",
          "value": "getDomainsList",
          "action": "Get domains list",
          "description": "Get unique domains used by workspace mailboxes"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many mailboxes",
          "description": "Get a list of mailboxes"
        },
        {
          "name": "Get Providers List",
          "value": "getProvidersList",
          "action": "Get providers list",
          "description": "Get email providers used by workspace mailboxes"
        },
        {
          "name": "Get Total Warmup Statistics",
          "value": "getTotalWarmupStatistics",
          "action": "Get total warmup statistics",
          "description": "Get total warmup counts for a mailbox"
        },
        {
          "name": "Get Warmup Statistics",
          "value": "getWarmupStatistics",
          "action": "Get warmup statistics",
          "description": "Get inbox/spam placement stats across mailboxes"
        },
        {
          "name": "Get Warmup Statistics by Provider",
          "value": "getWarmupStatisticsByProvider",
          "action": "Get warmup statistics by provider",
          "description": "Get warmup stats grouped by provider for a mailbox"
        },
        {
          "name": "Health Check",
          "value": "healthCheck",
          "action": "Run health check",
          "description": "Trigger health check for a single mailbox"
        },
        {
          "name": "Health Check All",
          "value": "healthCheckAll",
          "action": "Run health check for all",
          "description": "Trigger health check for all active mailboxes"
        },
        {
          "name": "Reconnect",
          "value": "reconnect",
          "action": "Reconnect a mailbox",
          "description": "Reconnect an SMTP/IMAP mailbox with updated credentials"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update mailbox settings",
          "description": "Update mailbox warmup settings"
        },
        {
          "name": "Update State",
          "value": "updateState",
          "action": "Update mailbox state",
          "description": "Activate or pause a mailbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mailbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManySenders",
      "options": [
        {
          "name": "Get Many Senders",
          "value": "getManySenders",
          "action": "Get many seedlist senders",
          "description": "Get whitelisted seedlist sender emails for the workspace"
        },
        {
          "name": "Get Many Splits",
          "value": "getManySplits",
          "action": "Get many seedlist splits",
          "description": "Retrieve seedlist splits with optional filters"
        },
        {
          "name": "Get Split",
          "value": "getSplit",
          "action": "Get a seedlist split",
          "description": "Get details of a single seedlist split"
        },
        {
          "name": "Get Split Emails",
          "value": "getSplitEmails",
          "action": "Get split emails",
          "description": "List seedlist email addresses for a split"
        },
        {
          "name": "Update Split",
          "value": "updateSplit",
          "action": "Update a seedlist split",
          "description": "Add, update, or remove sender emails on a split"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "seedlist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a standalone deliverability checker",
          "description": "Create a deliverability test without a connected mailbox"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a standalone deliverability checker",
          "description": "Get a standalone deliverability checker by uniq token"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many standalone deliverability checkers",
          "description": "List standalone deliverability checkers"
        },
        {
          "name": "Get Possible Providers",
          "value": "getPossibleProviders",
          "action": "Get possible providers",
          "description": "List providers available for standalone deliverability testing"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "standaloneDeliverabilityChecker"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a user template",
          "description": "Create a new user template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a user template",
          "description": "Permanently delete a user template"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a user template",
          "description": "Get details of a single user template"
        },
        {
          "name": "Get Aggregate Statistics",
          "value": "getStatistics",
          "action": "Get aggregate template statistics",
          "description": "Get aggregated statistics across templates"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many user templates",
          "description": "Retrieve user templates with optional filters"
        },
        {
          "name": "Get Many Simple",
          "value": "getMany",
          "action": "Get many user templates simple",
          "description": "Lightweight list of templates with only ID, name and subject"
        },
        {
          "name": "Get Many with Stats",
          "value": "getManyWithStats",
          "action": "Get many user templates with stats",
          "description": "List templates with per-template performance metrics"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a user template",
          "description": "Update an existing user template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "userTemplate"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a deliverability checker",
      "description": "Run a new deliverability test",
      "resource": "deliverabilityChecker"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a deliverability checker",
      "description": "Get full info about a deliverability checker by token",
      "resource": "deliverabilityChecker"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many deliverability checkers",
      "description": "List deliverability checkers for a mailbox",
      "resource": "deliverabilityChecker"
    },
    {
      "name": "Mass Update Auto Checker",
      "value": "massUpdateAutoChecker",
      "action": "Mass update auto checker",
      "description": "Change auto checker settings for many mailboxes at once",
      "resource": "deliverabilityChecker"
    },
    {
      "name": "Toggle Auto Checker",
      "value": "toggleAutoChecker",
      "action": "Toggle auto checker",
      "description": "Activate or deactivate auto checker for a single mailbox",
      "resource": "deliverabilityChecker"
    },
    {
      "name": "Change Tariff Plan",
      "value": "changeTariffPlan",
      "action": "Change tariff plan",
      "description": "Change tariff plan for a mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a mailbox",
      "description": "Create a new mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a mailbox",
      "description": "Permanently delete a mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a mailbox",
      "description": "Get details of a single mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Get Domains List",
      "value": "getDomainsList",
      "action": "Get domains list",
      "description": "Get unique domains used by workspace mailboxes",
      "resource": "mailbox"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many mailboxes",
      "description": "Get a list of mailboxes",
      "resource": "mailbox"
    },
    {
      "name": "Get Providers List",
      "value": "getProvidersList",
      "action": "Get providers list",
      "description": "Get email providers used by workspace mailboxes",
      "resource": "mailbox"
    },
    {
      "name": "Get Total Warmup Statistics",
      "value": "getTotalWarmupStatistics",
      "action": "Get total warmup statistics",
      "description": "Get total warmup counts for a mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Get Warmup Statistics",
      "value": "getWarmupStatistics",
      "action": "Get warmup statistics",
      "description": "Get inbox/spam placement stats across mailboxes",
      "resource": "mailbox"
    },
    {
      "name": "Get Warmup Statistics by Provider",
      "value": "getWarmupStatisticsByProvider",
      "action": "Get warmup statistics by provider",
      "description": "Get warmup stats grouped by provider for a mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Health Check",
      "value": "healthCheck",
      "action": "Run health check",
      "description": "Trigger health check for a single mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Health Check All",
      "value": "healthCheckAll",
      "action": "Run health check for all",
      "description": "Trigger health check for all active mailboxes",
      "resource": "mailbox"
    },
    {
      "name": "Reconnect",
      "value": "reconnect",
      "action": "Reconnect a mailbox",
      "description": "Reconnect an SMTP/IMAP mailbox with updated credentials",
      "resource": "mailbox"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update mailbox settings",
      "description": "Update mailbox warmup settings",
      "resource": "mailbox"
    },
    {
      "name": "Update State",
      "value": "updateState",
      "action": "Update mailbox state",
      "description": "Activate or pause a mailbox",
      "resource": "mailbox"
    },
    {
      "name": "Get Many Senders",
      "value": "getManySenders",
      "action": "Get many seedlist senders",
      "description": "Get whitelisted seedlist sender emails for the workspace",
      "resource": "seedlist"
    },
    {
      "name": "Get Many Splits",
      "value": "getManySplits",
      "action": "Get many seedlist splits",
      "description": "Retrieve seedlist splits with optional filters",
      "resource": "seedlist"
    },
    {
      "name": "Get Split",
      "value": "getSplit",
      "action": "Get a seedlist split",
      "description": "Get details of a single seedlist split",
      "resource": "seedlist"
    },
    {
      "name": "Get Split Emails",
      "value": "getSplitEmails",
      "action": "Get split emails",
      "description": "List seedlist email addresses for a split",
      "resource": "seedlist"
    },
    {
      "name": "Update Split",
      "value": "updateSplit",
      "action": "Update a seedlist split",
      "description": "Add, update, or remove sender emails on a split",
      "resource": "seedlist"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a standalone deliverability checker",
      "description": "Create a deliverability test without a connected mailbox",
      "resource": "standaloneDeliverabilityChecker"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a standalone deliverability checker",
      "description": "Get a standalone deliverability checker by uniq token",
      "resource": "standaloneDeliverabilityChecker"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many standalone deliverability checkers",
      "description": "List standalone deliverability checkers",
      "resource": "standaloneDeliverabilityChecker"
    },
    {
      "name": "Get Possible Providers",
      "value": "getPossibleProviders",
      "action": "Get possible providers",
      "description": "List providers available for standalone deliverability testing",
      "resource": "standaloneDeliverabilityChecker"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a user template",
      "description": "Create a new user template",
      "resource": "userTemplate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a user template",
      "description": "Permanently delete a user template",
      "resource": "userTemplate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a user template",
      "description": "Get details of a single user template",
      "resource": "userTemplate"
    },
    {
      "name": "Get Aggregate Statistics",
      "value": "getStatistics",
      "action": "Get aggregate template statistics",
      "description": "Get aggregated statistics across templates",
      "resource": "userTemplate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many user templates",
      "description": "Retrieve user templates with optional filters",
      "resource": "userTemplate"
    },
    {
      "name": "Get Many Simple",
      "value": "getMany",
      "action": "Get many user templates simple",
      "description": "Lightweight list of templates with only ID, name and subject",
      "resource": "userTemplate"
    },
    {
      "name": "Get Many with Stats",
      "value": "getManyWithStats",
      "action": "Get many user templates with stats",
      "description": "List templates with per-template performance metrics",
      "resource": "userTemplate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a user template",
      "description": "Update an existing user template",
      "resource": "userTemplate"
    }
  ]

npm_readme:
  # n8n-nodes-warmy-io

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

  n8n community node for the [Warmy.io](https://warmy.io) email-warmup API.

  ## Resources & operations

  | Resource | Operations |
  | --- | --- |
  | **Mailbox** | List, Get, Create, Update, Delete, Pause, Resume, change tariff plan, and more (15 operations total). |
  | **Seedlist** | List splits, list emails, manage seedlist providers (5 operations). |
  | **Deliverability Checker** | List, get, run, and inspect deliverability checks (5 operations). |
  | **Standalone Deliverability Checker** | List, get, and inspect standalone deliverability runs (4 operations). |
  | **User Template** | Manage warmup email templates. |

  All endpoints back the official Warmy.io REST API. Pagination is handled transparently via a `Return All` toggle on every list operation.

  ## Installation

  ### As an n8n community node (recommended)

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

  ```
  n8n-nodes-warmy-io
  ```

  ### Manual install (self-hosted n8n)

  ```bash
  cd ~/.n8n/custom
  npm init -y                          # only if ~/.n8n/custom is empty
  npm install n8n-nodes-warmy-io
  n8n start
  ```

  In the browser open `http://localhost:5678`, create a workflow, and search for the **Warmy** node.

  ## Credentials setup

  1. In n8n: **Credentials → New → Warmy API**.
  2. Fill in:
     - **API Token** — generate on warmy.io → Workspace → Settings → API Keys.
     - **Holder UID** — get it from [warmy.io/api-documentation](https://www.warmy.io/api-documentation).
  3. Press **Test** — should return success.

  ## Local development

  Requires **Node.js 22 LTS** (n8n's native `isolated-vm` won't build on Node 25+).

  ```bash
  git clone https://github.com/skachkiss/n8n-nodes-warmy-io.git
  cd n8n-nodes-warmy-io
  npm install
  npm run build                        # tsc → dist/, then gulp copies icons
  npm link                             # expose the package globally

  cd ~/.n8n/custom
  npm init -y                          # only if not already initialised
  npm link n8n-nodes-warmy-io

  n8n start
  ```

  n8n loads custom nodes once at startup — restart the process after every `npm run build`. The browser also caches the SVG icon aggressively; hard-refresh (Cmd+Shift+R) if a logo change doesn't appear.

  ### Dev scripts

  ```bash
  npm run dev      # tsc --watch (does NOT re-copy icons; rerun build if svg changes)
  npm run lint     # eslint via eslint-plugin-n8n-nodes-base
  npm run lintfix  # auto-fix most n8n-nodes-base lint rules
  npm run format   # prettier
  ```

  ## Adding a new resource

  1. Read the relevant section of the Warmy OpenAPI spec.
  2. Create `nodes/Warmy/descriptions/<Resource>Description.ts` exporting `<resource>Operations` and `<resource>Fields`.
  3. Re-export from `nodes/Warmy/descriptions/index.ts`.
  4. In `nodes/Warmy/Warmy.node.ts`: add the resource value to the resource dropdown, spread the new operations/fields, and add a dispatch branch in `execute()` calling your `execute<Resource>` function.
  5. `npm run build && npm run lintfix`.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Manages Warmy.io email warmup resources and settings from within n8n. It provides access to Warmy's REST API for mailbox management, seedlist administration, deliverability checks, and warmup email templates.","capabilities":["Mailbox operations: list, get, create, update, delete, pause, resume, and change tariff plan","Seedlist operations: list splits, list emails, and manage seedlist providers","Deliverability Checker operations: list, get, run, and inspect checks","Standalone Deliverability Checker operations: list, get, and inspect runs","User Template management for warmup email templates","Transparent pagination via Return All toggles on list operations"],"authentication":"API token plus Holder UID required via Warmy API credentials","commonUseCases":["Automating creation and maintenance of Warmy mailboxes","Monitoring deliverability checks and warmup performance","Managing seedlists and warmup email templates in workflows"],"limitations":["Pagination is only configurable through a Return All toggle on list operations","Requires external Warmy.io API credentials and account identifiers to function"],"relatedNodes":[]}


node_type: @periodix/n8n-nodes-actions.linkedIn
package_name: @periodix/n8n-nodes-actions
display_name: Periodix LinkedIn
description: Search LinkedIn & Sales Navigator and fetch profiles, posts, comments, reactions, and connections
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: vadym.gidulian
author_github_url: https://github.com/Periodix-Inc/n8n-nodes-actions.git
npm_package_name: @periodix/n8n-nodes-actions
npm_version: 1.2.0
community_fetched_at: 2026-07-14T14:40:34.567Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "profile",
      "options": [
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Connection",
          "value": "connection"
        },
        {
          "name": "Post",
          "value": "post"
        },
        {
          "name": "Profile",
          "value": "profile"
        },
        {
          "name": "Search",
          "value": "search"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get profile",
          "description": "Fetch a full LinkedIn profile — experience, education, skills, and summary"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "profile"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get company profile",
          "description": "Fetch a LinkedIn company profile — industry, size, description, and locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Comments",
          "value": "getComments",
          "action": "Get post comments",
          "description": "List the comments on a LinkedIn post, with author details"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many posts",
          "description": "List recent posts by a LinkedIn person or company"
        },
        {
          "name": "Get Reactions",
          "value": "getReactions",
          "action": "Get post reactions",
          "description": "List the people who reacted to a LinkedIn post or comment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "post"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many connections",
          "description": "List the 1st-degree connections of a connected LinkedIn account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "connection"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search by URL",
          "description": "Run a LinkedIn Classic or Sales Navigator search (People, Companies, Posts, Jobs)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get",
      "value": "get",
      "action": "Get profile",
      "description": "Fetch a full LinkedIn profile — experience, education, skills, and summary",
      "resource": "profile"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get company profile",
      "description": "Fetch a LinkedIn company profile — industry, size, description, and locations",
      "resource": "company"
    },
    {
      "name": "Get Comments",
      "value": "getComments",
      "action": "Get post comments",
      "description": "List the comments on a LinkedIn post, with author details",
      "resource": "post"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many posts",
      "description": "List recent posts by a LinkedIn person or company",
      "resource": "post"
    },
    {
      "name": "Get Reactions",
      "value": "getReactions",
      "action": "Get post reactions",
      "description": "List the people who reacted to a LinkedIn post or comment",
      "resource": "post"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many connections",
      "description": "List the 1st-degree connections of a connected LinkedIn account",
      "resource": "connection"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search by URL",
      "description": "Run a LinkedIn Classic or Sales Navigator search (People, Companies, Posts, Jobs)",
      "resource": "search"
    }
  ]

npm_readme:
  # @periodix/n8n-nodes-actions

  This is the **Periodix Actions** community node package for n8n. It lets you pull LinkedIn data — search results, full profiles, company profiles, posts, post comments and reactions, and connections — straight from your workflows, using safe, rate-limited calls through a connected LinkedIn account.

  [Periodix Actions](https://actions.periodix.net/?utm_source=github&utm_medium=readme&utm_content=intro) is a multi-tenant API for sales-automation primitives. It handles LinkedIn account connection, rate limiting, and pacing on your behalf, so your workflows don't have to.

  [Installation](#installation)
  [Features](#features)
  [Credentials](#credentials)
  [Nodes](#nodes)
  [Usage](#usage)
  [Example Workflow](#example-workflow)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation

  ### Community Nodes (recommended)

  1. In n8n, go to **Settings → Community Nodes**.
  2. Click **Install**.
  3. Enter `@periodix/n8n-nodes-actions` and click **Download**.
  4. The **Periodix LinkedIn** node will appear in your node palette.

  ### Self-hosted / manual

  Run `npm install @periodix/n8n-nodes-actions` inside your n8n installation, then restart n8n.

  See the official [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) for full details.

  ## Features

  - **Search by URL** — paste any LinkedIn Classic or Sales Navigator search URL and get back matching People, Companies, Posts, or Jobs.
  - **Profile & company enrichment** — fetch a full person profile (experience, education, skills, summary) or a company profile (industry, size, locations) by identifier.
  - **Engagement & content** — list a person's or company's recent posts, and the comments and reactions on any post, to find and qualify warm leads.
  - **Network** — list the 1st-degree connections of a connected account.
  - **Managed profile connection** — connect LinkedIn accounts in the Periodix Actions dashboard with a hosted auth flow; no cookies or credentials in n8n.
  - **Built-in rate limiting** — Periodix paces calls per profile so you stay within LinkedIn's limits.

  ## Credentials

  Steps to obtain the **API key** needed for authentication:

  1. Go to [actions.periodix.net](https://actions.periodix.net?utm_source=github&utm_medium=readme&utm_content=signin) and sign in (or create an account).
  2. Open the **Profiles** page and connect at least one LinkedIn account using the hosted auth flow.
  3. Open the **API keys** page and click **New API key**.
  4. **Copy** the generated key.
  5. In n8n, create a new **Periodix Actions API** credential.
  6. **Paste** the API key into the **API Key** field and save.

  API keys can be revoked from the dashboard at any time.

  Every operation requires this credential and a connected LinkedIn **Profile**, chosen from a dropdown that loads the profiles on your account. The dropdown shows each profile's connection status; if the chosen profile is not connected at execution time, the call fails — reconnect it from the dashboard.

  ## Node

  A single **Periodix LinkedIn** node exposes every capability. Pick a **Resource**, then an **Operation**.

  ### Profile → Get

  Fetch a full LinkedIn profile (experience, education, skills, summary).

  - **Person** — the public identifier (the part after `/in/` in the profile URL, e.g. `john-doe`) or the internal ID (e.g. `ACoAA…`) of the person.
  - **Options → Notify Person** — whether to let the person see that you viewed their profile (default off).

  ### Company → Get

  Fetch a LinkedIn company profile (industry, size, description, locations).

  - **Company** — the public identifier (the part after `/company/`), numeric company ID, or URN.

  ### Post → Get Many

  List the recent posts published by a person or company. Emits one item per post.

  - **Author ID** — the author's internal ID. For a person it starts with `ACo`/`ADo`; for a company use the numeric company ID and enable **Is Company**.
  - **Is Company** — whether the author is a company rather than a person.
  - **Return All** / **Limit** — return everything, or cap the number of posts.

  ### Post → Get Comments

  List the comments on a post, with author details. Emits one item per comment.

  - **Post Social ID** — the post's `social_id` (returned by **Post → Get Many**), not the numeric ID in the post URL.
  - **Return All** / **Limit**.

  ### Post → Get Reactions

  List the people who reacted to a post (or to a specific comment). Emits one item per reaction.

  - **Post Social ID** — the post's `social_id` (returned by **Post → Get Many**).
  - **Options → Comment ID** — fetch reactions on a specific comment instead of the post.
  - **Return All** / **Limit**.

  ### Connection → Get Many

  List the 1st-degree connections of the connected account. Emits one item per connection.

  - **Return All** / **Limit**.

  ### Search → Search

  Run a LinkedIn search by URL and return the matched items. *Asynchronous* — see [Usage](#usage).

  - **Search URL** — a fully-qualified LinkedIn search URL. Supported:
    - LinkedIn Classic: [People](https://www.linkedin.com/search/results/people/), [Companies](https://www.linkedin.com/search/results/companies/), [Posts](https://www.linkedin.com/search/results/content/), [Jobs](https://www.linkedin.com/search/results/jobs/).
    - LinkedIn Sales Navigator: [People](https://www.linkedin.com/sales/search/people), [Companies](https://www.linkedin.com/sales/search/company).
  - **Limit** — maximum number of results to return.
  - **Options → Timeout (Minutes)** *(advanced)* — how long to wait for the search to finish before giving up.

  ## Usage

  **Search is asynchronous.** The **Search → Search** operation processes a single input item and waits (via webhook) for the search to complete — searches typically take minutes depending on result size and LinkedIn pacing.

  **The other operations are synchronous.** They return immediately, process every input item, and emit one output item per result. The list operations (Post → Get Many, Get Comments, Get Reactions, and Connection → Get Many) paginate automatically: turn on **Return All** to fetch everything, or leave it off and set a **Limit**.

  **Post IDs.** Comments and reactions are keyed by a post's `social_id`, which you get from **Post → Get Many** — the numeric ID in a post's URL will not work.

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

  ## Example Workflow

  ### Find and enrich engaged leads from a post

  1. Add a **Manual Trigger** (or any trigger).
  2. Add **Periodix LinkedIn** (Resource **Post**, Operation **Get Many**), pick a connected **Profile**, and enter the author's **Author ID** to find a relevant post; note its `social_id`.
  3. Add another **Periodix LinkedIn** (Resource **Post**, Operation **Get Comments** or **Get Reactions**) and pass that `social_id` as the **Post Social ID** to list everyone who engaged.
  4. Add another **Periodix LinkedIn** (Resource **Profile**, Operation **Get**) to enrich each commenter/reactor into a full profile.
  5. Connect a **Google Sheets → Append Row** node downstream, mapping the fields you need.

  ## Version history

  See [CHANGELOG.md](CHANGELOG.md) for the full release history.

  ## Resources

  - [Periodix Actions](https://actions.periodix.net/?utm_source=github&utm_medium=readme&utm_content=links)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)

ai_documentation_summary:
  {"purpose":"Periodix LinkedIn is an n8n community node for pulling LinkedIn and Sales Navigator data through a connected Periodix Actions account. It can search LinkedIn URLs and fetch profiles, company data, posts, comments, reactions, and connections with managed rate limiting.","capabilities":["Search LinkedIn Classic and Sales Navigator URLs for people, companies, posts, and jobs","Fetch full person profiles including experience, education, skills, and summary","Fetch company profiles including industry, size, description, and locations","List recent posts from a person or company","List comments on a post with author details","List reactions on a post or on a specific comment","List 1st-degree connections of the connected LinkedIn account","Use asynchronous search with webhook-based completion handling","Managed LinkedIn account connection and built-in rate limiting through Periodix"],"authentication":"API key required via Periodix Actions API credential, plus a connected LinkedIn profile selected from a dropdown in n8n","commonUseCases":["Enriching people and company records from LinkedIn","Finding and qualifying leads from search results, posts, comments, and reactions","Monitoring a profile's recent activity and engagement","Retrieving a connected account's first-degree network","Running LinkedIn and Sales Navigator searches from workflows"],"limitations":["Search operation is asynchronous and may take minutes to complete","Every operation requires a connected LinkedIn profile that must remain connected at execution time","Search is limited to fully qualified LinkedIn Classic and Sales Navigator search URLs"],"relatedNodes":[]}


node_type: @mice-operations/n8n-nodes-miceoperations.miceoperations
package_name: @mice-operations/n8n-nodes-miceoperations
display_name: MICE Operations
description: Interact with the MICE Operations API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: wpmvangroesen
author_github_url: https://github.com/beerntea/n8n-nodes-miceoperations.git
npm_package_name: @mice-operations/n8n-nodes-miceoperations
npm_version: 1.0.5
community_fetched_at: 2026-07-14T14:40:34.568Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "event",
      "options": [
        {
          "name": "Client",
          "value": "client"
        },
        {
          "name": "Company",
          "value": "company"
        },
        {
          "name": "Event",
          "value": "event"
        },
        {
          "name": "External Object",
          "value": "externalObject"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Location",
          "value": "location"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMe",
      "options": [
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get authenticated company",
          "routing": {
            "request": {
              "url": "/companies/me",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Activities",
          "value": "addActivities",
          "action": "Add event activities",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/activities",
              "body": "={{$parameter.eventActivitiesBody}}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Add Products",
          "value": "addProducts",
          "action": "Add event products",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/products",
              "body": "={{$parameter.eventProductsBody}}",
              "method": "POST"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an event",
          "routing": {
            "request": {
              "url": "/events",
              "method": "POST"
            }
          }
        },
        {
          "name": "Create Message",
          "value": "createMessage",
          "action": "Create event message",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/messages",
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an event",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/events/{{$parameter.eventId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Delete Activity",
          "value": "deleteActivity",
          "action": "Delete event activity",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/events/{{$parameter.eventId}}/activities/{{$parameter.activityId}}",
              "method": "DELETE"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an event",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Billed Amount",
          "value": "getBilledAmount",
          "action": "Get billed amount",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/billed_amount",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many events",
          "routing": {
            "request": {
              "url": "/events",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "Get event messages",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/messages",
              "method": "GET"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an event",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}",
              "method": "PUT"
            }
          }
        },
        {
          "name": "Update Activity",
          "value": "updateActivity",
          "action": "Update event activity",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/activities/{{$parameter.activityId}}",
              "method": "PUT"
            }
          }
        },
        {
          "name": "Update by Receipt",
          "value": "updateByReceipt",
          "action": "Update event from receipt",
          "routing": {
            "request": {
              "url": "=/events/{{$parameter.eventId}}/receipt",
              "body": "={{$parameter.eventReceiptItemsBody}}",
              "method": "POST"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many clients",
          "routing": {
            "request": {
              "url": "/clients",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a client",
          "routing": {
            "request": {
              "url": "=/clients/{{$parameter.clientId}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a client",
          "routing": {
            "request": {
              "url": "/clients",
              "method": "POST"
            }
          }
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a client",
          "routing": {
            "request": {
              "url": "=/clients/{{$parameter.clientId}}",
              "method": "PUT"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "client"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many products",
          "routing": {
            "request": {
              "url": "/products",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "routing": {
            "request": {
              "url": "=/products/{{$parameter.productId}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Get product categories",
          "routing": {
            "request": {
              "url": "/products/categories",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many locations",
          "routing": {
            "request": {
              "url": "/locations",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a location",
          "routing": {
            "request": {
              "url": "=/locations/{{$parameter.locationId}}",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "location"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Add Payment",
          "value": "addPayment",
          "action": "Add invoice payment",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter.invoiceId}}/payments",
              "method": "POST"
            }
          }
        },
        {
          "name": "Confirm Sync",
          "value": "confirmSync",
          "action": "Confirm invoice sync",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter.invoiceId}}/sync/confirm",
              "method": "POST"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an invoice",
          "routing": {
            "request": {
              "url": "/invoices",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an invoice",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter.invoiceId}}",
              "method": "GET"
            }
          }
        },
        {
          "name": "Get File PDF",
          "value": "getFilePdf",
          "action": "Get an invoice PDF",
          "routing": {
            "request": {
              "url": "=/invoices/{{$parameter.invoiceId}}/file.pdf",
              "json": false,
              "method": "GET"
            }
          }
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "routing": {
            "request": {
              "url": "/invoices",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhooks",
          "routing": {
            "request": {
              "url": "/webhooks",
              "method": "GET"
            }
          }
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "request": {
              "url": "/webhooks",
              "method": "POST"
            }
          }
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "setKeyValue",
                  "properties": {
                    "value": "={{ { \"success\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/webhooks/{{$parameter.webhookId}}",
              "method": "DELETE"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create external object mapping",
          "routing": {
            "request": {
              "url": "/external_objects",
              "method": "POST"
            }
          }
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get external object mapping",
          "routing": {
            "request": {
              "url": "/external_objects/get",
              "method": "GET"
            }
          }
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "externalObject"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get authenticated company",
      "routing": {
        "request": {
          "url": "/companies/me",
          "method": "GET"
        }
      },
      "resource": "company"
    },
    {
      "name": "Add Activities",
      "value": "addActivities",
      "action": "Add event activities",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/activities",
          "body": "={{$parameter.eventActivitiesBody}}",
          "method": "POST"
        }
      },
      "resource": "event"
    },
    {
      "name": "Add Products",
      "value": "addProducts",
      "action": "Add event products",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/products",
          "body": "={{$parameter.eventProductsBody}}",
          "method": "POST"
        }
      },
      "resource": "event"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an event",
      "routing": {
        "request": {
          "url": "/events",
          "method": "POST"
        }
      },
      "resource": "event"
    },
    {
      "name": "Create Message",
      "value": "createMessage",
      "action": "Create event message",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/messages",
          "method": "POST"
        }
      },
      "resource": "event"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an event",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/events/{{$parameter.eventId}}",
          "method": "DELETE"
        }
      },
      "resource": "event"
    },
    {
      "name": "Delete Activity",
      "value": "deleteActivity",
      "action": "Delete event activity",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/events/{{$parameter.eventId}}/activities/{{$parameter.activityId}}",
          "method": "DELETE"
        }
      },
      "resource": "event"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an event",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}",
          "method": "GET"
        }
      },
      "resource": "event"
    },
    {
      "name": "Get Billed Amount",
      "value": "getBilledAmount",
      "action": "Get billed amount",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/billed_amount",
          "method": "GET"
        }
      },
      "resource": "event"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many events",
      "routing": {
        "request": {
          "url": "/events",
          "method": "GET"
        }
      },
      "resource": "event"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "Get event messages",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/messages",
          "method": "GET"
        }
      },
      "resource": "event"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an event",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}",
          "method": "PUT"
        }
      },
      "resource": "event"
    },
    {
      "name": "Update Activity",
      "value": "updateActivity",
      "action": "Update event activity",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/activities/{{$parameter.activityId}}",
          "method": "PUT"
        }
      },
      "resource": "event"
    },
    {
      "name": "Update by Receipt",
      "value": "updateByReceipt",
      "action": "Update event from receipt",
      "routing": {
        "request": {
          "url": "=/events/{{$parameter.eventId}}/receipt",
          "body": "={{$parameter.eventReceiptItemsBody}}",
          "method": "POST"
        }
      },
      "resource": "event"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many clients",
      "routing": {
        "request": {
          "url": "/clients",
          "method": "GET"
        }
      },
      "resource": "client"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a client",
      "routing": {
        "request": {
          "url": "=/clients/{{$parameter.clientId}}",
          "method": "GET"
        }
      },
      "resource": "client"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a client",
      "routing": {
        "request": {
          "url": "/clients",
          "method": "POST"
        }
      },
      "resource": "client"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a client",
      "routing": {
        "request": {
          "url": "=/clients/{{$parameter.clientId}}",
          "method": "PUT"
        }
      },
      "resource": "client"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many products",
      "routing": {
        "request": {
          "url": "/products",
          "method": "GET"
        }
      },
      "resource": "product"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "routing": {
        "request": {
          "url": "=/products/{{$parameter.productId}}",
          "method": "GET"
        }
      },
      "resource": "product"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Get product categories",
      "routing": {
        "request": {
          "url": "/products/categories",
          "method": "GET"
        }
      },
      "resource": "product"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many locations",
      "routing": {
        "request": {
          "url": "/locations",
          "method": "GET"
        }
      },
      "resource": "location"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a location",
      "routing": {
        "request": {
          "url": "=/locations/{{$parameter.locationId}}",
          "method": "GET"
        }
      },
      "resource": "location"
    },
    {
      "name": "Add Payment",
      "value": "addPayment",
      "action": "Add invoice payment",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter.invoiceId}}/payments",
          "method": "POST"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Confirm Sync",
      "value": "confirmSync",
      "action": "Confirm invoice sync",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter.invoiceId}}/sync/confirm",
          "method": "POST"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an invoice",
      "routing": {
        "request": {
          "url": "/invoices",
          "method": "POST"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an invoice",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter.invoiceId}}",
          "method": "GET"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Get File PDF",
      "value": "getFilePdf",
      "action": "Get an invoice PDF",
      "routing": {
        "request": {
          "url": "=/invoices/{{$parameter.invoiceId}}/file.pdf",
          "json": false,
          "method": "GET"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "routing": {
        "request": {
          "url": "/invoices",
          "method": "GET"
        }
      },
      "resource": "invoice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many webhooks",
      "routing": {
        "request": {
          "url": "/webhooks",
          "method": "GET"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "request": {
          "url": "/webhooks",
          "method": "POST"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "setKeyValue",
              "properties": {
                "value": "={{ { \"success\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/webhooks/{{$parameter.webhookId}}",
          "method": "DELETE"
        }
      },
      "resource": "webhook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create external object mapping",
      "routing": {
        "request": {
          "url": "/external_objects",
          "method": "POST"
        }
      },
      "resource": "externalObject"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get external object mapping",
      "routing": {
        "request": {
          "url": "/external_objects/get",
          "method": "GET"
        }
      },
      "resource": "externalObject"
    }
  ]

npm_readme:
  # @mice-operations/n8n-nodes-miceoperations

  This is an n8n community node for MICE Operations. It lets you work with events, clients, invoices, products, locations, webhooks, and external object mappings from MICE Operations in your n8n workflows.

  MICE Operations is a platform for hospitality and event operations, including quoting, planning, and invoicing.

  [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)
  [Use cases](#use-cases)
  [Examples](#examples)
  [Example workflow](#example-workflow)
  [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.

  Package name for installation:

  - `@mice-operations/n8n-nodes-miceoperations`

  ## Operations

  Supported resources and operations:

  - Company
  	- Get Me
  - Event
  	- Get Many
  	- Get
  	- Create
  	- Update
  	- Delete
  	- Get Messages
  	- Create Message
  	- Add Activities
  	- Update Activity
  	- Delete Activity
  	- Add Products
  	- Update by Receipt
  	- Get Billed Amount
  - Client
  	- Get Many
  	- Get
  	- Create
  	- Update
  - Product
  	- Get Many
  	- Get
  	- Get Categories
  - Location
  	- Get Many
  	- Get
  - Invoice
  	- Get Many
  	- Get
  	- Get File PDF
  	- Create
  	- Add Payment
  	- Confirm Sync
  - Webhook
  	- Get Many
  	- Create
  	- Delete
  - External Object
  	- Create
  	- Get

  ## Credentials

  This node uses a single credential type:

  - MICE Operations API
  	- Field: API Key
  	- Auth method: HTTP Basic header

  How to set it up:

  1. Generate or copy your API key in MICE Operations.
  2. In n8n, create credentials for MICE Operations API.
  3. Paste the API key in the API Key field.
  4. Save and use these credentials in the node.

  The node validates credentials with a request to:

  - GET /companies/me

  ## Compatibility

  This package uses n8nNodesApiVersion 1 and is intended for modern n8n versions that support community nodes and the current credential/node APIs.

  If you run into compatibility issues, update n8n to the latest stable release and reinstall this node package.

  ## Usage

  General usage pattern:

  1. Add the MICE Operations node to your workflow.
  2. Select Resource and Operation.
  3. Configure required IDs (for example eventId, clientId, invoiceId).
  4. For create and update operations, fill in the dedicated input fields shown by the selected operation.
  5. For array-based operations such as Add Activities, Add Products, and Update by Receipt, provide the JSON array body in the JSON field.
  6. Execute the node.

  Notes:

  - Get Many operations expose the API query filters and pagination options where available.
  - Event get and get many operations support the documented include-flags for related data.
  - Invoice resources include PDF retrieval through the Get File PDF operation.
  - Most write operations now use explicit n8n fields instead of a generic payload field.
  - The remaining JSON body fields are used only where the API expects a root-level array.

  ## Use cases

  This community node is useful when you want to connect MICE Operations with the rest of your operational stack in n8n.

  Common applications include:

  - Event synchronization with CRM or sales tools
  	Retrieve new or updated events from MICE Operations and sync them into HubSpot, Salesforce, Pipedrive, or a custom CRM so sales and operations stay aligned.

  - Client synchronization between MICE Operations and back-office systems
  	Create or update client records in MICE Operations based on changes in ERP, accounting, or CRM platforms, or do the reverse to keep contact data in sync.

  - Automated event preparation flows
  	Use an n8n schedule or webhook trigger to fetch upcoming events, enrich them with related client and location data, and notify planners, kitchen teams, or venue staff in Slack, Teams, email, or WhatsApp tools.

  - Product and activity provisioning for events
  	Automatically add standard products or activities to events based on event type, guest count, or information coming from a sales form or booking tool.

  - Invoice creation after operational milestones
  	Trigger invoice creation when an event reaches a specific stage in your workflow, for example after confirmation, after execution, or after an approval step in another system.

  - Payment registration and accounting reconciliation
  	Receive payment confirmations from a PSP, bookkeeping platform, or bank feed automation and register them on invoices in MICE Operations using the Add Payment operation.

  - External accounting or ERP sync confirmation
  	After sending invoice data from n8n to systems such as Exact or another finance platform, store the sync result back in MICE Operations with Confirm Sync.

  - PDF distribution and document archiving
  	Fetch invoice PDFs from MICE Operations and automatically send them by email, upload them to SharePoint, Google Drive, Dropbox, or archive them in a document management system.

  - Webhook-driven event monitoring
  	Register webhooks in MICE Operations and use them with n8n webhook endpoints to react to changes like `event.updated` or `invoice.created` in near real time.

  - External ID mapping between systems
  	Use External Object mappings to connect MICE Operations records to IDs from external systems such as CRMs, POS tools, finance tools, or custom internal platforms.

  - Reporting and dashboards
  	Collect events, invoices, locations, and product data on a schedule and push it into Google Sheets, Airtable, Power BI, Looker Studio, or a data warehouse for reporting.

  - Data quality and control workflows
  	Periodically check for missing references, unexpected statuses, missing client details, or incomplete planning information and notify the right team automatically.

  ## Examples

  The examples below show typical configurations you can reproduce in n8n.

  ### Event examples

  Get many upcoming events for a date range:

  - Resource: Event
  - Operation: Get Many
  - Event Date After: `2026-07-01`
  - Event Date Before: `2026-07-31`
  - Status: `confirmed`
  - Include Client: `true`
  - Include Location: `true`
  - Items Per Page: `50`

  Create a new event:

  - Resource: Event
  - Operation: Create
  - Name: `Summer Kick-off Dinner`
  - Location ID: `12`
  - Event Type ID: `3`
  - Client ID: `245`
  - Planner ID: `18`
  - Datetime Start: `2026-07-18 18:00:00`
  - Datetime End: `2026-07-18 23:00:00`
  - Guests: `80`
  - Locale: `nl_NL`
  - Reference: `SKD-2026-001`
  - Message: `VIP guests arrive at 17:30`

  Create an event message:

  - Resource: Event
  - Operation: Create Message
  - Event ID: `481`
  - Subject: `Final guest count`
  - Message: `Please confirm the final guest count before 12:00 tomorrow.`
  - Type: `message`
  - Author Email: `planner@example.com`

  Add activities to an event:

  - Resource: Event
  - Operation: Add Activities
  - Event ID: `481`
  - Activities:

  ```json
  [
  	{
  		"event_timeline_id": 4,
  		"location_id": 12,
  		"setup_id": 2,
  		"datetime_start": "2026-07-18 17:00:00",
  		"datetime_end": "2026-07-18 18:00:00",
  		"name": "Room setup",
  		"description": "Prepare dining room and welcome desk",
  		"guests": 80,
  		"memo": "Use the gold table setting"
  	}
  ]
  ```

  Add products to an event:

  - Resource: Event
  - Operation: Add Products
  - Event ID: `481`
  - Products:

  ```json
  [
  	{
  		"product_id": 33,
  		"quantity": 80,
  		"price": 42.5,
  		"description": "Three-course dinner package"
  	},
  	{
  		"product_id": 41,
  		"quantity": 80,
  		"price": 7.5,
  		"description": "Welcome drink"
  	}
  ]
  ```

  Update an event with only selected fields:

  - Resource: Event
  - Operation: Update
  - Event ID: `481`
  - Update Fields:
  	- Name: `Summer Kick-off Dinner - Final`
  	- Guests: `84`
  	- Noticeboard Name: `Ballroom A`

  Update an event from receipt lines:

  - Resource: Event
  - Operation: Update by Receipt
  - Event ID: `481`
  - Receipt Items:

  ```json
  [
  	{
  		"description": "Dinner package",
  		"quantity": 80,
  		"price": 42.5,
  		"vat_percentage": 9
  	},
  	{
  		"description": "Welcome drink",
  		"quantity": 80,
  		"price": 7.5,
  		"vat_percentage": 21
  	}
  ]
  ```

  ### Client examples

  Create a client:

  - Resource: Client
  - Operation: Create
  - Type: `client`
  - Name: `Acme Events BV`
  - Email: `events@acme.example`
  - Phone: `+31 20 123 4567`
  - Address Line 1: `Herengracht 100`
  - Postal Code: `1015 BS`
  - City: `Amsterdam`
  - Country: `Netherlands`
  - VAT Number: `NL123456789B01`

  Update a client:

  - Resource: Client
  - Operation: Update
  - Client ID: `245`
  - Update Fields:
  	- Email: `finance@acme.example`
  	- Phone: `+31 20 765 4321`
  	- City: `Utrecht`

  Find a supplier by type and city:

  - Resource: Client
  - Operation: Get Many
  - Type: `supplier`
  - City: `Rotterdam`
  - Sort By: `sort`
  - Sort Order: `asc`

  ### Invoice examples

  Create an invoice for an event:

  - Resource: Invoice
  - Operation: Create
  - Type: `invoice`
  - Status: `concept`
  - Event ID: `481`
  - Client ID: `245`
  - Client Name: `Acme Events BV`
  - Client Email: `finance@acme.example`
  - Client Address Line 1: `Herengracht 100`
  - Client Postal Code: `1015 BS`
  - Client City: `Amsterdam`
  - Client Country: `Netherlands`
  - Include VAT: `true`
  - Payment Term: `14`
  - Locale: `nl_NL`

  Register an invoice payment:

  - Resource: Invoice
  - Operation: Add Payment
  - Invoice ID: `9901`
  - Amount: `1250`
  - Date: `2026-07-21`
  - Type: `banktransfer`

  Confirm an external invoice sync:

  - Resource: Invoice
  - Operation: Confirm Sync
  - Invoice ID: `9901`
  - Provider: `exact`
  - Datetime: `2026-07-21 10:15:00`
  - External ID: `EXT-INV-7781`
  - Status: `processed`

  Download an invoice PDF:

  - Resource: Invoice
  - Operation: Get File PDF
  - Invoice ID: `9901`

  This operation returns the PDF response from the API instead of JSON, so it is suitable for downstream binary handling in n8n.

  ### Webhook example

  Create a webhook subscription:

  - Resource: Webhook
  - Operation: Create
  - Event: `event.updated`
  - URL: `https://example.com/webhooks/miceoperations`
  - Secret Key: `my-shared-secret`

  ### External object example

  Create an external object mapping:

  - Resource: External Object
  - Operation: Create
  - Object Type: `event`
  - Object ID: `481`
  - External ID: `crm-event-481`

  Use the Get operation afterwards to retrieve the mapping again by Object Type and Object ID.

  ## Example workflow

  An importable example workflow is included at [examples/miceoperations-demo.workflow.json](examples/miceoperations-demo.workflow.json).

  This workflow contains:

  - A Manual Trigger node
  - A Company Get Me step to validate the MICE Operations credentials
  - An Event Get Many step with example date filters and include flags

  How to use it:

  1. Import [examples/miceoperations-demo.workflow.json](examples/miceoperations-demo.workflow.json) into n8n.
  2. Open both MICE Operations nodes and select your `MICE Operations API` credentials.
  3. Adjust the event date filters if needed.
  4. Execute the workflow manually.

  ## Resources

  * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  * [MICE Operations REST API documentation](https://www.miceoperations.com/developers/rest-api)
  * [MICE Operations Help Center](https://help.miceoperations.com)

  ## Version history

  - 0.1.0
  	- Initial community node release.
  	- Includes core MICE Operations resources for events, clients, products, locations, invoices, webhooks, external objects, and company profile retrieval.

ai_documentation_summary:
  {"purpose":"This n8n community node integrates with the MICE Operations API to manage hospitality and event operations data such as events, clients, invoices, products, locations, webhooks, and external object mappings. It supports workflow automation for quoting, planning, invoicing, syncing, and related operational tasks.","capabilities":["Company: Get Me","Event: Get Many, Get, Create, Update, Delete, Get Messages, Create Message, Add Activities, Update Activity, Delete Activity, Add Products, Update by Receipt, Get Billed Amount","Client: Get Many, Get, Create, Update","Product: Get Many, Get, Get Categories","Location: Get Many, Get","Invoice: Get Many, Get, Get File PDF, Create, Add Payment, Confirm Sync","Webhook: Get Many, Create, Delete","External Object: Create, Get","Supports query filters, pagination, and include-flags where available","Supports array-based JSON body inputs for operations like Add Activities, Add Products, and Update by Receipt"],"authentication":"API key required; use the MICE Operations API credential with the API Key field sent as an HTTP Basic header","commonUseCases":["Sync events and clients between MICE Operations and CRM/back-office systems","Automate event preparation, including fetching upcoming events and notifying operational teams","Create invoices and register payments during operational workflows","Fetch invoice PDFs for distribution or archiving","Register webhooks for near real-time event and invoice monitoring"],"limitations":["Credential validation relies on GET /companies/me","The README indicates most write operations use explicit n8n fields instead of a generic payload field","JSON body fields are only used where the API expects a root-level array"],"relatedNodes":[]}


node_type: n8n-nodes-relayshield.relayShield
package_name: n8n-nodes-relayshield
display_name: RelayShield
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: relayshieldadmin
author_github_url: https://github.com/nzdsf2-gif/
npm_package_name: n8n-nodes-relayshield
npm_version: 0.1.15
community_fetched_at: 2026-07-14T14:40:34.569Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Breach detection, SIM swap monitoring, infostealer exposure, domain lookalike scanning, and threat intelligence IOC lookup via RelayShield.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "breach",
      "options": [
        {
          "name": "Breach Check",
          "value": "breach",
          "action": "Check an email address for breach exposure",
          "description": "Check if an email address appears in known data breaches"
        },
        {
          "name": "Domain Lookalike Scan",
          "value": "domain",
          "action": "Scan a domain for lookalikes and typosquats",
          "description": "Scan for typosquat and lookalike domains registered to impersonate a domain"
        },
        {
          "name": "Infostealer Check",
          "value": "infostealer",
          "action": "Check an email for infostealer log exposure",
          "description": "Check if credentials appear in criminal infostealer log markets"
        },
        {
          "name": "OAuth Watchlist Check",
          "value": "oauthWatchlist",
          "action": "Check an email for o auth supply chain exposure",
          "description": "Check if a breach exposes credentials used with high-risk OAuth apps"
        },
        {
          "name": "SIM Swap Detection",
          "value": "simSwap",
          "action": "Detect sim swap or port out fraud on a phone number",
          "description": "Detect active SIM swap or port-out fraud via carrier-level query"
        },
        {
          "name": "Threat Intelligence — CVE Lookup",
          "value": "intelCve",
          "action": "Look up a CVE or keyword in the CISA KEV catalog",
          "description": "Query the CISA Known Exploited Vulnerabilities catalog, cross-referenced for ransomware activity"
        },
        {
          "name": "Threat Intelligence — IOC Lookup",
          "value": "intelTelegram",
          "action": "Look up an indicator of compromise in the threat intelligence database",
          "description": "Query RelayShield's live IOC database (criminal Telegram channels, ThreatFox, URLhaus) for a domain, IP, email, phone, or wallet address"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Breach Check",
      "value": "breach",
      "action": "Check an email address for breach exposure",
      "description": "Check if an email address appears in known data breaches"
    },
    {
      "name": "Domain Lookalike Scan",
      "value": "domain",
      "action": "Scan a domain for lookalikes and typosquats",
      "description": "Scan for typosquat and lookalike domains registered to impersonate a domain"
    },
    {
      "name": "Infostealer Check",
      "value": "infostealer",
      "action": "Check an email for infostealer log exposure",
      "description": "Check if credentials appear in criminal infostealer log markets"
    },
    {
      "name": "OAuth Watchlist Check",
      "value": "oauthWatchlist",
      "action": "Check an email for o auth supply chain exposure",
      "description": "Check if a breach exposes credentials used with high-risk OAuth apps"
    },
    {
      "name": "SIM Swap Detection",
      "value": "simSwap",
      "action": "Detect sim swap or port out fraud on a phone number",
      "description": "Detect active SIM swap or port-out fraud via carrier-level query"
    },
    {
      "name": "Threat Intelligence — CVE Lookup",
      "value": "intelCve",
      "action": "Look up a CVE or keyword in the CISA KEV catalog",
      "description": "Query the CISA Known Exploited Vulnerabilities catalog, cross-referenced for ransomware activity"
    },
    {
      "name": "Threat Intelligence — IOC Lookup",
      "value": "intelTelegram",
      "action": "Look up an indicator of compromise in the threat intelligence database",
      "description": "Query RelayShield's live IOC database (criminal Telegram channels, ThreatFox, URLhaus) for a domain, IP, email, phone, or wallet address"
    }
  ]

npm_readme:
  # n8n-nodes-relayshield

  An [n8n](https://n8n.io) community node for [RelayShield](https://relayshield.net) — security intelligence for automation workflows.

  ## Operations

  | Operation | Endpoint | Cost |
  |---|---|---|
  | **Breach Check** | `POST /v1/metered/breach` | $0.10/call |
  | **SIM Swap Detection** | `POST /v1/metered/sim-swap` | $0.25/call |
  | **Infostealer Check** | `POST /v1/metered/infostealer` | $0.50/call |
  | **Domain Lookalike Scan** | `POST /v1/metered/domain` | $0.30/call |
  | **OAuth Watchlist Check** | `POST /v1/metered/oauth-watchlist` | $0.20/call |
  | **Threat Intelligence — IOC Lookup** | `GET /v1/intel/telegram` | Subscription |
  | **Threat Intelligence — CVE Lookup** | `GET /v1/intel/cve` | Free |

  ## Installation

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

  ```
  n8n-nodes-relayshield
  ```

  ## Credentials

  You need a RelayShield API key. Get one at [api.relayshield.net/developers](https://api.relayshield.net/developers).

  Add it in n8n: **Credentials → New → RelayShield API**.

  ## Pricing

  - **PAYG metered billing** — pay only for calls made, billed monthly via Stripe
  - **Credit packs** — $25 / $50 / $100 one-time, credits never expire
  - **Developer subscription** — $499/mo (10,000 TI calls) · $999/mo (unlimited TI calls)

  ## Example workflows

  ### Employee breach monitoring
  ```
  Schedule Trigger → RelayShield (Breach Check) → IF breach_count > 0 → Slack alert
  ```

  ### Infostealer detection in incident response
  ```
  Webhook → RelayShield (Infostealer Check) → IF exposed → PagerDuty alert + Jira ticket
  ```

  ### IOC enrichment in SOAR playbook
  ```
  Webhook (alert) → RelayShield (IOC Lookup) → IF matched → escalate + block IP in firewall
  ```

  ### CVE triage for ransomware-linked vulnerabilities
  ```
  Schedule Trigger → RelayShield (CVE Lookup, keyword=your-vendor) → filter ransomware_flagged=true → Jira ticket
  ```

  ## Support

  - Docs: [relayshield.net/developers](https://api.relayshield.net/developers)
  - Email: [support@relayshield.net](mailto:support@relayshield.net)

ai_documentation_summary:
  {"purpose":"RelayShield is an n8n community node for security intelligence automation. It provides breach, SIM swap, infostealer, domain lookalike, OAuth watchlist, and threat intelligence lookups for use in workflows.","capabilities":["Breach Check","SIM Swap Detection","Infostealer Check","Domain Lookalike Scan","OAuth Watchlist Check","Threat Intelligence IOC Lookup","Threat Intelligence CVE Lookup"],"authentication":"RelayShield API key required","commonUseCases":["Employee breach monitoring and alerting","Infostealer exposure detection in incident response workflows","IOC enrichment and escalation in SOAR playbooks","CVE triage and ticket creation for vulnerable software"],"limitations":["Some operations are metered and incur per-call costs","Threat Intelligence IOC Lookup requires a subscription","Threat Intelligence CVE Lookup is free but still relies on RelayShield service access"],"relatedNodes":[]}


node_type: @manyreach/n8n-nodes-manyreach.manyreach
package_name: @manyreach/n8n-nodes-manyreach
display_name: Manyreach
description: Automate cold email campaigns and manage follow-ups
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: manyreach
author_github_url: https://github.com/manyreach/n8n-nodes-manyreach.git
npm_package_name: @manyreach/n8n-nodes-manyreach
npm_version: 0.4.4
community_fetched_at: 2026-07-14T14:40:34.570Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "campaign",
      "options": [
        {
          "name": "Blacklist",
          "value": "blacklist"
        },
        {
          "name": "Campaign",
          "value": "campaign"
        },
        {
          "name": "Clientspace",
          "value": "clientspace"
        },
        {
          "name": "Followup",
          "value": "followup"
        },
        {
          "name": "List",
          "value": "list"
        },
        {
          "name": "Message",
          "value": "message"
        },
        {
          "name": "Prospect",
          "value": "prospect"
        },
        {
          "name": "Sender",
          "value": "sender"
        },
        {
          "name": "Sequence",
          "value": "sequence"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Whitelabel",
          "value": "whitelabel"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag to campaign",
          "description": "Add a tag to a campaign"
        },
        {
          "name": "Archive",
          "value": "archive",
          "action": "Archive campaign",
          "description": "Archive a campaign"
        },
        {
          "name": "Copy",
          "value": "copy",
          "action": "Copy campaign",
          "description": "Copy a campaign"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create campaign",
          "description": "Create a new campaign"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete campaign",
          "description": "Delete a campaign permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get campaign",
          "description": "Retrieve a campaign"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many campaigns",
          "description": "Retrieve a list of campaigns"
        },
        {
          "name": "Get Statistics",
          "value": "getStats",
          "action": "Get campaign statistics",
          "description": "Retrieve statistics for a campaign"
        },
        {
          "name": "Pause",
          "value": "pause",
          "action": "Pause campaign",
          "description": "Pause a campaign"
        },
        {
          "name": "Remove Prospect",
          "value": "removeProspect",
          "action": "Remove prospect from campaign",
          "description": "Remove a prospect from a campaign"
        },
        {
          "name": "Remove Tag",
          "value": "removeTag",
          "action": "Remove tag from campaign",
          "description": "Remove a tag from a campaign"
        },
        {
          "name": "Start",
          "value": "start",
          "action": "Start campaign",
          "description": "Start a campaign"
        },
        {
          "name": "Unarchive",
          "value": "unarchive",
          "action": "Unarchive campaign",
          "description": "Unarchive a campaign"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update campaign",
          "description": "Update a campaign"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "campaign"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create followup",
          "description": "Create a new followup step"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete followup",
          "description": "Delete a followup step permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get followup",
          "description": "Retrieve a followup step"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update followup",
          "description": "Update a followup step"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "followup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create sequence",
          "description": "Create a new sequence"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete sequence",
          "description": "Delete a sequence permanently"
        },
        {
          "name": "Get Followups",
          "value": "getFollowups",
          "action": "Get followups for sequence",
          "description": "Retrieve followup steps of a sequence"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many sequences",
          "description": "Retrieve a list of sequences"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update sequence",
          "description": "Update a sequence"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sequence"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create list",
          "description": "Create a new list"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete list",
          "description": "Delete a list permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get list",
          "description": "Retrieve a list"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many lists",
          "description": "Retrieve all lists"
        },
        {
          "name": "Remove Prospect",
          "value": "removeProspect",
          "action": "Remove prospect from list",
          "description": "Remove a prospect from a list"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update list",
          "description": "Update a list"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "list"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add in Bulk",
          "value": "bulk",
          "action": "Add prospects in bulk",
          "description": "Add multiple prospects to a campaign or list at once"
        },
        {
          "name": "Add Tags",
          "value": "addTags",
          "action": "Add tags to prospect",
          "description": "Add one or more tags to a prospect"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create prospect",
          "description": "Create a new prospect"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete prospect",
          "description": "Delete a prospect permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get prospect",
          "description": "Retrieve a prospect"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many prospects",
          "description": "Retrieve a list of prospects"
        },
        {
          "name": "Get Messages",
          "value": "getMessages",
          "action": "Get prospect messages",
          "description": "Retrieve inbound messages for a prospect"
        },
        {
          "name": "Get Tags",
          "value": "getTags",
          "action": "Get prospect tags",
          "description": "Retrieve tags assigned to a prospect"
        },
        {
          "name": "Remove Tags",
          "value": "removeTags",
          "action": "Remove tags from prospect",
          "description": "Remove one or more tags from a prospect"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update prospect",
          "description": "Update a prospect"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prospect"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create tag",
          "description": "Create a new tag"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete tag",
          "description": "Delete a tag permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get tag",
          "description": "Retrieve a tag"
        },
        {
          "name": "Get Campaigns",
          "value": "getCampaigns",
          "action": "Get campaigns for tag",
          "description": "Retrieve campaigns assigned to a tag"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many tags",
          "description": "Retrieve a list of tags"
        },
        {
          "name": "Get Prospects",
          "value": "getProspects",
          "action": "Get prospects for tag",
          "description": "Retrieve prospects assigned to a tag"
        },
        {
          "name": "Get Senders",
          "value": "getSenders",
          "action": "Get senders for tag",
          "description": "Retrieve senders assigned to a tag"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update tag",
          "description": "Update a tag"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add Domains",
          "value": "addDomains",
          "action": "Add domains to blacklist",
          "description": "Add one or more domains to the blacklist"
        },
        {
          "name": "Add Emails",
          "value": "addEmails",
          "action": "Add emails to blacklist",
          "description": "Add one or more emails to the blacklist"
        },
        {
          "name": "Check Domain",
          "value": "checkDomain",
          "action": "Check domain blacklist status",
          "description": "Check if a domain is blacklisted"
        },
        {
          "name": "Check Email",
          "value": "checkEmail",
          "action": "Check email blacklist status",
          "description": "Check if an email is blacklisted"
        },
        {
          "name": "Delete Domain",
          "value": "deleteDomain",
          "action": "Remove domain from blacklist",
          "description": "Remove a domain entry from the blacklist by ID"
        },
        {
          "name": "Delete Email",
          "value": "deleteEmail",
          "action": "Remove email from blacklist",
          "description": "Remove an email entry from the blacklist by ID"
        },
        {
          "name": "Get Domains",
          "value": "getDomains",
          "action": "Get all blacklisted domains",
          "description": "Retrieve a list of blacklisted domains"
        },
        {
          "name": "Get Emails",
          "value": "getEmails",
          "action": "Get all blacklisted emails",
          "description": "Retrieve a list of blacklisted emails"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "blacklist"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create workspace",
          "description": "Create a new workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete workspace",
          "description": "Delete a workspace permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get workspace",
          "description": "Retrieve a workspace"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many workspaces",
          "description": "Retrieve a list of workspaces"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update workspace",
          "description": "Update a workspace"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create user",
          "description": "Create a new user"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete user",
          "description": "Delete a user permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get user",
          "description": "Retrieve a user"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many users",
          "description": "Retrieve a list of users"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update user",
          "description": "Update a user"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Add Tag",
          "value": "addTag",
          "action": "Add tag to sender",
          "description": "Add a tag to a sender"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create sender",
          "description": "Create a new sender"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete sender",
          "description": "Delete a sender permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get sender",
          "description": "Retrieve a sender"
        },
        {
          "name": "Get Errors",
          "value": "getErrors",
          "action": "Get sender authentication errors",
          "description": "Retrieve DKIM, SPF, and DMARC authentication errors for a sender"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many senders",
          "description": "Retrieve a list of senders"
        },
        {
          "name": "Remove Tag",
          "value": "removeTag",
          "action": "Remove tag from sender",
          "description": "Remove a tag from a sender"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update sender",
          "description": "Update a sender"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sender"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create clientspace",
          "description": "Create a new clientspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete clientspace",
          "description": "Delete a clientspace permanently"
        },
        {
          "name": "Get",
          "value": "getById",
          "action": "Get clientspace",
          "description": "Retrieve a clientspace"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many clientspaces",
          "description": "Retrieve a list of clientspaces"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update clientspace",
          "description": "Update a clientspace"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clientspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Update",
          "value": "update",
          "action": "Update whitelabel settings",
          "description": "Update the whitelabel configuration"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "whitelabel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create message",
          "description": "Create a new message"
        },
        {
          "name": "Get",
          "value": "getMessage",
          "action": "Get message",
          "description": "Retrieve a message"
        }
      ],
      "required": false,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "message"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag to campaign",
      "description": "Add a tag to a campaign",
      "resource": "campaign"
    },
    {
      "name": "Archive",
      "value": "archive",
      "action": "Archive campaign",
      "description": "Archive a campaign",
      "resource": "campaign"
    },
    {
      "name": "Copy",
      "value": "copy",
      "action": "Copy campaign",
      "description": "Copy a campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create campaign",
      "description": "Create a new campaign",
      "resource": "campaign"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete campaign",
      "description": "Delete a campaign permanently",
      "resource": "campaign"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get campaign",
      "description": "Retrieve a campaign",
      "resource": "campaign"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many campaigns",
      "description": "Retrieve a list of campaigns",
      "resource": "campaign"
    },
    {
      "name": "Get Statistics",
      "value": "getStats",
      "action": "Get campaign statistics",
      "description": "Retrieve statistics for a campaign",
      "resource": "campaign"
    },
    {
      "name": "Pause",
      "value": "pause",
      "action": "Pause campaign",
      "description": "Pause a campaign",
      "resource": "campaign"
    },
    {
      "name": "Remove Prospect",
      "value": "removeProspect",
      "action": "Remove prospect from campaign",
      "description": "Remove a prospect from a campaign",
      "resource": "campaign"
    },
    {
      "name": "Remove Tag",
      "value": "removeTag",
      "action": "Remove tag from campaign",
      "description": "Remove a tag from a campaign",
      "resource": "campaign"
    },
    {
      "name": "Start",
      "value": "start",
      "action": "Start campaign",
      "description": "Start a campaign",
      "resource": "campaign"
    },
    {
      "name": "Unarchive",
      "value": "unarchive",
      "action": "Unarchive campaign",
      "description": "Unarchive a campaign",
      "resource": "campaign"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update campaign",
      "description": "Update a campaign",
      "resource": "campaign"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create followup",
      "description": "Create a new followup step",
      "resource": "followup"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete followup",
      "description": "Delete a followup step permanently",
      "resource": "followup"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get followup",
      "description": "Retrieve a followup step",
      "resource": "followup"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update followup",
      "description": "Update a followup step",
      "resource": "followup"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create sequence",
      "description": "Create a new sequence",
      "resource": "sequence"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete sequence",
      "description": "Delete a sequence permanently",
      "resource": "sequence"
    },
    {
      "name": "Get Followups",
      "value": "getFollowups",
      "action": "Get followups for sequence",
      "description": "Retrieve followup steps of a sequence",
      "resource": "sequence"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many sequences",
      "description": "Retrieve a list of sequences",
      "resource": "sequence"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update sequence",
      "description": "Update a sequence",
      "resource": "sequence"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create list",
      "description": "Create a new list",
      "resource": "list"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete list",
      "description": "Delete a list permanently",
      "resource": "list"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get list",
      "description": "Retrieve a list",
      "resource": "list"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many lists",
      "description": "Retrieve all lists",
      "resource": "list"
    },
    {
      "name": "Remove Prospect",
      "value": "removeProspect",
      "action": "Remove prospect from list",
      "description": "Remove a prospect from a list",
      "resource": "list"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update list",
      "description": "Update a list",
      "resource": "list"
    },
    {
      "name": "Add in Bulk",
      "value": "bulk",
      "action": "Add prospects in bulk",
      "description": "Add multiple prospects to a campaign or list at once",
      "resource": "prospect"
    },
    {
      "name": "Add Tags",
      "value": "addTags",
      "action": "Add tags to prospect",
      "description": "Add one or more tags to a prospect",
      "resource": "prospect"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create prospect",
      "description": "Create a new prospect",
      "resource": "prospect"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete prospect",
      "description": "Delete a prospect permanently",
      "resource": "prospect"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get prospect",
      "description": "Retrieve a prospect",
      "resource": "prospect"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many prospects",
      "description": "Retrieve a list of prospects",
      "resource": "prospect"
    },
    {
      "name": "Get Messages",
      "value": "getMessages",
      "action": "Get prospect messages",
      "description": "Retrieve inbound messages for a prospect",
      "resource": "prospect"
    },
    {
      "name": "Get Tags",
      "value": "getTags",
      "action": "Get prospect tags",
      "description": "Retrieve tags assigned to a prospect",
      "resource": "prospect"
    },
    {
      "name": "Remove Tags",
      "value": "removeTags",
      "action": "Remove tags from prospect",
      "description": "Remove one or more tags from a prospect",
      "resource": "prospect"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update prospect",
      "description": "Update a prospect",
      "resource": "prospect"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create tag",
      "description": "Create a new tag",
      "resource": "tag"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete tag",
      "description": "Delete a tag permanently",
      "resource": "tag"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get tag",
      "description": "Retrieve a tag",
      "resource": "tag"
    },
    {
      "name": "Get Campaigns",
      "value": "getCampaigns",
      "action": "Get campaigns for tag",
      "description": "Retrieve campaigns assigned to a tag",
      "resource": "tag"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many tags",
      "description": "Retrieve a list of tags",
      "resource": "tag"
    },
    {
      "name": "Get Prospects",
      "value": "getProspects",
      "action": "Get prospects for tag",
      "description": "Retrieve prospects assigned to a tag",
      "resource": "tag"
    },
    {
      "name": "Get Senders",
      "value": "getSenders",
      "action": "Get senders for tag",
      "description": "Retrieve senders assigned to a tag",
      "resource": "tag"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update tag",
      "description": "Update a tag",
      "resource": "tag"
    },
    {
      "name": "Add Domains",
      "value": "addDomains",
      "action": "Add domains to blacklist",
      "description": "Add one or more domains to the blacklist",
      "resource": "blacklist"
    },
    {
      "name": "Add Emails",
      "value": "addEmails",
      "action": "Add emails to blacklist",
      "description": "Add one or more emails to the blacklist",
      "resource": "blacklist"
    },
    {
      "name": "Check Domain",
      "value": "checkDomain",
      "action": "Check domain blacklist status",
      "description": "Check if a domain is blacklisted",
      "resource": "blacklist"
    },
    {
      "name": "Check Email",
      "value": "checkEmail",
      "action": "Check email blacklist status",
      "description": "Check if an email is blacklisted",
      "resource": "blacklist"
    },
    {
      "name": "Delete Domain",
      "value": "deleteDomain",
      "action": "Remove domain from blacklist",
      "description": "Remove a domain entry from the blacklist by ID",
      "resource": "blacklist"
    },
    {
      "name": "Delete Email",
      "value": "deleteEmail",
      "action": "Remove email from blacklist",
      "description": "Remove an email entry from the blacklist by ID",
      "resource": "blacklist"
    },
    {
      "name": "Get Domains",
      "value": "getDomains",
      "action": "Get all blacklisted domains",
      "description": "Retrieve a list of blacklisted domains",
      "resource": "blacklist"
    },
    {
      "name": "Get Emails",
      "value": "getEmails",
      "action": "Get all blacklisted emails",
      "description": "Retrieve a list of blacklisted emails",
      "resource": "blacklist"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create workspace",
      "description": "Create a new workspace",
      "resource": "workspace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete workspace",
      "description": "Delete a workspace permanently",
      "resource": "workspace"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get workspace",
      "description": "Retrieve a workspace",
      "resource": "workspace"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many workspaces",
      "description": "Retrieve a list of workspaces",
      "resource": "workspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update workspace",
      "description": "Update a workspace",
      "resource": "workspace"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create user",
      "description": "Create a new user",
      "resource": "user"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete user",
      "description": "Delete a user permanently",
      "resource": "user"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get user",
      "description": "Retrieve a user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many users",
      "description": "Retrieve a list of users",
      "resource": "user"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update user",
      "description": "Update a user",
      "resource": "user"
    },
    {
      "name": "Add Tag",
      "value": "addTag",
      "action": "Add tag to sender",
      "description": "Add a tag to a sender",
      "resource": "sender"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create sender",
      "description": "Create a new sender",
      "resource": "sender"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete sender",
      "description": "Delete a sender permanently",
      "resource": "sender"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get sender",
      "description": "Retrieve a sender",
      "resource": "sender"
    },
    {
      "name": "Get Errors",
      "value": "getErrors",
      "action": "Get sender authentication errors",
      "description": "Retrieve DKIM, SPF, and DMARC authentication errors for a sender",
      "resource": "sender"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many senders",
      "description": "Retrieve a list of senders",
      "resource": "sender"
    },
    {
      "name": "Remove Tag",
      "value": "removeTag",
      "action": "Remove tag from sender",
      "description": "Remove a tag from a sender",
      "resource": "sender"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update sender",
      "description": "Update a sender",
      "resource": "sender"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create clientspace",
      "description": "Create a new clientspace",
      "resource": "clientspace"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete clientspace",
      "description": "Delete a clientspace permanently",
      "resource": "clientspace"
    },
    {
      "name": "Get",
      "value": "getById",
      "action": "Get clientspace",
      "description": "Retrieve a clientspace",
      "resource": "clientspace"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many clientspaces",
      "description": "Retrieve a list of clientspaces",
      "resource": "clientspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update clientspace",
      "description": "Update a clientspace",
      "resource": "clientspace"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update whitelabel settings",
      "description": "Update the whitelabel configuration",
      "resource": "whitelabel"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create message",
      "description": "Create a new message",
      "resource": "message"
    },
    {
      "name": "Get",
      "value": "getMessage",
      "action": "Get message",
      "description": "Retrieve a message",
      "resource": "message"
    }
  ]

npm_readme:
  <p align="center">
    <a href="https://www.manyreach.com/" target="_blank">
      <img src="./nodes/Manyreach/Manyreach.png" alt="Manyreach" width="120">
    </a>
  </p>

  <h1 align="center">Manyreach n8n Node</h1>

  <p align="center">
    Official n8n community node for the <a href="https://www.manyreach.com/">Manyreach</a> cold-email API.<br>
    Build campaigns, manage prospects, and automate outreach — right inside your n8n workflows.
  </p>

  <p align="center">
    <a href="https://www.npmjs.com/package/@manyreach/n8n-nodes-manyreach"><img src="https://img.shields.io/npm/v/@manyreach/n8n-nodes-manyreach?label=npm&logo=npm" alt="npm version"></a>
    <a href="https://www.npmjs.com/package/@manyreach/n8n-nodes-manyreach"><img src="https://img.shields.io/npm/dm/@manyreach/n8n-nodes-manyreach?label=downloads" alt="npm downloads"></a>
    <a href="https://github.com/manyreach/n8n-nodes-manyreach/pkgs/container/n8n"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fmanyreach%2Fn8n-blue?logo=docker" alt="docker image"></a>
    <a href="./LICENSE.md"><img src="https://img.shields.io/npm/l/@manyreach/n8n-nodes-manyreach" alt="MIT License"></a>
  </p>

  ---

  ## Install

  Pick whichever fits your n8n setup.

  ### Via n8n's community-nodes UI

  In n8n: **Settings → Community Nodes → Install**, then enter:

  ```
  @manyreach/n8n-nodes-manyreach
  ```

  ### Via npm (self-hosted)

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

  Restart n8n; the **Manyreach** node appears in the palette.

  ### Via Docker

  A ready-to-run n8n image with the node already installed:

  ```bash
  docker run -p 5678:5678 -v n8n-data:/home/node/.n8n ghcr.io/manyreach/n8n:latest
  ```

  Or with compose, see [`compose.yaml`](./compose.yaml).

  ## Setup

  1. In the Manyreach app: **Account Settings → API** — copy your API key.
  2. In n8n: create a new **Manyreach API** credential and paste the key.
  3. Add a **Manyreach** node, pick a resource and operation, run.

  That's it. Resource pickers populate from your Manyreach account — no need to paste raw IDs.

  ## What you can automate

  | Area | Operations |
  | --- | --- |
  | **Campaigns** | Create · Update · Start · Pause · Copy · Delete · Get one / many · **Get stats** (opens, clicks, replies) |
  | **Prospects** | Bulk add · Create · Update · Delete · Get one / many with filters · Add/remove tags · Read inbound messages |
  | **Sequences** | Full CRUD on email sequences inside a campaign |
  | **Follow-ups** | Manage individual follow-up steps and delays |
  | **Senders** | Create · Update · Delete · Get one / many · **Get auth errors** (DKIM/SPF/DMARC) |
  | **Tags** | Full CRUD · Get prospects by tag |
  | **Lists** | Full CRUD · Get one / many |
  | **Workspaces** | Full CRUD · Get one / many |
  | **Users** | Full CRUD · Get one / many |
  | **Clientspaces** | Full CRUD · Get one / many |
  | **Whitelabel** | Update settings |
  | **Messages** | Create · Get for a prospect |

  ### Type-ahead resource pickers

  Every selector — campaign, sequence, list, tag, sender, workspace, user, clientspace — supports **search-as-you-type** instead of pasting IDs. The node populates dropdowns directly from your account.

  ## Example workflow

  A four-node cold-email loop:

  1. **Schedule Trigger** — every weekday at 09:00.
  2. **Manyreach › Prospect › Bulk** — push new leads into a campaign.
  3. **Manyreach › Campaign › Start** — activate the campaign.
  4. **Wait** 24h → **Manyreach › Campaign › Get Stats** → post to Slack.

  ## Development

  ```bash
  git clone https://github.com/manyreach/n8n-nodes-manyreach.git
  cd n8n-nodes-manyreach
  npm install
  npm run dev      # starts n8n at http://localhost:5678 with the node loaded (hot reload)
  ```

  Other scripts:

  ```bash
  npm run build      # production TypeScript build into dist/
  npm run lint       # n8n strict community-node lint
  npm run lint:fix   # autofix what's safe
  npm run release    # interactive release (bumps version, tags, publishes via CI)
  ```

  ## Compatibility

  - **n8n** 1.0+ (tested against current)
  - **Node.js** 18+

  ## Privacy

  To improve this integration, the node sends anonymous technical metadata with each API request — including the node version, workflow ID, execution mode, and similar identifiers — to Manyreach. No credentials, request bodies, or other workflow contents are collected.

  ## Support

  - Issues & feature requests: [GitHub issues](https://github.com/manyreach/n8n-nodes-manyreach/issues)
  - Manyreach API documentation: [manyreach.com/docs](https://manyreach.com/docs)
  - Conduct in community spaces: see [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)

  ## License

  [MIT](./LICENSE.md) — © 2026 Manyreach.

ai_documentation_summary:
  {"purpose":"The Manyreach n8n node connects to the Manyreach cold-email API to automate outreach workflows. It lets you build and manage campaigns, prospects, sequences, follow-ups, and related account data directly inside n8n.","capabilities":["Create, update, start, pause, copy, delete, and retrieve campaigns","Get campaign stats such as opens, clicks, and replies","Bulk add, create, update, delete, and retrieve prospects with filters","Add and remove prospect tags and read inbound prospect messages","Create, update, delete, and retrieve email sequences within campaigns","Manage follow-up steps and delays","Create, update, delete, and retrieve senders, including sender authentication error checks","Create, update, delete, and retrieve tags, lists, workspaces, users, and clientspaces","Update whitelabel settings","Create and retrieve messages for a prospect"],"authentication":"API key required via a Manyreach API credential","commonUseCases":["Automating cold email campaign creation and launch from new lead data","Adding prospects in bulk and managing campaign follow-ups","Monitoring campaign performance and posting stats to other tools","Managing sender accounts, tags, lists, and workspace data for outreach operations"],"limitations":["No mention of OAuth2; authentication appears to be API-key based only","Privacy note states anonymous technical metadata is sent with API requests to Manyreach"],"relatedNodes":[]}


node_type: n8n-nodes-apexverify.apexVerify
package_name: n8n-nodes-apexverify
display_name: ApexVerify
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: apexverify
author_github_url: https://github.com/apexverify/
npm_package_name: n8n-nodes-apexverify
npm_version: 1.0.4
community_fetched_at: 2026-07-14T14:40:34.571Z
ai_summary_generated_at: 2026-06-26 10:29:17
description:
  Verify emails, phone numbers, and addresses with real-time accuracy. Keep your contact data clean, compliant, and reliable with our all-in-one suite.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "verify",
      "options": [
        {
          "name": "Verify Email or Phone",
          "value": "verify",
          "action": "Verify email or phone",
          "description": "Validate an email address or phone number"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Verify Email or Phone",
      "value": "verify",
      "action": "Verify email or phone",
      "description": "Validate an email address or phone number"
    }
  ]

npm_readme:
  ![ApexVerify Dashboard](https://files.buildwithfern.com/apexverify.docs.buildwithfern.com/b6ffdc430aceb1957b50c56dbbb3c1dc304a588f0afb74e074408d4c1ad26726/docs/assets/images/overview/quickstart/first-verification-login.png)

  # n8n-nodes-apexverify

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-apexverify.svg)](https://www.npmjs.com/package/n8n-nodes-apexverify)
  [![n8n Community Node](https://img.shields.io/badge/n8n-Community%20Node-blue.svg)](https://n8n.io/)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

  **ApexVerify** is the complete toolkit to keep campaign data updated and accurate at scale. From a single real-time check to millions of records processed in batch, ApexVerify gives you clean, actionable data, with detailed quality signals, targeting metadata, and full export flexibility.

  This is the official [n8n](https://n8n.io/) community node for **ApexVerify**, allowing you to seamlessly integrate enterprise-grade email verification and phone number validation directly into your automated workflows.

  ---

  ## 🚀 Features

  Stop letting fake leads and hard bounces ruin your marketing efforts. With this node, you can automate your data hygiene using our core capabilities:

  *   📧 **Email Verification & Validation:** Syntax checks, MX validation, SMTP probes, catch-all detection, and disposable / role / free provider flags.
  *   📱 **Phone Number Verification:** Detect number type (mobile, landline, VoIP), live status, porting status, and operator identification.
  *   🎯 **Targeting Context:** Configure country, audience role, industry, and campaign objective to tune verification scoring.
  *   🧠 **Smart Caching:** Utilize account and global caches to receive up to 50% credit refunds on repeat verifications.
  *   ⚡ **Real-Time Unit Checks:** Get results in under 5 seconds—perfect for live form validation (Google Forms, Typeform, Webhooks) and CRM data cleaning (Salesforce, HubSpot).

  ---

  ## 📦 Installation

  You can install this node directly from your n8n dashboard or via npm.

  ### Option 1: Install via n8n UI (Recommended)
  1. Open your n8n dashboard.
  2. Go to **Settings** > **Community Nodes**.
  3. Click **Install**.
  4. Enter `n8n-nodes-apexverify`.
  5. Click **Install** and wait for n8n to restart.

  ### Option 2: Install via npm
  If you are hosting n8n on your own server, run this command in your n8n installation directory (usually `~/.n8n`):

  ```bash
  npm install n8n-nodes-apexverify

ai_documentation_summary:
  {"purpose":"ApexVerify validates contact data in real time to help keep email, phone, and campaign records clean, compliant, and reliable. It is designed for use in n8n workflows for both single checks and high-volume batch verification.","capabilities":["Email verification and validation with syntax checks, MX validation, SMTP probes, catch-all detection, and disposable/role/free provider flags","Phone number verification with number type detection, live status, porting status, and operator identification","Targeting context configuration using country, audience role, industry, and campaign objective to tune scoring","Smart caching with account and global caches for repeat verification credit refunds","Real-time unit checks suitable for live form validation and CRM data cleaning"],"authentication":"API key required","commonUseCases":["Validating form submissions in real time before they enter a CRM","Cleaning and enriching CRM contact data in systems like Salesforce or HubSpot","Bulk verification of email and phone datasets to reduce bounces and invalid records","Checking lead quality and targeting context before marketing campaigns"],"limitations":[],"relatedNodes":[]}


node_type: @francodesystems-npm/n8n-nodes-holded.holded
package_name: @francodesystems-npm/n8n-nodes-holded
display_name: Holded
description: Interact with the Holded ERP API v2 (contacts, invoices, sales orders, products and more)
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: juan.canton
author_github_url: https://github.com/francodesystems/n8n-nodes-holded.git
npm_package_name: @francodesystems-npm/n8n-nodes-holded
npm_version: 0.4.1
community_fetched_at: 2026-07-14T14:40:34.572Z
ai_summary_generated_at: 2026-06-26 10:29:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Accounting",
          "value": "accounting"
        },
        {
          "name": "Bank Account",
          "value": "bankAccount"
        },
        {
          "name": "Billing Forecast",
          "value": "billingForecast"
        },
        {
          "name": "Booking",
          "value": "booking"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Contact Group",
          "value": "contactGroup"
        },
        {
          "name": "Credit Note",
          "value": "creditNote"
        },
        {
          "name": "Delivery Note",
          "value": "deliveryNote"
        },
        {
          "name": "Document",
          "value": "document"
        },
        {
          "name": "Employee",
          "value": "employee"
        },
        {
          "name": "Employee Time Tracking",
          "value": "employeeTimeTracking"
        },
        {
          "name": "Estimate",
          "value": "estimate"
        },
        {
          "name": "Event",
          "value": "event"
        },
        {
          "name": "Expense Account",
          "value": "expenseAccount"
        },
        {
          "name": "Funnel",
          "value": "funnel"
        },
        {
          "name": "Inbox",
          "value": "inbox"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Numbering Series",
          "value": "numberingSeries"
        },
        {
          "name": "Opportunity",
          "value": "opportunity"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Payment Method",
          "value": "paymentMethod"
        },
        {
          "name": "Payroll Record",
          "value": "payrollRecord"
        },
        {
          "name": "Price List",
          "value": "priceList"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Production Order",
          "value": "productionOrder"
        },
        {
          "name": "Proforma",
          "value": "proforma"
        },
        {
          "name": "Project",
          "value": "project"
        },
        {
          "name": "Project Time Tracking",
          "value": "projectTimeTracking"
        },
        {
          "name": "Purchase",
          "value": "purchase"
        },
        {
          "name": "Purchase Delivery Note",
          "value": "purchaseDeliveryNote"
        },
        {
          "name": "Purchase Order",
          "value": "purchaseOrder"
        },
        {
          "name": "Recurring Invoice",
          "value": "recurringInvoice"
        },
        {
          "name": "Remittance",
          "value": "remittance"
        },
        {
          "name": "Sales Channel",
          "value": "salesChannel"
        },
        {
          "name": "Sales Credit Note",
          "value": "salesCreditNote"
        },
        {
          "name": "Sales Order",
          "value": "salesOrder"
        },
        {
          "name": "Sales Receipt",
          "value": "salesReceipt"
        },
        {
          "name": "Service",
          "value": "service"
        },
        {
          "name": "Tag",
          "value": "tag"
        },
        {
          "name": "Task",
          "value": "task"
        },
        {
          "name": "Tax",
          "value": "tax"
        },
        {
          "name": "Warehouse",
          "value": "warehouse"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Bulk Archive",
          "value": "bulkArchive",
          "action": "Archive contacts in bulk",
          "description": "Archive multiple contacts at once"
        },
        {
          "name": "Bulk Delete",
          "value": "bulkDelete",
          "action": "Delete contacts in bulk",
          "description": "Permanently delete multiple contacts at once"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "description": "Delete a contact"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "description": "Get a contact by ID"
        },
        {
          "name": "Get Attachment",
          "value": "getAttachment",
          "action": "Get a contact attachment",
          "description": "Download a single attachment file from a contact"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many contacts",
          "description": "Get many contacts"
        },
        {
          "name": "Get Portal Link",
          "value": "getPortalLink",
          "action": "Get the customer portal link",
          "description": "Get the customer portal URL for a contact"
        },
        {
          "name": "List Attachments",
          "value": "listAttachments",
          "action": "List contact attachments",
          "description": "List every file attached to a contact"
        },
        {
          "name": "Search",
          "value": "search",
          "action": "Search contacts",
          "description": "Search contacts by name (prefix match)"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "description": "Update an existing contact (full replacement)"
        },
        {
          "name": "Upload Attachment",
          "value": "uploadAttachment",
          "action": "Upload an attachment to a contact",
          "description": "Attach a file (from a previous node's binary output) to a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createAccountingAccount",
      "options": [
        {
          "name": "Create Accounting Account",
          "value": "createAccountingAccount",
          "action": "Create Accounting Account"
        },
        {
          "name": "Create Ledger Entry",
          "value": "createLedgerEntry",
          "action": "Create Ledger Entry"
        },
        {
          "name": "List Accounting Accounts",
          "value": "listAccountingAccounts",
          "action": "List Accounting Accounts"
        },
        {
          "name": "List Ledger Entries",
          "value": "listLedgerEntries",
          "action": "List Ledger Entries"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accounting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "archiveBankingAccount",
      "options": [
        {
          "name": "Archive Banking Account",
          "value": "archiveBankingAccount",
          "action": "Archive Banking Account"
        },
        {
          "name": "Create Bank Movement",
          "value": "createBankMovement",
          "action": "Create Bank Movement"
        },
        {
          "name": "Create Banking Account",
          "value": "createBankingAccount",
          "action": "Create Banking Account"
        },
        {
          "name": "Delete Banking Account",
          "value": "deleteBankingAccount",
          "action": "Delete Banking Account"
        },
        {
          "name": "Get Banking Account",
          "value": "getBankingAccount",
          "action": "Get Banking Account"
        },
        {
          "name": "List Banking Account Bank Movements",
          "value": "listBankingAccountBankMovements",
          "action": "List Banking Account Bank Movements"
        },
        {
          "name": "List Banking Account Cash Movements",
          "value": "listBankingAccountCashMovements",
          "action": "List Banking Account Cash Movements"
        },
        {
          "name": "List Banking Accounts",
          "value": "listBankingAccounts",
          "action": "List Banking Accounts"
        },
        {
          "name": "Reconcile Transactionwith Document",
          "value": "reconcileTransactionwithDocument",
          "action": "Reconcile Transactionwith Document"
        },
        {
          "name": "Update Banking Account",
          "value": "updateBankingAccount",
          "action": "Update Banking Account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bankAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createInvoicingForecast",
      "options": [
        {
          "name": "Create Invoicing Forecast",
          "value": "createInvoicingForecast",
          "action": "Create Invoicing Forecast"
        },
        {
          "name": "Delete Invoicing Forecast",
          "value": "deleteInvoicingForecast",
          "action": "Delete Invoicing Forecast"
        },
        {
          "name": "Editinvoicing Forecast",
          "value": "editinvoicingForecast",
          "action": "Editinvoicing Forecast"
        },
        {
          "name": "Get Invoicing Forecast",
          "value": "getInvoicingForecast",
          "action": "Get Invoicing Forecast"
        },
        {
          "name": "List Invoicing Forecasts",
          "value": "listInvoicingForecasts",
          "action": "List Invoicing Forecasts"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "billingForecast"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Booking",
          "value": "create",
          "action": "Create Booking"
        },
        {
          "name": "Get Booking",
          "value": "get",
          "action": "Get Booking"
        },
        {
          "name": "List Bookings",
          "value": "getAll",
          "action": "List Bookings"
        },
        {
          "name": "Update Booking",
          "value": "update",
          "action": "Update Booking"
        },
        {
          "name": "Delete Booking",
          "value": "delete",
          "action": "Delete Booking"
        },
        {
          "name": "Get Booking Location Slots",
          "value": "getBookingLocationSlots",
          "action": "Get Booking Location Slots"
        },
        {
          "name": "List Booking Locations",
          "value": "listBookingLocations",
          "action": "List Booking Locations"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "booking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Contact Group",
          "value": "create",
          "action": "Create Contact Group"
        },
        {
          "name": "Get Contact Group",
          "value": "get",
          "action": "Get Contact Group"
        },
        {
          "name": "List Contact Groups",
          "value": "getAll",
          "action": "List Contact Groups"
        },
        {
          "name": "Update Contact Group",
          "value": "update",
          "action": "Update Contact Group"
        },
        {
          "name": "Delete Contact Group",
          "value": "delete",
          "action": "Delete Contact Group"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contactGroup"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "approveCreditnote",
      "options": [
        {
          "name": "Approve Creditnote",
          "value": "approveCreditnote",
          "action": "Approve Creditnote"
        },
        {
          "name": "Attach Creditnote File",
          "value": "attachCreditnoteFile",
          "action": "Attach Creditnote File"
        },
        {
          "name": "Create Creditnote",
          "value": "createCreditnote",
          "action": "Create Creditnote"
        },
        {
          "name": "Create Creditnote Payment",
          "value": "createCreditnotePayment",
          "action": "Create Creditnote Payment"
        },
        {
          "name": "Delete Creditnote",
          "value": "deleteCreditnote",
          "action": "Delete Creditnote"
        },
        {
          "name": "Get Creditnote",
          "value": "getCreditnote",
          "action": "Get Creditnote"
        },
        {
          "name": "Get Creditnote Attachment",
          "value": "getCreditnoteAttachment",
          "action": "Get Creditnote Attachment"
        },
        {
          "name": "Get Creditnote PDF",
          "value": "getCreditnotePdf",
          "action": "Get Creditnote PDF"
        },
        {
          "name": "List Creditnote Attachments",
          "value": "listCreditnoteAttachments",
          "action": "List Creditnote Attachments"
        },
        {
          "name": "List Creditnotes",
          "value": "listCreditnotes",
          "action": "List Creditnotes"
        },
        {
          "name": "Send Creditnote",
          "value": "sendCreditnote",
          "action": "Send Creditnote"
        },
        {
          "name": "Set Creditnote Pipeline",
          "value": "setCreditnotePipeline",
          "action": "Set Creditnote Pipeline"
        },
        {
          "name": "Update Creditnote",
          "value": "updateCreditnote",
          "action": "Update Creditnote"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "creditNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "approveWaybill",
      "options": [
        {
          "name": "Approve Waybill",
          "value": "approveWaybill",
          "action": "Approve Waybill"
        },
        {
          "name": "Attach Waybill File",
          "value": "attachWaybillFile",
          "action": "Attach Waybill File"
        },
        {
          "name": "Create Waybill",
          "value": "createWaybill",
          "action": "Create Waybill"
        },
        {
          "name": "Delete Waybill",
          "value": "deleteWaybill",
          "action": "Delete Waybill"
        },
        {
          "name": "Get Waybill",
          "value": "getWaybill",
          "action": "Get Waybill"
        },
        {
          "name": "Get Waybill Attachment",
          "value": "getWaybillAttachment",
          "action": "Get Waybill Attachment"
        },
        {
          "name": "Get Waybill PDF",
          "value": "getWaybillPdf",
          "action": "Get Waybill PDF"
        },
        {
          "name": "List Waybill Attachments",
          "value": "listWaybillAttachments",
          "action": "List Waybill Attachments"
        },
        {
          "name": "List Waybills",
          "value": "listWaybills",
          "action": "List Waybills"
        },
        {
          "name": "Send Waybill",
          "value": "sendWaybill",
          "action": "Send Waybill"
        },
        {
          "name": "Set Waybill Pipeline",
          "value": "setWaybillPipeline",
          "action": "Set Waybill Pipeline"
        },
        {
          "name": "Update Waybill",
          "value": "updateWaybill",
          "action": "Update Waybill"
        },
        {
          "name": "Update Waybill Tracking",
          "value": "updateWaybillTracking",
          "action": "Update Waybill Tracking"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "deliveryNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "convert",
      "options": [
        {
          "name": "Convert Document",
          "value": "convert",
          "action": "Convert Document"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "team",
      "options": [
        {
          "name": "Team",
          "value": "team",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team2",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team3",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team4",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team5",
          "action": "Team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employee"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "team",
      "options": [
        {
          "name": "Team",
          "value": "team",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team10",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team2",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team3",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team4",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team5",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team6",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team7",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team8",
          "action": "Team"
        },
        {
          "name": "Team",
          "value": "team9",
          "action": "Team"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "employeeTimeTracking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Estimate",
          "value": "create",
          "action": "Create Estimate"
        },
        {
          "name": "Get Estimate",
          "value": "get",
          "action": "Get Estimate"
        },
        {
          "name": "List Estimates",
          "value": "getAll",
          "action": "List Estimates"
        },
        {
          "name": "Update Estimate",
          "value": "update",
          "action": "Update Estimate"
        },
        {
          "name": "Delete Estimate",
          "value": "delete",
          "action": "Delete Estimate"
        },
        {
          "name": "Accept Estimate",
          "value": "accept",
          "action": "Accept Estimate"
        },
        {
          "name": "Attach Estimate File",
          "value": "attachEstimateFile",
          "action": "Attach Estimate File"
        },
        {
          "name": "Get Estimate Attachment",
          "value": "getEstimateAttachment",
          "action": "Get Estimate Attachment"
        },
        {
          "name": "Get Estimate PDF",
          "value": "getEstimatePdf",
          "action": "Get Estimate PDF"
        },
        {
          "name": "List Estimate Attachments",
          "value": "listEstimateAttachments",
          "action": "List Estimate Attachments"
        },
        {
          "name": "Reject Estimate",
          "value": "reject",
          "action": "Reject Estimate"
        },
        {
          "name": "Send Estimate",
          "value": "send",
          "action": "Send Estimate"
        },
        {
          "name": "Set Estimate Pipeline",
          "value": "setEstimatePipeline",
          "action": "Set Estimate Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "estimate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Event",
          "value": "create",
          "action": "Create Event"
        },
        {
          "name": "Get Event",
          "value": "get",
          "action": "Get Event"
        },
        {
          "name": "List Events",
          "value": "getAll",
          "action": "List Events"
        },
        {
          "name": "Update Event",
          "value": "update",
          "action": "Update Event"
        },
        {
          "name": "Delete Event",
          "value": "delete",
          "action": "Delete Event"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "event"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "expensesAccount",
      "options": [
        {
          "name": "Expenses Account",
          "value": "expensesAccount",
          "action": "Expenses Account"
        },
        {
          "name": "Expenses Account",
          "value": "expensesAccount2",
          "action": "Expenses Account"
        },
        {
          "name": "Expenses Account",
          "value": "expensesAccount3",
          "action": "Expenses Account"
        },
        {
          "name": "Expenses Account",
          "value": "expensesAccount4",
          "action": "Expenses Account"
        },
        {
          "name": "Expenses Account",
          "value": "expensesAccount5",
          "action": "Expenses Account"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "expenseAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "crm",
      "options": [
        {
          "name": "Crm",
          "value": "crm",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm2",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm3",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm4",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm5",
          "action": "Crm"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "funnel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Inbox",
          "value": "get",
          "action": "Get Inbox"
        },
        {
          "name": "List Inbox",
          "value": "getAll",
          "action": "List Inbox"
        },
        {
          "name": "Update Inbox",
          "value": "update",
          "action": "Update Inbox"
        },
        {
          "name": "Delete Inbox",
          "value": "delete",
          "action": "Delete Inbox"
        },
        {
          "name": "Attach Inbox",
          "value": "attach",
          "action": "Attach Inbox"
        },
        {
          "name": "Download Inbox File",
          "value": "downloadInboxFile",
          "action": "Download Inbox File"
        },
        {
          "name": "Preview Inbox File",
          "value": "previewInboxFile",
          "action": "Preview Inbox File"
        },
        {
          "name": "Upload Inbox",
          "value": "upload",
          "action": "Upload Inbox"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "inbox"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Invoice",
          "value": "create",
          "action": "Create Invoice"
        },
        {
          "name": "Get Invoice",
          "value": "get",
          "action": "Get Invoice"
        },
        {
          "name": "List Invoices",
          "value": "getAll",
          "action": "List Invoices"
        },
        {
          "name": "Update Invoice",
          "value": "update",
          "action": "Update Invoice"
        },
        {
          "name": "Delete Invoice",
          "value": "delete",
          "action": "Delete Invoice"
        },
        {
          "name": "Approve Invoice",
          "value": "approve",
          "action": "Approve Invoice"
        },
        {
          "name": "Attach Invoice File",
          "value": "attachInvoiceFile",
          "action": "Attach Invoice File"
        },
        {
          "name": "Bulk Approve Invoices",
          "value": "bulkApprove",
          "action": "Bulk Approve Invoices"
        },
        {
          "name": "Bulk Cancel Invoices",
          "value": "bulkCancel",
          "action": "Bulk Cancel Invoices"
        },
        {
          "name": "Bulk Delete Invoices",
          "value": "bulkDelete",
          "action": "Bulk Delete Invoices"
        },
        {
          "name": "Cancel Invoice",
          "value": "cancel",
          "action": "Cancel Invoice"
        },
        {
          "name": "Create Invoice Payment",
          "value": "createInvoicePayment",
          "action": "Create Invoice Payment"
        },
        {
          "name": "Get Invoice Attachment",
          "value": "getInvoiceAttachment",
          "action": "Get Invoice Attachment"
        },
        {
          "name": "Get Invoice PDF",
          "value": "getInvoicePdf",
          "action": "Get Invoice PDF"
        },
        {
          "name": "List Invoice Attachments",
          "value": "listInvoiceAttachments",
          "action": "List Invoice Attachments"
        },
        {
          "name": "Send Invoice",
          "value": "send",
          "action": "Send Invoice"
        },
        {
          "name": "Set Invoice Pipeline",
          "value": "setInvoicePipeline",
          "action": "Set Invoice Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Numbering Series",
          "value": "create",
          "action": "Numbering Series"
        },
        {
          "name": "Numbering Series",
          "value": "update",
          "action": "Numbering Series"
        },
        {
          "name": "Numbering Series",
          "value": "delete",
          "action": "Numbering Series"
        },
        {
          "name": "Numbering Series",
          "value": "listarSeriesDeNumeracionPorTipoDeDocumento",
          "action": "Numbering Series"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "numberingSeries"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "crm",
      "options": [
        {
          "name": "Crm",
          "value": "crm",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm10",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm11",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm12",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm2",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm3",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm4",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm5",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm6",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm7",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm8",
          "action": "Crm"
        },
        {
          "name": "Crm",
          "value": "crm9",
          "action": "Crm"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "opportunity"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Payment",
          "value": "create",
          "action": "Create Payment"
        },
        {
          "name": "Get Payment",
          "value": "get",
          "action": "Get Payment"
        },
        {
          "name": "List Payments",
          "value": "getAll",
          "action": "List Payments"
        },
        {
          "name": "Update Payment",
          "value": "update",
          "action": "Update Payment"
        },
        {
          "name": "Delete Payment",
          "value": "delete",
          "action": "Delete Payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Payment Method",
          "value": "create",
          "action": "Create Payment Method"
        },
        {
          "name": "Get Payment Method",
          "value": "get",
          "action": "Get Payment Method"
        },
        {
          "name": "List Payment Methods",
          "value": "getAll",
          "action": "List Payment Methods"
        },
        {
          "name": "Update Payment Method",
          "value": "update",
          "action": "Update Payment Method"
        },
        {
          "name": "Delete Payment Method",
          "value": "delete",
          "action": "Delete Payment Method"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "paymentMethod"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "salaryRecord",
      "options": [
        {
          "name": "Salary Record",
          "value": "salaryRecord",
          "action": "Salary Record"
        },
        {
          "name": "Salary Record",
          "value": "salaryRecord2",
          "action": "Salary Record"
        },
        {
          "name": "Salary Record",
          "value": "salaryRecord3",
          "action": "Salary Record"
        },
        {
          "name": "Salary Record",
          "value": "salaryRecord4",
          "action": "Salary Record"
        },
        {
          "name": "Salary Record",
          "value": "salaryRecord5",
          "action": "Salary Record"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payrollRecord"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "pricelist",
      "options": [
        {
          "name": "Pricelist",
          "value": "pricelist",
          "action": "Pricelist"
        },
        {
          "name": "Pricelist",
          "value": "pricelist2",
          "action": "Pricelist"
        },
        {
          "name": "Pricelist",
          "value": "pricelist3",
          "action": "Pricelist"
        },
        {
          "name": "Pricelist",
          "value": "pricelist4",
          "action": "Pricelist"
        },
        {
          "name": "Pricelist",
          "value": "pricelist5",
          "action": "Pricelist"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "priceList"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Product",
          "value": "create",
          "action": "Create Product"
        },
        {
          "name": "Get Product",
          "value": "get",
          "action": "Get Product"
        },
        {
          "name": "List Products",
          "value": "getAll",
          "action": "List Products"
        },
        {
          "name": "Update Product",
          "value": "update",
          "action": "Update Product"
        },
        {
          "name": "Delete Product",
          "value": "delete",
          "action": "Delete Product"
        },
        {
          "name": "Get Product Image",
          "value": "getProductImage",
          "action": "Get Product Image"
        },
        {
          "name": "Get Product Main Image",
          "value": "getProductMainImage",
          "action": "Get Product Main Image"
        },
        {
          "name": "Get Product Stock",
          "value": "getProductStock",
          "action": "Get Product Stock"
        },
        {
          "name": "Get Product Stock Transit",
          "value": "getProductStockTransit",
          "action": "Get Product Stock Transit"
        },
        {
          "name": "List Product Images",
          "value": "listProductImages",
          "action": "List Product Images"
        },
        {
          "name": "Update Product Stock",
          "value": "updateProductStock",
          "action": "Update Product Stock"
        },
        {
          "name": "Upload Product Image",
          "value": "uploadProductImage",
          "action": "Upload Product Image"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Production Order",
          "value": "create",
          "action": "Create Production Order"
        },
        {
          "name": "Get Production Order",
          "value": "get",
          "action": "Get Production Order"
        },
        {
          "name": "List Production Orders",
          "value": "getAll",
          "action": "List Production Orders"
        },
        {
          "name": "Update Production Order",
          "value": "update",
          "action": "Update Production Order"
        },
        {
          "name": "Delete Production Order",
          "value": "delete",
          "action": "Delete Production Order"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productionOrder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Proforma",
          "value": "create",
          "action": "Create Proforma"
        },
        {
          "name": "Get Proforma",
          "value": "get",
          "action": "Get Proforma"
        },
        {
          "name": "List Proformas",
          "value": "getAll",
          "action": "List Proformas"
        },
        {
          "name": "Update Proforma",
          "value": "update",
          "action": "Update Proforma"
        },
        {
          "name": "Delete Proforma",
          "value": "delete",
          "action": "Delete Proforma"
        },
        {
          "name": "Approve Proforma",
          "value": "approve",
          "action": "Approve Proforma"
        },
        {
          "name": "Attach Proforma File",
          "value": "attachProformaFile",
          "action": "Attach Proforma File"
        },
        {
          "name": "Get Proforma Attachment",
          "value": "getProformaAttachment",
          "action": "Get Proforma Attachment"
        },
        {
          "name": "Get Proforma PDF",
          "value": "getProformaPdf",
          "action": "Get Proforma PDF"
        },
        {
          "name": "List Proforma Attachments",
          "value": "listProformaAttachments",
          "action": "List Proforma Attachments"
        },
        {
          "name": "Send Proforma",
          "value": "send",
          "action": "Send Proforma"
        },
        {
          "name": "Set Proforma Pipeline",
          "value": "setProformaPipeline",
          "action": "Set Proforma Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "proforma"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Projects",
          "value": "create",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "get",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "getAll",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "update",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "delete",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "get2",
          "action": "Projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "project"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "projects",
      "options": [
        {
          "name": "Projects",
          "value": "projects",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects2",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects3",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects4",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects5",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects6",
          "action": "Projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "projectTimeTracking"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Purchase",
          "value": "create",
          "action": "Create Purchase"
        },
        {
          "name": "Get Purchase",
          "value": "get",
          "action": "Get Purchase"
        },
        {
          "name": "List Purchases",
          "value": "getAll",
          "action": "List Purchases"
        },
        {
          "name": "Update Purchase",
          "value": "update",
          "action": "Update Purchase"
        },
        {
          "name": "Delete Purchase",
          "value": "delete",
          "action": "Delete Purchase"
        },
        {
          "name": "Approve Purchase",
          "value": "approve",
          "action": "Approve Purchase"
        },
        {
          "name": "Attach Purchase File",
          "value": "attachPurchaseFile",
          "action": "Attach Purchase File"
        },
        {
          "name": "Create Purchase Payment",
          "value": "createPurchasePayment",
          "action": "Create Purchase Payment"
        },
        {
          "name": "Create Purchase Refund",
          "value": "createPurchaseRefund",
          "action": "Create Purchase Refund"
        },
        {
          "name": "Get Purchase Attachment",
          "value": "getPurchaseAttachment",
          "action": "Get Purchase Attachment"
        },
        {
          "name": "List Purchase Attachments",
          "value": "listPurchaseAttachments",
          "action": "List Purchase Attachments"
        },
        {
          "name": "Set Purchase Pipeline",
          "value": "setPurchasePipeline",
          "action": "Set Purchase Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchase"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "approvePurchaseShipment",
      "options": [
        {
          "name": "Approve Purchase Shipment",
          "value": "approvePurchaseShipment",
          "action": "Approve Purchase Shipment"
        },
        {
          "name": "Create Purchase Shipment",
          "value": "createPurchaseShipment",
          "action": "Create Purchase Shipment"
        },
        {
          "name": "Delete Purchase Shipment",
          "value": "deletePurchaseShipment",
          "action": "Delete Purchase Shipment"
        },
        {
          "name": "Get Purchase Shipment",
          "value": "getPurchaseShipment",
          "action": "Get Purchase Shipment"
        },
        {
          "name": "List Purchase Shipments",
          "value": "listPurchaseShipments",
          "action": "List Purchase Shipments"
        },
        {
          "name": "Update Purchase Shipment",
          "value": "updatePurchaseShipment",
          "action": "Update Purchase Shipment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchaseDeliveryNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Purchase Order",
          "value": "create",
          "action": "Create Purchase Order"
        },
        {
          "name": "Get Purchase Order",
          "value": "get",
          "action": "Get Purchase Order"
        },
        {
          "name": "List Purchase Orders",
          "value": "getAll",
          "action": "List Purchase Orders"
        },
        {
          "name": "Update Purchase Order",
          "value": "update",
          "action": "Update Purchase Order"
        },
        {
          "name": "Delete Purchase Order",
          "value": "delete",
          "action": "Delete Purchase Order"
        },
        {
          "name": "Approve Purchase Order",
          "value": "approve",
          "action": "Approve Purchase Order"
        },
        {
          "name": "Attach Purchase Order File",
          "value": "attachPurchaseOrderFile",
          "action": "Attach Purchase Order File"
        },
        {
          "name": "Get Purchase Order Attachment",
          "value": "getPurchaseOrderAttachment",
          "action": "Get Purchase Order Attachment"
        },
        {
          "name": "Get Purchase Order PDF",
          "value": "getPurchaseOrderPdf",
          "action": "Get Purchase Order PDF"
        },
        {
          "name": "Get Purchase Order Received Items",
          "value": "getPurchaseOrderReceivedItems",
          "action": "Get Purchase Order Received Items"
        },
        {
          "name": "List Purchase Order Attachments",
          "value": "listPurchaseOrderAttachments",
          "action": "List Purchase Order Attachments"
        },
        {
          "name": "Receive Purchase Order",
          "value": "receive",
          "action": "Receive Purchase Order"
        },
        {
          "name": "Send Purchase Order",
          "value": "send",
          "action": "Send Purchase Order"
        },
        {
          "name": "Set Purchase Order Pipeline",
          "value": "setPurchaseOrderPipeline",
          "action": "Set Purchase Order Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchaseOrder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createInvoiceRecurring",
      "options": [
        {
          "name": "Create Invoice Recurring",
          "value": "createInvoiceRecurring",
          "action": "Create Invoice Recurring"
        },
        {
          "name": "Delete Invoice Recurring",
          "value": "deleteInvoiceRecurring",
          "action": "Delete Invoice Recurring"
        },
        {
          "name": "Get Invoice Recurring",
          "value": "getInvoiceRecurring",
          "action": "Get Invoice Recurring"
        },
        {
          "name": "Get Recurring Schedule",
          "value": "getRecurringSchedule",
          "action": "Get Recurring Schedule"
        },
        {
          "name": "List Invoice Recurrings",
          "value": "listInvoiceRecurrings",
          "action": "List Invoice Recurrings"
        },
        {
          "name": "Skip Recurring Occurrence",
          "value": "skipRecurringOccurrence",
          "action": "Skip Recurring Occurrence"
        },
        {
          "name": "Update Invoice Recurring",
          "value": "updateInvoiceRecurring",
          "action": "Update Invoice Recurring"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "recurringInvoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Remittance",
          "value": "get",
          "action": "Get Remittance"
        },
        {
          "name": "List Remittances",
          "value": "getAll",
          "action": "List Remittances"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "remittance"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Sales Channel",
          "value": "create",
          "action": "Sales Channel"
        },
        {
          "name": "Sales Channel",
          "value": "get",
          "action": "Sales Channel"
        },
        {
          "name": "Sales Channel",
          "value": "getAll",
          "action": "Sales Channel"
        },
        {
          "name": "Sales Channel",
          "value": "update",
          "action": "Sales Channel"
        },
        {
          "name": "Sales Channel",
          "value": "delete",
          "action": "Sales Channel"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesChannel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "approveReceiptnote",
      "options": [
        {
          "name": "Approve Receiptnote",
          "value": "approveReceiptnote",
          "action": "Approve Receiptnote"
        },
        {
          "name": "Attach Receiptnote File",
          "value": "attachReceiptnoteFile",
          "action": "Attach Receiptnote File"
        },
        {
          "name": "Create Receiptnote",
          "value": "createReceiptnote",
          "action": "Create Receiptnote"
        },
        {
          "name": "Create Receiptnote Payment",
          "value": "createReceiptnotePayment",
          "action": "Create Receiptnote Payment"
        },
        {
          "name": "Delete Receiptnote",
          "value": "deleteReceiptnote",
          "action": "Delete Receiptnote"
        },
        {
          "name": "Get Receiptnote",
          "value": "getReceiptnote",
          "action": "Get Receiptnote"
        },
        {
          "name": "Get Receiptnote Attachment",
          "value": "getReceiptnoteAttachment",
          "action": "Get Receiptnote Attachment"
        },
        {
          "name": "Get Receiptnote PDF",
          "value": "getReceiptnotePdf",
          "action": "Get Receiptnote PDF"
        },
        {
          "name": "List Receiptnote Attachments",
          "value": "listReceiptnoteAttachments",
          "action": "List Receiptnote Attachments"
        },
        {
          "name": "List Receiptnotes",
          "value": "listReceiptnotes",
          "action": "List Receiptnotes"
        },
        {
          "name": "Send Receiptnote",
          "value": "sendReceiptnote",
          "action": "Send Receiptnote"
        },
        {
          "name": "Set Receiptnote Pipeline",
          "value": "setReceiptnotePipeline",
          "action": "Set Receiptnote Pipeline"
        },
        {
          "name": "Update Receiptnote",
          "value": "updateReceiptnote",
          "action": "Update Receiptnote"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesCreditNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Sales Order",
          "value": "create",
          "action": "Create Sales Order"
        },
        {
          "name": "Get Sales Order",
          "value": "get",
          "action": "Get Sales Order"
        },
        {
          "name": "List Sales Orders",
          "value": "getAll",
          "action": "List Sales Orders"
        },
        {
          "name": "Update Sales Order",
          "value": "update",
          "action": "Update Sales Order"
        },
        {
          "name": "Delete Sales Order",
          "value": "delete",
          "action": "Delete Sales Order"
        },
        {
          "name": "Approve Sales Order",
          "value": "approve",
          "action": "Approve Sales Order"
        },
        {
          "name": "Attach Sales Order File",
          "value": "attachSalesOrderFile",
          "action": "Attach Sales Order File"
        },
        {
          "name": "Get Sales Order Attachment",
          "value": "getSalesOrderAttachment",
          "action": "Get Sales Order Attachment"
        },
        {
          "name": "Get Sales Order PDF",
          "value": "getSalesOrderPdf",
          "action": "Get Sales Order PDF"
        },
        {
          "name": "Get Sales Order Shipped Items",
          "value": "getSalesOrderShippedItems",
          "action": "Get Sales Order Shipped Items"
        },
        {
          "name": "List Sales Order Attachments",
          "value": "listSalesOrderAttachments",
          "action": "List Sales Order Attachments"
        },
        {
          "name": "Send Sales Order",
          "value": "send",
          "action": "Send Sales Order"
        },
        {
          "name": "Set Sales Order Pipeline",
          "value": "setSalesOrderPipeline",
          "action": "Set Sales Order Pipeline"
        },
        {
          "name": "Ship Sales Order",
          "value": "ship",
          "action": "Ship Sales Order"
        },
        {
          "name": "Ship Sales Order By Lines",
          "value": "shipSalesOrderByLines",
          "action": "Ship Sales Order By Lines"
        },
        {
          "name": "Update Sales Order Tracking",
          "value": "updateSalesOrderTracking",
          "action": "Update Sales Order Tracking"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesOrder"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Sales Receipt",
          "value": "create",
          "action": "Create Sales Receipt"
        },
        {
          "name": "Get Sales Receipt",
          "value": "get",
          "action": "Get Sales Receipt"
        },
        {
          "name": "List Sales Receipts",
          "value": "getAll",
          "action": "List Sales Receipts"
        },
        {
          "name": "Update Sales Receipt",
          "value": "update",
          "action": "Update Sales Receipt"
        },
        {
          "name": "Delete Sales Receipt",
          "value": "delete",
          "action": "Delete Sales Receipt"
        },
        {
          "name": "Approve Sales Receipt",
          "value": "approve",
          "action": "Approve Sales Receipt"
        },
        {
          "name": "Attach Sales Receipt File",
          "value": "attachSalesReceiptFile",
          "action": "Attach Sales Receipt File"
        },
        {
          "name": "Create Sales Receipt Payment",
          "value": "createSalesReceiptPayment",
          "action": "Create Sales Receipt Payment"
        },
        {
          "name": "Get Sales Receipt Attachment",
          "value": "getSalesReceiptAttachment",
          "action": "Get Sales Receipt Attachment"
        },
        {
          "name": "Get Sales Receipt PDF",
          "value": "getSalesReceiptPdf",
          "action": "Get Sales Receipt PDF"
        },
        {
          "name": "List Sales Receipt Attachments",
          "value": "listSalesReceiptAttachments",
          "action": "List Sales Receipt Attachments"
        },
        {
          "name": "Send Sales Receipt",
          "value": "send",
          "action": "Send Sales Receipt"
        },
        {
          "name": "Set Sales Receipt Pipeline",
          "value": "setSalesReceiptPipeline",
          "action": "Set Sales Receipt Pipeline"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "salesReceipt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Service",
          "value": "create",
          "action": "Create Service"
        },
        {
          "name": "Get Service",
          "value": "get",
          "action": "Get Service"
        },
        {
          "name": "List Services",
          "value": "getAll",
          "action": "List Services"
        },
        {
          "name": "Update Service",
          "value": "update",
          "action": "Update Service"
        },
        {
          "name": "Delete Service",
          "value": "delete",
          "action": "Delete Service"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "service"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Tag",
          "value": "create",
          "action": "Create Tag"
        },
        {
          "name": "List Tags",
          "value": "getAll",
          "action": "List Tags"
        },
        {
          "name": "Delete Tag",
          "value": "delete",
          "action": "Delete Tag"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tag"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "projects",
      "options": [
        {
          "name": "Projects",
          "value": "projects",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects2",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects3",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects4",
          "action": "Projects"
        },
        {
          "name": "Projects",
          "value": "projects5",
          "action": "Projects"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "task"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "List Taxes",
          "value": "getAll",
          "action": "List Taxes"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "tax"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create Warehouse",
          "value": "create",
          "action": "Create Warehouse"
        },
        {
          "name": "Get Warehouse",
          "value": "get",
          "action": "Get Warehouse"
        },
        {
          "name": "List Warehouses",
          "value": "getAll",
          "action": "List Warehouses"
        },
        {
          "name": "Update Warehouse",
          "value": "update",
          "action": "Update Warehouse"
        },
        {
          "name": "Delete Warehouse",
          "value": "delete",
          "action": "Delete Warehouse"
        },
        {
          "name": "Get Warehouse Stock",
          "value": "getWarehouseStock",
          "action": "Get Warehouse Stock"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "warehouse"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Bulk Archive",
      "value": "bulkArchive",
      "action": "Archive contacts in bulk",
      "description": "Archive multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Bulk Delete",
      "value": "bulkDelete",
      "action": "Delete contacts in bulk",
      "description": "Permanently delete multiple contacts at once",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "description": "Get a contact by ID",
      "resource": "contact"
    },
    {
      "name": "Get Attachment",
      "value": "getAttachment",
      "action": "Get a contact attachment",
      "description": "Download a single attachment file from a contact",
      "resource": "contact"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many contacts",
      "description": "Get many contacts",
      "resource": "contact"
    },
    {
      "name": "Get Portal Link",
      "value": "getPortalLink",
      "action": "Get the customer portal link",
      "description": "Get the customer portal URL for a contact",
      "resource": "contact"
    },
    {
      "name": "List Attachments",
      "value": "listAttachments",
      "action": "List contact attachments",
      "description": "List every file attached to a contact",
      "resource": "contact"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search contacts",
      "description": "Search contacts by name (prefix match)",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "description": "Update an existing contact (full replacement)",
      "resource": "contact"
    },
    {
      "name": "Upload Attachment",
      "value": "uploadAttachment",
      "action": "Upload an attachment to a contact",
      "description": "Attach a file (from a previous node's binary output) to a contact",
      "resource": "contact"
    },
    {
      "name": "Create Accounting Account",
      "value": "createAccountingAccount",
      "action": "Create Accounting Account",
      "resource": "accounting"
    },
    {
      "name": "Create Ledger Entry",
      "value": "createLedgerEntry",
      "action": "Create Ledger Entry",
      "resource": "accounting"
    },
    {
      "name": "List Accounting Accounts",
      "value": "listAccountingAccounts",
      "action": "List Accounting Accounts",
      "resource": "accounting"
    },
    {
      "name": "List Ledger Entries",
      "value": "listLedgerEntries",
      "action": "List Ledger Entries",
      "resource": "accounting"
    },
    {
      "name": "Archive Banking Account",
      "value": "archiveBankingAccount",
      "action": "Archive Banking Account",
      "resource": "bankAccount"
    },
    {
      "name": "Create Bank Movement",
      "value": "createBankMovement",
      "action": "Create Bank Movement",
      "resource": "bankAccount"
    },
    {
      "name": "Create Banking Account",
      "value": "createBankingAccount",
      "action": "Create Banking Account",
      "resource": "bankAccount"
    },
    {
      "name": "Delete Banking Account",
      "value": "deleteBankingAccount",
      "action": "Delete Banking Account",
      "resource": "bankAccount"
    },
    {
      "name": "Get Banking Account",
      "value": "getBankingAccount",
      "action": "Get Banking Account",
      "resource": "bankAccount"
    },
    {
      "name": "List Banking Account Bank Movements",
      "value": "listBankingAccountBankMovements",
      "action": "List Banking Account Bank Movements",
      "resource": "bankAccount"
    },
    {
      "name": "List Banking Account Cash Movements",
      "value": "listBankingAccountCashMovements",
      "action": "List Banking Account Cash Movements",
      "resource": "bankAccount"
    },
    {
      "name": "List Banking Accounts",
      "value": "listBankingAccounts",
      "action": "List Banking Accounts",
      "resource": "bankAccount"
    },
    {
      "name": "Reconcile Transactionwith Document",
      "value": "reconcileTransactionwithDocument",
      "action": "Reconcile Transactionwith Document",
      "resource": "bankAccount"
    },
    {
      "name": "Update Banking Account",
      "value": "updateBankingAccount",
      "action": "Update Banking Account",
      "resource": "bankAccount"
    },
    {
      "name": "Create Invoicing Forecast",
      "value": "createInvoicingForecast",
      "action": "Create Invoicing Forecast",
      "resource": "billingForecast"
    },
    {
      "name": "Delete Invoicing Forecast",
      "value": "deleteInvoicingForecast",
      "action": "Delete Invoicing Forecast",
      "resource": "billingForecast"
    },
    {
      "name": "Editinvoicing Forecast",
      "value": "editinvoicingForecast",
      "action": "Editinvoicing Forecast",
      "resource": "billingForecast"
    },
    {
      "name": "Get Invoicing Forecast",
      "value": "getInvoicingForecast",
      "action": "Get Invoicing Forecast",
      "resource": "billingForecast"
    },
    {
      "name": "List Invoicing Forecasts",
      "value": "listInvoicingForecasts",
      "action": "List Invoicing Forecasts",
      "resource": "billingForecast"
    },
    {
      "name": "Create Booking",
      "value": "create",
      "action": "Create Booking",
      "resource": "booking"
    },
    {
      "name": "Get Booking",
      "value": "get",
      "action": "Get Booking",
      "resource": "booking"
    },
    {
      "name": "List Bookings",
      "value": "getAll",
      "action": "List Bookings",
      "resource": "booking"
    },
    {
      "name": "Update Booking",
      "value": "update",
      "action": "Update Booking",
      "resource": "booking"
    },
    {
      "name": "Delete Booking",
      "value": "delete",
      "action": "Delete Booking",
      "resource": "booking"
    },
    {
      "name": "Get Booking Location Slots",
      "value": "getBookingLocationSlots",
      "action": "Get Booking Location Slots",
      "resource": "booking"
    },
    {
      "name": "List Booking Locations",
      "value": "listBookingLocations",
      "action": "List Booking Locations",
      "resource": "booking"
    },
    {
      "name": "Create Contact Group",
      "value": "create",
      "action": "Create Contact Group",
      "resource": "contactGroup"
    },
    {
      "name": "Get Contact Group",
      "value": "get",
      "action": "Get Contact Group",
      "resource": "contactGroup"
    },
    {
      "name": "List Contact Groups",
      "value": "getAll",
      "action": "List Contact Groups",
      "resource": "contactGroup"
    },
    {
      "name": "Update Contact Group",
      "value": "update",
      "action": "Update Contact Group",
      "resource": "contactGroup"
    },
    {
      "name": "Delete Contact Group",
      "value": "delete",
      "action": "Delete Contact Group",
      "resource": "contactGroup"
    },
    {
      "name": "Approve Creditnote",
      "value": "approveCreditnote",
      "action": "Approve Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Attach Creditnote File",
      "value": "attachCreditnoteFile",
      "action": "Attach Creditnote File",
      "resource": "creditNote"
    },
    {
      "name": "Create Creditnote",
      "value": "createCreditnote",
      "action": "Create Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Create Creditnote Payment",
      "value": "createCreditnotePayment",
      "action": "Create Creditnote Payment",
      "resource": "creditNote"
    },
    {
      "name": "Delete Creditnote",
      "value": "deleteCreditnote",
      "action": "Delete Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Get Creditnote",
      "value": "getCreditnote",
      "action": "Get Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Get Creditnote Attachment",
      "value": "getCreditnoteAttachment",
      "action": "Get Creditnote Attachment",
      "resource": "creditNote"
    },
    {
      "name": "Get Creditnote PDF",
      "value": "getCreditnotePdf",
      "action": "Get Creditnote PDF",
      "resource": "creditNote"
    },
    {
      "name": "List Creditnote Attachments",
      "value": "listCreditnoteAttachments",
      "action": "List Creditnote Attachments",
      "resource": "creditNote"
    },
    {
      "name": "List Creditnotes",
      "value": "listCreditnotes",
      "action": "List Creditnotes",
      "resource": "creditNote"
    },
    {
      "name": "Send Creditnote",
      "value": "sendCreditnote",
      "action": "Send Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Set Creditnote Pipeline",
      "value": "setCreditnotePipeline",
      "action": "Set Creditnote Pipeline",
      "resource": "creditNote"
    },
    {
      "name": "Update Creditnote",
      "value": "updateCreditnote",
      "action": "Update Creditnote",
      "resource": "creditNote"
    },
    {
      "name": "Approve Waybill",
      "value": "approveWaybill",
      "action": "Approve Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Attach Waybill File",
      "value": "attachWaybillFile",
      "action": "Attach Waybill File",
      "resource": "deliveryNote"
    },
    {
      "name": "Create Waybill",
      "value": "createWaybill",
      "action": "Create Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Delete Waybill",
      "value": "deleteWaybill",
      "action": "Delete Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Get Waybill",
      "value": "getWaybill",
      "action": "Get Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Get Waybill Attachment",
      "value": "getWaybillAttachment",
      "action": "Get Waybill Attachment",
      "resource": "deliveryNote"
    },
    {
      "name": "Get Waybill PDF",
      "value": "getWaybillPdf",
      "action": "Get Waybill PDF",
      "resource": "deliveryNote"
    },
    {
      "name": "List Waybill Attachments",
      "value": "listWaybillAttachments",
      "action": "List Waybill Attachments",
      "resource": "deliveryNote"
    },
    {
      "name": "List Waybills",
      "value": "listWaybills",
      "action": "List Waybills",
      "resource": "deliveryNote"
    },
    {
      "name": "Send Waybill",
      "value": "sendWaybill",
      "action": "Send Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Set Waybill Pipeline",
      "value": "setWaybillPipeline",
      "action": "Set Waybill Pipeline",
      "resource": "deliveryNote"
    },
    {
      "name": "Update Waybill",
      "value": "updateWaybill",
      "action": "Update Waybill",
      "resource": "deliveryNote"
    },
    {
      "name": "Update Waybill Tracking",
      "value": "updateWaybillTracking",
      "action": "Update Waybill Tracking",
      "resource": "deliveryNote"
    },
    {
      "name": "Convert Document",
      "value": "convert",
      "action": "Convert Document",
      "resource": "document"
    },
    {
      "name": "Team",
      "value": "team",
      "action": "Team",
      "resource": "employee"
    },
    {
      "name": "Team",
      "value": "team2",
      "action": "Team",
      "resource": "employee"
    },
    {
      "name": "Team",
      "value": "team3",
      "action": "Team",
      "resource": "employee"
    },
    {
      "name": "Team",
      "value": "team4",
      "action": "Team",
      "resource": "employee"
    },
    {
      "name": "Team",
      "value": "team5",
      "action": "Team",
      "resource": "employee"
    },
    {
      "name": "Team",
      "value": "team",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team10",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team2",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team3",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team4",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team5",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team6",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team7",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team8",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Team",
      "value": "team9",
      "action": "Team",
      "resource": "employeeTimeTracking"
    },
    {
      "name": "Create Estimate",
      "value": "create",
      "action": "Create Estimate",
      "resource": "estimate"
    },
    {
      "name": "Get Estimate",
      "value": "get",
      "action": "Get Estimate",
      "resource": "estimate"
    },
    {
      "name": "List Estimates",
      "value": "getAll",
      "action": "List Estimates",
      "resource": "estimate"
    },
    {
      "name": "Update Estimate",
      "value": "update",
      "action": "Update Estimate",
      "resource": "estimate"
    },
    {
      "name": "Delete Estimate",
      "value": "delete",
      "action": "Delete Estimate",
      "resource": "estimate"
    },
    {
      "name": "Accept Estimate",
      "value": "accept",
      "action": "Accept Estimate",
      "resource": "estimate"
    },
    {
      "name": "Attach Estimate File",
      "value": "attachEstimateFile",
      "action": "Attach Estimate File",
      "resource": "estimate"
    },
    {
      "name": "Get Estimate Attachment",
      "value": "getEstimateAttachment",
      "action": "Get Estimate Attachment",
      "resource": "estimate"
    },
    {
      "name": "Get Estimate PDF",
      "value": "getEstimatePdf",
      "action": "Get Estimate PDF",
      "resource": "estimate"
    },
    {
      "name": "List Estimate Attachments",
      "value": "listEstimateAttachments",
      "action": "List Estimate Attachments",
      "resource": "estimate"
    },
    {
      "name": "Reject Estimate",
      "value": "reject",
      "action": "Reject Estimate",
      "resource": "estimate"
    },
    {
      "name": "Send Estimate",
      "value": "send",
      "action": "Send Estimate",
      "resource": "estimate"
    },
    {
      "name": "Set Estimate Pipeline",
      "value": "setEstimatePipeline",
      "action": "Set Estimate Pipeline",
      "resource": "estimate"
    },
    {
      "name": "Create Event",
      "value": "create",
      "action": "Create Event",
      "resource": "event"
    },
    {
      "name": "Get Event",
      "value": "get",
      "action": "Get Event",
      "resource": "event"
    },
    {
      "name": "List Events",
      "value": "getAll",
      "action": "List Events",
      "resource": "event"
    },
    {
      "name": "Update Event",
      "value": "update",
      "action": "Update Event",
      "resource": "event"
    },
    {
      "name": "Delete Event",
      "value": "delete",
      "action": "Delete Event",
      "resource": "event"
    },
    {
      "name": "Expenses Account",
      "value": "expensesAccount",
      "action": "Expenses Account",
      "resource": "expenseAccount"
    },
    {
      "name": "Expenses Account",
      "value": "expensesAccount2",
      "action": "Expenses Account",
      "resource": "expenseAccount"
    },
    {
      "name": "Expenses Account",
      "value": "expensesAccount3",
      "action": "Expenses Account",
      "resource": "expenseAccount"
    },
    {
      "name": "Expenses Account",
      "value": "expensesAccount4",
      "action": "Expenses Account",
      "resource": "expenseAccount"
    },
    {
      "name": "Expenses Account",
      "value": "expensesAccount5",
      "action": "Expenses Account",
      "resource": "expenseAccount"
    },
    {
      "name": "Crm",
      "value": "crm",
      "action": "Crm",
      "resource": "funnel"
    },
    {
      "name": "Crm",
      "value": "crm2",
      "action": "Crm",
      "resource": "funnel"
    },
    {
      "name": "Crm",
      "value": "crm3",
      "action": "Crm",
      "resource": "funnel"
    },
    {
      "name": "Crm",
      "value": "crm4",
      "action": "Crm",
      "resource": "funnel"
    },
    {
      "name": "Crm",
      "value": "crm5",
      "action": "Crm",
      "resource": "funnel"
    },
    {
      "name": "Get Inbox",
      "value": "get",
      "action": "Get Inbox",
      "resource": "inbox"
    },
    {
      "name": "List Inbox",
      "value": "getAll",
      "action": "List Inbox",
      "resource": "inbox"
    },
    {
      "name": "Update Inbox",
      "value": "update",
      "action": "Update Inbox",
      "resource": "inbox"
    },
    {
      "name": "Delete Inbox",
      "value": "delete",
      "action": "Delete Inbox",
      "resource": "inbox"
    },
    {
      "name": "Attach Inbox",
      "value": "attach",
      "action": "Attach Inbox",
      "resource": "inbox"
    },
    {
      "name": "Download Inbox File",
      "value": "downloadInboxFile",
      "action": "Download Inbox File",
      "resource": "inbox"
    },
    {
      "name": "Preview Inbox File",
      "value": "previewInboxFile",
      "action": "Preview Inbox File",
      "resource": "inbox"
    },
    {
      "name": "Upload Inbox",
      "value": "upload",
      "action": "Upload Inbox",
      "resource": "inbox"
    },
    {
      "name": "Create Invoice",
      "value": "create",
      "action": "Create Invoice",
      "resource": "invoice"
    },
    {
      "name": "Get Invoice",
      "value": "get",
      "action": "Get Invoice",
      "resource": "invoice"
    },
    {
      "name": "List Invoices",
      "value": "getAll",
      "action": "List Invoices",
      "resource": "invoice"
    },
    {
      "name": "Update Invoice",
      "value": "update",
      "action": "Update Invoice",
      "resource": "invoice"
    },
    {
      "name": "Delete Invoice",
      "value": "delete",
      "action": "Delete Invoice",
      "resource": "invoice"
    },
    {
      "name": "Approve Invoice",
      "value": "approve",
      "action": "Approve Invoice",
      "resource": "invoice"
    },
    {
      "name": "Attach Invoice File",
      "value": "attachInvoiceFile",
      "action": "Attach Invoice File",
      "resource": "invoice"
    },
    {
      "name": "Bulk Approve Invoices",
      "value": "bulkApprove",
      "action": "Bulk Approve Invoices",
      "resource": "invoice"
    },
    {
      "name": "Bulk Cancel Invoices",
      "value": "bulkCancel",
      "action": "Bulk Cancel Invoices",
      "resource": "invoice"
    },
    {
      "name": "Bulk Delete Invoices",
      "value": "bulkDelete",
      "action": "Bulk Delete Invoices",
      "resource": "invoice"
    },
    {
      "name": "Cancel Invoice",
      "value": "cancel",
      "action": "Cancel Invoice",
      "resource": "invoice"
    },
    {
      "name": "Create Invoice Payment",
      "value": "createInvoicePayment",
      "action": "Create Invoice Payment",
      "resource": "invoice"
    },
    {
      "name": "Get Invoice Attachment",
      "value": "getInvoiceAttachment",
      "action": "Get Invoice Attachment",
      "resource": "invoice"
    },
    {
      "name": "Get Invoice PDF",
      "value": "getInvoicePdf",
      "action": "Get Invoice PDF",
      "resource": "invoice"
    },
    {
      "name": "List Invoice Attachments",
      "value": "listInvoiceAttachments",
      "action": "List Invoice Attachments",
      "resource": "invoice"
    },
    {
      "name": "Send Invoice",
      "value": "send",
      "action": "Send Invoice",
      "resource": "invoice"
    },
    {
      "name": "Set Invoice Pipeline",
      "value": "setInvoicePipeline",
      "action": "Set Invoice Pipeline",
      "resource": "invoice"
    },
    {
      "name": "Numbering Series",
      "value": "create",
      "action": "Numbering Series",
      "resource": "numberingSeries"
    },
    {
      "name": "Numbering Series",
      "value": "update",
      "action": "Numbering Series",
      "resource": "numberingSeries"
    },
    {
      "name": "Numbering Series",
      "value": "delete",
      "action": "Numbering Series",
      "resource": "numberingSeries"
    },
    {
      "name": "Numbering Series",
      "value": "listarSeriesDeNumeracionPorTipoDeDocumento",
      "action": "Numbering Series",
      "resource": "numberingSeries"
    },
    {
      "name": "Crm",
      "value": "crm",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm10",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm11",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm12",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm2",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm3",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm4",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm5",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm6",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm7",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm8",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Crm",
      "value": "crm9",
      "action": "Crm",
      "resource": "opportunity"
    },
    {
      "name": "Create Payment",
      "value": "create",
      "action": "Create Payment",
      "resource": "payment"
    },
    {
      "name": "Get Payment",
      "value": "get",
      "action": "Get Payment",
      "resource": "payment"
    },
    {
      "name": "List Payments",
      "value": "getAll",
      "action": "List Payments",
      "resource": "payment"
    },
    {
      "name": "Update Payment",
      "value": "update",
      "action": "Update Payment",
      "resource": "payment"
    },
    {
      "name": "Delete Payment",
      "value": "delete",
      "action": "Delete Payment",
      "resource": "payment"
    },
    {
      "name": "Create Payment Method",
      "value": "create",
      "action": "Create Payment Method",
      "resource": "paymentMethod"
    },
    {
      "name": "Get Payment Method",
      "value": "get",
      "action": "Get Payment Method",
      "resource": "paymentMethod"
    },
    {
      "name": "List Payment Methods",
      "value": "getAll",
      "action": "List Payment Methods",
      "resource": "paymentMethod"
    },
    {
      "name": "Update Payment Method",
      "value": "update",
      "action": "Update Payment Method",
      "resource": "paymentMethod"
    },
    {
      "name": "Delete Payment Method",
      "value": "delete",
      "action": "Delete Payment Method",
      "resource": "paymentMethod"
    },
    {
      "name": "Salary Record",
      "value": "salaryRecord",
      "action": "Salary Record",
      "resource": "payrollRecord"
    },
    {
      "name": "Salary Record",
      "value": "salaryRecord2",
      "action": "Salary Record",
      "resource": "payrollRecord"
    },
    {
      "name": "Salary Record",
      "value": "salaryRecord3",
      "action": "Salary Record",
      "resource": "payrollRecord"
    },
    {
      "name": "Salary Record",
      "value": "salaryRecord4",
      "action": "Salary Record",
      "resource": "payrollRecord"
    },
    {
      "name": "Salary Record",
      "value": "salaryRecord5",
      "action": "Salary Record",
      "resource": "payrollRecord"
    },
    {
      "name": "Pricelist",
      "value": "pricelist",
      "action": "Pricelist",
      "resource": "priceList"
    },
    {
      "name": "Pricelist",
      "value": "pricelist2",
      "action": "Pricelist",
      "resource": "priceList"
    },
    {
      "name": "Pricelist",
      "value": "pricelist3",
      "action": "Pricelist",
      "resource": "priceList"
    },
    {
      "name": "Pricelist",
      "value": "pricelist4",
      "action": "Pricelist",
      "resource": "priceList"
    },
    {
      "name": "Pricelist",
      "value": "pricelist5",
      "action": "Pricelist",
      "resource": "priceList"
    },
    {
      "name": "Create Product",
      "value": "create",
      "action": "Create Product",
      "resource": "product"
    },
    {
      "name": "Get Product",
      "value": "get",
      "action": "Get Product",
      "resource": "product"
    },
    {
      "name": "List Products",
      "value": "getAll",
      "action": "List Products",
      "resource": "product"
    },
    {
      "name": "Update Product",
      "value": "update",
      "action": "Update Product",
      "resource": "product"
    },
    {
      "name": "Delete Product",
      "value": "delete",
      "action": "Delete Product",
      "resource": "product"
    },
    {
      "name": "Get Product Image",
      "value": "getProductImage",
      "action": "Get Product Image",
      "resource": "product"
    },
    {
      "name": "Get Product Main Image",
      "value": "getProductMainImage",
      "action": "Get Product Main Image",
      "resource": "product"
    },
    {
      "name": "Get Product Stock",
      "value": "getProductStock",
      "action": "Get Product Stock",
      "resource": "product"
    },
    {
      "name": "Get Product Stock Transit",
      "value": "getProductStockTransit",
      "action": "Get Product Stock Transit",
      "resource": "product"
    },
    {
      "name": "List Product Images",
      "value": "listProductImages",
      "action": "List Product Images",
      "resource": "product"
    },
    {
      "name": "Update Product Stock",
      "value": "updateProductStock",
      "action": "Update Product Stock",
      "resource": "product"
    },
    {
      "name": "Upload Product Image",
      "value": "uploadProductImage",
      "action": "Upload Product Image",
      "resource": "product"
    },
    {
      "name": "Create Production Order",
      "value": "create",
      "action": "Create Production Order",
      "resource": "productionOrder"
    },
    {
      "name": "Get Production Order",
      "value": "get",
      "action": "Get Production Order",
      "resource": "productionOrder"
    },
    {
      "name": "List Production Orders",
      "value": "getAll",
      "action": "List Production Orders",
      "resource": "productionOrder"
    },
    {
      "name": "Update Production Order",
      "value": "update",
      "action": "Update Production Order",
      "resource": "productionOrder"
    },
    {
      "name": "Delete Production Order",
      "value": "delete",
      "action": "Delete Production Order",
      "resource": "productionOrder"
    },
    {
      "name": "Create Proforma",
      "value": "create",
      "action": "Create Proforma",
      "resource": "proforma"
    },
    {
      "name": "Get Proforma",
      "value": "get",
      "action": "Get Proforma",
      "resource": "proforma"
    },
    {
      "name": "List Proformas",
      "value": "getAll",
      "action": "List Proformas",
      "resource": "proforma"
    },
    {
      "name": "Update Proforma",
      "value": "update",
      "action": "Update Proforma",
      "resource": "proforma"
    },
    {
      "name": "Delete Proforma",
      "value": "delete",
      "action": "Delete Proforma",
      "resource": "proforma"
    },
    {
      "name": "Approve Proforma",
      "value": "approve",
      "action": "Approve Proforma",
      "resource": "proforma"
    },
    {
      "name": "Attach Proforma File",
      "value": "attachProformaFile",
      "action": "Attach Proforma File",
      "resource": "proforma"
    },
    {
      "name": "Get Proforma Attachment",
      "value": "getProformaAttachment",
      "action": "Get Proforma Attachment",
      "resource": "proforma"
    },
    {
      "name": "Get Proforma PDF",
      "value": "getProformaPdf",
      "action": "Get Proforma PDF",
      "resource": "proforma"
    },
    {
      "name": "List Proforma Attachments",
      "value": "listProformaAttachments",
      "action": "List Proforma Attachments",
      "resource": "proforma"
    },
    {
      "name": "Send Proforma",
      "value": "send",
      "action": "Send Proforma",
      "resource": "proforma"
    },
    {
      "name": "Set Proforma Pipeline",
      "value": "setProformaPipeline",
      "action": "Set Proforma Pipeline",
      "resource": "proforma"
    },
    {
      "name": "Projects",
      "value": "create",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "get",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "getAll",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "update",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "delete",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "get2",
      "action": "Projects",
      "resource": "project"
    },
    {
      "name": "Projects",
      "value": "projects",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Projects",
      "value": "projects2",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Projects",
      "value": "projects3",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Projects",
      "value": "projects4",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Projects",
      "value": "projects5",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Projects",
      "value": "projects6",
      "action": "Projects",
      "resource": "projectTimeTracking"
    },
    {
      "name": "Create Purchase",
      "value": "create",
      "action": "Create Purchase",
      "resource": "purchase"
    },
    {
      "name": "Get Purchase",
      "value": "get",
      "action": "Get Purchase",
      "resource": "purchase"
    },
    {
      "name": "List Purchases",
      "value": "getAll",
      "action": "List Purchases",
      "resource": "purchase"
    },
    {
      "name": "Update Purchase",
      "value": "update",
      "action": "Update Purchase",
      "resource": "purchase"
    },
    {
      "name": "Delete Purchase",
      "value": "delete",
      "action": "Delete Purchase",
      "resource": "purchase"
    },
    {
      "name": "Approve Purchase",
      "value": "approve",
      "action": "Approve Purchase",
      "resource": "purchase"
    },
    {
      "name": "Attach Purchase File",
      "value": "attachPurchaseFile",
      "action": "Attach Purchase File",
      "resource": "purchase"
    },
    {
      "name": "Create Purchase Payment",
      "value": "createPurchasePayment",
      "action": "Create Purchase Payment",
      "resource": "purchase"
    },
    {
      "name": "Create Purchase Refund",
      "value": "createPurchaseRefund",
      "action": "Create Purchase Refund",
      "resource": "purchase"
    },
    {
      "name": "Get Purchase Attachment",
      "value": "getPurchaseAttachment",
      "action": "Get Purchase Attachment",
      "resource": "purchase"
    },
    {
      "name": "List Purchase Attachments",
      "value": "listPurchaseAttachments",
      "action": "List Purchase Attachments",
      "resource": "purchase"
    },
    {
      "name": "Set Purchase Pipeline",
      "value": "setPurchasePipeline",
      "action": "Set Purchase Pipeline",
      "resource": "purchase"
    },
    {
      "name": "Approve Purchase Shipment",
      "value": "approvePurchaseShipment",
      "action": "Approve Purchase Shipment",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "Create Purchase Shipment",
      "value": "createPurchaseShipment",
      "action": "Create Purchase Shipment",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "Delete Purchase Shipment",
      "value": "deletePurchaseShipment",
      "action": "Delete Purchase Shipment",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "Get Purchase Shipment",
      "value": "getPurchaseShipment",
      "action": "Get Purchase Shipment",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "List Purchase Shipments",
      "value": "listPurchaseShipments",
      "action": "List Purchase Shipments",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "Update Purchase Shipment",
      "value": "updatePurchaseShipment",
      "action": "Update Purchase Shipment",
      "resource": "purchaseDeliveryNote"
    },
    {
      "name": "Create Purchase Order",
      "value": "create",
      "action": "Create Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Get Purchase Order",
      "value": "get",
      "action": "Get Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "List Purchase Orders",
      "value": "getAll",
      "action": "List Purchase Orders",
      "resource": "purchaseOrder"
    },
    {
      "name": "Update Purchase Order",
      "value": "update",
      "action": "Update Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Delete Purchase Order",
      "value": "delete",
      "action": "Delete Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Approve Purchase Order",
      "value": "approve",
      "action": "Approve Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Attach Purchase Order File",
      "value": "attachPurchaseOrderFile",
      "action": "Attach Purchase Order File",
      "resource": "purchaseOrder"
    },
    {
      "name": "Get Purchase Order Attachment",
      "value": "getPurchaseOrderAttachment",
      "action": "Get Purchase Order Attachment",
      "resource": "purchaseOrder"
    },
    {
      "name": "Get Purchase Order PDF",
      "value": "getPurchaseOrderPdf",
      "action": "Get Purchase Order PDF",
      "resource": "purchaseOrder"
    },
    {
      "name": "Get Purchase Order Received Items",
      "value": "getPurchaseOrderReceivedItems",
      "action": "Get Purchase Order Received Items",
      "resource": "purchaseOrder"
    },
    {
      "name": "List Purchase Order Attachments",
      "value": "listPurchaseOrderAttachments",
      "action": "List Purchase Order Attachments",
      "resource": "purchaseOrder"
    },
    {
      "name": "Receive Purchase Order",
      "value": "receive",
      "action": "Receive Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Send Purchase Order",
      "value": "send",
      "action": "Send Purchase Order",
      "resource": "purchaseOrder"
    },
    {
      "name": "Set Purchase Order Pipeline",
      "value": "setPurchaseOrderPipeline",
      "action": "Set Purchase Order Pipeline",
      "resource": "purchaseOrder"
    },
    {
      "name": "Create Invoice Recurring",
      "value": "createInvoiceRecurring",
      "action": "Create Invoice Recurring",
      "resource": "recurringInvoice"
    },
    {
      "name": "Delete Invoice Recurring",
      "value": "deleteInvoiceRecurring",
      "action": "Delete Invoice Recurring",
      "resource": "recurringInvoice"
    },
    {
      "name": "Get Invoice Recurring",
      "value": "getInvoiceRecurring",
      "action": "Get Invoice Recurring",
      "resource": "recurringInvoice"
    },
    {
      "name": "Get Recurring Schedule",
      "value": "getRecurringSchedule",
      "action": "Get Recurring Schedule",
      "resource": "recurringInvoice"
    },
    {
      "name": "List Invoice Recurrings",
      "value": "listInvoiceRecurrings",
      "action": "List Invoice Recurrings",
      "resource": "recurringInvoice"
    },
    {
      "name": "Skip Recurring Occurrence",
      "value": "skipRecurringOccurrence",
      "action": "Skip Recurring Occurrence",
      "resource": "recurringInvoice"
    },
    {
      "name": "Update Invoice Recurring",
      "value": "updateInvoiceRecurring",
      "action": "Update Invoice Recurring",
      "resource": "recurringInvoice"
    },
    {
      "name": "Get Remittance",
      "value": "get",
      "action": "Get Remittance",
      "resource": "remittance"
    },
    {
      "name": "List Remittances",
      "value": "getAll",
      "action": "List Remittances",
      "resource": "remittance"
    },
    {
      "name": "Sales Channel",
      "value": "create",
      "action": "Sales Channel",
      "resource": "salesChannel"
    },
    {
      "name": "Sales Channel",
      "value": "get",
      "action": "Sales Channel",
      "resource": "salesChannel"
    },
    {
      "name": "Sales Channel",
      "value": "getAll",
      "action": "Sales Channel",
      "resource": "salesChannel"
    },
    {
      "name": "Sales Channel",
      "value": "update",
      "action": "Sales Channel",
      "resource": "salesChannel"
    },
    {
      "name": "Sales Channel",
      "value": "delete",
      "action": "Sales Channel",
      "resource": "salesChannel"
    },
    {
      "name": "Approve Receiptnote",
      "value": "approveReceiptnote",
      "action": "Approve Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Attach Receiptnote File",
      "value": "attachReceiptnoteFile",
      "action": "Attach Receiptnote File",
      "resource": "salesCreditNote"
    },
    {
      "name": "Create Receiptnote",
      "value": "createReceiptnote",
      "action": "Create Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Create Receiptnote Payment",
      "value": "createReceiptnotePayment",
      "action": "Create Receiptnote Payment",
      "resource": "salesCreditNote"
    },
    {
      "name": "Delete Receiptnote",
      "value": "deleteReceiptnote",
      "action": "Delete Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Get Receiptnote",
      "value": "getReceiptnote",
      "action": "Get Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Get Receiptnote Attachment",
      "value": "getReceiptnoteAttachment",
      "action": "Get Receiptnote Attachment",
      "resource": "salesCreditNote"
    },
    {
      "name": "Get Receiptnote PDF",
      "value": "getReceiptnotePdf",
      "action": "Get Receiptnote PDF",
      "resource": "salesCreditNote"
    },
    {
      "name": "List Receiptnote Attachments",
      "value": "listReceiptnoteAttachments",
      "action": "List Receiptnote Attachments",
      "resource": "salesCreditNote"
    },
    {
      "name": "List Receiptnotes",
      "value": "listReceiptnotes",
      "action": "List Receiptnotes",
      "resource": "salesCreditNote"
    },
    {
      "name": "Send Receiptnote",
      "value": "sendReceiptnote",
      "action": "Send Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Set Receiptnote Pipeline",
      "value": "setReceiptnotePipeline",
      "action": "Set Receiptnote Pipeline",
      "resource": "salesCreditNote"
    },
    {
      "name": "Update Receiptnote",
      "value": "updateReceiptnote",
      "action": "Update Receiptnote",
      "resource": "salesCreditNote"
    },
    {
      "name": "Create Sales Order",
      "value": "create",
      "action": "Create Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Get Sales Order",
      "value": "get",
      "action": "Get Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "List Sales Orders",
      "value": "getAll",
      "action": "List Sales Orders",
      "resource": "salesOrder"
    },
    {
      "name": "Update Sales Order",
      "value": "update",
      "action": "Update Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Delete Sales Order",
      "value": "delete",
      "action": "Delete Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Approve Sales Order",
      "value": "approve",
      "action": "Approve Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Attach Sales Order File",
      "value": "attachSalesOrderFile",
      "action": "Attach Sales Order File",
      "resource": "salesOrder"
    },
    {
      "name": "Get Sales Order Attachment",
      "value": "getSalesOrderAttachment",
      "action": "Get Sales Order Attachment",
      "resource": "salesOrder"
    },
    {
      "name": "Get Sales Order PDF",
      "value": "getSalesOrderPdf",
      "action": "Get Sales Order PDF",
      "resource": "salesOrder"
    },
    {
      "name": "Get Sales Order Shipped Items",
      "value": "getSalesOrderShippedItems",
      "action": "Get Sales Order Shipped Items",
      "resource": "salesOrder"
    },
    {
      "name": "List Sales Order Attachments",
      "value": "listSalesOrderAttachments",
      "action": "List Sales Order Attachments",
      "resource": "salesOrder"
    },
    {
      "name": "Send Sales Order",
      "value": "send",
      "action": "Send Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Set Sales Order Pipeline",
      "value": "setSalesOrderPipeline",
      "action": "Set Sales Order Pipeline",
      "resource": "salesOrder"
    },
    {
      "name": "Ship Sales Order",
      "value": "ship",
      "action": "Ship Sales Order",
      "resource": "salesOrder"
    },
    {
      "name": "Ship Sales Order By Lines",
      "value": "shipSalesOrderByLines",
      "action": "Ship Sales Order By Lines",
      "resource": "salesOrder"
    },
    {
      "name": "Update Sales Order Tracking",
      "value": "updateSalesOrderTracking",
      "action": "Update Sales Order Tracking",
      "resource": "salesOrder"
    },
    {
      "name": "Create Sales Receipt",
      "value": "create",
      "action": "Create Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "Get Sales Receipt",
      "value": "get",
      "action": "Get Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "List Sales Receipts",
      "value": "getAll",
      "action": "List Sales Receipts",
      "resource": "salesReceipt"
    },
    {
      "name": "Update Sales Receipt",
      "value": "update",
      "action": "Update Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "Delete Sales Receipt",
      "value": "delete",
      "action": "Delete Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "Approve Sales Receipt",
      "value": "approve",
      "action": "Approve Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "Attach Sales Receipt File",
      "value": "attachSalesReceiptFile",
      "action": "Attach Sales Receipt File",
      "resource": "salesReceipt"
    },
    {
      "name": "Create Sales Receipt Payment",
      "value": "createSalesReceiptPayment",
      "action": "Create Sales Receipt Payment",
      "resource": "salesReceipt"
    },
    {
      "name": "Get Sales Receipt Attachment",
      "value": "getSalesReceiptAttachment",
      "action": "Get Sales Receipt Attachment",
      "resource": "salesReceipt"
    },
    {
      "name": "Get Sales Receipt PDF",
      "value": "getSalesReceiptPdf",
      "action": "Get Sales Receipt PDF",
      "resource": "salesReceipt"
    },
    {
      "name": "List Sales Receipt Attachments",
      "value": "listSalesReceiptAttachments",
      "action": "List Sales Receipt Attachments",
      "resource": "salesReceipt"
    },
    {
      "name": "Send Sales Receipt",
      "value": "send",
      "action": "Send Sales Receipt",
      "resource": "salesReceipt"
    },
    {
      "name": "Set Sales Receipt Pipeline",
      "value": "setSalesReceiptPipeline",
      "action": "Set Sales Receipt Pipeline",
      "resource": "salesReceipt"
    },
    {
      "name": "Create Service",
      "value": "create",
      "action": "Create Service",
      "resource": "service"
    },
    {
      "name": "Get Service",
      "value": "get",
      "action": "Get Service",
      "resource": "service"
    },
    {
      "name": "List Services",
      "value": "getAll",
      "action": "List Services",
      "resource": "service"
    },
    {
      "name": "Update Service",
      "value": "update",
      "action": "Update Service",
      "resource": "service"
    },
    {
      "name": "Delete Service",
      "value": "delete",
      "action": "Delete Service",
      "resource": "service"
    },
    {
      "name": "Create Tag",
      "value": "create",
      "action": "Create Tag",
      "resource": "tag"
    },
    {
      "name": "List Tags",
      "value": "getAll",
      "action": "List Tags",
      "resource": "tag"
    },
    {
      "name": "Delete Tag",
      "value": "delete",
      "action": "Delete Tag",
      "resource": "tag"
    },
    {
      "name": "Projects",
      "value": "projects",
      "action": "Projects",
      "resource": "task"
    },
    {
      "name": "Projects",
      "value": "projects2",
      "action": "Projects",
      "resource": "task"
    },
    {
      "name": "Projects",
      "value": "projects3",
      "action": "Projects",
      "resource": "task"
    },
    {
      "name": "Projects",
      "value": "projects4",
      "action": "Projects",
      "resource": "task"
    },
    {
      "name": "Projects",
      "value": "projects5",
      "action": "Projects",
      "resource": "task"
    },
    {
      "name": "List Taxes",
      "value": "getAll",
      "action": "List Taxes",
      "resource": "tax"
    },
    {
      "name": "Create Warehouse",
      "value": "create",
      "action": "Create Warehouse",
      "resource": "warehouse"
    },
    {
      "name": "Get Warehouse",
      "value": "get",
      "action": "Get Warehouse",
      "resource": "warehouse"
    },
    {
      "name": "List Warehouses",
      "value": "getAll",
      "action": "List Warehouses",
      "resource": "warehouse"
    },
    {
      "name": "Update Warehouse",
      "value": "update",
      "action": "Update Warehouse",
      "resource": "warehouse"
    },
    {
      "name": "Delete Warehouse",
      "value": "delete",
      "action": "Delete Warehouse",
      "resource": "warehouse"
    },
    {
      "name": "Get Warehouse Stock",
      "value": "getWarehouseStock",
      "action": "Get Warehouse Stock",
      "resource": "warehouse"
    }
  ]

npm_readme:
  # @francodesystems-npm/n8n-nodes-holded

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

  > n8n community node for [Holded](https://www.holded.com) — the Spanish ERP / invoicing platform used by 100,000+ SMEs.

  This is an [n8n](https://n8n.io) community node that lets you use **Holded** in your n8n workflows. Built and maintained by [Francodesystems](https://francodesystems.com), Spanish integrations specialists.

  📖 **Project landing**: [francodesystems.com/open-source/n8n-nodes-holded](https://francodesystems.com/open-source/n8n-nodes-holded) — coverage matrix, use cases, technical details.

  > **Disclaimer**: This is an unofficial community integration. "Holded" and the Holded logo are trademarks of Holded Technologies S.L. and are used here under nominative fair use to identify the third-party service this node integrates with. This package is not affiliated with, endorsed by, or sponsored by Holded.

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

  ## Installation

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

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

  ```
  @francodesystems-npm/n8n-nodes-holded
  ```

  ## Operations

  Targets the **Holded API v2** (current). Every v2 endpoint is exposed: **43 resources, 327 operations**. The Contact resource is hand-tuned for a polished UX (nested address, defaults collection, custom fields as JSON, multipart attachment upload/download); the rest are driven by the catalog scraped from the official Holded developers portal — each operation exposes its path parameters, query filters and request body fields as native n8n inputs.

  | Area | Resources |
  |---|---|
  | **Sales** | Invoice, Sales Order, Sales Receipt, Estimate, Proforma, Credit Note, Sales Credit Note, Delivery Note, Recurring Invoice, Billing Forecast, Numbering Series |
  | **Purchases** | Purchase, Purchase Order, Purchase Delivery Note |
  | **Catalog** | Product, Service, Price List, Warehouse, Production Order |
  | **CRM** | Contact, Contact Group, Opportunity, Funnel, Tag, Event, Booking |
  | **Accounting** | Accounting, Payment, Payment Method, Bank Account, Expense Account, Tax, Remittance |
  | **Projects & Team** | Project, Project Time Tracking, Task, Employee, Employee Time Tracking, Payroll Record |
  | **Other** | Sales Channel, Inbox, Document, Usage |

  For complex bodies (invoice lines, custom field arrays, etc.) the corresponding field expects JSON; the dispatcher parses it before sending. Pagination on collection GETs uses Holded's cursor (`limit` + `has_more`) and the node automatically loops when **Return All** is enabled.

  > **Looking for v1?** Up to v0.3.x this package shipped both v1 and v2 side by side. Starting from v0.4.0 the focus is v2 only (Holded recommends v2 for all new integrations). If you need v1 endpoints, pin `0.3.8` or open an [issue](https://github.com/francodesystems/n8n-nodes-holded/issues).

  ## Trigger

  The **Holded Trigger** node starts a workflow when Holded sends a webhook — covering all **18 objects / 58 events** (`invoice.create`, `contact.update`, `stock.update`, `purchase.approve`, …).

  Holded webhooks are configured **manually** in the Holded dashboard (there is no API to register them), so setup is two steps:

  1. Add a **Holded Trigger** node and copy its **Production URL**.
  2. In Holded → **Settings → Webhooks**, paste the URL and subscribe to the events you want.

  Options:

  - **Events** — optionally restrict which events start the workflow (leave empty for all).
  - **Signature verification** — attach a **Holded Webhook** credential with the signing secret shown in Holded. When set, the node verifies the `x-holded-webhook-signature` (HMAC-SHA256) header and rejects tampered or unsigned requests with `401`.
  - **Payload Only** — output just the raw event object, or (default) wrap it with `event`, `eventId`, `accountId`, `date` and `version` metadata.

  `.approve` events exist only for Invoice, Credit Note, Sales Receipt, Purchase, Purchase Refund and Receipt Note; Stock only emits `stock.update`.

  ## Credentials

  You need a Holded API key. Generate one in Holded → **Settings → API → Generate new key**.

  | Credential | Auth scheme | Notes |
  |---|---|---|
  | **Holded V2 API** | `Authorization: Bearer <api_key>` | Tested against `GET /api/v2/contacts?limit=1` |
  | **Holded Webhook** | Signing secret (HMAC-SHA256) | Optional. Only used by the Holded Trigger to verify webhook signatures |

  **v2 keys have per-scope permissions** (e.g. `contacts:contacts.read`, `contacts:contacts.write`). If a key is missing the scope a given endpoint needs, you get a `403 Forbidden`. Pick the minimum set of scopes when generating the key.

  ## Compatibility

  - Requires n8n version **1.0** or later.
  - Node.js **20.15+**.

  ## Usage

  ### Sync new Shopify orders to Holded contacts

  ```
  Shopify Trigger (order.created)
    → Holded (Contact / Create)
  ```

  ### Daily report of new leads to Slack

  ```
  Schedule Trigger (daily)
    → Holded (Contact / Get Many, filter: lead)
    → Slack (Send message)
  ```

  ### Update contact when paid in Stripe

  ```
  Stripe Trigger (charge.succeeded)
    → Holded (Contact / Update, set tag: "paid")
  ```

  ## API

  This node targets the **Holded REST API v2**: Bearer auth (`Authorization: Bearer <api_key>`), cursor pagination (`cursor`+`limit`+`has_more`), RFC 7807 structured errors, scoped permissions, and a consolidated base URL `/api/v2/<resource>`. Holded's v1 (legacy) is no longer covered from v0.4.0 onwards.

  Reference: https://www.holded.com/es/desarrolladores

  ## Releasing (maintainers)

  This package publishes to npm via a GitHub Actions workflow that signs every release with an npm provenance attestation, as required by n8n's verified community node policy (effective May 2026). One-time setup, then every release is a single command.

  ### One-time setup

  Pick one of the two npm authentication methods. **Trusted Publisher** is recommended because no long-lived secret ever lives in this repository.

  **Option A — Trusted Publisher (OIDC, recommended):**
  1. Log in to npmjs.com → open the package settings for `@francodesystems-npm/n8n-nodes-holded`.
  2. Under **Publish access → Trusted Publishers**, click **Add a publisher**.
  3. Select **GitHub Actions** and enter:
     - Repository owner: `francodesystems`
     - Repository name: `n8n-nodes-holded`
     - Workflow name: `publish.yml`
     - Environment: leave blank
  4. Leave `NPM_TOKEN` unset in this repo's GitHub secrets — OIDC handles auth.

  **Option B — npm Automation Token (fallback):**
  1. On npmjs.com → Access Tokens → **Generate New Token** → Granular Access Token. Scope to this package, "Read and write".
  2. In GitHub → Settings → Secrets and variables → Actions → **New secret** named `NPM_TOKEN`.

  ### Cutting a release

  ```bash
  npm run release
  ```

  `@n8n/node-cli` will lint, build, prompt for the version bump, update the changelog, commit, tag, and push. The push triggers `.github/workflows/publish.yml`, which:

  1. Checks out the tag.
  2. Runs `npm ci` with the lockfile.
  3. Runs `npm run release` in CI mode, which publishes to npm with `--provenance`.

  Provenance attestations are visible on the [npm package page](https://www.npmjs.com/package/@francodesystems-npm/n8n-nodes-holded) and let anyone cryptographically verify the package was built by this exact workflow from this exact repo and commit.

  ### Verified community node submission

  To get the "Verified" badge in n8n's nodes panel (so users can install the package directly without enabling community nodes manually), submit through the [n8n Creator Portal](https://creators.n8n.io) after at least one published release with provenance.

  ## Resources

  - [Project landing on francodesystems.com](https://francodesystems.com/open-source/n8n-nodes-holded) — coverage matrix, use cases, FAQ
  - [Holded API v2 — Francodesystems analysis](https://francodesystems.com/holded-api-v2) — v1→v2 migration guide, MCP, technical changes
  - [Holded API v2 documentation (official)](https://www.holded.com/es/desarrolladores)
  - [Francodesystems Holded integrations catalog](https://francodesystems.com/integraciones)
  - [Francodesystems open source contributions](https://francodesystems.com/open-source)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [n8n verified node guidelines](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/)

  ## About

  Built and maintained by [Francodesystems](https://francodesystems.com), specialists in Holded integrations for Spanish SMEs. We connect Holded with Shopify, WooCommerce, Stripe, HubSpot, Pipedrive and any system with an API.

  If you need help integrating Holded into a complex workflow or want a setup done for you, [get in touch](https://francodesystems.com/contacto).

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"Integrates n8n with the Holded ERP / invoicing platform using the Holded API v2. It lets workflows create, read, update, and manage data across sales, CRM, accounting, purchases, projects, and other Holded resources.","capabilities":["Accesses Holded API v2 endpoints across 42 resources and 323 operations","Create, get, update, delete, and list records for contacts, invoices, sales orders, products, and more","Supports CRM operations such as contacts, contact groups, opportunities, funnels, tags, events, and bookings","Supports sales documents such as invoices, sales orders, sales receipts, estimates, proformas, credit notes, delivery notes, recurring invoices, billing forecasts, and numbering series","Supports purchase and catalog resources such as purchases, purchase orders, products, services, price lists, warehouses, and production orders","Supports accounting, payments, bank accounts, expenses, taxes, and remittances","Supports projects, tasks, employees, time tracking, and payroll records","Handles nested address fields, defaults collections, custom fields as JSON, and multipart attachment upload/download for contacts","Supports JSON parsing for complex request bodies like invoice lines and custom field arrays","Automatically paginates collection GET requests when Return All is enabled"],"authentication":"API key required; uses Bearer token auth via `Authorization: Bearer <api_key>` with Holded V2 API credentials and scoped permissions.","commonUseCases":["Sync Shopify orders or other e-commerce events to Holded contacts or sales records","Fetch new leads or contacts from Holded and send them to Slack or other tools","Update Holded contacts when payment events occur in Stripe or another payment platform","Automate invoice, sales order, purchase, and accounting workflows in Holded","Manage products, services, and operational data from external workflows"],"limitations":["This package focuses on Holded API v2 only from version 0.4.0 onward","If v1 endpoints are needed, users must pin version 0.3.8 or earlier","Missing API scopes on the key can cause 403 Forbidden errors"],"relatedNodes":["Shopify Trigger","Slack","Stripe Trigger"]}


