# nodes

node_type: @nalpeiron/n8n-nodes-nalpeiron.nalpeironZengainTrigger
package_name: @nalpeiron/n8n-nodes-nalpeiron
display_name: Nalpeiron Zengain Trigger
description: Handle webhooks from Nalpeiron Zengain
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: tszturmaj-nalpeiron
author_github_url: https://github.com/Nalpeiron/integrations-n8n.git
npm_package_name: @nalpeiron/n8n-nodes-nalpeiron
npm_version: 1.1.1
community_fetched_at: 2026-07-14T14:40:34.091Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
[cell repeats an earlier one in this file: 8241 characters]

ai_documentation_summary:
  {"purpose":"Handles webhooks from Nalpeiron Zengain to listen for real-time customer lifecycle events and integrates with Zentitle2 for license management automation.","capabilities":["Listen for customer lifecycle changes (creation and updates)","Trigger workflows on revenue optimization events","Receive proactive customer success signals","Integrate with Zentitle2 license operations","Support for real-time notifications from Growth Platform"],"authentication":"OAuth2","commonUseCases":["Revenue optimization by identifying upsell opportunities","Proactive customer success engagement based on lifecycle insights","Churn prevention through automated health signal workflows","Syncing customer behavior data to external CRM systems"],"limitations":[],"relatedNodes":["Nalpeiron Zengain","Nalpeiron Zentitle2","Nalpeiron Zentitle2 Trigger"]}


node_type: n8n-nodes-ldxhub.ldxHub
package_name: n8n-nodes-ldxhub
display_name: LDXhub
description: Work with the LDXhub AI-powered document processing platform
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: hidekimori
author_github_url: https://github.com/ldxhub-io/
npm_package_name: n8n-nodes-ldxhub
npm_version: 0.10.0
community_fetched_at: 2026-07-14T14:40:34.092Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "refineLoop",
      "options": [
        {
          "name": "AnalyzeDoc",
          "value": "analyzeDoc"
        },
        {
          "name": "CastDoc",
          "value": "castDoc"
        },
        {
          "name": "ExtractDoc",
          "value": "extractDoc"
        },
        {
          "name": "RefineLoop",
          "value": "refineLoop"
        },
        {
          "name": "RenderOCR",
          "value": "renderOcr"
        },
        {
          "name": "StructFlow",
          "value": "structFlow"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Analysis Job",
          "value": "runJob",
          "action": "Run an analysis job",
          "description": "Upload a PDF or image and extract structured JSON with a vision AI model"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "analyzeDoc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Conversion Job",
          "value": "runJob",
          "action": "Run a conversion job",
          "description": "Convert a text-based PDF to Word/Excel/PowerPoint without OCR"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "castDoc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Conversion Job",
          "value": "runJob",
          "action": "Run a conversion job",
          "description": "Extract plain text or JSONL from PDF, DOCX, XLSX, or PPTX (no AI, no OCR)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "extractDoc"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Refinement Job",
          "value": "runJob",
          "action": "Run a refinement job",
          "description": "Upload an XLIFF file, run a RefineLoop job, and return the refined file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "refineLoop"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Conversion Job",
          "value": "runJob",
          "action": "Run a conversion job",
          "description": "Upload a PDF or image and convert it to Word/Excel/PowerPoint with OCR"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "renderOcr"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "runJob",
      "options": [
        {
          "name": "Run Extraction Job",
          "value": "runJob",
          "action": "Run an extraction job",
          "description": "Extract structured JSON from unstructured text using an AI model"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "structFlow"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Run Analysis Job",
      "value": "runJob",
      "action": "Run an analysis job",
      "description": "Upload a PDF or image and extract structured JSON with a vision AI model",
      "resource": "analyzeDoc"
    },
    {
      "name": "Run Conversion Job",
      "value": "runJob",
      "action": "Run a conversion job",
      "description": "Convert a text-based PDF to Word/Excel/PowerPoint without OCR",
      "resource": "castDoc"
    },
    {
      "name": "Run Conversion Job",
      "value": "runJob",
      "action": "Run a conversion job",
      "description": "Extract plain text or JSONL from PDF, DOCX, XLSX, or PPTX (no AI, no OCR)",
      "resource": "extractDoc"
    },
    {
      "name": "Run Refinement Job",
      "value": "runJob",
      "action": "Run a refinement job",
      "description": "Upload an XLIFF file, run a RefineLoop job, and return the refined file",
      "resource": "refineLoop"
    },
    {
      "name": "Run Conversion Job",
      "value": "runJob",
      "action": "Run a conversion job",
      "description": "Upload a PDF or image and convert it to Word/Excel/PowerPoint with OCR",
      "resource": "renderOcr"
    },
    {
      "name": "Run Extraction Job",
      "value": "runJob",
      "action": "Run an extraction job",
      "description": "Extract structured JSON from unstructured text using an AI model",
      "resource": "structFlow"
    }
  ]

npm_readme:
  # n8n-nodes-ldxhub

  [![npm version](https://img.shields.io/npm/v/n8n-nodes-ldxhub.svg)](https://www.npmjs.com/package/n8n-nodes-ldxhub)
  [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-ldxhub.svg)](https://www.npmjs.com/package/n8n-nodes-ldxhub)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![Node.js >=20.15](https://img.shields.io/badge/Node.js-%3E%3D20.15-brightgreen.svg)](https://nodejs.org)

  > ✅ **Free to try** — 25,000 credits/month, no credit card required  
  > ✅ **One key for everything** — OpenAI, Anthropic, Google, AWS, Azure, xAI  
  > ✅ **30-second sign-up** — GitHub, Google, or email; your API key is shown immediately

  n8n community node for **LDX hub** — AI-powered document processing platform: structured data extraction (StructFlow), XLIFF translation refinement (RefineLoop), layout-preserving OCR (RenderOCR), text-based PDF conversion (CastDoc), and plain-text/JSONL extraction (ExtractDoc).

  ## Table of Contents

  - [Features](#features)
  - [Quick Start](#quick-start)
  - [Installation](#installation)
  - [Prerequisites](#prerequisites)
  - [Credentials Setup](#credentials-setup)
  - [Usage](#usage)
    - [StructFlow](#structflow--extract-structured-data-from-text)
    - [RefineLoop](#refineloop--xliff-translation-refinement)
    - [RenderOCR](#renderocr--pdfimage-to-office)
    - [CastDoc](#castdoc--text-based-pdf-to-office-no-ocr)
    - [ExtractDoc](#extractdoc--plain-text-or-jsonl-extraction-no-ai-no-ocr)
  - [AI Agent Integration](#ai-agent-integration)
  - [Polling Settings](#polling-settings)
  - [Troubleshooting](#troubleshooting)
  - [Support](#support)
  - [Changelog](#changelog)
  - [License](#license)

  ## Quick Start

  After [installation](#installation):

  1. Get a free API key at [gw.portal.ldxhub.io](https://gw.portal.ldxhub.io) (no credit card)
  2. Import [`all-services-demo.json`](examples/all-services-demo.json)
  3. Create an **LDXhub API** credential with both fields set to expressions:
     - **Base URL**: `={{ $('On form submission').item.json.host }}`
     - **API Key**: `={{ $('On form submission').item.json.api_key }}`
  4. Select this credential in each LDXhub node
  5. Run the workflow — enter your API key (and optionally a custom host) in the form

  All 5 services (StructFlow / RefineLoop / RenderOCR / CastDoc / ExtractDoc) accessible from a single Form Trigger. **The API key is consumed per execution, never stored in n8n.**

  For traditional single-service usage with a static credential, see [Usage](#usage) below.

  ## Features

  - **StructFlow**: Extract structured JSON from unstructured text using AI models (medical records, customer feedback, legal documents, and more)
  - **RefineLoop**: Iteratively improve XLIFF translation quality using frontier AI models (Google Gemini, Anthropic Claude, OpenAI GPT, and more)
  - **RenderOCR**: Convert PDFs and images to Word/Excel/PowerPoint with layout-preserving OCR (via industry-leading OCR engines)
  - **CastDoc**: Convert text-based PDFs to Word/Excel/PowerPoint without OCR (high-fidelity layout preservation for digital-born documents)
  - **ExtractDoc**: Extract plain text or JSONL from PDF/DOCX/XLSX/PPTX using the `ki/extract` engine (no AI, no OCR, free tier) — ideal as a preprocessing step before StructFlow
  - **One credential for all AI providers**: OpenAI, Anthropic Claude, Google Gemini, AWS Nova, Azure OpenAI, xAI Grok — accessed through a single LDX hub API key
  - HTTP long-polling architecture — compatible with n8n Cloud execution model
  - Proven at scale: tested with 1.19M-character academic papers

  ## Installation

  In your n8n instance:

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

  ## Prerequisites

  - An [LDX hub](https://ldxlab.io/ldxhub) account
  - n8n version supporting community nodes (v1.x or later)
  - A paid or free tier subscription (free tier includes 25,000 credits/month, suitable for evaluation)

  ## Credentials Setup

  1. Sign up at the [LDX hub DevPortal](https://gw.portal.ldxhub.io) — **free, no credit card**. Use GitHub, Google, or email; your API key is shown immediately after sign-up.
  2. Choose a subscription plan — start with **Free** (25,000 credits/month) to evaluate, or pick **Starter** / **Standard** / **Pro** for production. See [pricing](https://gw.portal.ldxhub.io/pricing) for details.
  3. Click your account email in the top-right of the DevPortal, then select **My Subscriptions**
  4. Under **API Keys**, copy the **Current Key**
  5. In n8n, create a new **LDXhub API** credential:
     - **Base URL**: `https://gw.ldxhub.io` (default; leave as-is for production)
     - **API Key**: paste the key from step 4
  6. Click **Save**

  If API calls fail with 401 Unauthorized, verify:
  - The API key is active (shown with a green dot in the DevPortal)
  - The Base URL has no trailing slash
  - Your network allows outbound HTTPS to `gw.ldxhub.io`

  ### Dynamic API Key (Advanced)

  For workflows where the API key should be provided dynamically per execution (e.g., from a Form Trigger, an upstream node, or an AI agent context), set the **API Key** field of your LDXhub API credential to an n8n expression instead of a static value:

  1. Create a new **LDXhub API** credential
  2. Switch the **API Key** field to **Expression** mode
  3. Enter an expression that resolves at execution time, e.g., `{{ $json.api_key }}`
  4. Save the credential

  The Model and Engine dropdowns load from LDX hub's public metadata endpoints without authentication, so the node UI works normally during workflow design even when the API Key is an unresolved expression.

  **Example**: [Dynamic credentials workflow](examples/structflow-dynamic-inline-demo.json)

  ## Usage

  > 💡 **Examples**: All ready-to-use workflows are in [`examples/`](examples/). Each individual demo requires a **LDXhub API** credential and a placeholder input file path to be updated.

  1. Add **LDXhub API** credentials (see [Credentials Setup](#credentials-setup))
  2. Add the **LDXhub** node to your workflow
  3. Select a resource and operation (see below)

  ### StructFlow — extract structured data from text

  1. Resource: **StructFlow** → Operation: **Run Extraction Job**
  2. Configure Model, System Prompt, and Example Output
  3. Choose Input Mode:
     - **Inline Inputs**: Provide ID + Data pairs directly in the workflow (good for small batches, quick prototyping)
     - **Binary File**: Provide a JSONL file as binary input (good for large batches, or as part of an ExtractDoc → StructFlow pipeline)

  **Examples**: [Inline mode](examples/structflow-inline-demo.json) · [Binary mode](examples/structflow-binary-demo.json) · [Dynamic API key](examples/structflow-dynamic-inline-demo.json)

  ### RefineLoop — XLIFF translation refinement

  1. Resource: **RefineLoop** → Operation: **Run Refinement Job**
  2. Provide an XLIFF file via binary input
  3. Choose an AI model and set max revisions

  **Example**: [RefineLoop workflow](examples/refineloop-demo.json)

  ### RenderOCR — PDF/image to Office

  1. Resource: **RenderOCR** → Operation: **Run Conversion Job**
  2. Provide a PDF or image file via binary input
  3. Choose an OCR engine, target language, and output format (docx/xlsx/pptx)

  **Example**: [RenderOCR workflow](examples/renderocr-demo.json)

  ### CastDoc — text-based PDF to Office (no OCR)

  1. Resource: **CastDoc** → Operation: **Run Conversion Job**
  2. Provide a PDF file via binary input
  3. Choose an engine and output format (docx/xlsx/pptx)

  **Example**: [CastDoc workflow](examples/castdoc-demo.json)

  ### ExtractDoc — plain text or JSONL extraction (no AI, no OCR)

  1. Resource: **ExtractDoc** → Operation: **Run Conversion Job**
  2. Provide a PDF / DOCX / XLSX / PPTX file via binary input
  3. Choose the `ki/extract` engine and output format (`text` or `jsonl`)

  **Example**: [ExtractDoc workflow](examples/extractdoc-demo.json)

  ## AI Agent Integration

  The LDXhub node is marked as `usableAsTool: true`, so it can be attached to an **AI Agent** node as a tool. This enables agentic workflows where an AI agent autonomously decides when to extract structured data, translate documents, or convert files using LDX hub.

  Example use cases:

  - Customer support agent that extracts structured complaint data from incoming emails (StructFlow)
  - Document processing agent that automatically OCRs and translates uploaded PDFs (RenderOCR → RefineLoop)
  - Knowledge base ingestion agent that converts and structures diverse document formats (CastDoc → StructFlow)

  ## Polling Settings

  For large documents, jobs may take several minutes. The node polls until completion:

  | Setting | Default | Description |
  |---|---|---|
  | Max Polling Attempts | 180 | Maximum number of poll requests |
  | Server Wait Seconds | 10 | Server-side long-poll wait per request |

  Theoretical max wait = `Max Polling Attempts × Server Wait Seconds` seconds.
  Defaults give 30 minutes. For longer documents, increase Max Polling Attempts
  (e.g., 360 for 60 minutes).

  > **n8n Cloud users**: your plan's workflow execution timeout applies independently. Check your plan's limits.

  ## Troubleshooting

  ### 401 Unauthorized

  - The API key is invalid, revoked, or expired
  - Roll the key from **My Subscriptions** → **API Keys** → **Roll API Key** in the LDX hub DevPortal, then update the n8n credential

  ### 400 Bad Request — invalid file_id

  - The binary input is missing or the binary field name is incorrect
  - Check that the previous node outputs a binary property matching the **Input Binary Field** setting (default: `data`)

  ### Job times out / polling exhausted

  - Large documents may exceed the default 30-minute window
  - Increase **Max Polling Attempts** in Polling Settings
  - For n8n Cloud, also check your plan's workflow execution timeout

  ### StructFlow Inline mode — empty results

  - Ensure **Inputs** collection has at least one record with non-empty **ID** and **Data** fields
  - Verify **Example Output** is valid JSON

  ### Credit limit exceeded

  - Your subscription's monthly credit allowance has been reached
  - Check usage in the DevPortal's **My Subscriptions** page
  - Upgrade your plan or wait for the next billing period

  ## Support

  - **Product**: https://ldxlab.io/ldxhub
  - **Documentation**: https://gw.portal.ldxhub.io/introduction
  - **Bug reports & feature requests**: [GitHub Issues](https://github.com/ldxhub-io/n8n-nodes-ldxhub/issues)

  ## Changelog

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

  ## License

  [MIT](LICENSE)

  Copyright (c) 2026 Kawamura International Co., Ltd.

ai_documentation_summary:
  {"purpose":"Integrates the LDXhub AI-powered document processing platform into n8n workflows for tasks like structured data extraction, XLIFF translation refinement, and layout-preserving document conversion.","capabilities":["Extract structured JSON from unstructured text using AI models (StructFlow)","Iteratively improve XLIFF translation quality using frontier AI models (RefineLoop)","Convert PDFs and images to Word/Excel/PowerPoint with layout-preserving OCR (RenderOCR)","Convert text-based PDFs to Office formats without OCR (CastDoc)","Extract plain text or JSONL from various document formats without AI or OCR (ExtractDoc)","Access multiple AI providers (OpenAI, Anthropic, Google, AWS, Azure, xAI) via a single API key"],"authentication":"API key required","commonUseCases":["Automated extraction of structured data from medical records, legal documents, or customer feedback","Improving machine translation quality for localization workflows","Converting scanned documents or images into editable Office formats while preserving layout","Preprocessing document batches by extracting raw text before further AI processing"],"limitations":["Requires an active LDXhub account and API key","Free tier limited to 25,000 credits per month","Requires n8n version supporting community nodes (v1.x or later)","ExtractDoc is limited to the free tier for its specific engine"],"relatedNodes":[]}


node_type: n8n-nodes-zalo-platform.zaloBot
package_name: n8n-nodes-zalo-platform
display_name: Zalo Bot
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: thenexova-team
author_github_url: https://github.com/hecigo/
npm_package_name: n8n-nodes-zalo-platform
npm_version: 1.0.13
community_fetched_at: 2026-07-14T14:40:34.092Z
ai_summary_generated_at: 2026-05-02 09:00:04
description:
  Send messages, photos, stickers, chat actions and manage webhooks. Compatible with official Zalo Bot Platform.

properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Get Bot Info",
          "value": "getMe",
          "action": "Get bot info",
          "description": "Get information about the bot"
        },
        {
          "name": "Get Updates",
          "value": "getUpdates",
          "action": "Get updates",
          "description": "Fetch incoming messages via long polling"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send a message",
          "description": "Send a text message to a user or group"
        },
        {
          "name": "Send Photo",
          "value": "sendPhoto",
          "action": "Send a photo",
          "description": "Send a photo to a user or group"
        },
        {
          "name": "Send Chat Action",
          "value": "sendChatAction",
          "action": "Send a chat action",
          "description": "Display a typing or upload indicator in a conversation"
        },
        {
          "name": "Send Sticker",
          "value": "sendSticker",
          "action": "Send a sticker",
          "description": "Send a sticker to a user or group"
        },
        {
          "name": "Set Webhook",
          "value": "setWebhook",
          "action": "Set webhook",
          "description": "Configure a webhook URL to receive updates"
        },
        {
          "name": "Delete Webhook",
          "value": "deleteWebhook",
          "action": "Delete webhook",
          "description": "Remove the current webhook configuration"
        },
        {
          "name": "Get Webhook Info",
          "value": "getWebhookInfo",
          "action": "Get webhook info",
          "description": "Get information about the current webhook"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Bot Info",
      "value": "getMe",
      "action": "Get bot info",
      "description": "Get information about the bot"
    },
    {
      "name": "Get Updates",
      "value": "getUpdates",
      "action": "Get updates",
      "description": "Fetch incoming messages via long polling"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send a message",
      "description": "Send a text message to a user or group"
    },
    {
      "name": "Send Photo",
      "value": "sendPhoto",
      "action": "Send a photo",
      "description": "Send a photo to a user or group"
    },
    {
      "name": "Send Chat Action",
      "value": "sendChatAction",
      "action": "Send a chat action",
      "description": "Display a typing or upload indicator in a conversation"
    },
    {
      "name": "Send Sticker",
      "value": "sendSticker",
      "action": "Send a sticker",
      "description": "Send a sticker to a user or group"
    },
    {
      "name": "Set Webhook",
      "value": "setWebhook",
      "action": "Set webhook",
      "description": "Configure a webhook URL to receive updates"
    },
    {
      "name": "Delete Webhook",
      "value": "deleteWebhook",
      "action": "Delete webhook",
      "description": "Remove the current webhook configuration"
    },
    {
      "name": "Get Webhook Info",
      "value": "getWebhookInfo",
      "action": "Get webhook info",
      "description": "Get information about the current webhook"
    }
  ]

npm_readme:
  # n8n-nodes-zalo-platform

  Community node for [Zalo Bot Platform](https://bot.zaloplatforms.com) on n8n. Automate Zalo Bot interactions: receive messages via webhook, send replies, photos, stickers, and chat actions.

  Built by [hecigo](https://hecigo.com) — Middleware Lab for Global Expansion.

  **Guides:** [Setup Guide (EN)](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/) | [Detailed Guide (Vietnamese)](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo)

  ## Nodes

  ### Zalo Bot Trigger

  Receives incoming messages via webhook. Webhook URL and secret token are managed automatically.

  When a workflow is activated, the node:

  1. Registers a webhook URL with Zalo (`POST /setWebhook`)
  2. Derives a secret token: `SHA256(botToken).hex().substring(0, 32)`
  3. Validates incoming requests via `X-Bot-Api-Secret-Token` header
  4. Cleans up on deactivation (`POST /deleteWebhook`)

  **Event filtering:**

  | Option | Value | Passes Through |
  |--------|-------|----------------|
  | Any Message | `anyMessage` | All message types |
  | Text Message | `message.text.received` | Text only |
  | Image Message | `message.image.received` | Images only |
  | Sticker Message | `message.sticker.received` | Stickers only |

  **Sample output:**

  ```json
  {
    "event_name": "message.text.received",
    "message": {
      "date": 1775362520302,
      "chat": { "chat_type": "PRIVATE", "id": "818e7bf147beaee0f7af" },
      "message_id": "261de7b845d153890ac6",
      "from": { "id": "818e7bf147beaee0f7af", "is_bot": false, "display_name": "Nguyen Van A" },
      "text": "Xin chao"
    }
  }
  ```

  **Useful expressions:**

  | Expression | Returns |
  |------------|---------|
  | `{{ $json.message.chat.id }}` | Chat ID (use to reply) |
  | `{{ $json.message.text }}` | Message content |
  | `{{ $json.message.from.display_name }}` | Sender name |
  | `{{ $json.event_name }}` | Event type |

  ### Zalo Bot (Action)

  9 operations, all using `POST` requests to `https://bot-api.zaloplatforms.com/bot{TOKEN}/{method}`.

  #### Send Message

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `text` | String | Yes | Message content, max 2000 characters |

  Request body: `{ "chat_id": "...", "text": "..." }`

  #### Send Photo

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `photo` | String | Yes | HTTPS image URL |
  | `caption` | String | No | Caption, max 2000 characters |

  #### Send Chat Action

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `action` | Options | Yes | `typing` (bot is typing) or `upload_photo` (bot is uploading a photo) |

  Request body: `{ "chat_id": "...", "action": "typing" }`

  > Useful before sending a message or photo to show the bot is "thinking".

  #### Send Sticker

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `stickerId` | String | Yes | Sticker ID (e.g., `bfe458bf64fa8da4d4eb`) |

  > **Note:** UI shows `stickerId` but the API body uses key `"sticker"`. The node handles this mapping.

  #### Get Updates (Long Polling)

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | `timeout` | Number | `30` | Polling timeout in seconds. `0` for immediate. |

  > **Important:** `getUpdates` and webhooks are mutually exclusive. Call `Delete Webhook` before using `Get Updates`. The timeout is sent as a string in the request body.

  #### Get Bot Info / Set Webhook / Delete Webhook / Get Webhook Info

  | Operation | Endpoint | Parameters |
  |-----------|----------|------------|
  | Get Bot Info | `POST /getMe` | None |
  | Set Webhook | `POST /setWebhook` | `webhookUrl` (HTTPS), `secretToken` (8-256 chars) |
  | Delete Webhook | `POST /deleteWebhook` | None |
  | Get Webhook Info | `POST /getWebhookInfo` | None |

  > If you use the Trigger node, you do not need Set/Delete Webhook manually.

  ## Installation

  ### n8n Community Nodes

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

  ### Manual (Self-Hosted)

  ```bash
  cd ~/.n8n
  npm install n8n-nodes-zalo-platform
  ```

  Restart n8n after installation.

  > **Queue/Worker mode:** Install the node on **both** the main instance and all workers. Custom nodes must exist in `~/.n8n/` on every container.

  ## Creating Your Zalo Bot

  1. Open **Zalo** on your phone
  2. Search for OA **"Zalo Bot Manager"**
  3. Tap **"Create Bot"**
  4. Enter a bot name (must start with "Bot", e.g., `Bot MyShop`)
  5. Zalo sends your **Bot Token** via message: `{bot_id}:{secret_key}`

  ## Credentials

  | Field | Description |
  |-------|-------------|
  | Bot Token | Format: `{bot_id}:{secret_key}`. Tested via `POST /getMe`. |

  ## Cloudflare Configuration

  Zalo sends webhooks with `User-Agent: Java/1.8.0_192`. Cloudflare blocks this by default. Create 2 rules:

  **Rule 1 - WAF Custom Rule:** Skip all managed rules for URI path contains `/webhook`

  **Rule 2 - Configuration Rule:** Disable Browser Integrity Check for URI path contains `/webhook`

  > Use `/webhook` (no trailing slash) to cover both `/webhook/...` and `/webhook-test/...` URLs.

  ## Workflow Examples

  **Auto-reply:**

  ```
  Zalo Bot Trigger (Any Message)
    -> IF (event_name == "message.text.received")
      -> Zalo Bot: Send Message (chatId, reply text)
  ```

  **Lead capture:**

  ```
  Zalo Bot Trigger (Text Message)
    -> Google Sheets: Append Row (name, message, timestamp)
    -> Slack: Send notification
  ```

  **Polling (no HTTPS):**

  ```
  Schedule Trigger (every 30s)
    -> Zalo Bot: Delete Webhook (run once)
    -> Zalo Bot: Get Updates (timeout: 25)
    -> IF (has data) -> Process...
  ```

  ## Troubleshooting

  | Problem | Cause | Fix |
  |---------|-------|-----|
  | Trigger receives nothing | Cloudflare blocks Java UA | Create both Cloudflare rules |
  | 401 on credential test | Token expired/wrong | Create new bot |
  | Test mode spins forever | Workflow still active | Deactivate before testing |
  | getUpdates empty | Webhook still registered | Call Delete Webhook first |
  | Worker missing node | Only on main instance | Install on all containers |

  ## Compatibility

  - n8n: >= 1.0.0
  - Zalo Bot Platform API

  ## About

  [hecigo](https://hecigo.com) is a middleware lab researching and deploying integration solutions that connect Vietnamese businesses to global systems. Need custom n8n nodes or middleware consulting? [Get in touch](https://hecigo.com/#contact).

  Consulting partner: [THE NEXOVA](https://thenexova.com) — Bridge Strategy to Execution.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"This n8n node enables automation of the Zalo Bot Platform, allowing users to receive messages via webhooks, send various content types (text, photos, stickers), and manage bot settings like webhooks and updates.","capabilities":["Receive incoming messages via webhook","Filter messages by type (text, image, sticker, any)","Send text messages (max 2000 characters)","Send photos with optional captions","Send chat actions (typing, upload_photo)","Send stickers by ID","Get bot updates via long polling","Manage webhook registration and deletion","Retrieve bot information"],"authentication":"API key required (Bot Token in format {bot_id}:{secret_key})","commonUseCases":["Automated customer support replies","Lead capture and data collection","Interactive chatbots with media support","Notification systems via Zalo","Polling for non-HTTPS environments"],"limitations":["Webhook and long polling (Get Updates) are mutually exclusive","Cloudflare WAF may block webhook requests by default due to specific User-Agent headers","Text messages are limited to 2000 characters","Sticker sending requires a valid sticker ID"],"relatedNodes":["n8n-nodes-zalo-platform.zaloBotTrigger","n8n-nodes-zalo-platform.zaloBot"]}


node_type: n8n-nodes-zalo-platform.zaloBotTrigger
package_name: n8n-nodes-zalo-platform
display_name: Zalo Bot Trigger
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: thenexova-team
author_github_url: https://github.com/hecigo/
npm_package_name: n8n-nodes-zalo-platform
npm_version: 1.0.13
community_fetched_at: 2026-07-14T14:40:34.093Z
ai_summary_generated_at: 2026-05-02 09:00:04
description:
  Receive messages and events via webhook with auto-registration. Compatible with official Zalo Bot Platform.

npm_readme:
  # n8n-nodes-zalo-platform

  Community node for [Zalo Bot Platform](https://bot.zaloplatforms.com) on n8n. Automate Zalo Bot interactions: receive messages via webhook, send replies, photos, stickers, and chat actions.

  Built by [hecigo](https://hecigo.com) — Middleware Lab for Global Expansion.

  **Guides:** [Setup Guide (EN)](https://thenexova.com/n8n-zalo-bot-node-complete-setup-and-operations-guide/) | [Detailed Guide (Vietnamese)](https://hecigo.com/blog/toi-uu-tu-dong-hoa-zalo-bot-voi-n8n-huong-dan-chi-tiet-tu-hecigo)

  ## Nodes

  ### Zalo Bot Trigger

  Receives incoming messages via webhook. Webhook URL and secret token are managed automatically.

  When a workflow is activated, the node:

  1. Registers a webhook URL with Zalo (`POST /setWebhook`)
  2. Derives a secret token: `SHA256(botToken).hex().substring(0, 32)`
  3. Validates incoming requests via `X-Bot-Api-Secret-Token` header
  4. Cleans up on deactivation (`POST /deleteWebhook`)

  **Event filtering:**

  | Option | Value | Passes Through |
  |--------|-------|----------------|
  | Any Message | `anyMessage` | All message types |
  | Text Message | `message.text.received` | Text only |
  | Image Message | `message.image.received` | Images only |
  | Sticker Message | `message.sticker.received` | Stickers only |

  **Sample output:**

  ```json
  {
    "event_name": "message.text.received",
    "message": {
      "date": 1775362520302,
      "chat": { "chat_type": "PRIVATE", "id": "818e7bf147beaee0f7af" },
      "message_id": "261de7b845d153890ac6",
      "from": { "id": "818e7bf147beaee0f7af", "is_bot": false, "display_name": "Nguyen Van A" },
      "text": "Xin chao"
    }
  }
  ```

  **Useful expressions:**

  | Expression | Returns |
  |------------|---------|
  | `{{ $json.message.chat.id }}` | Chat ID (use to reply) |
  | `{{ $json.message.text }}` | Message content |
  | `{{ $json.message.from.display_name }}` | Sender name |
  | `{{ $json.event_name }}` | Event type |

  ### Zalo Bot (Action)

  9 operations, all using `POST` requests to `https://bot-api.zaloplatforms.com/bot{TOKEN}/{method}`.

  #### Send Message

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `text` | String | Yes | Message content, max 2000 characters |

  Request body: `{ "chat_id": "...", "text": "..." }`

  #### Send Photo

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `photo` | String | Yes | HTTPS image URL |
  | `caption` | String | No | Caption, max 2000 characters |

  #### Send Chat Action

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `action` | Options | Yes | `typing` (bot is typing) or `upload_photo` (bot is uploading a photo) |

  Request body: `{ "chat_id": "...", "action": "typing" }`

  > Useful before sending a message or photo to show the bot is "thinking".

  #### Send Sticker

  | Parameter | Type | Required | Description |
  |-----------|------|----------|-------------|
  | `chatId` | String | Yes | User ID or Group ID |
  | `stickerId` | String | Yes | Sticker ID (e.g., `bfe458bf64fa8da4d4eb`) |

  > **Note:** UI shows `stickerId` but the API body uses key `"sticker"`. The node handles this mapping.

  #### Get Updates (Long Polling)

  | Parameter | Type | Default | Description |
  |-----------|------|---------|-------------|
  | `timeout` | Number | `30` | Polling timeout in seconds. `0` for immediate. |

  > **Important:** `getUpdates` and webhooks are mutually exclusive. Call `Delete Webhook` before using `Get Updates`. The timeout is sent as a string in the request body.

  #### Get Bot Info / Set Webhook / Delete Webhook / Get Webhook Info

  | Operation | Endpoint | Parameters |
  |-----------|----------|------------|
  | Get Bot Info | `POST /getMe` | None |
  | Set Webhook | `POST /setWebhook` | `webhookUrl` (HTTPS), `secretToken` (8-256 chars) |
  | Delete Webhook | `POST /deleteWebhook` | None |
  | Get Webhook Info | `POST /getWebhookInfo` | None |

  > If you use the Trigger node, you do not need Set/Delete Webhook manually.

  ## Installation

  ### n8n Community Nodes

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

  ### Manual (Self-Hosted)

  ```bash
  cd ~/.n8n
  npm install n8n-nodes-zalo-platform
  ```

  Restart n8n after installation.

  > **Queue/Worker mode:** Install the node on **both** the main instance and all workers. Custom nodes must exist in `~/.n8n/` on every container.

  ## Creating Your Zalo Bot

  1. Open **Zalo** on your phone
  2. Search for OA **"Zalo Bot Manager"**
  3. Tap **"Create Bot"**
  4. Enter a bot name (must start with "Bot", e.g., `Bot MyShop`)
  5. Zalo sends your **Bot Token** via message: `{bot_id}:{secret_key}`

  ## Credentials

  | Field | Description |
  |-------|-------------|
  | Bot Token | Format: `{bot_id}:{secret_key}`. Tested via `POST /getMe`. |

  ## Cloudflare Configuration

  Zalo sends webhooks with `User-Agent: Java/1.8.0_192`. Cloudflare blocks this by default. Create 2 rules:

  **Rule 1 - WAF Custom Rule:** Skip all managed rules for URI path contains `/webhook`

  **Rule 2 - Configuration Rule:** Disable Browser Integrity Check for URI path contains `/webhook`

  > Use `/webhook` (no trailing slash) to cover both `/webhook/...` and `/webhook-test/...` URLs.

  ## Workflow Examples

  **Auto-reply:**

  ```
  Zalo Bot Trigger (Any Message)
    -> IF (event_name == "message.text.received")
      -> Zalo Bot: Send Message (chatId, reply text)
  ```

  **Lead capture:**

  ```
  Zalo Bot Trigger (Text Message)
    -> Google Sheets: Append Row (name, message, timestamp)
    -> Slack: Send notification
  ```

  **Polling (no HTTPS):**

  ```
  Schedule Trigger (every 30s)
    -> Zalo Bot: Delete Webhook (run once)
    -> Zalo Bot: Get Updates (timeout: 25)
    -> IF (has data) -> Process...
  ```

  ## Troubleshooting

  | Problem | Cause | Fix |
  |---------|-------|-----|
  | Trigger receives nothing | Cloudflare blocks Java UA | Create both Cloudflare rules |
  | 401 on credential test | Token expired/wrong | Create new bot |
  | Test mode spins forever | Workflow still active | Deactivate before testing |
  | getUpdates empty | Webhook still registered | Call Delete Webhook first |
  | Worker missing node | Only on main instance | Install on all containers |

  ## Compatibility

  - n8n: >= 1.0.0
  - Zalo Bot Platform API

  ## About

  [hecigo](https://hecigo.com) is a middleware lab researching and deploying integration solutions that connect Vietnamese businesses to global systems. Need custom n8n nodes or middleware consulting? [Get in touch](https://hecigo.com/#contact).

  Consulting partner: [THE NEXOVA](https://thenexova.com) — Bridge Strategy to Execution.

  ## License

  [MIT](LICENSE)

ai_documentation_summary:
  {"purpose":"The Zalo Bot Trigger node receives incoming messages and events from the Zalo Bot Platform via a managed webhook, automatically handling registration and secret token validation.","capabilities":["Receive any message type via webhook","Filter events by type (text, image, sticker)","Auto-register webhook URL with Zalo","Validate incoming requests using X-Bot-Api-Secret-Token header","Auto-cleanup webhook on workflow deactivation","Output structured message data including sender info, chat ID, and timestamp"],"authentication":"Bot Token (format: {bot_id}:{secret_key})","commonUseCases":["Auto-reply to user messages","Lead capture and data logging","Notification forwarding to other platforms","Chatbot interactions"],"limitations":["Webhook and Get Updates (polling) are mutually exclusive","Cloudflare WAF may block requests by default due to specific User-Agent headers","Requires HTTPS for webhook URLs","Secret token derivation is fixed to SHA256(botToken).hex().substring(0, 32)"],"relatedNodes":["Zalo Bot","Schedule Trigger","Google Sheets","Slack"]}


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

updated_at: 2026-07-14 14:40:34
author_name: zywiol
author_github_url: https://github.com/Zywiol/n8n-hypris.git
npm_package_name: n8n-nodes-hypris-api
npm_version: 0.1.58
community_fetched_at: 2026-07-14T14:40:34.095Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "item",
      "options": [
        {
          "name": "Database",
          "value": "database"
        },
        {
          "name": "Item",
          "value": "item"
        },
        {
          "name": "Property",
          "value": "property"
        },
        {
          "name": "Time Tracker Item",
          "value": "timeTrackerItem"
        },
        {
          "name": "View",
          "value": "view"
        },
        {
          "name": "Workspace",
          "value": "workspace"
        },
        {
          "name": "Resource Item",
          "value": "resourceItem"
        },
        {
          "name": "File",
          "value": "file"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create an item",
          "description": "Create an item in a database"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete an item",
          "description": "Delete items from a database"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update an item",
          "description": "Update property/cell values for an item"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get an item",
          "description": "Get an item by ID"
        },
        {
          "name": "List Items (Filter)",
          "value": "createFilterGroup",
          "action": "List items",
          "description": "List or filter items in a database"
        },
        {
          "name": "Find",
          "value": "findItems",
          "action": "Find items in a database",
          "description": "Find items in a database by filtering on a specific column value"
        },
        {
          "name": "Upload File",
          "value": "uploadFile",
          "action": "Upload file to item",
          "description": "Upload a file to a files property of an item"
        },
        {
          "name": "Delete File",
          "value": "deleteFile",
          "action": "Delete file from item",
          "description": "Delete a file from a files property of an item"
        },
        {
          "name": "Add Conversation Message",
          "value": "addMessage",
          "action": "Add message to conversation",
          "description": "Send a message to a conversation property of an item"
        },
        {
          "name": "Edit Conversation Message",
          "value": "updateMessage",
          "action": "Edit conversation message",
          "description": "Edit an existing conversation message"
        },
        {
          "name": "Update Location",
          "value": "updateLocation",
          "action": "Update location of an item",
          "description": "Update a location property with latitude, longitude and address details"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "item"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a property",
          "description": "Create a property in a database"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a property",
          "description": "Rename a property"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "action": "Get many properties",
          "description": "Get properties of a database"
        },
        {
          "name": "Get Full Data Options",
          "value": "getFullDataOptions",
          "action": "Get full data options for a property",
          "description": "Get complete configuration for a status property"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a property",
          "description": "Delete a property"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "property"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "update",
      "options": [
        {
          "name": "Update",
          "value": "update",
          "action": "Update a time tracker item",
          "description": "Update start and end times for a time tracker item"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "timeTrackerItem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a view",
          "description": "Create a view in a database"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a view",
          "description": "Rename or update a view"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a view",
          "description": "Delete a view"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "view"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllWorkspaces",
      "options": [
        {
          "name": "Get Many",
          "value": "getAllWorkspaces",
          "action": "Get many workspaces",
          "description": "Get many workspaces for the current user"
        },
        {
          "name": "Create",
          "value": "createWorkspace",
          "action": "Create a workspace",
          "description": "Create a new workspace"
        },
        {
          "name": "Get Resources",
          "value": "getResources",
          "action": "Get resources from a workspace",
          "description": "Get all resources from a workspace"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "workspace"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "rename",
      "options": [
        {
          "name": "Rename",
          "value": "rename",
          "action": "Rename a resource item",
          "description": "Rename a resource item/database"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "resourceItem"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a database",
          "description": "Create a new database"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many databases",
          "description": "Get many databases in a workspace"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a database",
          "description": "Delete a database"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "database"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getManyFiles",
      "options": [
        {
          "name": "Get Many",
          "value": "getManyFiles",
          "action": "Get many files in a folder",
          "description": "List files and sub-folders inside a folder"
        },
        {
          "name": "Rename",
          "value": "renameCloudItem",
          "action": "Rename a file",
          "description": "Rename a file or sub-folder (cloud item)"
        },
        {
          "name": "Move to Folder",
          "value": "moveToFolder",
          "action": "Move a file to another sub-folder",
          "description": "Move a cloud item into another sub-folder (catalog) within the same root folder"
        },
        {
          "name": "Move to Root",
          "value": "moveToRoot",
          "action": "Move a file to folder root",
          "description": "Move a cloud item to the root level of its folder (out of any sub-folder)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "file"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create an item",
      "description": "Create an item in a database",
      "resource": "item"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete an item",
      "description": "Delete items from a database",
      "resource": "item"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update an item",
      "description": "Update property/cell values for an item",
      "resource": "item"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get an item",
      "description": "Get an item by ID",
      "resource": "item"
    },
    {
      "name": "List Items (Filter)",
      "value": "createFilterGroup",
      "action": "List items",
      "description": "List or filter items in a database",
      "resource": "item"
    },
    {
      "name": "Find",
      "value": "findItems",
      "action": "Find items in a database",
      "description": "Find items in a database by filtering on a specific column value",
      "resource": "item"
    },
    {
      "name": "Upload File",
      "value": "uploadFile",
      "action": "Upload file to item",
      "description": "Upload a file to a files property of an item",
      "resource": "item"
    },
    {
      "name": "Delete File",
      "value": "deleteFile",
      "action": "Delete file from item",
      "description": "Delete a file from a files property of an item",
      "resource": "item"
    },
    {
      "name": "Add Conversation Message",
      "value": "addMessage",
      "action": "Add message to conversation",
      "description": "Send a message to a conversation property of an item",
      "resource": "item"
    },
    {
      "name": "Edit Conversation Message",
      "value": "updateMessage",
      "action": "Edit conversation message",
      "description": "Edit an existing conversation message",
      "resource": "item"
    },
    {
      "name": "Update Location",
      "value": "updateLocation",
      "action": "Update location of an item",
      "description": "Update a location property with latitude, longitude and address details",
      "resource": "item"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a property",
      "description": "Create a property in a database",
      "resource": "property"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a property",
      "description": "Rename a property",
      "resource": "property"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "action": "Get many properties",
      "description": "Get properties of a database",
      "resource": "property"
    },
    {
      "name": "Get Full Data Options",
      "value": "getFullDataOptions",
      "action": "Get full data options for a property",
      "description": "Get complete configuration for a status property",
      "resource": "property"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a property",
      "description": "Delete a property",
      "resource": "property"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a time tracker item",
      "description": "Update start and end times for a time tracker item",
      "resource": "timeTrackerItem"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a view",
      "description": "Create a view in a database",
      "resource": "view"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a view",
      "description": "Rename or update a view",
      "resource": "view"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a view",
      "description": "Delete a view",
      "resource": "view"
    },
    {
      "name": "Get Many",
      "value": "getAllWorkspaces",
      "action": "Get many workspaces",
      "description": "Get many workspaces for the current user",
      "resource": "workspace"
    },
    {
      "name": "Create",
      "value": "createWorkspace",
      "action": "Create a workspace",
      "description": "Create a new workspace",
      "resource": "workspace"
    },
    {
      "name": "Get Resources",
      "value": "getResources",
      "action": "Get resources from a workspace",
      "description": "Get all resources from a workspace",
      "resource": "workspace"
    },
    {
      "name": "Rename",
      "value": "rename",
      "action": "Rename a resource item",
      "description": "Rename a resource item/database",
      "resource": "resourceItem"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a database",
      "description": "Create a new database",
      "resource": "database"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many databases",
      "description": "Get many databases in a workspace",
      "resource": "database"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a database",
      "description": "Delete a database",
      "resource": "database"
    },
    {
      "name": "Get Many",
      "value": "getManyFiles",
      "action": "Get many files in a folder",
      "description": "List files and sub-folders inside a folder",
      "resource": "file"
    },
    {
      "name": "Rename",
      "value": "renameCloudItem",
      "action": "Rename a file",
      "description": "Rename a file or sub-folder (cloud item)",
      "resource": "file"
    },
    {
      "name": "Move to Folder",
      "value": "moveToFolder",
      "action": "Move a file to another sub-folder",
      "description": "Move a cloud item into another sub-folder (catalog) within the same root folder",
      "resource": "file"
    },
    {
      "name": "Move to Root",
      "value": "moveToRoot",
      "action": "Move a file to folder root",
      "description": "Move a cloud item to the root level of its folder (out of any sub-folder)",
      "resource": "file"
    }
  ]

npm_readme:
  # n8n-nodes-hypris-api

  A custom n8n node for seamless integration with the Hypris platform API.

  This package provides nodes for authenticating and interacting with Hypris, enabling you to automate workspace management, databases, items, properties, and views directly within your n8n workflows.

  ## Features

  * **Workspace**: List all workspaces and retrieve all resources metadata. Create new Workspaces.
  * **Database**: Fetch all items.
  * **Item**: 
    * List, create, update, delete records inside your specific databases. 
    * Auto-mapping of complex column types (`link`, `relation`, `people`, `location`, `formula`, `date`).
    * Bulk status & dropdown creation in-flight if the option does not exist.
  * **Property (Database Columns)**: 
    * Create robust columns in bulk inside a database.
    * Supported types include: `text`, `number`, `status`, `dropdown`, `relation`, `people`, `link`, `date`, `comments`, `files`, `created-at`, `updated-at` and much more.
    * Delete multiple properties dynamically via ID arrays.
  * **View**: Create, Update, and Delete views for a specific database.

  ## Installation

  ### Community Nodes
  You can install this node from the **Settings > Community Nodes** section in your n8n instance by searching for `n8n-nodes-hypris-api`.

  ### Manual Installation
  If you're running n8n via Docker or a custom self-hosted setup, install the package in the `~/.n8n/custom/` or your specialized node directory:

  ```bash
  npm install n8n-nodes-hypris-api
  ```

  ## Authentication

  Authentication is handled securely via the **Hypris API** credentials. You must provide an active Hypris API Token (Auth Token) through the n8n UI when setting up your node credentials.

  ## Usage

  1. **Add Node**: Search for "Hypris" in the n8n node search panel.
  2. **Select Resource**: Choose between Workspace, Database, Item, Property, View, or ResourceItem.
  3. **Select Operation**: Choose the operation (e.g., Create, Update, Get All).
  4. **Link complex types**: Provide plain JSON strings to intuitively fill advanced column mapping. E.g.: `{"url": "https://url.com"}`, or simply `https://url.com` for links.

  ## Quick Start

  1.  **Install**: Search for `n8n-nodes-hypris-api` in Community Nodes.
  2.  **Authenticate**: Use your Hypris User ID and Password.
  3.  **Create your first Item**: Select the `Item` resource and `Create` operation. Pick a workspace and database, then add properties.

  ## Troubleshooting

  - **Authentication Failed (401)**: Ensure your credentials are correct and you have an active workspace in Hypris.
  - **Resource Not Found (404)**: Verify the Workspace ID or Database ID. Remember that IDs change if resources are deleted and recreated.
  - **Validation Errors**: Check the "JSON Parameters" mode if you are sending complex objects to link or relation fields.

  ## Support & Links

  - **Hypris Website**: [hypris.com](https://hypris.com)
  - **Official Documentation**: [docs.hypris.com](https://docs.hypris.com)
  - **GitHub Repository**: [Zywiol/n8n-hypris](https://github.com/Zywiol/n8n-hypris)

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Interact with the Hypris platform API to automate workspace management, database operations, item handling, property configuration, and view management within n8n workflows.","capabilities":["List and create workspaces","Retrieve resource metadata","Fetch all items from databases","Create, update, and delete records with auto-mapping for complex types (links, relations, people, locations, formulas, dates)","Bulk creation of status and dropdown fields","Create, update, and delete database properties (columns) with support for text, numbers, dates, files, and more","Delete multiple properties dynamically via ID arrays","Create, update, and delete database views"],"authentication":"API Token required","commonUseCases":["Automating data entry into Hypris databases","Synchronizing complex data types like relations and people","Bulk management of database properties and views","Workflow automation for workspace organization"],"limitations":[],"relatedNodes":[]}


node_type: @green-api/n8n-nodes-whatsapp-greenapi.greenapi
package_name: @green-api/n8n-nodes-whatsapp-greenapi
display_name: GREEN-API for WhatsApp
description: Send and receive WhatsApp messages using Green-API.
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: andrew.shamin
author_github_url: https://github.com/green-api/n8n-nodes-whatsapp-green-api.git
npm_package_name: @green-api/n8n-nodes-whatsapp-greenapi
npm_version: 0.4.12
community_fetched_at: 2026-07-14T14:40:34.096Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "sending",
      "options": [
        {
          "name": "Account",
          "value": "account"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Journal",
          "value": "journal"
        },
        {
          "name": "Queue",
          "value": "queue"
        },
        {
          "name": "Receiving",
          "value": "receiving"
        },
        {
          "name": "Sending",
          "value": "sending"
        },
        {
          "name": "Service",
          "value": "service"
        },
        {
          "name": "Status",
          "value": "statuses"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getWaSettings",
      "options": [
        {
          "name": "Get Settings",
          "value": "getSettings",
          "action": "Get settings"
        },
        {
          "name": "Get State Instance",
          "value": "getStateInstance",
          "action": "Get state instance"
        },
        {
          "name": "Get WhatsApp Settings",
          "value": "getWaSettings",
          "action": "Get information about the account"
        },
        {
          "name": "Logout",
          "value": "logout",
          "action": "Logout instance"
        },
        {
          "name": "Reboot",
          "value": "reboot",
          "action": "Reboot instance"
        },
        {
          "name": "Set Settings",
          "value": "setSettings",
          "action": "Set settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "account"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendMessage",
      "options": [
        {
          "name": "Forward Messages",
          "value": "forwardMessages",
          "action": "Forward messages"
        },
        {
          "name": "Send Contact",
          "value": "sendContact",
          "action": "Send a contact"
        },
        {
          "name": "Send File By URL",
          "value": "sendFileByUrl",
          "action": "Send file by url"
        },
        {
          "name": "Send Interactive Buttons",
          "value": "sendInteractiveButtons",
          "action": "Send interactive buttons"
        },
        {
          "name": "Send Interactive Buttons Reply",
          "value": "sendInteractiveButtonsReply",
          "action": "Send interactive buttons reply"
        },
        {
          "name": "Send Location",
          "value": "sendLocation",
          "action": "Send a location"
        },
        {
          "name": "Send Message",
          "value": "sendMessage",
          "action": "Send message"
        },
        {
          "name": "Send Poll",
          "value": "sendPoll",
          "action": "Send poll"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "sending"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "showMessagesQueue",
      "options": [
        {
          "name": "Show Messages Queue",
          "value": "showMessagesQueue",
          "action": "Show messages queue"
        },
        {
          "name": "Clear Messages Queue",
          "value": "clearMessagesQueue",
          "action": "Clear messages queue"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "queue"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "lastIncomingMessages",
      "options": [
        {
          "name": "Get Chat History",
          "value": "getChatHistory",
          "action": "Get chat history"
        },
        {
          "name": "Get Message",
          "value": "getMessage",
          "action": "Get a message"
        },
        {
          "name": "Last Incoming Messages",
          "value": "lastIncomingMessages",
          "action": "Get last incoming messages"
        },
        {
          "name": "Last Outgoing Messages",
          "value": "lastOutgoingMessages",
          "action": "Get last outgoing messages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "journal"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getContacts",
      "options": [
        {
          "name": "Archive Chat",
          "value": "archiveChat",
          "action": "Archive a chat"
        },
        {
          "name": "Check WhatsApp",
          "value": "checkWhatsapp",
          "action": "Check whats app account availability"
        },
        {
          "name": "Delete Message",
          "value": "deleteMessage",
          "action": "Delete a message"
        },
        {
          "name": "Edit Message",
          "value": "editMessage",
          "action": "Edit the text message"
        },
        {
          "name": "Get Avatar",
          "value": "getAvatar",
          "action": "Get avatar"
        },
        {
          "name": "Get Contact Info",
          "value": "getContactInfo",
          "action": "Get contact info"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get contacts"
        },
        {
          "name": "Read Chat",
          "value": "readChat",
          "action": "Mark chat as read"
        },
        {
          "name": "Set Disappearing Chat",
          "value": "setDisappearingChat",
          "action": "Change the settings of disappearing chat messages"
        },
        {
          "name": "Unarchive Chat",
          "value": "unarchiveChat",
          "action": "Unarchive a chat"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "service"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getGroupData",
      "options": [
        {
          "name": "Add Group Participant",
          "value": "addGroupParticipant",
          "action": "Add group participant"
        },
        {
          "name": "Create Group",
          "value": "createGroup",
          "action": "Create a group"
        },
        {
          "name": "Get Group Data",
          "value": "getGroupData",
          "action": "Get group data"
        },
        {
          "name": "Leave Group",
          "value": "leaveGroup",
          "action": "Leave group"
        },
        {
          "name": "Remove Admin",
          "value": "removeAdmin",
          "action": "Remove group admin"
        },
        {
          "name": "Remove Group Participant",
          "value": "removeGroupParticipant",
          "action": "Remove group participant"
        },
        {
          "name": "Set Group Admin",
          "value": "setGroupAdmin",
          "action": "Set group admin"
        },
        {
          "name": "Update Group Name",
          "value": "updateGroupName",
          "action": "Update group name"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "group"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "sendTextStatus",
      "options": [
        {
          "name": "Delete a Status",
          "value": "deleteStatus",
          "action": "Delete a status"
        },
        {
          "name": "Get Incoming Statuses",
          "value": "getIncomingStatuses",
          "action": "Get incoming statuses"
        },
        {
          "name": "Get Outgoing Statuses",
          "value": "getOutgoingStatuses",
          "action": "Get outgoing statuses"
        },
        {
          "name": "Get Status Statistic",
          "value": "getStatusStatistic",
          "action": "Get status statistic"
        },
        {
          "name": "Send a Media Status",
          "value": "sendMediaStatus",
          "action": "Send a media status"
        },
        {
          "name": "Send a Text Status",
          "value": "sendTextStatus",
          "action": "Send a text status"
        },
        {
          "name": "Send a Voice Status",
          "value": "sendVoiceStatus",
          "action": "Send a voice status"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "statuses"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "downloadFile",
      "options": [
        {
          "name": "Download a File",
          "value": "downloadFile",
          "action": "Download a file"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "receiving"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Settings",
      "value": "getSettings",
      "action": "Get settings",
      "resource": "account"
    },
    {
      "name": "Get State Instance",
      "value": "getStateInstance",
      "action": "Get state instance",
      "resource": "account"
    },
    {
      "name": "Get WhatsApp Settings",
      "value": "getWaSettings",
      "action": "Get information about the account",
      "resource": "account"
    },
    {
      "name": "Logout",
      "value": "logout",
      "action": "Logout instance",
      "resource": "account"
    },
    {
      "name": "Reboot",
      "value": "reboot",
      "action": "Reboot instance",
      "resource": "account"
    },
    {
      "name": "Set Settings",
      "value": "setSettings",
      "action": "Set settings",
      "resource": "account"
    },
    {
      "name": "Forward Messages",
      "value": "forwardMessages",
      "action": "Forward messages",
      "resource": "sending"
    },
    {
      "name": "Send Contact",
      "value": "sendContact",
      "action": "Send a contact",
      "resource": "sending"
    },
    {
      "name": "Send File By URL",
      "value": "sendFileByUrl",
      "action": "Send file by url",
      "resource": "sending"
    },
    {
      "name": "Send Interactive Buttons",
      "value": "sendInteractiveButtons",
      "action": "Send interactive buttons",
      "resource": "sending"
    },
    {
      "name": "Send Interactive Buttons Reply",
      "value": "sendInteractiveButtonsReply",
      "action": "Send interactive buttons reply",
      "resource": "sending"
    },
    {
      "name": "Send Location",
      "value": "sendLocation",
      "action": "Send a location",
      "resource": "sending"
    },
    {
      "name": "Send Message",
      "value": "sendMessage",
      "action": "Send message",
      "resource": "sending"
    },
    {
      "name": "Send Poll",
      "value": "sendPoll",
      "action": "Send poll",
      "resource": "sending"
    },
    {
      "name": "Show Messages Queue",
      "value": "showMessagesQueue",
      "action": "Show messages queue",
      "resource": "queue"
    },
    {
      "name": "Clear Messages Queue",
      "value": "clearMessagesQueue",
      "action": "Clear messages queue",
      "resource": "queue"
    },
    {
      "name": "Get Chat History",
      "value": "getChatHistory",
      "action": "Get chat history",
      "resource": "journal"
    },
    {
      "name": "Get Message",
      "value": "getMessage",
      "action": "Get a message",
      "resource": "journal"
    },
    {
      "name": "Last Incoming Messages",
      "value": "lastIncomingMessages",
      "action": "Get last incoming messages",
      "resource": "journal"
    },
    {
      "name": "Last Outgoing Messages",
      "value": "lastOutgoingMessages",
      "action": "Get last outgoing messages",
      "resource": "journal"
    },
    {
      "name": "Archive Chat",
      "value": "archiveChat",
      "action": "Archive a chat",
      "resource": "service"
    },
    {
      "name": "Check WhatsApp",
      "value": "checkWhatsapp",
      "action": "Check whats app account availability",
      "resource": "service"
    },
    {
      "name": "Delete Message",
      "value": "deleteMessage",
      "action": "Delete a message",
      "resource": "service"
    },
    {
      "name": "Edit Message",
      "value": "editMessage",
      "action": "Edit the text message",
      "resource": "service"
    },
    {
      "name": "Get Avatar",
      "value": "getAvatar",
      "action": "Get avatar",
      "resource": "service"
    },
    {
      "name": "Get Contact Info",
      "value": "getContactInfo",
      "action": "Get contact info",
      "resource": "service"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get contacts",
      "resource": "service"
    },
    {
      "name": "Read Chat",
      "value": "readChat",
      "action": "Mark chat as read",
      "resource": "service"
    },
    {
      "name": "Set Disappearing Chat",
      "value": "setDisappearingChat",
      "action": "Change the settings of disappearing chat messages",
      "resource": "service"
    },
    {
      "name": "Unarchive Chat",
      "value": "unarchiveChat",
      "action": "Unarchive a chat",
      "resource": "service"
    },
    {
      "name": "Add Group Participant",
      "value": "addGroupParticipant",
      "action": "Add group participant",
      "resource": "group"
    },
    {
      "name": "Create Group",
      "value": "createGroup",
      "action": "Create a group",
      "resource": "group"
    },
    {
      "name": "Get Group Data",
      "value": "getGroupData",
      "action": "Get group data",
      "resource": "group"
    },
    {
      "name": "Leave Group",
      "value": "leaveGroup",
      "action": "Leave group",
      "resource": "group"
    },
    {
      "name": "Remove Admin",
      "value": "removeAdmin",
      "action": "Remove group admin",
      "resource": "group"
    },
    {
      "name": "Remove Group Participant",
      "value": "removeGroupParticipant",
      "action": "Remove group participant",
      "resource": "group"
    },
    {
      "name": "Set Group Admin",
      "value": "setGroupAdmin",
      "action": "Set group admin",
      "resource": "group"
    },
    {
      "name": "Update Group Name",
      "value": "updateGroupName",
      "action": "Update group name",
      "resource": "group"
    },
    {
      "name": "Delete a Status",
      "value": "deleteStatus",
      "action": "Delete a status",
      "resource": "statuses"
    },
    {
      "name": "Get Incoming Statuses",
      "value": "getIncomingStatuses",
      "action": "Get incoming statuses",
      "resource": "statuses"
    },
    {
      "name": "Get Outgoing Statuses",
      "value": "getOutgoingStatuses",
      "action": "Get outgoing statuses",
      "resource": "statuses"
    },
    {
      "name": "Get Status Statistic",
      "value": "getStatusStatistic",
      "action": "Get status statistic",
      "resource": "statuses"
    },
    {
      "name": "Send a Media Status",
      "value": "sendMediaStatus",
      "action": "Send a media status",
      "resource": "statuses"
    },
    {
      "name": "Send a Text Status",
      "value": "sendTextStatus",
      "action": "Send a text status",
      "resource": "statuses"
    },
    {
      "name": "Send a Voice Status",
      "value": "sendVoiceStatus",
      "action": "Send a voice status",
      "resource": "statuses"
    },
    {
      "name": "Download a File",
      "value": "downloadFile",
      "action": "Download a file",
      "resource": "receiving"
    }
  ]

npm_readme:
  # n8n-nodes-whatsapp-green-api

  Integration node for [Green API](https://green-api.com/) in [n8n](https://n8n.io).  
  This community node allows automation of WhatsApp interactions using Green API — including messaging, file transfer, contacts, groups, statuses, and instance management.

  ---

  ## 📖 Overview

  The **GreenAPI Node** provides full access to Green API endpoints, enabling you to send messages, manage chats, groups, and retrieve account information.

  ---

  ## Installation
  ### Install community node
  Go to `Settings` → `Community Nodes` → `Install`, then enter `@green-api/n8n-nodes-whatsapp-greenapi`

  ## Authentication

  To use this node, you need to have an instance and token from [Green-API](https://green-api.com/en) platform and WhatsApp account:

  - Sign up at [Green-API](https://green-api.com/en)
  - Create an instance
  - Get idInstance and apiTokenInstance
  - Authorize the instance in the [Console](https://console.green-api.com/instanceList)

  ## 🧩 Features

  | Category | Methods |
  |-----------|----------|
  | 👤 **Account** | getSettings, setSettings, getStateInstance, reboot, logout, getWaSettings |
  | ✉️ **Sending** | sendMessage, sendPoll, sendFileByUrl, sendLocation, sendContact, forwardMessages, sendInteractiveButtons, sendInteractiveButtonsReply |
  | 📥 **Receiving** | webhookTrigger, downloadFile |
  | 📜 **Journals** | getChatHistory, getMessage, lastIncomingMessages, lastOutgoingMessages |
  | 🧾 **Queues** | showMessagesQueue, clearMessagesQueue |
  | 👥 **Groups** | createGroup, updateGroupName, getGroupData, addGroupParticipant, deleteGroupParticipant, setGroupAdmin, removeGroupAdmin, leaveGroup |
  | 📣 **Statuses** | sendTextStatus, sendVoiceStatus, sendMediaStatus, deleteStatus, getStatusStatistic, getIncomingStatuses, getOutgoingStatuses |
  | ✅ **Readmark** | readChat |
  | 🧩 **Service** | getContacts, getContactInfo, editMessage, deleteMessage, archiveChat, unarchiveChat, setDisappearingChat |

  ---

  ## ⚙️ Usage Examples

  ### 💬 Send Message
  ```json
  {
    "operation": "sendMessage",
    "chatId": "79001234567@c.us",
    "message": "Hello from n8n and Green API!"
  }
  ```

  ### 📎 Send File by URL
  ```json
  {
    "operation": "sendFileByUrl",
    "chatId": "79001234567@c.us",
    "urlFile": "https://example.com/image.jpg",
    "fileName": "photo.jpg"
  }
  ```

  ### 📣 Send Text Status
  ```json
  {
    "operation": "sendTextStatus",
    "message": "Working with Green-API and n8n!",
    "backgroundColor": "#228B22",
    "font": "SERIF",
    "participants": []
  }
  ```

  ### 📤 Send Interactive Buttons Reply
  ```json
  {
    "operation": "sendInteractiveButtonsReply",
    "chatId": "79001234567@c.us",
    "header": "",
    "body": "Do you confirm the appointment for tomorrow?",
    "footer": "",
    "buttons": [
          {
              "buttonId": "1",
              "buttonText": "Yes"
          },
          {
              "buttonId": "2",
              "buttonText": "No"
          }
      ]
  }
  ```

  ### 👥 Create Group
  ```json
  {
    "operation": "createGroup",
    "groupName": "My Team",
    "participants": ["79001234567@c.us", "79007654321@c.us"]
  }
  ```

  ### 🧭 Send Location
  ```json
  {
    "operation": "sendLocation",
    "chatId": "79001234567@c.us",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "name": "New York",
    "address": "NY, USA"
  }
  ```

  ### 🔄 Check Whatsapp
  ```json
  {
    "operation": "checkWhatsapp",
    "phoneNumber": 79000000000
  }
  ```
  ---

  ## 🔗 Resources

  - 🌐 [Green API Documentation](https://green-api.com/en/docs/)
  - 📘 [n8n Documentation](https://docs.n8n.io)
  - 💬 [n8n Community Forum](https://community.n8n.io)

  ---

  ## 👤 Author

  Developed by [Green API](https://green-api.com/)  
  📧 support@green-api.com  
  🌍 https://green-api.com/en/

  ---

  ## 🪪 License

  [MIT License](LICENSE)

ai_documentation_summary:
  {"purpose":"Enables automation of WhatsApp interactions by connecting n8n workflows with the Green-API platform for messaging, file transfer, and account management.","capabilities":["Send text, media, location, and contact messages","Send interactive buttons and polls","Forward messages between chats","Manage WhatsApp statuses (text, voice, media)","Create, update, and manage group chats","Retrieve chat history and message logs","Handle incoming messages via webhook trigger","Download files from messages","Manage contacts and contact info","Edit, delete, and archive chats"],"authentication":"API key required (idInstance and apiTokenInstance from Green-API platform)","commonUseCases":["Automated customer support responses","Broadcasting announcements to groups","Automated file sharing and document delivery","Two-way communication with interactive buttons","Logging and archiving conversation history"],"limitations":["Requires a paid or free instance from Green-API platform","Dependent on Green-API service availability and rate limits","Requires manual instance authorization in Green-API console before use"],"relatedNodes":[]}


node_type: @green-api/n8n-nodes-whatsapp-greenapi.greenapiTrigger
package_name: @green-api/n8n-nodes-whatsapp-greenapi
display_name: GREEN-API Trigger
description: Starts the workflow on a Green-Api webhook
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: andrew.shamin
author_github_url: https://github.com/green-api/n8n-nodes-whatsapp-green-api.git
npm_package_name: @green-api/n8n-nodes-whatsapp-greenapi
npm_version: 0.4.12
community_fetched_at: 2026-07-14T14:40:34.097Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-whatsapp-green-api

  Integration node for [Green API](https://green-api.com/) in [n8n](https://n8n.io).  
  This community node allows automation of WhatsApp interactions using Green API — including messaging, file transfer, contacts, groups, statuses, and instance management.

  ---

  ## 📖 Overview

  The **GreenAPI Node** provides full access to Green API endpoints, enabling you to send messages, manage chats, groups, and retrieve account information.

  ---

  ## Installation
  ### Install community node
  Go to `Settings` → `Community Nodes` → `Install`, then enter `@green-api/n8n-nodes-whatsapp-greenapi`

  ## Authentication

  To use this node, you need to have an instance and token from [Green-API](https://green-api.com/en) platform and WhatsApp account:

  - Sign up at [Green-API](https://green-api.com/en)
  - Create an instance
  - Get idInstance and apiTokenInstance
  - Authorize the instance in the [Console](https://console.green-api.com/instanceList)

  ## 🧩 Features

  | Category | Methods |
  |-----------|----------|
  | 👤 **Account** | getSettings, setSettings, getStateInstance, reboot, logout, getWaSettings |
  | ✉️ **Sending** | sendMessage, sendPoll, sendFileByUrl, sendLocation, sendContact, forwardMessages, sendInteractiveButtons, sendInteractiveButtonsReply |
  | 📥 **Receiving** | webhookTrigger, downloadFile |
  | 📜 **Journals** | getChatHistory, getMessage, lastIncomingMessages, lastOutgoingMessages |
  | 🧾 **Queues** | showMessagesQueue, clearMessagesQueue |
  | 👥 **Groups** | createGroup, updateGroupName, getGroupData, addGroupParticipant, deleteGroupParticipant, setGroupAdmin, removeGroupAdmin, leaveGroup |
  | 📣 **Statuses** | sendTextStatus, sendVoiceStatus, sendMediaStatus, deleteStatus, getStatusStatistic, getIncomingStatuses, getOutgoingStatuses |
  | ✅ **Readmark** | readChat |
  | 🧩 **Service** | getContacts, getContactInfo, editMessage, deleteMessage, archiveChat, unarchiveChat, setDisappearingChat |

  ---

  ## ⚙️ Usage Examples

  ### 💬 Send Message
  ```json
  {
    "operation": "sendMessage",
    "chatId": "79001234567@c.us",
    "message": "Hello from n8n and Green API!"
  }
  ```

  ### 📎 Send File by URL
  ```json
  {
    "operation": "sendFileByUrl",
    "chatId": "79001234567@c.us",
    "urlFile": "https://example.com/image.jpg",
    "fileName": "photo.jpg"
  }
  ```

  ### 📣 Send Text Status
  ```json
  {
    "operation": "sendTextStatus",
    "message": "Working with Green-API and n8n!",
    "backgroundColor": "#228B22",
    "font": "SERIF",
    "participants": []
  }
  ```

  ### 📤 Send Interactive Buttons Reply
  ```json
  {
    "operation": "sendInteractiveButtonsReply",
    "chatId": "79001234567@c.us",
    "header": "",
    "body": "Do you confirm the appointment for tomorrow?",
    "footer": "",
    "buttons": [
          {
              "buttonId": "1",
              "buttonText": "Yes"
          },
          {
              "buttonId": "2",
              "buttonText": "No"
          }
      ]
  }
  ```

  ### 👥 Create Group
  ```json
  {
    "operation": "createGroup",
    "groupName": "My Team",
    "participants": ["79001234567@c.us", "79007654321@c.us"]
  }
  ```

  ### 🧭 Send Location
  ```json
  {
    "operation": "sendLocation",
    "chatId": "79001234567@c.us",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "name": "New York",
    "address": "NY, USA"
  }
  ```

  ### 🔄 Check Whatsapp
  ```json
  {
    "operation": "checkWhatsapp",
    "phoneNumber": 79000000000
  }
  ```
  ---

  ## 🔗 Resources

  - 🌐 [Green API Documentation](https://green-api.com/en/docs/)
  - 📘 [n8n Documentation](https://docs.n8n.io)
  - 💬 [n8n Community Forum](https://community.n8n.io)

  ---

  ## 👤 Author

  Developed by [Green API](https://green-api.com/)  
  📧 support@green-api.com  
  🌍 https://green-api.com/en/

  ---

  ## 🪪 License

  [MIT License](LICENSE)

ai_documentation_summary:
  {"purpose":"This node serves as a webhook trigger that starts n8n workflows when receiving events from the Green API platform, enabling automation of WhatsApp interactions.","capabilities":["webhookTrigger","downloadFile","sendMessage","sendPoll","sendFileByUrl","sendLocation","sendContact","forwardMessages","sendInteractiveButtons","sendInteractiveButtonsReply"],"authentication":"API key required (idInstance and apiTokenInstance from Green-API platform)","commonUseCases":["Automated WhatsApp messaging and notifications","Two-way chatbot interactions","File sharing and document transfer","Group management and moderation","Status updates and broadcasting"],"limitations":["Requires a paid or trial instance from Green-API platform","Dependent on external Green-API service availability","Requires WhatsApp account setup and verification through Green-API"],"relatedNodes":[]}


node_type: n8n-nodes-ozor.ozor
package_name: n8n-nodes-ozor
display_name: Ozor
description: Generate, edit, and export AI videos via the Ozor API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ozorai
author_github_url: https://github.com/Mintii-Labs/
npm_package_name: n8n-nodes-ozor
npm_version: 0.1.13
community_fetched_at: 2026-07-14T14:40:34.098Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "video",
      "options": [
        {
          "name": "Video",
          "value": "video"
        },
        {
          "name": "Document",
          "value": "document"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "generate",
      "options": [
        {
          "name": "Export Video",
          "value": "export",
          "action": "Export a video",
          "description": "Trigger an MP4 export for an existing video"
        },
        {
          "name": "Generate Video",
          "value": "generate",
          "action": "Generate a video",
          "description": "Create a new video from a text prompt"
        },
        {
          "name": "Get Job Status",
          "value": "getJob",
          "action": "Get agent job status",
          "description": "Poll a generate or message job"
        },
        {
          "name": "Get Video Details",
          "value": "get",
          "action": "Get video details",
          "description": "Get status, export info, and download URL"
        },
        {
          "name": "List Videos",
          "value": "list",
          "action": "List videos",
          "description": "Retrieve all videos created via the API"
        },
        {
          "name": "Send Message (Edit)",
          "value": "message",
          "action": "Send a message to the agent",
          "description": "Send a natural-language edit instruction to the agent"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "video"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "analyze",
      "options": [
        {
          "name": "Analyze Document",
          "value": "analyze",
          "action": "Analyze a document",
          "description": "Turn a PDF, PPTX, DOCX, or URL into a scene-by-scene plan"
        },
        {
          "name": "Generate From Plan",
          "value": "generatePlan",
          "action": "Generate a video from a plan",
          "description": "Render a plan into a video (streams SSE progress)"
        },
        {
          "name": "Get Plan",
          "value": "getPlan",
          "action": "Get an analysis plan",
          "description": "Retrieve an analysis plan"
        },
        {
          "name": "List Voices",
          "value": "listVoices",
          "action": "List TTS voices",
          "description": "List available TTS voices"
        },
        {
          "name": "Update Plan",
          "value": "updatePlan",
          "action": "Update an analysis plan",
          "description": "Edit scenes or voice settings before generation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "document"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Export Video",
      "value": "export",
      "action": "Export a video",
      "description": "Trigger an MP4 export for an existing video",
      "resource": "video"
    },
    {
      "name": "Generate Video",
      "value": "generate",
      "action": "Generate a video",
      "description": "Create a new video from a text prompt",
      "resource": "video"
    },
    {
      "name": "Get Job Status",
      "value": "getJob",
      "action": "Get agent job status",
      "description": "Poll a generate or message job",
      "resource": "video"
    },
    {
      "name": "Get Video Details",
      "value": "get",
      "action": "Get video details",
      "description": "Get status, export info, and download URL",
      "resource": "video"
    },
    {
      "name": "List Videos",
      "value": "list",
      "action": "List videos",
      "description": "Retrieve all videos created via the API",
      "resource": "video"
    },
    {
      "name": "Send Message (Edit)",
      "value": "message",
      "action": "Send a message to the agent",
      "description": "Send a natural-language edit instruction to the agent",
      "resource": "video"
    },
    {
      "name": "Analyze Document",
      "value": "analyze",
      "action": "Analyze a document",
      "description": "Turn a PDF, PPTX, DOCX, or URL into a scene-by-scene plan",
      "resource": "document"
    },
    {
      "name": "Generate From Plan",
      "value": "generatePlan",
      "action": "Generate a video from a plan",
      "description": "Render a plan into a video (streams SSE progress)",
      "resource": "document"
    },
    {
      "name": "Get Plan",
      "value": "getPlan",
      "action": "Get an analysis plan",
      "description": "Retrieve an analysis plan",
      "resource": "document"
    },
    {
      "name": "List Voices",
      "value": "listVoices",
      "action": "List TTS voices",
      "description": "List available TTS voices",
      "resource": "document"
    },
    {
      "name": "Update Plan",
      "value": "updatePlan",
      "action": "Update an analysis plan",
      "description": "Edit scenes or voice settings before generation",
      "resource": "document"
    }
  ]

npm_readme:
  # n8n-nodes-ozor

  Community n8n node for the [Ozor AI Video Generation API](https://ozor.ai).

  Generate, edit, export, and turn documents into narrated videos — directly from your n8n workflows.

  ## Operations

  The node exposes two resources: **Video** and **Document**.

  ### Video

  | Operation             | Description                                                                 |
  |-----------------------|-----------------------------------------------------------------------------|
  | Generate Video        | Create a new video from a text prompt (with optional image/video refs)     |
  | List Videos           | Retrieve API-created videos (newest first)                                  |
  | Get Video Details     | Status, export info, `downloadUrl` / `shareUrl`                             |
  | Export Video          | Trigger an MP4 render at 720p / 1080p / 4K, public or signed                |
  | Send Message (Edit)   | Iterate on a video — change copy, swap colors, reorder scenes, etc.         |
  | Get Job Status        | Poll a generate / message agent job                                         |

  ### Document

  | Operation         | Description                                                                  |
  |-------------------|------------------------------------------------------------------------------|
  | List Voices       | Available TTS voices                                                         |
  | Analyze Document  | Upload a PDF / PPTX / DOCX (binary input) or a URL → scene-by-scene plan     |
  | Get Plan          | Retrieve a plan (image URLs are refreshed on every read)                     |
  | Update Plan       | Edit scenes or voice settings before generation                              |
  | Generate From Plan| Render the plan into a video (consumes the SSE stream and returns `projectId`) |

  ### Features

  - **Auto-export on generate** — trigger export immediately when creating a video.
  - **Public share links** — set `Export Is Public` / `Is Public` to get a permanent `shareUrl` + `shareCode`.
  - **Wait for completion** — built-in polling for both agent jobs and exports; downstream nodes receive the final `downloadUrl` / `shareUrl` / agent reply directly.
  - **Media attachments** — pass image and video references (URL or base64) to `generate` and `message`.
  - **Aspect ratio & quality** — landscape (16:9) or portrait (9:16); 720p, 1080p, or 4K.
  - **Document-to-video** — upload a PDF/PPTX/DOCX as n8n binary data, or hand in a URL.

  ## Setup

  ### 1. Get your API key

  Sign up at [ozor.ai](https://ozor.ai) and create an API key in the dashboard (Settings → API Keys).

  ### 2. Install the node

  #### In n8n (community nodes)

  Go to **Settings → Community Nodes → Install** and enter:

  ```
  n8n-nodes-ozor
  ```

  #### Manual / development

  ```bash
  cd ~/.n8n/custom
  git clone https://github.com/Mintii-Labs/n8n-nodes-ozor.git
  cd n8n-nodes-ozor
  npm install
  npm run build
  ```

  Then restart n8n.

  ### 3. Add credentials

  In n8n, go to **Credentials → New → Ozor API** and paste your API key. The credential test hits `GET /api/v1/videos` to validate the key.

  ## Example workflows

  ### Prompt → generate → public share link

  1. **Manual Trigger** (or Webhook)
  2. **Ozor** — Resource: Video, Operation: Generate Video
     - Enable **Auto-Export**, **Export Is Public**, **Wait for Export**
  3. **Slack** / **Email** — send `{{$json.shareUrl}}`

  ### Edit an existing video

  1. **Ozor** — Operation: Send Message (Edit)
     - `Video ID`: `abc123`, `Message`: `"Add our logo in the top-right corner"`, **Wait for Agent**: on
  2. **Ozor** — Operation: Export Video
     - `Video ID`: `={{$json.videoId}}`, **Wait for Export**: on

  ### PDF → narrated video

  1. **Read/Download File** (produces binary data)
  2. **Ozor** — Resource: Document, Operation: Analyze Document
     - Input Type: Binary File, Binary Property: `data`
  3. *(optional)* **Ozor** — Operation: Update Plan (rewrite voiceover / pick a voice)
  4. **Ozor** — Operation: Generate From Plan → returns `projectId`
  5. **Ozor** — Operation: Export Video, `Video ID`: `={{$json.projectId}}`

  ## Development

  ```bash
  npm install
  npm run dev      # watch mode
  npm run build    # production build
  npm run lint     # lint
  ```

  ## Publishing to npm

  ```bash
  npm login
  npm publish
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"The Ozor node enables users to generate, edit, and export AI-powered narrated videos directly from n8n workflows by interacting with the Ozor API.","capabilities":["Generate videos from text prompts with optional media references","List and retrieve details of existing videos including download and share URLs","Export videos in 720p, 1080p, or 4K resolution with public or signed links","Edit existing videos by changing copy, colors, or scene order","Analyze PDF, PPTX, or DOCX documents to create scene-by-scene video plans","Update video plans to modify voiceovers or scene settings before generation","Generate videos from analyzed document plans","Support for landscape (16:9) and portrait (9:16) aspect ratios","Built-in polling to wait for job completion and export readiness"],"authentication":"API key required","commonUseCases":["Convert text prompts or documents into narrated explainer videos","Automate social media content creation with public share links","Iteratively refine video content based on feedback via message editing","Transform uploaded presentations (PPTX/DOCX) into video presentations"],"limitations":["Requires an active Ozor.ai account and valid API key","Video generation and editing rely on external agent jobs with asynchronous completion"],"relatedNodes":["n8n-nodes-slack","n8n-nodes-email","n8n-nodes-ftp"]}


node_type: @altoviz/n8n-nodes-altoviz.altovizTrigger
package_name: @altoviz/n8n-nodes-altoviz
display_name: Altoviz Trigger
description: Starts the workflow when an Altoviz event occurs
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: adanvy
author_github_url: https://github.com/altoviz/n8n.git
npm_package_name: @altoviz/n8n-nodes-altoviz
npm_version: 0.9.15
community_fetched_at: 2026-07-14T14:40:34.099Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # @altoviz/n8n-nodes-altoviz

  [![CI](https://github.com/altoviz/n8n/actions/workflows/ci.yml/badge.svg)](https://github.com/altoviz/n8n/actions/workflows/ci.yml)
  [![Publish](https://github.com/altoviz/n8n/actions/workflows/publish.yml/badge.svg)](https://github.com/altoviz/n8n/actions/workflows/publish.yml)
  [![npm](https://img.shields.io/npm/v/@altoviz/n8n-nodes-altoviz)](https://www.npmjs.com/package/@altoviz/n8n-nodes-altoviz)

  This is an n8n community node package that integrates [Altoviz](https://altoviz.com) with your n8n workflow, so you can create quotes and invoices, extract customers data and more. It provides two nodes — **Altoviz** (action) and **Altoviz Trigger** (webhook) — covering all 20 API resources.

  [Altoviz](https://altoviz.com) is a French invoicing and accounting app for small businesses and freelancers.

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

  [Installation (self-hosted)](#installation-self-hosted)
  [Installation (n8n Cloud)](#installation-n8n-cloud)
  [Installation (development and contributing)](#installation-development-and-contributing)
  [Operations](#operations)
  [Credentials](#credentials)
  [Usage](#usage)
  [Compatibility](#compatibility)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation (self-hosted)

  To install the node directly from the n8n Editor UI:

  1. Open your n8n instance.
  2. Go to **Settings → Community Nodes**.
  3. Select **Install**.
  4. Enter the npm package name: `@altoviz/n8n-nodes-altoviz` to install the latest version.  
     To install a specific version (e.g. 0.2.0), enter `@altoviz/n8n-nodes-altoviz@0.2.0`.
  5. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes and select **Install**.
  6. The node is now available in your workflows.

  ## Installation (n8n Cloud)

  1. Go to the Canvas and open the nodes panel.
  2. Search for **Altoviz** in the community node registry.
  3. Click **Install node**.

  ## Installation (development and contributing)

  ### Prerequisites

  - Node.js 18.x or higher
  - npm 9.x or higher

  ```bash
  node --version   # v18.x or higher
  npm --version    # 9.x or higher
  ```

  ### 1. Clone and install dependencies

  ```bash
  git clone https://github.com/altoviz/n8n.git
  cd n8n/src/@altoviz/n8n-nodes-altoviz
  npm install
  ```

  ### 2. Build the node

  ```bash
  npm run build
  ```

  ### 3. Link into your local n8n instance

  ```bash
  # In the node package directory
  npm link

  # In ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm link @altoviz/n8n-nodes-altoviz
  ```

  Then start n8n: `n8n start`

  ### Making changes

  After editing source files, rebuild and restart n8n:

  ```bash
  npm run build
  # restart n8n
  ```

  ### Public webhook URL for the Altoviz Trigger

  When running n8n locally, webhook URLs use `localhost` which Altoviz cannot reach. Set a publicly accessible URL before starting n8n:

  ```bash
  export WEBHOOK_URL="https://your-tunnel.example.com"
  n8n start
  ```

  You can use a tunnelling tool such as [ngrok](https://ngrok.com/) or [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) to expose your local instance.

  ## Operations

  ### Altoviz node

  The node exposes a **Resource** dropdown with 20 resources. Each resource supports one or more operations:

  | Resource         | Operations                                                                                |
  | ---------------- | ----------------------------------------------------------------------------------------- |
  | Bank Account     | List Providers                                                                            |
  | Classification   | List                                                                                      |
  | Colleague        | Create, Delete, Find, Get, Get By Internal ID, List, Update                               |
  | Contact          | Create, Delete, Find, Get, List, Update                                                   |
  | Customer         | Create, Delete, Find, Get, Get By Internal ID, Get Contacts, List, Update                 |
  | Customer Family  | Create, Delete, Find, Get, List                                                           |
  | Product          | Create, Delete, Find, Get, List, Update                                                   |
  | Product Family   | Create, Delete, Get, List                                                                 |
  | Product Image    | Delete, Get, Upload                                                                       |
  | Purchase Invoice | Create From File, Download (PDF)                                                          |
  | Receipt          | Create, Delete, Find, Get, List, Update                                                   |
  | Sale Credit      | Create, Delete, Download (PDF), Finalize, Find, Get, List, Mark as Refunded, Send, Update |
  | Sale Invoice     | Create, Delete, Download (PDF), Finalize, Find, Get, List, Mark as Paid, Send, Update     |
  | Sale Quote       | Create, Delete, Download (PDF), Find, Get, List, Send                                     |
  | Setting          | Get                                                                                       |
  | Supplier         | Create, Delete, Find, Get, Get By Internal ID, Get Contacts, List, Update                 |
  | Unit             | List                                                                                      |
  | User             | Get Me                                                                                    |
  | VAT              | List                                                                                      |
  | Webhook          | Create, Delete, List                                                                      |

  ### Altoviz Trigger node

  Listens for Altoviz webhook events and starts the workflow when one is received. Supported events:

  - Contact Created / Updated / Deleted
  - Customer Created / Updated / Deleted
  - Invoice Created / Updated / Deleted
  - Product Created / Updated / Deleted
  - Quote Created / Updated / Deleted

  On activation the node automatically registers a webhook in Altoviz. On deactivation it removes it.

  ## Credentials

  1. In Altoviz, generate an API key (**Settings → Integrations → API**).
  2. In n8n, create a new **Altoviz API** credential and paste the key.
  3. n8n will test the credential against `GET /Hello` — a green checkmark confirms it is valid.

  ## Usage

  ### Sending a sale invoice by email

  1. Add the **Altoviz** node to your workflow.
  2. Select **Resource → Sale Invoice** and **Operation → Send**.
  3. Set the **Invoice ID** — for example from a previous _Create_ or _Find_ step.
  4. Connect n8n credentials (**Altoviz API**).
  5. Execute the node.

  ### Automating a quote-to-invoice flow

  1. **Altoviz** node — **Sale Quote → Create** — fill in customer, lines, and date.
  2. **Altoviz** node — **Sale Quote → Find** — retrieve the newly created quote ID.
  3. **Altoviz** node — **Sale Invoice → Create** — create the invoice from the same data.
  4. **Altoviz** node — **Sale Invoice → Finalize** — lock the invoice.
  5. **Altoviz** node — **Sale Invoice → Send** — email it to the customer.

  ### Reacting to Altoviz events

  1. Add the **Altoviz Trigger** node to start your workflow.
  2. Select one or more **Events** (e.g. _Invoice Created_).
  3. Optionally set a **Secret Key** to verify the `X-Altoviz-Signature` header and reject forged requests.
  4. Activate the workflow — the trigger automatically registers a webhook in Altoviz and removes it when deactivated.
  5. Connect downstream nodes to process the event payload (customer ID, invoice number, etc.).

  ## Compatibility

  Requires **n8n v1.x** or later (n8n nodes API version 1). Tested against n8n v1.

  ## Resources

  - [Altoviz website](https://altoviz.com)
  - [Altoviz DevHub developer website](https://developer.altoviz.com)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Source code](https://github.com/altoviz/n8n.git)

  ## Version history

  ### 0.9.0

  - Initial release — all 20 Altoviz API resources, Altoviz Trigger webhook node

ai_documentation_summary:
  {"purpose":"The Altoviz Trigger node acts as a webhook listener that starts an n8n workflow when a specific event occurs in the Altoviz invoicing and accounting platform.","capabilities":["Listens for Altoviz webhook events","Triggers workflows based on external Altoviz activity","Integrates with 20 Altoviz API resources including Customers, Invoices, Quotes, and Suppliers"],"authentication":"API key required","commonUseCases":["Automate follow-up tasks when a new customer is created in Altoviz","Trigger notifications when a sale invoice is marked as paid","Sync data between Altoviz and other systems upon event occurrence"],"limitations":["Requires a publicly accessible webhook URL when running n8n locally (localhost is not reachable by Altoviz)","Dependent on external Altoviz platform events; no internal trigger mechanisms"],"relatedNodes":["Altoviz","Webhook","HTTP Request"]}


node_type: @altoviz/n8n-nodes-altoviz.altoviz
package_name: @altoviz/n8n-nodes-altoviz
display_name: Altoviz
description: Invoicing app for small businesses
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: adanvy
author_github_url: https://github.com/altoviz/n8n.git
npm_package_name: @altoviz/n8n-nodes-altoviz
npm_version: 0.9.15
community_fetched_at: 2026-07-14T14:40:34.100Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "customer",
      "options": [
        {
          "name": "Bank Account",
          "value": "bankAccount"
        },
        {
          "name": "Classification",
          "value": "classification"
        },
        {
          "name": "Colleague",
          "value": "colleague"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Customer",
          "value": "customer"
        },
        {
          "name": "Customer Family",
          "value": "customerFamily"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Product Family",
          "value": "productFamily"
        },
        {
          "name": "Product Image",
          "value": "productImage"
        },
        {
          "name": "Purchase Invoice",
          "value": "purchaseInvoice"
        },
        {
          "name": "Receipt",
          "value": "receipt"
        },
        {
          "name": "Sale Credit",
          "value": "saleCredit"
        },
        {
          "name": "Sale Invoice",
          "value": "saleInvoice"
        },
        {
          "name": "Sale Quote",
          "value": "saleQuote"
        },
        {
          "name": "Setting",
          "value": "setting"
        },
        {
          "name": "Supplier",
          "value": "supplier"
        },
        {
          "name": "Unit",
          "value": "unit"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "VAT",
          "value": "vat"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "listProviders",
      "options": [
        {
          "name": "List Providers",
          "value": "listProviders",
          "action": "List bank account providers",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "."
                  }
                }
              ]
            },
            "request": {
              "url": "/v1/BankAccounts/Providers",
              "method": "GET"
            }
          },
          "description": "List supported bank account providers"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bankAccount"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List classifications",
          "routing": {
            "request": {
              "url": "/v1/Classifications",
              "method": "GET"
            }
          },
          "description": "List all classifications"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "classification"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a colleague",
          "routing": {
            "request": {
              "url": "/v1/Colleagues",
              "method": "POST"
            }
          },
          "description": "Create a new colleague"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a colleague",
          "routing": {
            "request": {
              "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a colleague"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a colleague",
          "routing": {
            "request": {
              "url": "/v1/Colleagues/Find",
              "method": "GET"
            }
          },
          "description": "Find colleague by email, internal ID, or number"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a colleague",
          "routing": {
            "request": {
              "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a colleague by ID"
        },
        {
          "name": "Get By Internal ID",
          "value": "getByInternalId",
          "action": "Get colleague by internal ID",
          "routing": {
            "request": {
              "url": "=/v1/Colleagues/GetByInternalId/{{$parameter[\"internalId\"]}}",
              "method": "GET"
            }
          },
          "description": "Find a single colleague by its internal ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List colleagues",
          "routing": {
            "request": {
              "url": "/v1/Colleagues",
              "method": "GET"
            }
          },
          "description": "List colleagues"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a colleague",
          "routing": {
            "request": {
              "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a colleague"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "colleague"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a contact",
          "routing": {
            "request": {
              "url": "/v1/Contacts",
              "method": "POST"
            }
          },
          "description": "Create a new contact"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a contact",
          "routing": {
            "request": {
              "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a contact"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a contact",
          "routing": {
            "request": {
              "url": "/v1/Contacts/Find",
              "method": "GET"
            }
          },
          "description": "Find a contact by email or internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a contact",
          "routing": {
            "request": {
              "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a contact by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List contacts",
          "routing": {
            "request": {
              "url": "/v1/Contacts",
              "method": "GET"
            }
          },
          "description": "List contacts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a contact",
          "routing": {
            "request": {
              "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a contact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a customer",
          "routing": {
            "request": {
              "url": "/v1/Customers",
              "method": "POST"
            }
          },
          "description": "Create a new customer"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a customer",
          "routing": {
            "request": {
              "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a customer"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a customer",
          "routing": {
            "request": {
              "url": "/v1/Customers/Find",
              "method": "GET"
            }
          },
          "description": "Find a customer by email, internal ID, or number"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a customer",
          "routing": {
            "request": {
              "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a customer by ID"
        },
        {
          "name": "Get By Internal ID",
          "value": "getByInternalId",
          "action": "Get customer by internal ID",
          "routing": {
            "request": {
              "url": "=/v1/Customers/GetByInternalId/{{$parameter[\"internalId\"]}}",
              "method": "GET"
            }
          },
          "description": "Find a single customer by its internal ID"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get customer contacts",
          "routing": {
            "request": {
              "url": "=/v1/Customers/{{$parameter[\"id\"]}}/contacts",
              "method": "GET"
            }
          },
          "description": "Get contacts of a customer"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List customers",
          "routing": {
            "request": {
              "url": "/v1/Customers",
              "method": "GET"
            }
          },
          "description": "List customers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a customer",
          "routing": {
            "request": {
              "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a customer"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customer"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a customer family",
          "routing": {
            "request": {
              "url": "/v1/CustomerFamilies",
              "method": "POST"
            }
          },
          "description": "Create a new customer family"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a customer family",
          "routing": {
            "request": {
              "url": "=/v1/CustomerFamilies/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a customer family"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a customer family",
          "routing": {
            "request": {
              "url": "/v1/CustomerFamilies/Find",
              "method": "GET"
            }
          },
          "description": "Find a customer family by number or internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a customer family",
          "routing": {
            "request": {
              "url": "=/v1/CustomerFamilies/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a customer family by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List customer families",
          "routing": {
            "request": {
              "url": "/v1/CustomerFamilies",
              "method": "GET"
            }
          },
          "description": "List customer families"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "customerFamily"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "routing": {
            "request": {
              "url": "/v1/Products",
              "method": "POST"
            }
          },
          "description": "Create a new product"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product",
          "routing": {
            "request": {
              "url": "=/v1/Products/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a product"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a product",
          "routing": {
            "request": {
              "url": "/v1/Products/Find",
              "method": "GET"
            }
          },
          "description": "Find a product by number or internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "routing": {
            "request": {
              "url": "=/v1/Products/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a product by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List products",
          "routing": {
            "request": {
              "url": "/v1/Products",
              "method": "GET"
            }
          },
          "description": "List products"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "routing": {
            "request": {
              "url": "=/v1/Products/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product family",
          "routing": {
            "request": {
              "url": "/v1/ProductFamilies",
              "method": "POST"
            }
          },
          "description": "Create a new product family"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product family",
          "routing": {
            "request": {
              "url": "=/v1/ProductFamilies/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a product family"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product family",
          "routing": {
            "request": {
              "url": "=/v1/ProductFamilies/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a product family by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List product families",
          "routing": {
            "request": {
              "url": "/v1/ProductFamilies",
              "method": "GET"
            }
          },
          "description": "List product families"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productFamily"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product image",
          "routing": {
            "request": {
              "url": "=/v1/ProductImages/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a product image"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product image",
          "routing": {
            "request": {
              "url": "=/v1/ProductImages/{{$parameter[\"productId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a product image"
        },
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a product image",
          "routing": {
            "request": {
              "url": "=/v1/ProductImages/{{$parameter[\"productId\"]}}",
              "method": "POST"
            }
          },
          "description": "Add or update a product image"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "productImage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "createFromFile",
      "options": [
        {
          "name": "Create From File",
          "value": "createFromFile",
          "action": "Create purchase invoice from file",
          "routing": {
            "request": {
              "url": "/v1/PurchaseInvoices/file",
              "method": "POST"
            }
          },
          "description": "Create a new purchase invoice from a file"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download purchase invoice as PDF",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "properties": {
                    "destinationProperty": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/PurchaseInvoices/Download/{{$parameter[\"id\"]}}",
              "method": "GET",
              "encoding": "arraybuffer"
            }
          },
          "description": "Download a purchase invoice as PDF"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "purchaseInvoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a receipt",
          "routing": {
            "request": {
              "url": "/v1/Receipts",
              "method": "POST"
            }
          },
          "description": "Create a new receipt"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a receipt",
          "routing": {
            "request": {
              "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a receipt"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a receipt",
          "routing": {
            "request": {
              "url": "/v1/Receipts/Find",
              "method": "GET"
            }
          },
          "description": "Find a receipt by internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a receipt",
          "routing": {
            "request": {
              "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a receipt by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List receipts",
          "routing": {
            "request": {
              "url": "/v1/Receipts",
              "method": "GET"
            }
          },
          "description": "List receipts"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a receipt",
          "routing": {
            "request": {
              "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a receipt"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "receipt"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a sale credit",
          "routing": {
            "request": {
              "url": "/v1/SaleCredits",
              "method": "POST"
            }
          },
          "description": "Create a new draft credit"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a sale credit",
          "routing": {
            "request": {
              "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a draft credit"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a sale credit as PDF",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "properties": {
                    "destinationProperty": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/SaleCredits/Download/{{$parameter[\"id\"]}}",
              "method": "GET",
              "encoding": "arraybuffer"
            }
          },
          "description": "Download the credit as a PDF"
        },
        {
          "name": "Finalize",
          "value": "finalize",
          "action": "Finalize a sale credit",
          "routing": {
            "request": {
              "url": "=/v1/SaleCredits/Finalize/{{$parameter[\"id\"]}}",
              "method": "POST"
            }
          },
          "description": "Finalize a draft credit"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a sale credit",
          "routing": {
            "request": {
              "url": "/v1/SaleCredits/Find",
              "method": "GET"
            }
          },
          "description": "Find credits by internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a sale credit",
          "routing": {
            "request": {
              "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a credit by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List sale credits",
          "routing": {
            "request": {
              "url": "/v1/SaleCredits",
              "method": "GET"
            }
          },
          "description": "List credits"
        },
        {
          "name": "Mark as Refunded",
          "value": "markAsRefunded",
          "action": "Mark a sale credit as refunded",
          "routing": {
            "request": {
              "url": "/v1/SaleCredits/MarkAsRefunded",
              "method": "POST"
            }
          },
          "description": "Mark a credit as refunded"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a sale credit",
          "routing": {
            "request": {
              "url": "=/v1/SaleCredits/Send/{{$parameter[\"id\"]}}",
              "method": "POST"
            }
          },
          "description": "Send a credit by email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a sale credit",
          "routing": {
            "request": {
              "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a draft credit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "saleCredit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a sale invoice",
          "routing": {
            "request": {
              "url": "/v1/SaleInvoices",
              "method": "POST"
            }
          },
          "description": "Create a new draft invoice"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a sale invoice",
          "routing": {
            "request": {
              "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a draft invoice"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a sale invoice as PDF",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "properties": {
                    "destinationProperty": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/SaleInvoices/Download/{{$parameter[\"id\"]}}",
              "method": "GET",
              "encoding": "arraybuffer"
            }
          },
          "description": "Download the invoice as a PDF"
        },
        {
          "name": "Finalize",
          "value": "finalize",
          "action": "Finalize a sale invoice",
          "routing": {
            "request": {
              "url": "=/v1/SaleInvoices/Finalize/{{$parameter[\"id\"]}}",
              "method": "POST"
            }
          },
          "description": "Finalize a draft invoice"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a sale invoice",
          "routing": {
            "request": {
              "url": "/v1/SaleInvoices/Find",
              "method": "GET"
            }
          },
          "description": "Find invoices by internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a sale invoice",
          "routing": {
            "request": {
              "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get an invoice by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List sale invoices",
          "routing": {
            "request": {
              "url": "/v1/SaleInvoices",
              "method": "GET"
            }
          },
          "description": "List invoices"
        },
        {
          "name": "Mark as Paid",
          "value": "markAsPaid",
          "action": "Mark a sale invoice as paid",
          "routing": {
            "request": {
              "url": "/v1/SaleInvoices/MarkAsPaid",
              "method": "POST"
            }
          },
          "description": "Mark an invoice as paid"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a sale invoice",
          "routing": {
            "request": {
              "url": "=/v1/SaleInvoices/Send/{{$parameter[\"id\"]}}",
              "method": "POST"
            }
          },
          "description": "Send an invoice by email"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a sale invoice",
          "routing": {
            "request": {
              "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a draft invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "saleInvoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a sale quote",
          "routing": {
            "request": {
              "url": "/v1/SaleQuotes",
              "method": "POST"
            }
          },
          "description": "Create a new quote"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a sale quote",
          "routing": {
            "request": {
              "url": "=/v1/SaleQuotes/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a quote"
        },
        {
          "name": "Download",
          "value": "download",
          "action": "Download a sale quote as PDF",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "binaryData",
                  "properties": {
                    "destinationProperty": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/v1/SaleQuotes/Download/{{$parameter[\"id\"]}}",
              "method": "GET",
              "encoding": "arraybuffer"
            }
          },
          "description": "Download the quote as a PDF"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a sale quote",
          "routing": {
            "request": {
              "url": "/v1/SaleQuotes/Find",
              "method": "GET"
            }
          },
          "description": "Find quotes by internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a sale quote",
          "routing": {
            "request": {
              "url": "=/v1/SaleQuotes/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a quote by ID"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List sale quotes",
          "routing": {
            "request": {
              "url": "/v1/SaleQuotes",
              "method": "GET"
            }
          },
          "description": "List quotes"
        },
        {
          "name": "Send",
          "value": "send",
          "action": "Send a sale quote",
          "routing": {
            "request": {
              "url": "=/v1/SaleQuotes/Send/{{$parameter[\"id\"]}}",
              "method": "POST"
            }
          },
          "description": "Send a quote by email"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "saleQuote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get",
          "value": "get",
          "action": "Get settings",
          "routing": {
            "request": {
              "url": "/v1/Settings",
              "method": "GET"
            }
          },
          "description": "Get Altoviz account settings"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "setting"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a supplier",
          "routing": {
            "request": {
              "url": "/v1/Suppliers",
              "method": "POST"
            }
          },
          "description": "Create a new supplier"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a supplier",
          "routing": {
            "request": {
              "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
              "method": "DELETE"
            }
          },
          "description": "Delete a supplier"
        },
        {
          "name": "Find",
          "value": "find",
          "action": "Find a supplier",
          "routing": {
            "request": {
              "url": "/v1/Suppliers/Find",
              "method": "GET"
            }
          },
          "description": "Find a supplier by email or internal ID"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a supplier",
          "routing": {
            "request": {
              "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a supplier by ID"
        },
        {
          "name": "Get By Internal ID",
          "value": "getByInternalId",
          "action": "Get a supplier by internal ID",
          "routing": {
            "request": {
              "url": "=/v1/Suppliers/GetByInternalId/{{$parameter[\"internalId\"]}}",
              "method": "GET"
            }
          },
          "description": "Get a supplier by internal ID"
        },
        {
          "name": "Get Contacts",
          "value": "getContacts",
          "action": "Get supplier contacts",
          "routing": {
            "request": {
              "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}/contacts",
              "method": "GET"
            }
          },
          "description": "Get supplier contacts"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List suppliers",
          "routing": {
            "request": {
              "url": "/v1/Suppliers",
              "method": "GET"
            }
          },
          "description": "List suppliers"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a supplier",
          "routing": {
            "request": {
              "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
              "method": "PUT"
            }
          },
          "description": "Update a supplier"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "supplier"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List units",
          "routing": {
            "request": {
              "url": "/v1/Units",
              "method": "GET"
            }
          },
          "description": "List all units"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "unit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMe",
      "options": [
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get current user",
          "routing": {
            "request": {
              "url": "/v1/Users/me",
              "method": "GET"
            }
          },
          "description": "Get the current authenticated user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "List",
          "value": "list",
          "action": "List VAT rates",
          "routing": {
            "request": {
              "url": "/v1/Vats",
              "method": "GET"
            }
          },
          "description": "List all VAT rates"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vat"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "list",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "request": {
              "url": "/v1/Webhooks",
              "method": "POST"
            }
          },
          "description": "Register a new webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "request": {
              "url": "/v1/Webhooks",
              "method": "DELETE"
            }
          },
          "description": "Unregister a webhook"
        },
        {
          "name": "List",
          "value": "list",
          "action": "List webhooks",
          "routing": {
            "request": {
              "url": "/v1/Webhooks",
              "method": "GET"
            }
          },
          "description": "List all webhooks"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "List Providers",
      "value": "listProviders",
      "action": "List bank account providers",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "."
              }
            }
          ]
        },
        "request": {
          "url": "/v1/BankAccounts/Providers",
          "method": "GET"
        }
      },
      "description": "List supported bank account providers",
      "resource": "bankAccount"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List classifications",
      "routing": {
        "request": {
          "url": "/v1/Classifications",
          "method": "GET"
        }
      },
      "description": "List all classifications",
      "resource": "classification"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a colleague",
      "routing": {
        "request": {
          "url": "/v1/Colleagues",
          "method": "POST"
        }
      },
      "description": "Create a new colleague",
      "resource": "colleague"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a colleague",
      "routing": {
        "request": {
          "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a colleague",
      "resource": "colleague"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a colleague",
      "routing": {
        "request": {
          "url": "/v1/Colleagues/Find",
          "method": "GET"
        }
      },
      "description": "Find colleague by email, internal ID, or number",
      "resource": "colleague"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a colleague",
      "routing": {
        "request": {
          "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a colleague by ID",
      "resource": "colleague"
    },
    {
      "name": "Get By Internal ID",
      "value": "getByInternalId",
      "action": "Get colleague by internal ID",
      "routing": {
        "request": {
          "url": "=/v1/Colleagues/GetByInternalId/{{$parameter[\"internalId\"]}}",
          "method": "GET"
        }
      },
      "description": "Find a single colleague by its internal ID",
      "resource": "colleague"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List colleagues",
      "routing": {
        "request": {
          "url": "/v1/Colleagues",
          "method": "GET"
        }
      },
      "description": "List colleagues",
      "resource": "colleague"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a colleague",
      "routing": {
        "request": {
          "url": "=/v1/Colleagues/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a colleague",
      "resource": "colleague"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a contact",
      "routing": {
        "request": {
          "url": "/v1/Contacts",
          "method": "POST"
        }
      },
      "description": "Create a new contact",
      "resource": "contact"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a contact",
      "routing": {
        "request": {
          "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a contact",
      "resource": "contact"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a contact",
      "routing": {
        "request": {
          "url": "/v1/Contacts/Find",
          "method": "GET"
        }
      },
      "description": "Find a contact by email or internal ID",
      "resource": "contact"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a contact",
      "routing": {
        "request": {
          "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a contact by ID",
      "resource": "contact"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List contacts",
      "routing": {
        "request": {
          "url": "/v1/Contacts",
          "method": "GET"
        }
      },
      "description": "List contacts",
      "resource": "contact"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a contact",
      "routing": {
        "request": {
          "url": "=/v1/Contacts/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a contact",
      "resource": "contact"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a customer",
      "routing": {
        "request": {
          "url": "/v1/Customers",
          "method": "POST"
        }
      },
      "description": "Create a new customer",
      "resource": "customer"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a customer",
      "routing": {
        "request": {
          "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a customer",
      "resource": "customer"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a customer",
      "routing": {
        "request": {
          "url": "/v1/Customers/Find",
          "method": "GET"
        }
      },
      "description": "Find a customer by email, internal ID, or number",
      "resource": "customer"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a customer",
      "routing": {
        "request": {
          "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a customer by ID",
      "resource": "customer"
    },
    {
      "name": "Get By Internal ID",
      "value": "getByInternalId",
      "action": "Get customer by internal ID",
      "routing": {
        "request": {
          "url": "=/v1/Customers/GetByInternalId/{{$parameter[\"internalId\"]}}",
          "method": "GET"
        }
      },
      "description": "Find a single customer by its internal ID",
      "resource": "customer"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get customer contacts",
      "routing": {
        "request": {
          "url": "=/v1/Customers/{{$parameter[\"id\"]}}/contacts",
          "method": "GET"
        }
      },
      "description": "Get contacts of a customer",
      "resource": "customer"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List customers",
      "routing": {
        "request": {
          "url": "/v1/Customers",
          "method": "GET"
        }
      },
      "description": "List customers",
      "resource": "customer"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a customer",
      "routing": {
        "request": {
          "url": "=/v1/Customers/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a customer",
      "resource": "customer"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a customer family",
      "routing": {
        "request": {
          "url": "/v1/CustomerFamilies",
          "method": "POST"
        }
      },
      "description": "Create a new customer family",
      "resource": "customerFamily"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a customer family",
      "routing": {
        "request": {
          "url": "=/v1/CustomerFamilies/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a customer family",
      "resource": "customerFamily"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a customer family",
      "routing": {
        "request": {
          "url": "/v1/CustomerFamilies/Find",
          "method": "GET"
        }
      },
      "description": "Find a customer family by number or internal ID",
      "resource": "customerFamily"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a customer family",
      "routing": {
        "request": {
          "url": "=/v1/CustomerFamilies/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a customer family by ID",
      "resource": "customerFamily"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List customer families",
      "routing": {
        "request": {
          "url": "/v1/CustomerFamilies",
          "method": "GET"
        }
      },
      "description": "List customer families",
      "resource": "customerFamily"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "routing": {
        "request": {
          "url": "/v1/Products",
          "method": "POST"
        }
      },
      "description": "Create a new product",
      "resource": "product"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product",
      "routing": {
        "request": {
          "url": "=/v1/Products/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a product",
      "resource": "product"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a product",
      "routing": {
        "request": {
          "url": "/v1/Products/Find",
          "method": "GET"
        }
      },
      "description": "Find a product by number or internal ID",
      "resource": "product"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "routing": {
        "request": {
          "url": "=/v1/Products/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a product by ID",
      "resource": "product"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List products",
      "routing": {
        "request": {
          "url": "/v1/Products",
          "method": "GET"
        }
      },
      "description": "List products",
      "resource": "product"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "routing": {
        "request": {
          "url": "=/v1/Products/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a product",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product family",
      "routing": {
        "request": {
          "url": "/v1/ProductFamilies",
          "method": "POST"
        }
      },
      "description": "Create a new product family",
      "resource": "productFamily"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product family",
      "routing": {
        "request": {
          "url": "=/v1/ProductFamilies/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a product family",
      "resource": "productFamily"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product family",
      "routing": {
        "request": {
          "url": "=/v1/ProductFamilies/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a product family by ID",
      "resource": "productFamily"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List product families",
      "routing": {
        "request": {
          "url": "/v1/ProductFamilies",
          "method": "GET"
        }
      },
      "description": "List product families",
      "resource": "productFamily"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product image",
      "routing": {
        "request": {
          "url": "=/v1/ProductImages/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a product image",
      "resource": "productImage"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product image",
      "routing": {
        "request": {
          "url": "=/v1/ProductImages/{{$parameter[\"productId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a product image",
      "resource": "productImage"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a product image",
      "routing": {
        "request": {
          "url": "=/v1/ProductImages/{{$parameter[\"productId\"]}}",
          "method": "POST"
        }
      },
      "description": "Add or update a product image",
      "resource": "productImage"
    },
    {
      "name": "Create From File",
      "value": "createFromFile",
      "action": "Create purchase invoice from file",
      "routing": {
        "request": {
          "url": "/v1/PurchaseInvoices/file",
          "method": "POST"
        }
      },
      "description": "Create a new purchase invoice from a file",
      "resource": "purchaseInvoice"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download purchase invoice as PDF",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "properties": {
                "destinationProperty": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/PurchaseInvoices/Download/{{$parameter[\"id\"]}}",
          "method": "GET",
          "encoding": "arraybuffer"
        }
      },
      "description": "Download a purchase invoice as PDF",
      "resource": "purchaseInvoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a receipt",
      "routing": {
        "request": {
          "url": "/v1/Receipts",
          "method": "POST"
        }
      },
      "description": "Create a new receipt",
      "resource": "receipt"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a receipt",
      "routing": {
        "request": {
          "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a receipt",
      "resource": "receipt"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a receipt",
      "routing": {
        "request": {
          "url": "/v1/Receipts/Find",
          "method": "GET"
        }
      },
      "description": "Find a receipt by internal ID",
      "resource": "receipt"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a receipt",
      "routing": {
        "request": {
          "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a receipt by ID",
      "resource": "receipt"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List receipts",
      "routing": {
        "request": {
          "url": "/v1/Receipts",
          "method": "GET"
        }
      },
      "description": "List receipts",
      "resource": "receipt"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a receipt",
      "routing": {
        "request": {
          "url": "=/v1/Receipts/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a receipt",
      "resource": "receipt"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a sale credit",
      "routing": {
        "request": {
          "url": "/v1/SaleCredits",
          "method": "POST"
        }
      },
      "description": "Create a new draft credit",
      "resource": "saleCredit"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a sale credit",
      "routing": {
        "request": {
          "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a draft credit",
      "resource": "saleCredit"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a sale credit as PDF",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "properties": {
                "destinationProperty": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/SaleCredits/Download/{{$parameter[\"id\"]}}",
          "method": "GET",
          "encoding": "arraybuffer"
        }
      },
      "description": "Download the credit as a PDF",
      "resource": "saleCredit"
    },
    {
      "name": "Finalize",
      "value": "finalize",
      "action": "Finalize a sale credit",
      "routing": {
        "request": {
          "url": "=/v1/SaleCredits/Finalize/{{$parameter[\"id\"]}}",
          "method": "POST"
        }
      },
      "description": "Finalize a draft credit",
      "resource": "saleCredit"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a sale credit",
      "routing": {
        "request": {
          "url": "/v1/SaleCredits/Find",
          "method": "GET"
        }
      },
      "description": "Find credits by internal ID",
      "resource": "saleCredit"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a sale credit",
      "routing": {
        "request": {
          "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a credit by ID",
      "resource": "saleCredit"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List sale credits",
      "routing": {
        "request": {
          "url": "/v1/SaleCredits",
          "method": "GET"
        }
      },
      "description": "List credits",
      "resource": "saleCredit"
    },
    {
      "name": "Mark as Refunded",
      "value": "markAsRefunded",
      "action": "Mark a sale credit as refunded",
      "routing": {
        "request": {
          "url": "/v1/SaleCredits/MarkAsRefunded",
          "method": "POST"
        }
      },
      "description": "Mark a credit as refunded",
      "resource": "saleCredit"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a sale credit",
      "routing": {
        "request": {
          "url": "=/v1/SaleCredits/Send/{{$parameter[\"id\"]}}",
          "method": "POST"
        }
      },
      "description": "Send a credit by email",
      "resource": "saleCredit"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a sale credit",
      "routing": {
        "request": {
          "url": "=/v1/SaleCredits/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a draft credit",
      "resource": "saleCredit"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a sale invoice",
      "routing": {
        "request": {
          "url": "/v1/SaleInvoices",
          "method": "POST"
        }
      },
      "description": "Create a new draft invoice",
      "resource": "saleInvoice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a sale invoice",
      "routing": {
        "request": {
          "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a draft invoice",
      "resource": "saleInvoice"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a sale invoice as PDF",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "properties": {
                "destinationProperty": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/SaleInvoices/Download/{{$parameter[\"id\"]}}",
          "method": "GET",
          "encoding": "arraybuffer"
        }
      },
      "description": "Download the invoice as a PDF",
      "resource": "saleInvoice"
    },
    {
      "name": "Finalize",
      "value": "finalize",
      "action": "Finalize a sale invoice",
      "routing": {
        "request": {
          "url": "=/v1/SaleInvoices/Finalize/{{$parameter[\"id\"]}}",
          "method": "POST"
        }
      },
      "description": "Finalize a draft invoice",
      "resource": "saleInvoice"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a sale invoice",
      "routing": {
        "request": {
          "url": "/v1/SaleInvoices/Find",
          "method": "GET"
        }
      },
      "description": "Find invoices by internal ID",
      "resource": "saleInvoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a sale invoice",
      "routing": {
        "request": {
          "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get an invoice by ID",
      "resource": "saleInvoice"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List sale invoices",
      "routing": {
        "request": {
          "url": "/v1/SaleInvoices",
          "method": "GET"
        }
      },
      "description": "List invoices",
      "resource": "saleInvoice"
    },
    {
      "name": "Mark as Paid",
      "value": "markAsPaid",
      "action": "Mark a sale invoice as paid",
      "routing": {
        "request": {
          "url": "/v1/SaleInvoices/MarkAsPaid",
          "method": "POST"
        }
      },
      "description": "Mark an invoice as paid",
      "resource": "saleInvoice"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a sale invoice",
      "routing": {
        "request": {
          "url": "=/v1/SaleInvoices/Send/{{$parameter[\"id\"]}}",
          "method": "POST"
        }
      },
      "description": "Send an invoice by email",
      "resource": "saleInvoice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a sale invoice",
      "routing": {
        "request": {
          "url": "=/v1/SaleInvoices/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a draft invoice",
      "resource": "saleInvoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a sale quote",
      "routing": {
        "request": {
          "url": "/v1/SaleQuotes",
          "method": "POST"
        }
      },
      "description": "Create a new quote",
      "resource": "saleQuote"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a sale quote",
      "routing": {
        "request": {
          "url": "=/v1/SaleQuotes/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a quote",
      "resource": "saleQuote"
    },
    {
      "name": "Download",
      "value": "download",
      "action": "Download a sale quote as PDF",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "binaryData",
              "properties": {
                "destinationProperty": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/v1/SaleQuotes/Download/{{$parameter[\"id\"]}}",
          "method": "GET",
          "encoding": "arraybuffer"
        }
      },
      "description": "Download the quote as a PDF",
      "resource": "saleQuote"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a sale quote",
      "routing": {
        "request": {
          "url": "/v1/SaleQuotes/Find",
          "method": "GET"
        }
      },
      "description": "Find quotes by internal ID",
      "resource": "saleQuote"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a sale quote",
      "routing": {
        "request": {
          "url": "=/v1/SaleQuotes/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a quote by ID",
      "resource": "saleQuote"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List sale quotes",
      "routing": {
        "request": {
          "url": "/v1/SaleQuotes",
          "method": "GET"
        }
      },
      "description": "List quotes",
      "resource": "saleQuote"
    },
    {
      "name": "Send",
      "value": "send",
      "action": "Send a sale quote",
      "routing": {
        "request": {
          "url": "=/v1/SaleQuotes/Send/{{$parameter[\"id\"]}}",
          "method": "POST"
        }
      },
      "description": "Send a quote by email",
      "resource": "saleQuote"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get settings",
      "routing": {
        "request": {
          "url": "/v1/Settings",
          "method": "GET"
        }
      },
      "description": "Get Altoviz account settings",
      "resource": "setting"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a supplier",
      "routing": {
        "request": {
          "url": "/v1/Suppliers",
          "method": "POST"
        }
      },
      "description": "Create a new supplier",
      "resource": "supplier"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a supplier",
      "routing": {
        "request": {
          "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
          "method": "DELETE"
        }
      },
      "description": "Delete a supplier",
      "resource": "supplier"
    },
    {
      "name": "Find",
      "value": "find",
      "action": "Find a supplier",
      "routing": {
        "request": {
          "url": "/v1/Suppliers/Find",
          "method": "GET"
        }
      },
      "description": "Find a supplier by email or internal ID",
      "resource": "supplier"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a supplier",
      "routing": {
        "request": {
          "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a supplier by ID",
      "resource": "supplier"
    },
    {
      "name": "Get By Internal ID",
      "value": "getByInternalId",
      "action": "Get a supplier by internal ID",
      "routing": {
        "request": {
          "url": "=/v1/Suppliers/GetByInternalId/{{$parameter[\"internalId\"]}}",
          "method": "GET"
        }
      },
      "description": "Get a supplier by internal ID",
      "resource": "supplier"
    },
    {
      "name": "Get Contacts",
      "value": "getContacts",
      "action": "Get supplier contacts",
      "routing": {
        "request": {
          "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}/contacts",
          "method": "GET"
        }
      },
      "description": "Get supplier contacts",
      "resource": "supplier"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List suppliers",
      "routing": {
        "request": {
          "url": "/v1/Suppliers",
          "method": "GET"
        }
      },
      "description": "List suppliers",
      "resource": "supplier"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a supplier",
      "routing": {
        "request": {
          "url": "=/v1/Suppliers/{{$parameter[\"id\"]}}",
          "method": "PUT"
        }
      },
      "description": "Update a supplier",
      "resource": "supplier"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List units",
      "routing": {
        "request": {
          "url": "/v1/Units",
          "method": "GET"
        }
      },
      "description": "List all units",
      "resource": "unit"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get current user",
      "routing": {
        "request": {
          "url": "/v1/Users/me",
          "method": "GET"
        }
      },
      "description": "Get the current authenticated user",
      "resource": "user"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List VAT rates",
      "routing": {
        "request": {
          "url": "/v1/Vats",
          "method": "GET"
        }
      },
      "description": "List all VAT rates",
      "resource": "vat"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "request": {
          "url": "/v1/Webhooks",
          "method": "POST"
        }
      },
      "description": "Register a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "request": {
          "url": "/v1/Webhooks",
          "method": "DELETE"
        }
      },
      "description": "Unregister a webhook",
      "resource": "webhook"
    },
    {
      "name": "List",
      "value": "list",
      "action": "List webhooks",
      "routing": {
        "request": {
          "url": "/v1/Webhooks",
          "method": "GET"
        }
      },
      "description": "List all webhooks",
      "resource": "webhook"
    }
  ]

npm_readme:
  # @altoviz/n8n-nodes-altoviz

  [![CI](https://github.com/altoviz/n8n/actions/workflows/ci.yml/badge.svg)](https://github.com/altoviz/n8n/actions/workflows/ci.yml)
  [![Publish](https://github.com/altoviz/n8n/actions/workflows/publish.yml/badge.svg)](https://github.com/altoviz/n8n/actions/workflows/publish.yml)
  [![npm](https://img.shields.io/npm/v/@altoviz/n8n-nodes-altoviz)](https://www.npmjs.com/package/@altoviz/n8n-nodes-altoviz)

  This is an n8n community node package that integrates [Altoviz](https://altoviz.com) with your n8n workflow, so you can create quotes and invoices, extract customers data and more. It provides two nodes — **Altoviz** (action) and **Altoviz Trigger** (webhook) — covering all 20 API resources.

  [Altoviz](https://altoviz.com) is a French invoicing and accounting app for small businesses and freelancers.

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

  [Installation (self-hosted)](#installation-self-hosted)
  [Installation (n8n Cloud)](#installation-n8n-cloud)
  [Installation (development and contributing)](#installation-development-and-contributing)
  [Operations](#operations)
  [Credentials](#credentials)
  [Usage](#usage)
  [Compatibility](#compatibility)
  [Resources](#resources)
  [Version history](#version-history)

  ## Installation (self-hosted)

  To install the node directly from the n8n Editor UI:

  1. Open your n8n instance.
  2. Go to **Settings → Community Nodes**.
  3. Select **Install**.
  4. Enter the npm package name: `@altoviz/n8n-nodes-altoviz` to install the latest version.  
     To install a specific version (e.g. 0.2.0), enter `@altoviz/n8n-nodes-altoviz@0.2.0`.
  5. Agree to the [risks](https://docs.n8n.io/integrations/community-nodes/risks/) of using community nodes and select **Install**.
  6. The node is now available in your workflows.

  ## Installation (n8n Cloud)

  1. Go to the Canvas and open the nodes panel.
  2. Search for **Altoviz** in the community node registry.
  3. Click **Install node**.

  ## Installation (development and contributing)

  ### Prerequisites

  - Node.js 18.x or higher
  - npm 9.x or higher

  ```bash
  node --version   # v18.x or higher
  npm --version    # 9.x or higher
  ```

  ### 1. Clone and install dependencies

  ```bash
  git clone https://github.com/altoviz/n8n.git
  cd n8n/src/@altoviz/n8n-nodes-altoviz
  npm install
  ```

  ### 2. Build the node

  ```bash
  npm run build
  ```

  ### 3. Link into your local n8n instance

  ```bash
  # In the node package directory
  npm link

  # In ~/.n8n/nodes
  cd ~/.n8n/nodes
  npm link @altoviz/n8n-nodes-altoviz
  ```

  Then start n8n: `n8n start`

  ### Making changes

  After editing source files, rebuild and restart n8n:

  ```bash
  npm run build
  # restart n8n
  ```

  ### Public webhook URL for the Altoviz Trigger

  When running n8n locally, webhook URLs use `localhost` which Altoviz cannot reach. Set a publicly accessible URL before starting n8n:

  ```bash
  export WEBHOOK_URL="https://your-tunnel.example.com"
  n8n start
  ```

  You can use a tunnelling tool such as [ngrok](https://ngrok.com/) or [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) to expose your local instance.

  ## Operations

  ### Altoviz node

  The node exposes a **Resource** dropdown with 20 resources. Each resource supports one or more operations:

  | Resource         | Operations                                                                                |
  | ---------------- | ----------------------------------------------------------------------------------------- |
  | Bank Account     | List Providers                                                                            |
  | Classification   | List                                                                                      |
  | Colleague        | Create, Delete, Find, Get, Get By Internal ID, List, Update                               |
  | Contact          | Create, Delete, Find, Get, List, Update                                                   |
  | Customer         | Create, Delete, Find, Get, Get By Internal ID, Get Contacts, List, Update                 |
  | Customer Family  | Create, Delete, Find, Get, List                                                           |
  | Product          | Create, Delete, Find, Get, List, Update                                                   |
  | Product Family   | Create, Delete, Get, List                                                                 |
  | Product Image    | Delete, Get, Upload                                                                       |
  | Purchase Invoice | Create From File, Download (PDF)                                                          |
  | Receipt          | Create, Delete, Find, Get, List, Update                                                   |
  | Sale Credit      | Create, Delete, Download (PDF), Finalize, Find, Get, List, Mark as Refunded, Send, Update |
  | Sale Invoice     | Create, Delete, Download (PDF), Finalize, Find, Get, List, Mark as Paid, Send, Update     |
  | Sale Quote       | Create, Delete, Download (PDF), Find, Get, List, Send                                     |
  | Setting          | Get                                                                                       |
  | Supplier         | Create, Delete, Find, Get, Get By Internal ID, Get Contacts, List, Update                 |
  | Unit             | List                                                                                      |
  | User             | Get Me                                                                                    |
  | VAT              | List                                                                                      |
  | Webhook          | Create, Delete, List                                                                      |

  ### Altoviz Trigger node

  Listens for Altoviz webhook events and starts the workflow when one is received. Supported events:

  - Contact Created / Updated / Deleted
  - Customer Created / Updated / Deleted
  - Invoice Created / Updated / Deleted
  - Product Created / Updated / Deleted
  - Quote Created / Updated / Deleted

  On activation the node automatically registers a webhook in Altoviz. On deactivation it removes it.

  ## Credentials

  1. In Altoviz, generate an API key (**Settings → Integrations → API**).
  2. In n8n, create a new **Altoviz API** credential and paste the key.
  3. n8n will test the credential against `GET /Hello` — a green checkmark confirms it is valid.

  ## Usage

  ### Sending a sale invoice by email

  1. Add the **Altoviz** node to your workflow.
  2. Select **Resource → Sale Invoice** and **Operation → Send**.
  3. Set the **Invoice ID** — for example from a previous _Create_ or _Find_ step.
  4. Connect n8n credentials (**Altoviz API**).
  5. Execute the node.

  ### Automating a quote-to-invoice flow

  1. **Altoviz** node — **Sale Quote → Create** — fill in customer, lines, and date.
  2. **Altoviz** node — **Sale Quote → Find** — retrieve the newly created quote ID.
  3. **Altoviz** node — **Sale Invoice → Create** — create the invoice from the same data.
  4. **Altoviz** node — **Sale Invoice → Finalize** — lock the invoice.
  5. **Altoviz** node — **Sale Invoice → Send** — email it to the customer.

  ### Reacting to Altoviz events

  1. Add the **Altoviz Trigger** node to start your workflow.
  2. Select one or more **Events** (e.g. _Invoice Created_).
  3. Optionally set a **Secret Key** to verify the `X-Altoviz-Signature` header and reject forged requests.
  4. Activate the workflow — the trigger automatically registers a webhook in Altoviz and removes it when deactivated.
  5. Connect downstream nodes to process the event payload (customer ID, invoice number, etc.).

  ## Compatibility

  Requires **n8n v1.x** or later (n8n nodes API version 1). Tested against n8n v1.

  ## Resources

  - [Altoviz website](https://altoviz.com)
  - [Altoviz DevHub developer website](https://developer.altoviz.com)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
  - [Source code](https://github.com/altoviz/n8n.git)

  ## Version history

  ### 0.9.0

  - Initial release — all 20 Altoviz API resources, Altoviz Trigger webhook node

ai_documentation_summary:
  {"purpose":"Integrates Altoviz, a French invoicing and accounting app for small businesses, with n8n workflows to manage quotes, invoices, customers, and other financial data.","capabilities":["Create, update, delete, and retrieve customers, contacts, colleagues, suppliers, and products","Generate and manage sale quotes, invoices, and purchase invoices (including PDF download)","Handle sale credits and receipts (finalize, mark as paid/refunded, send)","Manage bank accounts, classifications, units, VAT, and product images","Configure webhooks and settings","Receive real-time webhook events from Altoviz via the Trigger node"],"authentication":"API key required","commonUseCases":["Automated invoice generation and sending upon order completion","Synchronization of customer and contact data between Altoviz and other systems","Automated tax reporting using VAT and classification data","Triggering workflows when new invoices are finalized or payments are marked"],"limitations":["Requires a publicly accessible webhook URL when running n8n locally to receive Altoviz events","Specific to French invoicing and accounting standards"],"relatedNodes":["Webhook","HTTP Request"]}


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

updated_at: 2026-07-14 14:40:34
author_name: thesubspaceio
author_github_url: https://github.com/thesubspaceio/
npm_package_name: n8n-nodes-subspace
npm_version: 0.1.1
community_fetched_at: 2026-07-14T14:40:34.102Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Operational company intelligence from DNS, HTTP, and ATS forensics. 88+ fields per domain — no LinkedIn dependency.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "company",
      "options": [
        {
          "name": "Company",
          "value": "company"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "enrich",
      "options": [
        {
          "name": "Enrich by Domain",
          "value": "enrich",
          "action": "Enrich a company by domain",
          "routing": {
            "request": {
              "url": "/api/v1/enrich",
              "method": "GET"
            }
          },
          "description": "Get 88+ operational signals for a company domain — infrastructure, hiring, compliance, ghost-job rate, and more"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "company"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Enrich by Domain",
      "value": "enrich",
      "action": "Enrich a company by domain",
      "routing": {
        "request": {
          "url": "/api/v1/enrich",
          "method": "GET"
        }
      },
      "description": "Get 88+ operational signals for a company domain — infrastructure, hiring, compliance, ghost-job rate, and more",
      "resource": "company"
    }
  ]

npm_readme:
  # n8n-nodes-subspace

  Community n8n node for [Subspace](https://www.thesubspace.io) — operational company intelligence from DNS, HTTP, and ATS forensics. One API call returns 88+ verified facts per company domain with zero LinkedIn dependency.

  ## What you get

  For any company domain, Subspace returns fields including:

  - **Operating status** — active, inactive, acquired, hiring paused
  - **Hiring signals** — ghost job rate, fresh jobs, total jobs, ATS provider, hiring verdict
  - **8 cost-center scores** (0–100) — IT infrastructure, engineering & product, sales & marketing, HR & hiring, legal & compliance, finance & RevOps, telecom & remote, corporate development
  - **Enterprise stack booleans** — enterprise CDN, WAF, enterprise SSO (Okta/Azure), DMARC enforcement, compliance program (SOC 2 / ISO 27001), enterprise UC (Teams / Zoom Phone), ad spend detected
  - **Revenue & M&A signals** — billing model, recent funding, possible acquisition, SEC filer status
  - **Overall health** — `quality_score` 0–100, `hiring_verdict`

  Every field is derived from public, deterministic sources: DNS records, HTTP headers, SSL certificate transparency, government filings (SEC, H-1B, WARN, patents), Common Crawl, and ATS API responses. No LinkedIn scraping, no AI hallucination.

  ## Install

  ### On n8n Cloud (verified install)

  > Pending n8n Creator Portal verification. Once verified, install directly from the Nodes panel in your n8n Cloud workflow editor — search "Subspace" and click install.

  ### On self-hosted n8n (manual install)

  1. Go to **Settings → Community Nodes** in your n8n instance
  2. Enter the package name: `n8n-nodes-subspace`
  3. Click install

  Or via npm:

  ```bash
  npm install n8n-nodes-subspace
  ```

  ## Get an API key

  Subspace is in **open beta — all features are free**. Generate an API key at [thesubspace.io/settings](https://www.thesubspace.io/settings). No credit card required.

  ## Credentials

  Configure a `Subspace API` credential in n8n with your API key. The key is sent as the `x-api-key` header on every request.

  The credential test hits `GET /api/v1/enrich?domain=stripe.com` to validate the key is live.

  ## Actions

  ### Company → Enrich by Domain

  Returns 88+ operational signals for a company domain.

  **Input**
  - `Domain` (string, required) — apex domain (e.g. `stripe.com`). Avoid `www.` or subdomains.

  **Output (excerpt)**
  ```json
  {
    "domain": "stripe.com",
    "company_name": "Stripe",
    "operating_status": "active",
    "ats_provider": "greenhouse",
    "company_size": "enterprise",
    "hiring_actively": true,
    "total_jobs": 285,
    "quality_score": 82,
    "hiring_verdict": "Healthy",
    "it_infrastructure_score": 94,
    "it_infrastructure_tier": "Enterprise",
    "engineering_product_score": 78,
    "hr_hiring_score": 65,
    "cdn_enterprise": true,
    "waf_active": true,
    "dmarc_enforcing": true,
    "has_enterprise_sso": true,
    "is_spending_on_ads": true,
    "has_compliance_program": true,
    "billing_model": "saas_payments",
    "possible_acquisition": false,
    "recent_funding": true
  }
  ```

  See the full response schema at [thesubspace.io/docs/api](https://www.thesubspace.io/docs/api).

  ## Example workflows

  - **Enrich Clay exports** — filter lead lists by `quality_score >= 60` before pushing to outbound
  - **HubSpot lifecycle sync** — trigger on new company, enrich with Subspace, write scores to contact properties
  - **Apollo + Subspace** — complement firmographic enrichment with operational signals; skip companies with `ghost_job_rate > 60`
  - **Watchlist distress alerts** — daily re-check of CRM accounts, Slack alert on `hiring_verdict` change

  Published templates coming to [n8n.io/workflows](https://n8n.io/workflows) — search "Subspace".

  ## Rate limits

  60 requests / minute during beta. Contact [dev@thesubspace.io](mailto:dev@thesubspace.io) if you need higher throughput.

  ## Support

  - Issues: [github.com/thesubspaceio/n8n-nodes-subspace/issues](https://github.com/thesubspaceio/n8n-nodes-subspace/issues)
  - API docs: [thesubspace.io/docs/api](https://www.thesubspace.io/docs/api)
  - Clay integration: [thesubspace.io/integrations/clay](https://www.thesubspace.io/integrations/clay)

  ## License

  [MIT](./LICENSE.md)

ai_documentation_summary:
  {"purpose":"Provides operational company intelligence by analyzing DNS, HTTP, and ATS forensics to extract 88+ verified facts per domain without relying on LinkedIn.","capabilities":["Enrich company domains with 88+ operational signals","Retrieve operating status (active, inactive, acquired, hiring paused)","Analyze hiring signals including ghost job rate and ATS provider","Calculate 8 cost-center scores (IT, Engineering, Sales, HR, Legal, Finance, Telecom, Corporate Dev)","Detect enterprise stack components (CDN, WAF, SSO, DMARC, Compliance)","Identify revenue and M&A signals (billing model, funding, acquisition potential)","Determine overall health via quality_score and hiring_verdict"],"authentication":"API key required (x-api-key header)","commonUseCases":["Filter lead lists by quality_score before outreach","Sync operational data into HubSpot lifecycle stages","Complement firmographic enrichment with hiring and tech stack data","Monitor CRM accounts for distress signals via hiring verdict changes"],"limitations":["Rate limited to 60 requests per minute during beta","Requires apex domain input (subdomains like www. are not supported)","Currently in open beta with free access"],"relatedNodes":[]}


node_type: @ixiam/n8n-nodes-civicrm.civiCrm
package_name: @ixiam/n8n-nodes-civicrm
display_name: CiviCRM
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: ixiam-dev
author_github_url: https://github.com/ixiam/n8n-nodes-civicrm.git
npm_package_name: @ixiam/n8n-nodes-civicrm
npm_version: 2.1.6
community_fetched_at: 2026-07-14T14:40:34.103Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Interact with CiviCRM API v4 (Civi-Go compatible).

  Supports Contact, Membership, Group, Relationship, Activity entities, and Custom API Call.
  Includes dynamic mapping of email, phone, address and location types.
  Includes birth_date validation and JSON filters for GET MANY.

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "contact",
      "options": [
        {
          "name": "Activity",
          "value": "activity"
        },
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Group",
          "value": "group"
        },
        {
          "name": "Membership",
          "value": "membership"
        },
        {
          "name": "Relationship",
          "value": "relationship"
        },
        {
          "name": "Custom API Call",
          "value": "customApi"
        }
      ],
      "description": "The entity to operate on. Choose \"Custom API Call\" to access any CiviCRM APIv4 entity not listed.",
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMany",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "description": "Create a new record"
        },
        {
          "name": "Delete",
          "value": "delete",
          "description": "Delete a record by ID"
        },
        {
          "name": "Get",
          "value": "get",
          "description": "Retrieve a single record by ID"
        },
        {
          "name": "Get Many",
          "value": "getMany",
          "description": "Retrieve multiple records with optional filtering"
        },
        {
          "name": "Update",
          "value": "update",
          "description": "Update a record by ID"
        }
      ],
      "description": "The action to perform on the selected resource.",
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "description": "Create a new record"
    },
    {
      "name": "Delete",
      "value": "delete",
      "description": "Delete a record by ID"
    },
    {
      "name": "Get",
      "value": "get",
      "description": "Retrieve a single record by ID"
    },
    {
      "name": "Get Many",
      "value": "getMany",
      "description": "Retrieve multiple records with optional filtering"
    },
    {
      "name": "Update",
      "value": "update",
      "description": "Update a record by ID"
    }
  ]

npm_readme:
  # n8n-nodes-civicrm

  ![n8n Community Node](https://img.shields.io/badge/n8n-Community%20Node-blue.svg)
  ![CiviCRM API v4](https://img.shields.io/badge/CiviCRM-API%20v4-orange.svg)
  ![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)

  Community Node for **CiviCRM API v4** (Civi-Go compatible)  
  Developed and maintained by **Ixiam Global Solutions**.

  This node enables full integration between **n8n** and **CiviCRM API v4**, supporting create/update/delete operations, smart field mapping, dynamic location types, and advanced filtering on GET operations.

  ---

  ## About CiviCRM

  <p align="center">
    <img src="https://civicrm.org/sites/civicrm.org/files/CiviCRM-logo-2019-F2-200px.png" alt="CiviCRM Logo" width="200"/>
  </p>

  CiviCRM is an open-source Constituent Relationship Management platform designed for nonprofits, NGOs, and advocacy organizations. It supports contact management, memberships, contributions, event registration, email marketing, case management, and reporting. CiviCRM integrates with WordPress, Drupal, and Joomla.

  Download: https://civicrm.org/download

  ---

  ## 🚀 Installation

  1. In your n8n instance, go to:  
     **Settings → Community Nodes → Install**
  2. Enter the package name:

  ```
  @ixiam/n8n-nodes-civicrm
  ```

  3. Approve installation and enable Community Nodes.
  4. If running n8n via Docker, restart/rebuild for the node to load.

  ---

  ## 🔐 Credentials

  The node uses **Bearer Token Authentication**.

  | Field | Description |
  |-------|-------------|
  | **Base URL** | The root URL of your CiviCRM instance (without trailing slash). Example: `https://crm.example.org` |
  | **API Token** | Sent as header `X-Civi-Auth: Bearer <token>` |

  After entering credentials, click **Save** to validate the connection.

  ---

  ## 📦 Supported Entities

  The node includes full API v4 support for the following entities:

  | Entity | Operations |
  |--------|------------|
  | **Contact** | get, getMany, create, update, delete |
  | **Membership** | get, getMany, create, update, delete |
  | **Group** | get, getMany, create, update, delete |
  | **Relationship** | get, getMany, create, update, delete |
  | **Activity** | get, getMany, create, update, delete |
  | **Custom API Call** | full custom API4 request |

  ---

  ## 🧩 Key Features

  ### **1. Dynamic Field Mapping**
  Supports any standard or custom field:

  ```
  first_name = John
  last_name = Doe
  custom_45 = Blue
  ```

  ### **2. Smart Email, Phone & Address Mapping**
  Two ways to set location-aware fields:

  **(A) Simple fields**
  ```
  email = test@example.org
  phone.mobile = 600123456
  address.city = Barcelona
  ```

  **(B) Dynamic prefixes matched to CiviCRM Location Types**
  ```
  work.email = user@company.org
  billing.address.postal_code = 80331
  home.phone.phone_type_id = 2
  ```

  ### **3. Default Location Type selectors**
  If no prefix is used, default types are applied.

  ### **4. Birth Date Normalization**
  Accepted input formats:

  - YYYY-MM-DD
  - DD/MM/YYYY
  - DD-MM-YYYY
  - YYYY/MM/DD
  - YYYY.MM.DD

  Auto-normalized to `YYYY-MM-DD`.

  ### **5. GET MANY with JSON Filters**
  Example:
  ```json
  [
    ["first_name", "LIKE", "Ju%"],
    ["birth_date", ">", "1990-01-01"],
    ["gender_id", "IN", [1, 2]]
  ]
  ```

  ### **6. Custom API Call Mode**
  Example:
  ```json
  {
    "entity": "Contact",
    "action": "get",
    "params": { "limit": 10 }
  }
  ```

  ---

  ## Compatibility

  - **n8n version:** 1.0.0 or higher  
  - **Node.js:** 18 or higher  
  - **CiviCRM:** API v4 compatible (including Civi-Go)

  ---

  ## Development

  Clone the repository and run:

  ```bash
  npm install
  npm run dev
  ```

  Build:

  ```bash
  npm run build
  ```

  ---

  ## Contributions

  Pull requests and issues are welcome in the GitHub repository.

  ---

  ## 🧑‍💻 About Ixiam Global Solutions

  Website: **https://www.ixiam.com**  
  Contact: **info@ixiam.com**

  ---

  ## 📄 License

  MIT License

ai_documentation_summary:
  {"purpose":"This node enables full integration between n8n and CiviCRM API v4, supporting CRUD operations for core entities like Contacts, Memberships, and Groups with advanced field mapping and filtering capabilities.","capabilities":["Create, update, and delete records for Contact, Membership, Group, Relationship, and Activity entities","Dynamic mapping of email, phone, and address fields with support for custom prefixes","Smart location type handling (work, billing, home) with default type selectors","Birth date input normalization across multiple date formats","Advanced GET MANY operations with JSON-based filters (LIKE, >, IN operators)","Custom API v4 calls for unsupported operations or complex queries"],"authentication":"Bearer Token (requires Base URL and API Token sent as X-Civi-Auth header)","commonUseCases":["Synchronizing donor/contact data between n8n workflows and CiviCRM","Automated membership management and renewal tracking","Event registration and activity logging","Custom data extraction using advanced API v4 queries"],"limitations":["Requires CiviCRM API v4 compatibility (Civi-Go supported)","Custom fields must be referenced with specific naming conventions (e.g., custom_45)"],"relatedNodes":[]}


node_type: n8n-nodes-upptime.upptime
package_name: n8n-nodes-upptime
display_name: Upptime
description: Fetch status data from an Upptime status page
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: sakretsos
author_github_url: https://github.com/Sakretsos/
npm_package_name: n8n-nodes-upptime
npm_version: 0.2.2
community_fetched_at: 2026-07-14T14:40:34.104Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Down Services",
          "value": "getDown",
          "action": "Get down services",
          "description": "Get only services that are currently down"
        },
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many monitors",
          "description": "Get status summary for many monitored services"
        },
        {
          "name": "Get Monitor by Name",
          "value": "getByName",
          "action": "Get monitor by name",
          "description": "Get status for a specific monitor by name"
        }
      ],
      "displayName": "Operation",
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Down Services",
      "value": "getDown",
      "action": "Get down services",
      "description": "Get only services that are currently down"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many monitors",
      "description": "Get status summary for many monitored services"
    },
    {
      "name": "Get Monitor by Name",
      "value": "getByName",
      "action": "Get monitor by name",
      "description": "Get status for a specific monitor by name"
    }
  ]

npm_readme:
  # n8n-nodes-upptime

  This is an n8n community node that lets you fetch monitoring data from any [Upptime](https://upptime.js.org/) status page.

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

  ## Installation

  ### Docker

  ```bash
  docker exec -it n8n-n8n-1 sh -c "mkdir -p /home/node/.n8n/custom/node_modules/n8n-nodes-upptime"
  docker cp n8n-nodes-upptime-0.1.0.tgz n8n-n8n-1:/tmp/
  docker exec -it n8n-n8n-1 sh -c "cd /tmp && tar xzf n8n-nodes-upptime-0.1.0.tgz && cp -r package/* /home/node/.n8n/custom/node_modules/n8n-nodes-upptime/"
  docker restart n8n-n8n-1
  ```

  ### Manual

  1. Go to **Settings > Community Nodes** in your n8n instance
  2. Install the package `n8n-nodes-upptime`

  Or manually copy the package contents to:

  ```
  ~/.n8n/custom/node_modules/n8n-nodes-upptime/
  ```

  Then restart n8n.

  ## Credentials

  Before using the node, you need to create **Upptime API** credentials:

  1. In n8n, go to **Credentials > Add Credential**
  2. Search for **Upptime API**
  3. Paste your Upptime `summary.json` raw GitHub URL, for example:
     ```
     https://raw.githubusercontent.com/your-user/your-repo/master/history/summary.json
     ```
  4. Save the credential

  ## Operations

  | Operation | Description |
  |---|---|
  | **Get All Monitors** | Returns all monitored services with their status and uptime data |
  | **Get Monitor by Name** | Fetch a specific monitor by name (case-insensitive) |
  | **Get Down Services** | Returns only services that are currently down |

  ## Output Fields

  Each monitor returns the following data:

  | Field | Description |
  |---|---|
  | `name` | Monitor display name |
  | `slug` | URL-friendly identifier |
  | `status` | Current status (`up` or `down`) |
  | `uptime` | Overall uptime percentage |
  | `uptimeDay` | Uptime percentage for the last 24 hours |
  | `uptimeWeek` | Uptime percentage for the last 7 days |
  | `uptimeMonth` | Uptime percentage for the last 30 days |
  | `uptimeYear` | Uptime percentage for the last year |
  | `time` | Overall average response time (ms) |
  | `timeDay` | Average response time last 24 hours (ms) |
  | `timeWeek` | Average response time last 7 days (ms) |
  | `timeMonth` | Average response time last 30 days (ms) |
  | `timeYear` | Average response time last year (ms) |
  | `dailyMinutesDown` | Object with dates as keys and minutes of downtime as values |

  ## Additional Options

  - **Include Downtime History** - Toggle whether to include the `dailyMinutesDown` field in the output (enabled by default)

  ## Building from Source

  ```bash
  npm install --ignore-scripts
  npm run build
  npm pack
  ```

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Fetches monitoring data, status updates, and uptime statistics from Upptime status pages by connecting to a specific repository's summary.json file.","capabilities":["Retrieve all monitored services with current status and uptime metrics","Fetch a specific monitor by name (case-insensitive)","Retrieve only services that are currently down","Access detailed uptime percentages across 24h, 7d, 30d, and 1-year periods","Access average response time metrics across multiple timeframes","Include or exclude daily downtime history logs"],"authentication":"API key required (specifically a raw GitHub URL to the repository's summary.json file)","commonUseCases":["Integrating external service status pages into internal monitoring dashboards","Triggering alerts when monitored services go down","Aggregating uptime statistics from multiple open-source projects","Creating automated status reports based on community-hosted status pages"],"limitations":["Requires the target status page to be hosted on Upptime with a publicly accessible summary.json file","Authentication relies on a raw GitHub URL rather than a traditional API key or token","Limited to data available from the specific Upptime repository configuration"],"relatedNodes":[]}


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

updated_at: 2026-07-14 14:40:34
author_name: andrej_cognee
author_github_url: https://github.com/topoteretes/cognee-n8n.git
npm_package_name: n8n-nodes-cognee
npm_version: 0.5.1
community_fetched_at: 2026-07-14T14:40:34.105Z
ai_summary_generated_at: 2026-05-02 08:57:17
description:
  Add text data to a Cognee dataset, build a knowledge graph, search Cognee memory, manage datasets, and run the self-improving skill loop (ingest, review, propose, apply)

properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "addData",
      "options": [
        {
          "name": "Add Data",
          "value": "addData"
        },
        {
          "name": "Cognify",
          "value": "cognify"
        },
        {
          "name": "Delete",
          "value": "delete"
        },
        {
          "name": "Search",
          "value": "search"
        },
        {
          "name": "Skill",
          "value": "skill"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "add",
      "options": [
        {
          "name": "Add",
          "value": "add",
          "action": "Add data to cognee datasets",
          "routing": {
            "request": {
              "url": "/add_text",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 300000
            }
          },
          "description": "Add text_data to a Cognee dataset to \"cognify\" later in the Cognee memory engine"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "addData"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "cognify",
      "options": [
        {
          "name": "Cognify",
          "value": "cognify",
          "action": "Cognify an existing dataset into memory",
          "routing": {
            "request": {
              "url": "/cognify",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 600000
            }
          },
          "description": "After adding text data to a Cognee dataset, trigger cognify to build a knowledge graph based memory from it"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "cognify"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "search",
      "options": [
        {
          "name": "Search",
          "value": "search",
          "action": "Search in cognee memory",
          "routing": {
            "request": {
              "url": "/search",
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 300000
            }
          },
          "description": "Run a search query in Cognee memory engine"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "search"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "deleteDataset",
      "options": [
        {
          "name": "Delete Dataset",
          "value": "deleteDataset",
          "action": "Delete a dataset by its ID",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/datasets/{{$parameter[\"datasetId\"]}}",
              "method": "DELETE",
              "timeout": 300000
            }
          },
          "description": "Permanently delete a dataset and all its associated data"
        },
        {
          "name": "Delete Data",
          "value": "deleteData",
          "action": "Delete a specific data item from a dataset",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "set",
                  "properties": {
                    "value": "={{ { \"deleted\": true } }}"
                  }
                }
              ]
            },
            "request": {
              "url": "=/datasets/{{$parameter[\"datasetId\"]}}/data/{{$parameter[\"dataId\"]}}",
              "method": "DELETE",
              "timeout": 300000
            }
          },
          "description": "Remove a specific data item from a dataset while keeping the dataset intact"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "delete"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "ingestSkill",
      "options": [
        {
          "name": "Apply Improvement",
          "value": "applyImprovement",
          "action": "Apply an approved skill improvement proposal",
          "routing": {
            "request": {
              "url": "/v1/remember/entry",
              "body": {
                "entry": {
                  "type": "skill_run",
                  "feedback": -1,
                  "success_score": "={{$parameter[\"successScore\"]}}",
                  "selected_skill_id": "={{$parameter[\"skillName\"]}}"
                },
                "dataset_name": "={{$parameter[\"skillDatasetName\"]}}",
                "skill_improvement": {
                  "apply": true,
                  "skill_name": "={{$parameter[\"skillName\"]}}",
                  "proposal_id": "={{$parameter[\"proposalId\"]}}"
                }
              },
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 300000
            }
          },
          "description": "Apply a previously created proposal to the skill (writes the new procedure)"
        },
        {
          "name": "Get Proposal",
          "value": "getProposal",
          "action": "Get a skill improvement proposal",
          "routing": {
            "request": {
              "url": "=/v1/proposals/{{$parameter[\"proposalId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch a proposal with its before/after procedures, rationale and confidence"
        },
        {
          "name": "Get Skill",
          "value": "getSkill",
          "action": "Get a skill including its procedure body",
          "routing": {
            "request": {
              "url": "=/v1/skills/{{$parameter[\"skillId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch one skill (including its full procedure) by ID"
        },
        {
          "name": "Ingest Skill",
          "value": "ingestSkill",
          "action": "Ingest a skill md into a dataset",
          "routing": {
            "request": {
              "url": "/v1/skills",
              "body": {
                "skill_name": "={{$parameter[\"skillName\"]}}",
                "skills_text": "={{$parameter[\"skillsText\"]}}",
                "dataset_name": "={{$parameter[\"skillDatasetName\"]}}"
              },
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 600000
            }
          },
          "description": "Ingest inline SKILL.md markdown as a dataset-scoped skill (no file upload)"
        },
        {
          "name": "Propose Improvement",
          "value": "proposeImprovement",
          "action": "Propose a skill improvement from a weak run",
          "routing": {
            "request": {
              "url": "/v1/remember/entry",
              "body": {
                "entry": {
                  "type": "skill_run",
                  "feedback": -1,
                  "task_text": "={{$parameter[\"taskText\"]}}",
                  "success_score": "={{$parameter[\"successScore\"]}}",
                  "result_summary": "={{$parameter[\"resultSummary\"]}}",
                  "selected_skill_id": "={{$parameter[\"skillName\"]}}",
                  "candidate_skill_ids": "={{[$parameter[\"skillName\"]]}}"
                },
                "dataset_name": "={{$parameter[\"skillDatasetName\"]}}",
                "skill_improvement": {
                  "apply": false,
                  "skill_name": "={{$parameter[\"skillName\"]}}",
                  "score_threshold": "={{$parameter[\"scoreThreshold\"]}}"
                }
              },
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 300000
            }
          },
          "description": "Record a low-scoring skill run and create a skill-improvement proposal (not applied)"
        },
        {
          "name": "Review Skill",
          "value": "reviewSkill",
          "action": "Run a skill aware agentic review",
          "routing": {
            "output": {
              "postReceive": [
                null
              ]
            },
            "request": {
              "url": "/v1/search",
              "body": {
                "query": "={{$parameter[\"reviewQuery\"]}}",
                "top_k": "={{$parameter[\"reviewTopK\"]}}",
                "skills": "={{[$parameter[\"skillName\"]]}}",
                "datasets": "={{[$parameter[\"skillDatasetName\"]]}}",
                "max_iter": "={{$parameter[\"reviewMaxIter\"]}}",
                "search_type": "AGENTIC_COMPLETION"
              },
              "method": "POST",
              "headers": {
                "Content-Type": "application/json"
              },
              "timeout": 300000
            }
          },
          "description": "Run an AGENTIC_COMPLETION search that loads the given skill to review a task"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "skill"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Add",
      "value": "add",
      "action": "Add data to cognee datasets",
      "routing": {
        "request": {
          "url": "/add_text",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 300000
        }
      },
      "description": "Add text_data to a Cognee dataset to \"cognify\" later in the Cognee memory engine",
      "resource": "addData"
    },
    {
      "name": "Cognify",
      "value": "cognify",
      "action": "Cognify an existing dataset into memory",
      "routing": {
        "request": {
          "url": "/cognify",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 600000
        }
      },
      "description": "After adding text data to a Cognee dataset, trigger cognify to build a knowledge graph based memory from it",
      "resource": "cognify"
    },
    {
      "name": "Search",
      "value": "search",
      "action": "Search in cognee memory",
      "routing": {
        "request": {
          "url": "/search",
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 300000
        }
      },
      "description": "Run a search query in Cognee memory engine",
      "resource": "search"
    },
    {
      "name": "Delete Dataset",
      "value": "deleteDataset",
      "action": "Delete a dataset by its ID",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/datasets/{{$parameter[\"datasetId\"]}}",
          "method": "DELETE",
          "timeout": 300000
        }
      },
      "description": "Permanently delete a dataset and all its associated data",
      "resource": "delete"
    },
    {
      "name": "Delete Data",
      "value": "deleteData",
      "action": "Delete a specific data item from a dataset",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "set",
              "properties": {
                "value": "={{ { \"deleted\": true } }}"
              }
            }
          ]
        },
        "request": {
          "url": "=/datasets/{{$parameter[\"datasetId\"]}}/data/{{$parameter[\"dataId\"]}}",
          "method": "DELETE",
          "timeout": 300000
        }
      },
      "description": "Remove a specific data item from a dataset while keeping the dataset intact",
      "resource": "delete"
    },
    {
      "name": "Apply Improvement",
      "value": "applyImprovement",
      "action": "Apply an approved skill improvement proposal",
      "routing": {
        "request": {
          "url": "/v1/remember/entry",
          "body": {
            "entry": {
              "type": "skill_run",
              "feedback": -1,
              "success_score": "={{$parameter[\"successScore\"]}}",
              "selected_skill_id": "={{$parameter[\"skillName\"]}}"
            },
            "dataset_name": "={{$parameter[\"skillDatasetName\"]}}",
            "skill_improvement": {
              "apply": true,
              "skill_name": "={{$parameter[\"skillName\"]}}",
              "proposal_id": "={{$parameter[\"proposalId\"]}}"
            }
          },
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 300000
        }
      },
      "description": "Apply a previously created proposal to the skill (writes the new procedure)",
      "resource": "skill"
    },
    {
      "name": "Get Proposal",
      "value": "getProposal",
      "action": "Get a skill improvement proposal",
      "routing": {
        "request": {
          "url": "=/v1/proposals/{{$parameter[\"proposalId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch a proposal with its before/after procedures, rationale and confidence",
      "resource": "skill"
    },
    {
      "name": "Get Skill",
      "value": "getSkill",
      "action": "Get a skill including its procedure body",
      "routing": {
        "request": {
          "url": "=/v1/skills/{{$parameter[\"skillId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch one skill (including its full procedure) by ID",
      "resource": "skill"
    },
    {
      "name": "Ingest Skill",
      "value": "ingestSkill",
      "action": "Ingest a skill md into a dataset",
      "routing": {
        "request": {
          "url": "/v1/skills",
          "body": {
            "skill_name": "={{$parameter[\"skillName\"]}}",
            "skills_text": "={{$parameter[\"skillsText\"]}}",
            "dataset_name": "={{$parameter[\"skillDatasetName\"]}}"
          },
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 600000
        }
      },
      "description": "Ingest inline SKILL.md markdown as a dataset-scoped skill (no file upload)",
      "resource": "skill"
    },
    {
      "name": "Propose Improvement",
      "value": "proposeImprovement",
      "action": "Propose a skill improvement from a weak run",
      "routing": {
        "request": {
          "url": "/v1/remember/entry",
          "body": {
            "entry": {
              "type": "skill_run",
              "feedback": -1,
              "task_text": "={{$parameter[\"taskText\"]}}",
              "success_score": "={{$parameter[\"successScore\"]}}",
              "result_summary": "={{$parameter[\"resultSummary\"]}}",
              "selected_skill_id": "={{$parameter[\"skillName\"]}}",
              "candidate_skill_ids": "={{[$parameter[\"skillName\"]]}}"
            },
            "dataset_name": "={{$parameter[\"skillDatasetName\"]}}",
            "skill_improvement": {
              "apply": false,
              "skill_name": "={{$parameter[\"skillName\"]}}",
              "score_threshold": "={{$parameter[\"scoreThreshold\"]}}"
            }
          },
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 300000
        }
      },
      "description": "Record a low-scoring skill run and create a skill-improvement proposal (not applied)",
      "resource": "skill"
    },
    {
      "name": "Review Skill",
      "value": "reviewSkill",
      "action": "Run a skill aware agentic review",
      "routing": {
        "output": {
          "postReceive": [
            null
          ]
        },
        "request": {
          "url": "/v1/search",
          "body": {
            "query": "={{$parameter[\"reviewQuery\"]}}",
            "top_k": "={{$parameter[\"reviewTopK\"]}}",
            "skills": "={{[$parameter[\"skillName\"]]}}",
            "datasets": "={{[$parameter[\"skillDatasetName\"]]}}",
            "max_iter": "={{$parameter[\"reviewMaxIter\"]}}",
            "search_type": "AGENTIC_COMPLETION"
          },
          "method": "POST",
          "headers": {
            "Content-Type": "application/json"
          },
          "timeout": 300000
        }
      },
      "description": "Run an AGENTIC_COMPLETION search that loads the given skill to review a task",
      "resource": "skill"
    }
  ]

npm_readme:
  # n8n-nodes-cognee

  Use Cognee Cloud's AI memory and context engineering directly in your n8n workflows.

  This community node lets you:

  - Add text data to a Cognee dataset
  - Turn data into AI memory with cognify to build knowledge-graph-based memory
  - Run search over your AI memory datasets
  - Delete datasets or individual data items
  - Run the self-improving skill loop: ingest a SKILL.md, review a task with the skill loaded, propose an improvement, review the before/after diff, and apply it

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

  ## Table of contents

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

  ## Installation

  Install from within n8n:

  1. In n8n, go to Settings → Community Nodes
  2. Click Install and search for `n8n-nodes-cognee`, or paste the package name directly
  3. Confirm the installation

  Or install in your n8n instance directory:

  ```bash
  npm install n8n-nodes-cognee
  ```

  Restart n8n after installation if required.

  ## Credentials

  Get your Cognee API key and Base URL from your [Cognee Cloud dashboard](https://docs.cognee.ai/how-to-guides/cognee-cloud) (API Keys page).

  Create credentials of type `Cognee API` in n8n. The node uses these values to authenticate every request:

  - **Base URL**: The base URL of your Cognee Cloud tenant, e.g. `https://tenant-xxx.aws.cognee.ai`. Do not include a trailing `/api` — the node appends it automatically.
  - **API Key**: Your Cognee API key, sent via the `X-Api-Key` header.

  ## Operations

  The node exposes five resources. Each operation maps to a Cognee API endpoint.

  > **Two API surfaces.** The **Add Data / Cognify / Search / Delete** resources call Cognee Cloud's `/api/*` endpoints. The **Skill** resource (self-improving loop) calls the `/api/v1/*` endpoints — available on a self-hosted cognee server today, and on Cognee Cloud as its `/api/v1` surface rolls out. Point the credential **Base URL** at whichever backend exposes the routes you need (e.g. `http://localhost:8000` for a self-hosted server). The connection test hits `GET /health`.

  ### Resource: Add Data

  - **Operation**: Add
  - **Endpoint**: `POST /api/add_text`
  - **Fields**:
    - Dataset Name (`datasetName`, required): Name of the Cognee dataset to add text to
    - Text Data (`textData`, required, multiple): Array of strings to store

  Example body sent by the node:

  ```json
  {
    "datasetName": "support_docs",
    "textData": [
      "FAQ: Reset password via account settings.",
      "Guide: Export data as CSV from dashboard."
    ]
  }
  ```

  ### Resource: Cognify

  - **Operation**: Cognify
  - **Endpoint**: `POST /api/cognify`
  - **Fields**:
    - Datasets (`datasets`, required, multiple): One or more dataset names to cognify

  Example body sent by the node:

  ```json
  {
    "datasets": ["support_docs"]
  }
  ```

  ### Resource: Search

  - **Operation**: Search
  - **Endpoint**: `POST /api/search`
  - **Fields**:
    - Search Type (`searchType`): One of `GRAPH_COMPLETION`, `GRAPH_COMPLETION_COT`, `RAG_COMPLETION`
    - Datasets (`datasets`, required, multiple)
    - Query (`query`, required)
    - Top K (`topK`, optional number): Defaults to 10

  Example body sent by the node:

  ```json
  {
    "searchType": "GRAPH_COMPLETION",
    "datasets": ["support_docs"],
    "query": "How do I export my data?",
    "topK": 5
  }
  ```

  ### Resource: Delete

  - **Operation**: Delete Dataset
  - **Endpoint**: `DELETE /api/datasets/{datasetId}`
  - **Fields**:
    - Dataset ID (`datasetId`, required): The UUID of the dataset to delete

  - **Operation**: Delete Data
  - **Endpoint**: `DELETE /api/datasets/{datasetId}/data/{dataId}`
  - **Fields**:
    - Dataset ID (`datasetId`, required): The UUID of the dataset
    - Data ID (`dataId`, required): The UUID of the data item to remove

  ### Resource: Skill (`/api/v1`)

  The self-improving skill loop. A weak run becomes a reviewable, approvable edit to a skill's instructions.

  - **Operation: Ingest Skill** — `POST /api/v1/skills`
    - Fields: Skill Name, Dataset Name, Skill Markdown (inline SKILL.md body)
    - Ingests the markdown as a dataset-scoped Skill node (no file upload needed). Returns the dataset id.
  - **Operation: Review Skill** — `POST /api/v1/search` (`search_type=AGENTIC_COMPLETION`)
    - Fields: Skill Name, Dataset Name, Query, Max Iterations, Top K
    - Runs an agentic completion with the skill loaded, so you can grade how well the skill handled the task.
  - **Operation: Propose Improvement** — `POST /api/v1/remember/entry`
    - Fields: Skill Name, Dataset Name, Task Text, Result Summary, Success Score, Score Threshold
    - Records the weak run and creates a `SkillImprovementProposal` (status `proposed`, **not** applied). Returns `proposal_id`.
  - **Operation: Get Proposal** — `GET /api/v1/proposals/{proposalId}`
    - Fields: Proposal ID, Dataset ID
    - Returns `old_procedure`, `proposed_procedure`, `rationale`, `confidence` — review the diff **before** approving.
  - **Operation: Apply Improvement** — `POST /api/v1/remember/entry` (`skill_improvement.apply=true`)
    - Fields: Skill Name, Dataset Name, Proposal ID
    - Applies the approved proposal, writing the new procedure into the skill.
  - **Operation: Get Skill** — `GET /api/v1/skills/{skillId}`
    - Fields: Skill ID, Dataset ID
    - Returns one skill including its full `procedure` body (useful to confirm the applied change).

  Loop wiring: **Ingest Skill** → **Review Skill** → (score in n8n) → **Propose Improvement** → **Get Proposal** (show diff for approval) → **Apply Improvement** → **Get Skill**.

  ## Usage examples

  End-to-end example workflow:

  1. **Add Data** (Cognee)
     - Resource: Add Data → Operation: Add
     - Dataset Name: `support_docs`
     - Text Data: Add one or more strings with your content
  2. **Cognify** (Cognee)
     - Resource: Cognify → Operation: Cognify
     - Datasets: `support_docs`
  3. **Search** (Cognee)
     - Resource: Search → Operation: Search
     - Search Type: `GRAPH_COMPLETION`
     - Datasets: `support_docs`
     - Query: Your question, e.g. "How do I export my data?"
     - Top K: `5`
  4. **Delete** (Cognee)
     - Resource: Delete → Operation: Delete Dataset
     - Dataset ID: UUID of the dataset to remove

  Troubleshooting:

  - 401/403 errors: Check the API key and that `X-Api-Key` is accepted by your Cognee instance.
  - Connection errors: Verify Base URL and network access from your n8n host.

  ## Compatibility

  - Node.js: >= 20.15
  - n8n Nodes API: v1

  The node depends on `n8n-workflow` at runtime (peer dependency). It should work on current n8n releases supporting community nodes.

  ## Resources

  - [Cognee Cloud docs](https://docs.cognee.ai/how-to-guides/cognee-cloud)
  - [Package homepage](https://github.com/topoteretes/cognee-n8n)

  ## Version history

  - **0.5.0**: Add the **Skill** resource (self-improving skill loop) targeting the `/api/v1` API: Ingest Skill, Review Skill (agentic), Propose Improvement, Apply Improvement, Get Skill, Get Proposal. Existing Add/Cognify/Search/Delete operations are unchanged.

   - **0.4.0**: Prefix `/api` to all endpoint URLs and update Base URL format to `https://tenant-xxx.aws.cognee.ai` (breaking change — re-enter
    credential). Address n8n marketplace review

  - **0.3.0**: Add request timeouts for all operations (5 min default, 10 min for Cognify). Enable `usableAsTool` for AI agent compatibility. Migrate tooling to `@n8n/node-cli`. Add GitHub Actions CI and publish workflows with npm provenance.
  - **0.2.0**: Add Delete resource (Delete Dataset, Delete Data operations). Update API endpoints and base URL to Cognee Cloud.
  - **0.1.0**: Initial release with Add Data, Cognify, and Search operations.

  ## License

  MIT

ai_documentation_summary:
  {"purpose":"Integrates Cognee Cloud's AI memory and context engineering into n8n workflows, enabling data ingestion, knowledge graph construction, and semantic search.","capabilities":["Add text data to Cognee datasets","Trigger cognify to build knowledge-graph-based memory","Run semantic search over AI memory datasets with multiple search types (GRAPH_COMPLETION, GRAPH_COMPLETION_COT, RAG_COMPLETION)","Delete entire datasets","Delete individual data items within datasets"],"authentication":"API key required (Base URL and API Key credentials)","commonUseCases":["Building RAG (Retrieval-Augmented Generation) pipelines for customer support","Creating enterprise knowledge bases from unstructured documents","Implementing AI agents with long-term memory capabilities","Automated document indexing and retrieval systems"],"limitations":["Requires a Cognee Cloud tenant setup","Base URL must be configured correctly without trailing '/api'","Cognify operation has a 10-minute default timeout","Other operations have a 5-minute default timeout","Search results limited by configurable 'topK' parameter"],"relatedNodes":[]}


node_type: n8n-nodes-aqtos.aqtosApi
package_name: n8n-nodes-aqtos
display_name: Aqtos
description: Consume Aqtos API
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: antonij-iwmnetwork
author_github_url: https://github.com/Aqtos/n8n-nodes.git
npm_package_name: n8n-nodes-aqtos
npm_version: 0.1.11
community_fetched_at: 2026-07-14T14:40:34.106Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "lead",
      "options": [
        {
          "name": "Contact",
          "value": "contact"
        },
        {
          "name": "Expense",
          "value": "expense"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Task",
          "value": "task"
        }
      ],
      "required": true,
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create",
          "description": "Create a new item"
        }
      ],
      "required": true,
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "contact",
            "expense",
            "invoice",
            "lead",
            "task"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create",
      "description": "Create a new item",
      "resource": "contact"
    }
  ]

npm_readme:
  # n8n-nodes-aqtos

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

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

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

  ## Installation

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

  ## Operations

  This node supports the following operations:

  ### Contact
  - **Create** - Create a new contact (person or company)

  ### Expense
  - **Create** - Create a new expense

  ### Invoice
  - **Create** - Create a new invoice

  ### Lead
  - **Create** - Create a new lead

  ### Task
  - **Create** - Create a new task

  ## Credentials

  To use this node, you need to authenticate with your Aqtos instance. You will need:

  1. **Instance Name** - Your Aqtos instance name (e.g., "mycompany" for mycompany.aqtos.io)
  2. **API Key** - Your Aqtos API key

  ### Getting Your API Key

  1. Log in to your Aqtos instance
  2. Navigate to your account settings
  3. Generate your API key
  4. Copy the API key and paste it into the credentials in n8n

  ## Compatibility

  - Minimum n8n version: 1.0.0
  - Tested with n8n versions: 1.0.0+

  ## Resources

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

ai_documentation_summary:
  {"purpose":"This n8n community node enables integration with the Aqtos API to automate business operations within n8n workflows.","capabilities":["Create new contacts (people or companies)","Create new expenses","Create new invoices","Create new leads","Create new tasks"],"authentication":"API key required","commonUseCases":["Automating customer onboarding by creating contacts and leads","Streamlining expense reporting workflows","Automating invoice generation processes","Managing task assignments for sales or support teams"],"limitations":[],"relatedNodes":[]}


node_type: n8n-nodes-blackbee.blackbee
package_name: n8n-nodes-blackbee
display_name: Blackbee AI
description: Interact with the Blackbee AI Accounts-Payable API
category: Finance & Accounting
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: blackbee_n8n
author_github_url: https://github.com/blackbeeofficial/n8n-node.git
npm_package_name: n8n-nodes-blackbee
npm_version: 0.2.3
community_fetched_at: 2026-07-14T14:40:34.107Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "vendors",
      "options": [
        {
          "name": "Bill",
          "value": "bills"
        },
        {
          "name": "Vendor",
          "value": "vendors"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a vendor",
          "routing": {
            "send": {
              "preSend": [
                null,
                null,
                null
              ]
            },
            "request": {
              "url": "/ap-api/vendor/create",
              "method": "POST"
            }
          },
          "description": "Create a new vendor record"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a vendor",
          "routing": {
            "request": {
              "url": "=/ap-api/vendor/{{$parameter[\"vendorId\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch a single vendor by ID"
        },
        {
          "name": "Get List",
          "value": "list",
          "action": "Get a list of vendors",
          "routing": {
            "request": {
              "url": "/ap-api/vendor/list",
              "body": {
                "fields": [],
                "sortField": "createdAt",
                "sortOrder": "ASC",
                "dateFormat": "MM/DD/YYYY",
                "isFirstLoad": true,
                "isPagination": true
              },
              "method": "POST"
            }
          },
          "description": "Fetch a paginated, filtered list of vendors"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "vendors"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "upload",
      "options": [
        {
          "name": "Upload",
          "value": "upload",
          "action": "Upload a bill",
          "routing": {
            "send": {
              "preSend": [
                null
              ]
            },
            "request": {
              "url": "/ap-api/bill/upload",
              "method": "POST"
            }
          },
          "description": "Upload a bill document (PDF, JPG, JPEG, PNG) and create a bill (triggers AI parsing)"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a bill",
          "routing": {
            "request": {
              "url": "=/ap-api/bill/{{$parameter[\"billUrn\"]}}",
              "method": "GET"
            }
          },
          "description": "Fetch a single bill by URN"
        },
        {
          "name": "Get List",
          "value": "list",
          "action": "Get a list of bills",
          "routing": {
            "request": {
              "url": "/ap-api/bill/list",
              "body": {
                "fields": [],
                "sortField": "createdAt",
                "sortOrder": "ASC",
                "dateFormat": "MM/DD/YYYY",
                "isFirstLoad": true,
                "isPagination": true
              },
              "method": "POST"
            }
          },
          "description": "Fetch a paginated, filtered list of bills"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "bills"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Create",
      "value": "create",
      "action": "Create a vendor",
      "routing": {
        "send": {
          "preSend": [
            null,
            null,
            null
          ]
        },
        "request": {
          "url": "/ap-api/vendor/create",
          "method": "POST"
        }
      },
      "description": "Create a new vendor record",
      "resource": "vendors"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a vendor",
      "routing": {
        "request": {
          "url": "=/ap-api/vendor/{{$parameter[\"vendorId\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch a single vendor by ID",
      "resource": "vendors"
    },
    {
      "name": "Get List",
      "value": "list",
      "action": "Get a list of vendors",
      "routing": {
        "request": {
          "url": "/ap-api/vendor/list",
          "body": {
            "fields": [],
            "sortField": "createdAt",
            "sortOrder": "ASC",
            "dateFormat": "MM/DD/YYYY",
            "isFirstLoad": true,
            "isPagination": true
          },
          "method": "POST"
        }
      },
      "description": "Fetch a paginated, filtered list of vendors",
      "resource": "vendors"
    },
    {
      "name": "Upload",
      "value": "upload",
      "action": "Upload a bill",
      "routing": {
        "send": {
          "preSend": [
            null
          ]
        },
        "request": {
          "url": "/ap-api/bill/upload",
          "method": "POST"
        }
      },
      "description": "Upload a bill document (PDF, JPG, JPEG, PNG) and create a bill (triggers AI parsing)",
      "resource": "bills"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a bill",
      "routing": {
        "request": {
          "url": "=/ap-api/bill/{{$parameter[\"billUrn\"]}}",
          "method": "GET"
        }
      },
      "description": "Fetch a single bill by URN",
      "resource": "bills"
    },
    {
      "name": "Get List",
      "value": "list",
      "action": "Get a list of bills",
      "routing": {
        "request": {
          "url": "/ap-api/bill/list",
          "body": {
            "fields": [],
            "sortField": "createdAt",
            "sortOrder": "ASC",
            "dateFormat": "MM/DD/YYYY",
            "isFirstLoad": true,
            "isPagination": true
          },
          "method": "POST"
        }
      },
      "description": "Fetch a paginated, filtered list of bills",
      "resource": "bills"
    }
  ]

npm_readme:
  # n8n-nodes-blackbee

  n8n community node for the **Blackbee AI Accounts-Payable API**. Automate vendor onboarding and bill ingestion from any n8n workflow.

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

  ## Prerequisites

  - An n8n instance (self-hosted `>= 1.56` or n8n Cloud).
  - Node.js `>= 20.15` (for self-hosted).
  - A Blackbee AI account and an API key.

  ## Compatibility

  | | Version |
  |---|---|
  | n8n | `>= 1.56` |
  | Node.js | `>= 20.15` |
  | Blackbee AI API | current |

  ## Installation

  ### n8n Cloud / self-hosted UI

  Settings → **Community Nodes** → **Install** → enter `n8n-nodes-blackbee` → **Install**.

  ### Self-hosted via npm

  ```bash
  npm install n8n-nodes-blackbee
  ```

  Then restart your n8n instance.

  ## Credentials

  This node authenticates via an **API key** issued from the Blackbee AI application.

  ### Generate an API key

  1. Log in to your Blackbee AI application.
  2. Go to **Settings → System → API keys**.
  3. Click **Generate** to create a new key.
  4. Copy the key immediately — it is shown only once.

  ### Configure the credential in n8n

  Create a **Blackbee AI API** credential and paste the key:

  | Field | Description |
  |---|---|
  | API Key | Your Blackbee AI API key. Sent as `Authorization: ApiKey <key>` on every request. |

  ## Operations

  ### Vendor

  | Operation | HTTP | Path | Purpose |
  |---|---|---|---|
  | Create | `POST` | `/ap-api/vendor/create` | Create a vendor with contact, remit-to, bank, and attachment details. |
  | Get | `GET` | `/ap-api/vendor/{vendorId}` | Fetch a single vendor by ID. |
  | Get List | `POST` | `/ap-api/vendor/list` | Fetch a paginated, filtered list of vendors. |

  ### Bill

  | Operation | HTTP | Path | Purpose |
  |---|---|---|---|
  | Upload | `POST` | `/ap-api/bill/upload` | Upload a bill document (PDF / JPG / JPEG / PNG) — triggers AI line-item extraction. |
  | Get | `GET` | `/ap-api/bill/{billUrn}` | Fetch a single bill by URN. |
  | Get List | `POST` | `/ap-api/bill/list` | Fetch a paginated, filtered list of bills. |

  ## Usage

  ### Example: create a vendor

  1. Add a **Blackbee AI** node, set **Resource** = `Vendor`, **Operation** = `Create`.
  2. Select or create a **Blackbee AI API** credential.
  3. Fill the required **Vendor Name**.
  4. Open **Additional Fields** to add optional details — address, remit-to info, bank accounts, contact, attachments, `taxId` (exactly 9 digits, no separators), etc.
  5. Execute. The vendor ID is returned in the response body.

  ### Example: upload a bill

  1. Fetch a file into the workflow with a node that produces binary data (e.g. **Read Binary File**, **HTTP Request**, **Google Drive**).
  2. Add a **Blackbee AI** node, set **Resource** = `Bill`, **Operation** = `Upload`.
  3. Set **Binary Property** to the name of the binary property holding the file (default `data`).
  4. Execute. The response contains the bill ID; Blackbee AI begins parsing asynchronously.

  ## Resources

  - [Blackbee AI website](https://blackbeeai.com)
  - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [Issue tracker](https://github.com/blackbeeofficial/n8n-node/issues)

  ## Development

  ```bash
  npm install
  npm run lint
  npm run build
  ```

  To test locally against an n8n dev instance, link the built `dist/` via `N8N_CUSTOM_EXTENSIONS`:

  ```bash
  npm link
  cd /path/to/your/n8n-install
  npm link n8n-nodes-blackbee
  n8n start
  ```

  ## License

  [MIT](./LICENSE)

ai_documentation_summary:
  {"purpose":"Interact with the Blackbee Accounts-Payable API to automate vendor onboarding and bill ingestion within n8n workflows.","capabilities":["Create vendors with contact, remit-to, bank, and attachment details","Fetch single vendor by ID","List vendors with pagination and filtering","Upload bill documents (PDF, JPG, JPEG, PNG) for AI line-item extraction","Fetch single bill by URN","List bills with pagination and filtering"],"authentication":"API key required","commonUseCases":["Automating vendor onboarding processes","Ingesting and parsing bills from various sources","Integrating accounts-payable data into existing ERP or accounting workflows"],"limitations":["Requires n8n instance version >= 1.56","Requires Node.js >= 20.15 for self-hosted deployments","Bill upload triggers AI parsing asynchronously rather than returning parsed data immediately","Tax ID must be exactly 9 digits with no separators when creating vendors"],"relatedNodes":["Read Binary File","HTTP Request","Google Drive"]}


node_type: n8n-nodes-proposaly.proposalyTrigger
package_name: n8n-nodes-proposaly
display_name: Proposaly Trigger
description: Starts a workflow when a new event occurs on Proposaly
category: Community
development_style: declarative
version: 1
properties_schema: []
operations: []
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: minhla
author_github_url: https://github.com/ADCORE-INC/
npm_package_name: n8n-nodes-proposaly
npm_version: 0.1.6
community_fetched_at: 2026-07-14T14:40:34.108Z
ai_summary_generated_at: 2026-05-02 08:57:17
npm_readme:
  # n8n-nodes-proposaly

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

  Proposaly unifies presentations, proposals, agreements, and payments into one seamless, client-ready experience - helping you close faster and smarter.

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

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

  ## Installation

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

  ## Operations

  This node supports the following resources and operations:

  ### Lead

  | Operation | Description |
  |-----------|-------------|
  | Create | Create a new lead |
  | Archive | Archive an existing lead |
  | Delete | Permanently delete a lead |
  | Find By ID | Retrieve a lead by its ID |
  | Reactivate | Reactivate an archived lead |
  | Update | Update lead properties |

  ### Document

  | Operation | Description |
  |-----------|-------------|
  | Create | Create a new document |
  | Delete | Permanently delete a document |
  | Duplicate | Create a copy of an existing document |
  | Find By ID | Retrieve a document by its ID |
  | Move Stage | Move a document to a different stage |
  | Create View Only Link | Generate a shareable view-only link |
  | Share | Share a document with recipients |
  | Transfer Ownership | Transfer document ownership to another user |
  | Update | Update document properties |

  ### Recipient

  | Operation | Description |
  |-----------|-------------|
  | Add | Add a recipient to a document |
  | Delete | Remove a recipient from a document |
  | Find | Find recipients on a document |
  | Update | Update recipient details |
  | Get Notification Settings | Retrieve notification preferences for a recipient |
  | Update Notification Settings | Modify notification preferences for a recipient |

  ### Workspace

  | Operation | Description |
  |-----------|-------------|
  | Add | Add a new workspace |
  | Find By ID | Retrieve a workspace by its ID |

  ### Trigger Node

  The package also includes a **Proposaly Trigger** node that listens for webhook events from Proposaly, allowing you to start workflows when events occur in your Proposaly account.

  ## Credentials

  To authenticate with Proposaly, you need an API key from your Proposaly workspace.

  ### How to obtain your API Key

  1. Log in to your Proposaly account
  2. Open the **Menu** in your company's workspace
  3. Navigate to **Company** → **Settings**
  4. Open the **Integrations** tab
  5. Click **"Generate an API Key"** (or if you already have a key, click the 3 dots and select **"Edit"**)
  6. Copy the API Key

  ### Setting up credentials in n8n

  1. In n8n, go to **Credentials**
  2. Click **Add Credential**
  3. Search for **Proposaly API**
  4. Paste your API Key
  5. The default API URL is `https://api.proposaly.io/v2/public-api` (only change if instructed by Proposaly support)
  6. Click **Save**

  ## Compatibility

  This node has been tested with n8n version **1.x** and later.

  **Minimum n8n version:** 1.0.0

  ## Usage

  ### Basic Example: Create a Lead

  1. Add a **Proposaly** node to your workflow
  2. Select **Lead** as the resource
  3. Select **Create** as the operation
  4. Fill in the required fields:
     - **Email**: The lead's email address
     - **First Name**: The lead's first name
     - **Last Name**: The lead's last name
  5. Execute the node

  ### Using with AI Agents

  This node is compatible with n8n's AI Agent functionality. You can use it as a tool within AI workflows to automate proposal and document management based on natural language instructions.

  Example using `$fromAI()`:

  ```javascript
  // In a Code node before the Proposaly node
  return {
    email: $fromAI("email", "The client's email address"),
    firstName: $fromAI("firstName", "The client's first name"),
    lastName: $fromAI("lastName", "The client's last name")
  };
  ```

  ### Tips

  - **Webhook Trigger**: Use the Proposaly Trigger node to automatically start workflows when documents are viewed, signed, or when other events occur
  - **Error Handling**: Enable "Continue On Fail" if you want your workflow to continue even if a Proposaly operation fails
  - **Batch Operations**: When processing multiple items, the node automatically handles each item in the input

  ## Resources

  - [Proposaly Website](https://proposaly.io)
  - [Proposaly API Documentation](https://api.proposaly.io/redoc)
  - [n8n Community Nodes Documentation](https://docs.n8n.io/integrations/community-nodes/)
  - [GitHub Repository](https://github.com/ADCORE-INC/n8n.proposaly.io)

  ## Version history

  See [CHANGELOG.md](CHANGELOG.md) for a detailed version history.

  ### 0.1.0

  Initial release with support for:

  - **Lead** management (Create, Archive, Delete, Find, Reactivate, Update)
  - **Document** operations (Create, Delete, Duplicate, Find, Move Stage, Share, Share Link, Transfer, Update)
  - **Recipient** handling (Add, Delete, Find, Update, Notification Settings)
  - **Workspace** operations (Add, Find)
  - **Webhook Trigger** for real-time event handling

ai_documentation_summary:
  {"purpose":"The Proposaly Trigger node starts n8n workflows when specific events occur in a Proposaly account, enabling automation based on real-time proposal and document activities.","capabilities":["Listen for webhook events from Proposaly","Automate workflows based on document status changes","Trigger actions when proposals are viewed or signed","Integrate with n8n AI Agents as a tool"],"authentication":"API key required","commonUseCases":["Automate follow-up emails when a document is viewed","Notify teams when a proposal is signed","Trigger payment workflows upon document completion","Synchronize proposal data with CRM systems"],"limitations":["Requires an active Proposaly account with API access","Dependent on Proposaly's webhook event availability"],"relatedNodes":["n8n-nodes-proposaly.lead","n8n-nodes-proposaly.document","n8n-nodes-proposaly.recipient","n8n-nodes-proposaly.workspace"]}


node_type: n8n-nodes-nextmotion.nextMotion
package_name: n8n-nodes-nextmotion
display_name: NextMotion
description: Interact with NextMotion API for patient care management
category: Community
development_style: declarative
version: 1
credentials_required: []
outputs:
  [
  "main"
  ]

updated_at: 2026-07-14 14:40:34
author_name: team-nextmotion
author_github_url: https://github.com/Nextmotion-dev-team/
npm_package_name: n8n-nodes-nextmotion
npm_version: 1.2.5
community_fetched_at: 2026-07-14T14:40:34.111Z
ai_summary_generated_at: 2026-05-02 08:57:17
properties_schema:
  [
    {
      "name": "resource",
      "type": "options",
      "default": "patient",
      "options": [
        {
          "name": "Accounting Distribution",
          "value": "accountingDistribution"
        },
        {
          "name": "Appointment Device",
          "value": "appointmentDevice"
        },
        {
          "name": "Appointment Request",
          "value": "appointmentRequest"
        },
        {
          "name": "Appointment Room",
          "value": "appointmentRoom"
        },
        {
          "name": "Calendar Appointment",
          "value": "calendarAppointment"
        },
        {
          "name": "Calendar Journey",
          "value": "calendarJourney"
        },
        {
          "name": "Calendar Opening Hour",
          "value": "calendarOpeningHour"
        },
        {
          "name": "Call",
          "value": "call"
        },
        {
          "name": "Clinic",
          "value": "clinic"
        },
        {
          "name": "Communication Record",
          "value": "communicationRecord"
        },
        {
          "name": "Communication Template",
          "value": "communicationTemplate"
        },
        {
          "name": "Consultation",
          "value": "consultation"
        },
        {
          "name": "Credit Note",
          "value": "creditNote"
        },
        {
          "name": "Doctor",
          "value": "doctor"
        },
        {
          "name": "Document Template",
          "value": "documentTemplate"
        },
        {
          "name": "Feature",
          "value": "feature"
        },
        {
          "name": "Global Product",
          "value": "globalProduct"
        },
        {
          "name": "Invoice",
          "value": "invoice"
        },
        {
          "name": "Lead",
          "value": "lead"
        },
        {
          "name": "Media Montage",
          "value": "mediaMontage"
        },
        {
          "name": "Media Record",
          "value": "mediaRecord"
        },
        {
          "name": "Medical History",
          "value": "medicalHistory"
        },
        {
          "name": "Object Label",
          "value": "objectLabel"
        },
        {
          "name": "Patient",
          "value": "patient"
        },
        {
          "name": "Payment",
          "value": "payment"
        },
        {
          "name": "Payment Medium",
          "value": "paymentMedium"
        },
        {
          "name": "Photo Compare",
          "value": "photoCompare"
        },
        {
          "name": "Prescription",
          "value": "prescription"
        },
        {
          "name": "Product",
          "value": "product"
        },
        {
          "name": "Quote",
          "value": "quote"
        },
        {
          "name": "Sub Visit Type",
          "value": "subVisitType"
        },
        {
          "name": "Survey Form",
          "value": "surveyForm"
        },
        {
          "name": "Treatment",
          "value": "treatment"
        },
        {
          "name": "Treatment Package",
          "value": "treatmentPackage"
        },
        {
          "name": "Treatment Pricing",
          "value": "treatmentPricing"
        },
        {
          "name": "Treatment Type",
          "value": "treatmentType"
        },
        {
          "name": "User",
          "value": "user"
        },
        {
          "name": "Visit",
          "value": "visit"
        },
        {
          "name": "Visit Type",
          "value": "visitType"
        },
        {
          "name": "Visit Type Category",
          "value": "visitTypeCategory"
        },
        {
          "name": "Webhook",
          "value": "webhook"
        }
      ],
      "displayName": "Resource",
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many accounting distributions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/accounting_distributions",
              "method": "GET"
            }
          },
          "description": "Get a list of accounting distributions"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a accounting distribution",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single accounting distribution"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a accounting distribution",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/accounting_distributions",
              "method": "POST"
            }
          },
          "description": "Create a new accounting distribution"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a accounting distribution",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing accounting distribution"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a accounting distribution",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing accounting distribution"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "accountingDistribution"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many appointment devices",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_devices",
              "method": "GET"
            }
          },
          "description": "Get a list of appointment devices"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a appointment device",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single appointment device"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a appointment device",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_devices",
              "method": "POST"
            }
          },
          "description": "Create a new appointment device"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a appointment device",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing appointment device"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a appointment device",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing appointment device"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointmentDevice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many appointment requests",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_requests",
              "method": "GET"
            }
          },
          "description": "Get a list of appointment requests"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a appointment request",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_requests/{{$parameter.appointmentRequestId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single appointment request"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create an appointment request",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/open_api/v4/appointment_requests",
              "method": "POST"
            }
          },
          "description": "Create a new appointment request"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointmentRequest"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many appointment rooms",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_rooms",
              "method": "GET"
            }
          },
          "description": "Get a list of appointment rooms"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a appointment room",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single appointment room"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a appointment room",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_rooms",
              "method": "POST"
            }
          },
          "description": "Create a new appointment room"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a appointment room",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing appointment room"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a appointment room",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing appointment room"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "appointmentRoom"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getTreatments",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calendar appointments",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_appointments",
              "method": "GET"
            }
          },
          "description": "Get a list of calendar appointments"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a calendar appointment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single calendar appointment"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a calendarappointment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing calendarappointment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a calendarappointment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing calendarappointment"
        },
        {
          "name": "Get Treatments",
          "value": "getTreatments",
          "action": "Get treatments for appointment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}/treatments",
              "method": "GET"
            }
          },
          "description": "Get treatments associated with a calendar appointment"
        },
        {
          "name": "Reschedule",
          "value": "reschedule",
          "action": "Reschedule a calendar appointment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}/reschedule",
              "method": "POST"
            }
          },
          "description": "Reschedule an existing calendar appointment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "calendarAppointment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calendar journeys",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_journeys",
              "method": "GET"
            }
          },
          "description": "Get a list of calendar journeys"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "calendarJourney"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calendar opening hours",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_opening_hours",
              "method": "GET"
            }
          },
          "description": "Get a list of calendar opening hours"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a calendar opening hour",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single calendar opening hour"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a calendar opening hour",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_opening_hours",
              "method": "POST"
            }
          },
          "description": "Create a new calendar opening hour slot"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a calendar opening hour",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing calendar opening hour slot"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a calendar opening hour",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing calendar opening hour"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "calendarOpeningHour"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many calls",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calls",
              "method": "POST"
            }
          },
          "description": "Get a list of calls"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a call",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calls",
              "method": "POST"
            }
          },
          "description": "Create a new call"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "call"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many clinics",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/open_api/v4/clinics",
              "method": "GET"
            }
          },
          "description": "Get a list of all clinics"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "clinic"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many communication records",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_records",
              "method": "POST"
            }
          },
          "description": "Get a list of communication records"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a communicationrecord",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_records",
              "method": "POST"
            }
          },
          "description": "Create a new communicationrecord"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "communicationRecord"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "get",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many communication templates",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_templates",
              "method": "GET"
            }
          },
          "description": "Get a list of communication templates"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a communication template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/communication_templates/{{$parameter.communicationTemplateId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single communication template"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a communication template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/communication_templates/{{$parameter.communicationTemplateId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing communication template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "communicationTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAllByPatient",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many consultations",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
              "method": "GET"
            }
          },
          "description": "Get a list of consultations"
        },
        {
          "name": "Get Many by Patient",
          "value": "getAllByPatient",
          "action": "Get many consultations by patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "qs": {
                "patient": "={{$parameter.patientId}}"
              },
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
              "method": "GET"
            }
          },
          "description": "Get a list of consultations for a specific patient"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a consultation",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single consultation"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a consultation",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
              "method": "POST"
            }
          },
          "description": "Create a new consultation"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a consultation",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing consultation"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a consultation",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing consultation"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "consultation"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Create",
          "value": "create",
          "action": "Create a credit note",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/credit_notes",
              "method": "POST"
            }
          },
          "description": "Create a new credit note (refund document)"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "creditNote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many doctors",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/doctors",
              "method": "GET"
            }
          },
          "description": "Get a list of doctors"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a doctor",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single doctor"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a doctor",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/doctors",
              "method": "POST"
            }
          },
          "description": "Create a new doctor"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a doctor",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing doctor"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a doctor",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing doctor"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "doctor"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many document templates",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/document_templates",
              "method": "GET"
            }
          },
          "description": "Get a list of document templates"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a document template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single document template"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a document template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/document_templates",
              "method": "POST"
            }
          },
          "description": "Create a new document template"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a document template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing document template"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a document template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing document template"
        },
        {
          "name": "Duplicate",
          "value": "duplicate",
          "action": "Duplicate a document template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}/duplicate",
              "method": "POST"
            }
          },
          "description": "Create a copy of an existing document template"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "documentTemplate"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many features",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/features",
              "method": "GET"
            }
          },
          "description": "Get a list of features"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "feature"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many global products",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/global_products",
              "method": "GET"
            }
          },
          "description": "Get a list of global products"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "globalProduct"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many invoices",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/invoices",
              "method": "GET"
            }
          },
          "description": "Get a list of invoices"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single invoice"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}/invoices",
              "method": "POST"
            }
          },
          "description": "Create a new invoice"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing invoice"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing invoice"
        },
        {
          "name": "Pay",
          "value": "pay",
          "action": "Pay an invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}/pay",
              "method": "POST"
            }
          },
          "description": "Mark an invoice as paid"
        },
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate an invoice",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}/validate",
              "method": "POST"
            }
          },
          "description": "Validate and finalize an invoice"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "invoice"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many leads",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/leads",
              "method": "GET"
            }
          },
          "description": "Get a list of leads"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a lead",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single lead"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a lead",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/leads",
              "method": "POST"
            }
          },
          "description": "Create a new lead"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a lead",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing lead"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a lead",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing lead"
        },
        {
          "name": "Convert to Patient",
          "value": "convertToPatient",
          "action": "Convert lead to patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/leads/{{$parameter.leadId}}/convert_to_patient",
              "method": "POST"
            }
          },
          "description": "Convert a lead into a patient"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "lead"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many media montages",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/media_montages",
              "method": "GET"
            }
          },
          "description": "Get a list of media montages"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mediaMontage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many media records",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/media_records",
              "method": "GET"
            }
          },
          "description": "Get a list of media records"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "mediaRecord"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPatient",
      "options": [
        {
          "name": "Get (Clinic Template)",
          "value": "getClinic",
          "action": "Get clinic medical history template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/medical_history",
              "method": "GET"
            }
          },
          "description": "Get the medical history template configuration for a clinic"
        },
        {
          "name": "Update (Clinic Template)",
          "value": "updateClinic",
          "action": "Update clinic medical history template",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/medical_history",
              "method": "PUT"
            }
          },
          "description": "Update the medical history template configuration for a clinic"
        },
        {
          "name": "Get (Patient)",
          "value": "getPatient",
          "action": "Get patient medical history",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/medical_history",
              "method": "GET"
            }
          },
          "description": "Get the medical history data for a patient"
        },
        {
          "name": "Update (Patient)",
          "value": "updatePatient",
          "action": "Update patient medical history",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/medical_history",
              "method": "PUT"
            }
          },
          "description": "Update the medical history data for a patient"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "medicalHistory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many object labels",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/object_labels",
              "method": "GET"
            }
          },
          "description": "Get a list of object labels"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "objectLabel"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getStats",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many patients",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/patients",
              "method": "GET"
            }
          },
          "description": "Get a list of patients"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single patient"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/patients",
              "method": "POST"
            }
          },
          "description": "Create a new patient"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing patient"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a patient",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing patient"
        },
        {
          "name": "Get Stats",
          "value": "getStats",
          "action": "Get patient statistics",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/stats",
              "method": "GET"
            }
          },
          "description": "Get statistics for a patient"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "patient"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many payments",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payments",
              "method": "GET"
            }
          },
          "description": "Get a list of payments"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single payment"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a payment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing payment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a payment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing payment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "payment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many payment mediums",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payment_mediums",
              "method": "GET"
            }
          },
          "description": "Get a list of payment mediums"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a payment medium",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single payment medium"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a payment medium",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payment_mediums",
              "method": "POST"
            }
          },
          "description": "Create a new custom payment medium"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a payment medium",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing payment medium"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a payment medium",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing payment medium"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "paymentMedium"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many photo compares",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/photo_compares",
              "method": "GET"
            }
          },
          "description": "Get a list of photo compares"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "photoCompare"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many prescriptions",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/prescriptions",
              "method": "GET"
            }
          },
          "description": "Get a list of prescriptions"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a prescription",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single prescription"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a prescription",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/prescriptions",
              "method": "POST"
            }
          },
          "description": "Create a new prescription"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a prescription",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing prescription"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a prescription",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing prescription"
        },
        {
          "name": "Sign",
          "value": "sign",
          "action": "Sign a prescription",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}/sign",
              "method": "POST"
            }
          },
          "description": "Sign an existing prescription"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "prescription"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many products",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/products",
              "method": "GET"
            }
          },
          "description": "Get a list of products"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a product",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/products/{{$parameter.productId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single product"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a product",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/products",
              "method": "POST"
            }
          },
          "description": "Create a new product"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a product",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/products/{{$parameter.productId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing product"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a product",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/products/{{$parameter.productId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing product"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "product"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "create",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many quotes",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/quotes",
              "method": "GET"
            }
          },
          "description": "Get a list of quotes"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a quote",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single quote"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a quote",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}/quotes",
              "method": "POST"
            }
          },
          "description": "Create a new quote"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a quote",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing quote"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a quote",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing quote"
        },
        {
          "name": "Validate",
          "value": "validate",
          "action": "Validate a quote",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}/validate",
              "method": "POST"
            }
          },
          "description": "Validate and finalize a quote"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "quote"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many sub visit types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/sub_visit_types",
              "method": "GET"
            }
          },
          "description": "Get a list of sub visit types"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a sub visit type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/sub_visit_types/{{$parameter.subVisitTypeId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single sub visit type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "subVisitType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many survey forms",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/survey_forms",
              "method": "GET"
            }
          },
          "description": "Get a list of survey forms"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a survey form",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single survey form"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a survey form",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/survey_forms",
              "method": "POST"
            }
          },
          "description": "Create a new survey form"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a survey form",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing survey form"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a survey form",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing survey form"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "surveyForm"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "uploadConsentForm",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many treatments",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/treatments",
              "method": "GET"
            }
          },
          "description": "Get a list of treatments"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a treatment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single treatment"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a treatment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/patients/{{$parameter.patientId}}/treatments",
              "method": "POST"
            }
          },
          "description": "Create a new treatment"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a treatment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing treatment"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a treatment",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing treatment"
        },
        {
          "name": "Upload Consent Form",
          "value": "uploadConsentForm",
          "action": "Upload consent form",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}/consent_forms/upload",
              "method": "POST"
            }
          },
          "description": "Upload a consent form for a treatment"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "treatment"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many treatment packages",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_packages",
              "method": "GET"
            }
          },
          "description": "Get a list of treatment packages"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a treatment package",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single treatment package"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a treatment package",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_packages",
              "method": "POST"
            }
          },
          "description": "Create a new treatment package"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a treatment package",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing treatment package"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a treatment package",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing treatment package"
        },
        {
          "name": "Extract",
          "value": "extract",
          "action": "Extract a treatment package",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}/extract",
              "method": "POST"
            }
          },
          "description": "Extract treatment package items into individual treatments"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "treatmentPackage"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many treatment pricings",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_pricings",
              "method": "GET"
            }
          },
          "description": "Get a list of treatment pricings"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a treatment pricing",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_pricings/{{$parameter.treatmentPricingId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single treatment pricing"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "treatmentPricing"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getPostTreatmentConfig",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many treatment types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_types",
              "method": "GET"
            }
          },
          "description": "Get a list of treatment types"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a treatment type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single treatment type"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a treatment type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_types",
              "method": "POST"
            }
          },
          "description": "Create a new treatment type"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a treatment type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing treatment type"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a treatment type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing treatment type"
        },
        {
          "name": "Get Post Treatment Config",
          "value": "getPostTreatmentConfig",
          "action": "Get post treatment config",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}/post_treatment_config",
              "method": "GET"
            }
          },
          "description": "Retrieve the post-treatment config for a treatment type"
        },
        {
          "name": "Update Post Treatment Config",
          "value": "updatePostTreatmentConfig",
          "action": "Update post treatment config",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}/post_treatment_config",
              "method": "PUT"
            }
          },
          "description": "Update the post-treatment config for a treatment type"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "treatmentType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getMe",
      "options": [
        {
          "name": "Get Me",
          "value": "getMe",
          "action": "Get current user",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "/open_api/v4/users/me",
              "method": "GET"
            }
          },
          "description": "Get the data of the currently authenticated user"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "user"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many visits",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visits",
              "method": "GET"
            }
          },
          "description": "Get a list of visits"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a visit",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single visit"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a visit",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visits",
              "method": "POST"
            }
          },
          "description": "Create a new visit"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a visit",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing visit"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a visit",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing visit"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "visit"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many visit type categories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
              "method": "GET"
            }
          },
          "description": "Get a list of visit type categories"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a visit type category",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single visit type category"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a visit type category",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
              "method": "POST"
            }
          },
          "description": "Create a new visit type category"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a visit type category",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing visit type category"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a visit type category",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing visit type category"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "visitTypeCategory"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getCategories",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many visit types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types",
              "method": "GET"
            }
          },
          "description": "Get a list of visit types"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a visit type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single visit type"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a visit type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types",
              "method": "POST"
            }
          },
          "description": "Create a new visit type"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a visit type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing visit type"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a visit type",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing visit type"
        },
        {
          "name": "Get Categories",
          "value": "getCategories",
          "action": "Get visit type categories",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
              "method": "GET"
            }
          },
          "description": "Get a list of visit type categories for a clinic"
        },
        {
          "name": "Get Opening Hours",
          "value": "getOpeningHours",
          "action": "Get available opening hours",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types/opening_hours",
              "method": "POST"
            }
          },
          "description": "Get available opening hours/time slots for visit types"
        },
        {
          "name": "Reorder",
          "value": "reorder",
          "action": "Reorder visit types",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types/reorder",
              "method": "PUT"
            }
          },
          "description": "Reorder the clinic's visit types"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "visitType"
          ]
        }
      },
      "noDataExpression": true
    },
    {
      "name": "operation",
      "type": "options",
      "default": "getAll",
      "options": [
        {
          "name": "Get Many",
          "value": "getAll",
          "action": "Get many webhooks",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/webhooks",
              "method": "GET"
            }
          },
          "description": "Get a list of webhooks"
        },
        {
          "name": "Get",
          "value": "get",
          "action": "Get a webhook",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
              "method": "GET"
            }
          },
          "description": "Get the data of a single webhook"
        },
        {
          "name": "Create",
          "value": "create",
          "action": "Create a webhook",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/webhooks",
              "method": "POST"
            }
          },
          "description": "Create a new webhook"
        },
        {
          "name": "Update",
          "value": "update",
          "action": "Update a webhook",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
              "method": "PUT"
            }
          },
          "description": "Update an existing webhook"
        },
        {
          "name": "Delete",
          "value": "delete",
          "action": "Delete a webhook",
          "routing": {
            "output": {
              "postReceive": [
                {
                  "type": "rootProperty",
                  "properties": {
                    "property": "data"
                  }
                }
              ]
            },
            "request": {
              "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
              "method": "DELETE"
            }
          },
          "description": "Delete an existing webhook"
        }
      ],
      "displayName": "Operation",
      "displayOptions": {
        "show": {
          "resource": [
            "webhook"
          ]
        }
      },
      "noDataExpression": true
    }
  ]

operations:
  [
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many accounting distributions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/accounting_distributions",
          "method": "GET"
        }
      },
      "description": "Get a list of accounting distributions",
      "resource": "accountingDistribution"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a accounting distribution",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single accounting distribution",
      "resource": "accountingDistribution"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a accounting distribution",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/accounting_distributions",
          "method": "POST"
        }
      },
      "description": "Create a new accounting distribution",
      "resource": "accountingDistribution"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a accounting distribution",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing accounting distribution",
      "resource": "accountingDistribution"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a accounting distribution",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/accounting_distributions/{{$parameter.accountingDistributionId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing accounting distribution",
      "resource": "accountingDistribution"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many appointment devices",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_devices",
          "method": "GET"
        }
      },
      "description": "Get a list of appointment devices",
      "resource": "appointmentDevice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a appointment device",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single appointment device",
      "resource": "appointmentDevice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a appointment device",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_devices",
          "method": "POST"
        }
      },
      "description": "Create a new appointment device",
      "resource": "appointmentDevice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a appointment device",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing appointment device",
      "resource": "appointmentDevice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a appointment device",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_devices/{{$parameter.appointmentDeviceId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing appointment device",
      "resource": "appointmentDevice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many appointment requests",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_requests",
          "method": "GET"
        }
      },
      "description": "Get a list of appointment requests",
      "resource": "appointmentRequest"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a appointment request",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_requests/{{$parameter.appointmentRequestId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single appointment request",
      "resource": "appointmentRequest"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create an appointment request",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/open_api/v4/appointment_requests",
          "method": "POST"
        }
      },
      "description": "Create a new appointment request",
      "resource": "appointmentRequest"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many appointment rooms",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_rooms",
          "method": "GET"
        }
      },
      "description": "Get a list of appointment rooms",
      "resource": "appointmentRoom"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a appointment room",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single appointment room",
      "resource": "appointmentRoom"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a appointment room",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/appointment_rooms",
          "method": "POST"
        }
      },
      "description": "Create a new appointment room",
      "resource": "appointmentRoom"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a appointment room",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing appointment room",
      "resource": "appointmentRoom"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a appointment room",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/appointment_rooms/{{$parameter.appointmentRoomId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing appointment room",
      "resource": "appointmentRoom"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calendar appointments",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_appointments",
          "method": "GET"
        }
      },
      "description": "Get a list of calendar appointments",
      "resource": "calendarAppointment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a calendar appointment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single calendar appointment",
      "resource": "calendarAppointment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a calendarappointment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing calendarappointment",
      "resource": "calendarAppointment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a calendarappointment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing calendarappointment",
      "resource": "calendarAppointment"
    },
    {
      "name": "Get Treatments",
      "value": "getTreatments",
      "action": "Get treatments for appointment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}/treatments",
          "method": "GET"
        }
      },
      "description": "Get treatments associated with a calendar appointment",
      "resource": "calendarAppointment"
    },
    {
      "name": "Reschedule",
      "value": "reschedule",
      "action": "Reschedule a calendar appointment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_appointments/{{$parameter.appointmentId}}/reschedule",
          "method": "POST"
        }
      },
      "description": "Reschedule an existing calendar appointment",
      "resource": "calendarAppointment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calendar journeys",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_journeys",
          "method": "GET"
        }
      },
      "description": "Get a list of calendar journeys",
      "resource": "calendarJourney"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calendar opening hours",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_opening_hours",
          "method": "GET"
        }
      },
      "description": "Get a list of calendar opening hours",
      "resource": "calendarOpeningHour"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a calendar opening hour",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single calendar opening hour",
      "resource": "calendarOpeningHour"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a calendar opening hour",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calendar_opening_hours",
          "method": "POST"
        }
      },
      "description": "Create a new calendar opening hour slot",
      "resource": "calendarOpeningHour"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a calendar opening hour",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing calendar opening hour slot",
      "resource": "calendarOpeningHour"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a calendar opening hour",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/calendar_opening_hours/{{$parameter.calendarOpeningHourId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing calendar opening hour",
      "resource": "calendarOpeningHour"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many calls",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calls",
          "method": "POST"
        }
      },
      "description": "Get a list of calls",
      "resource": "call"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a call",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/calls",
          "method": "POST"
        }
      },
      "description": "Create a new call",
      "resource": "call"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many clinics",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/open_api/v4/clinics",
          "method": "GET"
        }
      },
      "description": "Get a list of all clinics",
      "resource": "clinic"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many communication records",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_records",
          "method": "POST"
        }
      },
      "description": "Get a list of communication records",
      "resource": "communicationRecord"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a communicationrecord",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_records",
          "method": "POST"
        }
      },
      "description": "Create a new communicationrecord",
      "resource": "communicationRecord"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many communication templates",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/communication_templates",
          "method": "GET"
        }
      },
      "description": "Get a list of communication templates",
      "resource": "communicationTemplate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a communication template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/communication_templates/{{$parameter.communicationTemplateId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single communication template",
      "resource": "communicationTemplate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a communication template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/communication_templates/{{$parameter.communicationTemplateId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing communication template",
      "resource": "communicationTemplate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many consultations",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
          "method": "GET"
        }
      },
      "description": "Get a list of consultations",
      "resource": "consultation"
    },
    {
      "name": "Get Many by Patient",
      "value": "getAllByPatient",
      "action": "Get many consultations by patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "qs": {
            "patient": "={{$parameter.patientId}}"
          },
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
          "method": "GET"
        }
      },
      "description": "Get a list of consultations for a specific patient",
      "resource": "consultation"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a consultation",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single consultation",
      "resource": "consultation"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a consultation",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/consultations",
          "method": "POST"
        }
      },
      "description": "Create a new consultation",
      "resource": "consultation"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a consultation",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing consultation",
      "resource": "consultation"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a consultation",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing consultation",
      "resource": "consultation"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a credit note",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/credit_notes",
          "method": "POST"
        }
      },
      "description": "Create a new credit note (refund document)",
      "resource": "creditNote"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many doctors",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/doctors",
          "method": "GET"
        }
      },
      "description": "Get a list of doctors",
      "resource": "doctor"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a doctor",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single doctor",
      "resource": "doctor"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a doctor",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/doctors",
          "method": "POST"
        }
      },
      "description": "Create a new doctor",
      "resource": "doctor"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a doctor",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing doctor",
      "resource": "doctor"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a doctor",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/doctors/{{$parameter.doctorId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing doctor",
      "resource": "doctor"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many document templates",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/document_templates",
          "method": "GET"
        }
      },
      "description": "Get a list of document templates",
      "resource": "documentTemplate"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a document template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single document template",
      "resource": "documentTemplate"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a document template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/document_templates",
          "method": "POST"
        }
      },
      "description": "Create a new document template",
      "resource": "documentTemplate"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a document template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing document template",
      "resource": "documentTemplate"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a document template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing document template",
      "resource": "documentTemplate"
    },
    {
      "name": "Duplicate",
      "value": "duplicate",
      "action": "Duplicate a document template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/document_templates/{{$parameter.documentTemplateId}}/duplicate",
          "method": "POST"
        }
      },
      "description": "Create a copy of an existing document template",
      "resource": "documentTemplate"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many features",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/features",
          "method": "GET"
        }
      },
      "description": "Get a list of features",
      "resource": "feature"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many global products",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/global_products",
          "method": "GET"
        }
      },
      "description": "Get a list of global products",
      "resource": "globalProduct"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many invoices",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/invoices",
          "method": "GET"
        }
      },
      "description": "Get a list of invoices",
      "resource": "invoice"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single invoice",
      "resource": "invoice"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}/invoices",
          "method": "POST"
        }
      },
      "description": "Create a new invoice",
      "resource": "invoice"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing invoice",
      "resource": "invoice"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing invoice",
      "resource": "invoice"
    },
    {
      "name": "Pay",
      "value": "pay",
      "action": "Pay an invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}/pay",
          "method": "POST"
        }
      },
      "description": "Mark an invoice as paid",
      "resource": "invoice"
    },
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate an invoice",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/invoices/{{$parameter.invoiceId}}/validate",
          "method": "POST"
        }
      },
      "description": "Validate and finalize an invoice",
      "resource": "invoice"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many leads",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/leads",
          "method": "GET"
        }
      },
      "description": "Get a list of leads",
      "resource": "lead"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a lead",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single lead",
      "resource": "lead"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a lead",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/leads",
          "method": "POST"
        }
      },
      "description": "Create a new lead",
      "resource": "lead"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a lead",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing lead",
      "resource": "lead"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a lead",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/leads/{{$parameter.leadId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing lead",
      "resource": "lead"
    },
    {
      "name": "Convert to Patient",
      "value": "convertToPatient",
      "action": "Convert lead to patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/leads/{{$parameter.leadId}}/convert_to_patient",
          "method": "POST"
        }
      },
      "description": "Convert a lead into a patient",
      "resource": "lead"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many media montages",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/media_montages",
          "method": "GET"
        }
      },
      "description": "Get a list of media montages",
      "resource": "mediaMontage"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many media records",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/media_records",
          "method": "GET"
        }
      },
      "description": "Get a list of media records",
      "resource": "mediaRecord"
    },
    {
      "name": "Get (Clinic Template)",
      "value": "getClinic",
      "action": "Get clinic medical history template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/medical_history",
          "method": "GET"
        }
      },
      "description": "Get the medical history template configuration for a clinic",
      "resource": "medicalHistory"
    },
    {
      "name": "Update (Clinic Template)",
      "value": "updateClinic",
      "action": "Update clinic medical history template",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/medical_history",
          "method": "PUT"
        }
      },
      "description": "Update the medical history template configuration for a clinic",
      "resource": "medicalHistory"
    },
    {
      "name": "Get (Patient)",
      "value": "getPatient",
      "action": "Get patient medical history",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/medical_history",
          "method": "GET"
        }
      },
      "description": "Get the medical history data for a patient",
      "resource": "medicalHistory"
    },
    {
      "name": "Update (Patient)",
      "value": "updatePatient",
      "action": "Update patient medical history",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/medical_history",
          "method": "PUT"
        }
      },
      "description": "Update the medical history data for a patient",
      "resource": "medicalHistory"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many object labels",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/object_labels",
          "method": "GET"
        }
      },
      "description": "Get a list of object labels",
      "resource": "objectLabel"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many patients",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/patients",
          "method": "GET"
        }
      },
      "description": "Get a list of patients",
      "resource": "patient"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single patient",
      "resource": "patient"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/patients",
          "method": "POST"
        }
      },
      "description": "Create a new patient",
      "resource": "patient"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing patient",
      "resource": "patient"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a patient",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing patient",
      "resource": "patient"
    },
    {
      "name": "Get Stats",
      "value": "getStats",
      "action": "Get patient statistics",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/stats",
          "method": "GET"
        }
      },
      "description": "Get statistics for a patient",
      "resource": "patient"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many payments",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payments",
          "method": "GET"
        }
      },
      "description": "Get a list of payments",
      "resource": "payment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single payment",
      "resource": "payment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a payment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing payment",
      "resource": "payment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a payment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payments/{{$parameter.paymentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing payment",
      "resource": "payment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many payment mediums",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payment_mediums",
          "method": "GET"
        }
      },
      "description": "Get a list of payment mediums",
      "resource": "paymentMedium"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a payment medium",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single payment medium",
      "resource": "paymentMedium"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a payment medium",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/payment_mediums",
          "method": "POST"
        }
      },
      "description": "Create a new custom payment medium",
      "resource": "paymentMedium"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a payment medium",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing payment medium",
      "resource": "paymentMedium"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a payment medium",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/payment_mediums/{{$parameter.paymentMediumId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing payment medium",
      "resource": "paymentMedium"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many photo compares",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/photo_compares",
          "method": "GET"
        }
      },
      "description": "Get a list of photo compares",
      "resource": "photoCompare"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many prescriptions",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/prescriptions",
          "method": "GET"
        }
      },
      "description": "Get a list of prescriptions",
      "resource": "prescription"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a prescription",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single prescription",
      "resource": "prescription"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a prescription",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/prescriptions",
          "method": "POST"
        }
      },
      "description": "Create a new prescription",
      "resource": "prescription"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a prescription",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing prescription",
      "resource": "prescription"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a prescription",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing prescription",
      "resource": "prescription"
    },
    {
      "name": "Sign",
      "value": "sign",
      "action": "Sign a prescription",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/prescriptions/{{$parameter.prescriptionId}}/sign",
          "method": "POST"
        }
      },
      "description": "Sign an existing prescription",
      "resource": "prescription"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many products",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/products",
          "method": "GET"
        }
      },
      "description": "Get a list of products",
      "resource": "product"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a product",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/products/{{$parameter.productId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single product",
      "resource": "product"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a product",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/products",
          "method": "POST"
        }
      },
      "description": "Create a new product",
      "resource": "product"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a product",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/products/{{$parameter.productId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing product",
      "resource": "product"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a product",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/products/{{$parameter.productId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing product",
      "resource": "product"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many quotes",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/quotes",
          "method": "GET"
        }
      },
      "description": "Get a list of quotes",
      "resource": "quote"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a quote",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single quote",
      "resource": "quote"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a quote",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/consultations/{{$parameter.consultationId}}/quotes",
          "method": "POST"
        }
      },
      "description": "Create a new quote",
      "resource": "quote"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a quote",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing quote",
      "resource": "quote"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a quote",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing quote",
      "resource": "quote"
    },
    {
      "name": "Validate",
      "value": "validate",
      "action": "Validate a quote",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/quotes/{{$parameter.quoteId}}/validate",
          "method": "POST"
        }
      },
      "description": "Validate and finalize a quote",
      "resource": "quote"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many sub visit types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/sub_visit_types",
          "method": "GET"
        }
      },
      "description": "Get a list of sub visit types",
      "resource": "subVisitType"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a sub visit type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/sub_visit_types/{{$parameter.subVisitTypeId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single sub visit type",
      "resource": "subVisitType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many survey forms",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/survey_forms",
          "method": "GET"
        }
      },
      "description": "Get a list of survey forms",
      "resource": "surveyForm"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a survey form",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single survey form",
      "resource": "surveyForm"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a survey form",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/survey_forms",
          "method": "POST"
        }
      },
      "description": "Create a new survey form",
      "resource": "surveyForm"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a survey form",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing survey form",
      "resource": "surveyForm"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a survey form",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/survey_forms/{{$parameter.surveyFormId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing survey form",
      "resource": "surveyForm"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many treatments",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/treatments",
          "method": "GET"
        }
      },
      "description": "Get a list of treatments",
      "resource": "treatment"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a treatment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single treatment",
      "resource": "treatment"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a treatment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/patients/{{$parameter.patientId}}/treatments",
          "method": "POST"
        }
      },
      "description": "Create a new treatment",
      "resource": "treatment"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a treatment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing treatment",
      "resource": "treatment"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a treatment",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing treatment",
      "resource": "treatment"
    },
    {
      "name": "Upload Consent Form",
      "value": "uploadConsentForm",
      "action": "Upload consent form",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatments/{{$parameter.treatmentId}}/consent_forms/upload",
          "method": "POST"
        }
      },
      "description": "Upload a consent form for a treatment",
      "resource": "treatment"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many treatment packages",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_packages",
          "method": "GET"
        }
      },
      "description": "Get a list of treatment packages",
      "resource": "treatmentPackage"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a treatment package",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single treatment package",
      "resource": "treatmentPackage"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a treatment package",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_packages",
          "method": "POST"
        }
      },
      "description": "Create a new treatment package",
      "resource": "treatmentPackage"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a treatment package",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing treatment package",
      "resource": "treatmentPackage"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a treatment package",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing treatment package",
      "resource": "treatmentPackage"
    },
    {
      "name": "Extract",
      "value": "extract",
      "action": "Extract a treatment package",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_packages/{{$parameter.treatmentPackageId}}/extract",
          "method": "POST"
        }
      },
      "description": "Extract treatment package items into individual treatments",
      "resource": "treatmentPackage"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many treatment pricings",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_pricings",
          "method": "GET"
        }
      },
      "description": "Get a list of treatment pricings",
      "resource": "treatmentPricing"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a treatment pricing",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_pricings/{{$parameter.treatmentPricingId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single treatment pricing",
      "resource": "treatmentPricing"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many treatment types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_types",
          "method": "GET"
        }
      },
      "description": "Get a list of treatment types",
      "resource": "treatmentType"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a treatment type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a treatment type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/treatment_types",
          "method": "POST"
        }
      },
      "description": "Create a new treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a treatment type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a treatment type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Get Post Treatment Config",
      "value": "getPostTreatmentConfig",
      "action": "Get post treatment config",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}/post_treatment_config",
          "method": "GET"
        }
      },
      "description": "Retrieve the post-treatment config for a treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Update Post Treatment Config",
      "value": "updatePostTreatmentConfig",
      "action": "Update post treatment config",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/treatment_types/{{$parameter.treatmentTypeId}}/post_treatment_config",
          "method": "PUT"
        }
      },
      "description": "Update the post-treatment config for a treatment type",
      "resource": "treatmentType"
    },
    {
      "name": "Get Me",
      "value": "getMe",
      "action": "Get current user",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "/open_api/v4/users/me",
          "method": "GET"
        }
      },
      "description": "Get the data of the currently authenticated user",
      "resource": "user"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many visits",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visits",
          "method": "GET"
        }
      },
      "description": "Get a list of visits",
      "resource": "visit"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a visit",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single visit",
      "resource": "visit"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a visit",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visits",
          "method": "POST"
        }
      },
      "description": "Create a new visit",
      "resource": "visit"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a visit",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing visit",
      "resource": "visit"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a visit",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visits/{{$parameter.visitId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing visit",
      "resource": "visit"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many visit type categories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
          "method": "GET"
        }
      },
      "description": "Get a list of visit type categories",
      "resource": "visitTypeCategory"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a visit type category",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single visit type category",
      "resource": "visitTypeCategory"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a visit type category",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
          "method": "POST"
        }
      },
      "description": "Create a new visit type category",
      "resource": "visitTypeCategory"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a visit type category",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing visit type category",
      "resource": "visitTypeCategory"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a visit type category",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_type_categories/{{$parameter.visitTypeCategoryId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing visit type category",
      "resource": "visitTypeCategory"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many visit types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types",
          "method": "GET"
        }
      },
      "description": "Get a list of visit types",
      "resource": "visitType"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a visit type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single visit type",
      "resource": "visitType"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a visit type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types",
          "method": "POST"
        }
      },
      "description": "Create a new visit type",
      "resource": "visitType"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a visit type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing visit type",
      "resource": "visitType"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a visit type",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/visit_types/{{$parameter.visitTypeId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing visit type",
      "resource": "visitType"
    },
    {
      "name": "Get Categories",
      "value": "getCategories",
      "action": "Get visit type categories",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_type_categories",
          "method": "GET"
        }
      },
      "description": "Get a list of visit type categories for a clinic",
      "resource": "visitType"
    },
    {
      "name": "Get Opening Hours",
      "value": "getOpeningHours",
      "action": "Get available opening hours",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types/opening_hours",
          "method": "POST"
        }
      },
      "description": "Get available opening hours/time slots for visit types",
      "resource": "visitType"
    },
    {
      "name": "Reorder",
      "value": "reorder",
      "action": "Reorder visit types",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/visit_types/reorder",
          "method": "PUT"
        }
      },
      "description": "Reorder the clinic's visit types",
      "resource": "visitType"
    },
    {
      "name": "Get Many",
      "value": "getAll",
      "action": "Get many webhooks",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/webhooks",
          "method": "GET"
        }
      },
      "description": "Get a list of webhooks",
      "resource": "webhook"
    },
    {
      "name": "Get",
      "value": "get",
      "action": "Get a webhook",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
          "method": "GET"
        }
      },
      "description": "Get the data of a single webhook",
      "resource": "webhook"
    },
    {
      "name": "Create",
      "value": "create",
      "action": "Create a webhook",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/clinics/{{$parameter.clinicId}}/webhooks",
          "method": "POST"
        }
      },
      "description": "Create a new webhook",
      "resource": "webhook"
    },
    {
      "name": "Update",
      "value": "update",
      "action": "Update a webhook",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
          "method": "PUT"
        }
      },
      "description": "Update an existing webhook",
      "resource": "webhook"
    },
    {
      "name": "Delete",
      "value": "delete",
      "action": "Delete a webhook",
      "routing": {
        "output": {
          "postReceive": [
            {
              "type": "rootProperty",
              "properties": {
                "property": "data"
              }
            }
          ]
        },
        "request": {
          "url": "=/open_api/v4/webhooks/{{$parameter.webhookId}}",
          "method": "DELETE"
        }
      },
      "description": "Delete an existing webhook",
      "resource": "webhook"
    }
  ]

npm_readme:
  # n8n-nodes-nextmotion

  This is an n8n community node for [NextMotion](https://nextmotion.net/) - a practice management system for medical clinics.

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

  ## Installation

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

  ## Operations

  **Patient**
  - Get a patient
  - Get many patients in a clinic
  - Create a patient
  - Update a patient
  - Delete a patient
  - Get patient statistics

  **Calendar Appointment**
  - Get an appointment
  - Get many appointments in a clinic
  - Update an appointment
  - Delete an appointment
  - Get treatments for an appointment
  - Reschedule an appointment

  **Invoice**
  - Get an invoice
  - Get many invoices in a clinic
  - Update an invoice
  - Delete an invoice
  - Pay an invoice
  - Validate an invoice

  **Quote**
  - Get a quote
  - Get many quotes in a clinic
  - Update a quote
  - Delete a quote
  - Accept a quote
  - Validate a quote

  **Consultation**
  - Get a consultation
  - Get many consultations
  - Create an invoice from a consultation
  - Create a quote from a consultation

  **Treatment**
  - Get a treatment
  - Get many treatments
  - Update a treatment
  - Upload consent form

  **Prescription**
  - Get a prescription
  - Get many prescriptions
  - Create a prescription
  - Update a prescription
  - Sign a prescription

  **Visit**
  - Get a visit
  - Get many visits
  - Create a visit
  - Update a visit

  **And 20+ more resources** including Doctors, Clinics, Treatment Types, Visit Types, Leads, Payments, Communication Records, Media, Webhooks, and more.

  ## Trigger

  **NextMotion Trigger** - Real-time webhook triggers for:
  - Patient created, updated, deleted
  - Appointment created, updated, deleted, started, ended
  - Invoice created, validated, paid
  - Quote created, validated, accepted
  - Payment created
  - Lead created
  - Visit created
  - And more...

  ## Credentials

  1. Log in to your NextMotion account
  2. Go to **Settings → API Keys**
  3. Generate a new API key and copy it immediately
  4. In n8n, create a **NextMotion API** credential and paste the key

  > API keys don't expire. Store securely and regenerate if compromised.

  ## Compatibility

  Compatible with n8n@1.60.0 or later

  ## Resources

  - [n8n Community Nodes](https://docs.n8n.io/integrations/community-nodes/)
  - [NextMotion API Docs](https://api.nextmotion.net/open_api/docs/redoc)

  ## License

  [MIT](LICENSE.md)

ai_documentation_summary:
  {"purpose":"Enables automation of patient care management workflows by interacting with the NextMotion practice management system API.","capabilities":["CRUD operations for patients, appointments, invoices, quotes, consultations, treatments, prescriptions, and visits","Real-time webhook triggers for patient, appointment, invoice, quote, payment, lead, and visit events","Generation of invoices and quotes from consultations","Upload of consent forms for treatments","Signing of prescriptions","Payment validation and processing","Access to over 20 additional resources including doctors, clinics, and communication records"],"authentication":"API key required","commonUseCases":["Automating appointment scheduling and rescheduling","Generating invoices and quotes directly from consultation records","Tracking patient statistics and visit history","Automating payment validation and processing","Real-time notifications for patient and appointment status changes"],"limitations":[],"relatedNodes":[]}


